Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/key.cc')
-rw-r--r--src/client/key.cc77
1 files changed, 75 insertions, 2 deletions
diff --git a/src/client/key.cc b/src/client/key.cc
index 066f6ef..9b0c942 100644
--- a/src/client/key.cc
+++ b/src/client/key.cc
@@ -4,6 +4,7 @@
the terms and conditions of the GNU General Public License version 2
*/
+#include "auxiliary/functions.h"
#include "client/key.h"
namespace client {
@@ -16,14 +17,86 @@ Key::Key(const char *name, unsigned int keysym, char ascii, const char *bind)
key_name.assign(name);
+ clear();
+
if (bind)
key_bind.assign(bind);
- else
- key_bind.clear();
}
Key::~Key()
{
}
+std::string const & Key::bind(Modifier mod) const
+{
+ switch (mod) {
+ case None:
+ return key_bind;
+ break;
+ case Shift:
+ return key_bind_shift;
+ break;
+ case Ctrl:
+ return key_bind_ctrl;
+ break;
+ case Alt:
+ break;
+ }
+
+ return key_bind_alt;
+}
+
+void Key::clear()
+{
+ key_bind.clear();
+ key_bind_shift.clear();
+ key_bind_ctrl.clear();
+ key_bind_alt.clear();
+}
+
+void Key::clear(Modifier mod)
+{
+ switch (mod) {
+ case None:
+ key_bind.clear();
+ break;
+ case Shift:
+ key_bind_shift.clear();
+ break;
+ case Ctrl:
+ key_bind_ctrl.clear();
+ break;
+ case Alt:
+ key_bind_alt.clear();
+ break;
+ }
+}
+
+void Key::assign(Modifier mod, const char *bind)
+{
+ if (!bind) {
+ clear(mod);
+ return;
+ }
+
+ switch (mod) {
+ case None:
+ key_bind.assign(bind);
+ aux::trim(key_bind);
+ break;
+ case Shift:
+ key_bind_shift.assign(bind);
+ aux::trim(key_bind_shift);
+ break;
+ case Ctrl:
+ key_bind_ctrl.assign(bind);
+ aux::trim(key_bind_ctrl);
+ break;
+ case Alt:
+ key_bind_alt.assign(bind);
+ aux::trim(key_bind_alt);
+ break;
+ }
+}
+
}