/* 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$ * */ #include "sci/sci.h" // for INCLUDE_OLDGFX #ifdef INCLUDE_OLDGFX #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 }; /** * 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 #endif