From: <the...@us...> - 2007-09-09 16:30:07
|
Revision: 103 http://qonk.svn.sourceforge.net/qonk/?rev=103&view=rev Author: thebohemian Date: 2007-09-09 09:30:02 -0700 (Sun, 09 Sep 2007) Log Message: ----------- - already set mappings are properly removed (and screen updates correctly) Modified Paths: -------------- trunk/src/controloptions.cpp trunk/src/menu.cpp trunk/src/settings.cpp trunk/src/settings.h Modified: trunk/src/controloptions.cpp =================================================================== --- trunk/src/controloptions.cpp 2007-09-09 15:31:59 UTC (rev 102) +++ trunk/src/controloptions.cpp 2007-09-09 16:30:02 UTC (rev 103) @@ -28,6 +28,11 @@ ControlOptions::finishSensing(GameAction ga, bool b) { main.finishSensing(ga, b); + + map <GameAction, MenuAction * >::iterator iter; + for( iter = controlActions.begin(); iter != controlActions.end(); iter++ ) { + iter->second->update(); + } } void @@ -62,8 +67,6 @@ if (sensing) { controlOptions.finishSensing(gameAction, true); - label->setCaption(base + Settings::getAsString(gameAction)); - label->adjustSize(); sensing = false; } else @@ -80,8 +83,6 @@ if (sensing) { controlOptions.finishSensing(gameAction, false); - label->setCaption(base + Settings::getAsString(gameAction)); - label->adjustSize(); sensing = false; // Report that an operation was interrupted (prevents @@ -98,6 +99,13 @@ label->setCaption(base + Settings::getAsString(gameAction)); label->adjustSize(); } + + void update() + { + label->setCaption(base + Settings::getAsString(gameAction)); + label->adjustSize(); + } + }; MenuAction * Modified: trunk/src/menu.cpp =================================================================== --- trunk/src/menu.cpp 2007-09-09 15:31:59 UTC (rev 102) +++ trunk/src/menu.cpp 2007-09-09 16:30:02 UTC (rev 103) @@ -142,8 +142,6 @@ entries->at(selected)->getWidget()->setFont(menuSystem->getHighlightedFont()); menuSystem->enter(parentMenuId); - - cerr << "nothing was canceled" << endl; } } Modified: trunk/src/settings.cpp =================================================================== --- trunk/src/settings.cpp 2007-09-09 15:31:59 UTC (rev 102) +++ trunk/src/settings.cpp 2007-09-09 16:30:02 UTC (rev 103) @@ -326,15 +326,65 @@ void Settings::unset(GameAction ga) { - // Deletion is implemented by shift the value to the left - // and creating an empty entry in the 2nd location. - inputMap[ga][0] = inputMap[ga][1]; - inputMap[ga][1].inputType = IT_NONE; + // Deletes the 2nd entry if it exists or + // the first if not. + if (inputMap[ga][1].inputType != IT_NONE) + inputMap[ga][1].inputType = IT_NONE; + else + inputMap[ga][0].inputType = IT_NONE; } void +Settings::unsetDuplicates (GameAction ga, InputType it, int id0, int id1, int id2) +{ + for (int cga = GA_FIRST; cga < GA_COUNT; cga++) + { + if (cga != ga) + { + // If the input occurs in any other mapping + // delete it properly from there. + + if (inputMap[cga][1].inputType == it + && inputMap[cga][1].id0 == id0 + && inputMap[cga][1].id1 == id1 + && inputMap[cga][1].id2 == id2) + { + // Deletes it from the 2nd entry. + inputMap[cga][1].inputType = IT_NONE; + } + + if (inputMap[cga][0].inputType == it + && inputMap[cga][0].id0 == id0 + && inputMap[cga][0].id1 == id1 + && inputMap[cga][0].id2 == id2) + { + // Deletes it from the 1st entry and + // shifts the 2nd to the first. + inputMap[cga][0] = inputMap[cga][1]; + inputMap[cga][1].inputType = IT_NONE; + } + } + } +} + +void Settings::set(GameAction ga, InputType it, int id0, int id1, int id2) { + // Do not change anything if the sensed input already + // exists for the game action. + if (inputMap[ga][0].inputType == it + && inputMap[ga][0].id0 == id0 + && inputMap[ga][0].id1 == id1 + && inputMap[ga][0].id2 == id2 + || inputMap[ga][1].inputType == it + && inputMap[ga][1].id0 == id0 + && inputMap[ga][1].id1 == id1 + && inputMap[ga][1].id2 == id2) + return; + + // Removes the input from all mappings where it occurs. + unsetDuplicates(ga, it, id0, id1, id2); + // Setting a new value is implemented by shifting the value to the // right and applying the new values in the 1st location. Modified: trunk/src/settings.h =================================================================== --- trunk/src/settings.h 2007-09-09 15:31:59 UTC (rev 102) +++ trunk/src/settings.h 2007-09-09 16:30:02 UTC (rev 103) @@ -33,11 +33,19 @@ static void readInput(const lisp::Lisp *, const char *, GameAction); static void setupDefaultActionMap(); static void set(GameAction, InputType, int, int, int); + + /** Iterates through the input mapping and unsets all + * where the given input occurs. + * + * This makes sure an input is not bound multiple times. + */ + static void unsetDuplicates(GameAction, InputType, int, int, int); static std::string getConfigFilePath(); static bool fileExists(const std::string&); static std::string getInputAsString(Input &); + public: static void init(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |