summaryrefslogtreecommitdiff
path: root/src/gui/widgets/tabs/setup_mods.cpp
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2014-01-09 13:12:18 +0300
committerAndrei Karas <akaras@inbox.ru>2014-01-09 13:12:18 +0300
commitb3ad7da111d1a21f14de39d84be97104a9666017 (patch)
tree72338ee95de5337acc4e00c6ff6ab8b2fc458d37 /src/gui/widgets/tabs/setup_mods.cpp
parent2e47d5e2897ffd8bcf85b499fe68a20f9f694ebb (diff)
downloadmanaplus-b3ad7da111d1a21f14de39d84be97104a9666017.tar.gz
manaplus-b3ad7da111d1a21f14de39d84be97104a9666017.tar.bz2
manaplus-b3ad7da111d1a21f14de39d84be97104a9666017.tar.xz
manaplus-b3ad7da111d1a21f14de39d84be97104a9666017.zip
add mods tab in settings.
Diffstat (limited to 'src/gui/widgets/tabs/setup_mods.cpp')
-rw-r--r--src/gui/widgets/tabs/setup_mods.cpp116
1 files changed, 116 insertions, 0 deletions
diff --git a/src/gui/widgets/tabs/setup_mods.cpp b/src/gui/widgets/tabs/setup_mods.cpp
new file mode 100644
index 000000000..6857b6700
--- /dev/null
+++ b/src/gui/widgets/tabs/setup_mods.cpp
@@ -0,0 +1,116 @@
+/*
+ * The ManaPlus Client
+ * Copyright (C) 2009 The Mana World Development Team
+ * Copyright (C) 2009-2010 Andrei Karas
+ * Copyright (C) 2011-2014 The ManaPlus Developers
+ *
+ * This file is part of The ManaPlus Client.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "gui/widgets/tabs/setup_mods.h"
+
+#include "configuration.h"
+#include "map.h"
+
+#include "gui/widgets/layouthelper.h"
+#include "gui/widgets/setupitem.h"
+#include "gui/widgets/scrollarea.h"
+
+#include "resources/db/moddb.h"
+
+#include "utils/gettext.h"
+
+#include "debug.h"
+
+Setup_Mods::Setup_Mods(const Widget2 *const widget) :
+ SetupTabScroll(widget)
+{
+ // TRANSLATORS: mods tab in settings
+ setName(_("Mods"));
+
+ LayoutHelper h(this);
+ ContainerPlacer place = h.getPlacer(0, 0);
+ place(0, 0, mScroll, 10, 10);
+
+
+ setDimension(gcn::Rectangle(0, 0, 550, 350));
+}
+
+Setup_Mods::~Setup_Mods()
+{
+}
+
+void Setup_Mods::apply()
+{
+ SetupTabScroll::apply();
+ saveMods();
+}
+
+void Setup_Mods::externalUpdated()
+{
+ clear();
+ loadMods();
+}
+
+void Setup_Mods::loadMods()
+{
+ std::string modsString = serverConfig.getValue("mods", "");
+ std::set<std::string> modsList;
+ splitToStringSet(modsList, modsString, '|');
+
+ const ModInfos &mods = ModDB::getAll();
+ FOR_EACH (ModInfoCIterator, it, mods)
+ {
+ const ModInfo *const info = (*it).second;
+ if (!info)
+ continue;
+
+ std::string name = info->getName();
+ replaceAll(name, "|", "");
+ SetupItem *const item = new SetupItemCheckBox(
+ info->getDescription(), "", "", this, name);
+ if (modsList.find(name) != modsList.end())
+ item->setValue("1");
+ else
+ item->setValue("0");
+ item->toWidget();
+ }
+}
+
+void Setup_Mods::saveMods()
+{
+ const ModInfos &mods = ModDB::getAll();
+ if (mods.empty())
+ return;
+
+ std::string modsString;
+ const std::set<SetupItem*> &modsList = getAllItems();
+ FOR_EACH (std::set<SetupItem*>::const_iterator, it, modsList)
+ {
+ const SetupItem *const item = *it;
+ if (!item)
+ continue;
+ const std::string val = item->getValue();
+ if (val == "1")
+ {
+ const std::string key = item->getEventName();
+ if (!modsString.empty())
+ modsString.append("|");
+ modsString.append(key);
+ }
+ }
+ serverConfig.setValue("mods", modsString);
+}