Rapicorn - Experimental UI Toolkit - Source Code 10.08.1
enumdefs.hh
Go to the documentation of this file.
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__ */
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Defines