diff options
author | Ira Rice <irarice@gmail.com> | 2009-03-25 11:31:02 -0600 |
---|---|---|
committer | Ira Rice <irarice@gmail.com> | 2009-03-25 11:31:02 -0600 |
commit | e0be7afc936c39e2b0e1db84a13653cfd78a6035 (patch) | |
tree | f5e99fa2f4f2d7c1c7149bd66e410798ae632735 /src/gui/popup.cpp | |
parent | f6e7a477681109aea040456e3f4ebd0f65645ecc (diff) | |
download | mana-client-e0be7afc936c39e2b0e1db84a13653cfd78a6035.tar.gz mana-client-e0be7afc936c39e2b0e1db84a13653cfd78a6035.tar.bz2 mana-client-e0be7afc936c39e2b0e1db84a13653cfd78a6035.tar.xz mana-client-e0be7afc936c39e2b0e1db84a13653cfd78a6035.zip |
Modified skin loading to save and load a skin's XML path, as well as
modified the skin loading method to take a default value, in case the
value in the configuration file fails to load for one reason or another.
While this doesn't directly expose skinning on a per window basis to the
user at the moment, it does allow people to change what skins get loaded
with which windows now without needing to modify the code.
TODO: Determine a decent approach to allowing the user to change their
window skins in game, as well as moving all widget skin loading to the
skin class (for instance, the button skins, progressbar skins, etc.) so
that different skin configurations can use different widget skins.
Signed-off-by: Ira Rice <irarice@gmail.com>
Diffstat (limited to 'src/gui/popup.cpp')
-rw-r--r-- | src/gui/popup.cpp | 33 |
1 files changed, 32 insertions, 1 deletions
diff --git a/src/gui/popup.cpp b/src/gui/popup.cpp index d44dbc93..6d57081f 100644 --- a/src/gui/popup.cpp +++ b/src/gui/popup.cpp @@ -42,6 +42,7 @@ Popup::Popup(const std::string& name, Window *parent, const std::string& skin): mParent(parent), mPopupName(name), + mDefaultSkinPath(skin), mMinWidth(100), mMinHeight(40), mMaxWidth(INT_MAX), @@ -57,7 +58,7 @@ Popup::Popup(const std::string& name, Window *parent, instances++; // Loads the skin - mSkin = skinLoader->load(skin); + mSkin = skinLoader->load(skin, mDefaultSkinPath); // Add this window to the window container windowContainer->add(this); @@ -70,6 +71,8 @@ Popup::~Popup() { logger->log("Popup::~Popup(\"%s\")", mPopupName.c_str()); + savePopupConfiguration(); + while (!mWidgets.empty()) { gcn::Widget *w = mWidgets.front(); @@ -87,6 +90,34 @@ void Popup::setWindowContainer(WindowContainer *wc) windowContainer = wc; } +void Popup::loadPopupConfiguration() +{ + if (mPopupName.empty()) + return; + + const std::string &name = mPopupName; + const std::string &skinName = config.getValue(name + "Skin", + mSkin->getFilePath()); + + if (skinName.compare(mSkin->getFilePath()) != 0) + { + mSkin->instances--; + mSkin = skinLoader->load(skinName, mDefaultSkinPath); + } +} + +void Popup::savePopupConfiguration() +{ + if (mPopupName.empty()) + return; + + const std::string &name = mPopupName; + + // Saves the skin path in a config file (which allows for skins to be + // changed from the default path) + config.setValue(name + "Skin", mSkin->getFilePath()); +} + void Popup::draw(gcn::Graphics *graphics) { if (!isVisible()) |