diff options
Diffstat (limited to 'src/gui/widgets')
-rw-r--r-- | src/gui/widgets/selldialog.cpp | 141 | ||||
-rw-r--r-- | src/gui/widgets/selldialog.h | 16 |
2 files changed, 97 insertions, 60 deletions
diff --git a/src/gui/widgets/selldialog.cpp b/src/gui/widgets/selldialog.cpp index 85eda5f43..611850398 100644 --- a/src/gui/widgets/selldialog.cpp +++ b/src/gui/widgets/selldialog.cpp @@ -55,14 +55,30 @@ SellDialog::DialogList SellDialog::instances; -SellDialog::SellDialog() : +SellDialog::SellDialog(const bool isSell) : // TRANSLATORS: sell dialog name Window(_("Sell"), false, nullptr, "sell.xml"), ActionListener(), SelectionListener(), + mSellButton(nullptr), + mQuitButton(nullptr), + mAddMaxButton(nullptr), + mIncreaseButton(nullptr), + mDecreaseButton(nullptr), + mShopItemList(nullptr), + mScrollArea(nullptr), + mMoneyLabel(nullptr), + mQuantityLabel(nullptr), + mSlider(nullptr), + mShopItems(nullptr), mPlayerMoney(0), mMaxItems(0), - mAmountItems(0) + mAmountItems(0), + mIsSell(isSell) +{ +} + +void SellDialog::postInit() { setWindowName("Sell"); setResizable(true); @@ -85,33 +101,14 @@ SellDialog::SellDialog() : getOptionBool("showbackground"), "sell_background.xml"); mScrollArea->setHorizontalScrollPolicy(ScrollArea::SHOW_NEVER); - mSlider = new Slider(this, 1.0, 1.0); - - mQuantityLabel = new Label(this, strprintf( - "%d / %d", mAmountItems, mMaxItems)); - mQuantityLabel->setAlignment(Graphics::CENTER); - // TRANSLATORS: sell dialog label - mMoneyLabel = new Label(this, strprintf(_("Price: %s / Total: %s"), - "", "")); - - // TRANSLATORS: sell dialog button - mIncreaseButton = new Button(this, _("+"), "inc", this); - // TRANSLATORS: sell dialog button - mDecreaseButton = new Button(this, _("-"), "dec", this); // TRANSLATORS: sell dialog button mSellButton = new Button(this, _("Sell"), "presell", this); // TRANSLATORS: sell dialog button mQuitButton = new Button(this, _("Quit"), "quit", this); - // TRANSLATORS: sell dialog button - mAddMaxButton = new Button(this, _("Max"), "max", this); - mDecreaseButton->adjustSize(); - mDecreaseButton->setWidth(mIncreaseButton->getWidth()); + initButtons(); - mIncreaseButton->setEnabled(false); - mDecreaseButton->setEnabled(false); mSellButton->setEnabled(false); - mSlider->setEnabled(false); mShopItemList->setDistributeMousePressed(false); mShopItemList->setPriceCheck(false); @@ -119,21 +116,50 @@ SellDialog::SellDialog() : mShopItemList->setActionEventId("sell"); mShopItemList->addActionListener(this); - mSlider->setActionEventId("slider"); - mSlider->addActionListener(this); - ContainerPlacer placer; placer = getPlacer(0, 0); - placer(0, 0, mScrollArea, 8, 5).setPadding(3); - placer(0, 5, mDecreaseButton); - placer(1, 5, mSlider, 3); - placer(4, 5, mIncreaseButton); - placer(5, 5, mQuantityLabel, 2); - placer(7, 5, mAddMaxButton); - placer(0, 6, mMoneyLabel, 8); - placer(6, 7, mSellButton); - placer(7, 7, mQuitButton); + if (mIsSell) + { + // TRANSLATORS: sell dialog button + mIncreaseButton = new Button(this, _("+"), "inc", this); + // TRANSLATORS: sell dialog button + mDecreaseButton = new Button(this, _("-"), "dec", this); + // TRANSLATORS: sell dialog button + mAddMaxButton = new Button(this, _("Max"), "max", this); + mSlider = new Slider(this, 1.0, 1.0); + + mQuantityLabel = new Label(this, strprintf( + "%d / %d", mAmountItems, mMaxItems)); + mQuantityLabel->setAlignment(Graphics::CENTER); + // TRANSLATORS: sell dialog label + mMoneyLabel = new Label(this, strprintf(_("Price: %s / Total: %s"), + "", "")); + + mDecreaseButton->adjustSize(); + mDecreaseButton->setWidth(mIncreaseButton->getWidth()); + mIncreaseButton->setEnabled(false); + mDecreaseButton->setEnabled(false); + mSlider->setEnabled(false); + mSlider->setActionEventId("slider"); + mSlider->addActionListener(this); + + placer(0, 0, mScrollArea, 8, 5).setPadding(3); + placer(0, 5, mDecreaseButton); + placer(1, 5, mSlider, 3); + placer(4, 5, mIncreaseButton); + placer(5, 5, mQuantityLabel, 2); + placer(7, 5, mAddMaxButton); + placer(0, 6, mMoneyLabel, 8); + placer(6, 7, mSellButton); + placer(7, 7, mQuitButton); + } + else + { + placer(0, 0, mScrollArea, 8, 5).setPadding(3); + placer(6, 5, mSellButton); + placer(7, 5, mQuitButton); + } Layout &layout = getLayout(); layout.setRowHeight(0, LayoutType::SET); @@ -203,26 +229,25 @@ void SellDialog::action(const ActionEvent &event) mAmountItems = static_cast<int>(mSlider->getValue()); updateButtonsAndLabels(); } - else if (eventId == "inc" && mAmountItems < mMaxItems) + else if (eventId == "inc" && mSlider && mAmountItems < mMaxItems) { mAmountItems++; mSlider->setValue(mAmountItems); updateButtonsAndLabels(); } - else if (eventId == "dec" && mAmountItems > 1) + else if (eventId == "dec" && mSlider && mAmountItems > 1) { mAmountItems--; mSlider->setValue(mAmountItems); updateButtonsAndLabels(); } - else if (eventId == "max") + else if (eventId == "max" && mSlider) { mAmountItems = mMaxItems; mSlider->setValue(mAmountItems); updateButtonsAndLabels(); } - else if ((eventId == "presell" || eventId == "sell" || eventId == "yes") - && mAmountItems > 0 && mAmountItems <= mMaxItems) + else if (eventId == "presell" || eventId == "sell" || eventId == "yes") { sellAction(event); } @@ -232,10 +257,12 @@ void SellDialog::valueChanged(const SelectionEvent &event A_UNUSED) { // Reset amount of items and update labels mAmountItems = 1; - mSlider->setValue(0); - + if (mSlider) + { + mSlider->setValue(0); + mSlider->setScale(1, mMaxItems); + } updateButtonsAndLabels(); - mSlider->setScale(1, mMaxItems); } void SellDialog::setMoney(const int amount) @@ -274,16 +301,26 @@ void SellDialog::updateButtonsAndLabels() // Update Buttons and slider mSellButton->setEnabled(mAmountItems > 0); - mDecreaseButton->setEnabled(mAmountItems > 1); - mIncreaseButton->setEnabled(mAmountItems < mMaxItems); - mSlider->setEnabled(mMaxItems > 1); - - // Update the quantity and money labels - mQuantityLabel->setCaption(strprintf("%d / %d", mAmountItems, mMaxItems)); - // TRANSLATORS: sell dialog label - mMoneyLabel->setCaption(strprintf(_("Price: %s / Total: %s"), - Units::formatCurrency(income).c_str(), - Units::formatCurrency(mPlayerMoney + income).c_str())); + if (mDecreaseButton) + mDecreaseButton->setEnabled(mAmountItems > 1); + if (mIncreaseButton) + mIncreaseButton->setEnabled(mAmountItems < mMaxItems); + if (mSlider) + mSlider->setEnabled(mMaxItems > 1); + + if (mQuantityLabel) + { + // Update the quantity and money labels + mQuantityLabel->setCaption(strprintf("%d / %d", + mAmountItems, mMaxItems)); + } + if (mMoneyLabel) + { + // TRANSLATORS: sell dialog label + mMoneyLabel->setCaption(strprintf(_("Price: %s / Total: %s"), + Units::formatCurrency(income).c_str(), + Units::formatCurrency(mPlayerMoney + income).c_str())); + } if (item) item->update(); } diff --git a/src/gui/widgets/selldialog.h b/src/gui/widgets/selldialog.h index 8ae2168d0..d147947b5 100644 --- a/src/gui/widgets/selldialog.h +++ b/src/gui/widgets/selldialog.h @@ -48,15 +48,8 @@ class SellDialog notfinal : public Window, public: /** * Constructor. - * - * @see Window::Window - */ - SellDialog(); - - /** - * Constructor. */ - explicit SellDialog(const std::string &nick); + explicit SellDialog(const bool isSell); A_DELETE_COPY(SellDialog) @@ -111,6 +104,8 @@ class SellDialog notfinal : public Window, */ static void closeAll(); + void postInit(); + protected: typedef std::list<SellDialog*> DialogList; static DialogList instances; @@ -122,6 +117,9 @@ class SellDialog notfinal : public Window, virtual void sellAction(const ActionEvent &event) = 0; + virtual void initButtons() + { } + Button *mSellButton; Button *mQuitButton; Button *mAddMaxButton; @@ -137,6 +135,8 @@ class SellDialog notfinal : public Window, int mPlayerMoney; int mMaxItems; int mAmountItems; + + bool mIsSell; }; #endif // GUI_WIDGETS_SELLDIALOG_H |