virtual void OnClick(Point pt, int widget, int click_count) { switch (widget) { case WID_QES_PREVIOUS: case WID_QES_NEXT: { const Sign *si = this->PrevNextSign(widget == WID_QES_NEXT); /* Rebuild the sign list */ this->signs.ForceRebuild(); this->signs.NeedResort(); this->BuildSignsList(); this->SortSignsList(); /* Scroll to sign and reopen window */ ScrollMainWindowToTile(TileVirtXY(si->x, si->y)); UpdateSignEditWindow(si); break; } case WID_QES_DELETE: /* Only need to set the buffer to null, the rest is handled as the OK button */ RenameSign(this->cur_sign, ""); /* don't delete this, we are deleted in Sign::~Sign() -> DeleteRenameSignWindow() */ break; case WID_QES_OK: if (RenameSign(this->cur_sign, this->name_editbox.text.buf)) break; /* FALL THROUGH */ case WID_QES_CANCEL: delete this; break; } }
/** * Handle clicking on a sign. * @param si The sign that was clicked on. */ void HandleClickOnSign(const Sign *si) { if (_ctrl_pressed && (si->owner == _local_company || (si->owner == OWNER_DEITY && _game_mode == GM_EDITOR))) { RenameSign(si->index, NULL); return; } ShowRenameSignWindow(si); }
virtual EventState OnKeyPress(uint16 key, uint16 keycode) { EventState state = ES_NOT_HANDLED; switch (this->HandleEditBoxKey(WID_QES_TEXT, key, keycode, state)) { default: break; case HEBR_CONFIRM: if (RenameSign(this->cur_sign, this->text.buf)) break; /* FALL THROUGH */ case HEBR_CANCEL: // close window, abandon changes delete this; break; } return state; }