00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include "gui/item_amount.h"
00023
00024 #ifdef EATHENA_SUPPORT
00025 #include "gui/storagewindow.h"
00026 #endif
00027 #include "gui/trade.h"
00028
00029 #include "gui/widgets/button.h"
00030 #include "gui/widgets/label.h"
00031 #include "gui/widgets/layout.h"
00032 #include "gui/widgets/slider.h"
00033
00034 #include "item.h"
00035 #include "localplayer.h"
00036
00037 #include "utils/gettext.h"
00038 #include "utils/strprintf.h"
00039
00040 ItemAmountWindow::ItemAmountWindow(Usage usage, Window *parent, Item *item,
00041 int maxRange):
00042 Window("", true, parent),
00043 mItem(item),
00044 mMax(maxRange),
00045 mUsage(usage)
00046 {
00047 if (!mMax)
00048 mMax = mItem->getQuantity();
00049
00050 setCloseButton(true);
00051
00052
00053
00054 mItemAmountLabel = new Label(strprintf("%d / %d", 1, mMax));
00055 mItemAmountLabel->setAlignment(gcn::Graphics::CENTER);
00056
00057
00058 mItemAmountSlide = new Slider(1.0, mMax);
00059 mItemAmountSlide->setHeight(10);
00060 mItemAmountSlide->setActionEventId("Slide");
00061 mItemAmountSlide->addActionListener(this);
00062
00063
00064 Button *minusButton = new Button("-", "Minus", this);
00065 Button *plusButton = new Button("+", "Plus", this);
00066 Button *okButton = new Button(_("Ok"), "Ok", this);
00067 Button *cancelButton = new Button(_("Cancel"), "Cancel", this);
00068 Button *addAllButton = new Button(_("All"), "All", this);
00069
00070 minusButton->adjustSize();
00071 minusButton->setWidth(plusButton->getWidth());
00072
00073
00074 ContainerPlacer place;
00075 place = getPlacer(0, 0);
00076
00077 place(0, 0, minusButton);
00078 place(1, 0, mItemAmountSlide, 3);
00079 place(4, 0, plusButton);
00080 place(5, 0, mItemAmountLabel, 2);
00081 place(7, 0, addAllButton);
00082 place = getPlacer(0, 1);
00083 place(4, 0, cancelButton);
00084 place(5, 0, okButton);
00085 reflowLayout(225, 0);
00086
00087 resetAmount();
00088
00089 switch (usage)
00090 {
00091 case TradeAdd:
00092 setCaption(_("Select amount of items to trade."));
00093 break;
00094 case ItemDrop:
00095 setCaption(_("Select amount of items to drop."));
00096 break;
00097 case StoreAdd:
00098 setCaption(_("Select amount of items to store."));
00099 break;
00100 case StoreRemove:
00101 setCaption(_("Select amount of items to retrieve."));
00102 break;
00103 case ItemSplit:
00104 setCaption(_("Select amount of items to split."));
00105 break;
00106 }
00107
00108 setLocationRelativeTo(getParentWindow());
00109 setVisible(true);
00110 }
00111
00112 void ItemAmountWindow::resetAmount()
00113 {
00114 mItemAmountLabel->setCaption(strprintf("%d / %d", 1, mMax));
00115 }
00116
00117 void ItemAmountWindow::action(const gcn::ActionEvent &event)
00118 {
00119 int amount = mItemAmountSlide->getValue();
00120
00121 if (event.getId() == "Cancel")
00122 {
00123 close();
00124 }
00125 else if (event.getId() == "Plus" && amount < mMax)
00126 {
00127 amount++;
00128 }
00129 else if (event.getId() == "Minus" && amount > 1)
00130 {
00131 amount--;
00132 }
00133 else if (event.getId() == "Slide")
00134 {
00135 amount = static_cast<int>(mItemAmountSlide->getValue());
00136 }
00137 else if (event.getId() == "Ok" || event.getId() == "All")
00138 {
00139 if (event.getId() == "All")
00140 amount = mMax;
00141
00142 switch (mUsage)
00143 {
00144 case TradeAdd:
00145 tradeWindow->tradeItem(mItem, amount);
00146 break;
00147 case ItemDrop:
00148 player_node->dropItem(mItem, amount);
00149 break;
00150 #ifdef TMWSERV_SUPPORT
00151 case ItemSplit:
00152 player_node->splitItem(mItem, amount);
00153 break;
00154 #else
00155 case StoreAdd:
00156 storageWindow->addStore(mItem, amount);
00157 break;
00158 case StoreRemove:
00159 storageWindow->removeStore(mItem, amount);
00160 break;
00161 #endif
00162 default:
00163 return;
00164 break;
00165 }
00166
00167 scheduleDelete();
00168 return;
00169 }
00170
00171 mItemAmountLabel->setCaption(strprintf("%d / %d", amount, mMax));
00172 mItemAmountSlide->setValue(amount);
00173 }
00174
00175 void ItemAmountWindow::close()
00176 {
00177 scheduleDelete();
00178 }