summaryrefslogtreecommitdiff
path: root/src/gui
diff options
context:
space:
mode:
authorThorbjørn Lindeijer <bjorn@lindeijer.nl>2025-01-20 10:26:22 +0100
committerThorbjørn Lindeijer <bjorn@lindeijer.nl>2025-01-20 10:51:24 +0100
commitdb9b9f316d7bdcb9504092908bb18e82fc21de2f (patch)
tree3f7bb1577c5210a9523fd240556cf840665f3efb /src/gui
parent0d1024b64155a05f45f247ad57d0f444db01c1e2 (diff)
downloadmana-db9b9f316d7bdcb9504092908bb18e82fc21de2f.tar.gz
mana-db9b9f316d7bdcb9504092908bb18e82fc21de2f.tar.bz2
mana-db9b9f316d7bdcb9504092908bb18e82fc21de2f.tar.xz
mana-db9b9f316d7bdcb9504092908bb18e82fc21de2f.zip
Made client config statically typed
This makes accessing the config values much faster, since it no longer needs to do a lookup nor string conversion, which means we could remove some needless copying of the values. Overall it makes it easier to find out where settings are used and it puts the defaults along with the declaration. Options with default values are no longer saved to the config file. This does not include unrecognized options, which are kept around to provide some compatibility with older clients. While most basic options have kept the same name, more complicated settings like window geometry, shortcuts, outfits, etc. now have their own XML elements. Older clients will ignore these and erase them when saving the configuration.
Diffstat (limited to 'src/gui')
-rw-r--r--src/gui/chatwindow.cpp7
-rw-r--r--src/gui/chatwindow.h12
-rw-r--r--src/gui/customserverdialog.cpp2
-rw-r--r--src/gui/customserverdialog.h2
-rw-r--r--src/gui/emotepopup.cpp4
-rw-r--r--src/gui/gui.cpp6
-rw-r--r--src/gui/minimap.cpp14
-rw-r--r--src/gui/minimap.h1
-rw-r--r--src/gui/ministatuswindow.cpp4
-rw-r--r--src/gui/npcdialog.cpp20
-rw-r--r--src/gui/npcdialog.h8
-rw-r--r--src/gui/outfitwindow.cpp79
-rw-r--r--src/gui/outfitwindow.h9
-rw-r--r--src/gui/palette.h2
-rw-r--r--src/gui/serverdialog.cpp79
-rw-r--r--src/gui/setup_audio.cpp36
-rw-r--r--src/gui/setup_interface.cpp73
-rw-r--r--src/gui/setup_joystick.cpp6
-rw-r--r--src/gui/setup_keyboard.h2
-rw-r--r--src/gui/setup_players.cpp67
-rw-r--r--src/gui/setup_players.h5
-rw-r--r--src/gui/setup_video.cpp70
-rw-r--r--src/gui/updaterwindow.cpp2
-rw-r--r--src/gui/viewport.cpp41
-rw-r--r--src/gui/viewport.h4
-rw-r--r--src/gui/widgets/button.cpp2
-rw-r--r--src/gui/widgets/chattab.cpp4
-rw-r--r--src/gui/widgets/checkbox.cpp2
-rw-r--r--src/gui/widgets/dropdown.cpp2
-rw-r--r--src/gui/widgets/emoteshortcutcontainer.cpp6
-rw-r--r--src/gui/widgets/itemshortcutcontainer.cpp6
-rw-r--r--src/gui/widgets/listbox.cpp2
-rw-r--r--src/gui/widgets/playerbox.cpp7
-rw-r--r--src/gui/widgets/progressbar.cpp2
-rw-r--r--src/gui/widgets/radiobutton.cpp4
-rw-r--r--src/gui/widgets/resizegrip.cpp4
-rw-r--r--src/gui/widgets/scrollarea.cpp10
-rw-r--r--src/gui/widgets/shoplistbox.cpp7
-rw-r--r--src/gui/widgets/shoplistbox.h2
-rw-r--r--src/gui/widgets/slider.cpp2
-rw-r--r--src/gui/widgets/tab.cpp2
-rw-r--r--src/gui/widgets/table.cpp4
-rw-r--r--src/gui/widgets/textfield.cpp4
-rw-r--r--src/gui/widgets/textpreview.cpp4
-rw-r--r--src/gui/widgets/window.cpp79
-rw-r--r--src/gui/widgets/window.h4
46 files changed, 281 insertions, 433 deletions
diff --git a/src/gui/chatwindow.cpp b/src/gui/chatwindow.cpp
index b4b03450..453baea2 100644
--- a/src/gui/chatwindow.cpp
+++ b/src/gui/chatwindow.cpp
@@ -123,14 +123,11 @@ ChatWindow::ChatWindow():
mChatInput->setHistory(mHistory);
mChatInput->setAutoComplete(mAutoComplete);
- mReturnToggles = config.getBoolValue("ReturnToggles");
-
mRecorder = new Recorder(this);
}
ChatWindow::~ChatWindow()
{
- config.setValue("ReturnToggles", mReturnToggles);
delete mRecorder;
removeAllWhispers();
delete mItemLinkHandler;
@@ -197,7 +194,7 @@ void ChatWindow::action(const gcn::ActionEvent &event)
mChatInput->setText(std::string());
}
- if (message.empty() || !mReturnToggles)
+ if (message.empty() || !config.returnTogglesChat)
{
// Remove focus and hide input
mFocusHandler->focusNone();
@@ -469,7 +466,7 @@ void ChatWindow::whisper(const std::string &nick,
if (i != mWhispers.end())
tab = i->second;
- else if (config.getBoolValue("whispertab"))
+ else if (config.whisperTab)
tab = addWhisperTab(nick);
if (tab)
diff --git a/src/gui/chatwindow.h b/src/gui/chatwindow.h
index 9b46d7ad..59ab6d99 100644
--- a/src/gui/chatwindow.h
+++ b/src/gui/chatwindow.h
@@ -152,10 +152,10 @@ class ChatWindow : public Window,
/** Override to reset mTmpVisible */
void setVisible(bool visible) override;
- void mousePressed(gcn::MouseEvent &event) override;
- void mouseDragged(gcn::MouseEvent &event) override;
+ void mousePressed(gcn::MouseEvent &event) override;
+ void mouseDragged(gcn::MouseEvent &event) override;
- void event(Event::Channel channel, const Event &event) override;
+ void event(Event::Channel channel, const Event &event) override;
/**
* Scrolls the chat window
@@ -173,9 +173,6 @@ class ChatWindow : public Window,
*/
void setRecordingFile(const std::string &msg);
- bool getReturnTogglesChat() const { return mReturnToggles; }
- void setReturnTogglesChat(bool toggles) { mReturnToggles = toggles; }
-
void doPresent();
void whisper(const std::string &nick, const std::string &mes,
@@ -216,9 +213,6 @@ class ChatWindow : public Window,
/** Manage whisper tabs */
std::map<const std::string, ChatTab *> mWhispers;
-
- bool mReturnToggles; /**< Marks whether <Return> toggles the chat log
- or not */
};
extern ChatWindow *chatWindow;
diff --git a/src/gui/customserverdialog.cpp b/src/gui/customserverdialog.cpp
index c4fadca9..c7c03b1a 100644
--- a/src/gui/customserverdialog.cpp
+++ b/src/gui/customserverdialog.cpp
@@ -20,8 +20,6 @@
#include "gui/customserverdialog.h"
-#include "configuration.h"
-
#include "gui/okdialog.h"
#include "gui/sdlinput.h"
#include "gui/serverdialog.h"
diff --git a/src/gui/customserverdialog.h b/src/gui/customserverdialog.h
index 59c1d2cc..8b0af4c8 100644
--- a/src/gui/customserverdialog.h
+++ b/src/gui/customserverdialog.h
@@ -30,8 +30,6 @@ class TypeListModel;
#include "gui/widgets/window.h"
-#include "net/serverinfo.h"
-
#include <guichan/actionlistener.hpp>
#include <guichan/keylistener.hpp>
#include <guichan/listmodel.hpp>
diff --git a/src/gui/emotepopup.cpp b/src/gui/emotepopup.cpp
index 8a85aca3..589d5087 100644
--- a/src/gui/emotepopup.cpp
+++ b/src/gui/emotepopup.cpp
@@ -22,10 +22,10 @@
#include "gui/emotepopup.h"
-#include "imagesprite.h"
#include "configuration.h"
#include "emoteshortcut.h"
#include "graphics.h"
+#include "imagesprite.h"
#include "log.h"
#include "resources/emotedb.h"
@@ -46,7 +46,7 @@ EmotePopup::EmotePopup()
if (!mSelectionImage)
logger->error("Unable to load selection.png");
- mSelectionImage->setAlpha(config.getFloatValue("guialpha"));
+ mSelectionImage->setAlpha(config.guiAlpha);
addMouseListener(this);
recalculateSize();
diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp
index 2ff697c7..39314fcf 100644
--- a/src/gui/gui.cpp
+++ b/src/gui/gui.cpp
@@ -81,7 +81,7 @@ Gui::Gui(Graphics *graphics)
ResourceManager *resman = ResourceManager::getInstance();
// Set global font
- const int fontSize = config.getValue("fontSize", 11);
+ const int fontSize = config.fontSize;
std::string fontFile = branding.getValue("font", "fonts/dejavusans.ttf");
std::string path = resman->getPath(fontFile);
@@ -131,7 +131,7 @@ Gui::Gui(Graphics *graphics)
gcn::Widget::setGlobalFont(mGuiFont);
// Initialize mouse cursor and listen for changes to the option
- setUseCustomCursor(config.getBoolValue("customcursor"));
+ setUseCustomCursor(config.customCursor);
listen(Event::ConfigChannel);
}
@@ -179,7 +179,7 @@ void Gui::event(Event::Channel channel, const Event &event)
if (event.getType() == Event::ConfigOptionChanged &&
event.getString("option") == "customcursor")
{
- setUseCustomCursor(config.getBoolValue("customcursor"));
+ setUseCustomCursor(config.customCursor);
}
}
}
diff --git a/src/gui/minimap.cpp b/src/gui/minimap.cpp
index cb38fba6..f5206eda 100644
--- a/src/gui/minimap.cpp
+++ b/src/gui/minimap.cpp
@@ -26,7 +26,6 @@
#include "configuration.h"
#include "graphics.h"
#include "localplayer.h"
-#include "log.h"
#include "map.h"
#include "gui/setup.h"
@@ -39,13 +38,10 @@
#include <guichan/font.hpp>
-bool Minimap::mShow = true;
-
Minimap::Minimap():
Window(_("Map"))
{
setWindowName("Minimap");
- mShow = config.getValue(getWindowName() + "Show", true);
setDefaultSize(5, 25, 100, 100);
// set this to false as the minimap window size is changed
//depending on the map size
@@ -59,13 +55,11 @@ Minimap::Minimap():
setSticky(false);
loadWindowState();
- setVisible(mShow, isSticky());
+ setVisible(config.showMinimap, isSticky());
}
Minimap::~Minimap()
-{
- config.setValue(getWindowName() + "Show", mShow);
-}
+{}
void Minimap::setMap(Map *map)
{
@@ -122,7 +116,7 @@ void Minimap::setMap(Map *map)
setDefaultSize(getX(), getY(), getWidth(), getHeight());
resetToDefaultSize();
- if (mShow)
+ if (config.showMinimap)
setVisible(true);
}
else
@@ -135,7 +129,7 @@ void Minimap::setMap(Map *map)
void Minimap::toggle()
{
setVisible(!isVisible(), isSticky());
- mShow = isVisible();
+ config.showMinimap = isVisible();
}
void Minimap::draw(gcn::Graphics *graphics)
diff --git a/src/gui/minimap.h b/src/gui/minimap.h
index 6e80a3c1..8212f5b7 100644
--- a/src/gui/minimap.h
+++ b/src/gui/minimap.h
@@ -64,7 +64,6 @@ class Minimap : public Window
ResourceRef<Image> mMapImage;
float mWidthProportion = 0.5;
float mHeightProportion = 0.5;
- static bool mShow;
};
extern Minimap *minimap;
diff --git a/src/gui/ministatuswindow.cpp b/src/gui/ministatuswindow.cpp
index e22172bc..598cb722 100644
--- a/src/gui/ministatuswindow.cpp
+++ b/src/gui/ministatuswindow.cpp
@@ -86,7 +86,9 @@ MiniStatusWindow::MiniStatusWindow():
setContentSize(mXpBar->getX() + mXpBar->getWidth(),
mXpBar->getY() + mXpBar->getHeight());
- setVisible((bool) config.getValue(getPopupName() + "Visible", true));
+ auto stateIt = config.windows.find(getPopupName());
+ setVisible(stateIt != config.windows.end() ? stateIt->second.visible.value_or(true)
+ : true);
mTextPopup = new TextPopup();
diff --git a/src/gui/npcdialog.cpp b/src/gui/npcdialog.cpp
index 33b512f0..18b3ff1b 100644
--- a/src/gui/npcdialog.cpp
+++ b/src/gui/npcdialog.cpp
@@ -71,7 +71,6 @@ NpcDialog::DialogList NpcDialog::instances;
NpcDialog::NpcDialog(int npcId)
: Window(_("NPC"))
, mNpcId(npcId)
- , mLogInteraction(config.getBoolValue("logNpcInGui"))
, mItemLinkHandler(std::make_unique<ItemLinkHandler>(this))
{
// Basic Window Setup
@@ -141,7 +140,6 @@ NpcDialog::NpcDialog(int npcId)
setVisible(true);
requestFocus();
- listen(Event::ConfigChannel);
PlayerInfo::setNPCInteractionCount(PlayerInfo::getNPCInteractionCount()
+ 1);
}
@@ -175,7 +173,7 @@ void NpcDialog::setText(const std::vector<std::string> &text)
void NpcDialog::addText(const std::string &text, bool save)
{
- if (save || mLogInteraction)
+ if (save || config.logNpcInGui)
{
mNewText.push_back(text);
mTextBox->addRow(text);
@@ -244,7 +242,7 @@ void NpcDialog::action(const gcn::ActionEvent &event)
mNewText.clear();
}
- if (!mLogInteraction)
+ if (!config.logNpcInGui)
setText({});
}
else if (event.getId() == "reset")
@@ -378,18 +376,6 @@ void NpcDialog::setVisible(bool visible)
}
}
-void NpcDialog::event(Event::Channel channel, const Event &event)
-{
- if (channel != Event::ConfigChannel)
- return;
-
- if (event.getType() == Event::ConfigOptionChanged &&
- event.getString("option") == "logNpcInGui")
- {
- mLogInteraction = config.getBoolValue("logNpcInGui");
- }
-}
-
void NpcDialog::mouseClicked(gcn::MouseEvent &mouseEvent)
{
if (mouseEvent.getSource() == mItemList &&
@@ -457,7 +443,7 @@ void NpcDialog::buildLayout()
}
else if (mInputState != NPC_INPUT_NONE)
{
- if (!mLogInteraction)
+ if (!config.logNpcInGui)
setText(mNewText);
mNextButton->setCaption(CAPTION_SUBMIT);
diff --git a/src/gui/npcdialog.h b/src/gui/npcdialog.h
index 42485766..f2b50370 100644
--- a/src/gui/npcdialog.h
+++ b/src/gui/npcdialog.h
@@ -22,8 +22,6 @@
#ifndef NPCDIALOG_H
#define NPCDIALOG_H
-#include "eventlistener.h"
-
#include "gui/widgets/window.h"
#include <guichan/actionlistener.hpp>
@@ -48,8 +46,7 @@ class Button;
*/
class NpcDialog final : public Window,
public gcn::ActionListener,
- public gcn::ListModel,
- public EventListener
+ public gcn::ListModel
{
public:
NpcDialog(int npcId);
@@ -143,8 +140,6 @@ class NpcDialog final : public Window,
void setVisible(bool visible) override;
- void event(Event::Channel channel, const Event &event) override;
-
void mouseClicked(gcn::MouseEvent &mouseEvent) override;
/**
@@ -170,7 +165,6 @@ class NpcDialog final : public Window,
void buildLayout();
int mNpcId;
- bool mLogInteraction;
int mDefaultInt = 0;
std::string mDefaultString;
diff --git a/src/gui/outfitwindow.cpp b/src/gui/outfitwindow.cpp
index 77de4b3a..b5033d70 100644
--- a/src/gui/outfitwindow.cpp
+++ b/src/gui/outfitwindow.cpp
@@ -50,8 +50,7 @@ OutfitWindow::OutfitWindow():
mNextButton = new Button(_(">"), "next", this);
mCurrentLabel = new Label(strprintf(_("Outfit: %d"), 1));
mCurrentLabel->setAlignment(gcn::Graphics::CENTER);
- mUnequipCheck = new CheckBox(_("Unequip first"),
- config.getValue("OutfitUnequip0", true));
+ mUnequipCheck = new CheckBox(_("Unequip first"));
mUnequipCheck->setActionEventId("unequip");
mUnequipCheck->addActionListener(this);
@@ -68,6 +67,8 @@ OutfitWindow::OutfitWindow():
loadWindowState();
load();
+
+ mUnequipCheck->setSelected(mOutfits[mCurrentOutfit].unequip);
}
OutfitWindow::~OutfitWindow()
@@ -77,34 +78,48 @@ OutfitWindow::~OutfitWindow()
void OutfitWindow::load()
{
- memset(mItems, -1, sizeof(mItems));
for (int o = 0; o < OUTFITS_COUNT; o++)
+ memset(mOutfits[o].items, -1, sizeof(mOutfits[o].items));
+
+ for (auto &outfit : config.outfits)
{
- std::string outfit = config.getValue("Outfit" + toString(o), "-1");
+ if (outfit.index < 0 || outfit.index >= OUTFITS_COUNT)
+ continue;
+
std::string buf;
- std::stringstream ss(outfit);
+ std::stringstream ss(outfit.items);
for (size_t i = 0; (ss >> buf) && i < OUTFIT_ITEM_COUNT; i++)
{
- mItems[o][i] = atoi(buf.c_str());
+ mOutfits[outfit.index].items[i] = atoi(buf.c_str());
}
- mItemsUnequip[o] = config.getValue("OutfitUnequip" + toString(o), true);
+ mOutfits[outfit.index].unequip = outfit.unequip;
}
}
void OutfitWindow::save()
{
+ config.outfits.clear();
+
std::string outfitStr;
for (int o = 0; o < OUTFITS_COUNT; o++)
{
+ auto &items = mOutfits[o].items;
+ bool emptyOutfit = true;
+
for (int i = 0; i < OUTFIT_ITEM_COUNT; i++)
{
- outfitStr += mItems[o][i] ? toString(mItems[o][i]) : toString(-1);
- if (i <8) outfitStr += " ";
+ if (!outfitStr.empty())
+ outfitStr += " ";
+
+ outfitStr += items[i] ? toString(items[i]) : toString(-1);
+ emptyOutfit &= items[i] <= 0;
}
- config.setValue("Outfit" + toString(o), outfitStr);
- config.setValue("OutfitUnequip" + toString(o), mItemsUnequip[o]);
+
+ if (!emptyOutfit)
+ config.outfits.push_back({ o, outfitStr, mOutfits[o].unequip });
+
outfitStr.clear();
}
}
@@ -118,7 +133,7 @@ void OutfitWindow::action(const gcn::ActionEvent &event)
else
mCurrentOutfit = 0;
mCurrentLabel->setCaption(strprintf(_("Outfit: %d"), mCurrentOutfit + 1));
- mUnequipCheck->setSelected(mItemsUnequip[mCurrentOutfit]);
+ mUnequipCheck->setSelected(mOutfits[mCurrentOutfit].unequip);
}
else if (event.getId() == "previous")
{
@@ -131,23 +146,23 @@ void OutfitWindow::action(const gcn::ActionEvent &event)
mCurrentOutfit = OUTFITS_COUNT - 1;
}
mCurrentLabel->setCaption(strprintf(_("Outfit: %d"), mCurrentOutfit + 1));
- mUnequipCheck->setSelected(mItemsUnequip[mCurrentOutfit]);
+ mUnequipCheck->setSelected(mOutfits[mCurrentOutfit].unequip);
}
else if (event.getId() == "unequip")
{
- mItemsUnequip[mCurrentOutfit] = mUnequipCheck->isSelected();
+ mOutfits[mCurrentOutfit].unequip = mUnequipCheck->isSelected();
}
}
void OutfitWindow::wearOutfit(int outfit)
{
- if (mItemsUnequip[outfit])
+ if (mOutfits[outfit].unequip)
unequipNotInOutfit(outfit);
Item *item;
for (int i = 0; i < OUTFIT_ITEM_COUNT; i++)
{
- item = PlayerInfo::getInventory()->findItem(mItems[outfit][i]);
+ item = PlayerInfo::getInventory()->findItem(mOutfits[outfit].items[i]);
if (item && !item->isEquipped() && item->getQuantity())
{
if (item->isEquippable())
@@ -160,7 +175,7 @@ void OutfitWindow::copyOutfit(int outfit)
{
for (int i = 0; i < OUTFIT_ITEM_COUNT; i++)
{
- mItems[mCurrentOutfit][i] = mItems[outfit][i];
+ mOutfits[mCurrentOutfit].items[i] = mOutfits[outfit].items[i];
}
}
@@ -183,15 +198,15 @@ void OutfitWindow::draw(gcn::Graphics *graphics)
ITEM_ICON_SIZE,
ITEM_ICON_SIZE));
- if (mItems[mCurrentOutfit][i] < 0)
+ if (mOutfits[mCurrentOutfit].items[i] < 0)
{
continue;
}
Item *item =
- PlayerInfo::getInventory()->findItem(mItems[mCurrentOutfit][i]);
+ PlayerInfo::getInventory()->findItem(mOutfits[mCurrentOutfit].items[i]);
if (item)
- {
+ {
// Draw item icon.
if (Image *image = item->getImage())
{
@@ -199,6 +214,7 @@ void OutfitWindow::draw(gcn::Graphics *graphics)
}
}
}
+
if (mItemMoved)
{
// Draw the item image being dragged by the cursor.
@@ -216,6 +232,7 @@ void OutfitWindow::draw(gcn::Graphics *graphics)
void OutfitWindow::mouseDragged(gcn::MouseEvent &event)
{
Window::mouseDragged(event);
+
if (event.getButton() == gcn::MouseEvent::LEFT)
{
if (!mItemMoved && mItemClicked)
@@ -223,16 +240,18 @@ void OutfitWindow::mouseDragged(gcn::MouseEvent &event)
const int index = getIndexFromGrid(event.getX(), event.getY());
if (index == -1)
return;
- const int itemId = mItems[mCurrentOutfit][index];
+
+ const int itemId = mOutfits[mCurrentOutfit].items[index];
if (itemId < 0)
return;
- Item *item = PlayerInfo::getInventory()->findItem(itemId);
- if (item)
+
+ if (Item *item = PlayerInfo::getInventory()->findItem(itemId))
{
mItemMoved = item;
- mItems[mCurrentOutfit][index] = -1;
+ mOutfits[mCurrentOutfit].items[index] = -1;
}
}
+
if (mItemMoved)
{
mCursorPosX = event.getX();
@@ -251,10 +270,10 @@ void OutfitWindow::mousePressed(gcn::MouseEvent &event)
// Stores the selected item if there is one.
if (isItemSelected())
{
- mItems[mCurrentOutfit][index] = mItemSelected;
+ mOutfits[mCurrentOutfit].items[index] = mItemSelected;
mItemSelected = -1;
}
- else if (mItems[mCurrentOutfit][index])
+ else if (mOutfits[mCurrentOutfit].items[index])
{
mItemClicked = true;
}
@@ -277,7 +296,7 @@ void OutfitWindow::mouseReleased(gcn::MouseEvent &event)
}
if (mItemMoved)
{
- mItems[mCurrentOutfit][index] = mItemMoved->getId();
+ mOutfits[mCurrentOutfit].items[index] = mItemMoved->getId();
mItemMoved = nullptr;
}
if (mItemClicked)
@@ -311,7 +330,7 @@ void OutfitWindow::unequipNotInOutfit(int outfit)
bool found = false;
for (int f = 0; f < OUTFIT_ITEM_COUNT; f++)
{
- if (inventory->getItem(i)->getId() == mItems[outfit][f])
+ if (inventory->getItem(i)->getId() == mOutfits[outfit].items[f])
{
found = true;
break;
@@ -319,9 +338,7 @@ void OutfitWindow::unequipNotInOutfit(int outfit)
}
if (!found)
{
- Item *item = inventory->getItem(i);
-
- if (item)
+ if (Item *item = inventory->getItem(i))
item->doEvent(Event::DoUnequip);
}
}
diff --git a/src/gui/outfitwindow.h b/src/gui/outfitwindow.h
index aa07e020..56e96795 100644
--- a/src/gui/outfitwindow.h
+++ b/src/gui/outfitwindow.h
@@ -78,8 +78,13 @@ class OutfitWindow : public Window, gcn::ActionListener
void save();
- int mItems[OUTFITS_COUNT][OUTFIT_ITEM_COUNT];
- bool mItemsUnequip[OUTFITS_COUNT];
+ struct Outfit
+ {
+ int items[OUTFIT_ITEM_COUNT];
+ bool unequip = true;
+ };
+
+ Outfit mOutfits[OUTFITS_COUNT];
int mItemSelected = -1;
int mCurrentOutfit = 0;
diff --git a/src/gui/palette.h b/src/gui/palette.h
index b81d8865..9de911d5 100644
--- a/src/gui/palette.h
+++ b/src/gui/palette.h
@@ -33,7 +33,7 @@
#include <vector>
// Default Gradient Delay
-#define GRADIENT_DELAY 40
+constexpr int GRADIENT_DELAY = 40;
/**
* Class controlling the game's color palette.
diff --git a/src/gui/serverdialog.cpp b/src/gui/serverdialog.cpp
index bb978a78..01b477da 100644
--- a/src/gui/serverdialog.cpp
+++ b/src/gui/serverdialog.cpp
@@ -52,19 +52,6 @@
static const int MAX_SERVERLIST = 6;
-static std::string serverTypeToString(ServerType type)
-{
- switch (type)
- {
- case ServerType::TMWATHENA:
- return "TmwAthena";
- case ServerType::MANASERV:
- return "ManaServ";
- default:
- return std::string();
- }
-}
-
ServersListModel::ServersListModel(ServerInfos *servers, ServerDialog *parent):
mServers(servers),
mVersionStrings(servers->size(), VersionString(0, std::string())),
@@ -413,7 +400,7 @@ void ServerDialog::downloadServerList()
std::string listFile = branding.getStringValue("onlineServerList");
if (listFile.empty())
- listFile = config.getStringValue("onlineServerList");
+ listFile = config.onlineServerList;
// Fall back to manasource.org when neither branding nor config set it
if (listFile.empty())
@@ -533,38 +520,18 @@ void ServerDialog::loadServers()
void ServerDialog::loadCustomServers()
{
- for (int i = 0; i < MAX_SERVERLIST; ++i)
+ for (auto &server : config.servers)
{
- const std::string index = toString(i);
- const std::string nameKey = "MostUsedServerDescName" + index;
- const std::string hostNameKey = "MostUsedServerName" + index;
- const std::string typeKey = "MostUsedServerType" + index;
- const std::string portKey = "MostUsedServerPort" + index;
- const std::string descriptionKey = "MostUsedServerDescription" + index;
-
- ServerInfo server;
- server.name = config.getValue(nameKey, std::string());
- server.hostname = config.getValue(hostNameKey, std::string());
- server.type = ServerInfo::parseType(config.getValue(typeKey, std::string()));
-
- const uint16_t defaultPort = ServerInfo::defaultPortForServerType(server.type);
- server.port = static_cast<uint16_t>(config.getValue(portKey, defaultPort));
- server.description = config.getValue(descriptionKey, std::string());
-
- // Stop on the first invalid server
- if (!server.isValid())
- break;
-
- server.save = true;
-
- mServers.push_back(server);
+ if (server.isValid())
+ {
+ server.save = true;
+ mServers.push_back(server);
+ }
}
}
void ServerDialog::saveCustomServers(const ServerInfo &currentServer, int index)
{
- ServerInfos::iterator it, it_end = mServers.end();
-
// Make sure the current server is mentioned first
if (currentServer.isValid())
{
@@ -574,7 +541,7 @@ void ServerDialog::saveCustomServers(const ServerInfo &currentServer, int index)
}
else
{
- for (it = mServers.begin(); it != it_end; ++it)
+ for (auto it = mServers.begin(), it_end = mServers.end(); it != it_end; ++it)
{
if (*it == currentServer)
{
@@ -586,35 +553,7 @@ void ServerDialog::saveCustomServers(const ServerInfo &currentServer, int index)
}
}
- int savedServerCount = 0;
-
- for (it = mServers.begin(), it_end = mServers.end();
- it != it_end && savedServerCount < MAX_SERVERLIST; ++it)
- {
- const ServerInfo &server = *it;
-
- // Only save servers that were loaded from settings
- if (!(server.save && server.isValid()))
- continue;
-
- const std::string index = toString(savedServerCount);
- const std::string nameKey = "MostUsedServerDescName" + index;
- const std::string hostNameKey = "MostUsedServerName" + index;
- const std::string typeKey = "MostUsedServerType" + index;
- const std::string portKey = "MostUsedServerPort" + index;
- const std::string descriptionKey = "MostUsedServerDescription" + index;
-
- config.setValue(hostNameKey, toString(server.hostname));
- config.setValue(typeKey, serverTypeToString(server.type));
- config.setValue(portKey, toString(server.port));
- config.setValue(nameKey, server.name);
- config.setValue(descriptionKey, server.description);
- ++savedServerCount;
- }
-
- // Insert an invalid entry at the end to make the loading stop there
- if (savedServerCount < MAX_SERVERLIST)
- config.setValue("MostUsedServerName" + toString(savedServerCount), std::string());
+ config.servers = mServers;
// Restore the correct description
if (index < 0)
diff --git a/src/gui/setup_audio.cpp b/src/gui/setup_audio.cpp
index 6d18e71f..f51bfcb6 100644
--- a/src/gui/setup_audio.cpp
+++ b/src/gui/setup_audio.cpp
@@ -34,11 +34,11 @@
#include "utils/gettext.h"
Setup_Audio::Setup_Audio():
- mMusicVolume(config.getIntValue("musicVolume")),
- mSfxVolume(config.getIntValue("sfxVolume")),
- mNotificationsVolume(config.getIntValue("notificationsVolume")),
- mSoundEnabled(config.getBoolValue("sound")),
- mDownloadEnabled(config.getBoolValue("download-music")),
+ mMusicVolume(config.musicVolume),
+ mSfxVolume(config.sfxVolume),
+ mNotificationsVolume(config.notificationsVolume),
+ mSoundEnabled(config.sound),
+ mDownloadEnabled(config.downloadMusic),
mSoundCheckBox(new CheckBox(_("Sound"), mSoundEnabled)),
mDownloadMusicCheckBox(new CheckBox(_("Download music"), mDownloadEnabled)),
mSfxSlider(new Slider(0, sound.getMaxVolume())),
@@ -84,19 +84,19 @@ void Setup_Audio::apply()
{
mSoundEnabled = mSoundCheckBox->isSelected();
mDownloadEnabled = mDownloadMusicCheckBox->isSelected();
- mSfxVolume = config.getIntValue("sfxVolume");
- mNotificationsVolume = config.getIntValue("sfxVolume");
- mMusicVolume = config.getIntValue("musicVolume");
+ mSfxVolume = config.sfxVolume;
+ mNotificationsVolume = config.sfxVolume;
+ mMusicVolume = config.musicVolume;
- config.setValue("sound", mSoundEnabled);
+ config.sound = mSoundEnabled;
// Display a message if user has selected to download music,
// And if downloadmusic is not already enabled
- if (mDownloadEnabled && !config.getBoolValue("download-music"))
+ if (mDownloadEnabled && !config.downloadMusic)
{
new OkDialog(_("Notice"),_("You may have to restart your client if you want to download new music"));
}
- config.setValue("download-music", mDownloadEnabled);
+ config.downloadMusic = mDownloadEnabled;
if (mSoundEnabled)
{
@@ -127,10 +127,10 @@ void Setup_Audio::cancel()
sound.setMusicVolume(mMusicVolume);
mMusicSlider->setValue(mMusicVolume);
- config.setValue("sound", mSoundEnabled);
- config.setValue("download-music", mDownloadEnabled);
- config.setValue("sfxVolume", mSfxVolume);
- config.setValue("musicVolume", mMusicVolume);
+ config.sound = mSoundEnabled;
+ config.downloadMusic = mDownloadEnabled;
+ config.sfxVolume = mSfxVolume;
+ config.musicVolume = mMusicVolume;
}
void Setup_Audio::action(const gcn::ActionEvent &event)
@@ -138,19 +138,19 @@ void Setup_Audio::action(const gcn::ActionEvent &event)
if (event.getId() == "sfx")
{
int volume = (int) mSfxSlider->getValue();
- config.setValue("sfxVolume", volume);
+ config.sfxVolume = volume;
sound.setSfxVolume(volume);
}
else if (event.getId() == "notifications")
{
int volume = (int) mNotificationsSlider->getValue();
- config.setValue("notificationsVolume", volume);
+ config.notificationsVolume = volume;
sound.setNotificationsVolume(volume);
}
else if (event.getId() == "music")
{
int volume = (int) mMusicSlider->getValue();
- config.setValue("musicVolume", volume);
+ config.musicVolume = volume;
sound.setMusicVolume(volume);
}
}
diff --git a/src/gui/setup_interface.cpp b/src/gui/setup_interface.cpp
index 3801861b..229898c7 100644
--- a/src/gui/setup_interface.cpp
+++ b/src/gui/setup_interface.cpp
@@ -77,14 +77,14 @@ static const char *speechModeToString(Being::Speech mode)
}
Setup_Interface::Setup_Interface():
- mShowMonsterDamageEnabled(config.getBoolValue("showMonstersTakedDamage")),
- mVisibleNamesEnabled(config.getBoolValue("visiblenames")),
- mNameEnabled(config.getBoolValue("showownname")),
- mNPCLogEnabled(config.getBoolValue("logNpcInGui")),
- mPickupChatEnabled(config.getBoolValue("showpickupchat")),
- mPickupParticleEnabled(config.getBoolValue("showpickupparticle")),
- mOpacity(config.getFloatValue("guialpha")),
- mSpeechMode(static_cast<Being::Speech>(config.getIntValue("speech"))),
+ mShowMonsterDamageEnabled(config.showMonstersTakedDamage),
+ mVisibleNamesEnabled(config.visibleNames),
+ mNameEnabled(config.showOwnName),
+ mNPCLogEnabled(config.logNpcInGui),
+ mPickupChatEnabled(config.showPickupChat),
+ mPickupParticleEnabled(config.showPickupParticle),
+ mOpacity(config.guiAlpha),
+ mSpeechMode(config.speech),
mVisibleNamesCheckBox(new CheckBox(_("Visible names"),
mVisibleNamesEnabled)),
mNameCheckBox(new CheckBox(_("Show own name"), mNameEnabled)),
@@ -98,7 +98,7 @@ Setup_Interface::Setup_Interface():
mSpeechSlider(new Slider(0, 3)),
mSpeechLabel(new Label(std::string())),
mAlphaSlider(new Slider(0.2, 1.0)),
- mFontSize(config.getIntValue("fontSize"))
+ mFontSize(config.fontSize)
{
setName(_("Interface"));
@@ -117,7 +117,7 @@ Setup_Interface::Setup_Interface():
mAlphaSlider->setValue(mOpacity);
mAlphaSlider->setWidth(90);
- mAlphaSlider->setEnabled(!config.getBoolValue("disableTransparency"));
+ mAlphaSlider->setEnabled(!config.disableTransparency);
// Set actions
@@ -182,16 +182,16 @@ Setup_Interface::~Setup_Interface()
void Setup_Interface::apply()
{
- config.setValue("fontSize", mFontSizeDropDown->getSelected() + 10);
-
- mShowMonsterDamageEnabled = config.getBoolValue("showMonstersTakedDamage");
- mVisibleNamesEnabled = config.getBoolValue("visiblenames");
- mNameEnabled = config.getBoolValue("showownname");
- mNPCLogEnabled = config.getBoolValue("logNpcInGui");
- mSpeechMode = static_cast<Being::Speech>(config.getIntValue("speech"));
- mOpacity = config.getFloatValue("guialpha");
- mPickupChatEnabled = config.getBoolValue("showpickupchat");
- mPickupParticleEnabled = config.getBoolValue("showpickupparticle");
+ config.fontSize = mFontSizeDropDown->getSelected() + 10;
+
+ mShowMonsterDamageEnabled = config.showMonstersTakedDamage;
+ mVisibleNamesEnabled = config.visibleNames;
+ mNameEnabled = config.showOwnName;
+ mNPCLogEnabled = config.logNpcInGui;
+ mSpeechMode = config.speech;
+ mOpacity = config.guiAlpha;
+ mPickupChatEnabled = config.showPickupChat;
+ mPickupParticleEnabled = config.showPickupParticle;
}
void Setup_Interface::cancel()
@@ -204,14 +204,14 @@ void Setup_Interface::cancel()
mAlphaSlider->setValue(mOpacity);
//mAlphaSlider->setEnabled(!mSDLTransparencyDisabled);
- config.setValue("showMonstersTakedDamage", mShowMonsterDamageEnabled);
- config.setValue("visiblenames", mVisibleNamesEnabled);
- config.setValue("speech", mSpeechMode);
- config.setValue("showownname", mNameEnabled);
- config.setValue("logNpcInGui", mNPCLogEnabled);
- config.setValue("guialpha", mOpacity);
- config.setValue("showpickupchat", mPickupChatEnabled);
- config.setValue("showpickupparticle", mPickupParticleEnabled);
+ config.showMonstersTakedDamage = mShowMonsterDamageEnabled;
+ config.visibleNames = mVisibleNamesEnabled;
+ config.speech = mSpeechMode;
+ config.showOwnName = mNameEnabled;
+ config.logNpcInGui = mNPCLogEnabled;
+ config.guiAlpha = mOpacity;
+ config.showPickupChat = mPickupChatEnabled;
+ config.showPickupParticle = mPickupParticleEnabled;
}
void Setup_Interface::action(const gcn::ActionEvent &event)
@@ -220,38 +220,37 @@ void Setup_Interface::action(const gcn::ActionEvent &event)
if (id == "guialpha")
{
- config.setValue("guialpha", mAlphaSlider->getValue());
+ config.guiAlpha = mAlphaSlider->getValue();
}
else if (id == "monsterdamage")
{
- config.setValue("showMonstersTakedDamage", mShowMonsterDamageCheckBox->isSelected());
+ config.showMonstersTakedDamage = mShowMonsterDamageCheckBox->isSelected();
}
else if (id == "visiblenames")
{
- config.setValue("visiblenames", mVisibleNamesCheckBox->isSelected());
+ config.visibleNames = mVisibleNamesCheckBox->isSelected();
}
else if (id == "pickupchat")
{
- config.setValue("showpickupchat", mPickupChatCheckBox->isSelected());
+ config.showPickupChat = mPickupChatCheckBox->isSelected();
}
else if (id == "pickupparticle")
{
- config.setValue("showpickupparticle",
- mPickupParticleCheckBox->isSelected());
+ config.showPickupParticle = mPickupParticleCheckBox->isSelected();
}
else if (id == "speech")
{
auto val = (Being::Speech)mSpeechSlider->getValue();
mSpeechLabel->setCaption(speechModeToString(val));
mSpeechSlider->setValue(val);
- config.setValue("speech", val);
+ config.speech = val;
}
else if (id == "showownname")
{
- config.setValue("showownname", mNameCheckBox->isSelected());
+ config.showOwnName = mNameCheckBox->isSelected();
}
else if (id == "lognpc")
{
- config.setValue("logNpcInGui", mNPCLogCheckBox->isSelected());
+ config.logNpcInGui = mNPCLogCheckBox->isSelected();
}
}
diff --git a/src/gui/setup_joystick.cpp b/src/gui/setup_joystick.cpp
index 1109f06e..17e86ea9 100644
--- a/src/gui/setup_joystick.cpp
+++ b/src/gui/setup_joystick.cpp
@@ -39,7 +39,7 @@ Setup_Joystick::Setup_Joystick():
{
setName(_("Joystick"));
- mJoystickEnabled = config.getBoolValue("joystickEnabled");
+ mJoystickEnabled = config.joystickEnabled;
mJoystickCheckBox->setSelected(mJoystickEnabled);
mJoystickCheckBox->addActionListener(this);
@@ -90,7 +90,5 @@ void Setup_Joystick::cancel()
void Setup_Joystick::apply()
{
- config.setValue("joystickEnabled",
- joystick ? joystick->isEnabled() : false);
+ config.joystickEnabled = joystick && joystick->isEnabled();
}
-
diff --git a/src/gui/setup_keyboard.h b/src/gui/setup_keyboard.h
index 1ecb5ea3..1c9d1733 100644
--- a/src/gui/setup_keyboard.h
+++ b/src/gui/setup_keyboard.h
@@ -29,8 +29,6 @@
#include <guichan/actionlistener.hpp>
-#include <string>
-
class Setup_Keyboard : public SetupTab, public gcn::ActionListener
{
public:
diff --git a/src/gui/setup_players.cpp b/src/gui/setup_players.cpp
index a771d7ae..501fc83a 100644
--- a/src/gui/setup_players.cpp
+++ b/src/gui/setup_players.cpp
@@ -201,9 +201,6 @@ public:
#define ACTION_DELETE "delete"
#define ACTION_TABLE "table"
#define ACTION_STRATEGY "strategy"
-#define ACTION_WHISPER_TAB "whisper tab"
-#define ACTION_SHOW_GENDER "show gender"
-#define ACTION_ENABLE_CHAT_LOG "enable log"
Setup_Players::Setup_Players():
mPlayerTableTitleModel(new StaticTableModel(1, COLUMNS_NR)),
@@ -216,12 +213,9 @@ Setup_Players::Setup_Players():
mDefaultWhisper(new CheckBox(_("Allow whispers"),
player_relations.getDefault() & PlayerPermissions::WHISPER)),
mDeleteButton(new Button(_("Delete"), ACTION_DELETE, this)),
- mWhisperTab(config.getBoolValue("whispertab")),
- mWhisperTabCheckBox(new CheckBox(_("Put all whispers in tabs"), mWhisperTab)),
- mShowGender(config.getBoolValue("showgender")),
- mShowGenderCheckBox(new CheckBox(_("Show gender"), mShowGender)),
- mEnableChatLog(config.getBoolValue("enableChatLog")),
- mEnableChatLogCheckBox(new CheckBox(_("Enable Chat log"), mEnableChatLog))
+ mWhisperTabCheckBox(new CheckBox(_("Put all whispers in tabs"), config.whisperTab)),
+ mShowGenderCheckBox(new CheckBox(_("Show gender"), config.showGender)),
+ mEnableChatLogCheckBox(new CheckBox(_("Enable Chat log"), config.enableChatLog))
{
setName(_("Players"));
@@ -253,27 +247,18 @@ Setup_Players::Setup_Players():
mIgnoreActionChoicesBox->setActionEventId(ACTION_STRATEGY);
mIgnoreActionChoicesBox->addActionListener(this);
- int ignore_strategy_index = 0; // safe default
+ int ignoreStrategyIndex = 0; // safe default
- if (player_relations.getPlayerIgnoreStrategy())
+ if (auto ignoreStrategy = player_relations.getPlayerIgnoreStrategy())
{
- ignore_strategy_index = player_relations.getPlayerIgnoreStrategyIndex(
- player_relations.getPlayerIgnoreStrategy()->mShortName);
- if (ignore_strategy_index < 0)
- ignore_strategy_index = 0;
+ ignoreStrategyIndex = player_relations.getPlayerIgnoreStrategyIndex(
+ ignoreStrategy->mShortName);
+ if (ignoreStrategyIndex < 0)
+ ignoreStrategyIndex = 0;
}
- mIgnoreActionChoicesBox->setSelected(ignore_strategy_index);
+ mIgnoreActionChoicesBox->setSelected(ignoreStrategyIndex);
mIgnoreActionChoicesBox->adjustHeight();
- mWhisperTabCheckBox->setActionEventId(ACTION_WHISPER_TAB);
- mWhisperTabCheckBox->addActionListener(this);
-
- mShowGenderCheckBox->setActionEventId(ACTION_SHOW_GENDER);
- mShowGenderCheckBox->addActionListener(this);
-
- mEnableChatLogCheckBox->setActionEventId(ACTION_ENABLE_CHAT_LOG);
- mEnableChatLogCheckBox->addActionListener(this);
-
reset();
// Do the layout
@@ -323,26 +308,22 @@ void Setup_Players::apply()
PlayerPermissions::TRADE : 0)
| (mDefaultWhisper->isSelected() ?
PlayerPermissions::WHISPER : 0));
- config.setValue("whispertab", mWhisperTab);
- bool showGender = config.getBoolValue("showgender");
+ const bool showGenderChanged = config.showGender != mShowGenderCheckBox->isSelected();
- config.setValue("showgender", mShowGender);
+ config.whisperTab = mWhisperTabCheckBox->isSelected();
+ config.showGender = mShowGenderCheckBox->isSelected();
+ config.enableChatLog = mEnableChatLogCheckBox->isSelected();
- if (actorSpriteManager && mShowGender != showGender)
+ if (actorSpriteManager && showGenderChanged)
actorSpriteManager->updatePlayerNames();
-
- config.setValue("enableChatLog", mEnableChatLog);
}
void Setup_Players::cancel()
{
- mWhisperTab = config.getBoolValue("whispertab");
- mWhisperTabCheckBox->setSelected(mWhisperTab);
- mShowGender = config.getBoolValue("showgender");
- mShowGenderCheckBox->setSelected(mShowGender);
- mEnableChatLog = config.getBoolValue("enableChatLog");
- mEnableChatLogCheckBox->setSelected(mEnableChatLog);
+ mWhisperTabCheckBox->setSelected(config.whisperTab);
+ mShowGenderCheckBox->setSelected(config.showGender);
+ mEnableChatLogCheckBox->setSelected(config.enableChatLog);
}
void Setup_Players::action(const gcn::ActionEvent &event)
@@ -380,18 +361,6 @@ void Setup_Players::action(const gcn::ActionEvent &event)
player_relations.setPlayerIgnoreStrategy(s);
}
- else if (event.getId() == ACTION_WHISPER_TAB)
- {
- mWhisperTab = mWhisperTabCheckBox->isSelected();
- }
- else if (event.getId() == ACTION_SHOW_GENDER)
- {
- mShowGender = mShowGenderCheckBox->isSelected();
- }
- else if (event.getId() == ACTION_ENABLE_CHAT_LOG)
- {
- mEnableChatLog = mEnableChatLogCheckBox->isSelected();
- }
}
void Setup_Players::playerRelationsUpdated()
diff --git a/src/gui/setup_players.h b/src/gui/setup_players.h
index 758c646d..48a08e83 100644
--- a/src/gui/setup_players.h
+++ b/src/gui/setup_players.h
@@ -65,13 +65,8 @@ private:
gcn::ListModel *mIgnoreActionChoicesModel;
gcn::DropDown *mIgnoreActionChoicesBox;
- bool mWhisperTab;
gcn::CheckBox *mWhisperTabCheckBox;
-
- bool mShowGender;
gcn::CheckBox *mShowGenderCheckBox;
-
- bool mEnableChatLog;
gcn::CheckBox *mEnableChatLogCheckBox;
};
diff --git a/src/gui/setup_video.cpp b/src/gui/setup_video.cpp
index 5f7dc7b4..efa56cb8 100644
--- a/src/gui/setup_video.cpp
+++ b/src/gui/setup_video.cpp
@@ -186,7 +186,7 @@ private:
static const char *overlayDetailToString(int detail)
{
if (detail == -1)
- detail = config.getIntValue("OverlayDetail");
+ detail = config.overlayDetail;
switch (detail)
{
@@ -200,7 +200,7 @@ static const char *overlayDetailToString(int detail)
static const char *particleDetailToString(int detail)
{
if (detail == -1)
- detail = 3 - config.getIntValue("particleEmitterSkip");
+ detail = 3 - config.particleEmitterSkip;
switch (detail)
{
@@ -214,10 +214,10 @@ static const char *particleDetailToString(int detail)
Setup_Video::Setup_Video():
mVideoSettings(Client::getVideo().settings()),
- mCustomCursorEnabled(config.getBoolValue("customcursor")),
- mParticleEffectsEnabled(config.getBoolValue("particleeffects")),
- mFps(config.getIntValue("fpslimit")),
- mSDLTransparencyDisabled(config.getBoolValue("disableTransparency")),
+ mCustomCursorEnabled(config.customCursor),
+ mParticleEffectsEnabled(config.particleEffects),
+ mFps(config.fpsLimit),
+ mSDLTransparencyDisabled(config.disableTransparency),
mWindowModeListModel(new StringListModel({ _("Windowed"), _("Windowed Fullscreen"), _("Fullscreen") })),
mResolutionListModel(new ResolutionListModel),
mScaleListModel(new ScaleListModel(mVideoSettings)),
@@ -231,10 +231,10 @@ Setup_Video::Setup_Video():
mFpsCheckBox(new CheckBox(_("FPS limit:"))),
mFpsSlider(new Slider(10, 120)),
mFpsLabel(new Label),
- mOverlayDetail(config.getIntValue("OverlayDetail")),
+ mOverlayDetail(config.overlayDetail),
mOverlayDetailSlider(new Slider(0, 2)),
mOverlayDetailField(new Label),
- mParticleDetail(3 - config.getIntValue("particleEmitterSkip")),
+ mParticleDetail(3 - config.particleEmitterSkip),
mParticleDetailSlider(new Slider(0, 3)),
mParticleDetailField(new Label),
mDisableSDLTransparencyCheckBox(
@@ -361,11 +361,11 @@ void Setup_Video::apply()
if (video.apply(mVideoSettings))
{
- config.setValue("windowmode", static_cast<int>(mVideoSettings.windowMode));
- config.setValue("scale", mVideoSettings.userScale);
- config.setValue("vsync", mVideoSettings.vsync);
- config.setValue("screenwidth", mVideoSettings.width);
- config.setValue("screenheight", mVideoSettings.height);
+ config.windowMode = mVideoSettings.windowMode;
+ config.scale = mVideoSettings.userScale;
+ config.vsync = mVideoSettings.vsync;
+ config.screenWidth = mVideoSettings.width;
+ config.screenHeight = mVideoSettings.height;
Client::instance()->checkGraphicsSize();
}
@@ -377,7 +377,7 @@ void Setup_Video::apply()
// OpenGL change
if (mOpenGLCheckBox->isSelected() != mVideoSettings.openGL)
{
- config.setValue("opengl", mOpenGLCheckBox->isSelected());
+ config.opengl = mOpenGLCheckBox->isSelected();
// OpenGL can currently only be changed by restarting, notify user.
if (mOpenGLCheckBox->isSelected())
@@ -397,7 +397,7 @@ void Setup_Video::apply()
// If LowCPU is enabled from a disabled state we warn the user
else if (mDisableSDLTransparencyCheckBox->isSelected())
{
- if (!config.getBoolValue("disableTransparency"))
+ if (!config.disableTransparency)
{
new OkDialog(_("Transparency disabled"),
_("You must restart to apply changes."));
@@ -405,29 +405,28 @@ void Setup_Video::apply()
}
else
{
- if (config.getBoolValue("disableTransparency"))
+ if (config.disableTransparency)
{
new OkDialog(_("Transparency enabled"),
_("You must restart to apply changes."));
}
}
- config.setValue("disableTransparency",
- mDisableSDLTransparencyCheckBox->isSelected());
+ config.disableTransparency = mDisableSDLTransparencyCheckBox->isSelected();
mFps = mFpsCheckBox->isSelected() ? (int) mFpsSlider->getValue() : 0;
mFpsSlider->setEnabled(mFps > 0);
// FPS change
- config.setValue("fpslimit", mFps);
+ config.fpsLimit = mFps;
// We sync old and new values at apply time
- mVideoSettings.windowMode = static_cast<WindowMode>(config.getIntValue("windowmode"));
- mVideoSettings.vsync = config.getBoolValue("vsync");
- mVideoSettings.openGL = config.getBoolValue("opengl");
- mCustomCursorEnabled = config.getBoolValue("customcursor");
- mParticleEffectsEnabled = config.getBoolValue("particleeffects");
- mOverlayDetail = config.getIntValue("OverlayDetail");
- mSDLTransparencyDisabled = config.getBoolValue("disableTransparency");
+ mVideoSettings.windowMode = config.windowMode;
+ mVideoSettings.vsync = config.vsync;
+ mVideoSettings.openGL = config.opengl;
+ mCustomCursorEnabled = config.customCursor;
+ mParticleEffectsEnabled = config.particleEffects;
+ mOverlayDetail = config.overlayDetail;
+ mSDLTransparencyDisabled = config.disableTransparency;
}
void Setup_Video::cancel()
@@ -452,12 +451,12 @@ void Setup_Video::cancel()
mDisableSDLTransparencyCheckBox->setSelected(mSDLTransparencyDisabled);
mDisableSDLTransparencyCheckBox->setEnabled(!mVideoSettings.openGL);
- config.setValue("windowmode", static_cast<int>(mVideoSettings.windowMode));
+ config.windowMode = mVideoSettings.windowMode;
- config.setValue("customcursor", mCustomCursorEnabled);
- config.setValue("particleeffects", mParticleEffectsEnabled);
- config.setValue("opengl", mVideoSettings.openGL);
- config.setValue("disableTransparency", mSDLTransparencyDisabled);
+ config.customCursor = mCustomCursorEnabled;
+ config.particleEffects = mParticleEffectsEnabled;
+ config.opengl = mVideoSettings.openGL;
+ config.disableTransparency = mSDLTransparencyDisabled;
}
void Setup_Video::action(const gcn::ActionEvent &event)
@@ -490,12 +489,11 @@ void Setup_Video::action(const gcn::ActionEvent &event)
}
else if (id == "customcursor")
{
- config.setValue("customcursor", mCustomCursorCheckBox->isSelected());
+ config.customCursor = mCustomCursorCheckBox->isSelected();
}
else if (id == "particleeffects")
{
- config.setValue("particleeffects",
- mParticleEffectsCheckBox->isSelected());
+ config.particleEffects = mParticleEffectsCheckBox->isSelected();
Particle::enabled = mParticleEffectsCheckBox->isSelected();
if (Game::instance())
@@ -508,13 +506,13 @@ void Setup_Video::action(const gcn::ActionEvent &event)
{
int val = (int) mOverlayDetailSlider->getValue();
mOverlayDetailField->setCaption(overlayDetailToString(val));
- config.setValue("OverlayDetail", val);
+ config.overlayDetail = val;
}
else if (id == "particledetailslider")
{
int val = (int) mParticleDetailSlider->getValue();
mParticleDetailField->setCaption(particleDetailToString(val));
- config.setValue("particleEmitterSkip", 3 - val);
+ config.particleEmitterSkip = 3 - val;
Particle::emitterSkip = 4 - val;
}
else if (id == "fpslimitcheckbox" || id == "fpslimitslider")
diff --git a/src/gui/updaterwindow.cpp b/src/gui/updaterwindow.cpp
index a92911b4..772df725 100644
--- a/src/gui/updaterwindow.cpp
+++ b/src/gui/updaterwindow.cpp
@@ -464,7 +464,7 @@ void UpdaterWindow::logic()
const UpdateFile &thisFile = mUpdateFiles[mUpdateIndex];
if (!thisFile.required)
{
- if (!(thisFile.type == "music" && config.getBoolValue("download-music")))
+ if (!(thisFile.type == "music" && config.downloadMusic))
{
mUpdateIndex++;
break;
diff --git a/src/gui/viewport.cpp b/src/gui/viewport.cpp
index 8fcca014..558ce0e6 100644
--- a/src/gui/viewport.cpp
+++ b/src/gui/viewport.cpp
@@ -49,11 +49,6 @@ Viewport::Viewport()
setOpaque(false);
addMouseListener(this);
- mScrollLaziness = config.getIntValue("ScrollLaziness");
- mScrollRadius = config.getIntValue("ScrollRadius");
- mScrollCenterOffsetX = config.getIntValue("ScrollCenterOffsetX");
- mScrollCenterOffsetY = config.getIntValue("ScrollCenterOffsetY");
-
mPopupMenu = new PopupMenu;
mBeingPopup = new BeingPopup;
@@ -95,8 +90,8 @@ void Viewport::draw(gcn::Graphics *gcnGraphics)
auto *graphics = static_cast<Graphics*>(gcnGraphics);
// Calculate viewpoint
- int midTileX = (graphics->getWidth() + mScrollCenterOffsetX) / 2;
- int midTileY = (graphics->getHeight() + mScrollCenterOffsetX) / 2;
+ int midTileX = (graphics->getWidth() + config.scrollCenterOffsetX) / 2;
+ int midTileY = (graphics->getHeight() + config.scrollCenterOffsetY) / 2;
const Vector &playerPos = local_player->getPosition();
const int player_x = (int) playerPos.x - midTileX;
@@ -105,34 +100,34 @@ void Viewport::draw(gcn::Graphics *gcnGraphics)
const float ticks = Time::deltaTimeMs() / static_cast<float>(MILLISECONDS_IN_A_TICK);
float scrollFraction = 1.0f;
- if (mScrollLaziness > 1)
+ if (config.scrollLaziness > 1)
{
- // mScrollLaziness defines the fraction of the desired camera movement
+ // settings.ScrollLaziness defines the fraction of the desired camera movement
// that is applied every 10ms. To make this work independently of the
// frame duration, we calculate the actual scroll fraction based on the
// time delta.
- scrollFraction = 1.0f - std::pow(1.0f - 1.0f / mScrollLaziness, ticks);
+ scrollFraction = 1.0f - std::pow(1.0f - 1.0f / config.scrollLaziness, ticks);
}
// Apply lazy scrolling
- if (player_x > mPixelViewX + mScrollRadius)
+ if (player_x > mPixelViewX + config.scrollRadius)
{
- mPixelViewX += (player_x - mPixelViewX - mScrollRadius) *
+ mPixelViewX += (player_x - mPixelViewX - config.scrollRadius) *
scrollFraction;
}
- if (player_x < mPixelViewX - mScrollRadius)
+ if (player_x < mPixelViewX - config.scrollRadius)
{
- mPixelViewX += (player_x - mPixelViewX + mScrollRadius) *
+ mPixelViewX += (player_x - mPixelViewX + config.scrollRadius) *
scrollFraction;
}
- if (player_y > mPixelViewY + mScrollRadius)
+ if (player_y > mPixelViewY + config.scrollRadius)
{
- mPixelViewY += (player_y - mPixelViewY - mScrollRadius) *
+ mPixelViewY += (player_y - mPixelViewY - config.scrollRadius) *
scrollFraction;
}
- if (player_y < mPixelViewY - mScrollRadius)
+ if (player_y < mPixelViewY - config.scrollRadius)
{
- mPixelViewY += (player_y - mPixelViewY + mScrollRadius) *
+ mPixelViewY += (player_y - mPixelViewY + config.scrollRadius) *
scrollFraction;
}
@@ -624,14 +619,4 @@ void Viewport::event(Event::Channel channel, const Event &event)
if (mHoverItem == actor)
mHoverItem = nullptr;
}
- else if (channel == Event::ConfigChannel &&
- event.getType() == Event::ConfigOptionChanged)
- {
- const std::string &option = event.getString("option");
- if (option == "ScrollLaziness" || option == "ScrollRadius")
- {
- mScrollLaziness = config.getIntValue("ScrollLaziness");
- mScrollRadius = config.getIntValue("ScrollRadius");
- }
- }
}
diff --git a/src/gui/viewport.h b/src/gui/viewport.h
index ee7eb96f..b69a73b6 100644
--- a/src/gui/viewport.h
+++ b/src/gui/viewport.h
@@ -194,10 +194,6 @@ class Viewport : public WindowContainer, public gcn::MouseListener,
Map *mMap = nullptr; /**< The current map. */
- int mScrollRadius;
- int mScrollLaziness;
- int mScrollCenterOffsetX;
- int mScrollCenterOffsetY;
int mMouseX = 0; /**< Current mouse position in pixels. */
int mMouseY = 0; /**< Current mouse position in pixels. */
float mPixelViewX = 0.0f; /**< Current viewpoint in pixels. */
diff --git a/src/gui/widgets/button.cpp b/src/gui/widgets/button.cpp
index 5c691705..274f329b 100644
--- a/src/gui/widgets/button.cpp
+++ b/src/gui/widgets/button.cpp
@@ -191,7 +191,7 @@ Button::~Button()
void Button::updateAlpha()
{
- float alpha = std::max(config.getFloatValue("guialpha"),
+ float alpha = std::max(config.guiAlpha,
Theme::instance()->getMinimumOpacity());
if (mAlpha != alpha)
diff --git a/src/gui/widgets/chattab.cpp b/src/gui/widgets/chattab.cpp
index 7a840cc6..1584eb0a 100644
--- a/src/gui/widgets/chattab.cpp
+++ b/src/gui/widgets/chattab.cpp
@@ -52,7 +52,7 @@ ChatTab::ChatTab(const std::string &name)
mTextOutput = new BrowserBox(BrowserBox::AUTO_WRAP);
mTextOutput->setWrapIndent(15);
- mTextOutput->setMaxRows(config.getIntValue("ChatLogLength"));
+ mTextOutput->setMaxRows(config.chatLogLength);
mTextOutput->setLinkHandler(chatWindow->mItemLinkHandler);
mScrollArea = new ScrollArea(mTextOutput);
@@ -216,7 +216,7 @@ void ChatTab::chatLog(std::string line, Own own, bool ignoreRecord)
line = lineColor + timeStr.str() + tmp.nick + tmp.text;
- if (config.getBoolValue("enableChatLog") && !ignoreRecord)
+ if (config.enableChatLog && !ignoreRecord)
saveToLogFile(line);
// We look if the Vertical Scroll Bar is set at the max before
diff --git a/src/gui/widgets/checkbox.cpp b/src/gui/widgets/checkbox.cpp
index 0554bad6..274855fd 100644
--- a/src/gui/widgets/checkbox.cpp
+++ b/src/gui/widgets/checkbox.cpp
@@ -89,7 +89,7 @@ void CheckBox::draw(gcn::Graphics* graphics)
void CheckBox::updateAlpha()
{
- float alpha = std::max(config.getFloatValue("guialpha"),
+ float alpha = std::max(config.guiAlpha,
Theme::instance()->getMinimumOpacity());
if (mAlpha != alpha)
diff --git a/src/gui/widgets/dropdown.cpp b/src/gui/widgets/dropdown.cpp
index c548570d..8811eb8d 100644
--- a/src/gui/widgets/dropdown.cpp
+++ b/src/gui/widgets/dropdown.cpp
@@ -110,7 +110,7 @@ DropDown::~DropDown()
void DropDown::updateAlpha()
{
- float alpha = std::max(config.getFloatValue("guialpha"),
+ float alpha = std::max(config.guiAlpha,
Theme::instance()->getMinimumOpacity());
if (mAlpha != alpha)
diff --git a/src/gui/widgets/emoteshortcutcontainer.cpp b/src/gui/widgets/emoteshortcutcontainer.cpp
index c72d166f..8ecbc9bf 100644
--- a/src/gui/widgets/emoteshortcutcontainer.cpp
+++ b/src/gui/widgets/emoteshortcutcontainer.cpp
@@ -41,7 +41,7 @@ EmoteShortcutContainer::EmoteShortcutContainer()
mBackgroundImg = Theme::getImageFromTheme("item_shortcut_bgr.png");
- mBackgroundImg->setAlpha(config.getFloatValue("guialpha"));
+ mBackgroundImg->setAlpha(config.guiAlpha);
mMaxItems = std::min(EmoteDB::getEmoteCount(), MAX_ITEMS);
@@ -56,9 +56,9 @@ EmoteShortcutContainer::~EmoteShortcutContainer()
void EmoteShortcutContainer::draw(gcn::Graphics *graphics)
{
- if (config.getFloatValue("guialpha") != mAlpha)
+ if (config.guiAlpha != mAlpha)
{
- mAlpha = config.getFloatValue("guialpha");
+ mAlpha = config.guiAlpha;
mBackgroundImg->setAlpha(mAlpha);
}
diff --git a/src/gui/widgets/itemshortcutcontainer.cpp b/src/gui/widgets/itemshortcutcontainer.cpp
index e6db7a0b..0b8f0c8c 100644
--- a/src/gui/widgets/itemshortcutcontainer.cpp
+++ b/src/gui/widgets/itemshortcutcontainer.cpp
@@ -48,7 +48,7 @@ ItemShortcutContainer::ItemShortcutContainer()
mBackgroundImg = Theme::getImageFromTheme("item_shortcut_bgr.png");
mMaxItems = itemShortcut->getItemCount();
- mBackgroundImg->setAlpha(config.getFloatValue("guialpha"));
+ mBackgroundImg->setAlpha(config.guiAlpha);
mBoxHeight = mBackgroundImg->getHeight();
mBoxWidth = mBackgroundImg->getWidth();
@@ -62,9 +62,9 @@ ItemShortcutContainer::~ItemShortcutContainer()
void ItemShortcutContainer::draw(gcn::Graphics *graphics)
{
- if (config.getFloatValue("guialpha") != mAlpha)
+ if (config.guiAlpha != mAlpha)
{
- mAlpha = config.getFloatValue("guialpha");
+ mAlpha = config.guiAlpha;
mBackgroundImg->setAlpha(mAlpha);
}
diff --git a/src/gui/widgets/listbox.cpp b/src/gui/widgets/listbox.cpp
index fc4d8a8e..55f0f422 100644
--- a/src/gui/widgets/listbox.cpp
+++ b/src/gui/widgets/listbox.cpp
@@ -41,7 +41,7 @@ ListBox::ListBox(gcn::ListModel *listModel):
void ListBox::updateAlpha()
{
- float alpha = std::max(config.getFloatValue("guialpha"),
+ float alpha = std::max(config.guiAlpha,
Theme::instance()->getMinimumOpacity());
if (mAlpha != alpha)
diff --git a/src/gui/widgets/playerbox.cpp b/src/gui/widgets/playerbox.cpp
index 671fad36..3bdd6bd1 100644
--- a/src/gui/widgets/playerbox.cpp
+++ b/src/gui/widgets/playerbox.cpp
@@ -59,7 +59,7 @@ PlayerBox::PlayerBox(const Being *being):
}
}
- background.setAlpha(config.getFloatValue("guialpha"));
+ background.setAlpha(config.guiAlpha);
textbox->decRef();
}
@@ -90,9 +90,10 @@ void PlayerBox::draw(gcn::Graphics *graphics)
mBeing->drawSpriteAt(static_cast<Graphics*>(graphics), x, y);
}
- if (config.getFloatValue("guialpha") != mAlpha)
+ if (config.guiAlpha != mAlpha)
{
- background.setAlpha(config.getFloatValue("guialpha"));
+ mAlpha = config.guiAlpha;
+ background.setAlpha(config.guiAlpha);
}
}
diff --git a/src/gui/widgets/progressbar.cpp b/src/gui/widgets/progressbar.cpp
index 523dde1c..9d41d1af 100644
--- a/src/gui/widgets/progressbar.cpp
+++ b/src/gui/widgets/progressbar.cpp
@@ -116,7 +116,7 @@ void ProgressBar::logic()
void ProgressBar::updateAlpha()
{
- float alpha = std::max(config.getFloatValue("guialpha"),
+ float alpha = std::max(config.guiAlpha,
Theme::instance()->getMinimumOpacity());
if (mAlpha != alpha)
diff --git a/src/gui/widgets/radiobutton.cpp b/src/gui/widgets/radiobutton.cpp
index bb96d77c..92cdacd1 100644
--- a/src/gui/widgets/radiobutton.cpp
+++ b/src/gui/widgets/radiobutton.cpp
@@ -76,9 +76,9 @@ RadioButton::~RadioButton()
void RadioButton::drawBox(gcn::Graphics* graphics)
{
- if (config.getFloatValue("guialpha") != mAlpha)
+ if (config.guiAlpha != mAlpha)
{
- mAlpha = config.getFloatValue("guialpha");
+ mAlpha = config.guiAlpha;
radioNormal->setAlpha(mAlpha);
radioChecked->setAlpha(mAlpha);
radioDisabled->setAlpha(mAlpha);
diff --git a/src/gui/widgets/resizegrip.cpp b/src/gui/widgets/resizegrip.cpp
index 1770fcb1..dd29a977 100644
--- a/src/gui/widgets/resizegrip.cpp
+++ b/src/gui/widgets/resizegrip.cpp
@@ -58,9 +58,9 @@ ResizeGrip::~ResizeGrip()
void ResizeGrip::draw(gcn::Graphics *graphics)
{
- if (config.getFloatValue("guialpha") != mAlpha)
+ if (config.guiAlpha != mAlpha)
{
- mAlpha = config.getFloatValue("guialpha");
+ mAlpha = config.guiAlpha;
gripImage->setAlpha(mAlpha);
}
diff --git a/src/gui/widgets/scrollarea.cpp b/src/gui/widgets/scrollarea.cpp
index 8e16b5b3..225a231d 100644
--- a/src/gui/widgets/scrollarea.cpp
+++ b/src/gui/widgets/scrollarea.cpp
@@ -100,7 +100,7 @@ void ScrollArea::init()
a++;
}
}
- background.setAlpha(config.getFloatValue("guialpha"));
+ background.setAlpha(config.guiAlpha);
textbox->decRef();
@@ -128,8 +128,8 @@ void ScrollArea::init()
}
}
- vMarker.setAlpha(config.getFloatValue("guialpha"));
- vMarkerHi.setAlpha(config.getFloatValue("guialpha"));
+ vMarker.setAlpha(config.guiAlpha);
+ vMarkerHi.setAlpha(config.guiAlpha);
vscroll->decRef();
vscrollHi->decRef();
@@ -203,8 +203,8 @@ void ScrollArea::logic()
void ScrollArea::updateAlpha()
{
- float alpha = std::max(config.getFloatValue("guialpha"),
- Theme::instance()->getMinimumOpacity());
+ float alpha = std::max(config.guiAlpha,
+ Theme::instance()->getMinimumOpacity());
if (alpha != mAlpha)
{
diff --git a/src/gui/widgets/shoplistbox.cpp b/src/gui/widgets/shoplistbox.cpp
index d0c79af2..31c733a6 100644
--- a/src/gui/widgets/shoplistbox.cpp
+++ b/src/gui/widgets/shoplistbox.cpp
@@ -36,8 +36,6 @@
#include <guichan/font.hpp>
#include <guichan/listmodel.hpp>
-float ShopListBox::mAlpha = 1.0;
-
ShopListBox::ShopListBox(gcn::ListModel *listModel):
ListBox(listModel)
{
@@ -72,10 +70,7 @@ void ShopListBox::draw(gcn::Graphics *gcnGraphics)
if (!mListModel)
return;
- if (config.getFloatValue("guialpha") != mAlpha)
- mAlpha = config.getFloatValue("guialpha");
-
- const int alpha = (int)(mAlpha * 255.0f);
+ const int alpha = (int)(config.guiAlpha * 255.0f);
const gcn::Color &highlightColor =
Theme::getThemeColor(Theme::HIGHLIGHT, alpha);
const gcn::Color &backgroundColor =
diff --git a/src/gui/widgets/shoplistbox.h b/src/gui/widgets/shoplistbox.h
index b5718ed3..4dbd756b 100644
--- a/src/gui/widgets/shoplistbox.h
+++ b/src/gui/widgets/shoplistbox.h
@@ -95,8 +95,6 @@ class ShopListBox : public ListBox
unsigned int mRowHeight; /**< Row Height */
- static float mAlpha;
-
bool mPriceCheck;
};
diff --git a/src/gui/widgets/slider.cpp b/src/gui/widgets/slider.cpp
index fd21becf..a7ba37e8 100644
--- a/src/gui/widgets/slider.cpp
+++ b/src/gui/widgets/slider.cpp
@@ -123,7 +123,7 @@ void Slider::init()
void Slider::updateAlpha()
{
- float alpha = std::max(config.getFloatValue("guialpha"),
+ float alpha = std::max(config.guiAlpha,
Theme::instance()->getMinimumOpacity());
if (alpha != mAlpha)
diff --git a/src/gui/widgets/tab.cpp b/src/gui/widgets/tab.cpp
index 08acd245..64f49eac 100644
--- a/src/gui/widgets/tab.cpp
+++ b/src/gui/widgets/tab.cpp
@@ -114,7 +114,7 @@ void Tab::init()
void Tab::updateAlpha()
{
- float alpha = std::max(config.getFloatValue("guialpha"),
+ float alpha = std::max(config.guiAlpha,
Theme::instance()->getMinimumOpacity());
// TODO We don't need to do this for every tab on every draw
diff --git a/src/gui/widgets/table.cpp b/src/gui/widgets/table.cpp
index a74fc09e..905bb166 100644
--- a/src/gui/widgets/table.cpp
+++ b/src/gui/widgets/table.cpp
@@ -269,8 +269,8 @@ void GuiTable::draw(gcn::Graphics* graphics)
if (!mModel)
return;
- if (config.getFloatValue("guialpha") != mAlpha)
- mAlpha = config.getFloatValue("guialpha");
+ if (config.guiAlpha != mAlpha)
+ mAlpha = config.guiAlpha;
if (mOpaque)
{
diff --git a/src/gui/widgets/textfield.cpp b/src/gui/widgets/textfield.cpp
index 3e1665d3..dd0adecd 100644
--- a/src/gui/widgets/textfield.cpp
+++ b/src/gui/widgets/textfield.cpp
@@ -69,7 +69,7 @@ TextField::TextField(const std::string &text, bool loseFocusOnTab):
a++;
}
}
- skin.setAlpha(config.getFloatValue("guialpha"));
+ skin.setAlpha(config.guiAlpha);
textbox->decRef();
}
@@ -87,7 +87,7 @@ TextField::~TextField()
void TextField::updateAlpha()
{
- float alpha = std::max(config.getFloatValue("guialpha"),
+ float alpha = std::max(config.guiAlpha,
Theme::instance()->getMinimumOpacity());
if (alpha != mAlpha)
diff --git a/src/gui/widgets/textpreview.cpp b/src/gui/widgets/textpreview.cpp
index 8b2c3a75..f9e85052 100644
--- a/src/gui/widgets/textpreview.cpp
+++ b/src/gui/widgets/textpreview.cpp
@@ -41,8 +41,8 @@ TextPreview::TextPreview(const std::string &text):
void TextPreview::draw(gcn::Graphics* graphics)
{
- if (config.getFloatValue("guialpha") != mAlpha)
- mAlpha = config.getFloatValue("guialpha");
+ if (config.guiAlpha != mAlpha)
+ mAlpha = config.guiAlpha;
int alpha = (int) (mAlpha * 255.0f);
diff --git a/src/gui/widgets/window.cpp b/src/gui/widgets/window.cpp
index 050e31da..8bf9d081 100644
--- a/src/gui/widgets/window.cpp
+++ b/src/gui/widgets/window.cpp
@@ -37,6 +37,9 @@
#include <guichan/exception.hpp>
#include <guichan/focushandler.hpp>
+#include <algorithm>
+#include <cassert>
+
int Window::instances = 0;
int Window::mouseResize = 0;
@@ -503,33 +506,29 @@ void Window::mouseDragged(gcn::MouseEvent &event)
void Window::loadWindowState()
{
- const std::string &name = mWindowName;
- assert(!name.empty());
+ assert(!mWindowName.empty());
+
+ constexpr WindowState defaultState;
+ auto s = config.windows.find(mWindowName);
+ const WindowState state = s == config.windows.end() ? defaultState
+ : s->second;
- setPosition((int) config.getValue(name + "WinX", mDefaultX),
- (int) config.getValue(name + "WinY", mDefaultY));
+ setPosition(state.x.value_or(mDefaultX),
+ state.y.value_or(mDefaultY));
if (mSaveVisible)
- setVisible((bool) config.getValue(name + "Visible", mDefaultVisible));
+ setVisible(state.visible.value_or(mDefaultVisible));
if (mStickyButton)
- setSticky((bool) config.getValue(name + "Sticky", isSticky()));
+ setSticky(state.sticky.value_or(isSticky()));
if (mGrip)
{
- int width = (int) config.getValue(name + "WinWidth", mDefaultWidth);
- int height = (int) config.getValue(name + "WinHeight", mDefaultHeight);
-
- if (getMinWidth() > width)
- width = getMinWidth();
- else if (getMaxWidth() < width)
- width = getMaxWidth();
- if (getMinHeight() > height)
- height = getMinHeight();
- else if (getMaxHeight() < height)
- height = getMaxHeight();
-
- setSize(width, height);
+ const int width = state.width.value_or(mDefaultWidth);
+ const int height = state.height.value_or(mDefaultHeight);
+
+ setSize(std::clamp(width, getMinWidth(), getMaxWidth()),
+ std::clamp(height, getMinHeight(), getMaxHeight()));
}
else
{
@@ -540,35 +539,29 @@ void Window::loadWindowState()
ensureOnScreen();
}
-void Window::saveWindowState()
+void Window::saveWindowState() const
{
// Saving X, Y and Width and Height for resizables in the config
- if (!mWindowName.empty() && mWindowName != "window")
- {
- config.setValue(mWindowName + "WinX", getX());
- config.setValue(mWindowName + "WinY", getY());
+ if (mWindowName.empty())
+ return;
- if (mSaveVisible)
- config.setValue(mWindowName + "Visible", isVisible());
+ WindowState state;
+ state.x = getX();
+ state.y = getY();
- if (mStickyButton)
- config.setValue(mWindowName + "Sticky", isSticky());
+ if (mSaveVisible)
+ state.visible = isVisible();
- if (mGrip)
- {
- if (getMinWidth() > getWidth())
- setWidth(getMinWidth());
- else if (getMaxWidth() < getWidth())
- setWidth(getMaxWidth());
- if (getMinHeight() > getHeight())
- setHeight(getMinHeight());
- else if (getMaxHeight() < getHeight())
- setHeight(getMaxHeight());
-
- config.setValue(mWindowName + "WinWidth", getWidth());
- config.setValue(mWindowName + "WinHeight", getHeight());
- }
+ if (mStickyButton)
+ state.sticky = isSticky();
+
+ if (mGrip)
+ {
+ state.width = getWidth();
+ state.height = getHeight();
}
+
+ config.windows[mWindowName] = state;
}
void Window::setDefaultSize(int defaultX, int defaultY,
@@ -701,7 +694,7 @@ int Window::getResizeHandles(gcn::MouseEvent &event)
int Window::getGuiAlpha()
{
- float alpha = std::max(config.getFloatValue("guialpha"),
+ float alpha = std::max(config.guiAlpha,
Theme::instance()->getMinimumOpacity());
return (int) (alpha * 255.0f);
}
diff --git a/src/gui/widgets/window.h b/src/gui/widgets/window.h
index 975de335..bf6f363c 100644
--- a/src/gui/widgets/window.h
+++ b/src/gui/widgets/window.h
@@ -264,7 +264,7 @@ class Window : public gcn::Window, gcn::WidgetListener
* Saves the window state so that when the window is reloaded, it'll
* maintain its previous state and location.
*/
- void saveWindowState();
+ void saveWindowState() const;
/**
* Set the default win pos and size.
@@ -380,7 +380,7 @@ class Window : public gcn::Window, gcn::WidgetListener
ResizeGrip *mGrip = nullptr; /**< Resize grip */
Window *mParent; /**< The parent window */
Layout *mLayout = nullptr; /**< Layout handler */
- std::string mWindowName = "window"; /**< Name of the window */
+ std::string mWindowName; /**< Name of the window */
bool mShowTitle = true; /**< Window has a title bar */
bool mModal; /**< Window is modal */
bool mCloseButton = false; /**< Window has a close button */