|
PieDock 1.6.0
|
00001 /* 00002 * O ,- 00003 * ° o . -´ ' ,- 00004 * ° .´ ` . ´,´ 00005 * ( ° )) . ( 00006 * `-;_ . -´ `.`. 00007 * `._' ´ 00008 * 00009 * Copyright (c) 2007-2012 Markus Fisch <mf@markusfisch.de> 00010 * 00011 * Licensed under the MIT license: 00012 * http://www.opensource.org/licenses/mit-license.php 00013 */ 00014 #ifndef _PieDock_Settings_ 00015 #define _PieDock_Settings_ 00016 00017 #include "MenuItems.h" 00018 #include "IconMap.h" 00019 #include "ActiveIndicator.h" 00020 #include "Text.h" 00021 #include "WorkspaceLayout.h" 00022 00023 #include <X11/Xlib.h> 00024 #include <vector> 00025 #include <string> 00026 #include <istream> 00027 #include <stdexcept> 00028 00029 namespace PieDock 00030 { 00036 class Settings 00037 { 00038 public: 00039 enum Action 00040 { 00041 NoAction, 00042 Launch, 00043 ShowNext, 00044 ShowPrevious, 00045 ShowWindows, 00046 Hide, 00047 Close, 00048 SpinUp, 00049 SpinDown, 00050 SpinNext, 00051 SpinPrevious, 00052 Disappear 00053 }; 00054 00055 enum CenterAction 00056 { 00057 CenterIgnore, 00058 CenterNearestIcon, 00059 CenterDisappear 00060 }; 00061 00062 typedef struct Trigger 00063 { 00064 unsigned int modifier; 00065 union 00066 { 00067 unsigned int button; 00068 KeySym keySym; 00069 }; 00070 std::string menuName; 00071 unsigned int eventMask; 00072 } Key, Button; 00073 00074 typedef struct 00075 { 00076 unsigned int button; 00077 Action action; 00078 } ButtonFunction; 00079 00080 typedef struct 00081 { 00082 KeySym keySym; 00083 Action action; 00084 unsigned int eventType; 00085 } KeyFunction; 00086 00087 typedef struct 00088 { 00089 int cornerRadius; 00090 int alpha; 00091 unsigned int color; 00092 } CartoucheSettings; 00093 00094 typedef struct 00095 { 00096 bool visible; 00097 WorkspaceLayout::PreferredVirtualLayout preferredLayout; 00098 unsigned int workspaceColor; 00099 unsigned int windowColor; 00100 } WorkspaceDisplaySettings; 00101 00102 typedef std::vector<Key> Keys; 00103 typedef std::vector<Button> Buttons; 00104 typedef std::vector<ButtonFunction> ButtonFunctions; 00105 typedef std::vector<KeyFunction> KeyFunctions; 00106 typedef std::map<std::string, MenuItems> Menus; 00107 typedef std::map<std::string, bool> WindowsToIgnore; 00108 00109 Settings() {} 00110 virtual ~Settings() { clearMenus(); } 00111 inline const std::string &getConfigurationFile() const { 00112 return configurationFile; } 00113 inline void setConfigurationFile( std::string s ) { 00114 configurationFile = s; } 00115 inline const int &getWidth() const { return width; } 00116 inline const int &getHeight() const { return height; } 00117 #ifdef HAVE_XRENDER 00118 inline const bool &useCompositing() const { return compositing; } 00119 #endif 00120 inline Keys &getKeys() { return keys; } 00121 inline Buttons &getButtons() { return buttons; } 00122 inline KeyFunctions &getKeyFunctions() { 00123 return keyFunctions; } 00124 inline IconMap &getIconMap() { return iconMap; } 00125 inline MenuItems *getMenu( std::string s ) { 00126 Menus::iterator i = menus.find( s ); 00127 if( i == menus.end() ) 00128 return 0; 00129 return &(*i).second; } 00130 inline bool ignoreWindow( std::string s ) { 00131 return (windowsToIgnore.find( s ) != windowsToIgnore.end()); } 00132 inline ActiveIndicator &getActiveIndicator() { 00133 return activeIndicator; } 00134 inline const int &getFocusedAlpha() const { return focusedAlpha; } 00135 inline const int &getUnfocusedAlpha() const { 00136 return unfocusedAlpha; } 00137 inline const double &getStartRadius() const { 00138 return startRadius; } 00139 inline const bool &isFitts() const { return fitts; } 00140 inline const double &getZoomModifier() const { 00141 return zoomModifier; } 00142 inline const CenterAction &getCenterAction() const { 00143 return centerAction; } 00144 inline const double &getSpinStep() const { return spinStep; } 00145 inline const bool &getShowTitle() const { return showTitle; } 00146 inline const Text::Font &getTitleFont() const { return titleFont; } 00147 inline const CartoucheSettings &getCartoucheSettings() const { 00148 return cartoucheSettings; } 00149 inline const int &getMinimumNumber() const { return minimumNumber; } 00150 inline const WorkspaceDisplaySettings 00151 &getWorkspaceDisplaySettings() const { 00152 return workspaceDisplaySettings; } 00153 virtual void setConfigurationFileFromBinary( std::string ); 00154 virtual ButtonFunctions getButtonFunctions( 00155 const std::string &menu = std::string(), 00156 MenuItem *item = 0 ); 00157 virtual void load( Display *d ); 00158 00159 protected: 00160 virtual int readMenu( std::istream &, int, std::string ); 00161 virtual void clearMenus(); 00162 virtual Action resolveActionString( const std::string & ) const; 00163 virtual unsigned int resolveButtonCode( const std::string & ) const; 00164 virtual void throwParsingError( const char *, unsigned int ) const; 00165 virtual void presizeIcon( Icon *, int, int, int, int, int, int ); 00166 00167 private: 00171 class Statement : public std::string 00172 { 00173 public: 00174 Statement( const char *s ) : std::string( s ) {} 00175 Statement( std::string s ) : std::string( s ) {} 00176 Statement() : std::string() {} 00177 virtual ~Statement() {} 00178 void cutComments( const char = '#' ); 00179 std::vector<std::string> split( const char * = " \t" ); 00180 00181 private: 00182 bool tokenize( const char *, 00183 std::string::size_type &, 00184 std::string::size_type & ); 00185 std::string trim( std::string, 00186 const char * = " \t\r\n\"" ); 00187 }; 00188 00189 std::string configurationFile; 00190 int width; 00191 int height; 00192 Keys keys; 00193 Buttons buttons; 00194 ButtonFunctions buttonFunctions; 00195 std::map<MenuItem *, ButtonFunctions> itemButtonFunctions; 00196 std::map<std::string, ButtonFunctions> menuButtonFunctions; 00197 KeyFunctions keyFunctions; 00198 IconMap iconMap; 00199 Menus menus; 00200 WindowsToIgnore windowsToIgnore; 00201 ActiveIndicator activeIndicator; 00202 int focusedAlpha; 00203 int unfocusedAlpha; 00204 double startRadius; 00205 bool fitts; 00206 double zoomModifier; 00207 CenterAction centerAction; 00208 double spinStep; 00209 bool showTitle; 00210 Text::Font titleFont; 00211 CartoucheSettings cartoucheSettings; 00212 int minimumNumber; 00213 WorkspaceDisplaySettings workspaceDisplaySettings; 00214 #ifdef HAVE_XRENDER 00215 bool compositing; 00216 #endif 00217 }; 00218 } 00219 00220 #endif
1.7.3