diff options
Diffstat (limited to 'engines/m4/m4_views.h')
-rw-r--r-- | engines/m4/m4_views.h | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/engines/m4/m4_views.h b/engines/m4/m4_views.h new file mode 100644 index 0000000000..2f2d450332 --- /dev/null +++ b/engines/m4/m4_views.h @@ -0,0 +1,118 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * 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 M4_M4_VIEWS_H +#define M4_M4_VIEWS_H + +#include "m4/gui.h" +#include "m4/viewmgr.h" +#include "common/rect.h" +#include "common/list.h" +#include "common/ptr.h" + +namespace M4 { + +class GUIInventoryItem { +public: + const char *name; + const char *verb; + M4Surface *icon; + int iconIndex; + + GUIInventoryItem(const char *_name, const char *_verb, M4Surface *_icon, int _iconIndex) { + name = _name; _verb = verb; icon = _icon; iconIndex = _iconIndex; + } +}; + +class GUIInventory: public GUIRect { + typedef Common::List<Common::SharedPtr<GUIInventoryItem> > InventoryList; + typedef InventoryList::iterator ItemsIterator; +private: + InventoryList _inventoryItems; + Common::Point _cellSize; + Common::Point _cellCount; + bool _visible; + bool _scrollable; + int _scrollPosition; + int _highlightedIndex; + int _selectedIndex; + M4Engine *_vm; +public: + GUIInventory(View *owner, M4Engine *vm, const Common::Rect &bounds, + int horizCells, int vertCells, int cellWidth, int cellHeight, int tag); + + void onRefresh(); + bool onEvent(M4EventType eventType, int param, int x, int y, GUIObject *¤tItem); + + void add(const char *name, const char *verb, M4Surface *icon, int iconIndex); + bool remove(const char *name); + int getInsideIndex(int x, int y); + int getSelectedIndex() { return _selectedIndex; } + const char *getSelectedObjectName(); + void clearSelected() { + _selectedIndex = -1; + setHighlight(-1); + } + const Common::Point &getCellPosition(int index); + void setHighlight(int index); + bool needLeftButton() { return _scrollPosition != 0; } + bool needRightButton() { + return (uint)(_inventoryItems.size() - _scrollPosition) > (uint)(_cellCount.x * _cellCount.y); + } + void setScrollPosition(int value); + void scrollLeft() { setScrollPosition(_scrollPosition - 1); } + void scrollRight() { setScrollPosition(_scrollPosition + 1); } + void setVisible(bool value) { _visible = value; } +}; + +class GameInterfaceView: public View { + typedef Common::List<Common::SharedPtr<GUIButton> > ButtonList; + typedef ButtonList::iterator ButtonsIterator; +public: + SpriteAsset *_sprites; + ButtonList _buttons; + GUITextField _statusText; + GUIInventory _inventory; + int _highlightedIndex; + bool _selected; +private: + void setHighlightedButton(int index); +public: + GameInterfaceView(M4Engine *vm); + ~GameInterfaceView(); + + void onRefresh(RectList *rects, M4Surface *destSurface); + bool onEvent(M4EventType eventType, int param, int x, int y, bool &captureEvents); + void setStatusText(const char *text) { _statusText.setText(text); } + void cancelSentence() { setStatusText(NULL); } + void inventoryAdd(const char *name, const char *verb, int iconIndex) { + _inventory.add(name, verb, _sprites->getFrame(iconIndex), iconIndex); + } + bool inventoryRemove(const char *name) { return _inventory.remove(name); } +}; + +} + +#endif |