|
Rapicorn - Experimental UI Toolkit - Source Code 10.08.1
|
00001 /* Rapicorn 00002 * Copyright (C) 2005 Tim Janik 00003 * 00004 * This library is free software; you can redistribute it and/or 00005 * modify it under the terms of the GNU Lesser General Public 00006 * License as published by the Free Software Foundation; either 00007 * version 2.1 of the License, or (at your option) any later version. 00008 * 00009 * This library is distributed in the hope that it will be useful, 00010 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00012 * Lesser General Public License for more details. 00013 * 00014 * A copy of the GNU Lesser General Public License should ship along 00015 * with this library; if not, see http://www.gnu.org/copyleft/. 00016 */ 00017 #ifndef __RAPICORN_ENUMDEFS_HH__ 00018 #define __RAPICORN_ENUMDEFS_HH__ 00019 00020 #include <rcore/utilities.hh> 00021 00022 namespace Rapicorn { 00023 00024 /* --- enum/flags type descriptions --- */ 00025 struct EnumClass { 00026 struct Value { 00027 const int64 value; 00028 const char *const value_name; 00029 const uint name_length; 00030 }; 00031 virtual ~EnumClass () {} 00032 virtual void list_values (uint &n_values, const Value* &values) const = 0; 00033 virtual const char* enum_name () const = 0; 00034 virtual bool flag_combinable () const = 0; 00035 virtual int64 constrain (int64 value) const = 0; 00036 bool match_partial (const char *value_name1, const char *partial_value_name) const; 00037 bool match (const char *value_name1, const char *value_name2) const; 00038 const Value* find_first (int64 value) const; 00039 const Value* find_first (const String &value_name) const; 00040 int64 parse (const char *value_string, String *error = NULL) const; 00041 String string (int64 value) const; 00042 }; 00043 template<typename EnumType> EnumType inline enum_type_constrain (EnumType value) { return value; } 00044 template<typename EType> 00045 struct EnumType : public virtual EnumClass { 00046 typedef EType Type; 00047 virtual void list_values (uint &c_n_values, const Value* &c_values) const { c_n_values = n_values, c_values = values; } 00048 virtual const char* enum_name () const { return ename; } 00049 virtual bool flag_combinable () const { return false; } 00050 virtual int64 constrain (int64 value) const { return enum_type_constrain<EType> (EType (value)); } 00051 private: 00052 static const uint n_values; 00053 static const Value *const values; 00054 static const char *ename; 00055 }; 00056 template<typename EType> 00057 struct FlagsType : public virtual EnumClass { 00058 typedef EType Type; 00059 virtual void list_values (uint &c_n_values, const Value* &c_values) const { c_n_values = n_values, c_values = values; } 00060 virtual const char* enum_name () const { return ename; } 00061 virtual bool flag_combinable () const { return true; } 00062 virtual int64 constrain (int64 value) const { return enum_type_constrain<EType> (EType (value)); } 00063 private: 00064 static const uint n_values; 00065 static const Value *const values; 00066 static const char *ename; 00067 }; 00068 00069 /* --- enums --- */ 00070 typedef enum { 00071 ADJUSTMENT_SOURCE_NONE = 0, 00072 ADJUSTMENT_SOURCE_ANCESTRY_HORIZONTAL, 00073 ADJUSTMENT_SOURCE_ANCESTRY_VERTICAL, 00074 ADJUSTMENT_SOURCE_ANCESTRY_VALUE 00075 } AdjustmentSourceType; 00076 typedef EnumType<AdjustmentSourceType> EnumTypeAdjustmentSourceType; 00077 00078 typedef enum { 00079 ALIGN_LEFT = 1, 00080 ALIGN_CENTER, 00081 ALIGN_RIGHT, 00082 } AlignType; 00083 typedef EnumType<AlignType> EnumTypeAlignType; 00084 00088 typedef enum { 00089 ANCHOR_NONE, 00090 ANCHOR_CENTER, 00091 ANCHOR_EAST, 00092 ANCHOR_NORTH_EAST, 00093 ANCHOR_NORTH, 00094 ANCHOR_NORTH_WEST, 00095 ANCHOR_WEST, 00096 ANCHOR_SOUTH_WEST, 00097 ANCHOR_SOUTH, 00098 ANCHOR_SOUTH_EAST, 00099 } AnchorType; 00100 typedef EnumType<AnchorType> EnumTypeAnchorType; 00101 00102 typedef enum { 00103 CLICK_ON_PRESS = 1, 00104 CLICK_ON_RELEASE, 00105 CLICK_SLOW_REPEAT, 00106 CLICK_FAST_REPEAT, 00107 CLICK_KEY_REPEAT, 00108 } ClickType; 00109 typedef EnumType<ClickType> EnumTypeClickType; 00110 00111 typedef enum { 00112 COLOR_NONE, 00113 COLOR_FOREGROUND, 00114 COLOR_BACKGROUND, 00115 COLOR_BACKGROUND_EVEN, 00116 COLOR_BACKGROUND_ODD, 00117 COLOR_DARK, 00118 COLOR_DARK_SHADOW, 00119 COLOR_DARK_GLINT, 00120 COLOR_LIGHT, 00121 COLOR_LIGHT_SHADOW, 00122 COLOR_LIGHT_GLINT, 00123 COLOR_FOCUS, 00124 COLOR_BLACK, 00125 COLOR_WHITE, 00126 COLOR_RED, 00127 COLOR_YELLOW, 00128 COLOR_GREEN, 00129 COLOR_CYAN, 00130 COLOR_BLUE, 00131 COLOR_MAGENTA, 00132 } ColorType; 00133 typedef EnumType<ColorType> EnumTypeColorType; 00134 00135 typedef enum { 00136 COLOR_INHERIT, 00137 COLOR_NORMAL, 00138 COLOR_SELECTED, 00139 COLOR_BASE, 00140 } ColorSchemeType; 00141 typedef EnumType<ColorSchemeType> EnumTypeColorSchemeType; 00142 00143 typedef enum { 00144 DIR_NONE, 00145 DIR_RIGHT, 00146 DIR_UP, 00147 DIR_LEFT, 00148 DIR_DOWN, 00149 } DirType; 00150 typedef EnumType<DirType> EnumTypeDirType; 00151 00152 typedef enum { 00153 ELLIPSIZE_START = 1, 00154 ELLIPSIZE_MIDDLE, 00155 ELLIPSIZE_END 00156 } EllipsizeType; 00157 typedef EnumType<EllipsizeType> EnumTypeEllipsizeType; 00158 00159 typedef enum { 00160 FOCUS_NEXT = 1, 00161 FOCUS_PREV, 00162 FOCUS_RIGHT, 00163 FOCUS_UP, 00164 FOCUS_LEFT, 00165 FOCUS_DOWN 00166 } FocusDirType; 00167 typedef EnumType<FocusDirType> EnumTypeFocusDirType; 00168 00169 typedef enum { 00170 FRAME_NONE, 00171 FRAME_BACKGROUND, 00172 FRAME_IN, 00173 FRAME_OUT, 00174 FRAME_ETCHED_IN, 00175 FRAME_ETCHED_OUT, 00176 FRAME_FOCUS, 00177 FRAME_ALERT_FOCUS, 00178 } FrameType; 00179 typedef EnumType<FrameType> EnumTypeFrameType; 00180 00181 typedef enum { 00182 LIGHTING_NONE, 00183 LIGHTING_UPPER_LEFT, 00184 LIGHTING_UPPER_RIGHT, 00185 LIGHTING_LOWER_LEFT, 00186 LIGHTING_LOWER_RIGHT, 00187 LIGHTING_CENTER, 00188 LIGHTING_DIFFUSE, 00189 LIGHTING_DARK_UPPER_LEFT = 0x80 | LIGHTING_UPPER_LEFT, 00190 LIGHTING_DARK_UPPER_RIGHT = 0x80 | LIGHTING_UPPER_RIGHT, 00191 LIGHTING_DARK_LOWER_LEFT = 0x80 | LIGHTING_LOWER_LEFT, 00192 LIGHTING_DARK_LOWER_RIGHT = 0x80 | LIGHTING_LOWER_RIGHT, 00193 LIGHTING_DARK_CENTER = 0x80 | LIGHTING_CENTER, 00194 LIGHTING_DARK_DIFFUSE = 0x80 | LIGHTING_DIFFUSE, 00195 } LightingType; 00196 static const LightingType LIGHTING_DARK_FLAG = LightingType (0x80); 00197 typedef EnumType<LightingType> EnumTypeLightingType; 00198 inline LightingType operator& (LightingType s1, LightingType s2) { return LightingType (s1 & (uint64) s2); } 00199 inline LightingType& operator&= (LightingType &s1, LightingType s2) { s1 = s1 & s2; return s1; } 00200 inline LightingType operator| (LightingType s1, LightingType s2) { return LightingType (s1 | (uint64) s2); } 00201 inline LightingType& operator|= (LightingType &s1, LightingType s2) { s1 = s1 | s2; return s1; } 00202 00203 typedef enum { 00204 SELECTION_NONE, 00205 SELECTION_BROWSE, 00206 SELECTION_SINGLE, 00207 SELECTION_INTERVAL, 00208 SELECTION_MULTIPLE, 00209 } SelectionMode; 00210 typedef EnumType<SelectionMode> EnumTypeSelectionMode; 00211 00212 typedef enum { 00213 SIZE_POLICY_NORMAL = 0, 00214 SIZE_POLICY_WIDTH_FROM_HEIGHT, 00215 SIZE_POLICY_HEIGHT_FROM_WIDTH, 00216 } SizePolicyType; 00217 typedef EnumType<SizePolicyType> EnumTypeSizePolicyType; 00218 00219 typedef enum { 00220 STATE_INSENSITIVE = 1 << 0, 00221 STATE_PRELIGHT = 1 << 1, 00222 STATE_IMPRESSED = 1 << 2, 00223 STATE_FOCUS = 1 << 3, 00224 STATE_DEFAULT = 1 << 4, 00225 } StateType; 00226 static const StateType STATE_NORMAL = StateType (0); 00227 static const StateType STATE_MASK = StateType (0x1f); 00228 typedef FlagsType<StateType> FlagsTypeStateType; 00229 inline StateType operator& (StateType s1, StateType s2) { return StateType (s1 & (uint64) s2); } 00230 inline StateType& operator&= (StateType &s1, StateType s2) { s1 = s1 & s2; return s1; } 00231 inline StateType operator| (StateType s1, StateType s2) { return StateType (s1 | (uint64) s2); } 00232 inline StateType& operator|= (StateType &s1, StateType s2) { s1 = s1 | s2; return s1; } 00233 00234 typedef enum { 00235 TEXT_MODE_WRAPPED = 1, 00236 TEXT_MODE_ELLIPSIZED, 00237 TEXT_MODE_SINGLE_LINE, 00238 } TextMode; 00239 typedef EnumType<TextMode> EnumTypeTextMode; 00240 00241 typedef enum { 00242 /* main window types */ 00243 WINDOW_TYPE_NORMAL = 0, 00244 WINDOW_TYPE_DESKTOP, 00245 WINDOW_TYPE_DOCK, 00246 WINDOW_TYPE_TOOLBAR, 00247 WINDOW_TYPE_MENU, 00248 WINDOW_TYPE_UTILITY, 00249 WINDOW_TYPE_SPLASH, 00250 WINDOW_TYPE_DIALOG, 00251 WINDOW_TYPE_DROPDOWN_MENU, 00252 WINDOW_TYPE_POPUP_MENU, 00253 WINDOW_TYPE_TOOLTIP, 00254 WINDOW_TYPE_NOTIFICATION, 00255 WINDOW_TYPE_COMBO, 00256 WINDOW_TYPE_DND, 00257 } WindowType; 00258 typedef EnumType<WindowType> EnumTypeWindowType; 00259 00260 } // Rapicorn 00261 00262 #endif /* __RAPICORN_ENUMDEFS_HH__ */
1.7.4