r673 - trunk/game

black at icculus.org black at icculus.org
Mon Mar 13 15:59:04 EST 2006


Author: black
Date: 2006-03-13 15:59:04 -0500 (Mon, 13 Mar 2006)
New Revision: 673

Modified:
   trunk/game/m_menucore.c
Log:
Change a few more functions to use subnamespaces (its consistent with the current relationship between Item and SubMenu).
Menu_GetItem is now the last non-global function that doesn't belong to any item namespace.


Modified: trunk/game/m_menucore.c
===================================================================
--- trunk/game/m_menucore.c	2006-03-12 22:30:24 UTC (rev 672)
+++ trunk/game/m_menucore.c	2006-03-13 20:59:04 UTC (rev 673)
@@ -17,10 +17,10 @@
 -make it more strict and error out earlier
 */
 
-void Menu_FinishMenu(Menu_SubMenu *menu);
+void Menu_SubMenu_Finish(Menu_SubMenu *menu);
 
 // if the item has no parent, it doesn't do anything
-void Menu_RemoveFromParent(Menu_Item *item)
+void Menu_Item_RemoveFromParent(Menu_Item *item)
 {
 	if (item->parent)
 	{
@@ -53,7 +53,7 @@
 	}
 }
 
-void Menu_AddAtFront(Menu_SubMenu *parent, Menu_Item *item)
+void Menu_SubMenu_AddAtFront(Menu_SubMenu *parent, Menu_Item *item)
 {
 	assert( item != NULL );
 	assert( parent != NULL );
@@ -72,7 +72,7 @@
 	}
 }
 
-void Menu_AddToBack(Menu_SubMenu *parent, Menu_Item *item )
+void Menu_SubMenu_AddToBack(Menu_SubMenu *parent, Menu_Item *item )
 {
 	assert( item != NULL );
 	assert( parent != NULL );
@@ -83,30 +83,55 @@
 	parent->subitems = item;
 }
 
-void Menu_BringToFront(Menu_SubMenu *menu)
+void Menu_SubMenu_BringToFront(Menu_Item *item)
 {
-	Menu_SubMenu *parent = menu->super.parent;
+	Menu_SubMenu *parent = item->parent;
 	// FIXME: fix this
 	if( !parent ) {
 		return;
 	}
-	Menu_RemoveFromParent(&menu->super);
-	Menu_AddAtFront(parent, &menu->super);
+	Menu_Item_RemoveFromParent(item);
+	Menu_SubMenu_AddAtFront(parent, item);
 }
 
-// TODO: add fully qualified names with a scope operator (:: or.?)
-void *Menu_GetItem(Menu_SubMenu *parent, char *name)
+// TODO: use NString for everything
+// TODO: this is the last function that doesnt belong to an item type (we may need to rethink its design)
+void *Menu_GetItem(Menu_SubMenu *parent, const char *name)
 {
-	Menu_Item *sub;
-	if (!parent)
-		parent = &Menu.rootmenu;
+	Menu_SubMenu *current_parent;
+	Menu_Item *item;
+	const char *name_start, *name_end;
 
-	for (sub = parent->subitems; sub; sub = sub->next)
+	current_parent = parent;
+	if (!current_parent) 
 	{
-		if (!strcmp(sub->name, name))
-			return sub;
+		current_parent = &Menu.rootmenu;
 	}
-	return NULL;
+	
+	name_start = name;	
+	while (*name_start) 
+	{
+		name_end = strchr(name_start, '.');
+		if (name_end == NULL) 
+		{
+			name_end = name + String_Length(name_start);
+		}
+		for (item = parent->subitems; item; item = item->next)
+		{
+			if (String_NCompare(item->name, name, name_end - name_start) == 0) 
+			{
+				break;
+			}
+		}
+		if (item == NULL) 
+		{
+			break;
+		}
+		name_start = name_end + 1;
+		// FIXME: we don't really know whether item is really a submenu...
+		current_parent = (Menu_SubMenu*) item;
+	}
+	return item;
 }
 
 void Menu_MoveToCenter(Menu_SubMenu *menu)
@@ -144,7 +169,7 @@
 
 void Menu_Generic_Destroy(Menu_Item *item)
 {
-	Menu_RemoveFromParent(item);
+	Menu_Item_RemoveFromParent(item);
 
 	if (Menu.grabs == item)
 		Menu.grabs = NULL;	//hrm.
@@ -168,7 +193,7 @@
 
 	if (parent) 
 	{
-		Menu_AddToBack(parent, item);
+		Menu_SubMenu_AddToBack(parent, item);
 	}
 
 	return item;
@@ -398,7 +423,7 @@
 		NUint i;
 
 		item->popup = Menu_SubMenu_Create(&Menu.rootmenu);
-		Menu_BringToFront(item->popup);
+		Menu_SubMenu_BringToFront(&item->popup->super);
 		interior = Menu_SubMenu_Create(item->popup);
 		interior->allowclose = false;
 		Menu.grabs = &item->popup->super;
@@ -418,9 +443,9 @@
 
 		item->popup->subwindow.pos[0] = item->popup->super.pos[0];
 		item->popup->subwindow.pos[1] = item->popup->super.pos[1];
-		Menu_FinishMenu(interior);
+		Menu_SubMenu_Finish(interior);
 		interior->super.size[1] = ((i>64)?64:i);
-		Menu_FinishMenu(item->popup);
+		Menu_SubMenu_Finish(item->popup);
 		return true;
 	}
 	return false;
@@ -721,7 +746,7 @@
 		item->super.pos[1] += Input.mouse[1] - item->dragmousepos[1];
 		item->dragmousepos[0] = Input.mouse[0];
 		item->dragmousepos[1] = Input.mouse[1];
-//		Menu_FinishMenu(item->super.parent);
+//		Menu_SubMenu_Finish(item->super.parent);
 	}
 
 	for (j = 0; j < 2; j++)
@@ -805,7 +830,7 @@
 {
 	Menu_Item *subitem;
 
-	Menu_BringToFront(item);
+	Menu_SubMenu_BringToFront(&item->super);
 
 	subitem = item->selecteditem;
 	if (item->selecteditem)
@@ -814,7 +839,7 @@
 
 	if (item->allowclose && sym == SDLK_ESCAPE)
 	{
-		Menu_RemoveFromParent(&item->super);
+		Menu_Item_RemoveFromParent(&item->super);
 		item->super.Destroy(item);
 		return true;
 	}
@@ -824,25 +849,25 @@
 		if (sym == SDLK_LEFT)
 		{
 			item->super.pos[0] -= 4;
-			Menu_FinishMenu(item);
+			Menu_SubMenu_Finish(item);
 			return true;
 		}
 		if (sym == SDLK_UP)
 		{
 			item->super.pos[1] -= 4;
-			Menu_FinishMenu(item);
+			Menu_SubMenu_Finish(item);
 			return true;
 		}
 		if (sym == SDLK_RIGHT)
 		{
 			item->super.pos[0] += 4;
-			Menu_FinishMenu(item);
+			Menu_SubMenu_Finish(item);
 			return true;
 		}
 		if (sym == SDLK_DOWN)
 		{
 			item->super.pos[1] += 4;
-			Menu_FinishMenu(item);
+			Menu_SubMenu_Finish(item);
 			return true;
 		}
 
@@ -880,7 +905,7 @@
 	menu = (Menu_SubMenu*) Menu_Generic_Create(NULL, 0, 0, sizeof(Menu_SubMenu));
 
 	if( parent ) {
-		Menu_AddAtFront(parent, &menu->super);
+		Menu_SubMenu_AddAtFront(parent, &menu->super);
 	}
 
 	menu->super.MouseMove = Menu_SubMenu_MouseMove;
@@ -893,8 +918,7 @@
 	return menu;
 }
 
-// TODO: change this name, too
-void Menu_FinishMenu(Menu_SubMenu *menu)
+void Menu_SubMenu_Finish(Menu_SubMenu *menu)
 {
 	Menu_Item *subitem;
 	NSint maxpos[2];
@@ -919,8 +943,7 @@
 	menu->subwindow.size[1] = maxpos[1];
 }
 
-// TODO: change this name as well?
-void Menu_ArrangeSubItems(Menu_SubMenu *menu, Nbool horizontal, NSint pad, Menu_ArrangeStyle arrange)
+void Menu_SubMenu_Arrange(Menu_SubMenu *menu, Nbool horizontal, NSint pad, Menu_ArrangeStyle arrange)
 {
 	Menu_Item *sitem;
 	NSint axis, otheraxis;
@@ -1067,7 +1090,7 @@
 	Menu_Picture_Create(child, 0, 0, imagesize, imagesize, "lhfont.tga", NULL);
 
 
-	Menu_FinishMenu(child);
+	Menu_SubMenu_Finish(child);
 	child->allowclose = false;
 	Menu_Picture_Create(child, 0, 0, child->super.size[0], child->super.size[1], "maps/test/skybox_ny.tga", NULL);
 
@@ -1076,7 +1099,7 @@
 	child->super.size[0] = windowsize;
 	child->super.size[1] = windowsize;
 
-	Menu_FinishMenu(menu);
+	Menu_SubMenu_Finish(menu);
 	Menu_Picture_Create(menu, 0, 0, menu->super.size[0], menu->super.size[1], "maps/test/skybox_ny.tga", NULL);
 }
 static Shell_SymbolDecl Menu_Menu_Test_Decl = {
@@ -1111,9 +1134,9 @@
 	Menu_Edit_Create(menu, 0, 56, "EditItem");
 	Menu_Combo_Create(menu, 0, 56, 21*8, "ComboItem", "Option 1|Option 2|Option 3|Fuzzy Little Bunnies|Big Rocket Launcher|Children|Lightning Gun|Newborn Chicks|Grenade Launcher|Rodents|Nukes");
 
-	Menu_FinishMenu(menu);
-	Menu_ArrangeSubItems(menu, false, 0, MENU_ARRANGESTYLE_CENTER);
-	Menu_FinishMenu(menu);
+	Menu_SubMenu_Finish(menu);
+	Menu_SubMenu_Arrange(menu, false, 0, MENU_ARRANGESTYLE_CENTER);
+	Menu_SubMenu_Finish(menu);
 	Menu_Picture_Create(menu, 0, 0, menu->super.size[0], menu->super.size[1], "maps/test/skybox_ny.tga", NULL);
 
 	Menu_MoveToCenter(menu);
@@ -1156,7 +1179,7 @@
 	Menu_Text_Create(menu, 0, 16, "Yes, and wipe my harddrive too.", "quit\n", NULL);
 	Menu_Text_Create(menu, 0, 24, "No. I want to keep playing this awesome game", "menu_close\n", NULL);
 
-	Menu_FinishMenu(menu);
+	Menu_SubMenu_Finish(menu);
 
 	Menu_Picture_Create(menu, 0, 0, menu->super.size[0], menu->super.size[1], "maps/test/skybox_ny.tga", NULL);
 




More information about the neither-commits mailing list