diff options
author | Filippos Karapetis | 2010-01-05 01:37:57 +0000 |
---|---|---|
committer | Filippos Karapetis | 2010-01-05 01:37:57 +0000 |
commit | d99aa0f12634bed7b5101b4b5a64f50ee744961b (patch) | |
tree | 037401495ebf794eaa3b7386b49ee03dbe1cdac1 /engines/sci/graphics/menu.h | |
parent | 2f1a909696838533758acdb026b1fd9c3631d6f0 (diff) | |
download | scummvm-rg350-d99aa0f12634bed7b5101b4b5a64f50ee744961b.tar.gz scummvm-rg350-d99aa0f12634bed7b5101b4b5a64f50ee744961b.tar.bz2 scummvm-rg350-d99aa0f12634bed7b5101b4b5a64f50ee744961b.zip |
More renaming
svn-id: r47009
Diffstat (limited to 'engines/sci/graphics/menu.h')
-rw-r--r-- | engines/sci/graphics/menu.h | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/engines/sci/graphics/menu.h b/engines/sci/graphics/menu.h new file mode 100644 index 0000000000..590c40e2e4 --- /dev/null +++ b/engines/sci/graphics/menu.h @@ -0,0 +1,123 @@ +/* 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 SCI_GRAPHICS_MENU_H +#define SCI_GRAPHICS_MENU_H + +namespace Sci { + +enum { + SCI_MENU_ATTRIBUTE_SAID = 0x6d, + SCI_MENU_ATTRIBUTE_TEXT = 0x6e, + SCI_MENU_ATTRIBUTE_KEYPRESS = 0x6f, + SCI_MENU_ATTRIBUTE_ENABLED = 0x70, + SCI_MENU_ATTRIBUTE_TAG = 0x71 +}; + +enum { + SCI_MENU_REPLACE_ONCONTROL = 0x03, + SCI_MENU_REPLACE_ONALT = 0x02, + SCI_MENU_REPLACE_ONFUNCTION = 'F' +}; + +struct GuiMenuEntry { + uint16 id; + Common::String text; + int16 textWidth; + + GuiMenuEntry(uint16 curId) + : id(curId), textWidth(0) { } +}; +typedef Common::List<GuiMenuEntry *> GuiMenuList; + +struct GuiMenuItemEntry { + uint16 menuId; + uint16 id; + bool enabled; + uint16 tag; + uint16 keyPress; + uint16 keyModifier; + bool separatorLine; + reg_t saidVmPtr; + Common::String text; + reg_t textVmPtr; + int16 textWidth; + Common::String textRightAligned; + int16 textRightAlignedWidth; + + GuiMenuItemEntry(uint16 curMenuId, uint16 curId) + : menuId(curMenuId), id(curId), + enabled(true), tag(0), keyPress(0), keyModifier(0), separatorLine(false), textWidth(0), textRightAlignedWidth(0) { + saidVmPtr = NULL_REG; + textVmPtr = NULL_REG; + } +}; +typedef Common::List<GuiMenuItemEntry *> GuiMenuItemList; + +class SciGuiMenu { +public: + SciGuiMenu(SciEvent *event, SegManager *segMan, Gfx *gfx, Text *text, Screen *screen, Cursor *cursor); + ~SciGuiMenu(); + + void reset(); + void add(Common::String title, Common::String content, reg_t contentVmPtr); + void setAttribute(uint16 menuId, uint16 itemId, uint16 attributeId, reg_t value); + reg_t getAttribute(uint16 menuId, uint16 itemId, uint16 attributeId); + + void drawBar(); + reg_t select(reg_t eventObject); + +private: + GuiMenuItemEntry *findItem(uint16 menuId, uint16 itemId); + void calculateTextWidth(); + void drawMenu(uint16 oldMenuId, uint16 newMenuId); + void invertMenuSelection(uint16 itemId); + GuiMenuItemEntry *interactiveWithKeyboard(); + GuiMenuItemEntry *interactiveWithMouse(); + GuiMenuItemEntry *interactiveGetItem(uint16 menuId, uint16 itemId, bool menuChanged); + + SciEvent *_event; + SegManager *_segMan; + Gfx *_gfx; + Text *_text; + Screen *_screen; + Cursor *_cursor; + + uint16 _listCount; + GuiMenuList _list; + GuiMenuItemList _itemList; + + uint16 _curMenuId; + uint16 _curItemId; + + Port *_oldPort; + MemoryHandle _barSaveHandle; + MemoryHandle _menuSaveHandle; + Common::Rect _menuRect; +}; + +} // End of namespace Sci + +#endif |