Change to priority classes. Will probably require some fixings.

- Now using priority classes internally and in protocol
- Converting (depreciated) priorty numbers to the classes BACKGROUND,
  INFO and FOREGROUND
- Added menu_goto command (only works when menu not active)
This commit is contained in:
robijn
2003-02-27 21:20:20 +00:00
parent 4a7ef8d847
commit 71922063b8
19 changed files with 372 additions and 292 deletions
+27 -12
View File
@@ -70,6 +70,10 @@ int menuscreens_init()
/* Create screen */
menuscreen = screen_create ("_menu_screen", NULL);
menuscreen->priority = PRI_HIDDEN;
active_menuitem = NULL;
screenlist_add (menuscreen);
/* Build menu */
menuscreen_create_menu ();
@@ -91,13 +95,14 @@ int menuscreens_shutdown()
menuscreen_switch_item (NULL);
/* Destroy the menuscreen */
screenlist_remove (menuscreen);
screen_destroy (menuscreen);
menuscreen = NULL;
screens_menu = NULL;
/* Destroy all menus */
menuitem_destroy (main_menu);
main_menu = NULL;
screens_menu = NULL;
/* Forget menu's key reservations */
input_release_client_keys (NULL);
@@ -148,6 +153,7 @@ bool is_menu_key (char * key)
void menuscreen_switch_item (MenuItem * new_menuitem)
/* This function changes the menuitem to the given one, and does necesary
* actions.
* To leave the menu system, specify NULL for new_menuitem.
* The item will not be reset when the new item is a child of the last one.
*/
{
@@ -162,21 +168,13 @@ void menuscreen_switch_item (MenuItem * new_menuitem)
if (!old_menuitem && !new_menuitem) {
/* Nothing to be done */
} else if (old_menuitem && !new_menuitem) {
/* TODO: send menu to backgr */
if (screenlist_remove (menuscreen) < 0) {
report (RPT_ERR, "%s: Error unqueueing menu screen", __FUNCTION__);
return;
}
menuscreen->priority = PRI_HIDDEN;
} else if (!old_menuitem && new_menuitem) {
/* Menu is becoming active */
menuitem_reset (active_menuitem);
menuitem_rebuild_screen (active_menuitem, menuscreen);
if (screenlist_add (menuscreen) < 0) {
report (RPT_ERR, "%s: Error queueing menu screen", __FUNCTION__);
return;
}
/* TODO: raise it ! */
menuscreen->priority = PRI_INPUT;
} else {
/* We're left with the usual case: a menu level switch */
if( old_menuitem->parent != new_menuitem) {
@@ -184,6 +182,7 @@ void menuscreen_switch_item (MenuItem * new_menuitem)
}
menuitem_rebuild_screen (active_menuitem, menuscreen);
}
return;
}
void menuscreen_key_handler (char *key)
@@ -430,10 +429,11 @@ menuscreen_add_screen (Screen * s)
mi = menuitem_create_numeric ("", NULL, "Duration", 2, 3600, s->duration);
menu_add_item (m, mi);
mi = menuitem_create_numeric ("", NULL, "Priority", 0, 255, s->priority);
mi = menuitem_create_ring ("", NULL, "Priority", "Hidden\tBackground\tForeground\tAlert\tInput", s->priority);
menu_add_item (m, mi);
}
void
menuscreen_remove_screen (Screen * s)
{
@@ -450,3 +450,18 @@ menuscreen_remove_screen (Screen * s)
menu_remove_item (screens_menu, m);
menuitem_destroy (m);
}
int
menuscreen_goto (Menu * menu)
{
if( !active_menuitem ) {
/* OK we can do it */
menuscreen_switch_item (menu);
return 0;
}
else {
/* Sorry there is a menu already active. */
return -1;
}
}