summaryrefslogtreecommitdiff
path: root/src/gui
diff options
context:
space:
mode:
authorThorbjørn Lindeijer <thorbjorn@lindeijer.nl>2010-05-21 21:56:41 +0200
committerThorbjørn Lindeijer <thorbjorn@lindeijer.nl>2010-05-21 21:56:41 +0200
commit63b4c9869b6256ed7644113cd23305b07cf9df03 (patch)
treeaff0d99f5b58cbaf4195ac755ecfb79f97bf7b65 /src/gui
parent8c4c5a58c256cce7beb21b68c8a7d6b6ff5c4a3a (diff)
parent2953a3f92c5097bd99ff21f4536fe167a32d90c5 (diff)
downloadMana-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.cpp30
-rw-r--r--src/gui/inventorywindow.h2
-rw-r--r--src/gui/itempopup.cpp47
-rw-r--r--src/gui/itempopup.h4
-rw-r--r--src/gui/serverdialog.cpp2
-rw-r--r--src/gui/setup_video.cpp34
-rw-r--r--src/gui/socialwindow.cpp21
-rw-r--r--src/gui/socialwindow.h2
-rw-r--r--src/gui/statuswindow.cpp3
-rw-r--r--src/gui/statuswindow.h3
-rw-r--r--src/gui/updatewindow.cpp32
-rw-r--r--src/gui/widgets/emoteshortcutcontainer.cpp3
-rw-r--r--src/gui/widgets/icon.cpp10
-rw-r--r--src/gui/widgets/itemlinkhandler.cpp5
-rw-r--r--src/gui/widgets/itemshortcutcontainer.cpp12
-rw-r--r--src/gui/widgets/window.h6
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; }