summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/CMakeLists.txt1
-rw-r--r--src/Makefile.am1
-rw-r--r--src/gui/widgets/serverslistbox.h141
-rw-r--r--src/gui/windows/serverdialog.cpp97
4 files changed, 144 insertions, 96 deletions
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 <http://www.gnu.org/licenses/>.
+ */
+
+#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<ServersListModel *const>(mListModel);
+
+ updateAlpha();
+
+ mHighlightColor.a = static_cast<int>(mAlpha * 255.0F);
+ graphics->setColor(mHighlightColor);
+
+ const int height = getRowHeight();
+ mNotSupportedColor.a = static_cast<int>(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<ServersListModel *const>(
- mListModel);
-
- updateAlpha();
-
- mHighlightColor.a = static_cast<int>(mAlpha * 255.0F);
- graphics->setColor(mHighlightColor);
-
- const int height = getRowHeight();
- mNotSupportedColor.a = static_cast<int>(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