summaryrefslogtreecommitdiff
path: root/src/gui/widgets
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/widgets')
-rw-r--r--src/gui/widgets/serverslistbox.h141
1 files changed, 141 insertions, 0 deletions
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