From acba95ebb0119e7b0f9ef01d9bf3577582857253 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Tue, 13 Feb 2018 01:54:28 +0300 Subject: Add clan window. For now can be opened only by chat command /clan. --- src/gui/windows/clanwindow.cpp | 163 +++++++++++++++++++++++++++++++++++++++++ src/gui/windows/clanwindow.h | 77 +++++++++++++++++++ 2 files changed, 240 insertions(+) create mode 100644 src/gui/windows/clanwindow.cpp create mode 100644 src/gui/windows/clanwindow.h (limited to 'src/gui/windows') diff --git a/src/gui/windows/clanwindow.cpp b/src/gui/windows/clanwindow.cpp new file mode 100644 index 000000000..9d08e5914 --- /dev/null +++ b/src/gui/windows/clanwindow.cpp @@ -0,0 +1,163 @@ +/* + * The ManaPlus Client + * Copyright (C) 2011-2018 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/windows/clanwindow.h" + +#include "being/localclan.h" +#include "being/localplayer.h" + +#include "gui/windows/setupwindow.h" + +#include "gui/widgets/createwidget.h" +#include "gui/widgets/tabbedarea.h" + +#include "gui/widgets/tabs/clanwindowtabs.h" + +#include "utils/delete2.h" +#include "utils/gettext.h" + +#include "debug.h" + +ClanWindow *clanWindow = nullptr; + +ClanWindow::ClanWindow() : + // TRANSLATORS: clan window name + Window(_("Clan"), Modal_false, nullptr, "clan.xml"), + mTabs(CREATEWIDGETR(TabbedArea, this)), + mInfoWidget(new InfoClanTab(this)), + mStatsWidget(new StatsClanTab(this)), + mAllyWidget(new RelationClanTab(this)), + mAntagonistWidget(new RelationClanTab(this)) +{ + setWindowName("clan"); + if (setupWindow != nullptr) + setupWindow->registerWindowForReset(this); + + setResizable(true); + setCloseButton(true); + setSaveVisible(true); + setStickyButtonLock(true); + + setDefaultSize(400, 300, ImagePosition::CENTER, 0, 0); + + mTabs->setSelectable(false); + mTabs->getWidgetContainer()->setSelectable(false); + mTabs->getTabContainer()->setSelectable(false); + // TRANSLATORS: clan window tab + mTabs->addTab(std::string(_("Info")), mInfoWidget); + // TRANSLATORS: clan window tab + mTabs->addTab(std::string(_("Stats")), mStatsWidget); + // TRANSLATORS: clan window tab + mTabs->addTab(std::string(_("Ally")), mAllyWidget); + // TRANSLATORS: clan window tab + mTabs->addTab(std::string(_("Antagonist")), mAntagonistWidget); + + mTabs->setDimension(Rect(0, 0, 600, 300)); + + const int w = mDimension.width; + const int h = mDimension.height; + mInfoWidget->setDimension(Rect(0, 0, w, h)); + mStatsWidget->setDimension(Rect(0, 0, w, h)); + mAllyWidget->setDimension(Rect(0, 0, w, h)); + mAntagonistWidget->setDimension(Rect(0, 0, w, h)); + loadWindowState(); + enableVisibleSound(true); + resetClan(); +} + +ClanWindow::~ClanWindow() +{ + delete2(mInfoWidget); + delete2(mStatsWidget); + delete2(mAllyWidget); + delete2(mAntagonistWidget); +} + +void ClanWindow::postInit() +{ + Window::postInit(); + add(mTabs); +} + +void ClanWindow::slowLogic() +{ + BLOCK_START("ClanWindow::slowLogic") + if (!isWindowVisible() || (mTabs == nullptr)) + { + BLOCK_END("ClanWindow::slowLogic") + return; + } + + switch (mTabs->getSelectedTabIndex()) + { + default: + case 0: + mInfoWidget->logic(); + break; + case 1: + mStatsWidget->logic(); + break; + case 2: + mAllyWidget->logic(); + break; + case 3: + mAntagonistWidget->logic(); + break; + } + + BLOCK_END("ClanWindow::slowLogic") +} + +void ClanWindow::widgetResized(const Event &event) +{ + Window::widgetResized(event); + + mTabs->setDimension(Rect(0, 0, + mDimension.width, mDimension.height)); +} + +void ClanWindow::updateClan() +{ + mInfoWidget->updateClan(); + mStatsWidget->updateClan(); + mAllyWidget->updateClan(localClan.allyClans); + mAntagonistWidget->updateClan(localClan.antagonistClans); +} + +void ClanWindow::resetClan() +{ + mInfoWidget->resetClan(); + mStatsWidget->resetClan(); + mAllyWidget->resetClan(); + mAntagonistWidget->resetClan(); +} + +void ClanWindow::updateClanMembers() +{ +} + +#ifdef USE_PROFILER +void ClanWindow::logicChildren() +{ + BLOCK_START("ClanWindow::logicChildren") + BasicContainer::logicChildren(); + BLOCK_END("ClanWindow::logicChildren") +} +#endif // USE_PROFILER diff --git a/src/gui/windows/clanwindow.h b/src/gui/windows/clanwindow.h new file mode 100644 index 000000000..5251d9b32 --- /dev/null +++ b/src/gui/windows/clanwindow.h @@ -0,0 +1,77 @@ +/* + * The ManaPlus Client + * Copyright (C) 2011-2018 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_WINDOWS_CLANWINDOW_H +#define GUI_WINDOWS_CLANWINDOW_H + +#include "gui/widgets/window.h" + +class InfoClanTab; +class RelationClanTab; +class StatsClanTab; +class TabbedArea; + +/** + * The clan window. + * + * \ingroup Interface + */ +class ClanWindow final : public Window +{ + public: + /** + * Constructor. + */ + ClanWindow(); + + A_DELETE_COPY(ClanWindow) + + ~ClanWindow() override final; + + void postInit() override final; + + /** + * Logic (updates components' size and infos) + */ + void slowLogic(); + + void widgetResized(const Event &event) override final; + + void resetClan(); + + void updateClan(); + + void updateClanMembers(); + +#ifdef USE_PROFILER + void logicChildren(); +#endif // USE_PROFILER + + private: + TabbedArea *mTabs A_NONNULLPOINTER; + InfoClanTab *mInfoWidget A_NONNULLPOINTER; + StatsClanTab *mStatsWidget A_NONNULLPOINTER; + RelationClanTab *mAllyWidget A_NONNULLPOINTER; + RelationClanTab *mAntagonistWidget A_NONNULLPOINTER; +}; + +extern ClanWindow *clanWindow; + +#endif // GUI_WINDOWS_CLANWINDOW_H -- cgit v1.2.3-60-g2f50