aboutsummaryrefslogtreecommitdiff
path: root/backends/platform/wince/CEgui
diff options
context:
space:
mode:
authorKostas Nakos2006-07-01 08:13:46 +0000
committerKostas Nakos2006-07-01 08:13:46 +0000
commit6a8749ace05649fdf69593c76a75c322f34a5bfa (patch)
treeda214254c9ca56ded22af377fe0763ad73dd7bb5 /backends/platform/wince/CEgui
parent294dcea3ef063ee4ec95f3f418af4534445da1c6 (diff)
downloadscummvm-rg350-6a8749ace05649fdf69593c76a75c322f34a5bfa.tar.gz
scummvm-rg350-6a8749ace05649fdf69593c76a75c322f34a5bfa.tar.bz2
scummvm-rg350-6a8749ace05649fdf69593c76a75c322f34a5bfa.zip
move ce port to its new home
svn-id: r23366
Diffstat (limited to 'backends/platform/wince/CEgui')
-rw-r--r--backends/platform/wince/CEgui/CEGUI.h27
-rw-r--r--backends/platform/wince/CEgui/GUIElement.cpp125
-rw-r--r--backends/platform/wince/CEgui/GUIElement.h65
-rw-r--r--backends/platform/wince/CEgui/ItemAction.cpp48
-rw-r--r--backends/platform/wince/CEgui/ItemAction.h44
-rw-r--r--backends/platform/wince/CEgui/ItemSwitch.cpp93
-rw-r--r--backends/platform/wince/CEgui/ItemSwitch.h53
-rw-r--r--backends/platform/wince/CEgui/Panel.cpp83
-rw-r--r--backends/platform/wince/CEgui/Panel.h60
-rw-r--r--backends/platform/wince/CEgui/PanelItem.cpp45
-rw-r--r--backends/platform/wince/CEgui/PanelItem.h48
-rw-r--r--backends/platform/wince/CEgui/PanelKeyboard.cpp88
-rw-r--r--backends/platform/wince/CEgui/PanelKeyboard.h48
-rw-r--r--backends/platform/wince/CEgui/SDL_ImageResource.cpp83
-rw-r--r--backends/platform/wince/CEgui/SDL_ImageResource.h46
-rw-r--r--backends/platform/wince/CEgui/Toolbar.cpp36
-rw-r--r--backends/platform/wince/CEgui/Toolbar.h49
-rw-r--r--backends/platform/wince/CEgui/ToolbarHandler.cpp125
-rw-r--r--backends/platform/wince/CEgui/ToolbarHandler.h65
19 files changed, 1231 insertions, 0 deletions
diff --git a/backends/platform/wince/CEgui/CEGUI.h b/backends/platform/wince/CEgui/CEGUI.h
new file mode 100644
index 0000000000..1b5d5197f2
--- /dev/null
+++ b/backends/platform/wince/CEgui/CEGUI.h
@@ -0,0 +1,27 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001-2006 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ *
+ */
+
+#include "ToolbarHandler.h"
+#include "Panel.h"
+#include "ItemSwitch.h"
+#include "PanelKeyboard.h"
+
diff --git a/backends/platform/wince/CEgui/GUIElement.cpp b/backends/platform/wince/CEgui/GUIElement.cpp
new file mode 100644
index 0000000000..520c17e11d
--- /dev/null
+++ b/backends/platform/wince/CEgui/GUIElement.cpp
@@ -0,0 +1,125 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001-2006 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ *
+ */
+
+#include "common/stdafx.h"
+#include "Toolbar.h"
+
+#include "SDL_ImageResource.h"
+
+namespace CEGUI {
+
+ GUIElement::GUIElement(int x, int y, int width, int height) :
+ _background(0), _drawn(false), _visible(true), _x(x), _y(y), _width(width), _height(height)
+ {
+ }
+
+ bool GUIElement::setBackground(WORD backgroundReference) {
+ _background = new SDL_ImageResource();
+ if (!_background->load(backgroundReference)) {
+ delete _background;
+ _background = NULL;
+ return false;
+ }
+ if (!_height && !_width) {
+ _height = _background->height();
+ _width = _background->width();
+ }
+ else
+ if (_background->height() != _height || _background->width() != _width) {
+ delete _background;
+ _background = NULL;
+ return false;
+ }
+ return true;
+ }
+
+ void GUIElement::move(int x, int y) {
+ _x = x;
+ _y = y;
+ }
+
+ bool GUIElement::draw(SDL_Surface *surface) {
+ if (_background && !_drawn && _visible) {
+ SDL_Rect rect;
+
+ rect.x = _x;
+ rect.y = _y;
+ rect.w = _width;
+ rect.h = _height;
+
+ SDL_BlitSurface(_background->get(), NULL, surface, &rect);
+
+ _drawn = true;
+
+ return true;
+ }
+ else
+ return false;
+ }
+
+ bool GUIElement::checkInside(int x, int y) {
+ if (x >= _x && x <= _x + _width && y >= _y && y <= _y + _height)
+ return true;
+ else
+ return false;
+ }
+
+ void GUIElement::setVisible(bool visibility) {
+ if (visibility && !_visible)
+ _drawn = false;
+ _visible = visibility;
+ }
+
+ bool GUIElement::visible() {
+ return _visible;
+ }
+
+ void GUIElement::forceRedraw() {
+ _drawn = false;
+ }
+
+ bool GUIElement::drawn() {
+ return _drawn;
+ }
+
+ int GUIElement::x() {
+ return _x;
+ }
+
+ int GUIElement::y() {
+ return _y;
+ }
+
+ int GUIElement::width() {
+ return _width;
+ }
+
+ int GUIElement::height() {
+ return _height;
+ }
+
+ GUIElement::~GUIElement() {
+ if (_background)
+ delete _background;
+ }
+
+}
diff --git a/backends/platform/wince/CEgui/GUIElement.h b/backends/platform/wince/CEgui/GUIElement.h
new file mode 100644
index 0000000000..eef84043b3
--- /dev/null
+++ b/backends/platform/wince/CEgui/GUIElement.h
@@ -0,0 +1,65 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001-2006 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ *
+ */
+
+#ifndef CEGUI_GUIELEMENT
+#define CEGUI_GUIELEMENT
+
+#include "common/stdafx.h"
+#include "common/scummsys.h"
+#include "common/system.h"
+
+#include "SDL.h"
+
+#include "SDL_ImageResource.h"
+
+namespace CEGUI {
+
+ class GUIElement {
+ public:
+ bool setBackground(WORD backgroundReference);
+ void setVisible(bool visibility);
+ virtual void forceRedraw();
+ virtual bool draw(SDL_Surface *surface);
+ virtual ~GUIElement();
+ void move(int x, int y);
+ int width();
+ int height();
+ int x();
+ int y();
+ virtual bool action(int x, int y, bool pushed) = 0;
+ bool visible();
+ bool drawn();
+ protected:
+ GUIElement(int x = 0, int y = 0, int width = 0, int height = 0);
+ bool checkInside(int x, int y);
+ bool _visible;
+ SDL_ImageResource *_background;
+ int _x;
+ int _y;
+ bool _drawn;
+ private:
+ int _width;
+ int _height;
+ };
+}
+
+#endif
diff --git a/backends/platform/wince/CEgui/ItemAction.cpp b/backends/platform/wince/CEgui/ItemAction.cpp
new file mode 100644
index 0000000000..9bc9db65bb
--- /dev/null
+++ b/backends/platform/wince/CEgui/ItemAction.cpp
@@ -0,0 +1,48 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001-2006 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ *
+ */
+
+#include "common/stdafx.h"
+#include "ItemAction.h"
+
+namespace CEGUI {
+
+ ItemAction::ItemAction(WORD reference, GUI::ActionType action) :
+ PanelItem(reference) {
+ _action = action;
+ if (!GUI::Actions::Instance()->isEnabled(_action))
+ _visible = false;
+ }
+
+
+ ItemAction::~ItemAction() {
+ }
+
+ bool ItemAction::action(int x, int y, bool pushed) {
+
+ if (checkInside(x, y) && _visible && pushed) {
+ GUI::Actions::Instance()->perform(_action);
+ return true;
+ }
+ else
+ return false;
+ }
+}
diff --git a/backends/platform/wince/CEgui/ItemAction.h b/backends/platform/wince/CEgui/ItemAction.h
new file mode 100644
index 0000000000..97202e14a1
--- /dev/null
+++ b/backends/platform/wince/CEgui/ItemAction.h
@@ -0,0 +1,44 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001-2006 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ *
+ */
+
+#ifndef CEGUI_ITEMACTION
+#define CEGUI_ITEMACTION
+
+#include "common/stdafx.h"
+#include "common/scummsys.h"
+#include "common/system.h"
+
+#include "gui/Actions.h"
+#include "CEgui/PanelItem.h"
+namespace CEGUI {
+
+ class ItemAction : public PanelItem {
+ public:
+ ItemAction(WORD reference, GUI::ActionType action);
+ virtual ~ItemAction();
+ virtual bool action(int x, int y, bool pushed);
+ private:
+ GUI::ActionType _action;
+ };
+}
+
+#endif
diff --git a/backends/platform/wince/CEgui/ItemSwitch.cpp b/backends/platform/wince/CEgui/ItemSwitch.cpp
new file mode 100644
index 0000000000..7498463871
--- /dev/null
+++ b/backends/platform/wince/CEgui/ItemSwitch.cpp
@@ -0,0 +1,93 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001-2006 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ *
+ */
+
+#include "common/stdafx.h"
+#include "ItemSwitch.h"
+
+namespace CEGUI {
+
+ void ItemSwitch::init(WORD referenceTrue, WORD referenceFalse) {
+ _backgroundTrue = _background;
+ _backgroundFalse = new SDL_ImageResource();
+ if (!_backgroundFalse->load(referenceFalse)) {
+ delete _backgroundFalse;
+ delete _background;
+ _background = NULL;
+ _backgroundFalse = NULL;
+ }
+ }
+
+ ItemSwitch::ItemSwitch(WORD referenceTrue, WORD referenceFalse, bool *item) :
+ PanelItem(referenceTrue) {
+ init(referenceTrue, referenceFalse);
+ _item = item;
+ _itemmax = -1;
+ if (!*_item)
+ _background = _backgroundFalse;
+ }
+
+ ItemSwitch::ItemSwitch(WORD referenceTrue, WORD referenceFalse, int *item, int max) :
+ PanelItem(referenceTrue) {
+ init(referenceTrue, referenceFalse);
+ _itemmultiple = item;
+ _itemmax = max;
+ if (!*item)
+ _background = _backgroundFalse;
+ }
+
+ ItemSwitch::~ItemSwitch() {
+ if (_backgroundFalse)
+ delete _backgroundFalse;
+ }
+
+ bool ItemSwitch::action(int x, int y, bool pushed) {
+
+ if (checkInside(x, y) && _visible && pushed) {
+ if (_itemmax <= 0) {
+ *_item = !*_item;
+ if (*_item)
+ _background = _backgroundTrue;
+ else
+ _background = _backgroundFalse;
+
+ if (_panel)
+ _panel->forceRedraw();
+
+ return true;
+ } else {
+ *_itemmultiple = *_itemmultiple + 1;
+ if (*_itemmultiple > _itemmax)
+ *_itemmultiple = 0;
+ if (*_itemmultiple)
+ _background = _backgroundTrue;
+ else
+ _background = _backgroundFalse;
+
+ if (_panel)
+ _panel->forceRedraw();
+
+ return true;
+ }
+ } else
+ return false;
+ }
+}
diff --git a/backends/platform/wince/CEgui/ItemSwitch.h b/backends/platform/wince/CEgui/ItemSwitch.h
new file mode 100644
index 0000000000..60a96c4894
--- /dev/null
+++ b/backends/platform/wince/CEgui/ItemSwitch.h
@@ -0,0 +1,53 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001-2006 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ *
+ */
+
+#ifndef CEGUI_ITEMSWITCH
+#define CEGUI_ITEMSWITCH
+
+#include "common/stdafx.h"
+#include "common/scummsys.h"
+#include "common/system.h"
+
+#include "Panel.h"
+#include "EventsBuffer.h"
+
+using GUI::Key;
+
+namespace CEGUI {
+
+ class ItemSwitch : public PanelItem {
+ public:
+ ItemSwitch(WORD referenceTrue, WORD referenceFalse, bool *item);
+ ItemSwitch(WORD referenceTrue, WORD referenceFalse, int *item, int max);
+ virtual ~ItemSwitch();
+ virtual bool action(int x, int y, bool pushed);
+ private:
+ void init(WORD referenceTrue, WORD referenceFalse);
+ bool *_item;
+ static bool _itemdummy;
+ int *_itemmultiple, _itemmax;
+ SDL_ImageResource *_backgroundTrue;
+ SDL_ImageResource *_backgroundFalse;
+ };
+}
+
+#endif
diff --git a/backends/platform/wince/CEgui/Panel.cpp b/backends/platform/wince/CEgui/Panel.cpp
new file mode 100644
index 0000000000..8b49b5d3a7
--- /dev/null
+++ b/backends/platform/wince/CEgui/Panel.cpp
@@ -0,0 +1,83 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001-2006 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ *
+ */
+
+#include "common/stdafx.h"
+#include "Panel.h"
+
+namespace CEGUI {
+
+ Panel::Panel(int interleave_first, int interleave) : Toolbar()
+ {
+ _interleave = interleave;
+ _currentItem = interleave_first;
+ }
+
+
+ bool Panel::add(const String &name, const PanelItem *item) {
+ _itemsMap[name] = (PanelItem*)item;
+ _itemsMap[name]->move(_currentItem, _y + 10);
+ _itemsMap[name]->setPanel(this);
+ _currentItem += _interleave;
+
+ return true;
+ }
+
+ bool Panel::draw(SDL_Surface *surface) {
+ ItemMap::const_iterator iterator;
+ if (!_drawn && _visible) {
+ GUIElement::draw(surface);
+ for (iterator = _itemsMap.begin(); iterator != _itemsMap.end(); ++iterator) {
+ ((GUIElement*)(iterator->_value))->draw(surface);
+ }
+ return true;
+ }
+ else
+ return false;
+ }
+
+ void Panel::forceRedraw() {
+ ItemMap::const_iterator iterator;
+ GUIElement::forceRedraw();
+ for (iterator = _itemsMap.begin(); iterator != _itemsMap.end(); ++iterator)
+ ((GUIElement*)(iterator->_value))->forceRedraw();
+ }
+
+ bool Panel::action(int x, int y, bool pushed) {
+ ItemMap::const_iterator iterator;
+ bool result = false;
+ if (!_visible || !checkInside(x, y))
+ return false;
+
+ for (iterator = _itemsMap.begin(); !result && iterator != _itemsMap.end(); ++iterator)
+ result = ((GUIElement*)(iterator->_value))->action(x, y, pushed);
+ return result;
+ }
+
+ void Panel::clear() {
+ _itemsMap.clear();
+ }
+
+ Panel::~Panel() {
+ _itemsMap.clear();
+ }
+}
+
diff --git a/backends/platform/wince/CEgui/Panel.h b/backends/platform/wince/CEgui/Panel.h
new file mode 100644
index 0000000000..8c4f4b3c7f
--- /dev/null
+++ b/backends/platform/wince/CEgui/Panel.h
@@ -0,0 +1,60 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001-2006 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ *
+ */
+
+#ifndef CEGUI_PANEL
+#define CEGUI_PANEL
+
+#include "common/stdafx.h"
+#include "common/scummsys.h"
+#include "common/system.h"
+#include "common/hashmap.h"
+#include "common/str.h"
+#include "common/config-manager.h"
+
+#include "PanelItem.h"
+#include "Toolbar.h"
+
+using Common::String;
+using Common::HashMap;
+
+namespace CEGUI {
+
+ class Panel : public Toolbar {
+ public:
+ Panel(int interleave_first, int interleave);
+ virtual bool draw(SDL_Surface *surface);
+ virtual ~Panel();
+ bool add(const String &name, const PanelItem *item);
+ void clear();
+ virtual void forceRedraw();
+ virtual bool action(int x, int y, bool pushed);
+ private:
+
+ typedef HashMap<String, PanelItem*, Common::IgnoreCase_Hash , Common::IgnoreCase_EqualTo> ItemMap;
+
+ ItemMap _itemsMap;
+ int _interleave;
+ int _currentItem;
+ };
+}
+
+#endif
diff --git a/backends/platform/wince/CEgui/PanelItem.cpp b/backends/platform/wince/CEgui/PanelItem.cpp
new file mode 100644
index 0000000000..762fac1047
--- /dev/null
+++ b/backends/platform/wince/CEgui/PanelItem.cpp
@@ -0,0 +1,45 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001-2006 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ *
+ */
+
+#include "common/stdafx.h"
+#include "PanelItem.h"
+
+namespace CEGUI {
+
+ PanelItem::PanelItem(WORD reference) : GUIElement() {
+ setBackground(reference);
+ _panel = NULL;
+ }
+
+
+ PanelItem::~PanelItem() {
+ }
+
+ bool PanelItem::action(int x, int y, bool pushed) {
+ return false;
+ }
+
+ void PanelItem::setPanel(Panel *panel) {
+ _panel = panel;
+ }
+}
+
diff --git a/backends/platform/wince/CEgui/PanelItem.h b/backends/platform/wince/CEgui/PanelItem.h
new file mode 100644
index 0000000000..638a9303d1
--- /dev/null
+++ b/backends/platform/wince/CEgui/PanelItem.h
@@ -0,0 +1,48 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001-2006 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ *
+ */
+
+#ifndef CEGUI_PANELITEM
+#define CEGUI_PANELITEM
+
+#include "common/stdafx.h"
+#include "common/scummsys.h"
+#include "common/system.h"
+
+#include "Toolbar.h"
+
+namespace CEGUI {
+
+ class Panel;
+
+ class PanelItem : public GUIElement {
+ friend class Panel;
+ public:
+ PanelItem(WORD reference);
+ virtual ~PanelItem();
+ virtual bool action(int x, int y, bool pushed);
+ protected:
+ void setPanel(Panel *panel);
+ Panel *_panel;
+ };
+}
+
+#endif
diff --git a/backends/platform/wince/CEgui/PanelKeyboard.cpp b/backends/platform/wince/CEgui/PanelKeyboard.cpp
new file mode 100644
index 0000000000..b554fb3b71
--- /dev/null
+++ b/backends/platform/wince/CEgui/PanelKeyboard.cpp
@@ -0,0 +1,88 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001-2006 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ *
+ */
+
+#include "common/stdafx.h"
+#include "PanelKeyboard.h"
+
+namespace CEGUI {
+
+ const char KEYBOARD_MAPPING_ALPHA_HIGH[] = {"abcdefghijklm"};
+ const char KEYBOARD_MAPPING_NUMERIC_HIGH[] = {"12345"};
+ const char KEYBOARD_MAPPING_ALPHA_LOW[] = {"nopqrstuvwxyz"};
+ const char KEYBOARD_MAPPING_NUMERIC_LOW[] = {"67890"};
+
+ PanelKeyboard::PanelKeyboard(WORD reference) : Toolbar() {
+ setBackground(reference);
+ }
+
+
+ PanelKeyboard::~PanelKeyboard() {
+ }
+
+ bool PanelKeyboard::action(int x, int y, bool pushed) {
+
+ if (checkInside(x, y)) {
+ char keyAscii = 0;
+ char keyCode = 0;
+ if (x < 185) {
+ // Alpha selection
+ if (y <= _y + 20)
+ keyAscii = KEYBOARD_MAPPING_ALPHA_HIGH[((x + 10) / 14) - 1];
+ else
+ keyAscii = KEYBOARD_MAPPING_ALPHA_LOW[((x + 10) / 14) - 1];
+ keyCode = tolower(keyAscii);
+ }
+ else
+ if (x >= 186 && x <= 255) {
+ // Numeric selection
+ if (y <= _y + 20)
+ keyAscii = KEYBOARD_MAPPING_NUMERIC_HIGH[((x - 187 + 10) / 14) - 1];
+ else
+ keyAscii = KEYBOARD_MAPPING_NUMERIC_LOW[((x - 187 + 10) / 14) - 1];
+ keyCode = keyAscii;
+ }
+ else
+ if (x >= 302 && x <= 316 && y < _y + 20) {
+ // Backspace
+ keyAscii = VK_BACK;
+ keyCode = keyAscii;
+ }
+ else
+ if (x >= 302 && x <= 316 && y >= _y + 20) {
+ // Enter
+ keyAscii = 13;
+ keyCode = 10;
+ }
+
+ if (keyAscii != 0) {
+ _key.setAscii(keyAscii);
+ _key.setKeycode(tolower(keyAscii));
+ return EventsBuffer::simulateKey(&_key, pushed);
+ }
+ else
+ return false;
+ }
+ else
+ return false;
+ }
+}
+
diff --git a/backends/platform/wince/CEgui/PanelKeyboard.h b/backends/platform/wince/CEgui/PanelKeyboard.h
new file mode 100644
index 0000000000..2f53d0afa3
--- /dev/null
+++ b/backends/platform/wince/CEgui/PanelKeyboard.h
@@ -0,0 +1,48 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001-2006 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ *
+ */
+
+#ifndef CEGUI_PANELKEYBOARD
+#define CEGUI_PANELKEYBOARD
+
+#include "common/stdafx.h"
+#include "common/scummsys.h"
+#include "common/system.h"
+
+#include "Toolbar.h"
+#include "EventsBuffer.h"
+
+using GUI::Key;
+using CEKEYS::EventsBuffer;
+
+namespace CEGUI {
+
+ class PanelKeyboard : public Toolbar {
+ public:
+ PanelKeyboard(WORD reference);
+ virtual ~PanelKeyboard();
+ virtual bool action(int x, int y, bool pushed);
+ private:
+ Key _key;
+ };
+}
+
+#endif
diff --git a/backends/platform/wince/CEgui/SDL_ImageResource.cpp b/backends/platform/wince/CEgui/SDL_ImageResource.cpp
new file mode 100644
index 0000000000..0261d11684
--- /dev/null
+++ b/backends/platform/wince/CEgui/SDL_ImageResource.cpp
@@ -0,0 +1,83 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001-2006 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ *
+ */
+
+#include "common/stdafx.h"
+#include "SDL_ImageResource.h"
+
+namespace CEGUI {
+
+ SDL_ImageResource::SDL_ImageResource() :
+ _surface(0)
+ {
+ }
+
+ SDL_Surface* SDL_ImageResource::load(WORD resourceID) {
+ HRSRC resource;
+ HGLOBAL resourceGlobal;
+ LPVOID resourcePointer;
+ DWORD resourceSize;
+ SDL_RWops *surfaceData;
+ HMODULE moduleHandle;
+
+ moduleHandle = GetModuleHandle(NULL);
+ resource = FindResource(moduleHandle, MAKEINTRESOURCE(resourceID), TEXT("BINARY"));
+ if (!resource)
+ return NULL;
+ resourceSize = SizeofResource(moduleHandle, resource);
+ if (!resourceSize)
+ return NULL;
+ resourceGlobal = LoadResource(moduleHandle, resource);
+ if (!resourceGlobal)
+ return NULL;
+ resourcePointer = LockResource(resourceGlobal);
+ if (!resourcePointer)
+ return NULL;
+
+ surfaceData = SDL_RWFromMem(resourcePointer, resourceSize);
+ if (!surfaceData)
+ return NULL;
+ _surface = SDL_LoadBMP_RW(surfaceData, 1);
+
+ return _surface;
+ };
+
+ SDL_Surface* SDL_ImageResource::get() {
+ return _surface;
+ }
+
+ int SDL_ImageResource::height() {
+ if (_surface)
+ return _surface->h;
+ return 0;
+ }
+
+ int SDL_ImageResource::width() {
+ if (_surface)
+ return _surface->w;
+ return 0;
+ }
+
+ SDL_ImageResource::~SDL_ImageResource() {
+ if (_surface)
+ SDL_FreeSurface(_surface);
+ }
+}
diff --git a/backends/platform/wince/CEgui/SDL_ImageResource.h b/backends/platform/wince/CEgui/SDL_ImageResource.h
new file mode 100644
index 0000000000..0c46497de8
--- /dev/null
+++ b/backends/platform/wince/CEgui/SDL_ImageResource.h
@@ -0,0 +1,46 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001-2006 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ *
+ */
+
+#ifndef CEGUI_SDL_IMAGERESOURCE
+#define CEGUI_SDL_IMAGERESOURCE
+
+#include "common/stdafx.h"
+#include "common/scummsys.h"
+#include "common/system.h"
+
+#include "SDL.h"
+
+namespace CEGUI {
+ class SDL_ImageResource {
+ public:
+ SDL_ImageResource();
+ SDL_Surface* load(WORD resourceID);
+ SDL_Surface* get();
+ int height();
+ int width();
+ virtual ~SDL_ImageResource();
+ private:
+ SDL_Surface *_surface;
+ };
+}
+
+#endif
diff --git a/backends/platform/wince/CEgui/Toolbar.cpp b/backends/platform/wince/CEgui/Toolbar.cpp
new file mode 100644
index 0000000000..03859ab392
--- /dev/null
+++ b/backends/platform/wince/CEgui/Toolbar.cpp
@@ -0,0 +1,36 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001-2006 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ *
+ */
+
+#include "common/stdafx.h"
+#include "Toolbar.h"
+
+namespace CEGUI {
+
+ // Not to be drawn on game screen !
+ Toolbar::Toolbar() : GUIElement(0, 0, 320, 40)
+ {
+ }
+
+
+ Toolbar::~Toolbar() {
+ }
+}
diff --git a/backends/platform/wince/CEgui/Toolbar.h b/backends/platform/wince/CEgui/Toolbar.h
new file mode 100644
index 0000000000..ae97c1c8d5
--- /dev/null
+++ b/backends/platform/wince/CEgui/Toolbar.h
@@ -0,0 +1,49 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001-2006 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ *
+ */
+
+#ifndef CEGUI_TOOLBAR
+#define CEGUI_TOOLBAR
+
+#include "common/stdafx.h"
+#include "common/scummsys.h"
+#include "common/system.h"
+
+//#include "common/map.h"
+#include "common/str.h"
+
+#include "GUIElement.h"
+
+
+
+namespace CEGUI {
+
+ class Toolbar : public GUIElement {
+ public:
+ virtual ~Toolbar();
+ virtual bool action(int x, int y, bool pushed) = 0;
+ protected:
+ Toolbar();
+
+ };
+}
+
+#endif
diff --git a/backends/platform/wince/CEgui/ToolbarHandler.cpp b/backends/platform/wince/CEgui/ToolbarHandler.cpp
new file mode 100644
index 0000000000..1470479478
--- /dev/null
+++ b/backends/platform/wince/CEgui/ToolbarHandler.cpp
@@ -0,0 +1,125 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001-2006 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ *
+ */
+
+#include "common/stdafx.h"
+#include "ToolbarHandler.h"
+
+namespace CEGUI {
+
+ ToolbarHandler::ToolbarHandler():
+ _current(""), _active(NULL) {
+ }
+
+
+ bool ToolbarHandler::add(const String &name, const Toolbar &toolbar) {
+ _toolbarMap[name] = (Toolbar*)&toolbar;
+
+ if (!_active) {
+ _active = &((Toolbar&)toolbar);
+ _current = name;
+ }
+
+ return true;
+ }
+
+ String ToolbarHandler::activeName() {
+ return _current;
+ }
+
+ bool ToolbarHandler::setActive(const String &name) {
+ if (!_toolbarMap.contains(name))
+ return false;
+ if (_current == name)
+ return true;
+ _current = name;
+ _active = _toolbarMap[name];
+ _active->forceRedraw();
+ return true;
+ }
+
+ bool ToolbarHandler::action(int x, int y, bool pushed) {
+ if (_active && _active->visible()) {
+ // FIXME !
+ if (_offset > 240)
+ return _active->action(x / 2, (y - _offset) / 2, pushed);
+ else
+ return _active->action(x, y - _offset, pushed);
+ }
+ else
+ return false;
+ }
+
+ void ToolbarHandler::setVisible(bool visible) {
+ if (_active)
+ _active->setVisible(visible);
+ }
+
+ bool ToolbarHandler::visible() {
+ if (_active)
+ return _active->visible();
+ else
+ return false;
+ }
+
+ void ToolbarHandler::forceRedraw() {
+ if (_active)
+ _active->forceRedraw();
+ }
+
+ bool ToolbarHandler::drawn() {
+ if (_active)
+ return _active->drawn();
+ else
+ return false;
+ }
+
+ bool ToolbarHandler::draw(SDL_Surface *surface, SDL_Rect *rect) {
+ if (_active) {
+ bool result = _active->draw(surface);
+ if (result) {
+ rect->x = _active->x();
+ rect->y = _active->y();
+ rect->w = _active->width();
+ rect->h = _active->height();
+ }
+ return result;
+ }
+ else
+ return false;
+ }
+
+ void ToolbarHandler::setOffset(int offset) {
+ _offset = offset;
+ }
+
+ int ToolbarHandler::getOffset() {
+ return _offset;
+ }
+
+ Toolbar* ToolbarHandler::active() {
+ return _active;
+ }
+
+ ToolbarHandler::~ToolbarHandler() {
+ _toolbarMap.clear();
+ }
+}
diff --git a/backends/platform/wince/CEgui/ToolbarHandler.h b/backends/platform/wince/CEgui/ToolbarHandler.h
new file mode 100644
index 0000000000..376d536dd4
--- /dev/null
+++ b/backends/platform/wince/CEgui/ToolbarHandler.h
@@ -0,0 +1,65 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001-2006 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ *
+ */
+
+#ifndef CEGUI_TOOLBARHANDLER
+#define CEGUI_TOOLBARHANDLER
+
+#include "common/stdafx.h"
+#include "common/scummsys.h"
+#include "common/system.h"
+#include "common/str.h"
+#include "common/hashmap.h"
+#include "common/config-manager.h"
+
+#include "Toolbar.h"
+
+using Common::String;
+using Common::HashMap;
+
+namespace CEGUI {
+
+ class ToolbarHandler {
+ public:
+ ToolbarHandler();
+ bool add(const String &name, const Toolbar &toolbar);
+ bool setActive(const String &name);
+ bool action(int x, int y, bool pushed);
+ void setVisible(bool visible);
+ bool visible();
+ String activeName();
+ void forceRedraw();
+ void setOffset(int offset);
+ int getOffset();
+ bool draw(SDL_Surface *surface, SDL_Rect *rect);
+ bool drawn();
+ Toolbar *active();
+ virtual ~ToolbarHandler();
+ private:
+
+ HashMap<String, Toolbar*, Common::IgnoreCase_Hash, Common::IgnoreCase_EqualTo> _toolbarMap;
+ String _current;
+ Toolbar *_active;
+ int _offset;
+ };
+}
+
+#endif