From b3ad7da111d1a21f14de39d84be97104a9666017 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Thu, 9 Jan 2014 13:12:18 +0300 Subject: add mods tab in settings. --- src/gui/widgets/tabs/setup_mods.cpp | 116 ++++++++++++++++++++++++++++++++ src/gui/widgets/tabs/setup_mods.h | 48 +++++++++++++ src/gui/widgets/tabs/setuptabscroll.cpp | 14 ++++ src/gui/widgets/tabs/setuptabscroll.h | 7 ++ 4 files changed, 185 insertions(+) create mode 100644 src/gui/widgets/tabs/setup_mods.cpp create mode 100644 src/gui/widgets/tabs/setup_mods.h (limited to 'src/gui/widgets/tabs') 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 . + */ + +#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 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 &modsList = getAllItems(); + FOR_EACH (std::set::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); +} diff --git a/src/gui/widgets/tabs/setup_mods.h b/src/gui/widgets/tabs/setup_mods.h new file mode 100644 index 000000000..5c837811a --- /dev/null +++ b/src/gui/widgets/tabs/setup_mods.h @@ -0,0 +1,48 @@ +/* + * 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 . + */ + +#ifndef GUI_WIDGETS_TABS_SETUP_MODS_H +#define GUI_WIDGETS_TABS_SETUP_MODS_H + +#include "gui/widgets/tabs/setuptabscroll.h" + +class Setup_Mods final : public SetupTabScroll +{ + public: + explicit Setup_Mods(const Widget2 *const widget); + + A_DELETE_COPY(Setup_Mods) + + ~Setup_Mods(); + + void apply() override final; + + void externalUpdated() override final; + + void loadMods(); + + void saveMods(); + + protected: +}; + +#endif // GUI_WIDGETS_TABS_SETUP_MODS_H diff --git a/src/gui/widgets/tabs/setuptabscroll.cpp b/src/gui/widgets/tabs/setuptabscroll.cpp index f01d691b6..81c191dd6 100644 --- a/src/gui/widgets/tabs/setuptabscroll.cpp +++ b/src/gui/widgets/tabs/setuptabscroll.cpp @@ -45,6 +45,11 @@ SetupTabScroll::~SetupTabScroll() delete mContainer; mContainer = nullptr; + removeItems(); +} + +void SetupTabScroll::removeItems() +{ std::set::iterator it = mAllItems.begin(); const std::set::iterator it_end = mAllItems.end(); while (it != it_end) @@ -53,6 +58,15 @@ SetupTabScroll::~SetupTabScroll() ++ it; } mAllItems.clear(); + + mItems.clear(); +} + +void SetupTabScroll::clear() +{ + removeItems(); + mContainer->removeControls(); + mContainer->clear(); } void SetupTabScroll::addControl(SetupItem *const widget) diff --git a/src/gui/widgets/tabs/setuptabscroll.h b/src/gui/widgets/tabs/setuptabscroll.h index 578fba861..15b493d88 100644 --- a/src/gui/widgets/tabs/setuptabscroll.h +++ b/src/gui/widgets/tabs/setuptabscroll.h @@ -65,7 +65,14 @@ class SetupTabScroll : public SetupTab void reread(const std::string &name); + void clear(); + + const std::set &getAllItems() const + { return mAllItems; } + protected: + void removeItems(); + VertContainer *mContainer; ScrollArea *mScroll; std::map mItems; -- cgit v1.2.3-70-g09d2