C - Menüstruktur

OP #5351465
Lesenswert?
• ▲
▼
Halli Hallo,

benötige mal euren Rat / Hilfe!
Habe mir ein "einfaches" Menü gebastelt, mit hilfe von einer Struktur 
(menue_t).
1
typedef struct
2
{
3
  #define MENUE_EXIT    111
4
  
5
  char *name;
6
  uint8_t ( *fnc )( void );
7
  uint8_t menuePos;
8
}menue_t;


Dann erstelle Ich mir ein Array aus dieser Struktur..
1
menue_t menue[] =
2
{
3
  { "Time"  , menueSetTime      , 0    },
4
  { "Date"  , cnfgDate        , 1    },
5
  { "Alarm."  , menueSetAlarm      , 2    },
6
  usw..
7
};

Untermenüs..
1
menue_t menueAlert[]=
2
{
3
  {"-A1"    , NULL      ,  0    },
4
  {"-A2"    , NULL      ,  1    },
5
  {"-A3"    , NULL      ,  2    },
6
  {"-A4"    , NULL      ,  3    },
7
  {"Cycl."  , NULL      ,  4    },
8
  {"Exit"    , NULL      ,  5    },
9
};

Und eine Funktion die mir das ganze auf den Bildschirm wirft..
1
uint8_t openMenue( menue_t *m , size_t size )
2
{
3
  uint8_t index = menueCursor;
4
  
5
  button.all    = 0;
6
  flag.menueOpen  = 1;
7
  menueTimeout  = 0;
8
  
9
  clearDisplay( true , false );
10
  
11
  while (1)
12
  {  
13
    if ( menueTimeout > 500 )
14
    {
15
      menueTimeout = 0;
16
      clearDisplay( true , false );
17
      return MENUE_EXIT;  
18
    }
19
    
20
    if ( button.pressed.up )
21
    {
22
      button.all = 0;
23
      menueTimeout = 0;
24
      clearDisplay( true , false );
25
      if ( index < ( size - 1 ) )
26
      {
27
        index++;
28
      }
29
    }
30
    
31
    if ( button.pressed.down )
32
    {
33
      button.all = 0;
34
      menueTimeout = 0;
35
      clearDisplay( true, false );
36
      if ( index > 0 )
37
      {
38
        index--;
39
      }
40
    }
41
    
42
    if ( button.pressed.exit )
43
    {
44
      button.all = 0;
45
      menueTimeout = 0;
46
      flag.menueExit = 1;
47
      clearDisplay( true , false );
48
      return 111;
49
    }
50
    
51
    putStr( m[index].name , 0 );
52
    
53
    if ( button.pressed.enter )
54
    {
55
      button.all = 0;
56
      menueTimeout = 0;
57
      
58
      clearDisplay( true , false );
59
      
60
      menueCursor = 0;
61
      
62
      if ( m[index].fnc != NULL)
63
      {
64
        m[index].fnc();
65
        menueCursor = m[index].menuePos;    
66
      }
67
      
68
      clearDisplay( true , false );
69
      
70
      menueTimeout = 0;
71
      flag.menueExit = 0;
72
      
73
      return index;
74
    }
75
  }
76
  
77
  flag.menueOpen = 0;
78
  
79
  return 0;
80
}

Funktioniert soweit auch ganz gut. Wenn Ich jetzt in mein Untermenü 
(menueAlert) bin und etwas einstelle, komme Ich nach der Einstellung 
wieder zu meinem "Hauptmenüpunkt" ("Alarm.").

Ab hier stehe Ich auf dem Schlauch. Eigentlich möchte Ich gar nicht 
wieder zu diesem Punkt, sondern in meinem Untermenü bleiben solange bis 
Ich es halt explizit befehle.

Wie stelle Ich das nun am besten an?

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.