void GUI::add_thing(Thing *thing) { assert(things.find(thing) == things.end()); things.insert(thing); if(!v_focus && thing->enabled) { focus_next(); } }
void GUI::del_thing(Thing *thing) { thing_set::iterator i = things.find(thing); if(focus == i) { focus_next(); } things.erase(i); }
// ========================================================================== // DO_EVENT // ========================================================================== void gm_tools_screen::do_event(boost::any const &ev) { auto const *vk = boost::any_cast<terminalpp::virtual_key>(&ev); bool handled = false; if (vk) { if (vk->key == terminalpp::vk::ht) { focus_next(); if (!has_focus()) { focus_next(); } handled = true; } else if (vk->key == terminalpp::vk::bt) { focus_previous(); if (!has_focus()) { focus_previous(); } handled = true; } } if (!handled) { composite_component::do_event(ev); } }
void GUI::handle_event(const SDL_Event &event) { switch(event.type) { case SDL_MOUSEBUTTONDOWN: case SDL_MOUSEBUTTONUP: for(thing_set::iterator t = things.begin(); t != things.end(); t++) { if(event.button.x >= (*t)->x && event.button.x < (*t)->x+(*t)->w && event.button.y >= (*t)->y && event.button.y < (*t)->y+(*t)->h && (*t)->enabled) { if(event.type == SDL_MOUSEBUTTONDOWN && event.button.button == SDL_BUTTON_LEFT) { focus = things.find(*t); v_focus = true; } (*t)->HandleEvent(event); break; } } break; case SDL_KEYDOWN: if(event.key.keysym.sym == SDLK_TAB) { focus_next(); break; } case SDL_MOUSEMOTION: case SDL_KEYUP: if(v_focus) { (*focus)->HandleEvent(event); } break; case SDL_QUIT: if(quit_callback) { quit_callback(*this, event); } break; default: break; } }
void Snes9xPreferences::store_binding (const char *string, Binding binding) { int current_joypad = get_combo ("control_combo"); Binding *pad_bindings = (Binding *) (&pad[current_joypad]); for (int i = 0; i < NUM_JOYPAD_LINKS; i++) { if (!strcmp (b_links[i].button_name, string)) { pad_bindings[i] = binding; } else { if (pad_bindings[i].matches (binding)) { pad_bindings[i].clear (); } } } for (int i = NUM_JOYPAD_LINKS; b_links[i].button_name; i++) { if (!strcmp (b_links[i].button_name, string)) { shortcut[i - NUM_JOYPAD_LINKS] = binding; } else { if (shortcut[i - NUM_JOYPAD_LINKS].matches (binding)) { shortcut[i - NUM_JOYPAD_LINKS].clear (); } } } focus_next (); bindings_to_dialog (get_combo ("control_combo")); return; }