Files
lcdproc/old/menu.c
T
1999-12-09 23:15:14 +00:00

163 lines
2.8 KiB
C

#include "menu.h"
/////////////////////////////////////////
// THIS IS NOT READY YET!
/////////////////////////////////////////
/////////////////////////////////////////////////////////
// Read menu.h to find out how this works.
//
// Internal record of all important menu info...
typedef struct MenuInfo
{
MenuItem *menu; // User-specified menu information
struct MenuInfo *parent; // NULL if root-level
int items; // number of items in the menu
int sel; // selected item
} MenuInfo;
// Main menu function...
int do_menu(MenuItem *menu, MenuInfo *parent);
void FillMenuInfo(MenuInfo *m, MenuItem *menu, MenuInfo *parent);
void DrawMenu(MenuInfo *m);
void DrawMenuItem(MenuInfo *m, int item);
///////////////////////////////////////////////////////////////////
// User-callable function...
//
int menu(MenuItem *menu)
{
int ret;
CreateArrows(); // Set custom characters for menu use...
ret = do_menu(menu, NULL);
return ret;
}
int do_menu(MenuItem *menu, MenuInfo *parent)
{
int current;
int uparrow;
int downarrow;
int key;
int err=0;
while(! err)
{
// Draw the menu...
// Wait for input
}
}
int do_menu(MenuItem *menu, MenuInfo *parent)
{
int i;
int items;
MenuInfo ThisMenu;
int old_sel;
int redraw=1;
int ret=0;
FillMenuInfo(&ThisMenu, menu, parent);
//FIXME: Get input here... Move the selection thingy
DrawMenu(&ThisMenu);
do{
//FIXME: Get input here... Move the selection thingy
// Figure out which button should be highlighted...
// And... if the "execute" button was pressed...
if()
{
ThisMenu.sel = i;
}
DrawMenu(&ThisMenu);
redraw = 0;
// Dismiss menu?
if( // cancel was pressed...
)
ret = GUI_CONT;
// pop up another menu?
if( // execute was pressed...
&&ThisMenu.sel >= 0
&&ThisMenu.menu[ThisMenu.sel].child)
{
i = do_menu(ThisMenu.menu[ThisMenu.sel].child, &ThisMenu);
if(i == GUI_OK) ret = GUI_OK;
}
// Or call a function?
else if( // execute was pressed...
&&ThisMenu.sel >= 0
&&ThisMenu.menu[ThisMenu.sel].func)
{
ret = ThisMenu.menu[ThisMenu.sel].func();
//ret = GUI_OK;
}
} while(! ret);
return ret;
}
//////////////////////////////////////////////////////////////////////
// Initializes a menu...
//
void FillMenuInfo(MenuInfo *m, MenuItem *menu, MenuInfo * parent)
{
m->menu = menu;
m->parent = parent;
m->sel = 0;
}
void DrawMenu(MenuInfo *m)
{
int i;
for(i=0; i<m->items; i++)
DrawMenuItem(m, i);
}
void DrawMenuItem(MenuInfo *m, int item)
{
// Figure out how much to scroll down...
// Write each menu item...
// Put arrows where needed (next to current item, and up/down arrow)
// m->menu[item].text holds the text string...
}