r3064 - in trunk/data/qcsrc/menu-div0test: . nexuiz

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Mon Dec 31 08:04:39 EST 2007


Author: div0
Date: 2007-12-31 08:04:38 -0500 (Mon, 31 Dec 2007)
New Revision: 3064

Added:
   trunk/data/qcsrc/menu-div0test/nexuiz/dialog_settings_input_userbind.c
Modified:
   trunk/data/qcsrc/menu-div0test/classes.c
   trunk/data/qcsrc/menu-div0test/nexuiz/dialog_settings_input.c
   trunk/data/qcsrc/menu-div0test/nexuiz/keybinder.c
   trunk/data/qcsrc/menu-div0test/nexuiz/mainwindow.c
   trunk/data/qcsrc/menu-div0test/skin.qh
Log:
editor for user defined key binds now works


Modified: trunk/data/qcsrc/menu-div0test/classes.c
===================================================================
--- trunk/data/qcsrc/menu-div0test/classes.c	2007-12-31 12:22:13 UTC (rev 3063)
+++ trunk/data/qcsrc/menu-div0test/classes.c	2007-12-31 13:04:38 UTC (rev 3064)
@@ -56,3 +56,4 @@
 #include "nexuiz/charmap.c"
 #include "nexuiz/keybinder.c"
 #include "nexuiz/dialog_settings_input.c"
+#include "nexuiz/dialog_settings_input_userbind.c"

Modified: trunk/data/qcsrc/menu-div0test/nexuiz/dialog_settings_input.c
===================================================================
--- trunk/data/qcsrc/menu-div0test/nexuiz/dialog_settings_input.c	2007-12-31 12:22:13 UTC (rev 3063)
+++ trunk/data/qcsrc/menu-div0test/nexuiz/dialog_settings_input.c	2007-12-31 13:04:38 UTC (rev 3064)
@@ -28,10 +28,16 @@
 		me.TD(me, me.rows - 2, 3, kb = makeNexuizKeyBinder());
 	me.gotoXY(me, me.rows - 1, 0);
 	me.TR(me);
-		me.TD(me, 1, 1.5, e = makeNexuizButton("Change...", '0 0 0'));
+		me.TD(me, 1, 1, e = makeNexuizButton("Change key...", '0 0 0'));
 			e.onClick = KeyBinder_Bind_Change;
 			e.onClickEntity = kb;
-		me.TD(me, 1, 1.5, e = makeNexuizButton("Clear", '0 0 0'));
+		me.TD(me, 1, 1, e = makeNexuizButton("Edit...", '0 0 0'));
+			e.onClick = KeyBinder_Bind_Edit;
+			e.onClickEntity = kb;
+			kb.userbindEditButton = e;
+			kb.userbindEditDialog = main.userbindEditDialog;
+			main.userbindEditDialog.keybindBox = kb;
+		me.TD(me, 1, 1, e = makeNexuizButton("Clear", '0 0 0'));
 			e.onClick = KeyBinder_Bind_Clear;
 			e.onClickEntity = kb;
 

Added: trunk/data/qcsrc/menu-div0test/nexuiz/dialog_settings_input_userbind.c
===================================================================
--- trunk/data/qcsrc/menu-div0test/nexuiz/dialog_settings_input_userbind.c	                        (rev 0)
+++ trunk/data/qcsrc/menu-div0test/nexuiz/dialog_settings_input_userbind.c	2007-12-31 13:04:38 UTC (rev 3064)
@@ -0,0 +1,55 @@
+#ifdef INTERFACE
+CLASS(NexuizUserbindEditDialog) EXTENDS(NexuizDialog)
+	METHOD(NexuizUserbindEditDialog, loadUserBind, void(entity, string, string, string))
+	METHOD(NexuizUserbindEditDialog, fill, void(entity))
+	ATTRIB(NexuizUserbindEditDialog, title, string, "User defined key bind")
+	ATTRIB(NexuizUserbindEditDialog, color, vector, SKINCOLOR_DIALOG_USERBIND)
+	ATTRIB(NexuizUserbindEditDialog, intendedWidth, float, 0.7)
+	ATTRIB(NexuizUserbindEditDialog, rows, float, 4)
+	ATTRIB(NexuizUserbindEditDialog, columns, float, 3)
+	ATTRIB(NexuizUserbindEditDialog, keybindBox, entity, NULL)
+
+	ATTRIB(NexuizUserbindEditDialog, nameBox, entity, NULL)
+	ATTRIB(NexuizUserbindEditDialog, commandPressBox, entity, NULL)
+	ATTRIB(NexuizUserbindEditDialog, commandReleaseBox, entity, NULL)
+ENDCLASS(NexuizUserbindEditDialog)
+#endif
+
+#ifdef IMPLEMENTATION
+void NexuizUserbindEditDialog_Save(entity btn, entity me)
+{
+	me.keybindBox.editUserbind(me.keybindBox, me.nameBox.text, me.commandPressBox.text, me.commandReleaseBox.text);
+	Dialog_Close(btn, me);
+}
+
+void loadUserBindNexuizUserbindEditDialog(entity me, string theName, string theCommandPress, string theCommandRelease)
+{
+	me.nameBox.setText(me.nameBox, theName);
+		me.nameBox.keyDown(me.nameBox, K_END, 0, 0);
+	me.commandPressBox.setText(me.commandPressBox, theCommandPress);
+		me.nameBox.keyDown(me.commandPressBox, K_END, 0, 0);
+	me.commandReleaseBox.setText(me.commandReleaseBox, theCommandRelease);
+		me.nameBox.keyDown(me.commandReleaseBox, K_END, 0, 0);
+}
+
+void fillNexuizUserbindEditDialog(entity me)
+{
+	entity e;
+	me.TR(me);
+		me.TD(me, 1, 1, e = makeNexuizTextLabel(0, "Name:"));
+		me.TD(me, 1, me.columns - 1, me.nameBox = makeNexuizInputBox(0, string_null));
+	me.TR(me);
+		me.TD(me, 1, 1, e = makeNexuizTextLabel(0, "Command when pressed:"));
+		me.TD(me, 1, me.columns - 1, me.commandPressBox = makeNexuizInputBox(0, string_null));
+	me.TR(me);
+		me.TD(me, 1, 1, e = makeNexuizTextLabel(0, "Command when released:"));
+		me.TD(me, 1, me.columns - 1, me.commandReleaseBox = makeNexuizInputBox(0, string_null));
+	me.TR(me);
+		me.TD(me, 1, me.columns / 2, e = makeNexuizButton("Save", '0 0 0'));
+			e.onClick = NexuizUserbindEditDialog_Save;
+			e.onClickEntity = me;
+		me.TD(me, 1, me.columns / 2, e = makeNexuizButton("Cancel", '0 0 0'));
+			e.onClick = Dialog_Close;
+			e.onClickEntity = me;
+}
+#endif

Modified: trunk/data/qcsrc/menu-div0test/nexuiz/keybinder.c
===================================================================
--- trunk/data/qcsrc/menu-div0test/nexuiz/keybinder.c	2007-12-31 12:22:13 UTC (rev 3063)
+++ trunk/data/qcsrc/menu-div0test/nexuiz/keybinder.c	2007-12-31 13:04:38 UTC (rev 3064)
@@ -20,10 +20,14 @@
 	ATTRIB(NexuizKeyBinder, lastClickedTime, float, 0)
 	ATTRIB(NexuizKeyBinder, previouslySelected, float, -1)
 	ATTRIB(NexuizKeyBinder, inMouseHandler, float, 0)
+	ATTRIB(NexuizKeyBinder, userbindEditButton, entity, NULL)
+	ATTRIB(NexuizKeyBinder, userbindEditDialog, entity, NULL)
+	METHOD(NexuizKeyBinder, editUserbind, void(entity, string, string, string))
 ENDCLASS(NexuizKeyBinder)
 entity makeNexuizKeyBinder();
 void KeyBinder_Bind_Change(entity btn, entity me);
 void KeyBinder_Bind_Clear(entity btn, entity me);
+void KeyBinder_Bind_Edit(entity btn, entity me);
 #endif
 
 #ifdef IMPLEMENTATION
@@ -82,6 +86,9 @@
 	me.columnKeysSize = me.realFontSize_x * 12;
 	me.columnFunctionSize = 1 - me.columnKeysSize - 2 * me.realFontSize_x;
 	me.columnKeysOrigin = me.columnFunctionOrigin + me.columnFunctionSize + me.realFontSize_x;
+
+	if(me.userbindEditButton)
+		me.userbindEditButton.disabled = (substring(Nexuiz_KeyBinds_Descriptions[me.selectedItem], 0, 1) != "$");
 }
 void KeyBinder_Bind_Change(entity btn, entity me)
 {
@@ -124,6 +131,48 @@
 	}
 	localcmd("\nbind \"", keynumtostring(key), "\" \"", func, "\"\n");
 }
+void editUserbindNexuizKeyBinder(entity me, string theName, string theCommandPress, string theCommandRelease)
+{
+	string func, descr;
+
+	if(!me.userbindEditDialog)
+		return;
+	
+	func = Nexuiz_KeyBinds_Functions[me.selectedItem];
+	if(func == "")
+		return;
+	
+	descr = Nexuiz_KeyBinds_Descriptions[me.selectedItem];
+	if(substring(descr, 0, 1) != "$")
+		return;
+	descr = substring(descr, 1, strlen(descr) - 1);
+
+	// Hooray! It IS a user bind!
+	cvar_set(strcat(descr, "_description"), theName);
+	cvar_set(strcat(descr, "_press"), theCommandPress);
+	cvar_set(strcat(descr, "_release"), theCommandRelease);
+}
+void KeyBinder_Bind_Edit(entity btn, entity me)
+{
+	string func, descr;
+
+	if(!me.userbindEditDialog)
+		return;
+	
+	func = Nexuiz_KeyBinds_Functions[me.selectedItem];
+	if(func == "")
+		return;
+	
+	descr = Nexuiz_KeyBinds_Descriptions[me.selectedItem];
+	if(substring(descr, 0, 1) != "$")
+		return;
+	descr = substring(descr, 1, strlen(descr) - 1);
+
+	// Hooray! It IS a user bind!
+	me.userbindEditDialog.loadUserBind(me.userbindEditDialog, cvar_string(strcat(descr, "_description")), cvar_string(strcat(descr, "_press")), cvar_string(strcat(descr, "_release")));
+
+	DialogOpenButton_Click(btn, me.userbindEditDialog);
+}
 void KeyBinder_Bind_Clear(entity btn, entity me)
 {
 	float n, j, k;
@@ -175,6 +224,8 @@
 	}
 	if(Nexuiz_KeyBinds_Functions[i] != "")
 		me.previouslySelected = i;
+	if(me.userbindEditButton)
+		me.userbindEditButton.disabled = (substring(Nexuiz_KeyBinds_Descriptions[i], 0, 1) != "$");
 	setSelectedListBox(me, i);
 }
 float keyDownNexuizKeyBinder(entity me, float key, float ascii, float shift)

Modified: trunk/data/qcsrc/menu-div0test/nexuiz/mainwindow.c
===================================================================
--- trunk/data/qcsrc/menu-div0test/nexuiz/mainwindow.c	2007-12-31 12:22:13 UTC (rev 3063)
+++ trunk/data/qcsrc/menu-div0test/nexuiz/mainwindow.c	2007-12-31 13:04:38 UTC (rev 3064)
@@ -3,6 +3,7 @@
 	METHOD(MainWindow, configureMainWindow, void(entity))
 	ATTRIB(MainWindow, mutatorsDialog, entity, NULL)
 	ATTRIB(MainWindow, mapInfoDialog, entity, NULL)
+	ATTRIB(MainWindow, userbindEditDialog, entity, NULL)
 ENDCLASS(MainWindow)
 #endif
 
@@ -32,6 +33,10 @@
 	i.configureDialog(i);
 	me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, 1);
 
+	me.userbindEditDialog = i = spawnNexuizUserbindEditDialog();
+	i.configureDialog(i);
+	me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, 1);
+
 	n = spawnNexuizNexposee();
 		if(checkextension("DP_GECKO_SUPPORT"))
 		{

Modified: trunk/data/qcsrc/menu-div0test/skin.qh
===================================================================
--- trunk/data/qcsrc/menu-div0test/skin.qh	2007-12-31 12:22:13 UTC (rev 3063)
+++ trunk/data/qcsrc/menu-div0test/skin.qh	2007-12-31 13:04:38 UTC (rev 3064)
@@ -31,6 +31,7 @@
 const vector SKINCOLOR_DIALOG_QUIT = '1 0 0';
 const vector SKINCOLOR_DIALOG_MUTATORS = '0.7 0.7 1';
 const vector SKINCOLOR_DIALOG_MAPINFO = '0.7 0.7 1';
+const vector SKINCOLOR_DIALOG_USERBIND = '0.7 0.7 1';
 /* ideal for xaw skin:
 const vector SKINCOLOR_DIALOG_MULTIPLAYER = '1 1 1';
 const vector SKINCOLOR_DIALOG_SETTINGS = '1 1 1';




More information about the nexuiz-commits mailing list