src/widgets/dropdown_type.h
author Tero Marttila <terom@fixme.fi>
Fri, 19 Dec 2008 02:20:26 +0200
changeset 10441 d09735696a9e
parent 10009 41d822dd3350
permissions -rw-r--r--
don't generate a heightmap for <64 tile maps
8284
ebdc5ba08874 (svn r11848) -Codechange: New class-based drop down list functionality. Lists are now dynamically generated, and can include parameters, or be extended however needed.
peter1138
parents:
diff changeset
     1
/* $Id$ */
ebdc5ba08874 (svn r11848) -Codechange: New class-based drop down list functionality. Lists are now dynamically generated, and can include parameters, or be extended however needed.
peter1138
parents:
diff changeset
     2
9111
48ce04029fe4 (svn r12971) -Documentation: add @file in files that missed them and add something more than whitespace as description of files that don't have a description.
rubidium
parents: 8907
diff changeset
     3
/** @file dropdown_type.h Types related to the drop down widget. */
48ce04029fe4 (svn r12971) -Documentation: add @file in files that missed them and add something more than whitespace as description of files that don't have a description.
rubidium
parents: 8907
diff changeset
     4
8284
ebdc5ba08874 (svn r11848) -Codechange: New class-based drop down list functionality. Lists are now dynamically generated, and can include parameters, or be extended however needed.
peter1138
parents:
diff changeset
     5
#ifndef WIDGETS_DROPDOWN_TYPE_H
ebdc5ba08874 (svn r11848) -Codechange: New class-based drop down list functionality. Lists are now dynamically generated, and can include parameters, or be extended however needed.
peter1138
parents:
diff changeset
     6
#define WIDGETS_DROPDOWN_TYPE_H
ebdc5ba08874 (svn r11848) -Codechange: New class-based drop down list functionality. Lists are now dynamically generated, and can include parameters, or be extended however needed.
peter1138
parents:
diff changeset
     7
ebdc5ba08874 (svn r11848) -Codechange: New class-based drop down list functionality. Lists are now dynamically generated, and can include parameters, or be extended however needed.
peter1138
parents:
diff changeset
     8
#include "../window_type.h"
ebdc5ba08874 (svn r11848) -Codechange: New class-based drop down list functionality. Lists are now dynamically generated, and can include parameters, or be extended however needed.
peter1138
parents:
diff changeset
     9
#include <list>
ebdc5ba08874 (svn r11848) -Codechange: New class-based drop down list functionality. Lists are now dynamically generated, and can include parameters, or be extended however needed.
peter1138
parents:
diff changeset
    10
ebdc5ba08874 (svn r11848) -Codechange: New class-based drop down list functionality. Lists are now dynamically generated, and can include parameters, or be extended however needed.
peter1138
parents:
diff changeset
    11
/**
ebdc5ba08874 (svn r11848) -Codechange: New class-based drop down list functionality. Lists are now dynamically generated, and can include parameters, or be extended however needed.
peter1138
parents:
diff changeset
    12
 * Base list item class from which others are derived. If placed in a list it
ebdc5ba08874 (svn r11848) -Codechange: New class-based drop down list functionality. Lists are now dynamically generated, and can include parameters, or be extended however needed.
peter1138
parents:
diff changeset
    13
 * will appear as a horizontal line in the menu.
ebdc5ba08874 (svn r11848) -Codechange: New class-based drop down list functionality. Lists are now dynamically generated, and can include parameters, or be extended however needed.
peter1138
parents:
diff changeset
    14
 */
ebdc5ba08874 (svn r11848) -Codechange: New class-based drop down list functionality. Lists are now dynamically generated, and can include parameters, or be extended however needed.
peter1138
parents:
diff changeset
    15
class DropDownListItem {
ebdc5ba08874 (svn r11848) -Codechange: New class-based drop down list functionality. Lists are now dynamically generated, and can include parameters, or be extended however needed.
peter1138
parents:
diff changeset
    16
public:
ebdc5ba08874 (svn r11848) -Codechange: New class-based drop down list functionality. Lists are now dynamically generated, and can include parameters, or be extended however needed.
peter1138
parents:
diff changeset
    17
	int result;  ///< Result code to return to window on selection
ebdc5ba08874 (svn r11848) -Codechange: New class-based drop down list functionality. Lists are now dynamically generated, and can include parameters, or be extended however needed.
peter1138
parents:
diff changeset
    18
	bool masked; ///< Masked and unselectable item
ebdc5ba08874 (svn r11848) -Codechange: New class-based drop down list functionality. Lists are now dynamically generated, and can include parameters, or be extended however needed.
peter1138
parents:
diff changeset
    19
8290
ff0b2196d09b (svn r11854) -Fix (r11848): Nightly build farm showed up more compiler warnings... c++ is fun
peter1138
parents: 8285
diff changeset
    20
	DropDownListItem(int result, bool masked) : result(result), masked(masked) {}
ff0b2196d09b (svn r11854) -Fix (r11848): Nightly build farm showed up more compiler warnings... c++ is fun
peter1138
parents: 8285
diff changeset
    21
	virtual ~DropDownListItem() {}
9859
28606a486c52 (svn r14004) -Codechange: Clean of drop down lists.
peter1138
parents: 9111
diff changeset
    22
28606a486c52 (svn r14004) -Codechange: Clean of drop down lists.
peter1138
parents: 9111
diff changeset
    23
	virtual bool Selectable() const { return false; }
28606a486c52 (svn r14004) -Codechange: Clean of drop down lists.
peter1138
parents: 9111
diff changeset
    24
	virtual uint Height(uint width) const { return 10; }
9868
c529be2a15c5 (svn r14014) -Codechange: Add support for automatically sizing drop down lists to the widest list item.
peter1138
parents: 9859
diff changeset
    25
	virtual uint Width() const { return 0; }
9859
28606a486c52 (svn r14004) -Codechange: Clean of drop down lists.
peter1138
parents: 9111
diff changeset
    26
	virtual void Draw(int x, int y, uint width, uint height, bool sel, int bg_colour) const;
8284
ebdc5ba08874 (svn r11848) -Codechange: New class-based drop down list functionality. Lists are now dynamically generated, and can include parameters, or be extended however needed.
peter1138
parents:
diff changeset
    27
};
ebdc5ba08874 (svn r11848) -Codechange: New class-based drop down list functionality. Lists are now dynamically generated, and can include parameters, or be extended however needed.
peter1138
parents:
diff changeset
    28
ebdc5ba08874 (svn r11848) -Codechange: New class-based drop down list functionality. Lists are now dynamically generated, and can include parameters, or be extended however needed.
peter1138
parents:
diff changeset
    29
/**
ebdc5ba08874 (svn r11848) -Codechange: New class-based drop down list functionality. Lists are now dynamically generated, and can include parameters, or be extended however needed.
peter1138
parents:
diff changeset
    30
 * Common string list item.
ebdc5ba08874 (svn r11848) -Codechange: New class-based drop down list functionality. Lists are now dynamically generated, and can include parameters, or be extended however needed.
peter1138
parents:
diff changeset
    31
 */
ebdc5ba08874 (svn r11848) -Codechange: New class-based drop down list functionality. Lists are now dynamically generated, and can include parameters, or be extended however needed.
peter1138
parents:
diff changeset
    32
class DropDownListStringItem : public DropDownListItem {
ebdc5ba08874 (svn r11848) -Codechange: New class-based drop down list functionality. Lists are now dynamically generated, and can include parameters, or be extended however needed.
peter1138
parents:
diff changeset
    33
public:
ebdc5ba08874 (svn r11848) -Codechange: New class-based drop down list functionality. Lists are now dynamically generated, and can include parameters, or be extended however needed.
peter1138
parents:
diff changeset
    34
	StringID string; ///< String ID of item
ebdc5ba08874 (svn r11848) -Codechange: New class-based drop down list functionality. Lists are now dynamically generated, and can include parameters, or be extended however needed.
peter1138
parents:
diff changeset
    35
8290
ff0b2196d09b (svn r11854) -Fix (r11848): Nightly build farm showed up more compiler warnings... c++ is fun
peter1138
parents: 8285
diff changeset
    36
	DropDownListStringItem(StringID string, int result, bool masked) : DropDownListItem(result, masked), string(string) {}
8293
b00758aea7e7 (svn r11857) -Fix: some compile time warnings.
rubidium
parents: 8290
diff changeset
    37
	virtual ~DropDownListStringItem() {}
8284
ebdc5ba08874 (svn r11848) -Codechange: New class-based drop down list functionality. Lists are now dynamically generated, and can include parameters, or be extended however needed.
peter1138
parents:
diff changeset
    38
9859
28606a486c52 (svn r14004) -Codechange: Clean of drop down lists.
peter1138
parents: 9111
diff changeset
    39
	virtual bool Selectable() const { return true; }
9868
c529be2a15c5 (svn r14014) -Codechange: Add support for automatically sizing drop down lists to the widest list item.
peter1138
parents: 9859
diff changeset
    40
	virtual uint Width() const;
9859
28606a486c52 (svn r14004) -Codechange: Clean of drop down lists.
peter1138
parents: 9111
diff changeset
    41
	virtual void Draw(int x, int y, uint width, uint height, bool sel, int bg_colour) const;
28606a486c52 (svn r14004) -Codechange: Clean of drop down lists.
peter1138
parents: 9111
diff changeset
    42
	virtual StringID String() const { return this->string; }
8284
ebdc5ba08874 (svn r11848) -Codechange: New class-based drop down list functionality. Lists are now dynamically generated, and can include parameters, or be extended however needed.
peter1138
parents:
diff changeset
    43
};
ebdc5ba08874 (svn r11848) -Codechange: New class-based drop down list functionality. Lists are now dynamically generated, and can include parameters, or be extended however needed.
peter1138
parents:
diff changeset
    44
ebdc5ba08874 (svn r11848) -Codechange: New class-based drop down list functionality. Lists are now dynamically generated, and can include parameters, or be extended however needed.
peter1138
parents:
diff changeset
    45
/**
ebdc5ba08874 (svn r11848) -Codechange: New class-based drop down list functionality. Lists are now dynamically generated, and can include parameters, or be extended however needed.
peter1138
parents:
diff changeset
    46
 * String list item with parameters.
ebdc5ba08874 (svn r11848) -Codechange: New class-based drop down list functionality. Lists are now dynamically generated, and can include parameters, or be extended however needed.
peter1138
parents:
diff changeset
    47
 */
ebdc5ba08874 (svn r11848) -Codechange: New class-based drop down list functionality. Lists are now dynamically generated, and can include parameters, or be extended however needed.
peter1138
parents:
diff changeset
    48
class DropDownListParamStringItem : public DropDownListStringItem {
ebdc5ba08874 (svn r11848) -Codechange: New class-based drop down list functionality. Lists are now dynamically generated, and can include parameters, or be extended however needed.
peter1138
parents:
diff changeset
    49
public:
ebdc5ba08874 (svn r11848) -Codechange: New class-based drop down list functionality. Lists are now dynamically generated, and can include parameters, or be extended however needed.
peter1138
parents:
diff changeset
    50
	uint64 decode_params[10]; ///< Parameters of the string
ebdc5ba08874 (svn r11848) -Codechange: New class-based drop down list functionality. Lists are now dynamically generated, and can include parameters, or be extended however needed.
peter1138
parents:
diff changeset
    51
8290
ff0b2196d09b (svn r11854) -Fix (r11848): Nightly build farm showed up more compiler warnings... c++ is fun
peter1138
parents: 8285
diff changeset
    52
	DropDownListParamStringItem(StringID string, int result, bool masked) : DropDownListStringItem(string, result, masked) {}
8293
b00758aea7e7 (svn r11857) -Fix: some compile time warnings.
rubidium
parents: 8290
diff changeset
    53
	virtual ~DropDownListParamStringItem() {}
8285
0a7bd8284319 (svn r11849) -Fix (r11848): Incomplete(?) class broke MSVC/mingw compilation
peter1138
parents: 8284
diff changeset
    54
9859
28606a486c52 (svn r14004) -Codechange: Clean of drop down lists.
peter1138
parents: 9111
diff changeset
    55
	virtual StringID String() const;
28606a486c52 (svn r14004) -Codechange: Clean of drop down lists.
peter1138
parents: 9111
diff changeset
    56
	virtual void SetParam(uint index, uint64 value) { decode_params[index] = value; }
8284
ebdc5ba08874 (svn r11848) -Codechange: New class-based drop down list functionality. Lists are now dynamically generated, and can include parameters, or be extended however needed.
peter1138
parents:
diff changeset
    57
};
ebdc5ba08874 (svn r11848) -Codechange: New class-based drop down list functionality. Lists are now dynamically generated, and can include parameters, or be extended however needed.
peter1138
parents:
diff changeset
    58
ebdc5ba08874 (svn r11848) -Codechange: New class-based drop down list functionality. Lists are now dynamically generated, and can include parameters, or be extended however needed.
peter1138
parents:
diff changeset
    59
/**
ebdc5ba08874 (svn r11848) -Codechange: New class-based drop down list functionality. Lists are now dynamically generated, and can include parameters, or be extended however needed.
peter1138
parents:
diff changeset
    60
 * A drop down list is a collection of drop down list items.
ebdc5ba08874 (svn r11848) -Codechange: New class-based drop down list functionality. Lists are now dynamically generated, and can include parameters, or be extended however needed.
peter1138
parents:
diff changeset
    61
 */
ebdc5ba08874 (svn r11848) -Codechange: New class-based drop down list functionality. Lists are now dynamically generated, and can include parameters, or be extended however needed.
peter1138
parents:
diff changeset
    62
typedef std::list<DropDownListItem *> DropDownList;
ebdc5ba08874 (svn r11848) -Codechange: New class-based drop down list functionality. Lists are now dynamically generated, and can include parameters, or be extended however needed.
peter1138
parents:
diff changeset
    63
ebdc5ba08874 (svn r11848) -Codechange: New class-based drop down list functionality. Lists are now dynamically generated, and can include parameters, or be extended however needed.
peter1138
parents:
diff changeset
    64
/**
ebdc5ba08874 (svn r11848) -Codechange: New class-based drop down list functionality. Lists are now dynamically generated, and can include parameters, or be extended however needed.
peter1138
parents:
diff changeset
    65
 * Show a drop down list.
ebdc5ba08874 (svn r11848) -Codechange: New class-based drop down list functionality. Lists are now dynamically generated, and can include parameters, or be extended however needed.
peter1138
parents:
diff changeset
    66
 * @param w        Parent window for the list.
ebdc5ba08874 (svn r11848) -Codechange: New class-based drop down list functionality. Lists are now dynamically generated, and can include parameters, or be extended however needed.
peter1138
parents:
diff changeset
    67
 * @param list     Prepopulated DropDownList. Will be deleted when the list is
ebdc5ba08874 (svn r11848) -Codechange: New class-based drop down list functionality. Lists are now dynamically generated, and can include parameters, or be extended however needed.
peter1138
parents:
diff changeset
    68
 *                 closed.
ebdc5ba08874 (svn r11848) -Codechange: New class-based drop down list functionality. Lists are now dynamically generated, and can include parameters, or be extended however needed.
peter1138
parents:
diff changeset
    69
 * @param selected The initially selected list item.
ebdc5ba08874 (svn r11848) -Codechange: New class-based drop down list functionality. Lists are now dynamically generated, and can include parameters, or be extended however needed.
peter1138
parents:
diff changeset
    70
 * @param button   The widget within the parent window that is used to determine
ebdc5ba08874 (svn r11848) -Codechange: New class-based drop down list functionality. Lists are now dynamically generated, and can include parameters, or be extended however needed.
peter1138
parents:
diff changeset
    71
 *                 the list's location.
8877
f09f03b0dc64 (svn r12644) -Codechange: rework the order gui a little to prepare it for some future changes.
rubidium
parents: 8293
diff changeset
    72
 * @param width    Override the width determined by the selected widget.
10009
41d822dd3350 (svn r14168) -Codechange: Make dropdown 'auto_width' a separate parameter, so that a minimum width can be specified.
peter1138
parents: 9869
diff changeset
    73
 * @param auto_width Maximum width is determined by the widest item in the list.
9869
548d99e11ad7 (svn r14015) -Codechange: Add facility for a drop down list to always close (if requested) when the mouse button is released.
peter1138
parents: 9868
diff changeset
    74
 * @param instant_close Set to true if releasing mouse button should close the
548d99e11ad7 (svn r14015) -Codechange: Add facility for a drop down list to always close (if requested) when the mouse button is released.
peter1138
parents: 9868
diff changeset
    75
 *                      list regardless of where the cursor is.
8284
ebdc5ba08874 (svn r11848) -Codechange: New class-based drop down list functionality. Lists are now dynamically generated, and can include parameters, or be extended however needed.
peter1138
parents:
diff changeset
    76
 */
10009
41d822dd3350 (svn r14168) -Codechange: Make dropdown 'auto_width' a separate parameter, so that a minimum width can be specified.
peter1138
parents: 9869
diff changeset
    77
void ShowDropDownList(Window *w, DropDownList *list, int selected, int button, uint width = 0, bool auto_width = false, bool instant_close = false);
8284
ebdc5ba08874 (svn r11848) -Codechange: New class-based drop down list functionality. Lists are now dynamically generated, and can include parameters, or be extended however needed.
peter1138
parents:
diff changeset
    78
ebdc5ba08874 (svn r11848) -Codechange: New class-based drop down list functionality. Lists are now dynamically generated, and can include parameters, or be extended however needed.
peter1138
parents:
diff changeset
    79
#endif /* WIDGETS_DROPDOWN_TYPE_H */