summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/gui/buy.cpp62
-rw-r--r--src/gui/buy.h9
-rw-r--r--src/gui/gui.cpp5
-rw-r--r--src/gui/gui.h5
-rw-r--r--src/gui/inventorywindow.cpp2
-rw-r--r--src/gui/item_amount.cpp48
-rw-r--r--src/gui/item_amount.h7
-rw-r--r--src/gui/npcintegerdialog.cpp5
-rw-r--r--src/gui/sell.cpp66
-rw-r--r--src/gui/sell.h9
10 files changed, 156 insertions, 62 deletions
diff --git a/src/gui/buy.cpp b/src/gui/buy.cpp
index ea1df204..c2c8cfed 100644
--- a/src/gui/buy.cpp
+++ b/src/gui/buy.cpp
@@ -22,6 +22,7 @@
#include "button.h"
#include "buy.h"
+#include "gui.h"
#include "label.h"
#include "scrollarea.h"
#include "shop.h"
@@ -39,11 +40,12 @@
#include "../utils/strprintf.h"
BuyDialog::BuyDialog(Network *network):
- Window(_("Buy")), mNetwork(network),
+ Window("Buy"), mNetwork(network),
mMoney(0), mAmountItems(0), mMaxItems(0)
{
setWindowName(_("Buy"));
setResizable(true);
+ setCloseButton(true);
setMinWidth(260);
setMinHeight(230);
setDefaultSize(260, 230, ImageRect::CENTER);
@@ -52,20 +54,25 @@ BuyDialog::BuyDialog(Network *network):
mShopItemList = new ShopListBox(mShopItems, mShopItems);
mScrollArea = new ScrollArea(mShopItemList);
+ mScrollArea->setHorizontalScrollPolicy(gcn::ScrollArea::SHOW_NEVER);
+
mSlider = new Slider(1.0);
- mQuantityLabel = new Label("0");
+
+ mQuantityLabel = new Label(strprintf("%d / %d", mAmountItems, mMaxItems));
+ mQuantityLabel->setAlignment(gcn::Graphics::CENTER);
mMoneyLabel = new Label(strprintf(_("Price: %d GP / Total: %d GP"), 0, 0));
+
mIncreaseButton = new Button("+", "+", this);
mDecreaseButton = new Button("-", "-", this);
mBuyButton = new Button(_("Buy"), "buy", this);
mQuitButton = new Button(_("Quit"), "quit", this);
+ mAddMaxButton = new Button(_("Max"), "max", this);
mItemDescLabel = new Label(strprintf(_("Description: %s"), ""));
mItemEffectLabel = new Label(strprintf(_("Effect: %s"), ""));
- mIncreaseButton->setSize(20, 20);
- mDecreaseButton->setSize(20, 20);
+ mIncreaseButton->setSize(gui->getFontHeight(), gui->getFontHeight());
+ mDecreaseButton->setSize(gui->getFontHeight(), gui->getFontHeight());
- mScrollArea->setHorizontalScrollPolicy(gcn::ScrollArea::SHOW_NEVER);
mIncreaseButton->setEnabled(false);
mDecreaseButton->setEnabled(false);
mBuyButton->setEnabled(false);
@@ -75,16 +82,21 @@ BuyDialog::BuyDialog(Network *network):
mSlider->addActionListener(this);
mShopItemList->addSelectionListener(this);
- place(0, 0, mScrollArea, 5).setPadding(3);
- place(0, 1, mQuantityLabel, 2);
- place(2, 1, mSlider, 3);
- place(0, 2, mMoneyLabel, 5);
- place(0, 3, mItemEffectLabel, 5);
- place(0, 4, mItemDescLabel, 5);
+ ContainerPlacer place;
+ place = getPlacer(0, 0);
+
+ place(0, 0, mScrollArea, 8, 5).setPadding(3);
place(0, 5, mDecreaseButton);
- place(1, 5, mIncreaseButton);
- place(3, 5, mBuyButton);
- place(4, 5, mQuitButton);
+ place(1, 5, mSlider, 3);
+ place(4, 5, mIncreaseButton);
+ place(5, 5, mQuantityLabel, 2);
+ place(7, 5, mAddMaxButton);
+ place(0, 6, mMoneyLabel, 8);
+ place(0, 7, mItemEffectLabel, 8);
+ place(0, 8, mItemDescLabel, 8);
+ place(6, 9, mBuyButton);
+ place(7, 9, mQuitButton);
+
Layout &layout = getLayout();
layout.setRowHeight(0, Layout::AUTO_SET);
@@ -124,15 +136,14 @@ void BuyDialog::addItem(int id, int price)
void BuyDialog::action(const gcn::ActionEvent &event)
{
- int selectedItem = mShopItemList->getSelected();
-
if (event.getId() == "quit")
{
- setVisible(false);
- current_npc = 0;
+ close();
return;
}
+ int selectedItem = mShopItemList->getSelected();
+
// The following actions require a valid selection
if (selectedItem < 0 ||
selectedItem >= (int) mShopItems->getNumberOfElements())
@@ -157,6 +168,12 @@ void BuyDialog::action(const gcn::ActionEvent &event)
mSlider->setValue(mAmountItems);
updateButtonsAndLabels();
}
+ else if (event.getId() == "max")
+ {
+ mAmountItems = mMaxItems;
+ mSlider->setValue(mAmountItems);
+ updateButtonsAndLabels();
+ }
// TODO: Actually we'd have a bug elsewhere if this check for the number
// of items to be bought ever fails, Bertram removed the assertions, is
// there a better way to ensure this fails in an _obvious_ way in C++?
@@ -241,5 +258,12 @@ void BuyDialog::setVisible(bool visible)
{
Window::setVisible(visible);
- if (visible) requestFocus();
+ if (visible)
+ requestFocus();
+}
+
+void BuyDialog::close()
+{
+ setVisible(false);
+ current_npc = 0;
}
diff --git a/src/gui/buy.h b/src/gui/buy.h
index 08697889..ffd3f5c9 100644
--- a/src/gui/buy.h
+++ b/src/gui/buy.h
@@ -96,11 +96,20 @@ class BuyDialog : public Window, public gcn::ActionListener,
*/
void updateButtonsAndLabels();
+ /**
+ * Sets the visibility of this window.
+ */
void setVisible(bool visible);
+
+ /**
+ * Closes the Buy Window, as well as resetting the current npc.
+ */
+ void close();
private:
Network *mNetwork;
gcn::Button *mBuyButton;
gcn::Button *mQuitButton;
+ gcn::Button *mAddMaxButton;
gcn::Button *mIncreaseButton;
gcn::Button *mDecreaseButton;
ShopListBox *mShopItemList;
diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp
index 434fc1e1..5bdab453 100644
--- a/src/gui/gui.cpp
+++ b/src/gui/gui.cpp
@@ -241,3 +241,8 @@ void Gui::handleMouseMoved(const gcn::MouseInput &mouseInput)
gcn::Gui::handleMouseMoved(mouseInput);
mMouseInactivityTimer = 0;
}
+
+const int Gui::getFontHeight() const
+{
+ return mGuiFont->getHeight();
+}
diff --git a/src/gui/gui.h b/src/gui/gui.h
index afa358be..609648fd 100644
--- a/src/gui/gui.h
+++ b/src/gui/gui.h
@@ -78,6 +78,11 @@ class Gui : public gcn::Gui
{ return mGuiFont; }
/**
+ * Return game font height.
+ */
+ const int getFontHeight() const;
+
+ /**
* Return the Font used for "Info Particles", i.e. ones showing, what
* you picked up, etc.
*/
diff --git a/src/gui/inventorywindow.cpp b/src/gui/inventorywindow.cpp
index 98916c07..f6e81fc5 100644
--- a/src/gui/inventorywindow.cpp
+++ b/src/gui/inventorywindow.cpp
@@ -99,7 +99,7 @@ InventoryWindow::InventoryWindow(int invSize):
place(6, 5, mUseButton);
Layout &layout = getLayout();
- layout.setRowHeight(0, mDropButton->getHeight());
+ layout.setRowHeight(0, mDropButton->getHeight());
loadWindowState();
}
diff --git a/src/gui/item_amount.cpp b/src/gui/item_amount.cpp
index c5b27524..5a7cf18f 100644
--- a/src/gui/item_amount.cpp
+++ b/src/gui/item_amount.cpp
@@ -21,8 +21,9 @@
*/
#include "button.h"
-#include "inttextfield.h"
+#include "gui.h"
#include "item_amount.h"
+#include "label.h"
#include "slider.h"
#include "storagewindow.h"
#include "trade.h"
@@ -33,6 +34,7 @@
#include "../localplayer.h"
#include "../utils/gettext.h"
+#include "../utils/strprintf.h"
ItemAmountWindow::ItemAmountWindow(int usage, Window *parent, Item *item):
Window("", true, parent),
@@ -40,12 +42,12 @@ ItemAmountWindow::ItemAmountWindow(int usage, Window *parent, Item *item):
mMax(item->getQuantity()),
mUsage(usage)
{
+ setCloseButton(true);
+
// Integer field
- mItemAmountTextField = new IntTextField(1);
- mItemAmountTextField->setRange(1, mMax);
- mItemAmountTextField->setWidth(30);
- mItemAmountTextField->setActionEventId("Dummy");
- mItemAmountTextField->addActionListener(this);
+
+ mItemAmountLabel = new Label(strprintf("%d / %d", 1, mMax));
+ mItemAmountLabel->setAlignment(gcn::Graphics::CENTER);
// Slider
mItemAmountSlide = new Slider(1.0, mMax);
@@ -60,15 +62,22 @@ ItemAmountWindow::ItemAmountWindow(int usage, Window *parent, Item *item):
Button *cancelButton = new Button(_("Cancel"), "Cancel", this);
Button *addAllButton = new Button(_("All"), "All", this);
+ minusButton->setSize(gui->getFontHeight(), gui->getFontHeight());
+ plusButton->setSize(gui->getFontHeight(), gui->getFontHeight());
+
// Set positions
+ ContainerPlacer place;
+ place = getPlacer(0, 0);
+
place(0, 0, minusButton);
- place(1, 0, mItemAmountTextField).setPadding(2);
- place(2, 0, plusButton);
- place(5, 0, addAllButton);
- place(0, 1, mItemAmountSlide, 6);
- place(4, 2, cancelButton);
- place(5, 2, okButton);
- reflowLayout(250, 0);
+ place(1, 0, mItemAmountSlide, 3);
+ place(4, 0, plusButton);
+ place(5, 0, mItemAmountLabel, 2);
+ place(7, 0, addAllButton);
+ place = getPlacer(0, 1);
+ place(4, 0, cancelButton);
+ place(5, 0, okButton);
+ reflowLayout(225, 0);
resetAmount();
@@ -96,7 +105,7 @@ ItemAmountWindow::ItemAmountWindow(int usage, Window *parent, Item *item):
void ItemAmountWindow::resetAmount()
{
- mItemAmountTextField->setValue(1);
+ mItemAmountLabel->setCaption(strprintf("%d / %d", 1, mMax));
}
void ItemAmountWindow::action(const gcn::ActionEvent &event)
@@ -105,13 +114,13 @@ void ItemAmountWindow::action(const gcn::ActionEvent &event)
if (event.getId() == "Cancel")
{
- scheduleDelete();
+ close();
}
else if (event.getId() == "Plus" && amount < mMax)
{
amount++;
}
- else if (event.getId() == "Minus" && amount > 0)
+ else if (event.getId() == "Minus" && amount > 1)
{
amount--;
}
@@ -147,6 +156,11 @@ void ItemAmountWindow::action(const gcn::ActionEvent &event)
return;
}
- mItemAmountTextField->setValue(amount);
+ mItemAmountLabel->setCaption(strprintf("%d / %d", amount, mMax));
mItemAmountSlide->setValue(amount);
}
+
+void ItemAmountWindow::close()
+{
+ scheduleDelete();
+}
diff --git a/src/gui/item_amount.h b/src/gui/item_amount.h
index b802f71c..34b33b37 100644
--- a/src/gui/item_amount.h
+++ b/src/gui/item_amount.h
@@ -58,8 +58,13 @@ class ItemAmountWindow : public Window, public gcn::ActionListener
*/
void resetAmount();
+ /**
+ * Schedules the Item Amount window for deletion.
+ */
+ void close();
+
private:
- IntTextField *mItemAmountTextField; /**< Item amount caption. */
+ gcn::Label *mItemAmountLabel; /**< Item amount caption. */
Item *mItem;
int mMax, mUsage;
diff --git a/src/gui/npcintegerdialog.cpp b/src/gui/npcintegerdialog.cpp
index 5b3e05aa..5332d196 100644
--- a/src/gui/npcintegerdialog.cpp
+++ b/src/gui/npcintegerdialog.cpp
@@ -21,6 +21,7 @@
*/
#include "button.h"
+#include "gui.h"
#include "inttextfield.h"
#include "npcintegerdialog.h"
@@ -47,8 +48,8 @@ NpcIntegerDialog::NpcIntegerDialog(Network *network):
cancelButton = new Button(_("Cancel"), "cancel", this);
resetButton = new Button(_("Reset"), "reset", this);
- mDecButton->setSize(20, 20);
- mIncButton->setSize(20, 20);
+ mIncButton->setSize(gui->getFontHeight(), gui->getFontHeight());
+ mDecButton->setSize(gui->getFontHeight(), gui->getFontHeight());
ContainerPlacer place;
place = getPlacer(0, 0);
diff --git a/src/gui/sell.cpp b/src/gui/sell.cpp
index ed023227..47e44ffe 100644
--- a/src/gui/sell.cpp
+++ b/src/gui/sell.cpp
@@ -21,6 +21,7 @@
*/
#include "button.h"
+#include "gui.h"
#include "label.h"
#include "scrollarea.h"
#include "sell.h"
@@ -39,12 +40,13 @@
#include "../utils/strprintf.h"
SellDialog::SellDialog(Network *network):
- Window(_("Sell")),
+ Window("Sell"),
mNetwork(network),
mMaxItems(0), mAmountItems(0)
{
- setWindowName("Sell");
+ setWindowName(_("Sell"));
setResizable(true);
+ setCloseButton(true);
setMinWidth(260);
setMinHeight(230);
setDefaultSize(260, 230, ImageRect::CENTER);
@@ -54,21 +56,26 @@ SellDialog::SellDialog(Network *network):
mShopItemList = new ShopListBox(mShopItems, mShopItems);
mScrollArea = new ScrollArea(mShopItemList);
+ mScrollArea->setHorizontalScrollPolicy(gcn::ScrollArea::SHOW_NEVER);
+
mSlider = new Slider(1.0);
- mQuantityLabel = new Label("0");
+
+ mQuantityLabel = new Label(strprintf("%d / %d", mAmountItems, mMaxItems));
+ mQuantityLabel->setAlignment(gcn::Graphics::CENTER);
mMoneyLabel = new Label(
strprintf(_("Price: %d GP / Total: %d GP"), 0, 0));
+
mIncreaseButton = new Button("+", "+", this);
mDecreaseButton = new Button("-", "-", this);
mSellButton = new Button(_("Sell"), "sell", this);
mQuitButton = new Button(_("Quit"), "quit", this);
+ mAddMaxButton = new Button(_("Max"), "max", this);
mItemDescLabel = new Label(strprintf(_("Description: %s"), ""));
mItemEffectLabel = new Label(strprintf(_("Effect: %s"), ""));
- mIncreaseButton->setSize(20, 20);
- mDecreaseButton->setSize(20, 20);
+ mIncreaseButton->setSize(gui->getFontHeight(), gui->getFontHeight());
+ mDecreaseButton->setSize(gui->getFontHeight(), gui->getFontHeight());
- mScrollArea->setHorizontalScrollPolicy(gcn::ScrollArea::SHOW_NEVER);
mIncreaseButton->setEnabled(false);
mDecreaseButton->setEnabled(false);
mSellButton->setEnabled(false);
@@ -79,16 +86,21 @@ SellDialog::SellDialog(Network *network):
mSlider->setActionEventId("slider");
mSlider->addActionListener(this);
- place(0, 0, mScrollArea, 5).setPadding(3);
- place(0, 1, mQuantityLabel, 2);
- place(2, 1, mSlider, 3);
- place(0, 2, mMoneyLabel, 5);
- place(0, 3, mItemEffectLabel, 5);
- place(0, 4, mItemDescLabel, 5);
+ ContainerPlacer place;
+ place = getPlacer(0, 0);
+
+ place(0, 0, mScrollArea, 8, 5).setPadding(3);
place(0, 5, mDecreaseButton);
- place(1, 5, mIncreaseButton);
- place(3, 5, mSellButton);
- place(4, 5, mQuitButton);
+ place(1, 5, mSlider, 3);
+ place(4, 5, mIncreaseButton);
+ place(5, 5, mQuantityLabel, 2);
+ place(7, 5, mAddMaxButton);
+ place(0, 6, mMoneyLabel, 8);
+ place(0, 7, mItemEffectLabel, 8);
+ place(0, 8, mItemDescLabel, 8);
+ place(6, 9, mSellButton);
+ place(7, 9, mQuitButton);
+
Layout &layout = getLayout();
layout.setRowHeight(0, Layout::AUTO_SET);
@@ -114,9 +126,7 @@ void SellDialog::reset()
void SellDialog::addItem(const Item *item, int price)
{
if (!item)
- {
return;
- }
mShopItems->addItem(item->getInvIndex(), item->getId(),
item->getQuantity(), price);
@@ -126,15 +136,14 @@ void SellDialog::addItem(const Item *item, int price)
void SellDialog::action(const gcn::ActionEvent &event)
{
- int selectedItem = mShopItemList->getSelected();
-
if (event.getId() == "quit")
{
- setVisible(false);
- current_npc = 0;
+ close();
return;
}
+ int selectedItem = mShopItemList->getSelected();
+
// The following actions require a valid item selection
if (selectedItem == -1 ||
selectedItem >= (int) mShopItems->getNumberOfElements())
@@ -159,6 +168,12 @@ void SellDialog::action(const gcn::ActionEvent &event)
mSlider->setValue(mAmountItems);
updateButtonsAndLabels();
}
+ else if (event.getId() == "max")
+ {
+ mAmountItems = mMaxItems;
+ mSlider->setValue(mAmountItems);
+ updateButtonsAndLabels();
+ }
else if (event.getId() == "sell" && mAmountItems > 0
&& mAmountItems <= mMaxItems)
{
@@ -270,5 +285,12 @@ void SellDialog::setVisible(bool visible)
{
Window::setVisible(visible);
- if (visible) requestFocus();
+ if (visible)
+ requestFocus();
+}
+
+void SellDialog::close()
+{
+ setVisible(false);
+ current_npc = 0;
}
diff --git a/src/gui/sell.h b/src/gui/sell.h
index c67a25b9..930f8bc1 100644
--- a/src/gui/sell.h
+++ b/src/gui/sell.h
@@ -82,7 +82,15 @@ class SellDialog : public Window, gcn::ActionListener, gcn::SelectionListener
*/
void setMoney(int amount);
+ /**
+ * Sets the visibility of this window.
+ */
void setVisible(bool visible);
+
+ /**
+ * Closes the Buy Window, as well as resetting the current npc.
+ */
+ void close();
private:
/**
* Updates the state of buttons and labels.
@@ -92,6 +100,7 @@ class SellDialog : public Window, gcn::ActionListener, gcn::SelectionListener
Network *mNetwork;
gcn::Button *mSellButton;
gcn::Button *mQuitButton;
+ gcn::Button *mAddMaxButton;
gcn::Button *mIncreaseButton;
gcn::Button *mDecreaseButton;
ShopListBox *mShopItemList;