diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/gui/windows/shopwindow.cpp | 185 | ||||
-rw-r--r-- | src/gui/windows/shopwindow.h | 22 |
2 files changed, 109 insertions, 98 deletions
diff --git a/src/gui/windows/shopwindow.cpp b/src/gui/windows/shopwindow.cpp index 2ba34e861..b04e60c59 100644 --- a/src/gui/windows/shopwindow.cpp +++ b/src/gui/windows/shopwindow.cpp @@ -42,6 +42,7 @@ #include "gui/widgets/layouttype.h" #include "gui/widgets/scrollarea.h" #include "gui/widgets/shoplistbox.h" +#include "gui/widgets/tabstrip.h" #include "actormanager.h" #include "configuration.h" @@ -87,32 +88,18 @@ ShopWindow::ShopWindow() : mTradeItem(nullptr), mBuyShopItemList(new ShopListBox(this, mBuyShopItems, mBuyShopItems)), mSellShopItemList(new ShopListBox(this, mSellShopItems, mSellShopItems)), - mBuyScrollArea(new ScrollArea(this, mBuyShopItemList, + mScrollArea(new ScrollArea(this, mBuyShopItemList, getOptionBool("showbuybackground"), "shop_buy_background.xml")), - mSellScrollArea(new ScrollArea(this, mSellShopItemList, - getOptionBool("showsellbackground"), "shop_sell_background.xml")), // TRANSLATORS: shop window label - mBuyLabel(new Label(this, _("Buy items"))), + mAddButton(new Button(this, _("Add"), "add", this)), // TRANSLATORS: shop window label - mSellLabel(new Label(this, _("Sell items"))), + mDeleteButton(new Button(this, _("Delete"), "delete", this)), // TRANSLATORS: shop window label - mBuyAddButton(new Button(this, _("Add"), "add buy", this)), - // TRANSLATORS: shop window label - mBuyDeleteButton(new Button(this, _("Delete"), "delete buy", this)), - // TRANSLATORS: shop window label - mBuyAnnounceButton(new Button(this, _("Announce"), "announce buy", this)), - mBuyAuctionButton(nullptr), - // TRANSLATORS: shop window button - mSellAddButton(new Button(this, _("Add"), "add sell", this)), - // TRANSLATORS: shop window button - mSellDeleteButton(new Button(this, _("Delete"), "delete sell", this)), - // TRANSLATORS: shop window button - mSellAnnounceButton(new Button(this, _("Announce"), - "announce sell", this)), - mSellAuctionButton(nullptr), + mAnnounceButton(new Button(this, _("Announce"), "announce", this)), // TRANSLATORS: shop window checkbox mAnnounceLinks(new CheckBox(this, _("Show links in announce"), false, this, "link announce")), + mTabs(nullptr), mAcceptPlayer(""), mTradeNick(""), mSelectedItem(-1), @@ -120,7 +107,8 @@ ShopWindow::ShopWindow() : mLastRequestTimeList(0), mLastRequestTimeItem(0), mRandCounter(0), - mTradeMoney(0) + mTradeMoney(0), + isBuySelected(true) { mBuyShopItemList->postInit(); mSellShopItemList->postInit(); @@ -139,6 +127,17 @@ ShopWindow::ShopWindow() : if (setupWindow) setupWindow->registerWindowForReset(this); + + const int size = config.getIntValue("fontSize") + + getOption("tabHeightAdjust", 16); + mTabs = new TabStrip(this, "shop", size); + mTabs->addActionListener(this); + mTabs->setActionEventId("tab_"); + // TRANSLATORS: shop window tab name + mTabs->addButton(_("Buy"), "buy", true); + // TRANSLATORS: shop window tab name + mTabs->addButton(_("Sell"), "sell", false); + mAnnounceCounter[BUY] = 0; mAnnounceCounter[SELL] = 0; @@ -147,8 +146,7 @@ ShopWindow::ShopWindow() : mBuyShopItemList->setPriceCheck(false); mSellShopItemList->setPriceCheck(false); - mBuyScrollArea->setHorizontalScrollPolicy(ScrollArea::SHOW_NEVER); - mSellScrollArea->setHorizontalScrollPolicy(ScrollArea::SHOW_NEVER); + mScrollArea->setHorizontalScrollPolicy(ScrollArea::SHOW_NEVER); mBuyShopItemList->addSelectionListener(this); mSellShopItemList->addSelectionListener(this); @@ -156,21 +154,14 @@ ShopWindow::ShopWindow() : ContainerPlacer placer; placer = getPlacer(0, 0); - placer(0, 0, mBuyLabel, 8).setPadding(3); - placer(8, 0, mSellLabel, 8).setPadding(3); - placer(0, 1, mBuyScrollArea, 8, 5).setPadding(3); - placer(8, 1, mSellScrollArea, 8, 5).setPadding(3); - placer(0, 6, mBuyAddButton); - placer(1, 6, mBuyDeleteButton); - placer(3, 6, mBuyAnnounceButton); - placer(8, 6, mSellAddButton); - placer(9, 6, mSellDeleteButton); - placer(11, 6, mSellAnnounceButton); - placer(0, 7, mAnnounceLinks, 8); - placer(15, 7, mCloseButton); - - mBuyAuctionButton = nullptr; - mSellAuctionButton = nullptr; + placer(0, 0, mTabs, 8).setPadding(3); + + placer(0, 1, mScrollArea, 8, 5).setPadding(3); + placer(0, 6, mAddButton); + placer(1, 6, mDeleteButton); + placer(2, 6, mAnnounceButton); + placer(0, 7, mAnnounceLinks, 7); + placer(7, 7, mCloseButton); Layout &layout = getLayout(); layout.setRowHeight(0, LayoutType::SET); @@ -185,7 +176,7 @@ void ShopWindow::postInit() { setVisible(false); enableVisibleSound(true); - updateButtonsAndLabels(); + updateSelection(); } ShopWindow::~ShopWindow() @@ -219,39 +210,46 @@ void ShopWindow::action(const ActionEvent &event) player_relations.ignoreTrade(mTradeNick); mTradeNick.clear(); } - else if (eventId == "delete buy" && mBuyShopItemList - && mBuyShopItemList->getSelected() >= 0) - { - mBuyShopItems->del(mBuyShopItemList->getSelected()); - if (isShopEmpty() && localPlayer) - localPlayer->updateStatus(); - } - else if (eventId == "delete sell" && mSellShopItemList - && mSellShopItemList->getSelected() >= 0) - { - mSellShopItems->del(mSellShopItemList->getSelected()); - if (isShopEmpty() && localPlayer) - localPlayer->updateStatus(); - } - else if (eventId == "announce buy" && mBuyShopItems - && mBuyShopItems->getNumberOfElements() > 0) + else if (eventId == "delete") { - announce(mBuyShopItems, BUY); + if (isBuySelected) + { + if (mBuyShopItemList && mBuyShopItemList->getSelected() >= 0) + { + mBuyShopItems->del(mBuyShopItemList->getSelected()); + if (isShopEmpty() && localPlayer) + localPlayer->updateStatus(); + } + } + else if (mSellShopItemList + && mSellShopItemList->getSelected() >= 0) + { + mSellShopItems->del(mSellShopItemList->getSelected()); + if (isShopEmpty() && localPlayer) + localPlayer->updateStatus(); + } } - else if (eventId == "announce sell" && mSellShopItems - && mSellShopItems->getNumberOfElements() > 0) + else if (eventId == "announce") { - announce(mSellShopItems, SELL); + if (isBuySelected) + { + if (mBuyShopItems && mBuyShopItems->getNumberOfElements() > 0) + announce(mBuyShopItems, BUY); + } + else if (mSellShopItems && mSellShopItems->getNumberOfElements() > 0) + { + announce(mSellShopItems, SELL); + } } - else if (eventId == "auction buy" && mBuyShopItems - && mBuyShopItems->getNumberOfElements() > 0) + else if (eventId == "tab_buy") { - chatHandler->privateMessage("AuctionBot", "!pull4144 seek"); + isBuySelected = true; + updateSelection(); } - else if (eventId == "auction sell" && mSellShopItems - && mSellShopItems->getNumberOfElements() > 0) + else if (eventId == "tab_sell") { - chatHandler->privateMessage("AuctionBot", "!pull4144 offer"); + isBuySelected = false; + updateSelection(); } if (mSelectedItem < 1) @@ -265,15 +263,18 @@ void ShopWindow::action(const ActionEvent &event) Item *const item = inv->findItem(mSelectedItem, 0); if (item) { - if (eventId == "add buy") - { - ItemAmountWindow::showWindow(ItemAmountWindow::ShopBuyAdd, - this, item, sumAmount(item)); - } - else if (eventId == "add sell") + if (eventId == "add") { - ItemAmountWindow::showWindow(ItemAmountWindow::ShopSellAdd, - this, item, sumAmount(item)); + if (isBuySelected) + { + ItemAmountWindow::showWindow(ItemAmountWindow::ShopBuyAdd, + this, item, sumAmount(item)); + } + else + { + ItemAmountWindow::showWindow(ItemAmountWindow::ShopSellAdd, + this, item, sumAmount(item)); + } } } } @@ -307,14 +308,19 @@ void ShopWindow::valueChanged(const SelectionEvent &event A_UNUSED) void ShopWindow::updateButtonsAndLabels() { - mBuyAddButton->setEnabled(mSelectedItem != -1); - mSellAddButton->setEnabled(mSelectedItem != -1); - mBuyDeleteButton->setEnabled( - mBuyShopItemList->getSelected() != -1 - && mBuyShopItems->getNumberOfElements() > 0); - mSellDeleteButton->setEnabled( - mSellShopItemList->getSelected() != -1 - && mSellShopItems->getNumberOfElements() > 0); + mAddButton->setEnabled(mSelectedItem != -1); + bool allowDel(false); + if (isBuySelected) + { + allowDel = mBuyShopItemList->getSelected() != -1 + && mBuyShopItems->getNumberOfElements() > 0; + } + else + { + allowDel = mSellShopItemList->getSelected() != -1 + && mSellShopItems->getNumberOfElements() > 0; + } + mDeleteButton->setEnabled(allowDel); } void ShopWindow::setVisible(bool visible) @@ -494,10 +500,8 @@ void ShopWindow::announce(ShopItems *const list, const int mode) } mAnnonceTime = cur_time; - if (mBuyAnnounceButton) - mBuyAnnounceButton->setEnabled(false); - if (mSellAnnounceButton) - mSellAnnounceButton->setEnabled(false); + if (mAnnounceButton) + mAnnounceButton->setEnabled(false); std::vector<ShopItem*> items = list->items(); @@ -794,8 +798,7 @@ void ShopWindow::updateTimes() if (mAnnonceTime + (2 * 60) < cur_time || mAnnonceTime > cur_time) { - mBuyAnnounceButton->setEnabled(true); - mSellAnnounceButton->setEnabled(true); + mAnnounceButton->setEnabled(true); } BLOCK_END("ShopWindow::updateTimes") } @@ -874,3 +877,13 @@ bool ShopWindow::isShopEmpty() const return true; return false; } + +void ShopWindow::updateSelection() +{ + if (isBuySelected) + mCurrentShopItemList = mBuyShopItemList; + else + mCurrentShopItemList = mSellShopItemList; + mScrollArea->setContent(mCurrentShopItemList); + updateButtonsAndLabels(); +} diff --git a/src/gui/windows/shopwindow.h b/src/gui/windows/shopwindow.h index c8ad56294..8ab765e3c 100644 --- a/src/gui/windows/shopwindow.h +++ b/src/gui/windows/shopwindow.h @@ -36,6 +36,7 @@ class ScrollArea; class ShopItem; class ShopItems; class ShopListBox; +class TabStrip; /** * The buy dialog. @@ -140,6 +141,8 @@ class ShopWindow final : public Window, private: void startTrade(); + void updateSelection(); + typedef std::list<ShopWindow*> DialogList; static DialogList instances; @@ -151,19 +154,13 @@ class ShopWindow final : public Window, ShopListBox *mBuyShopItemList; ShopListBox *mSellShopItemList; - ScrollArea *mBuyScrollArea; - ScrollArea *mSellScrollArea; - Label *mBuyLabel; - Label *mSellLabel; - Button *mBuyAddButton; - Button *mBuyDeleteButton; - Button *mBuyAnnounceButton; - Button *mBuyAuctionButton; - Button *mSellAddButton; - Button *mSellDeleteButton; - Button *mSellAnnounceButton; - Button *mSellAuctionButton; + ShopListBox *mCurrentShopItemList; + ScrollArea *mScrollArea; + Button *mAddButton; + Button *mDeleteButton; + Button *mAnnounceButton; CheckBox *mAnnounceLinks; + TabStrip *mTabs; std::string mAcceptPlayer; std::string mTradeNick; int mSelectedItem; @@ -173,6 +170,7 @@ class ShopWindow final : public Window, int mRandCounter; int mTradeMoney; int mAnnounceCounter[2]; + bool isBuySelected; }; extern ShopWindow *shopWindow; |