aboutsummaryrefslogtreecommitdiff
path: root/gui/ListWidget.cpp
diff options
context:
space:
mode:
authorMax Horn2002-07-10 22:49:41 +0000
committerMax Horn2002-07-10 22:49:41 +0000
commitc60670d561b0ad8106cd54adf163a0c39412575e (patch)
tree63cf3e40942ca6e8f8bc61649abc5beb286fb657 /gui/ListWidget.cpp
parent9b3784ef6dcb26e4864844cc626e472ae49393b2 (diff)
downloadscummvm-rg350-c60670d561b0ad8106cd54adf163a0c39412575e.tar.gz
scummvm-rg350-c60670d561b0ad8106cd54adf163a0c39412575e.tar.bz2
scummvm-rg350-c60670d561b0ad8106cd54adf163a0c39412575e.zip
added prototype ListWidget (doesn't do anything yet, only serves to demo how it might look); renamed various NewGui methods and added frameRect method; made NewGui use our 'own' GUI colors (no worries if you don't like them, this is just an experiment); StaticTextWidget now clones its label (preventing problems when a game was loaded, thus invalidating string locations in memory)
svn-id: r4513
Diffstat (limited to 'gui/ListWidget.cpp')
-rw-r--r--gui/ListWidget.cpp125
1 files changed, 125 insertions, 0 deletions
diff --git a/gui/ListWidget.cpp b/gui/ListWidget.cpp
new file mode 100644
index 0000000000..ea2a95ad7c
--- /dev/null
+++ b/gui/ListWidget.cpp
@@ -0,0 +1,125 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2002 The ScummVM project
+ *
+ * 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 (at your option) 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * $Header$
+ */
+
+#include "stdafx.h"
+#include "ListWidget.h"
+#include "dialog.h"
+#include "newgui.h"
+
+
+/*
+ * Some thoughts:
+ * - We should split out the scrollbar into a seperate widget. This will
+ * simplify the drawing & mouse handling considerably, but also requires
+ * us to come up with a way to couple both widgets (shouldn't be to hard)
+ * - Write a class to encapsulate the data instead of using std::list<string>.
+ * How exactly this will look and what it does has yet to be determined.
+ * - The handleKey method of widgets is currently never called, code for that has
+ * to be added to dialog.cpp
+ * - ...
+ */
+
+
+// Height of one entry
+#define LINE_HEIGHT 10
+
+
+// Up/down arrow for the scrollbar
+static uint32 up_arrow[8] = {
+ 0x00000000,
+ 0x00000000,
+ 0x00001000,
+ 0x00001000,
+ 0x00011100,
+ 0x00011100,
+ 0x00110110,
+ 0x00100010,
+};
+
+static uint32 down_arrow[8] = {
+ 0x00000000,
+ 0x00000000,
+ 0x00100010,
+ 0x00110110,
+ 0x00011100,
+ 0x00011100,
+ 0x00001000,
+ 0x00001000,
+};
+
+ListWidget::ListWidget(Dialog *boss, int x, int y, int w, int h)
+ : Widget(boss, x, y, w, h)
+{
+ _flags = WIDGET_ENABLED | WIDGET_TRACK_MOUSE | WIDGET_CLEARBG;
+ _type = kListWidget;
+}
+
+ListWidget::~ListWidget()
+{
+}
+
+void ListWidget::handleClick(int button)
+{
+ if (_flags & WIDGET_ENABLED) {
+ }
+}
+
+void ListWidget::handleMouseMoved(int x, int y, int state)
+{
+}
+
+
+void ListWidget::handleKey(char key, int modifiers)
+{
+}
+
+void ListWidget::drawWidget(bool hilite)
+{
+ NewGui *gui = _boss->getGui();
+ int rightX = _x + _w - 1;
+ int leftX = rightX - 8;
+ int bottomY = _y + _h;
+
+ gui->frameRect(leftX, _y, 9, _h, gui->_shadowcolor);
+
+ // Up arrow
+ gui->fillRect(leftX, _y, 9, 10, gui->_bgcolor);
+ gui->frameRect(leftX, _y, 9, 10, gui->_color);
+ gui->drawBitmap(up_arrow, leftX, _y, gui->_textcolor);
+
+ // Down arrow
+ gui->fillRect(leftX, bottomY - 9, 9, 10, gui->_bgcolor);
+ gui->frameRect(leftX, bottomY - 9, 9, 10, gui->_color);
+ gui->drawBitmap(down_arrow, leftX, bottomY - 9, gui->_textcolor);
+
+ // Slider
+ // FIXME - determine slider position and size. This depends on:
+ // * the number of entries/page
+ // * total number of entries
+ // * current scroll position (i.e. idx of "first" visible entry
+ gui->fillRect(leftX, _y+20, 9, 4, gui->_textcolor);
+ gui->frameRect(leftX, _y+20, 9, 4, gui->_color);
+
+ // Now draw the list items
+ // FIXME - this is just a temporary demo hack
+ gui->drawString("1. A simple game", _x+1, _y+1, _w - 10, gui->_textcolor);
+ gui->drawString("2. This space for rent", _x+1, _y+1 + LINE_HEIGHT, _w - 10, gui->_textcolorhi);
+ gui->drawString("3. To be or not to be", _x+1, _y+1 + LINE_HEIGHT*2, _w - 10, gui->_textcolor);
+}