summaryrefslogtreecommitdiff
path: root/window.h
diff options
context:
space:
mode:
authorrubidium <rubidium@openttd.org>2007-01-02 19:19:48 +0000
committerrubidium <rubidium@openttd.org>2007-01-02 19:19:48 +0000
commit66bbf336c6af7353ef0aeed58002c46543b30635 (patch)
treead4a63860df2626b22f77e7dac712e958bea54cb /window.h
parentccc0a3f4dbf58c005b22341ac8874252924690cd (diff)
downloadopenttd-66bbf336c6af7353ef0aeed58002c46543b30635.tar.xz
(svn r7759) -Merge: makefile rewrite. This merge features:
- A proper ./configure, so everything needs to be configured only once, not for every make. - Usage of makedepend when available. This greatly reduces the time needed for generating the dependencies. - A generator for all project files. There is a single file with sources, which is used to generate Makefiles and the project files for MSVC. - Proper support for OSX universal binaries. - Object files for non-MSVC compiles are also placed in separate directories, making is faster to switch between debug and release compiles and it does not touch the directory with the source files. - Functionality to make a bundle of all needed files for for example a nightly or distribution of a binary with all needed GRFs and language files. Note: as this merge moves almost all files, it is recommended to make a backup of your working copy before updating your working copy.
Diffstat (limited to 'window.h')
-rw-r--r--window.h843
1 files changed, 0 insertions, 843 deletions
diff --git a/window.h b/window.h
deleted file mode 100644
index 2e6fd8b94..000000000
--- a/window.h
+++ /dev/null
@@ -1,843 +0,0 @@
-/* $Id$ */
-
-#ifndef WINDOW_H
-#define WINDOW_H
-
-#include "macros.h"
-#include "string.h"
-#include "order.h"
-
-typedef struct WindowEvent WindowEvent;
-
-typedef void WindowProc(Window *w, WindowEvent *e);
-
-/* How the resize system works:
- First, you need to add a WWT_RESIZEBOX to the widgets, and you need
- to add the flag WDF_RESIZABLE to the window. Now the window is ready
- to resize itself.
- As you may have noticed, all widgets have a RESIZE_XXX in their line.
- This lines controls how the widgets behave on resize. RESIZE_NONE means
- it doesn't do anything. Any other option let's one of the borders
- move with the changed width/height. So if a widget has
- RESIZE_RIGHT, and the window is made 5 pixels wider by the user,
- the right of the window will also be made 5 pixels wider.
- Now, what if you want to clamp a widget to the bottom? Give it the flag
- RESIZE_TB. This is RESIZE_TOP + RESIZE_BOTTOM. Now if the window gets
- 5 pixels bigger, both the top and bottom gets 5 bigger, so the whole
- widgets moves downwards without resizing, and appears to be clamped
- to the bottom. Nice aint it?
- You should know one more thing about this system. Most windows can't
- handle an increase of 1 pixel. So there is a step function, which
- let the windowsize only be changed by X pixels. You configure this
- after making the window, like this:
- w->resize.step_height = 10;
- Now the window will only change in height in steps of 10.
- You can also give a minimum width and height. The default value is
- the default height/width of the window itself. You can change this
- AFTER window-creation, with:
- w->resize.width or w->resize.height.
- That was all.. good luck, and enjoy :) -- TrueLight */
-
-enum ResizeFlags {
- RESIZE_NONE = 0,
-
- RESIZE_LEFT = 1,
- RESIZE_RIGHT = 2,
- RESIZE_TOP = 4,
- RESIZE_BOTTOM = 8,
-
- RESIZE_LR = RESIZE_LEFT | RESIZE_RIGHT,
- RESIZE_RB = RESIZE_RIGHT | RESIZE_BOTTOM,
- RESIZE_TB = RESIZE_TOP | RESIZE_BOTTOM,
- RESIZE_LRB = RESIZE_LEFT | RESIZE_RIGHT | RESIZE_BOTTOM,
- RESIZE_LRTB = RESIZE_LEFT | RESIZE_RIGHT | RESIZE_TOP | RESIZE_BOTTOM,
- RESIZE_RTB = RESIZE_RIGHT | RESIZE_TOP | RESIZE_BOTTOM,
-
- /* The following flags are used by the system to specify what is disabled, hidden, or clicked
- * They are used in the same place as the above RESIZE_x flags, Widget visual_flags.
- * These states are used in exceptions. If nothing is specified, they will indicate
- * Enabled, visible or unclicked widgets*/
- WIDG_DISABLED = 4, // widget is greyed out, not available
- WIDG_HIDDEN = 5, // widget is made invisible
- WIDG_LOWERED = 6, // widget is paint lowered, a pressed button in fact
-} ResizeFlag;
-
-/* used to indicate the end of widgets' list for vararg functions */
-enum {
- WIDGET_LIST_END = -1,
-};
-
-typedef struct Widget {
- byte type; ///< Widget type, see @WindowWidgetTypes
- byte display_flags; ///< Resize direction, alignment, etc. during resizing, see @ResizeFlags
- byte color; ///< Widget colour, see docs/ottd-colourtext-palette.png
- uint16 left, right, top, bottom; ///< The position offsets inside the window
- uint16 data; ///< The String/Image or special code (list-matrixes) of a widget
- StringID tooltips; ///< Tooltips that are shown when rightclicking on a widget
-} Widget;
-
-typedef enum FrameFlags {
- FR_TRANSPARENT = 0x01, ///< Makes the background transparent if set
- FR_BORDERONLY = 0x10, ///< Draw border only, no background
- FR_LOWERED = 0x20, ///< If set the frame is lowered and the background color brighter (ie. buttons when pressed)
- FR_DARKENED = 0x40, ///< If set the background is darker, allows for lowered frames with normal background color when used with FR_LOWERED (ie. dropdown boxes)
-} FrameFlags;
-
-void DrawFrameRect(int left, int top, int right, int bottom, int color, FrameFlags flags);
-
-enum WindowEventCodes {
- WE_CREATE,
- WE_DESTROY,
- WE_PAINT,
- WE_KEYPRESS,
- WE_CLICK,
- WE_RCLICK,
- WE_MOUSEOVER,
- WE_MOUSELOOP,
- WE_MOUSEWHEEL,
- WE_TICK,
- WE_4,
- WE_TIMEOUT,
- WE_PLACE_OBJ,
- WE_ABORT_PLACE_OBJ,
- WE_ON_EDIT_TEXT,
- WE_ON_EDIT_TEXT_CANCEL,
- WE_POPUPMENU_SELECT,
- WE_POPUPMENU_OVER,
- WE_DRAGDROP,
- WE_PLACE_DRAG,
- WE_PLACE_MOUSEUP,
- WE_PLACE_PRESIZE,
- WE_DROPDOWN_SELECT,
- WE_RESIZE,
- WE_MESSAGE,
- WE_SCROLL,
- WE_INVALIDATE_DATA,
-};
-
-struct WindowEvent {
- byte event;
- union {
- struct{
- Point pt;
- int widget;
- } click;
-
- struct {
- Point pt;
- TileIndex tile;
- TileIndex starttile;
- int userdata;
- } place;
-
- struct {
- Point pt;
- int widget;
- } dragdrop;
-
- struct {
- Point size;
- Point diff;
- } sizing;
-
- struct {
- char *str;
- } edittext;
-
- struct {
- Point pt;
- } popupmenu;
-
- struct {
- int button;
- int index;
- } dropdown;
-
- struct {
- Point pt;
- int widget;
- } mouseover;
-
- struct {
- bool cont; // continue the search? (default true)
- uint16 key; // 16-bit Unicode value of the key
- uint16 keycode;// untranslated key (including shift-state)
- } keypress;
-
- struct {
- uint msg; // message to be sent
- uint wparam; // additional message-specific information
- uint lparam; // additional message-specific information
- } message;
-
- struct {
- Point delta; // delta position against position of last call
- } scroll;
-
- struct {
- int wheel; // how much was 'wheel'd'
- } wheel;
- } we;
-};
-
-enum WindowKeyCodes {
- WKC_SHIFT = 0x8000,
- WKC_CTRL = 0x4000,
- WKC_ALT = 0x2000,
- WKC_META = 0x1000,
-
- // Special ones
- WKC_NONE = 0,
- WKC_ESC = 1,
- WKC_BACKSPACE = 2,
- WKC_INSERT = 3,
- WKC_DELETE = 4,
-
- WKC_PAGEUP = 5,
- WKC_PAGEDOWN = 6,
- WKC_END = 7,
- WKC_HOME = 8,
-
- // Arrow keys
- WKC_LEFT = 9,
- WKC_UP = 10,
- WKC_RIGHT = 11,
- WKC_DOWN = 12,
-
- // Return & tab
- WKC_RETURN = 13,
- WKC_TAB = 14,
-
- // Numerical keyboard
- WKC_NUM_0 = 16,
- WKC_NUM_1 = 17,
- WKC_NUM_2 = 18,
- WKC_NUM_3 = 19,
- WKC_NUM_4 = 20,
- WKC_NUM_5 = 21,
- WKC_NUM_6 = 22,
- WKC_NUM_7 = 23,
- WKC_NUM_8 = 24,
- WKC_NUM_9 = 25,
- WKC_NUM_DIV = 26,
- WKC_NUM_MUL = 27,
- WKC_NUM_MINUS = 28,
- WKC_NUM_PLUS = 29,
- WKC_NUM_ENTER = 30,
- WKC_NUM_DECIMAL = 31,
-
- // Space
- WKC_SPACE = 32,
-
- // Function keys
- WKC_F1 = 33,
- WKC_F2 = 34,
- WKC_F3 = 35,
- WKC_F4 = 36,
- WKC_F5 = 37,
- WKC_F6 = 38,
- WKC_F7 = 39,
- WKC_F8 = 40,
- WKC_F9 = 41,
- WKC_F10 = 42,
- WKC_F11 = 43,
- WKC_F12 = 44,
-
- // backquote is the key left of "1"
- // we only store this key here, no matter what character is really mapped to it
- // on a particular keyboard. (US keyboard: ` and ~ ; German keyboard: ^ and °)
- WKC_BACKQUOTE = 45,
- WKC_PAUSE = 46,
-
- // 0-9 are mapped to 48-57
- // A-Z are mapped to 65-90
- // a-z are mapped to 97-122
-};
-
-typedef struct WindowDesc {
- int16 left, top, width, height;
- WindowClass cls;
- WindowClass parent_cls;
- uint32 flags;
- const Widget *widgets;
- WindowProc *proc;
-} WindowDesc;
-
-enum WindowDefaultFlag {
- WDF_STD_TOOLTIPS = 1, /* use standard routine when displaying tooltips */
- WDF_DEF_WIDGET = 2, /* default widget control for some widgets in the on click event */
- WDF_STD_BTN = 4, /* default handling for close and drag widgets (widget no 0 and 1) */
-
- WDF_UNCLICK_BUTTONS = 16, /* Unclick buttons when the window event times out */
- WDF_STICKY_BUTTON = 32, /* Set window to sticky mode; they are not closed unless closed with 'X' (widget 2) */
- WDF_RESIZABLE = 64, /* A window can be resized */
- WDF_MODAL = 128, /* The window is a modal child of some other window, meaning the parent is 'inactive' */
-};
-
-/* can be used as x or y coordinates to cause a specific placement */
-enum WindowDefaultPosition {
- WDP_AUTO = -1, ///< Find a place automatically
- WDP_CENTER = -2, ///< Center the window (left/right or top/bottom)
- WDP_ALIGN_TBR = -3, ///< Align the right side of the window with the right side of the main toolbar
- WDP_ALIGN_TBL = -4, ///< Align the left side of the window with the left side of the main toolbar
-};
-
-typedef struct Textbuf {
- char *buf; /* buffer in which text is saved */
- uint16 maxlength, maxwidth; /* the maximum size of the buffer. Maxwidth specifies screensize in pixels, maxlength is in bytes */
- uint16 length, width; /* the current size of the string. Width specifies screensize in pixels, length is in bytes */
- bool caret; /* is the caret ("_") visible or not */
- uint16 caretpos; /* the current position of the caret in the buffer, in bytes */
- uint16 caretxoffs; /* the current position of the caret in pixels */
-} Textbuf;
-
-#define WP(ptr,str) (*(str*)(ptr)->custom)
-/* You cannot 100% reliably calculate the biggest custom struct as
- * the number of pointers in it and alignment will have a huge impact.
- * 96 is the largest window-size for 64-bit machines currently */
-#define WINDOW_CUSTOM_SIZE 96
-
-typedef struct Scrollbar {
- uint16 count, cap, pos;
-} Scrollbar;
-
-typedef struct ResizeInfo {
- uint width; /* Minimum width and height */
- uint height;
-
- uint step_width; /* In how big steps the width and height go */
- uint step_height;
-} ResizeInfo;
-
-typedef struct WindowMessage {
- int msg;
- int wparam;
- int lparam;
-} WindowMessage;
-
-struct Window {
- uint16 flags4;
- WindowClass window_class;
- WindowNumber window_number;
-
- int left, top;
- int width, height;
-
- Scrollbar hscroll, vscroll, vscroll2;
- ResizeInfo resize;
-
- byte caption_color;
-
- WindowProc *wndproc;
- ViewPort *viewport;
- const Widget *original_widget;
- Widget *widget;
- uint widget_count;
- uint32 desc_flags;
-
- WindowMessage message;
- Window *parent;
- byte custom[WINDOW_CUSTOM_SIZE];
-};
-
-typedef struct querystr_d {
- StringID caption;
- Textbuf text;
- const char *orig;
- CharSetFilter afilter;
- bool handled;
-} querystr_d;
-assert_compile(WINDOW_CUSTOM_SIZE >= sizeof(querystr_d));
-
-typedef struct {
- byte item_count; /* follow_vehicle */
- byte sel_index; /* scrollpos_x */
- byte main_button; /* scrollpos_y */
- byte action_id;
- StringID string_id; /* unk30 */
- uint16 checked_items; /* unk32 */
- byte disabled_items;
-} menu_d;
-assert_compile(WINDOW_CUSTOM_SIZE >= sizeof(menu_d));
-
-typedef struct {
- int16 data_1, data_2, data_3;
- int16 data_4, data_5;
- bool close;
- byte byte_1;
-} def_d;
-assert_compile(WINDOW_CUSTOM_SIZE >= sizeof(def_d));
-
-typedef struct {
- void *data;
-} void_d;
-assert_compile(WINDOW_CUSTOM_SIZE >= sizeof(void_d));
-
-typedef struct {
- uint16 base;
- uint16 count;
-} tree_d;
-assert_compile(WINDOW_CUSTOM_SIZE >= sizeof(tree_d));
-
-typedef struct {
- StringID string_id;
- byte paramcount;
- uint32 params[5];
-} tooltips_d;
-assert_compile(WINDOW_CUSTOM_SIZE >= sizeof(tooltips_d));
-
-typedef struct {
- byte vehicle_type;
- union {
- byte railtype;
- byte acc_planes; // AIRCRAFT_ONLY, ALL, HELICOPTERS_ONLY
- } filter;
- byte sel_index; // deprecated value, used for 'unified' ship and road
- bool descending_sort_order;
- byte sort_criteria;
- EngineID sel_engine;
- EngineID rename_engine;
- EngineList eng_list;
-} buildvehicle_d;
-assert_compile(WINDOW_CUSTOM_SIZE >= sizeof(buildvehicle_d));
-
-typedef struct {
- byte vehicletype;
- byte sel_index[2];
- EngineID sel_engine[2];
- uint16 count[2];
- bool wagon_btnstate; // true means engine is selected
-} replaceveh_d;
-assert_compile(WINDOW_CUSTOM_SIZE >= sizeof(replaceveh_d));
-
-typedef struct {
- VehicleID sel;
- byte type;
- bool generate_list;
- uint16 engine_list_length;
- uint16 wagon_list_length;
- uint16 engine_count;
- uint16 wagon_count;
- Vehicle **vehicle_list;
- Vehicle **wagon_list;
-} depot_d;
-assert_compile(WINDOW_CUSTOM_SIZE >= sizeof(depot_d));
-
-typedef struct {
- int sel;
-} order_d;
-assert_compile(WINDOW_CUSTOM_SIZE >= sizeof(order_d));
-
-typedef struct {
- byte tab;
-} traindetails_d;
-assert_compile(WINDOW_CUSTOM_SIZE >= sizeof(traindetails_d));
-
-typedef struct {
- int32 scroll_x;
- int32 scroll_y;
- int32 subscroll;
-} smallmap_d;
-assert_compile(WINDOW_CUSTOM_SIZE >= sizeof(smallmap_d));
-
-typedef struct {
- uint32 face;
- byte gender;
-} facesel_d;
-assert_compile(WINDOW_CUSTOM_SIZE >= sizeof(facesel_d));
-
-typedef struct {
- int sel;
- struct RefitOption *cargo;
- struct RefitList *list;
- uint length;
- VehicleOrderID order;
-} refit_d;
-assert_compile(WINDOW_CUSTOM_SIZE >= sizeof(refit_d));
-
-typedef struct {
- VehicleID follow_vehicle;
- int32 scrollpos_x;
- int32 scrollpos_y;
-} vp_d;
-assert_compile(WINDOW_CUSTOM_SIZE >= sizeof(vp_d));
-
-// vp2_d is the same as vp_d, except for the data_# values..
-typedef struct {
- VehicleID follow_vehicle;
- int32 scrollpos_x;
- int32 scrollpos_y;
- byte data_1;
- byte data_2;
- byte data_3;
-} vp2_d;
-assert_compile(WINDOW_CUSTOM_SIZE >= sizeof(vp2_d));
-
-typedef struct {
- uint16 follow_vehicle;
- int32 scrollpos_x;
- int32 scrollpos_y;
- NewsItem *ni;
-} news_d;
-assert_compile(WINDOW_CUSTOM_SIZE >= sizeof(news_d));
-
-typedef struct {
- uint32 background_img;
- int8 rank;
-} highscore_d;
-assert_compile(WINDOW_CUSTOM_SIZE >= sizeof(highscore_d));
-
-typedef struct {
- int height;
- uint16 counter;
-} scroller_d;
-assert_compile(WINDOW_CUSTOM_SIZE >= sizeof(scroller_d));
-
-typedef enum SortListFlags {
- VL_DESC = 0x01, // sort descending or ascending
- VL_RESORT = 0x02, // instruct the code to resort the list in the next loop
- VL_REBUILD = 0x04 // create sort-listing to use for qsort and friends
-} SortListFlags;
-
-typedef struct Listing {
- bool order; // Ascending/descending
- byte criteria; // Sorting criteria
-} Listing;
-
-typedef struct list_d {
- uint16 list_length; // length of the list being sorted
- byte sort_type; // what criteria to sort on
- SortListFlags flags; // used to control sorting/resorting/etc.
- uint16 resort_timer; // resort list after a given amount of ticks if set
-} list_d;
-assert_compile(WINDOW_CUSTOM_SIZE >= sizeof(list_d));
-
-typedef struct message_d {
- int msg;
- int wparam;
- int lparam;
-} message_d;
-assert_compile(WINDOW_CUSTOM_SIZE >= sizeof(message_d));
-
-typedef struct dropdown_d {
- uint32 disabled_state;
- uint32 hidden_state;
- WindowClass parent_wnd_class;
- WindowNumber parent_wnd_num;
- byte parent_button;
- byte num_items;
- byte selected_index;
- const StringID *items;
- byte click_delay;
- bool drag_mode;
-} dropdown_d;
-assert_compile(WINDOW_CUSTOM_SIZE >= sizeof(dropdown_d));
-
-
-/****************** THESE ARE NOT WIDGET TYPES!!!!! *******************/
-enum WindowWidgetBehaviours {
- WWB_PUSHBUTTON = 1 << 5,
-
- WWB_MASK = 0xE0,
-};
-
-
-enum WindowWidgetTypes {
- WWT_EMPTY,
-
- WWT_PANEL, /* simple depressed panel */
- WWT_INSET, /* pressed (inset) panel, most commonly used as combo box _text_ area */
- WWT_IMGBTN, /* button with image */
- WWT_IMGBTN_2, /* button with diff image when clicked */
-
- WWT_TEXTBTN, /* button with text */
- WWT_TEXTBTN_2, /* button with diff text when clicked */
- WWT_LABEL, /* centered label */
- WWT_MATRIX,
- WWT_SCROLLBAR,
- WWT_FRAME, /* frame */
- WWT_CAPTION,
-
- WWT_HSCROLLBAR,
- WWT_STICKYBOX,
- WWT_SCROLL2BAR, /* 2nd vertical scrollbar*/
- WWT_RESIZEBOX,
- WWT_CLOSEBOX,
- WWT_LAST, /* Last Item. use WIDGETS_END to fill up padding!! */
-
- WWT_MASK = 0x1F,
-
- WWT_PUSHBTN = WWT_PANEL | WWB_PUSHBUTTON,
- WWT_PUSHTXTBTN = WWT_TEXTBTN | WWB_PUSHBUTTON,
- WWT_PUSHIMGBTN = WWT_IMGBTN | WWB_PUSHBUTTON,
-};
-
-#define WIDGETS_END WWT_LAST, RESIZE_NONE, 0, 0, 0, 0, 0, 0, STR_NULL
-
-enum WindowFlags {
- WF_TIMEOUT_SHL = 0,
- WF_TIMEOUT_MASK = 7,
- WF_DRAGGING = 1 << 3,
- WF_SCROLL_UP = 1 << 4,
- WF_SCROLL_DOWN = 1 << 5,
- WF_SCROLL_MIDDLE = 1 << 6,
- WF_HSCROLL = 1 << 7,
- WF_SIZING = 1 << 8,
- WF_STICKY = 1 << 9,
-
- WF_DISABLE_VP_SCROLL = 1 << 10,
-
- WF_WHITE_BORDER_ONE = 1 << 11,
- WF_WHITE_BORDER_MASK = 1 << 12 | WF_WHITE_BORDER_ONE,
- WF_SCROLL2 = 1 << 13,
-};
-
-/* window.c */
-void CallWindowEventNP(Window *w, int event);
-void CallWindowTickEvent(void);
-void SetWindowDirty(const Window *w);
-void SendWindowMessage(WindowClass wnd_class, WindowNumber wnd_num, uint msg, uint wparam, uint lparam);
-void SendWindowMessageClass(WindowClass wnd_class, uint msg, uint wparam, uint lparam);
-
-Window *FindWindowById(WindowClass cls, WindowNumber number);
-void DeleteWindow(Window *w);
-void DeletePlayerWindows(PlayerID pi);
-void ChangeWindowOwner(PlayerID old_player, PlayerID new_player);
-Window *BringWindowToFrontById(WindowClass cls, WindowNumber number);
-Window *FindWindowFromPt(int x, int y);
-
-bool IsWindowOfPrototype(const Window *w, const Widget *widget);
-void AssignWidgetToWindow(Window *w, const Widget *widget);
-Window *AllocateWindow(
- int x,
- int y,
- int width,
- int height,
- WindowProc *proc,
- WindowClass cls,
- const Widget *widget);
-
-Window *AllocateWindowDesc(const WindowDesc *desc);
-Window *AllocateWindowDescFront(const WindowDesc *desc, int window_number);
-
-void DrawWindowViewport(const Window *w);
-void ResizeWindow(Window *w, int x, int y);
-
-/**
- * Sets the enabled/disabled status of a widget.
- * By default, widgets are enabled.
- * On certain conditions, they have to be disabled.
- * @param w : Window on which the widget is located
- * @param widget_index : index of this widget in the window
- * @param disab_stat : status to use ie: disabled = true, enabled = false
- */
-static inline void SetWindowWidgetDisabledState(Window *w, byte widget_index, bool disab_stat)
-{
- assert(widget_index < w->widget_count);
- SB(w->widget[widget_index].display_flags, WIDG_DISABLED, 1, !!disab_stat);
-}
-
-/**
- * Sets a widget to disabled.
- * @param w : Window on which the widget is located
- * @param widget_index : index of this widget in the window
- */
-static inline void DisableWindowWidget(Window *w, byte widget_index)
-{
- SetWindowWidgetDisabledState(w, widget_index, true);
-}
-
-/**
- * Sets a widget to Enabled.
- * @param w : Window on which the widget is located
- * @param widget_index : index of this widget in the window
- */
-static inline void EnableWindowWidget(Window *w, byte widget_index)
-{
- SetWindowWidgetDisabledState(w, widget_index, false);
-}
-
-/**
- * Gets the enabled/disabled status of a widget.
- * @param w : Window on which the widget is located
- * @param widget_index : index of this widget in the window
- * @return status of the widget ie: disabled = true, enabled = false
- */
-static inline bool IsWindowWidgetDisabled(const Window *w, byte widget_index)
-{
- assert(widget_index < w->widget_count);
- return HASBIT(w->widget[widget_index].display_flags, WIDG_DISABLED);
-}
-
-/**
- * Sets the hidden/shown status of a widget.
- * By default, widgets are visible.
- * On certain conditions, they have to be hidden.
- * @param w Window on which the widget is located
- * @param widget_index index of this widget in the window
- * @param hidden_stat status to use ie. hidden = true, visible = false
- */
-static inline void SetWindowWidgetHiddenState(Window *w, byte widget_index, bool hidden_stat)
-{
- assert(widget_index < w->widget_count);
- SB(w->widget[widget_index].display_flags, WIDG_HIDDEN, 1, !!hidden_stat);
-}
-
-/**
- * Sets a widget hidden.
- * @param w : Window on which the widget is located
- * @param widget_index : index of this widget in the window
- */
-static inline void HideWindowWidget(Window *w, byte widget_index)
-{
- SetWindowWidgetHiddenState(w, widget_index, true);
-}
-
-/**
- * Sets a widget visible.
- * @param w : Window on which the widget is located
- * @param widget_index : index of this widget in the window
- */
-static inline void ShowWindowWidget(Window *w, byte widget_index)
-{
- SetWindowWidgetHiddenState(w, widget_index, false);
-}
-
-/**
- * Gets the visibility of a widget.
- * @param w : Window on which the widget is located
- * @param widget_index : index of this widget in the window
- * @return status of the widget ie: hidden = true, visible = false
- */
-static inline bool IsWindowWidgetHidden(const Window *w, byte widget_index)
-{
- assert(widget_index < w->widget_count);
- return HASBIT(w->widget[widget_index].display_flags, WIDG_HIDDEN);
-}
-
-/**
- * Sets the lowered/raised status of a widget.
- * @param w : Window on which the widget is located
- * @param widget_index : index of this widget in the window
- * @param hidden_stat : status to use ie: lowered = true, raised = false
- */
-static inline void SetWindowWidgetLoweredState(Window *w, byte widget_index, bool lowered_stat)
-{
- assert(widget_index < w->widget_count);
- SB(w->widget[widget_index].display_flags, WIDG_LOWERED, 1, !!lowered_stat);
-}
-
-/**
- * Invert the lowered/raised status of a widget.
- * @param w : Window on which the widget is located
- * @param widget_index : index of this widget in the window
- */
-static inline void ToggleWidgetLoweredState(Window *w, byte widget_index)
-{
- assert(widget_index < w->widget_count);
- TOGGLEBIT(w->widget[widget_index].display_flags, WIDG_LOWERED);
-}
-
-/**
- * Marks a widget as lowered.
- * @param w : Window on which the widget is located
- * @param widget_index : index of this widget in the window
- */
-static inline void LowerWindowWidget(Window *w, byte widget_index)
-{
- SetWindowWidgetLoweredState(w, widget_index, true);
-}
-
-/**
- * Marks a widget as raised.
- * @param w : Window on which the widget is located
- * @param widget_index : index of this widget in the window
- */
-static inline void RaiseWindowWidget(Window *w, byte widget_index)
-{
- SetWindowWidgetLoweredState(w, widget_index, false);
-}
-
-/**
- * Gets the lowered state of a widget.
- * @param w : Window on which the widget is located
- * @param widget_index : index of this widget in the window
- * @return status of the widget ie: lowered = true, raised= false
- */
-static inline bool IsWindowWidgetLowered(const Window *w, byte widget_index)
-{
- assert(widget_index < w->widget_count);
- return HASBIT(w->widget[widget_index].display_flags, WIDG_LOWERED);
-}
-
-void InitWindowSystem(void);
-void UnInitWindowSystem(void);
-void ResetWindowSystem(void);
-int GetMenuItemIndex(const Window *w, int x, int y);
-void InputLoop(void);
-void HandleKeypress(uint32 key);
-void HandleMouseEvents(void);
-void UpdateWindows(void);
-void InvalidateWidget(const Window *w, byte widget_index);
-void InvalidateThisWindowData(Window *w);
-void InvalidateWindowData(WindowClass cls, WindowNumber number);
-void RaiseWindowButtons(Window *w);
-void RelocateAllWindows(int neww, int newh);
-int PositionMainToolbar(Window *w);
-void CDECL SetWindowWidgetsDisabledState(Window *w, bool disab_stat, int widgets, ...);
-void CDECL SetWindowWidgetsHiddenState(Window *w, bool hidden_stat, int widgets, ...);
-void CDECL SetWindowWidgetsLoweredState(Window *w, bool lowered_stat, int widgets, ...);
-
-/* misc_gui.c*/
-void GuiShowTooltipsWithArgs(StringID str, uint paramcount, const uint params[]);
-static inline void GuiShowTooltips(StringID str)
-{
- GuiShowTooltipsWithArgs(str, 0, NULL);
-}
-
-/* widget.c */
-int GetWidgetFromPos(const Window *w, int x, int y);
-void DrawWindowWidgets(const Window *w);
-void ShowDropDownMenu(Window *w, const StringID *strings, int selected, int button, uint32 disabled_mask, uint32 hidden_mask);
-
-void HandleButtonClick(Window *w, byte widget);
-
-Window *GetCallbackWnd(void);
-void DeleteNonVitalWindows(void);
-void DeleteAllNonVitalWindows(void);
-void HideVitalWindows(void);
-void ShowVitalWindows(void);
-Window **FindWindowZPosition(const Window *w);
-
-/* window.c */
-extern Window *_z_windows[];
-extern Window **_last_z_window;
-#define FOR_ALL_WINDOWS(wz) for (wz = _z_windows; wz != _last_z_window; wz++)
-
-VARDEF Point _cursorpos_drag_start;
-
-VARDEF bool _left_button_down;
-VARDEF bool _left_button_clicked;
-
-VARDEF bool _right_button_down;
-VARDEF bool _right_button_clicked;
-
-VARDEF int _scrollbar_start_pos;
-VARDEF int _scrollbar_size;
-VARDEF byte _scroller_click_timeout;
-
-VARDEF bool _scrolling_scrollbar;
-VARDEF bool _scrolling_viewport;
-VARDEF bool _popup_menu_active;
-
-VARDEF byte _special_mouse_mode;
-enum SpecialMouseMode {
- WSM_NONE = 0,
- WSM_DRAGDROP = 1,
- WSM_SIZING = 2,
- WSM_PRESIZE = 3,
-};
-
-void ScrollbarClickHandler(Window *w, const Widget *wi, int x, int y);
-
-#endif /* WINDOW_H */