void NpcSellDialog::sellAction(const ActionEvent &event) { const std::string &eventId = event.getId(); const int selectedItem = mShopItemList->getSelected(); ShopItem *const item = mShopItems->at(selectedItem); if (!item || PlayerInfo::isItemProtected(item->getId())) return; if (eventId == "presell") { if (mAmountItems <= 0 || mAmountItems > mMaxItems) return; const ItemInfo &info = ItemDB::get(item->getId()); if (info.isProtected()) { ConfirmDialog *const dialog = CREATEWIDGETR(ConfirmDialog, // TRANSLATORS: sell confirmation header _("sell item"), // TRANSLATORS: sell confirmation message strprintf(_("Do you really want to sell %s?"), info.getName().c_str()), SOUND_REQUEST, false, Modal_true); dialog->addActionListener(this); return; } } if (mAdvanced) sellManyItems(event.getId()); else sellOneItem(); }
void OutfitWindow::action(const ActionEvent &event) { const std::string &eventId = event.getId(); if (eventId == "next") { next(); } else if (eventId == "previous") { previous(); } else if (eventId == "unequip") { if (mCurrentOutfit >= 0 && mCurrentOutfit < static_cast<int>( OUTFITS_COUNT)) { mItemsUnequip[mCurrentOutfit] = mUnequipCheck->isSelected(); } } else if (eventId == "equip") { wearOutfit(mCurrentOutfit); if (Game::instance()) Game::instance()->setValidSpeed(); } else if (eventId == "away") { mAwayOutfit = mCurrentOutfit; if (!mAwayOutfitCheck->isSelected()) mAwayOutfitCheck->setSelected(true); } }
void NpcPostDialog::action(const ActionEvent &event) { const std::string &eventId = event.getId(); if (eventId == "send") { if (mSender->getText().empty() || mText->getText().empty()) { if (localChatTab) { // TRANSLATORS: npc post message error localChatTab->chatLog(_("Failed to send as sender or letter " "invalid.")); } } else { Net::getNpcHandler()->sendLetter(mNpcId, mSender->getText(), mText->getText()); } setVisible(false); } else if (eventId == "cancel") { setVisible(false); } }
void DidYouKnowWindow::action(const ActionEvent &event) { const std::string &eventId = event.getId(); if (eventId == "close") { setVisible(false); } else { const unsigned num = config.getIntValue("currentTip"); if (eventId == "prev") { loadData(num - 1); } else if (eventId == "next") { loadData(num + 1); } else if (eventId == "openagain") { config.setValue("showDidYouKnow", mOpenAgainCheckBox->isSelected()); } } }
void RenameListener::action(const ActionEvent &event) { if (event.getId() == "ok" && viewport && mDialog) { const Map *const map = viewport->getMap(); if (!map) return; const SpecialLayer *const sl = map->getSpecialLayer(); MapItem *item = nullptr; if (sl) { item = sl->getTile(mMapItemX, mMapItemY); if (item) item->setComment(mDialog->getText()); } item = map->findPortalXY(mMapItemX, mMapItemY); if (item) item->setComment(mDialog->getText()); if (socialWindow) socialWindow->updatePortalNames(); } mDialog = nullptr; }
void TextCommandEditor::action(const ActionEvent &event) { const std::string &eventId = event.getId(); if (eventId == "magic") { mIsMagicCommand = true; showControls(Visible_true); } else if (eventId == "other") { mIsMagicCommand = false; showControls(Visible_false); } else if (eventId == "save") { save(); scheduleDelete(); } else if (eventId == "cancel") { scheduleDelete(); } else if (eventId == "delete") { deleteCommand(); scheduleDelete(); } }
void MailViewWindow::action(const ActionEvent &event) { const std::string &eventId = event.getId(); if (eventId == "close") { scheduleDelete(); } else if (eventId == "attach") { if (mGetAttachButton) mailHandler->getAttach(mMessage->id); } else if (eventId == "next") { if (mMessage) mailWindow->viewNext(mMessage->id); } else if (eventId == "prev") { if (mMessage) mailWindow->viewPrev(mMessage->id); } else if (eventId == "reply") { if (!mMessage) return; if (mailEditWindow) mailEditWindow->scheduleDelete(); CREATEWIDGETV0(mailEditWindow, MailEditWindow); mailEditWindow->setTo(mMessage->sender); mailEditWindow->setSubject("Re:" + mMessage->title); mailEditWindow->setMessage(">" + mMessage->text); scheduleDelete(); } }
void TextSelectDialog::action(const ActionEvent &event) { const std::string &eventId = event.getId(); if (eventId == "quit") { close(); return; } const int selectedItem = mItemList->getSelected(); // The following actions require a valid item selection if (selectedItem == -1 || selectedItem >= mModel->getNumberOfElements()) { return; } else if (eventId == "select") { const int index = mItemList->getSelected(); if (index < 0 || index >= CAST_S32(mModel->size())) return; mText = mModel->getElementAt(index); distributeActionEvent(); close(); } }
void KillStats::action(const ActionEvent &event) { const std::string &eventId = event.getId(); if (eventId == "reset") { mKillCounter = 0; mExpCounter = 0; mLine3->setCaption(strprintf("1%% = %d exp, avg mob for 1%%: %s", PlayerInfo::getAttribute(Attributes::EXP_NEEDED) / 100, "?")); // TRANSLATORS: kill stats window label mLine4->setCaption(strprintf(_("Kills: %s, total exp: %s"), "?", "?")); // TRANSLATORS: kill stats window label mLine5->setCaption(strprintf(_("Avg Exp: %s"), "?")); mLine6->setCaption(strprintf( // TRANSLATORS: kill stats window label _("No. of avg mob to next level: %s"), "?")); resetTimes(); } else if (eventId == "timer") { mKillTimer = 0; mKillTCounter = 0; mExpTCounter = 0; mLine7->setCaption(strprintf( // TRANSLATORS: kill stats window label _("Kills/Min: %s, Exp/Min: %s"), "?", "?")); resetTimes(); } }
void BankWindow::action(const ActionEvent &event) { const std::string &eventId = event.getId(); if (eventId == "deposit") bankHandler->deposit(mInputMoneyTextField->getValue()); else if (eventId == "withdraw") bankHandler->withdraw(mInputMoneyTextField->getValue()); }
void SetupItem::action(const ActionEvent &event) { if (!mWidget) return; if (event.getId() == mWidget->getActionEventId()) action(); }
void ShopRenameListener::action(const ActionEvent &event) { if (event.getId() != "OK") return; if (mDialog != nullptr) { shopWindow->setShopName(mDialog->getMsg()); mDialog = nullptr; } }
void SkillDialog::action(const ActionEvent &event) { const std::string &eventId = event.getId(); if (eventId == "inc") { const SkillTab *const tab = static_cast<const SkillTab *const>( mTabs->getSelectedTab()); if (tab) { if (const SkillInfo *const info = tab->getSelectedInfo()) playerHandler->increaseSkill(static_cast<uint16_t>(info->id)); } } else if (eventId == "sel") { const SkillTab *const tab = static_cast<const SkillTab *const>( mTabs->getSelectedTab()); if (tab) { if (const SkillInfo *const info = tab->getSelectedInfo()) { mUseButton->setEnabled(info->isUsable()); mUseButton->setCaption(info->useButton); mIncreaseButton->setEnabled(info->id < SKILL_VAR_MIN_ID); const int num = itemShortcutWindow->getTabIndex(); if (num >= 0 && num < static_cast<int>(SHORTCUT_TABS) && itemShortcut[num]) { itemShortcut[num]->setItemSelected( info->id + SKILL_MIN_ID); } } else { mUseButton->setEnabled(false); mIncreaseButton->setEnabled(false); mUseButton->setCaption(_("Use")); } } } else if (eventId == "use") { const SkillTab *const tab = static_cast<const SkillTab *const>( mTabs->getSelectedTab()); if (tab) { const SkillInfo *const info = tab->getSelectedInfo(); useSkill(info); } } else if (eventId == "close") { setVisible(Visible_false); } }
void QuitDialog::action(const ActionEvent &event) { soundManager.playGuiSound(SOUND_HIDE_WINDOW); if (event.getId() == "ok") { if (viewport) { const Map *const map = viewport->getMap(); if (map) map->saveExtraLayer(); } if (mForceQuit->isSelected()) { client->setState(STATE_FORCE_QUIT); } else if (mLogoutQuit->isSelected()) { DialogsManager::closeDialogs(); client->setState(STATE_EXIT); } else if (mRate && mRate->isSelected()) { openBrowser("https://play.google.com/store/apps/details?" "id=org.evolonline.beta.manaplus"); config.setValue("rated", true); if (mNeedForceQuit) { client->setState(STATE_FORCE_QUIT); } else { DialogsManager::closeDialogs(); client->setState(STATE_EXIT); } } else if (Net::getGameHandler()->isConnected() && mSwitchAccountServer->isSelected()) { DialogsManager::closeDialogs(); client->setState(STATE_SWITCH_SERVER); } else if (mSwitchCharacter->isSelected()) { if (client->getState() == STATE_GAME) { Net::getCharServerHandler()->switchCharacter(); DialogsManager::closeDialogs(); serverConfig.write(); } } } scheduleDelete(); }
void AwayListener::action(const ActionEvent &event) { if (event.getId() == "ok" && modifiers && player_node && settings.awayMode) { modifiers->changeAwayMode(); player_node->updateStatus(); if (outfitWindow) outfitWindow->unwearAwayOutfit(); UpdateStatusListener::distributeEvent(); } }
void SellDialog::action(const ActionEvent &event) { const std::string &eventId = event.getId(); if (eventId == "quit") { close(); return; } const int selectedItem = mShopItemList->getSelected(); // The following actions require a valid item selection if (selectedItem == -1 || selectedItem >= mShopItems->getNumberOfElements()) { return; } if (eventId == "slider") { if (mSlider) { mAmountItems = CAST_S32(mSlider->getValue()); updateButtonsAndLabels(); } } else if (eventId == "inc" && mSlider && mAmountItems < mMaxItems) { mAmountItems++; mSlider->setValue(mAmountItems); updateButtonsAndLabels(); } else if (eventId == "dec" && mSlider && mAmountItems > 1) { mAmountItems--; mSlider->setValue(mAmountItems); updateButtonsAndLabels(); } else if (eventId == "max" && mSlider) { mAmountItems = mMaxItems; mSlider->setValue(mAmountItems); updateButtonsAndLabels(); } else if (eventId == "presell" || eventId == "sell" || eventId == "yes" || eventId == "confirm") { sellAction(event); } }
void PlayerListener::action(const ActionEvent &event) { if (event.getId() == "ok" && !mNick.empty() && mDialog) { std::string comment = mDialog->getText(); Being *const being = actorManager->findBeingByName( mNick, static_cast<ActorTypeT>(mType)); if (being) being->setComment(comment); Being::saveComment(mNick, comment, mType); } mDialog = nullptr; }
void AwayListener::action(const ActionEvent &event) { if (event.getId() == "ok" && localPlayer != nullptr && settings.awayMode) { GameModifiers::changeAwayMode(true); localPlayer->updateStatus(); if (outfitWindow != nullptr) outfitWindow->unwearAwayOutfit(); UpdateStatusListener::distributeEvent(); } }
void MailEditWindow::action(const ActionEvent &event) { const std::string &eventId = event.getId(); if (eventId == "close") { scheduleDelete(); } else if (eventId == "send") { const int money = mMoneyField->getValue(); if (money) mailHandler->setAttachMoney(money); const Item *const tempItem = mInventory->getItem(0); if (tempItem) { const Inventory *const inv = PlayerInfo::getInventory(); if (inv) { const Item *const item = inv->findItem( tempItem->getId(), ItemColor_one); if (item) { mailHandler->setAttach(item->getInvIndex(), tempItem->getQuantity()); } } } std::string subject = mSubjectField->getText(); if (subject.empty()) { // TRANSLATORS: empty mail message subject subject.append(_("empty subject")); } mailHandler->send(mToField->getText(), subject, mMessageField->getText()); } else if (eventId == "add") { Item *const item = inventoryWindow->getSelectedItem(); if (!item) return; ItemAmountWindow::showWindow(ItemAmountWindowUsage::MailAdd, this, item); } }
void QuestsWindow::action(const ActionEvent &event) { const std::string &eventId = event.getId(); if (eventId == "select") { const int id = mQuestsListBox->getSelected(); if (id < 0) return; showQuest(mQuestLinks[id]); } else if (eventId == "close") { setVisible(false); } }
void InputActionRemoteListener::action(const ActionEvent &event) { if (event.getId() != "yes") { mCommand.clear(); mArgs.clear(); return; } inputManager.executeRemoteChatCommand(mCommand, mArgs, nullptr); mCommand.clear(); mArgs.clear(); }
void ChangePincodeListener::action(const ActionEvent &event) { if (event.getId() == "ok") { const PincodeDialog *const dialog = dynamic_cast<PincodeDialog*>( event.getSource()); if (dialog != nullptr) { const std::string &pincode = dialog->getMsg(); pincodeManager.changePincode(pincode); } } else { client->setState(State::SWITCH_LOGIN); } }
void LoginDialog::action(const ActionEvent &event) { const std::string &eventId = event.getId(); if (eventId == "login" && canSubmit()) { prepareUpdate(); mLoginData->registerLogin = false; client->setState(STATE_LOGIN_ATTEMPT); } else if (eventId == "server") { close(); } else if (eventId == "register") { if (loginHandler->isRegistrationEnabled()) { prepareUpdate(); client->setState(STATE_REGISTER_PREP); } else if (!mLoginData->registerUrl.empty()) { const std::string &url = mLoginData->registerUrl; urlListener.url = url; ConfirmDialog *const confirmDlg = CREATEWIDGETR(ConfirmDialog, // TRANSLATORS: question dialog _("Open register url"), url, SOUND_REQUEST, false, Modal_true); confirmDlg->addActionListener(&urlListener); } } else if (eventId == "customhost") { mUpdateHostText->setVisible(fromBool( mCustomUpdateHost->isSelected(), Visible)); } else if (eventId == "updateselect") { mCustomUpdateHost->setSelected(false); mUpdateHostText->setVisible(Visible_false); } }
void WorldSelectDialog::action(const ActionEvent &event) { const std::string &eventId = event.getId(); if (eventId == "world") { mChangeLoginButton->setEnabled(false); mChooseWorld->setEnabled(false); loginHandler->chooseServer(mWorldList->getSelected(), settings.persistentIp); // Check in case netcode moves us forward if (client->getState() == STATE_WORLD_SELECT) client->setState(STATE_WORLD_SELECT_ATTEMPT); } else if (eventId == "login") { client->setState(STATE_PRE_LOGIN); } }
void BuySellDialog::action(const ActionEvent &event) { const std::string &eventId = event.getId(); if (eventId == "Buy") { if (mNpcId != -1) Net::getNpcHandler()->buy(mNpcId); else Net::getBuySellHandler()->requestSellList(mNick); } else if (eventId == "Sell") { if (mNpcId != -1) Net::getNpcHandler()->sell(mNpcId); else Net::getBuySellHandler()->requestBuyList(mNick); } close(); }
void ServerDialog::action(const ActionEvent &event) { const std::string &eventId = event.getId(); if (eventId == "connect") { connectToSelectedServer(); } else if (eventId == "quit") { close(); } else if (eventId == "load") { downloadServerList(); } else if (eventId == "addEntry") { CREATEWIDGET(EditServerDialog, this, ServerInfo(), -1); } else if (eventId == "editEntry") { const int index = mServersList->getSelected(); if (index >= 0) { CREATEWIDGET(EditServerDialog, this, mServers.at(index), index); } } else if (eventId == "remove") { const int index = mServersList->getSelected(); if (index >= 0) { mServersList->setSelected(0); mServers.erase(mServers.begin() + index); saveCustomServers(); } } }
void MailWindow::action(const ActionEvent &event) { const std::string &eventId = event.getId(); if (eventId == "refresh") { mailHandler->refresh(); } else if (eventId == "new") { if (!mailEditWindow) { CREATEWIDGETV0(mailEditWindow, MailEditWindow); } } else if (eventId == "open") { const int sel = mListBox->getSelected(); if (sel < 0) return; const MailMessage *const mail = mMessages[sel]; mailHandler->readMessage(mail->id); } else if (eventId == "delete") { const int sel = mListBox->getSelected(); if (sel < 0) return; const MailMessage *const mail = mMessages[sel]; mailHandler->deleteMessage(mail->id); } else if (eventId == "return") { const int sel = mListBox->getSelected(); if (sel < 0) return; const MailMessage *const mail = mMessages[sel]; mailHandler->returnMessage(mail->id); } }
void Setup_Relations::action(const ActionEvent &event) { const std::string &eventId = event.getId(); if (eventId == ACTION_TABLE) { // temporarily eliminate ourselves: we are fully aware of this change, // so there is no need for asynchronous updates. (In fact, thouse // might destroy the widet that triggered them, which would be rather // embarrassing.) player_relations.removeListener(this); const int row = mPlayerTable->getSelectedRow(); if (row >= 0) mPlayerTableModel->updateModelInRow(row); player_relations.addListener(this); } else if (eventId == ACTION_DELETE) { const int player_index = mPlayerTable->getSelectedRow(); if (player_index < 0) return; player_relations.removePlayer(mPlayerTableModel->getPlayerAt( player_index)); } else if (eventId == ACTION_STRATEGY) { const int sel = mIgnoreActionChoicesBox->getSelected(); if (sel < 0) return; PlayerIgnoreStrategy *const s = (*player_relations.getPlayerIgnoreStrategies())[sel]; player_relations.setPlayerIgnoreStrategy(s); } }
void RegisterDialog::action(const ActionEvent &event) { const std::string &eventId = event.getId(); if (eventId == "cancel") { close(); } else if (eventId == "register" && canSubmit()) { const std::string &user = mUserField->getText(); logger->log("RegisterDialog::register Username is %s", user.c_str()); std::string errorMsg; int error = 0; const unsigned int minUser = loginHandler->getMinUserNameLength(); const unsigned int maxUser = loginHandler->getMaxUserNameLength(); const unsigned int minPass = loginHandler->getMinPasswordLength(); const unsigned int maxPass = loginHandler->getMaxPasswordLength(); if (user.length() < minUser) { // Name too short errorMsg = strprintf // TRANSLATORS: error message (_("The username needs to be at least %u characters long."), minUser); error = 1; } else if (user.length() > maxUser - 1) { // Name too long errorMsg = strprintf // TRANSLATORS: error message (_("The username needs to be less than %u characters long."), maxUser); error = 1; } else if (mPasswordField->getText().length() < minPass) { // Pass too short errorMsg = strprintf // TRANSLATORS: error message (_("The password needs to be at least %u characters long."), minPass); error = 2; } else if (mPasswordField->getText().length() > maxPass) { // Pass too long errorMsg = strprintf // TRANSLATORS: error message (_("The password needs to be less than %u characters long."), maxPass); error = 2; } else if (mPasswordField->getText() != mConfirmField->getText()) { // Password does not match with the confirmation one // TRANSLATORS: error message errorMsg = _("Passwords do not match."); error = 2; } else if (mEmailField && mEmailField->getText().find('@') == std::string::npos) { // TRANSLATORS: error message errorMsg = _("Incorrect email."); error = 1; } else if (mEmailField && mEmailField->getText().size() > 40) { // TRANSLATORS: error message errorMsg = _("Email too long."); error = 1; } if (error > 0) { if (error == 1) { mWrongDataNoticeListener->setTarget(this->mUserField); } else if (error == 2) { // Reset password confirmation mPasswordField->setText(""); mConfirmField->setText(""); mWrongDataNoticeListener->setTarget(this->mPasswordField); } OkDialog *const dlg = CREATEWIDGETR(OkDialog, // TRANSLATORS: error message _("Error"), errorMsg, _("OK"), DialogType::ERROR, Modal_true, ShowCenter_true, nullptr, 260); dlg->addActionListener(mWrongDataNoticeListener); } else { // No errors detected, register the new user. mRegisterButton->setEnabled(false); mLoginData->username = mUserField->getText(); mLoginData->password = mPasswordField->getText(); if (features.getIntValue("forceAccountGender") == -1) { if (mFemaleButton && mFemaleButton->isSelected()) mLoginData->gender = Gender::FEMALE; else if (mOtherButton && mOtherButton->isSelected()) mLoginData->gender = Gender::OTHER; else mLoginData->gender = Gender::MALE; } else { mLoginData->gender = Being::intToGender( CAST_U8(features.getIntValue("forceAccountGender"))); } if (mEmailField) mLoginData->email = mEmailField->getText(); mLoginData->registerLogin = true; client->setState(State::REGISTER_ATTEMPT); } } }
void BuyDialog::action(const ActionEvent &event) { const std::string &eventId = event.getId(); if (eventId == "quit") { close(); return; } else if (eventId == "sort") { sort(); if (mSortDropDown) config.setValue("buySortOrder", mSortDropDown->getSelected()); return; } else if (eventId == "namefilter") { applyNameFilter(mFilterTextField->getText()); } const int selectedItem = mShopItemList->getSelected(); // The following actions require a valid selection if (selectedItem < 0 || selectedItem >= mShopItems->getNumberOfElements()) return; if (eventId == "slider") { mAmountItems = static_cast<int>(mSlider->getValue()); mAmountField->setValue(mAmountItems); updateButtonsAndLabels(); } else if (eventId == "inc" && mAmountItems < mMaxItems) { mAmountItems++; mSlider->setValue(mAmountItems); mAmountField->setValue(mAmountItems); updateButtonsAndLabels(); } else if (eventId == "dec" && mAmountItems > 1) { mAmountItems--; mSlider->setValue(mAmountItems); mAmountField->setValue(mAmountItems); updateButtonsAndLabels(); } else if (eventId == "max") { mAmountItems = mMaxItems; mSlider->setValue(mAmountItems); mAmountField->setValue(mAmountItems); updateButtonsAndLabels(); } else if (eventId == "amount") { mAmountItems = mAmountField->getValue(); mSlider->setValue(mAmountItems); updateButtonsAndLabels(); } else if (eventId == "buy" && mAmountItems > 0 && mAmountItems <= mMaxItems) { ShopItem *const item = mShopItems->at(selectedItem); if (mNpcId == fromInt(Items, BeingId)) { adminHandler->createItems(item->getId(), mAmountItems, item->getColor()); } else if (mNpcId != fromInt(Nick, BeingId)) { #ifdef EATHENA_SUPPORT if (mNpcId == fromInt(Market, BeingId)) { marketHandler->buyItem(item->getId(), item->getType(), item->getColor(), mAmountItems); item->increaseQuantity(-mAmountItems); item->update(); } else if (mNpcId == fromInt(Cash, BeingId)) { cashShopHandler->buyItem(item->getPrice(), item->getId(), item->getColor(), mAmountItems); } else #endif { npcHandler->buyItem(mNpcId, item->getId(), item->getColor(), mAmountItems); } updateSlider(selectedItem); } else if (mNpcId == fromInt(Nick, BeingId)) { #ifdef EATHENA_SUPPORT if (serverFeatures->haveVending()) { Being *const being = actorManager->findBeingByName(mNick); if (being) { vendingHandler->buy(being, item->getInvIndex(), mAmountItems); item->increaseQuantity(-mAmountItems); item->update(); updateSlider(selectedItem); } } else if (tradeWindow) #else if (tradeWindow) #endif { if (item) { buySellHandler->sendBuyRequest(mNick, item, mAmountItems); tradeWindow->addAutoMoney(mNick, item->getPrice() * mAmountItems); } } } } }