1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
|
#if defined(Hiro_Hotkey)
Hotkey::Hotkey() : state(new Hotkey::State) {
setSequence();
}
Hotkey::Hotkey(const string& sequence) : state(new Hotkey::State) {
setSequence(sequence);
}
Hotkey::operator bool() const {
return (bool)state->sequence;
}
auto Hotkey::operator==(const Hotkey& source) const -> bool {
return state == source.state;
}
auto Hotkey::operator!=(const Hotkey& source) const -> bool {
return !operator==(source);
}
auto Hotkey::doPress() const -> void {
if(state->onPress) state->onPress();
}
auto Hotkey::doRelease() const -> void {
if(state->onRelease) state->onRelease();
}
auto Hotkey::onPress(const std::function<void ()>& callback) -> type& {
state->onPress = callback;
return *this;
}
auto Hotkey::onRelease(const std::function<void ()>& callback) -> type& {
state->onRelease = callback;
return *this;
}
auto Hotkey::reset() -> type& {
setSequence();
return *this;
}
auto Hotkey::sequence() const -> string {
return state->sequence;
}
auto Hotkey::setSequence(const string& sequence) -> type& {
state->active = false;
state->sequence = sequence;
state->keys.clear();
for(auto& key : nall::split(sequence, "+")) {
if (auto idx = nall::index_of(Keyboard::keys, key)) state->keys.push_back((u32)*idx);
}
return *this;
}
#endif
|