From d7902db240adc2f081bee7e8fc36b866976fa5d1 Mon Sep 17 00:00:00 2001 From: Stijn Buys Date: Mon, 28 Jul 2008 22:56:12 +0000 Subject: modifier keys for binds --- src/client/keyboard.cc | 105 +++++++++++++++++++++++++++++++++++-------------- 1 file changed, 76 insertions(+), 29 deletions(-) (limited to 'src/client/keyboard.cc') 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++; } -- cgit v1.2.3