127 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			127 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* $Id$ */
 | |
| 
 | |
| /** @file widget_type.h Definitions about widgets. */
 | |
| 
 | |
| #ifndef WIDGET_TYPE_H
 | |
| #define WIDGET_TYPE_H
 | |
| 
 | |
| #include "core/bitmath_func.hpp"
 | |
| #include "strings_type.h"
 | |
| #include "gfx_type.h"
 | |
| 
 | |
| /* 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 DisplayFlags {
 | |
| 	RESIZE_NONE   = 0,  ///< no resize required
 | |
| 
 | |
| 	RESIZE_LEFT   = 1,  ///< left resize flag
 | |
| 	RESIZE_RIGHT  = 2,  ///< rigth resize flag
 | |
| 	RESIZE_TOP    = 4,  ///< top resize flag
 | |
| 	RESIZE_BOTTOM = 8,  ///< bottom resize flag
 | |
| 
 | |
| 	RESIZE_LR     = RESIZE_LEFT  | RESIZE_RIGHT,   ///<  combination of left and right resize flags
 | |
| 	RESIZE_RB     = RESIZE_RIGHT | RESIZE_BOTTOM,  ///<  combination of right and bottom resize flags
 | |
| 	RESIZE_TB     = RESIZE_TOP   | RESIZE_BOTTOM,  ///<  combination of top and bottom resize flags
 | |
| 	RESIZE_LRB    = RESIZE_LEFT  | RESIZE_RIGHT  | RESIZE_BOTTOM, ///< combination of left, right and bottom resize flags
 | |
| 	RESIZE_LRTB   = RESIZE_LEFT  | RESIZE_RIGHT  | RESIZE_TOP | RESIZE_BOTTOM,  ///<  combination of all resize flags
 | |
| 	RESIZE_RTB    = RESIZE_RIGHT | RESIZE_TOP    | RESIZE_BOTTOM, ///<  combination of right, top and bottom resize flag
 | |
| 
 | |
| 	/* 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
 | |
| };
 | |
| DECLARE_ENUM_AS_BIT_SET(DisplayFlags);
 | |
| 
 | |
| enum {
 | |
| 	WIDGET_LIST_END = -1, ///< indicate the end of widgets' list for vararg functions
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * Window widget types
 | |
|  */
 | |
| enum WidgetType {
 | |
| 	WWT_EMPTY,      ///< Empty widget, place holder to reserve space in widget array
 | |
| 
 | |
| 	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_TEXT,       ///< Pure simple text
 | |
| 	WWT_MATRIX,     ///< List of items underneath each other
 | |
| 	WWT_SCROLLBAR,  ///< Vertical scrollbar
 | |
| 	WWT_FRAME,      ///< Frame
 | |
| 	WWT_CAPTION,    ///< Window caption (window title between closebox and stickybox)
 | |
| 
 | |
| 	WWT_HSCROLLBAR, ///< Horizontal scrollbar
 | |
| 	WWT_STICKYBOX,  ///< Sticky box (normally at top-right of a window)
 | |
| 	WWT_SCROLL2BAR, ///< 2nd vertical scrollbar
 | |
| 	WWT_RESIZEBOX,  ///< Resize box (normally at bottom-right of a window)
 | |
| 	WWT_CLOSEBOX,   ///< Close box (at top-left of a window)
 | |
| 	WWT_DROPDOWN,   ///< Raised drop down list (regular)
 | |
| 	WWT_DROPDOWNIN, ///< Inset drop down list (used on game options only)
 | |
| 	WWT_EDITBOX,    ///< a textbox for typing
 | |
| 	WWT_LAST,       ///< Last Item. use WIDGETS_END to fill up padding!!
 | |
| 
 | |
| 	WWT_MASK = 0x1F,
 | |
| 
 | |
| 	WWB_PUSHBUTTON  = 1 << 5,
 | |
| 	WWB_MASK        = 0xE0,
 | |
| 
 | |
| 	WWT_PUSHBTN     = WWT_PANEL   | WWB_PUSHBUTTON,
 | |
| 	WWT_PUSHTXTBTN  = WWT_TEXTBTN | WWB_PUSHBUTTON,
 | |
| 	WWT_PUSHIMGBTN  = WWT_IMGBTN  | WWB_PUSHBUTTON,
 | |
| };
 | |
| 
 | |
| /** Marker for the "end of widgets" in a Window(Desc) widget table. */
 | |
| #define WIDGETS_END WWT_LAST, RESIZE_NONE, INVALID_COLOUR, 0, 0, 0, 0, 0, STR_NULL
 | |
| 
 | |
| /**
 | |
|  * Window widget data structure
 | |
|  */
 | |
| struct Widget {
 | |
| 	WidgetType type;                  ///< Widget type
 | |
| 	DisplayFlags display_flags;       ///< Resize direction, alignment, etc. during resizing
 | |
| 	Colours colour;                   ///< Widget colour, see docs/ottd-colourtext-palette.png
 | |
| 	int16 left;                       ///< The left edge of the widget
 | |
| 	int16 right;                      ///< The right edge of the widget
 | |
| 	int16 top;                        ///< The top edge of the widget
 | |
| 	int16 bottom;                     ///< The bottom edge of the widget
 | |
| 	uint16 data;                      ///< The String/Image or special code (list-matrixes) of a widget
 | |
| 	StringID tooltips;                ///< Tooltips that are shown when rightclicking on a widget
 | |
| };
 | |
| 
 | |
| #endif /* WIDGET_TYPE_H */
 | 
