22#ifndef GRAPHICS_MACGUI_MACMENU_H
23#define GRAPHICS_MACGUI_MACMENU_H
25#include "common/str-array.h"
26#include "graphics/macgui/macfontmanager.h"
27#include "graphics/macgui/macwindow.h"
28#include "graphics/font.h"
50 MacMenuSubMenu() : highlight(-1), visStart(0), visEnd(0), scroll(0) {}
54 void enableAllItems();
56 int ytoItem(
int y,
int itemHeight) {
return MIN<int>((y - bbox.top) / itemHeight, items.
size() - 1); }
74 MacMenuItem(
const Common::String &t,
int a = -1,
int s = 0,
char sh = 0,
int sp = -1,
bool e =
true,
bool c =
false,
int cs = 0) :
75 text(t), unicode(
false), action(a), style(s), shortcut(sh),
76 shortcutPos(sp), enabled(e), submenu(
nullptr), checked(c), checkSymbol(cs) {}
78 unicodeText(t), unicode(
true), action(a), style(s), shortcut(sh),
79 shortcutPos(sp), enabled(e), submenu(
nullptr), checked(c), checkSymbol(cs) {}
102 bool isDirty()
override {
return _contentIsDirty || _dimensionsDirty; }
109 void setCommandsCallback(
void (*callback)(
int,
Common::String &,
void *),
void *data) { _ccallback = callback; _cdata = data; }
110 void setCommandsCallback(
void (*callback)(
int,
Common::U32String &,
void *),
void *data) { _unicodeccallback = callback; _cdata = data; }
112 void addStaticMenus(
const MacMenuData *data);
113 void calcDimensions();
114 void resize(
int width,
int height);
117 int numberOfMenuItems(MacMenuItem *menu);
119 MacMenuItem *getMenuItem(
int menuId);
121 MacMenuItem *getSubMenuItem(MacMenuItem *menu,
int itemId);
122 MacMenuItem *getSubMenuItem(MacMenuItem *menu,
const Common::String &itemId);
124 MacMenuSubMenu *addSubMenu(MacMenuSubMenu *submenu,
int index = -1);
125 int addMenuItem(MacMenuSubMenu *submenu,
const Common::String &text,
int action = -1,
int style = 0,
char shortcut = 0,
bool enabled =
true,
bool checked =
false);
126 int addMenuItem(MacMenuSubMenu *submenu,
const Common::U32String &text,
int action = 0,
int style = 0,
char shortcut = 0,
bool enabled =
true,
bool checked =
false);
127 void insertMenuItem(MacMenuSubMenu *submenu,
const Common::String &text, uint pos,
int action = -1,
int style = 0,
char shortcut = 0,
bool enabled =
true,
bool checked =
false);
128 void insertMenuItem(MacMenuSubMenu *submenu,
const Common::U32String &text, uint pos,
int action = 0,
int style = 0,
char shortcut = 0,
bool enabled =
true,
bool checked =
false);
129 void removeMenuItem(MacMenuSubMenu *submenu, uint pos);
132 void createSubMenuFromString(
int id,
const char *
string,
int commandId);
133 void appendMenu(MacMenuSubMenu *submenu,
const Common::String &
string,
int commandId);
134 void clearSubMenu(
int id);
136 MacMenuSubMenu *getSubmenu(MacMenuSubMenu *submenu,
int index);
140 bool mouseClick(
int x,
int y);
141 bool draw(
bool forceRedraw =
false)
override {
return false; }
146 void enableCommand(
int menunum,
int action,
bool state);
147 void enableCommand(
const char *menuitem,
const char *menuaction,
bool state);
149 void enableAllMenus();
150 void disableAllMenus();
152 bool isVisible() {
return _isVisible; }
153 void setVisible(
bool visible,
bool silent =
false)
override { _isVisible = visible; _contentIsDirty =
true; }
155 void setFont(uint16 fontID, uint16 fontSize);
159 virtual void closeMenu();
164 void setCheckMark(
MacMenuItem *menuItem,
bool checkMark);
167 void setEnabled(
MacMenuItem *menuItem,
bool enabled);
173 void setAction(
MacMenuItem *menuItem,
int actionId);
176 int getLastSelectedMenuItem() {
return _lastActiveItem; };
177 int getLastSelectedSubmenuItem() {
return _lastActiveSubItem; };
178 void getMenuShortCut(uint16 key,
int &menuItem,
int &submenuItem);
180 void renderSubmenu(MacMenuSubMenu *menu,
bool recursive =
true);
182 int getScrollDirection() {
return _scrollDirection; }
184 int getDropdownItemHeight() {
return _menuDropdownItemHeight; }
186 void setOverlayDirty(
bool dirty) { _overlayDirty = dirty; _contentIsDirty |= dirty; }
194 bool _dimensionsDirty;
196 int _menuDropdownItemHeight;
203 void calcSubMenuBounds(MacMenuSubMenu *menu,
int x,
int y);
206 ManagedSurface _tempSurface;
208 int _menuLeftDropdownPadding;
209 int _menuRightDropdownPadding;
212 bool checkCallback(
bool unicode =
false);
213 const Font *getMenuFont(
int slant = kMacFontRegular);
214 Common::CodePage getMenuEncoding()
const;
215 const Common::String getAcceleratorString(MacMenuItem *item,
const char *prefix);
217 void processSubmenuTabs(MacMenuSubMenu *submenu);
219 int calcSubMenuWidth(MacMenuSubMenu *menu);
222 bool mouseRelease(
int x,
int y);
223 bool mouseMove(
int x,
int y);
225 bool processMenuShortCut(uint16 ascii);
227 void drawSubMenuArrow(ManagedSurface *dst,
int x,
int y,
int color);
228 bool contains(
int x,
int y);
230 void drawScrollArrow(
int arrowX,
int arrowY,
int direction);
233 MacMenuItem *findMenuItem(
int menuId,
int itemId);
242 int _lastActiveSubItem;
246 bool _scrollTimerActive;
247 int _scrollDirection;
size_type size() const
Definition: array.h:316
Definition: macresman.h:126
Definition: winexe_pe.h:48
Definition: macwindow.h:80
Definition: macwindowmanager.h:149
Definition: managed_surface.h:51
TextAlign
Definition: font.h:48
Definition: algorithm.h:29
Definition: formatinfo.h:28