From 789f341f70591f71bf47db151b451fc4d782095a Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Fri, 16 May 2014 19:43:52 +0300 Subject: Move serverslisbox into separate file. --- src/CMakeLists.txt | 1 + src/Makefile.am | 1 + src/gui/widgets/serverslistbox.h | 141 +++++++++++++++++++++++++++++++++++++++ src/gui/windows/serverdialog.cpp | 97 +-------------------------- 4 files changed, 144 insertions(+), 96 deletions(-) create mode 100644 src/gui/widgets/serverslistbox.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 76a870599..d717231a1 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -229,6 +229,7 @@ SET(SRCS gui/widgets/radiogroup.h gui/widgets/scrollarea.cpp gui/widgets/scrollarea.h + gui/widgets/serverslistbox.h gui/widgets/setupitem.cpp gui/widgets/setupitem.h gui/widgets/tabs/setuptab.cpp diff --git a/src/Makefile.am b/src/Makefile.am index 3c73374e0..7cfff346e 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -327,6 +327,7 @@ manaplus_SOURCES += gui/widgets/avatarlistbox.cpp \ gui/widgets/radiogroup.h \ gui/widgets/scrollarea.cpp \ gui/widgets/scrollarea.h \ + gui/widgets/serverslistbox.h \ gui/widgets/setupitem.cpp \ gui/widgets/setupitem.h \ gui/widgets/tabs/setuptab.cpp \ diff --git a/src/gui/widgets/serverslistbox.h b/src/gui/widgets/serverslistbox.h new file mode 100644 index 000000000..83fab9879 --- /dev/null +++ b/src/gui/widgets/serverslistbox.h @@ -0,0 +1,141 @@ +/* + * The ManaPlus Client + * Copyright (C) 2004-2009 The Mana World Development Team + * Copyright (C) 2009-2010 The Mana Developers + * 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_SERVERSLISTBOX_H +#define GUI_WIDGETS_SERVERSLISTBOX_H + +#include "gui/font.h" + +#include "gui/models/serverslistmodel.h" + +#include "localconsts.h" + +class ServersListBox final : public ListBox +{ + public: + ServersListBox(const Widget2 *const widget, + ServersListModel *const model) : + ListBox(widget, model, "serverslistbox.xml"), + mNotSupportedColor(getThemeColor( + Theme::SERVER_VERSION_NOT_SUPPORTED)), + mNotSupportedColor2(getThemeColor( + Theme::SERVER_VERSION_NOT_SUPPORTED_OUTLINE)) + { + mHighlightColor = getThemeColor(Theme::HIGHLIGHT); + } + + void draw(Graphics *graphics) override final + { + if (!mListModel) + return; + + ServersListModel *const model + = static_cast(mListModel); + + updateAlpha(); + + mHighlightColor.a = static_cast(mAlpha * 255.0F); + graphics->setColor(mHighlightColor); + + const int height = getRowHeight(); + mNotSupportedColor.a = static_cast(mAlpha * 255.0F); + + // Draw filled rectangle around the selected list element + if (mSelected >= 0) + { + graphics->fillRectangle(Rect(mPadding, + height * mSelected + mPadding, + getWidth() - 2 * mPadding, + height)); + } + + Font *const font1 = boldFont; + Font *const font2 = getFont(); + const int fontHeight = font1->getHeight(); + const int pad1 = fontHeight + mPadding; + const int pad2 = height / 4 + mPadding; + const int width = getWidth(); + // Draw the list elements + for (int i = 0, y = 0; i < model->getNumberOfElements(); + ++i, y += height) + { + const ServerInfo &info = model->getServer(i); + + if (mSelected == i) + { + graphics->setColorAll(mForegroundSelectedColor, + mForegroundSelectedColor2); + } + else + { + graphics->setColorAll(mForegroundColor, mForegroundColor2); + } + + int top; + int x = mPadding; + + if (!info.name.empty()) + { + x += font1->getWidth(info.name) + 15; + font1->drawString(graphics, + info.name, + mPadding, + y + mPadding); + top = y + pad1; + } + else + { + top = y + pad2; + } + + if (!info.description.empty()) + { + font2->drawString(graphics, + info.description, + x, + y + mPadding); + } + font2->drawString(graphics, + model->getElementAt(i), + mPadding, + top); + + if (info.version.first > 0) + { + graphics->setColorAll(mNotSupportedColor, + mNotSupportedColor2); + font2->drawString(graphics, info.version.second, + width - info.version.first - mPadding, top); + } + } + } + + unsigned int getRowHeight() const override final + { + return 2 * getFont()->getHeight() + 5; + } + private: + Color mNotSupportedColor; + Color mNotSupportedColor2; +}; + +#endif // GUI_WIDGETS_SERVERSLISTBOX_H diff --git a/src/gui/windows/serverdialog.cpp b/src/gui/windows/serverdialog.cpp index 547d3ba81..f63a3d5ba 100644 --- a/src/gui/windows/serverdialog.cpp +++ b/src/gui/windows/serverdialog.cpp @@ -44,6 +44,7 @@ #include "gui/widgets/label.h" #include "gui/widgets/layout.h" #include "gui/widgets/listbox.h" +#include "gui/widgets/serverslistbox.h" #include "gui/widgets/scrollarea.h" #include "utils/delete2.h" @@ -90,102 +91,6 @@ static uint16_t defaultPortForServerType(const ServerInfo::Type type) } } -class ServersListBox final : public ListBox -{ -public: - ServersListBox(const Widget2 *const widget, - ServersListModel *const model) : - ListBox(widget, model, "serverslistbox.xml"), - mNotSupportedColor(getThemeColor(Theme::SERVER_VERSION_NOT_SUPPORTED)), - mNotSupportedColor2(getThemeColor( - Theme::SERVER_VERSION_NOT_SUPPORTED_OUTLINE)) - { - mHighlightColor = getThemeColor(Theme::HIGHLIGHT); - } - - void draw(Graphics *graphics) override final - { - if (!mListModel) - return; - - ServersListModel *const model = static_cast( - mListModel); - - updateAlpha(); - - mHighlightColor.a = static_cast(mAlpha * 255.0F); - graphics->setColor(mHighlightColor); - - const int height = getRowHeight(); - mNotSupportedColor.a = static_cast(mAlpha * 255.0F); - - // Draw filled rectangle around the selected list element - if (mSelected >= 0) - { - graphics->fillRectangle(Rect(mPadding, - height * mSelected + mPadding, getWidth() - 2 * mPadding, - height)); - } - - Font *const font1 = boldFont; - Font *const font2 = getFont(); - const int fontHeight = font1->getHeight(); - const int pad1 = fontHeight + mPadding; - const int pad2 = height / 4 + mPadding; - const int width = getWidth(); - // Draw the list elements - for (int i = 0, y = 0; i < model->getNumberOfElements(); - ++i, y += height) - { - const ServerInfo &info = model->getServer(i); - - if (mSelected == i) - { - graphics->setColorAll(mForegroundSelectedColor, - mForegroundSelectedColor2); - } - else - { - graphics->setColorAll(mForegroundColor, mForegroundColor2); - } - - int top; - int x = mPadding; - - if (!info.name.empty()) - { - x += font1->getWidth(info.name) + 15; - font1->drawString(graphics, info.name, mPadding, y + mPadding); - top = y + pad1; - } - else - { - top = y + pad2; - } - - if (!info.description.empty()) - font2->drawString(graphics, info.description, x, y + mPadding); - font2->drawString(graphics, model->getElementAt(i), mPadding, top); - - if (info.version.first > 0) - { - graphics->setColorAll(mNotSupportedColor, mNotSupportedColor2); - font2->drawString(graphics, info.version.second, - width - info.version.first - mPadding, top); - } - } - } - - unsigned int getRowHeight() const override final - { - return 2 * getFont()->getHeight() + 5; - } -private: - Color mNotSupportedColor; - Color mNotSupportedColor2; -}; - - ServerDialog::ServerDialog(ServerInfo *const serverInfo, const std::string &dir) : // TRANSLATORS: servers dialog name -- cgit v1.2.3-60-g2f50