diff options
author | Thorbjørn Lindeijer <thorbjorn@lindeijer.nl> | 2010-05-21 21:56:41 +0200 |
---|---|---|
committer | Thorbjørn Lindeijer <thorbjorn@lindeijer.nl> | 2010-05-21 21:56:41 +0200 |
commit | 63b4c9869b6256ed7644113cd23305b07cf9df03 (patch) | |
tree | aff0d99f5b58cbaf4195ac755ecfb79f97bf7b65 /src/gui | |
parent | 8c4c5a58c256cce7beb21b68c8a7d6b6ff5c4a3a (diff) | |
parent | 2953a3f92c5097bd99ff21f4536fe167a32d90c5 (diff) | |
download | mana-63b4c9869b6256ed7644113cd23305b07cf9df03.tar.gz mana-63b4c9869b6256ed7644113cd23305b07cf9df03.tar.bz2 mana-63b4c9869b6256ed7644113cd23305b07cf9df03.tar.xz mana-63b4c9869b6256ed7644113cd23305b07cf9df03.zip |
Merge branch '1.0'
Conflicts:
src/beingmanager.cpp
src/beingmanager.h
src/client.cpp
src/localplayer.cpp
Diffstat (limited to 'src/gui')
-rw-r--r-- | src/gui/inventorywindow.cpp | 30 | ||||
-rw-r--r-- | src/gui/inventorywindow.h | 2 | ||||
-rw-r--r-- | src/gui/itempopup.cpp | 47 | ||||
-rw-r--r-- | src/gui/itempopup.h | 4 | ||||
-rw-r--r-- | src/gui/serverdialog.cpp | 2 | ||||
-rw-r--r-- | src/gui/setup_video.cpp | 34 | ||||
-rw-r--r-- | src/gui/socialwindow.cpp | 21 | ||||
-rw-r--r-- | src/gui/socialwindow.h | 2 | ||||
-rw-r--r-- | src/gui/statuswindow.cpp | 3 | ||||
-rw-r--r-- | src/gui/statuswindow.h | 3 | ||||
-rw-r--r-- | src/gui/updatewindow.cpp | 32 | ||||
-rw-r--r-- | src/gui/widgets/emoteshortcutcontainer.cpp | 3 | ||||
-rw-r--r-- | src/gui/widgets/icon.cpp | 10 | ||||
-rw-r--r-- | src/gui/widgets/itemlinkhandler.cpp | 5 | ||||
-rw-r--r-- | src/gui/widgets/itemshortcutcontainer.cpp | 12 | ||||
-rw-r--r-- | src/gui/widgets/window.h | 6 |
16 files changed, 171 insertions, 45 deletions
diff --git a/src/gui/inventorywindow.cpp b/src/gui/inventorywindow.cpp index f214fde5..591ebd2f 100644 --- a/src/gui/inventorywindow.cpp +++ b/src/gui/inventorywindow.cpp @@ -60,7 +60,7 @@ InventoryWindow::InventoryWindow(Inventory *inventory): mInventory(inventory), mSplit(false) { - setWindowName(inventory->isMainInventory() ? "Inventory" : "Storage"); + setWindowName(isMainInventory() ? "Inventory" : "Storage"); setupWindow->registerWindowForReset(this); setResizable(true); setCloseButton(true); @@ -80,7 +80,7 @@ InventoryWindow::InventoryWindow(Inventory *inventory): mSlotsLabel = new Label(_("Slots:")); mSlotsBar = new ProgressBar(0.0f, 100, 20, Theme::PROG_INVY_SLOTS); - if (inventory->isMainInventory()) + if (isMainInventory()) { std::string equip = _("Equip"); std::string use = _("Use"); @@ -137,7 +137,7 @@ InventoryWindow::InventoryWindow(Inventory *inventory): loadWindowState(); slotsChanged(mInventory); - if (!inventory->isMainInventory()) + if (!isMainInventory()) setVisible(true); } @@ -158,6 +158,17 @@ void InventoryWindow::action(const gcn::ActionEvent &event) outfitWindow->requestMoveToTop(); } } + else if (event.getId() == "store") + { + if (!inventoryWindow->isVisible()) return; + + Item *item = inventoryWindow->getSelectedItem(); + + if (!item) + return; + + ItemAmountWindow::showWindow(ItemAmountWindow::StoreAdd, this, item); + } Item *item = mItems->getSelectedItem(); @@ -185,17 +196,6 @@ void InventoryWindow::action(const gcn::ActionEvent &event) ItemAmountWindow::showWindow(ItemAmountWindow::ItemSplit, this, item, (item->getQuantity() - 1)); } - else if (event.getId() == "store") - { - if (!inventoryWindow->isVisible()) return; - - Item *item = inventoryWindow->getSelectedItem(); - - if (!item) - return; - - ItemAmountWindow::showWindow(ItemAmountWindow::StoreAdd, this, item); - } else if (event.getId() == "retrieve") { Item *item = mItems->getSelectedItem(); @@ -229,7 +229,7 @@ void InventoryWindow::mouseClicked(gcn::MouseEvent &event) */ const int mx = event.getX() + getX(); const int my = event.getY() + getY(); - viewport->showPopup(this, mx, my, item); + viewport->showPopup(this, mx, my, item, isMainInventory()); } if (event.getButton() == gcn::MouseEvent::LEFT) diff --git a/src/gui/inventorywindow.h b/src/gui/inventorywindow.h index 948482f5..f611e934 100644 --- a/src/gui/inventorywindow.h +++ b/src/gui/inventorywindow.h @@ -108,6 +108,8 @@ class InventoryWindow : public Window, void slotsChanged(Inventory* inventory); + bool isMainInventory() { return mInventory->isMainInventory(); } + /** * Returns true if any instances exist. */ diff --git a/src/gui/itempopup.cpp b/src/gui/itempopup.cpp index 3f22c442..2618810b 100644 --- a/src/gui/itempopup.cpp +++ b/src/gui/itempopup.cpp @@ -28,17 +28,22 @@ #include "gui/gui.h" #include "gui/theme.h" +#include "gui/widgets/icon.h" #include "gui/widgets/textbox.h" #include "utils/gettext.h" #include "utils/stringutils.h" +#include "resources/image.h" +#include "resources/resourcemanager.h" + #include <guichan/font.hpp> #include <guichan/widgets/label.hpp> ItemPopup::ItemPopup(): - Popup("ItemPopup") + Popup("ItemPopup"), + mIcon(0) { // Item Name mItemName = new gcn::Label; @@ -62,28 +67,62 @@ ItemPopup::ItemPopup(): mItemWeight->setEditable(false); mItemWeight->setPosition(getPadding(), 3 * fontHeight + 4 * getPadding()); + mIcon = new Icon(0); + add(mItemName); add(mItemDesc); add(mItemEffect); add(mItemWeight); + add(mIcon); addMouseListener(this); } ItemPopup::~ItemPopup() { + if (mIcon) + { + Image *image = mIcon->getImage(); + if (image) + image->decRef(); + } } -void ItemPopup::setItem(const ItemInfo &item) +void ItemPopup::setItem(const ItemInfo &item, bool showImage) { if (item.getName() == mItemName->getCaption()) return; + int space = 0; + + Image *oldImage = mIcon->getImage(); + if (oldImage) + oldImage->decRef(); + + if (showImage) + { + ResourceManager *resman = ResourceManager::getInstance(); + Image *image = resman->getImage("graphics/items/" + item.getImageName()); + mIcon->setImage(image); + if (image) + { + int x = getPadding(); + int y = getPadding(); + mIcon->setPosition(x, y); + space = mIcon->getWidth(); + } + } + else + { + mIcon->setImage(0); + } + mItemType = item.getType(); mItemName->setCaption(item.getName()); mItemName->adjustSize(); mItemName->setForegroundColor(getColor(mItemType)); + mItemName->setPosition(getPadding() + space, getPadding()); mItemDesc->setTextWrapped(item.getDescription(), 196); mItemEffect->setTextWrapped(item.getEffect(), 196); @@ -91,7 +130,7 @@ void ItemPopup::setItem(const ItemInfo &item) Units::formatWeight(item.getWeight()).c_str()), 196); - int minWidth = mItemName->getWidth(); + int minWidth = mItemName->getWidth() + space; if (mItemDesc->getMinWidth() > minWidth) minWidth = mItemDesc->getMinWidth(); @@ -127,6 +166,7 @@ void ItemPopup::setItem(const ItemInfo &item) mItemDesc->setPosition(getPadding(), 2 * height); mItemEffect->setPosition(getPadding(), (numRowsDesc + getPadding()) * height); + } gcn::Color ItemPopup::getColor(ItemType type) @@ -171,3 +211,4 @@ void ItemPopup::mouseMoved(gcn::MouseEvent &event) // When the mouse moved on top of the popup, hide it setVisible(false); } + diff --git a/src/gui/itempopup.h b/src/gui/itempopup.h index 67d1eb2f..a3976a11 100644 --- a/src/gui/itempopup.h +++ b/src/gui/itempopup.h @@ -29,6 +29,7 @@ #include <guichan/mouselistener.hpp> +class Icon; class TextBox; /** @@ -50,7 +51,7 @@ class ItemPopup : public Popup /** * Sets the info to be displayed given a particular item. */ - void setItem(const ItemInfo &item); + void setItem(const ItemInfo &item, bool showImage = false); void mouseMoved(gcn::MouseEvent &mouseEvent); @@ -60,6 +61,7 @@ class ItemPopup : public Popup TextBox *mItemEffect; TextBox *mItemWeight; ItemType mItemType; + Icon *mIcon; static gcn::Color getColor(ItemType type); }; diff --git a/src/gui/serverdialog.cpp b/src/gui/serverdialog.cpp index 3eeb6f9c..25725a80 100644 --- a/src/gui/serverdialog.cpp +++ b/src/gui/serverdialog.cpp @@ -220,6 +220,8 @@ ServerDialog::ServerDialog(ServerInfo *serverInfo, const std::string &dir): mTypeListModel = new TypeListModel(); mTypeField = new DropDown(mTypeListModel); + mTypeField->setSelected((serverInfo->type == ServerInfo::MANASERV) ? + 1 : 0); mDescription = new Label(std::string()); diff --git a/src/gui/setup_video.cpp b/src/gui/setup_video.cpp index 8ce6eebd..ebe53261 100644 --- a/src/gui/setup_video.cpp +++ b/src/gui/setup_video.cpp @@ -81,6 +81,13 @@ class ModeListModel : public gcn::ListModel */ std::string getElementAt(int i) { return mVideoModes[i]; } + /** + * Returns the index corresponding to the given video mode. + * E.g.: "800x600". + * or -1 if not found. + */ + int getIndexOf(const std::string &widthXHeightMode); + private: std::vector<std::string> mVideoModes; }; @@ -108,6 +115,20 @@ ModeListModel::ModeListModel() } } +int ModeListModel::getIndexOf(const std::string &widthXHeightMode) +{ + std::string currentMode = ""; + for (int i = 0; i < getNumberOfElements(); i++) + { + currentMode = getElementAt(i); + if (currentMode == widthXHeightMode) + { + return i; + } + } + return -1; +} + const char *SIZE_NAME[4] = { N_("Tiny"), @@ -256,6 +277,11 @@ Setup_Video::Setup_Video(): mFpsSlider->setEnabled(mFps > 0); mFpsCheckBox->setSelected(mFps > 0); + // Pre-select the current video mode. + std::string videoMode = toString(graphics->getWidth()) + "x" + + toString(graphics->getHeight()); + mModeList->setSelected(mModeListModel->getIndexOf(videoMode)); + mModeList->setActionEventId("videomode"); mCustomCursorCheckBox->setActionEventId("customcursor"); mShowMonsterDamageCheckBox->setActionEventId("monsterdamage"); @@ -462,6 +488,14 @@ void Setup_Video::cancel() mFpsLabel->setCaption(text); config.setValue("screen", mFullScreenEnabled); + + // Set back to the current video mode. + std::string videoMode = toString(graphics->getWidth()) + "x" + + toString(graphics->getHeight()); + mModeList->setSelected(mModeListModel->getIndexOf(videoMode)); + config.setValue("screenwidth", graphics->getWidth()); + config.setValue("screenheight", graphics->getHeight()); + config.setValue("customcursor", mCustomCursorEnabled); config.setValue("showMonstersTakedDamage", mShowMonsterDamageEnabled); config.setValue("visiblenames", mVisibleNamesEnabled); diff --git a/src/gui/socialwindow.cpp b/src/gui/socialwindow.cpp index 8d833123..2043da52 100644 --- a/src/gui/socialwindow.cpp +++ b/src/gui/socialwindow.cpp @@ -326,6 +326,8 @@ SocialWindow::SocialWindow() : { addTab(player_node->getParty()); } + else + updateButtons(); } SocialWindow::~SocialWindow() @@ -360,6 +362,8 @@ bool SocialWindow::addTab(Guild *guild) mTabs->addTab(tab, tab->mScroll); + updateButtons(); + return true; } @@ -373,6 +377,8 @@ bool SocialWindow::removeTab(Guild *guild) delete it->second; mGuilds.erase(it); + updateButtons(); + return true; } @@ -386,6 +392,8 @@ bool SocialWindow::addTab(Party *party) mTabs->addTab(tab, tab->mScroll); + updateButtons(); + return true; } @@ -399,6 +407,8 @@ bool SocialWindow::removeTab(Party *party) delete it->second; mParties.erase(it); + updateButtons(); + return true; } @@ -451,11 +461,11 @@ void SocialWindow::action(const gcn::ActionEvent &event) else showPartyCreate(); } - else if (event.getId() == "invite") + else if (event.getId() == "invite" && mTabs->getSelectedTabIndex() > -1) { static_cast<SocialTab*>(mTabs->getSelectedTab())->invite(); } - else if (event.getId() == "leave") + else if (event.getId() == "leave" && mTabs->getSelectedTabIndex() > -1) { static_cast<SocialTab*>(mTabs->getSelectedTab())->leave(); } @@ -594,3 +604,10 @@ void SocialWindow::showPartyCreate() mPartyCreateDialog->setActionEventId("create party"); mPartyCreateDialog->addActionListener(this); } + +void SocialWindow::updateButtons() +{ + bool hasTabs = mTabs->getNumberOfTabs() > 0; + mInviteButton->setEnabled(hasTabs); + mLeaveButton->setEnabled(hasTabs); +} diff --git a/src/gui/socialwindow.h b/src/gui/socialwindow.h index d3e69cc5..885c0e54 100644 --- a/src/gui/socialwindow.h +++ b/src/gui/socialwindow.h @@ -77,6 +77,8 @@ public: protected: friend class SocialTab; + void updateButtons(); + int mGuildInvited; ConfirmDialog *mGuildAcceptDialog; TextDialog *mGuildCreateDialog; diff --git a/src/gui/statuswindow.cpp b/src/gui/statuswindow.cpp index 498a4523..2439a213 100644 --- a/src/gui/statuswindow.cpp +++ b/src/gui/statuswindow.cpp @@ -283,7 +283,8 @@ void StatusWindow::setPointsNeeded(int id, int needed) } void StatusWindow::addAttribute(int id, const std::string &name, - bool modifiable) + bool modifiable, + const std::string &description) { AttrDisplay *disp; diff --git a/src/gui/statuswindow.h b/src/gui/statuswindow.h index 13ee9a68..a1fc4b4b 100644 --- a/src/gui/statuswindow.h +++ b/src/gui/statuswindow.h @@ -61,7 +61,8 @@ class StatusWindow : public Window void setPointsNeeded(int id, int needed); - void addAttribute(int id, const std::string &name, bool modifiable); + void addAttribute(int id, const std::string &name, bool modifiable, + const std::string &description); static void updateHPBar(ProgressBar *bar, bool showMax = false); static void updateMPBar(ProgressBar *bar, bool showMax = false); diff --git a/src/gui/updatewindow.cpp b/src/gui/updatewindow.cpp index 975fdcff..7448a102 100644 --- a/src/gui/updatewindow.cpp +++ b/src/gui/updatewindow.cpp @@ -45,6 +45,9 @@ #include <iostream> #include <fstream> +const std::string xmlUpdateFile = "resources.xml"; +const std::string txtUpdateFile = "resources2.txt"; + /** * Load the given file into a vector of updateFiles. */ @@ -72,13 +75,10 @@ std::vector<updateFile> loadXMLFile(const std::string &fileName) file.type = XML::getProperty(fileNode, "type", "data"); file.desc = XML::getProperty(fileNode, "description", ""); if (XML::getProperty(fileNode, "required", "yes") == "yes") - { file.required = true; - } else - { file.required = false; - } + files.push_back(file); } @@ -344,7 +344,8 @@ void UpdaterWindow::download() { if (mDownloadStatus == UPDATE_RESOURCES) { - mDownload->setFile(mUpdatesDir + "/" + mCurrentFile, mCurrentChecksum); + mDownload->setFile(mUpdatesDir + "/" + mCurrentFile, + mCurrentChecksum); } else { @@ -353,9 +354,7 @@ void UpdaterWindow::download() } if (mDownloadStatus != UPDATE_RESOURCES) - { mDownload->noCache(); - } setLabel(mCurrentFile + " (0%)"); mDownloadComplete = false; @@ -368,9 +367,22 @@ void UpdaterWindow::loadUpdates() { ResourceManager *resman = ResourceManager::getInstance(); + if (!mUpdateFiles.size()) + { // updates not downloaded + mUpdateFiles = loadXMLFile(mUpdatesDir + "/" + xmlUpdateFile); + if (!mUpdateFiles.size()) + { + logger->log("Warning this server does not have a" + " %s file falling back to %s", xmlUpdateFile.c_str(), + txtUpdateFile.c_str()); + mUpdateFiles = loadTxtFile(mUpdatesDir + "/" + txtUpdateFile); + } + } + for (mUpdateIndex = 0; mUpdateIndex < mUpdateFiles.size(); mUpdateIndex++) { - resman->addToSearchPath(mUpdatesDir + "/" + mUpdateFiles[mUpdateIndex].name, false); + resman->addToSearchPath(mUpdatesDir + "/" + + mUpdateFiles[mUpdateIndex].name, false); } } @@ -433,7 +445,9 @@ void UpdaterWindow::logic() mUpdateFiles = loadXMLFile(mUpdatesDir + "/" + xmlUpdateFile); if (mUpdateFiles.size() == 0) { - logger->log("Warning this server does not have a %s file falling back to %s",xmlUpdateFile.c_str(),txtUpdateFile.c_str()); + logger->log("Warning this server does not have a %s" + " file falling back to %s", + xmlUpdateFile.c_str(), txtUpdateFile.c_str()); // If the resources.xml file fails, fall back onto a older version mCurrentFile = txtUpdateFile; diff --git a/src/gui/widgets/emoteshortcutcontainer.cpp b/src/gui/widgets/emoteshortcutcontainer.cpp index 2b07ad1e..82fb9f8d 100644 --- a/src/gui/widgets/emoteshortcutcontainer.cpp +++ b/src/gui/widgets/emoteshortcutcontainer.cpp @@ -124,11 +124,12 @@ void EmoteShortcutContainer::mouseDragged(gcn::MouseEvent &event) if (!mEmoteMoved && mEmoteClicked) { const int index = getIndexFromGrid(event.getX(), event.getY()); - const int emoteId = emoteShortcut->getEmote(index); if (index == -1) return; + const int emoteId = emoteShortcut->getEmote(index); + if (emoteId) { mEmoteMoved = emoteId; diff --git a/src/gui/widgets/icon.cpp b/src/gui/widgets/icon.cpp index ef22c37d..4e590212 100644 --- a/src/gui/widgets/icon.cpp +++ b/src/gui/widgets/icon.cpp @@ -30,20 +30,22 @@ Icon::Icon(const std::string &file) : mImage(0) { mImage = ResourceManager::getInstance()->getImage(file); - setSize(mImage->getWidth(), mImage->getHeight()); - + if (mImage) + setSize(mImage->getWidth(), mImage->getHeight()); } Icon::Icon(Image *image) : mImage(image) { - setSize(mImage->getWidth(), mImage->getHeight()); + if (mImage) + setSize(mImage->getWidth(), mImage->getHeight()); } void Icon::setImage(Image *image) { mImage = image; - setSize(mImage->getWidth(), mImage->getHeight()); + if (mImage) + setSize(mImage->getWidth(), mImage->getHeight()); } void Icon::draw(gcn::Graphics *g) diff --git a/src/gui/widgets/itemlinkhandler.cpp b/src/gui/widgets/itemlinkhandler.cpp index 0c51aeb3..b7341084 100644 --- a/src/gui/widgets/itemlinkhandler.cpp +++ b/src/gui/widgets/itemlinkhandler.cpp @@ -49,9 +49,8 @@ void ItemLinkHandler::handleLink(const std::string &link) if (id > 0) { - const ItemInfo &iteminfo = ItemDB::get(id); - - mItemPopup->setItem(iteminfo); + const ItemInfo &itemInfo = ItemDB::get(id); + mItemPopup->setItem(itemInfo, true); if (mItemPopup->isVisible()) mItemPopup->setVisible(false); diff --git a/src/gui/widgets/itemshortcutcontainer.cpp b/src/gui/widgets/itemshortcutcontainer.cpp index 92e3e2e5..83efd4d4 100644 --- a/src/gui/widgets/itemshortcutcontainer.cpp +++ b/src/gui/widgets/itemshortcutcontainer.cpp @@ -142,9 +142,13 @@ void ItemShortcutContainer::mouseDragged(gcn::MouseEvent &event) if (!mItemMoved && mItemClicked) { const int index = getIndexFromGrid(event.getX(), event.getY()); + + if (index == -1) + return; + const int itemId = itemShortcut->getItem(index); - if (index == -1 || itemId < 0) + if (itemId < 0) return; Item *item = player_node->getInventory()->findItem(itemId); @@ -227,9 +231,13 @@ void ItemShortcutContainer::mouseReleased(gcn::MouseEvent &event) void ItemShortcutContainer::mouseMoved(gcn::MouseEvent &event) { const int index = getIndexFromGrid(event.getX(), event.getY()); + + if (index == -1) + return; + const int itemId = itemShortcut->getItem(index); - if (index == -1 || itemId < 0) + if (itemId < 0) return; Item *item = player_node->getInventory()->findItem(itemId); diff --git a/src/gui/widgets/window.h b/src/gui/widgets/window.h index a8eb4e62..e62f4d92 100644 --- a/src/gui/widgets/window.h +++ b/src/gui/widgets/window.h @@ -180,12 +180,12 @@ class Window : public gcn::Window, gcn::WidgetListener void setVisible(bool visible, bool forceSticky); /** - * Returns whether the window will save it's visibility. + * Returns whether the window is visible by default. */ bool isDefaultVisible() const { return mDefaultVisible; } /** - * Returns whether the window will save it's visibility. + * Sets whether the window is visible by default. */ void setDefaultVisible(bool save) { mDefaultVisible = save; } @@ -195,7 +195,7 @@ class Window : public gcn::Window, gcn::WidgetListener bool willSaveVisible() const { return mSaveVisible; } /** - * Returns whether the window will save it's visibility. + * Sets whether the window will save it's visibility. */ void setSaveVisible(bool save) { mSaveVisible = save; } |