1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
|
/* 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_INCLUDE_SCI_WIDGETS_H
#define SCI_INCLUDE_SCI_WIDGETS_H
#include "sci/engine/state.h"
namespace Sci {
class Menu;
/* SCI-specific widget handling */
/**
* Flags for windows in SCI0.
*/
enum windowFlags {
kWindowTransparent = 0x01, ///< 0000 0001
kWindowNoFrame = 0x02, ///< 0000 0010 - a window without a frame
kWindowTitle = 0x04, /**
* 0000 0100 - Add title bar to
* window (10 pixels high, framed,
* text is centered and written in
* white on dark gray), bits 3-6
* are unused
*/
kWindowDontDraw = 0x80, ///< 1000 0000 - don't draw anything
kWindowNoDropShadow = 0x1000000, ///< 0001 0000 0000 0000 0000 0000 0000 (not in SCI)
kWindowAutoRestore = 0x2000000
};
/** Button and frame control flags. */
enum controlStateFlags {
kControlStateEnabled = 0x0001, ///< 0001 - enabled buttons (used by the interpreter)
kControlStateDisabled = 0x0004, ///< 0010 - grayed out buttons (used by the interpreter)
kControlStateFramed = 0x0008, ///< 1000 - widgets surrounded by a frame (used by the interpreter)
kControlStateDitherFramed = 0x1000 ///< 0001 0000 0000 0000 - widgets surrounded by a dithered frame (used in kgraphics)
};
/**
* Sets the contents of a port used as status bar.
*
* @param[in] s The affected EngineState
* @param[in] status_bar The status bar port
* @param[in] text The text to draw
* @param[in] fgcolor The foreground color
* @param[in] bgcolor The background color
*/
void sciw_set_status_bar(EngineState *s, GfxPort *status_bar,
const Common::String &text, int fgcolor, int bgcolor);
/**
* Creates a new SCI style window.
*
* @param[in] s The affected EngineState
* @param[in] area The screen area to frame (not including a
* potential window title)
* @param[in] font Default font number to use
* @param[in] color The foreground color to use for drawing
* @param[in] bgcolor The background color to use
* @param[in] title_font The font to use for the title bar (if any)
* @param[in] title_color Color to use for the title bar text
* @param[in] title_bg_color Color to use for the title bar background
* @param[in] title The text to write into the title bar
* @param[in] flags Any ORred combination of window flags
* @return A newly allocated port with the requested characteristics
*/
GfxPort *sciw_new_window(EngineState *s, rect_t area, int font,
gfx_color_t color, gfx_color_t bgcolor, int title_font,
gfx_color_t title_color, gfx_color_t title_bg_color,
const char *title, int flags);
/** @name Control widgets */
/** @{ */
/**
* Creates a new button control list.
*
* @param[in] port The port containing the color values to use for the
* button (the button is /not/ appended to the port
* there)
* @param[in] ID Button's ID
* @param[in] zone The area occupied by the button
* @param[in] text The text to write into the button
* @param[in] font The font to use for the button
* @param[in] selected Whether the button should be marked as being
* selected by the keyboard focus
* @param[in] inverse Whether to inverse the color scheme
* @param[in] gray Whether the button should be grayed out
* @return The button
*/
GfxList *sciw_new_button_control(GfxPort *port, reg_t ID, rect_t zone,
const char *text, int font, char selected, char inverse, char gray);
/**
* Creates a new text control list.
*
* @param[in] port The port containing the color values to use
* @param[in] ID Text widget ID
* @param[in] zone Area occupied by the text
* @param[in] text The text
* @param[in] font The font the text is to be drawn in
* @param[in] align Horizontal text alignment to use
* @param[in] frame Whether a dithered frame should surround the text
* @param[in] inverse Whether the text colors should be inversed
* @return The text control widget list
*/
GfxList *sciw_new_text_control(GfxPort *port, reg_t ID, rect_t zone,
const char *text, int font, gfx_alignment_t align, char frame,
char inverse);
/**
* Creates a new edit control list.
*
* @param[in] port The port containing the color values to use
* @param[in] ID Text widget ID
* @param[in] zone Area occupied by the text
* @param[in] text The text
* @param[in] font The font the text is to be drawn in
* @param[in] cursor Cursor position
* @param[in] inverse Whether the edit widget should be reversed
* @return An appropriate widget list
*/
GfxList *sciw_new_edit_control(GfxPort *port, reg_t ID, rect_t zone,
const char *text, int font, unsigned int cursor, char inverse);
/**
* Creates a new icon control list.
*
* @param[in] port The port containing the color values to use
* @param[in] ID Text widget ID
* @param[in] zone Area occupied by the text
* @param[in] view The view index
* @param[in] loop The loop index
* @param[in] cel The cel to display
* @param[in] frame Whether the widget should be surrounded by a frame
* @param[in] inverse Whether colors should be inversed
* @return An appropriate widget list
*/
GfxList *sciw_new_icon_control(GfxPort *port, reg_t ID, rect_t zone,
int view, int loop, int cel, char frame, char inverse);
/**
* Creates a new list control list.
*
* @param[in] port: The port containing the color values to use
* @param[in] ID: Text widget ID
* @param[in] zone: Area occupied by the text
* @param[in] font_nr: Number of the font to use
* @param[in] entries_list: List of strings to contain within the list
* @param[in] entries_nr: Number of entries in entries_list
* @param[in] list_top: First list item that is visible
* @param[in] selection: The list item that is selected
* @param[in] inverse: The usual meaning
* @return An appropriate widget list
*/
GfxList *sciw_new_list_control(GfxPort *port, reg_t ID, rect_t zone,
int font_nr, const char **entries_list, int entries_nr,
int list_top, int selection, char inverse);
/** @} */
/** @name Menubar widgets */
/** @{ */
/**
* Draws the menu bar.
*
* @param[in] s: The EngineState to operate on
* @param[in] status_bar: The status bar port to modify
* @param[in] menubar: The menu bar to use
* @param[in] selection: Number of the menu to hightlight, or -1 for
* 'none'
*/
void sciw_set_menubar(EngineState *s, GfxPort *status_bar, Menubar *menubar,
int selection);
/**
* Creates a menu port.
*
* @param[in] s The state to operate on
* @param[in] status_bar The status bar
* @param[in] menubar The menu bar to use
* @param[in] selection Number of the menu to interpret
* @return The result port
*/
GfxPort *sciw_new_menu(EngineState *s, GfxPort *status_bar,
Menubar *menubar, int selection);
/**
* Toggle the selection of a menu item from a menu port.
*
* @param[in] menu_port The port to modify
* @param[in] menu The menu the menu port corresponds to
* @param[in] selection Number of the menu entry to unselect, or -1 to do
* a NOP
* @param[in] selected Whether to set the item's state to selected or not
* @return The modified menu
*/
GfxPort *sciw_toggle_item(GfxPort *menu_port, Menu *menu, int selection,
bool selected);
/** @} */
} // End of namespace Sci
#endif // SCI_INCLUDE_SCI_WIDGETS_H
|