ChangePasswordDialog::ChangePasswordDialog(Window *parent, LoginData *loginData): Window(_("Change Password"), true, parent), mWrongDataNoticeListener(new WrongDataNoticeListener), mLoginData(loginData) { gcn::Label *accountLabel = new Label( strprintf(_("Account: %s"), mLoginData->username.c_str())); mOldPassField = new PasswordField; mFirstPassField = new PasswordField; mSecondPassField = new PasswordField; mChangePassButton = new Button(_("Change Password"), "change_password", this); mCancelButton = new Button(_("Cancel"), "cancel", this); place(0, 0, accountLabel, 3); place(0, 1, new Label(_("Password:"******"Type new password twice:")), 3); place(0, 4, mFirstPassField, 3).setPadding(1); place(0, 5, mSecondPassField, 3).setPadding(1); place(1, 6, mCancelButton); place(2, 6, mChangePassButton); reflowLayout(200); setLocationRelativeTo(getParent()); setVisible(true); mOldPassField->requestFocus(); mOldPassField->setActionEventId("change_password"); mFirstPassField->setActionEventId("change_password"); mSecondPassField->setActionEventId("change_password"); }
MagicDialog::MagicDialog(): Window(_("Magic")) { setWindowName("Magic"); setCloseButton(true); setSaveVisible(true); setDefaultSize(255, 30, 175, 225); gcn::Button *spellButton1 = new Button(_("Cast Test Spell 1"), "spell_1", this); gcn::Button *spellButton2 = new Button(_("Cast Test Spell 2"), "spell_2", this); gcn::Button *spellButton3 = new Button(_("Cast Test Spell 3"), "spell_3", this); spellButton1->setPosition(10, 30); spellButton2->setPosition(10, 60); spellButton3->setPosition(10, 90); add(spellButton1); add(spellButton2); add(spellButton3); update(); setLocationRelativeTo(getParent()); loadWindowState(); }
void SkillDialog::postInit() { Window::postInit(); setLocationRelativeTo(getParent()); loadWindowState(); enableVisibleSound(true); }
void QuitDialog::postInit() { setLocationRelativeTo(getParent()); setVisible(true); soundManager.playGuiSound(SOUND_SHOW_WINDOW); requestModalFocus(); mOkButton->requestFocus(); }
WhoIsOnline::WhoIsOnline() : // TRANSLATORS: who is online window name Window(_("Who Is Online - Updating"), false, nullptr, "whoisonline.xml"), mThread(nullptr), mDownloadStatus(UPDATE_LIST), mDownloadComplete(true), mDownloadedBytes(0), mMemoryBuffer(nullptr), mCurlError(new char[CURL_ERROR_SIZE]), mBrowserBox(new BrowserBox(this)), mScrollArea(new ScrollArea(mBrowserBox, false)), mUpdateTimer(0), mOnlinePlayers(), mOnlineNicks(), // TRANSLATORS: who is online. button. mUpdateButton(new Button(this, _("Update"), "update", this)), mAllowUpdate(true), mShowLevel(false), mUpdateOnlineList(config.getBoolValue("updateOnlineList")), mGroupFriends(true) { mCurlError[0] = 0; setWindowName("WhoIsOnline"); const int h = 350; const int w = 200; setDefaultSize(w, h, ImageRect::CENTER); setVisible(false); setCloseButton(true); setResizable(true); setStickyButtonLock(true); setSaveVisible(true); mUpdateButton->setEnabled(false); mUpdateButton->setDimension(gcn::Rectangle(5, 5, w - 10, 20 + 5)); mBrowserBox->setOpaque(false); mBrowserBox->setHighlightMode(BrowserBox::BACKGROUND); mScrollArea->setDimension(gcn::Rectangle(5, 20 + 10, w - 10, h - 10 - 30)); mScrollArea->setSize(w - 10, h - 10 - 30); mBrowserBox->setLinkHandler(this); add(mUpdateButton); add(mScrollArea); setLocationRelativeTo(getParent()); loadWindowState(); enableVisibleSound(true); download(); widgetResized(gcn::Event(nullptr)); config.addListener("updateOnlineList", this); config.addListener("groupFriends", this); mGroupFriends = config.getBoolValue("groupFriends"); }
void Window::adaptToNewSize() { setLocationRelativeTo(mPosition, mOffsetX, mOffsetY); if (!mHasMaxDimensions) { mMaxWinWidth = graphics->getWidth(); mMaxWinHeight = graphics->getHeight(); } }
CharCreateDialog::CharCreateDialog(Window *parent, int slot, Gender gender): Window(_("Create Character"), true, parent), mSlot(slot) { mPlayer = new Player(0, 0, NULL); mPlayer->setGender(gender); int numberOfHairColors = ColorDB::size(); mPlayer->setHairStyle(rand() % mPlayer->getNumOfHairstyles(), rand() % numberOfHairColors); mNameField = new TextField(""); mNameLabel = new Label(_("Name:")); mNextHairColorButton = new Button(">", "nextcolor", this); mPrevHairColorButton = new Button("<", "prevcolor", this); mHairColorLabel = new Label(_("Hair Color:")); mNextHairStyleButton = new Button(">", "nextstyle", this); mPrevHairStyleButton = new Button("<", "prevstyle", this); mHairStyleLabel = new Label(_("Hair Style:")); mCreateButton = new Button(_("Create"), "create", this); mCancelButton = new Button(_("Cancel"), "cancel", this); mBeingBox = new BeingBox(mPlayer); mBeingBox->setWidth(74); mNameField->setActionEventId("create"); mNameField->addActionListener(this); ContainerPlacer place; place = getPlacer(0, 0); place(0, 0, mNameLabel, 1); place(1, 0, mNameField, 6); place(0, 1, mHairStyleLabel, 1); place(1, 1, mPrevHairStyleButton); place(2, 1, mBeingBox, 1, 8).setPadding(3); place(3, 1, mNextHairStyleButton); place(0, 2, mHairColorLabel, 1); place(1, 2, mPrevHairColorButton); place(3, 2, mNextHairColorButton); place.getCell().matchColWidth(0, 2); place = getPlacer(0, 2); place(4, 0, mCancelButton); place(5, 0, mCreateButton); reflowLayout(225, 0); setLocationRelativeTo(getParent()); setVisible(true); mNameField->requestFocus(); }
CharSelectDialog::CharSelectDialog(LockedArray<LocalPlayer*> *charInfo, Gender gender): Window(_("Select Character")), mCharInfo(charInfo), mGender(gender), mCharSelected(false) { // Control that shows the Player mBeingBox = new BeingBox(); mBeingBox->setWidth(74); mNameLabel = new Label(strprintf(_("Name: %s"), "")); mLevelLabel = new Label(strprintf(_("Level: %d"), 0)); mJobLevelLabel = new Label(strprintf(_("Job Level: %d"), 0)); mMoneyLabel = new Label(strprintf(_("Money: %d"), 0)); const std::string tempString = getFont()->getWidth(_("New")) < getFont()->getWidth(_("Delete")) ? _("Delete") : _("New"); mPreviousButton = new Button(_("Previous"), "previous", this); mNextButton = new Button(_("Next"), "next", this); mNewDelCharButton = new Button(tempString, "newdel", this); mSelectButton = new Button(_("OK"), "ok", this); mCancelButton = new Button(_("Cancel"), "cancel", this); ContainerPlacer place; place = getPlacer(0, 0); place(0, 0, mBeingBox, 1, 6).setPadding(3); place(1, 0, mNewDelCharButton); place(1, 1, mNameLabel, 5); place(1, 2, mLevelLabel, 5); place(1, 3, mJobLevelLabel, 5); place(1, 4, mMoneyLabel, 5); place.getCell().matchColWidth(1, 4); place = getPlacer(0, 2); place(0, 0, mPreviousButton); place(1, 0, mNextButton); place(4, 0, mCancelButton); place(5, 0, mSelectButton); reflowLayout(250, 0); setLocationRelativeTo(getParent()); setVisible(true); mSelectButton->requestFocus(); updatePlayerInfo(); }
QuitDialog::QuitDialog(QuitDialog** pointerToMe): Window(_("Quit"), true, NULL), mMyPointer(pointerToMe) { mForceQuit = new RadioButton(_("Quit"), "quitdialog"); mLogoutQuit = new RadioButton(_("Quit"), "quitdialog"); mSwitchAccountServer = new RadioButton(_("Switch server"), "quitdialog"); mSwitchCharacter = new RadioButton(_("Switch character"), "quitdialog"); mOkButton = new Button(_("OK"), "ok", this); mCancelButton = new Button(_("Cancel"), "cancel", this); addKeyListener(this); ContainerPlacer place = getPlacer(0, 0); const State state = Client::getState(); // All states, when we're not logged in to someone. if (state == STATE_CHOOSE_SERVER || state == STATE_CONNECT_SERVER || state == STATE_LOGIN || state == STATE_LOGIN_ATTEMPT || state == STATE_UPDATE || state == STATE_LOAD_DATA) { placeOption(place, mForceQuit); } else { // Only added if we are connected to an accountserver or gameserver placeOption(place, mLogoutQuit); placeOption(place, mSwitchAccountServer); // Only added if we are connected to a gameserver if (state == STATE_GAME) placeOption(place, mSwitchCharacter); } mOptions[0]->setSelected(true); place = getPlacer(0, 1); place(1, 0, mOkButton); place(2, 0, mCancelButton); reflowLayout(150, 0); setLocationRelativeTo(getParent()); setVisible(true); requestModalFocus(); mOkButton->requestFocus(); }
SpecialsWindow::SpecialsWindow(): Window(_("Specials")) { setWindowName("Specials"); setCloseButton(true); setResizable(true); setSaveVisible(true); setDefaultSize(windowContainer->getWidth() - 280, 30, 275, 425); setupWindow->registerWindowForReset(this); mTabs = new TabbedArea(); place(0, 0, mTabs, 5, 5); setLocationRelativeTo(getParent()); loadWindowState(); }
void NpcPostDialog::postInit() { // create text field for receiver // TRANSLATORS: label in npc post dialog Label *const senderText = new Label(this, _("To:")); senderText->setPosition(5, 5); mSender->setPosition(senderText->getWidth() + 5, 5); mSender->setWidth(65); // create button for sending // TRANSLATORS: button in npc post dialog Button *const sendButton = new Button(this, _("Send"), "send", this); sendButton->setPosition(400 - sendButton->getWidth(), 170 - sendButton->getHeight()); // TRANSLATORS: button in npc post dialog Button *const cancelButton = new Button(this, _("Cancel"), "cancel", this); cancelButton->setPosition(sendButton->getX() - (cancelButton->getWidth() + 2), sendButton->getY()); // create textfield for letter mText->setHeight(400 - (mSender->getHeight() + sendButton->getHeight())); mText->setEditable(true); // create scroll box for letter text ScrollArea *const scrollArea = new ScrollArea(this, mText); scrollArea->setHorizontalScrollPolicy(ScrollArea::SHOW_NEVER); scrollArea->setDimension(Rect( 5, mSender->getHeight() + 5, 380, 140 - (mSender->getHeight() + sendButton->getHeight()))); add(senderText); add(mSender); add(scrollArea); add(sendButton); add(cancelButton); setLocationRelativeTo(getParent()); instances.push_back(this); setVisible(true); enableVisibleSound(true); }
void WhoIsOnline::postInit() { Window::postInit(); const int h = 350; const int w = 200; setDefaultSize(w, h, ImagePosition::CENTER); setVisible(Visible_false); setCloseButton(true); setResizable(true); setStickyButtonLock(true); setSaveVisible(true); if (setupWindow) setupWindow->registerWindowForReset(this); mUpdateButton->setEnabled(false); mUpdateButton->setDimension(Rect(5, 5, w - 10, 20 + 5)); mBrowserBox->setOpaque(Opaque_false); mScrollArea->setDimension(Rect(5, 20 + 10, w - 10, h - 10 - 30)); mScrollArea->setSize(w - 10, h - 10 - 30); mScrollArea->setSelectable(false); mBrowserBox->setLinkHandler(this); add(mUpdateButton); add(mScrollArea); setLocationRelativeTo(getParent()); loadWindowState(); enableVisibleSound(true); download(); widgetResized(Event(nullptr)); config.addListener("updateOnlineList", this); config.addListener("groupFriends", this); mGroupFriends = config.getBoolValue("groupFriends"); }
OkDialog::OkDialog(const std::string &title, const std::string &msg, Window *parent): Window(title, true, parent) { mTextBox = new TextBox(new WordTextWrapHandler()); mTextBox->setEditable(false); mTextBox->setOpaque(false); mTextBox->setTextWrapped(msg, 260); okButton = new Button(_("OK"), "ok", this); const int numRows = mTextBox->getNumberOfRows(); const int fontHeight = getFont()->getHeight(); const int height = numRows * fontHeight; int width = getFont()->getWidth(title); if (width < mTextBox->getMinWidth()) width = mTextBox->getMinWidth(); if (width < okButton->getWidth()) width = okButton->getWidth(); setContentSize(mTextBox->getMinWidth() + fontHeight, height + fontHeight + okButton->getHeight()); mTextBox->setPosition(getPadding(), getPadding()); // 8 is the padding that GUIChan adds to button widgets // (top and bottom combined) okButton->setPosition((width - okButton->getWidth()) / 2, height + 8); add(mTextBox); add(okButton); setLocationRelativeTo(getParent()); setVisible(true); okButton->requestFocus(); }
CharCreateDialog::CharCreateDialog(Window *parent, int slot, Gender gender): Window(_("Create Character"), true, parent), mSlot(slot) { mPlayer = new Player(0, 0, NULL); mPlayer->setGender(gender); int numberOfHairColors = ColorDB::size(); mPlayer->setHairStyle(rand() % mPlayer->getNumOfHairstyles(), rand() % numberOfHairColors); mNameField = new TextField(""); mNameLabel = new Label(_("Name:")); mNextHairColorButton = new Button(">", "nextcolor", this); mPrevHairColorButton = new Button("<", "prevcolor", this); mHairColorLabel = new Label(_("Hair Color:")); mNextHairStyleButton = new Button(">", "nextstyle", this); mPrevHairStyleButton = new Button("<", "prevstyle", this); mHairStyleLabel = new Label(_("Hair Style:")); mCreateButton = new Button(_("Create"), "create", this); mCancelButton = new Button(_("Cancel"), "cancel", this); mBeingBox = new BeingBox(mPlayer); mBeingBox->setWidth(74); mNameField->setActionEventId("create"); mNameField->addActionListener(this); fontChanged(); setLocationRelativeTo(getParent()); setVisible(true); mNameField->requestFocus(); }
void Window::center() { setLocationRelativeTo(getParent()); }
void Window::resetToDefaultSize() { setSize(mDefaultWidth, mDefaultHeight); setLocationRelativeTo(mDefaultPosition, mDefaultOffsetX, mDefaultOffsetY); saveWindowState(); }
void Window::loadWindowState() { const std::string &name = mWindowName; const std::string skinName = config.getValue(name + "Skin", mSkin->getFilePath()); assert(!name.empty()); if (mGrip) { int width = (int) config.getValue(name + "WinWidth", mDefaultWidth); int height = (int) config.getValue(name + "WinHeight", mDefaultHeight); if (getMinWidth() > width) width = getMinWidth(); else if (getMaxWidth() < width) width = getMaxWidth(); if (getMinHeight() > height) height = getMinHeight(); else if (getMaxHeight() < height) height = getMaxHeight(); setSize(width, height); } else { setSize(mDefaultWidth, mDefaultHeight); } int x = (int) config.getValue(name + "WinX", -1); int y = (int) config.getValue(name + "WinY", -1); if (x != -1 || y != -1) { // These two tags are deprecated. Convert them to the new system, then // remove them to avoid client coordinate confusion. config.removeValue(mWindowName + "WinX"); config.removeValue(mWindowName + "WinY"); saveRelativeLocation(x, y); } int position = (int) config.getValue(name + "Position", -1); mOffsetX = (int) config.getValue(name + "OffsetX", mDefaultOffsetX); mOffsetY = (int) config.getValue(name + "OffsetY", mDefaultOffsetY); if (position != -1) { mPosition = (ImageRect::ImagePosition) position; setLocationRelativeTo(mPosition, mOffsetX, mOffsetY); } else { setLocationRelativeTo(mDefaultPosition, mDefaultOffsetX, mDefaultOffsetY); } if (mSaveVisibility) { setVisible((bool) config.getValue(name + "Visible", mDefaultVisible)); mOldVisibility = (bool) config.getValue(name + "Hidden", false); } if (skinName.compare(mSkin->getFilePath()) != 0) { mSkin->instances--; mSkin = skinLoader->load(skinName, mDefaultSkinPath); } }
void Window::adaptToNewSize() { setLocationRelativeTo(mPosition, mOffsetX, mOffsetY); }
void Window::setLocationRelativeTo(ImageRect::ImagePosition position, const int offsetX, const int offsetY) { setLocationRelativeTo(graphics->getWidth(), graphics->getHeight(), position, offsetX, offsetY); }
EditServerDialog::EditServerDialog(ServerDialog *parent, ServerInfo server, int index) : Window(_("Edit Server"), true, parent), mServerDialog(parent), mServer(server), mIndex(index) { setWindowName("EditServerDialog"); Label *nameLabel = new Label(_("Name:")); Label *serverAdressLabel = new Label(_("Address:")); Label *portLabel = new Label(_("Port:")); Label *typeLabel = new Label(_("Server type:")); Label *descriptionLabel = new Label(_("Description:")); mServerAddressField = new TextField(std::string()); mPortField = new TextField(std::string()); mPortField->setNumeric(true); mPortField->setRange(1, 65535); mTypeListModel = new TypeListModel(); mTypeField = new DropDown(mTypeListModel); mTypeField->setSelected(0); // TmwAthena by default for now. mNameField = new TextField(std::string()); mDescriptionField = new TextField(std::string()); mOkButton = new Button(_("OK"), "addServer", this); mCancelButton = new Button(_("Cancel"), "cancel", this); mServerAddressField->addActionListener(this); mPortField->addActionListener(this); place(0, 0, nameLabel); place(1, 0, mNameField, 4).setPadding(3); place(0, 1, serverAdressLabel); place(1, 1, mServerAddressField, 4).setPadding(3); place(0, 2, portLabel); place(1, 2, mPortField, 4).setPadding(3); place(0, 3, typeLabel); place(1, 3, mTypeField).setPadding(3); place(0, 4, descriptionLabel); place(1, 4, mDescriptionField, 4).setPadding(3); place(4, 5, mOkButton); place(3, 5, mCancelButton); // Do this manually instead of calling reflowLayout so we can enforce a // minimum width. int width = 0, height = 0; getLayout().reflow(width, height); if (width < 300) { width = 300; getLayout().reflow(width, height); } if (height < 120) { height = 120; getLayout().reflow(width, height); } setContentSize(width, height); setMinWidth(getWidth()); setMinHeight(getHeight()); setDefaultSize(getWidth(), getHeight(), ImageRect::CENTER); setResizable(false); addKeyListener(this); loadWindowState(); mNameField->setText(mServer.name); mDescriptionField->setText(mServer.description); mServerAddressField->setText(mServer.hostname); mPortField->setText(toString(mServer.port)); switch (mServer.type) { #ifdef EATHENA_SUPPORT case ServerInfo::EATHENA: mTypeField->setSelected(2); break; case ServerInfo::MANASERV: #ifdef MANASERV_SUPPORT mTypeField->setSelected(3); break; #endif #else case ServerInfo::MANASERV: #ifdef MANASERV_SUPPORT mTypeField->setSelected(2); break; #endif #endif default: case ServerInfo::UNKNOWN: case ServerInfo::TMWATHENA: mTypeField->setSelected(0); break; case ServerInfo::EVOL: mTypeField->setSelected(1); break; } setLocationRelativeTo(getParentWindow()); setVisible(true); mNameField->requestFocus(); }
EditServerDialog::EditServerDialog(ServerDialog *const parent, ServerInfo server, const int index) : // TRANSLATORS: edit server dialog name Window(_("Edit Server"), Modal_true, parent), ActionListener(), KeyListener(), mServerAddressField(new TextField(this, std::string())), mPortField(new TextField(this, std::string())), mNameField(new TextField(this, std::string())), mDescriptionField(new TextField(this, std::string())), mOnlineListUrlField(new TextField(this, std::string())), mPacketVersionField(new IntTextField(this, 0, 0, maxPacketVersion)), // TRANSLATORS: edit server dialog button mConnectButton(new Button(this, _("Connect"), "connect", this)), // TRANSLATORS: edit server dialog button mOkButton(new Button(this, _("OK"), "addServer", this)), // TRANSLATORS: edit server dialog button mCancelButton(new Button(this, _("Cancel"), "cancel", this)), // TRANSLATORS: edit server dialog label mPersistentIp(new CheckBox(this, _("Use same ip"), true, this, "persistentIp")), mTypeListModel(new TypeListModel), mTypeField(new DropDown(this, mTypeListModel, false, Modal_true)), mServerDialog(parent), mServer(server), mIndex(index) { setWindowName("EditServerDialog"); // TRANSLATORS: edit server dialog label Label *const nameLabel = new Label(this, _("Name:")); // TRANSLATORS: edit server dialog label Label *const serverAdressLabel = new Label(this, _("Address:")); // TRANSLATORS: edit server dialog label Label *const portLabel = new Label(this, _("Port:")); // TRANSLATORS: edit server dialog label Label *const typeLabel = new Label(this, _("Server type:")); // TRANSLATORS: edit server dialog label Label *const descriptionLabel = new Label(this, _("Description:")); // TRANSLATORS: edit server dialog label Label *const onlineListUrlLabel = new Label(this, _("Online list url:")); // TRANSLATORS: edit server dialog label Label *const packetVersionLabel = new Label(this, _("Packet version:")); mPortField->setNumeric(true); mPortField->setRange(1, 65535); mTypeField->setSelected(0); // TmwAthena by default mServerAddressField->addActionListener(this); mPortField->addActionListener(this); place(0, 0, nameLabel); place(1, 0, mNameField, 4).setPadding(3); place(0, 1, serverAdressLabel); place(1, 1, mServerAddressField, 4).setPadding(3); place(0, 2, portLabel); place(1, 2, mPortField, 4).setPadding(3); place(0, 3, typeLabel); place(1, 3, mTypeField).setPadding(3); place(0, 4, descriptionLabel); place(1, 4, mDescriptionField, 4).setPadding(3); place(0, 5, onlineListUrlLabel); place(1, 5, mOnlineListUrlField, 4).setPadding(3); place(0, 6, packetVersionLabel); place(1, 6, mPacketVersionField, 4).setPadding(3); place(0, 7, mPersistentIp, 4).setPadding(3); place(0, 8, mConnectButton); place(4, 8, mOkButton); place(3, 8, mCancelButton); // Do this manually instead of calling reflowLayout so we can enforce a // minimum width. int width = 0; int height = 0; getLayout().reflow(width, height); if (width < 300) { width = 300; getLayout().reflow(width, height); } if (height < 120) { height = 120; getLayout().reflow(width, height); } setContentSize(width, height); setMinWidth(getWidth()); setMinHeight(getHeight()); setDefaultSize(getWidth(), getHeight(), ImagePosition::CENTER); setResizable(false); addKeyListener(this); loadWindowState(); mNameField->setText(mServer.name); mDescriptionField->setText(mServer.description); mOnlineListUrlField->setText(mServer.onlineListUrl); mServerAddressField->setText(mServer.hostname); mPacketVersionField->setValue(mServer.packetVersion); mPortField->setText(toString(mServer.port)); mPersistentIp->setSelected(mServer.persistentIp); switch (mServer.type) { case ServerType::EATHENA: #ifdef TMWA_SUPPORT mTypeField->setSelected(1); #else // TMWA_SUPPORT mTypeField->setSelected(0); #endif // TMWA_SUPPORT break; default: case ServerType::UNKNOWN: case ServerType::TMWATHENA: mTypeField->setSelected(0); break; case ServerType::EVOL2: #ifdef TMWA_SUPPORT mTypeField->setSelected(2); #else // TMWA_SUPPORT mTypeField->setSelected(1); #endif // TMWA_SUPPORT break; } setLocationRelativeTo(getParentWindow()); }
ItemAmountWindow::ItemAmountWindow(Usage usage, Window *parent, Item *item, int maxRange): Window("", true, parent, "amount.xml"), mItemPriceTextField(nullptr), mGPLabel(nullptr), mItem(item), mMax(maxRange), mUsage(usage), mItemPriceSlide(nullptr), mItemsModal(nullptr), mPrice(0) { if (!mItem) { setVisible(false); return; } if (usage == ShopBuyAdd) mMax = 10000; else if (!mMax) mMax = mItem->getQuantity(); // Save keyboard state mEnabledKeyboard = keyboard.isEnabled(); keyboard.setEnabled(false); // Integer field mItemAmountTextField = new IntTextField(1); mItemAmountTextField->setRange(1, mMax); mItemAmountTextField->setWidth(35); mItemAmountTextField->addKeyListener(this); // Slider mItemAmountSlide = new Slider(1.0, mMax); mItemAmountSlide->setHeight(10); mItemAmountSlide->setActionEventId("slide"); mItemAmountSlide->addActionListener(this); if (mUsage == ShopBuyAdd || mUsage == ShopSellAdd) { // Integer field mItemPriceTextField = new IntTextField(1); mItemPriceTextField->setRange(1, 10000000); mItemPriceTextField->setWidth(35); mItemPriceTextField->addKeyListener(this); // Slider mItemPriceSlide = new Slider(1.0, 10000000); mItemPriceSlide->setHeight(10); mItemPriceSlide->setActionEventId("slidePrice"); mItemPriceSlide->addActionListener(this); mGPLabel = new Label(" GP"); } if (mUsage == ShopBuyAdd) { mItemsModal = new ItemsModal; mItemDropDown = new DropDown(mItemsModal); mItemDropDown->setActionEventId("itemType"); mItemDropDown->addActionListener(this); } //Item icon Image *image = item->getImage(); mItemIcon = new Icon(image); // Buttons Button *minusAmountButton = new Button(_("-"), "dec", this); Button *plusAmountButton = new Button(_("+"), "inc", this); Button *okButton = new Button(_("OK"), "ok", this); Button *cancelButton = new Button(_("Cancel"), "cancel", this); Button *addAllButton = new Button(_("All"), "all", this); minusAmountButton->adjustSize(); minusAmountButton->setWidth(plusAmountButton->getWidth()); // Set positions ContainerPlacer placer; placer = getPlacer(0, 0); int n = 0; if (mUsage == ShopBuyAdd) { placer(0, n, mItemDropDown, 8); n++; } placer(1, n, minusAmountButton); placer(2, n, mItemAmountTextField, 3); placer(5, n, plusAmountButton); placer(6, n, addAllButton); placer(0, n, mItemIcon, 1, 3); placer(1, n + 1, mItemAmountSlide, 7); if (mUsage == ShopBuyAdd || mUsage == ShopSellAdd) { Button *minusPriceButton = new Button(_("-"), "decPrice", this); Button *plusPriceButton = new Button(_("+"), "incPrice", this); minusPriceButton->adjustSize(); minusPriceButton->setWidth(plusPriceButton->getWidth()); placer(1, n + 2, minusPriceButton); placer(2, n + 2, mItemPriceTextField, 3); placer(5, n + 2, plusPriceButton); placer(6, n + 2, mGPLabel); placer(1, n + 3, mItemPriceSlide, 7); placer(4, n + 5, cancelButton); placer(5, n + 5, okButton); } else { placer(4, n + 2, cancelButton); placer(5, n + 2, okButton); } reflowLayout(225, 0); resetAmount(); switch (usage) { case TradeAdd: setCaption(_("Select amount of items to trade.")); break; case ItemDrop: setCaption(_("Select amount of items to drop.")); break; case StoreAdd: setCaption(_("Select amount of items to store.")); break; case StoreRemove: setCaption(_("Select amount of items to retrieve.")); break; case ItemSplit: setCaption(_("Select amount of items to split.")); break; case ShopBuyAdd: setCaption(_("Add to buy shop.")); break; case ShopSellAdd: setCaption(_("Add to sell shop.")); break; default: setCaption(_("Unknown.")); break; } setLocationRelativeTo(getParentWindow()); setVisible(true); mItemPopup = new ItemPopup; mItemIcon->addMouseListener(this); }
ItemAmountWindow::ItemAmountWindow(Usage usage, Window *parent, Item *item, int maxRange): Window("", true, parent), mItem(item), mMax(maxRange), mUsage(usage) { if (!mMax) mMax = mItem->getQuantity(); // Save keyboard state mEnabledKeyboard = keyboard.isEnabled(); keyboard.setEnabled(false); // Integer field mItemAmountTextField = new IntTextField(1); mItemAmountTextField->setRange(1, mMax); mItemAmountTextField->setWidth(35); mItemAmountTextField->addKeyListener(this); // Slider mItemAmountSlide = new Slider(1.0, mMax); mItemAmountSlide->setHeight(10); mItemAmountSlide->setActionEventId("slide"); mItemAmountSlide->addActionListener(this); //Item icon Image *image = item->getImage(); mItemIcon = new Icon(image); // Buttons Button *minusButton = new Button(_("-"), "dec", this); Button *plusButton = new Button(_("+"), "inc", this); Button *okButton = new Button(_("OK"), "ok", this); Button *cancelButton = new Button(_("Cancel"), "cancel", this); Button *addAllButton = new Button(_("All"), "all", this); minusButton->adjustSize(); minusButton->setWidth(plusButton->getWidth()); // Set positions ContainerPlacer place; place = getPlacer(0, 0); place(1, 0, minusButton); place(2, 0, mItemAmountTextField); place(3, 0, plusButton); place(4, 0, addAllButton); place(0, 0, mItemIcon, 1, 3); place(1, 1, mItemAmountSlide, 5); place(4, 2, cancelButton); place(5, 2, okButton); reflowLayout(225, 0); resetAmount(); switch (usage) { case TradeAdd: setCaption(_("Select amount of items to trade.")); break; case ItemDrop: setCaption(_("Select amount of items to drop.")); break; case StoreAdd: setCaption(_("Select amount of items to store.")); break; case StoreRemove: setCaption(_("Select amount of items to retrieve.")); break; case ItemSplit: setCaption(_("Select amount of items to split.")); break; } setLocationRelativeTo(getParentWindow()); setVisible(true); mItemPopup = new ItemPopup; mItemIcon->addMouseListener(this); }