summaryrefslogtreecommitdiff
path: root/src/gui/windows
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2014-09-22 15:17:04 +0300
committerAndrei Karas <akaras@inbox.ru>2014-09-22 15:21:50 +0300
commitbf3c7384ad1b1fce8beac97f8715eb054158f72e (patch)
treedb38eb13a8d20329c410fdb97c1ad204f41c4eb9 /src/gui/windows
parent23ca69dbf704cd289d58f023689289fcab515464 (diff)
downloadplus-bf3c7384ad1b1fce8beac97f8715eb054158f72e.tar.gz
plus-bf3c7384ad1b1fce8beac97f8715eb054158f72e.tar.bz2
plus-bf3c7384ad1b1fce8beac97f8715eb054158f72e.tar.xz
plus-bf3c7384ad1b1fce8beac97f8715eb054158f72e.zip
Move selldialog from window into widgets.
Diffstat (limited to 'src/gui/windows')
-rw-r--r--src/gui/windows/npcselldialog.h2
-rw-r--r--src/gui/windows/selldialog.cpp310
-rw-r--r--src/gui/windows/selldialog.h142
-rw-r--r--src/gui/windows/shopselldialog.h2
4 files changed, 2 insertions, 454 deletions
diff --git a/src/gui/windows/npcselldialog.h b/src/gui/windows/npcselldialog.h
index 02df1e143..7f0e43506 100644
--- a/src/gui/windows/npcselldialog.h
+++ b/src/gui/windows/npcselldialog.h
@@ -23,7 +23,7 @@
#ifndef GUI_WINDOWS_NPCSELLDIALOG_H
#define GUI_WINDOWS_NPCSELLDIALOG_H
-#include "gui/windows/selldialog.h"
+#include "gui/widgets/selldialog.h"
/**
* The sell dialog.
diff --git a/src/gui/windows/selldialog.cpp b/src/gui/windows/selldialog.cpp
deleted file mode 100644
index 4d4c4d8df..000000000
--- a/src/gui/windows/selldialog.cpp
+++ /dev/null
@@ -1,310 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2014 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "gui/windows/selldialog.h"
-
-#include "shopitem.h"
-#include "units.h"
-
-#include "being/playerinfo.h"
-
-#include "gui/windows/confirmdialog.h"
-#include "gui/windows/setupwindow.h"
-#include "gui/windows/tradewindow.h"
-
-#include "gui/models/shopitems.h"
-
-#include "gui/widgets/button.h"
-#include "gui/widgets/containerplacer.h"
-#include "gui/widgets/label.h"
-#include "gui/widgets/layout.h"
-#include "gui/widgets/layouttype.h"
-#include "gui/widgets/scrollarea.h"
-#include "gui/widgets/shoplistbox.h"
-#include "gui/widgets/slider.h"
-
-#include "net/buysellhandler.h"
-#include "net/net.h"
-#include "net/npchandler.h"
-
-#include "resources/iteminfo.h"
-
-#include "utils/delete2.h"
-#include "utils/gettext.h"
-
-#include "debug.h"
-
-SellDialog::DialogList SellDialog::instances;
-
-SellDialog::SellDialog() :
- // TRANSLATORS: sell dialog name
- Window(_("Sell"), false, nullptr, "sell.xml"),
- ActionListener(),
- SelectionListener(),
- mPlayerMoney(0),
- mMaxItems(0),
- mAmountItems(0)
-{
- setWindowName("Sell");
- setResizable(true);
- setCloseButton(true);
- setStickyButtonLock(true);
- setMinWidth(260);
- setMinHeight(220);
- setDefaultSize(260, 230, ImageRect::CENTER);
-
- if (setupWindow)
- setupWindow->registerWindowForReset(this);
-
- // Create a ShopItems instance, that is aware of duplicate entries.
- mShopItems = new ShopItems(true);
-
- mShopItemList = new ShopListBox(this, mShopItems, mShopItems);
- mShopItemList->postInit();
- mShopItemList->setProtectItems(true);
- mScrollArea = new ScrollArea(this, mShopItemList,
- 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());
-
- mIncreaseButton->setEnabled(false);
- mDecreaseButton->setEnabled(false);
- mSellButton->setEnabled(false);
- mSlider->setEnabled(false);
-
- mShopItemList->setDistributeMousePressed(false);
- mShopItemList->setPriceCheck(false);
- mShopItemList->addSelectionListener(this);
- 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);
-
- Layout &layout = getLayout();
- layout.setRowHeight(0, LayoutType::SET);
-
- center();
- loadWindowState();
-
- instances.push_back(this);
- setVisible(true);
- enableVisibleSound(true);
-}
-
-SellDialog::~SellDialog()
-{
- delete2(mShopItems);
- instances.remove(this);
-}
-
-void SellDialog::reset()
-{
- mShopItems->clear();
- mSlider->setValue(0);
- mShopItemList->setSelected(-1);
- updateButtonsAndLabels();
-}
-
-void SellDialog::addItem(const Item *const item, const int price)
-{
- if (!item)
- return;
-
- mShopItems->addItem2(item->getInvIndex(), item->getId(),
- item->getColor(), item->getQuantity(), price);
-
- mShopItemList->adjustSize();
-}
-
-void SellDialog::addItem(const int id, const unsigned char color,
- const int amount, const int price)
-{
- mShopItems->addItem(id, color, amount, price);
- mShopItemList->adjustSize();
-}
-
-
-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")
- {
- mAmountItems = static_cast<int>(mSlider->getValue());
- updateButtonsAndLabels();
- }
- else if (eventId == "inc" && mAmountItems < mMaxItems)
- {
- mAmountItems++;
- mSlider->setValue(mAmountItems);
- updateButtonsAndLabels();
- }
- else if (eventId == "dec" && mAmountItems > 1)
- {
- mAmountItems--;
- mSlider->setValue(mAmountItems);
- updateButtonsAndLabels();
- }
- else if (eventId == "max")
- {
- mAmountItems = mMaxItems;
- mSlider->setValue(mAmountItems);
- updateButtonsAndLabels();
- }
- else if ((eventId == "presell" || eventId == "sell" || eventId == "yes")
- && mAmountItems > 0 && mAmountItems <= mMaxItems)
- {
- sellAction(event);
- }
-}
-
-void SellDialog::valueChanged(const SelectionEvent &event A_UNUSED)
-{
- // Reset amount of items and update labels
- mAmountItems = 1;
- mSlider->setValue(0);
-
- updateButtonsAndLabels();
- mSlider->setScale(1, mMaxItems);
-}
-
-void SellDialog::setMoney(const int amount)
-{
- mPlayerMoney = amount;
- mShopItemList->setPlayersMoney(amount);
-}
-
-void SellDialog::updateButtonsAndLabels()
-{
- const int selectedItem = mShopItemList->getSelected();
- int income = 0;
- ShopItem *item = nullptr;
-
- if (selectedItem > -1 && mShopItems->at(selectedItem))
- {
- item = mShopItems->at(selectedItem);
- if (item)
- {
- mMaxItems = item->getQuantity();
- if (mAmountItems > mMaxItems)
- mAmountItems = mMaxItems;
- income = mAmountItems * mShopItems->at(selectedItem)->getPrice();
- }
- else
- {
- mMaxItems = 0;
- mAmountItems = 0;
- }
- }
- else
- {
- mMaxItems = 0;
- mAmountItems = 0;
- }
-
- // 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 (item)
- item->update();
-}
-
-void SellDialog::setVisible(bool visible)
-{
- Window::setVisible(visible);
-
- if (visible)
- {
- if (mShopItemList)
- mShopItemList->requestFocus();
- }
- else
- {
- scheduleDelete();
- }
-}
-
-void SellDialog::closeAll()
-{
- FOR_EACH (DialogList::const_iterator, it, instances)
- (*it)->close();
-}
diff --git a/src/gui/windows/selldialog.h b/src/gui/windows/selldialog.h
deleted file mode 100644
index b97cb13dc..000000000
--- a/src/gui/windows/selldialog.h
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2014 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef GUI_WINDOWS_SELLDIALOG_H
-#define GUI_WINDOWS_SELLDIALOG_H
-
-#include "gui/widgets/window.h"
-
-#include "listeners/actionlistener.h"
-#include "listeners/selectionlistener.h"
-
-class Button;
-class Item;
-class Label;
-class ScrollArea;
-class ShopItems;
-class ShopListBox;
-class Slider;
-
-/**
- * The sell dialog.
- *
- * \ingroup Interface
- */
-class SellDialog notfinal : public Window,
- public ActionListener,
- private SelectionListener
-{
- public:
- /**
- * Constructor.
- *
- * @see Window::Window
- */
- SellDialog();
-
- /**
- * Constructor.
- */
- explicit SellDialog(const std::string &nick);
-
- A_DELETE_COPY(SellDialog)
-
- /**
- * Destructor
- */
- ~SellDialog();
-
- /**
- * Resets the dialog, clearing inventory.
- */
- void reset();
-
- /**
- * Adds an item to the inventory.
- */
- void addItem(const Item *const item, const int price);
-
- /**
- * Called when receiving actions from the widgets.
- */
- void action(const ActionEvent &event) override final;
-
- /**
- * Updates labels according to selected item.
- *
- * @see SelectionListener::selectionChanged
- */
- void valueChanged(const SelectionEvent &event) override final;
-
- /**
- * Gives Player's Money amount
- */
- void setMoney(const int amount);
-
- /**
- * Sets the visibility of this window.
- */
- void setVisible(bool visible) override final;
-
- void addItem(const int id, const unsigned char color,
- const int amount, const int price);
-
- /**
- * Returns true if any instances exist.
- */
- static bool isActive() A_WARN_UNUSED
- { return !instances.empty(); }
-
- /**
- * Closes all instances.
- */
- static void closeAll();
-
- protected:
- typedef std::list<SellDialog*> DialogList;
- static DialogList instances;
-
- /**
- * Updates the state of buttons and labels.
- */
- void updateButtonsAndLabels();
-
- virtual void sellAction(const ActionEvent &event) = 0;
-
- Button *mSellButton;
- Button *mQuitButton;
- Button *mAddMaxButton;
- Button *mIncreaseButton;
- Button *mDecreaseButton;
- ShopListBox *mShopItemList;
- ScrollArea *mScrollArea;
- Label *mMoneyLabel;
- Label *mQuantityLabel;
- Slider *mSlider;
- ShopItems *mShopItems;
-
- int mPlayerMoney;
- int mMaxItems;
- int mAmountItems;
-};
-
-#endif // GUI_WINDOWS_SELLDIALOG_H
diff --git a/src/gui/windows/shopselldialog.h b/src/gui/windows/shopselldialog.h
index 8ae90d903..9fb8c1635 100644
--- a/src/gui/windows/shopselldialog.h
+++ b/src/gui/windows/shopselldialog.h
@@ -23,7 +23,7 @@
#ifndef GUI_WINDOWS_SHOPSELLDIALOG_H
#define GUI_WINDOWS_SHOPSELLDIALOG_H
-#include "gui/windows/selldialog.h"
+#include "gui/widgets/selldialog.h"
/**
* The sell dialog.