r4892 - in trunk/data/qcsrc/menu: . nexuiz

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Sun Oct 26 14:27:00 EDT 2008


Author: div0
Date: 2008-10-26 14:27:00 -0400 (Sun, 26 Oct 2008)
New Revision: 4892

Modified:
   trunk/data/qcsrc/menu/menu.qc
   trunk/data/qcsrc/menu/nexuiz/dialog_settings.c
   trunk/data/qcsrc/menu/nexuiz/dialog_settings_misc.c
   trunk/data/qcsrc/menu/nexuiz/mainwindow.c
   trunk/data/qcsrc/menu/nexuiz/skinlist.c
Log:
improve skin selector


Modified: trunk/data/qcsrc/menu/menu.qc
===================================================================
--- trunk/data/qcsrc/menu/menu.qc	2008-10-26 17:08:59 UTC (rev 4891)
+++ trunk/data/qcsrc/menu/menu.qc	2008-10-26 18:27:00 UTC (rev 4892)
@@ -408,6 +408,33 @@
 	}
 };
 
+void m_activate_window(entity wnd)
+{
+	entity par;
+	par = wnd.parent;
+	if(par)
+		m_activate_window(par);
+
+	if(par.instanceOfModalController)
+	{
+		// tabs
+		par.initializeDialog(par, wnd);
+	}
+	else if(par.instanceOfNexposee)
+	{
+		// nexposee (sorry for violating abstraction here)
+		par.selectedChild = wnd;
+		par.animationState = 1;
+		setFocusContainer(par, NULL);
+	}
+	else if(par.instanceOfContainer)
+	{
+		// other containers
+		if(par.focused)
+			par.setFocus(par, wnd);
+	}
+}
+
 void(string itemname) m_goto =
 {
 	entity e;
@@ -419,17 +446,17 @@
 			m_hide();
 		else
 		{
-			main.initializeDialog(main, main.firstChild);
+			m_activate_window(main.mainNexposee);
 			m_display();
 		}
 	}
 	else
 	{
 		e = findstring(NULL, name, itemname);
-		if(e && e.parent == main)
+		if(e)
 		{
 			m_hide();
-			main.initializeDialog(main, e);
+			m_activate_window(e);
 			m_display();
 		}
 	}
@@ -440,8 +467,5 @@
 	if(!menuInitialized)
 		return;
 	// TODO add code to switch back to the skin selector (no idea how to do it now)
-	m_hide();
-	//main.initializeDialog(main, main.firstChild);
-	//main.firstChild.setFocus(main.firstChild, findstring(NULL, name, "__skinselect_window"));
-	m_display();
+	m_goto("skinselector");
 }

Modified: trunk/data/qcsrc/menu/nexuiz/dialog_settings.c
===================================================================
--- trunk/data/qcsrc/menu/nexuiz/dialog_settings.c	2008-10-26 17:08:59 UTC (rev 4891)
+++ trunk/data/qcsrc/menu/nexuiz/dialog_settings.c	2008-10-26 18:27:00 UTC (rev 4892)
@@ -6,7 +6,6 @@
 	ATTRIB(NexuizSettingsDialog, intendedWidth, float, 0.96)
 	ATTRIB(NexuizSettingsDialog, rows, float, 17)
 	ATTRIB(NexuizSettingsDialog, columns, float, 6)
-	ATTRIB(NexuizSettingsDialog, name, string, "__skinselect_window")
 ENDCLASS(NexuizSettingsDialog)
 #endif
 

Modified: trunk/data/qcsrc/menu/nexuiz/dialog_settings_misc.c
===================================================================
--- trunk/data/qcsrc/menu/nexuiz/dialog_settings_misc.c	2008-10-26 17:08:59 UTC (rev 4891)
+++ trunk/data/qcsrc/menu/nexuiz/dialog_settings_misc.c	2008-10-26 18:27:00 UTC (rev 4892)
@@ -5,7 +5,6 @@
 	ATTRIB(NexuizMiscSettingsTab, intendedWidth, float, 0.9)
 	ATTRIB(NexuizMiscSettingsTab, rows, float, 15)
 	ATTRIB(NexuizMiscSettingsTab, columns, float, 6.5)
-
 ENDCLASS(NexuizMiscSettingsTab)
 entity makeNexuizMiscSettingsTab();
 #endif
@@ -28,16 +27,11 @@
 	me.TR(me);
 		me.TD(me, me.rows - 2, 3, sk = makeNexuizSkinList());		
 	me.gotoRC(me, me.rows - 1, 0);
-		me.TDempty(me, 0.5);
-		me.TD(me, 1, 2, e = makeNexuizButton("Apply", '0 0 0'));
-			e.onClick = setSkin;
+		me.TD(me, 1, 3, e = makeNexuizButton("Apply immediately", '0 0 0'));
+			e.onClick = SetSkin_Click;
 			e.onClickEntity = sk;
-		me.TDempty(me, 0.5);
 		
-	
-	
 	me.gotoRC(me, 0, 3.5); me.setFirstColumn(me, me.currentColumn);
-
 		me.TD(me, 1, 3, e = makeNexuizCheckBox(0, "cl_autodemo", "Demo recording"));
 	me.TR(me);
 	me.TR(me);
@@ -58,7 +52,5 @@
 		me.TD(me, 1, 2.8/3, e = makeNexuizRadioButton(1, "showspeed", "3", "km/h"));
 		me.TD(me, 1, 2.8/3, e = makeNexuizRadioButton(1, "showspeed", "4", "mph"));
 		me.TD(me, 1, 2.8/3, e = makeNexuizRadioButton(1, "showspeed", "5", "knots"));
-
-	
 }
 #endif

Modified: trunk/data/qcsrc/menu/nexuiz/mainwindow.c
===================================================================
--- trunk/data/qcsrc/menu/nexuiz/mainwindow.c	2008-10-26 17:08:59 UTC (rev 4891)
+++ trunk/data/qcsrc/menu/nexuiz/mainwindow.c	2008-10-26 18:27:00 UTC (rev 4892)
@@ -7,6 +7,7 @@
 	ATTRIB(MainWindow, userbindEditDialog, entity, NULL)
 	ATTRIB(MainWindow, winnerDialog, entity, NULL)
 	ATTRIB(MainWindow, radarDialog, entity, NULL)
+	ATTRIB(MainWindow, mainNexposee, entity, NULL)
 	ATTRIB(MainWindow, fadedAlpha, float, SKINALPHA_BEHIND)
 ENDCLASS(MainWindow)
 #endif
@@ -53,7 +54,7 @@
 	i.configureDialog(i);
 	me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
 
-	n = spawnNexuizNexposee();
+	me.mainNexposee = n = spawnNexuizNexposee();
 	/*
 		if(checkextension("DP_GECKO_SUPPORT"))
 		{

Modified: trunk/data/qcsrc/menu/nexuiz/skinlist.c
===================================================================
--- trunk/data/qcsrc/menu/nexuiz/skinlist.c	2008-10-26 17:08:59 UTC (rev 4891)
+++ trunk/data/qcsrc/menu/nexuiz/skinlist.c	2008-10-26 18:27:00 UTC (rev 4892)
@@ -2,27 +2,34 @@
 CLASS(NexuizSkinList) EXTENDS(NexuizListBox)
 	METHOD(NexuizSkinList, configureNexuizSkinList, void(entity))
 	ATTRIB(NexuizSkinList, rowsPerItem, float, 4)
-	METHOD(NexuizMapList, resizeNotify, void(entity, vector, vector, vector, vector))
-	METHOD(NexuizSkinList, draw, void(entity))
+	METHOD(NexuizSkinList, resizeNotify, void(entity, vector, vector, vector, vector))
 	METHOD(NexuizSkinList, drawListBoxItem, void(entity, float, vector, float))
 	METHOD(NexuizSkinList, getSkins, void(entity))
+	METHOD(NexuizSkinList, setSkin, void(entity))
+	METHOD(NexuizSkinList, loadCvars, void(entity))
+	METHOD(NexuizSkinList, saveCvars, void(entity))
+	METHOD(NexuizSkinList, skinName, string(entity, float))
+	METHOD(NexuizSkinList, clickListBoxItem, void(entity, float, vector))
+	METHOD(NexuizSkinList, keyDown, float(entity, float, float, float))
 
-	ATTRIB(NexuizSkinList, currentskin, string, "")
-	ATTRIB(NexuizSkinList, skinlist, string, "")	
+	ATTRIB(NexuizSkinList, skinlist, float, -1)
 	ATTRIB(NexuizSkinList, realFontSize, vector, '0 0 0')
 	ATTRIB(NexuizSkinList, columnPreviewOrigin, float, 0)
 	ATTRIB(NexuizSkinList, columnPreviewSize, float, 0)
 	ATTRIB(NexuizSkinList, columnNameOrigin, float, 0)
 	ATTRIB(NexuizSkinList, columnNameSize, float, 0)
-	ATTRIB(NexuizSkinList, checkMarkOrigin, vector, '0 0 0')
-	ATTRIB(NexuizSkinList, checkMarkSize, vector, '0 0 0')
-	ATTRIB(NexuizSkinList, realUpperMargin1, float, 0)	
+	ATTRIB(NexuizSkinList, realUpperMargin, float, 0)	
 	ATTRIB(NexuizSkinList, origin, vector, '0 0 0')
 	ATTRIB(NexuizSkinList, itemAbsSize, vector, '0 0 0')
+
+	ATTRIB(NexuizSkinList, lastClickedSkin, float, -1)
+	ATTRIB(NexuizSkinList, lastClickedTime, float, 0)
+
+	ATTRIB(NexuizMiscSettingsTab, name, string, "skinselector")
 ENDCLASS(NexuizSkinList)
 
 entity makeNexuizSkinList();
-void setSkin(entity btn, entity me);
+void SetSkin_Click(entity btn, entity me);
 #endif
 
 #ifdef IMPLEMENTATION
@@ -39,30 +46,44 @@
 {
 	me.configureNexuizListBox(me);
 	me.getSkins(me);
-	me.currentskin = strzone(cvar_string("menu_skin"));
+	me.loadCvars(me);
 }
 
-void getSkinsNexuizSkinList(entity me)
+void loadCvarsNexuizSkinList(entity me)
 {
-	float glob,i;
-	string s,_skinlist;
-		
-	glob = search_begin("gfx/menu/*/skinvalues.txt", TRUE, TRUE);
-	if(glob < 0)
-		return;	
-	for (i=0 ; i < search_getsize(glob) ; ++i)
+	string s;
+	float i, n;
+	s = cvar_string("menu_skin");
+	n = me.nItems;
+	for(i = 0; i < n; ++i)
 	{
-		s=search_getfilename(glob, i);
-		// s contain gfx/menu/skinname/skinvalues.txt
-		if ( tokenizebyseparator(s, "/") == 4 )
-			// add skinname to _skinlist, manage skinname with separates words
-			_skinlist=strcat(_skinlist, "\"", argv(2), "\"", " ");			
+		if(me.skinName(me, i) == s)
+		{
+			me.selectedItem = i;
+			break;
+		}
 	}
+}
 
-	me.nItems = i;
-	me.skinlist = strzone(_skinlist);
+void saveCvarsNexuizSkinList(entity me)
+{
+	cvar_set("menu_skin", me.skinName(me, me.selectedItem));
+}
+
+string skinNameNexuizSkinList(entity me, float i)
+{
+	string s;
+	s = search_getfilename(me.skinlist, i);
+	s = substring(s, 9, strlen(s) - 9 - 15);  // gfx/menu/, skinvalues.txt
+	return s;
+}
+
+void getSkinsNexuizSkinList(entity me)
+{
+	float glob,i;
 		
-	search_end(glob);		
+	me.skinlist = search_begin("gfx/menu/*/skinvalues.txt", TRUE, TRUE);
+	me.nItems = search_getsize(me.skinlist);
 }
 
 void resizeNotifyNexuizSkinList(entity me, vector relOrigin, vector relSize, vector absOrigin, vector absSize)
@@ -73,58 +94,60 @@
 
 	me.realFontSize_y = me.fontSize / (me.itemAbsSize_y = (absSize_y * me.itemHeight));
 	me.realFontSize_x = me.fontSize / (me.itemAbsSize_x = (absSize_x * (1 - me.controlWidth)));
-	me.realUpperMargin1 = 0.5 * (1 - 2.5 * me.realFontSize_y);
-	me.realUpperMargin2 = me.realUpperMargin1 + 1.5 * me.realFontSize_y;
+	me.realUpperMargin = 0.5 * (1 - me.realFontSize_y);
 
 	me.columnPreviewOrigin = 0;
 	me.columnPreviewSize = me.itemAbsSize_y / me.itemAbsSize_x * 4 / 3;
 	me.columnNameOrigin = me.columnPreviewOrigin + me.columnPreviewSize + me.realFontSize_x;
 	me.columnNameSize = 1 - me.columnPreviewSize - 2 * me.realFontSize_x;
-
-	me.checkMarkSize = (eX * (me.itemAbsSize_y / me.itemAbsSize_x) + eY) * 0.5;
-	me.checkMarkOrigin = eY + eX * (me.columnPreviewOrigin + me.columnPreviewSize) - me.checkMarkSize;
 }
 
-void drawNexuizSkinList(entity me)
-{
-	drawListBox(me);
-}
-
 void drawListBoxItemNexuizSkinList(entity me, float i, vector absSize, float isSelected)
 {
-	
 	string s;
 	float theAlpha;
 	
-	tokenize_sane(me.skinlist);	
-		
 	if(isSelected)
 		draw_Fill('0 0 0', '1 1 0', SKINCOLOR_LISTBOX_SELECTED, SKINALPHA_LISTBOX_SELECTED);
 		
-	if( me.currentskin == argv(i) )
-		draw_Fill('0 0 0', '1 1 0', SKINCOLOR_MAPLIST_INCLUDEDBG, SKINALPHA_MAPLIST_INCLUDEDBG);
-		
-	theAlpha = SKINALPHA_MAPLIST_INCLUDEDFG;
-		
-	draw_Picture(me.columnPreviewOrigin * eX, strcat("/gfx/menu/", argv(i), "/skinpreview"), me.columnPreviewSize * eX + eY, '1 1 1', theAlpha);
+	s = me.skinName(me, i);
+	draw_Picture(me.columnPreviewOrigin * eX, strcat("/gfx/menu/", s, "/skinpreview"), me.columnPreviewSize * eX + eY, '1 1 1', 1);
 	
-	s = draw_TextShortenToWidth(argv(i), me.columnNameSize / me.realFontSize_x, 0);
-	draw_Text(me.realUpperMargin1 * eY + (me.columnNameOrigin + 0.00 * (me.columnNameSize - draw_TextWidth(s, 0) * me.realFontSize_x)) * eX, s, me.realFontSize, SKINCOLOR_MAPLIST_TITLE, theAlpha, 0);
-	
+	s = draw_TextShortenToWidth(s, me.columnNameSize / me.realFontSize_x, 0);
+	draw_Text(me.realUpperMargin * eY + (me.columnNameOrigin + 0.00 * (me.columnNameSize - draw_TextWidth(s, 0) * me.realFontSize_x)) * eX, s, me.realFontSize, '1 1 1', SKINALPHA_TEXT, 0);
 }
 
-void setSkin(entity btn, entity me)
+void setSkinNexuizSkinList(entity me)
 {
-	float i;
-	
-	i = me.selectedItem;
-	
-	if(i >= me.nItems || i < 0)
-		return;
-		
-	tokenize_sane(me.skinlist);
-	cvar_set("menu_skin", argv(i));
-	localcmd("\nmenu_restart\ntogglemenu\ndefer 1 \"menu_cmd skinselect\"\n");
+	me.saveCvars(me);
+	localcmd("\nmenu_restart\ntogglemenu\ndefer 0.1 \"menu_cmd skinselect\"\n");
+}
 
+void SetSkin_Click(entity btn, entity me)
+{
+	me.setSkin(me);
 }
+
+void clickListBoxItemNexuizSkinList(entity me, float i, vector where)
+{
+	if(i == me.lastClickedSkin)
+		if(time < me.lastClickedTime + 0.3)
+		{
+			// DOUBLE CLICK!
+			me.setSelected(me, i);
+			me.setSkin(me);
+		}
+	me.lastClickedSkin = i;
+	me.lastClickedTime = time;
+}
+
+float keyDownNexuizSkinList(entity me, float scan, float ascii, float shift)
+{
+	if(scan == K_ENTER) {
+		me.setSkin(me);
+		return 1;
+	}
+	else
+		return keyDownListBox(me, scan, ascii, shift);
+}
 #endif




More information about the nexuiz-commits mailing list