Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStijn Buys <ingar@osirion.org>2008-07-28 22:56:12 +0000
committerStijn Buys <ingar@osirion.org>2008-07-28 22:56:12 +0000
commitd7902db240adc2f081bee7e8fc36b866976fa5d1 (patch)
tree7000b5d396f0340124baf296f860e222664888bd /src/client/keyboard.cc
parentfa45b822bb8cdcd3fb3654ee099bdeddd2290a5c (diff)
modifier keys for binds
Diffstat (limited to 'src/client/keyboard.cc')
-rw-r--r--src/client/keyboard.cc105
1 files changed, 76 insertions, 29 deletions
diff --git a/src/client/keyboard.cc b/src/client/keyboard.cc
index 5870e06..e0c5642 100644
--- a/src/client/keyboard.cc
+++ b/src/client/keyboard.cc
@@ -245,6 +245,15 @@ void Keyboard::save_binds()
if (key->bind(Key::None).size()) {
ofs << "bind " << key->name() << " " << key->bind(Key::None) << std::endl;
}
+ if (key->bind(Key::Shift).size()) {
+ ofs << "bind shift+" << key->name() << " " << key->bind(Key::Shift) << std::endl;
+ }
+ if (key->bind(Key::Ctrl).size()) {
+ ofs << "bind ctrl+" << key->name() << " " << key->bind(Key::Ctrl) << std::endl;
+ }
+ if (key->bind(Key::Alt).size()) {
+ ofs << "bind alt+" << key->name() << " " << key->bind(Key::Alt) << std::endl;
+ }
/*
} else {
ofs << "unbind " << key->name() << std::endl;
@@ -329,19 +338,78 @@ Key *Keyboard::find(unsigned int keysym)
void Keyboard::bind(std::string const &name, const std::string str)
{
- Key *key = find(name);
+ Key::Modifier modifier = Key::None;
+ std::string keyname(name);
+
+ if ((keyname.size() > 6) && (keyname.substr(0, 6).compare("shift+") == 0)) {
+ keyname.erase(0, 6);
+ modifier = Key::Shift;
+ } else if ((keyname.size() > 5) && (keyname.substr(0, 5).compare("ctrl+") == 0)) {
+ keyname.erase(0, 5);
+ modifier = Key::Ctrl;
+ } else if ((keyname.size() > 4) && (keyname.substr(0, 4).compare("alt+") == 0)) {
+ keyname.erase(0, 4);
+ modifier = Key::Shift;
+
+ } else if ((keyname.size() > 6) && (keyname.substr(keyname.size() - 6, 6).compare("+shift") == 0)) {
+ keyname.erase(keyname.size() - 6, 6);
+ modifier = Key::Shift;
+ } else if ((keyname.size() > 5) && (keyname.substr(keyname.size() - 5, 5).compare("+ctrl") == 0)) {
+ keyname.erase(keyname.size() - 5, 5);
+ modifier = Key::Ctrl;
+ } else if ((keyname.size() > 4) && (keyname.substr(keyname.size() - 4, 4).compare("+alt") == 0)) {
+ keyname.erase(0, keyname.size() -46);
+ modifier = Key::Shift;
+ }
+
+ Key *key = find(keyname);
if (key) {
- key->assign(Key::None, str.c_str());
+ if (str.size())
+ key->assign(modifier, str.c_str());
+
+ if (modifier == Key::None) {
+ con_print << " " << aux::pad_right(key->name(), 6) << " " << key->bind(Key::None) << std::endl;
+ } else if (modifier == Key::Shift) {
+ con_print << " shift+" << aux::pad_right(key->name(), 6) << " " << key->bind(Key::Shift) << std::endl;
+ } else if (modifier == Key::Ctrl) {
+ con_print << " ctrl+" << aux::pad_right(key->name(), 6) << " " << key->bind(Key::Ctrl) << std::endl;
+ } else if (modifier == Key::Alt) {
+ con_print << " alt+" << aux::pad_right(key->name(), 6) << " " << key->bind(Key::Alt) << std::endl;
+ }
} else {
con_print << "Key '" << name << "' not found." << std::endl;
}
}
void Keyboard::unbind(std::string const &name)
-{
+{
+ Key::Modifier modifier = Key::None;
+ std::string keyname(name);
+
+ if ((keyname.size() > 6) && (keyname.substr(0, 6).compare("shift+") == 0)) {
+ keyname.erase(0, 6);
+ modifier = Key::Shift;
+ } else if ((keyname.size() > 5) && (keyname.substr(0, 5).compare("ctrl+") == 0)) {
+ keyname.erase(0, 5);
+ modifier = Key::Ctrl;
+ } else if ((keyname.size() > 4) && (keyname.substr(0, 4).compare("alt+") == 0)) {
+ keyname.erase(0, 4);
+ modifier = Key::Shift;
+
+ } else if ((keyname.size() > 6) && (keyname.substr(keyname.size() - 6, 6).compare("+shift") == 0)) {
+ keyname.erase(keyname.size() - 6, 6);
+ modifier = Key::Shift;
+ } else if ((keyname.size() > 5) && (keyname.substr(keyname.size() - 5, 5).compare("+ctrl") == 0)) {
+ keyname.erase(keyname.size() - 5, 5);
+ modifier = Key::Ctrl;
+ } else if ((keyname.size() > 4) && (keyname.substr(keyname.size() - 4, 4).compare("+alt") == 0)) {
+ keyname.erase(0, keyname.size() -46);
+ modifier = Key::Shift;
+ }
+
Key *key = find(name);
if (key) {
- key->clear(Key::None);
+ key->clear(modifier);
} else {
con_print << "Key '" << name << "' not found." << std::endl;
}
@@ -381,45 +449,24 @@ void Keyboard::list_keys()
con_print << keys.size() << " registered keys" << std::endl;
}
-void Keyboard::list_bind(std::string const &name)
-{
- Key *key = find(name);
- if (key) {
- if (key->bind(Key::None).size()) {
- con_print << " " << aux::pad_left(key->name(), 6) << " " << key->bind(Key::None) << std::endl;
- }
- if (key->bind(Key::Shift).size()) {
- con_print << " shift+" << aux::pad_left(key->name(), 6) << " " << key->bind(Key::Shift) << std::endl;
- }
- if (key->bind(Key::Ctrl).size()) {
- con_print << " ctrl+" << aux::pad_left(key->name(), 6) << " " << key->bind(Key::Ctrl) << std::endl;
- }
- if (key->bind(Key::Alt).size()) {
- con_print << " alt+" << aux::pad_left(key->name(), 6) << " " << key->bind(Key::Alt) << std::endl;
- }
- } else {
- con_print << "key '" << name << "' not found" << std::endl;
- }
-}
-
void Keyboard::list_binds()
{
size_t n =0;
for (iterator it = begin(); it != end(); it++) {
if ((*it).second->bind(Key::None).size()) {
- con_print << " " << aux::pad_left((*it).second->name(), 6) << " " << (*it).second->bind(Key::None) << std::endl;
+ con_print << " " << aux::pad_right((*it).second->name(), 6) << " " << (*it).second->bind(Key::None) << std::endl;
n++;
}
if ((*it).second->bind(Key::Shift).size()) {
- con_print << " shift+" << aux::pad_left((*it).second->name(), 6) << " " << (*it).second->bind(Key::Shift) << std::endl;
+ con_print << " shift+" << aux::pad_right((*it).second->name(), 6) << " " << (*it).second->bind(Key::Shift) << std::endl;
n++;
}
if ((*it).second->bind(Key::Ctrl).size()) {
- con_print << " ctrl+" << aux::pad_left((*it).second->name(), 6) << " " << (*it).second->bind(Key::Ctrl) << std::endl;
+ con_print << " ctrl+" << aux::pad_right((*it).second->name(), 6) << " " << (*it).second->bind(Key::Ctrl) << std::endl;
n++;
}
if ((*it).second->bind(Key::Alt).size()) {
- con_print << " alt+" << aux::pad_left((*it).second->name(), 6) << " " << (*it).second->bind(Key::Alt) << std::endl;
+ con_print << " alt+" << aux::pad_right((*it).second->name(), 6) << " " << (*it).second->bind(Key::Alt) << std::endl;
n++;
}