1 /*******************************************************************************
2 *                    FOX Desktop Setup - FOX Desktop Enviroment                *
3 ********************************************************************************
4 *            Copyright (C) 2004-2005 Sander Jansen. All Rights Reserved        *
5 *                               ---                                            *
6 * This program is free software; you can redistribute it and/or modify         *
7 * it under the terms of the GNU General Public License as published by         *
8 * the Free Software Foundation; either version 2 of the License, or            *
9 * (at your option) any later version.                                          *
10 *                                                                              *
11 * This program is distributed in the hope that it will be useful,              *
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of               *
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                *
14 * GNU General Public License for more details.                                 *
15 * You should have received a copy of the GNU General Public License            *
16 * along with this program; if not, write to the Free Software                  *
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA    *
18 *******************************************************************************/
19 #include <xincs.h>
20 #include <fx.h>
21 #include "controlpanelicon.h"
22 
23 #define DEFAULT_SPACING 6
24 
25 struct ColorTheme {
26   const FXchar* name;
27   FXColor       base;
28   FXColor       border;
29   FXColor       back;
30   FXColor       fore;
31   FXColor       selback;
32   FXColor       selfore;
33   FXColor       tipback;
34   FXColor       tipfore;
35   FXColor       menuback;
36   FXColor       menufore;
37   };
38 
39 const ColorTheme ColorThemes[]={
40 //|--------------------+------------------+------------------+------------------+------------------+------------------+------------------+------------------+------------------+------------------+------------------|
41 //|        Name        |        Base      |       Border     |       Back       |      Fore        |      Selback     |      Selfore     |      Tipback     |     Tipfore      |      Menuback    |      Menufore    |
42 //|--------------------+------------------+------------------+------------------+------------------+------------------+------------------+------------------+------------------+------------------+------------------|
43   {"FOX"               ,FXRGB(212,208,200),FXRGB(  0,  0,  0),FXRGB(255,255,255),FXRGB(  0,  0,  0),FXRGB( 10, 36,106),FXRGB(255,255,255),FXRGB(255,255,225),FXRGB(  0,  0,  0),FXRGB( 10, 36,106),FXRGB(255,255,255)},
44   {"Gnome"             ,FXRGB(214,215,214),FXRGB(  0,  0,  0),FXRGB(255,255,255),FXRGB(  0,  0,  0),FXRGB(  0,  0,128),FXRGB(255,255,255),FXRGB(255,255,225),FXRGB(  0,  0,  0),FXRGB(  0,  0,128),FXRGB(255,255,255)},
45   {"Atlas Green"       ,FXRGB(175,180,159),FXRGB(  0,  0,  0),FXRGB(255,255,255),FXRGB(  0,  0,  0),FXRGB(111,122, 99),FXRGB(255,255,255),FXRGB(255,255,225),FXRGB(  0,  0,  0),FXRGB(111,122, 99),FXRGB(255,255,255)},
46   {"BeOS"              ,FXRGB(217,217,217),FXRGB(  0,  0,  0),FXRGB(255,255,255),FXRGB(  0,  0,  0),FXRGB(168,168,168),FXRGB(  0,  0,  0),FXRGB(255,255,225),FXRGB(  0,  0,  0),FXRGB(168,168,168),FXRGB(  0,  0,  0)},
47   {"Blue Slate"        ,FXRGB(239,239,239),FXRGB(  0,  0,  0),FXRGB(255,255,255),FXRGB(  0,  0,  0),FXRGB(103,141,178),FXRGB(255,255,255),FXRGB(255,255,225),FXRGB(  0,  0,  0),FXRGB(103,141,178),FXRGB(255,255,255)},
48 //|--------------------+------------------+------------------+------------------+------------------+------------------+------------------+------------------+------------------+------------------+------------------|
49 //|        Name        |        Base      |       Border     |       Back       |      Fore        |      Selback     |      Selfore     |      Tipback     |     Tipfore      |      Menuback    |      Menufore    |
50 //|--------------------+------------------+------------------+------------------+------------------+------------------+------------------+------------------+------------------+------------------+------------------|
51   {"CDE"	       ,FXRGB(156,153,156),FXRGB(  0,  0,  0),FXRGB(131,129,131),FXRGB(255,255,255),FXRGB( 49, 97,131),FXRGB(255,255,255),FXRGB(255,255,225),FXRGB(  0,  0,  0),FXRGB( 49, 97,131),FXRGB(255,255,255)},
52   {"Digital CDE"       ,FXRGB( 74,121,131),FXRGB(  0,  0,  0),FXRGB( 55, 77, 78),FXRGB(255,255,255),FXRGB( 82,102,115),FXRGB(255,255,255),FXRGB(255,255,225),FXRGB(  0,  0,  0),FXRGB( 82,102,115),FXRGB(255,255,255)},
53   {"Dark Blue"         ,FXRGB( 66,103,148),FXRGB(  0,  0,  0),FXRGB(  0, 42, 78),FXRGB(255,255,255),FXRGB( 92,179,255),FXRGB(  0,  0,  0),FXRGB(255,255,225),FXRGB(  0,  0,  0),FXRGB( 92,179,255),FXRGB(  0,  0,  0)},
54   {"Desert FOX"        ,FXRGB(214,205,187),FXRGB(  0,  0,  0),FXRGB(255,255,255),FXRGB(  0,  0,  0),FXRGB(128,  0,  0),FXRGB(255,255,255),FXRGB(255,255,225),FXRGB(  0,  0,  0),FXRGB(128,  0,  0),FXRGB(255,255,255)},
55   {"EveX"              ,FXRGB(230,222,220),FXRGB(  0,  0,  0),FXRGB(255,255,255),FXRGB(  0,  0,  0),FXRGB( 10, 95,137),FXRGB(255,255,255),FXRGB(255,255,225),FXRGB(  0,  0,  0),FXRGB( 10, 95,137),FXRGB(255,255,255)},
56 //|--------------------+------------------+------------------+------------------+------------------+------------------+------------------+------------------+------------------+------------------+------------------|
57 //|        Name        |        Base      |       Border     |       Back       |      Fore        |      Selback     |      Selfore     |      Tipback     |     Tipfore      |      Menuback    |      Menufore    |
58 //|--------------------+------------------+------------------+------------------+------------------+------------------+------------------+------------------+------------------+------------------+------------------|
59   {"Galaxy"            ,FXRGB(239,239,239),FXRGB(  0,  0,  0),FXRGB(255,255,255),FXRGB(  0,  0,  0),FXRGB(103,141,178),FXRGB(255,255,255),FXRGB(255,255,225),FXRGB(  0,  0,  0),FXRGB(103,141,178),FXRGB(255,255,255)},
60   {"iMac"              ,FXRGB(205,206,205),FXRGB(  0,  0,  0),FXRGB(255,255,255),FXRGB(  0,  0,  0),FXRGB(  0,  0,128),FXRGB(255,255,255),FXRGB(255,255,225),FXRGB(  0,  0,  0),FXRGB(  0,  0,128),FXRGB(255,255,255)},
61   {"KDE 1"             ,FXRGB(192,192,192),FXRGB(  0,  0,  0),FXRGB(255,255,255),FXRGB(  0,  0,  0),FXRGB(  0,  0,128),FXRGB(255,255,255),FXRGB(255,255,225),FXRGB(  0,  0,  0),FXRGB(  0,  0,128),FXRGB(255,255,255)},
62   {"KDE 2"             ,FXRGB(220,220,220),FXRGB(  0,  0,  0),FXRGB(255,255,255),FXRGB(  0,  0,  0),FXRGB( 10, 95,137),FXRGB(255,255,255),FXRGB(255,255,225),FXRGB(  0,  0,  0),FXRGB( 10, 95,137),FXRGB(255,255,255)},
63   {"KDE 3"             ,FXRGB(238,238,230),FXRGB(  0,  0,  0),FXRGB(255,255,255),FXRGB(  0,  0,  0),FXRGB(255,221,118),FXRGB(255,255,255),FXRGB(255,255,225),FXRGB(  0,  0,  0),FXRGB(255,221,118),FXRGB(255,255,255)},
64 //|--------------------+------------------+------------------+------------------+------------------+------------------+------------------+------------------+------------------+------------------+------------------|
65 //|        Name        |        Base      |       Border     |       Back       |      Fore        |      Selback     |      Selfore     |      Tipback     |     Tipfore      |      Menuback    |      Menufore    |
66 //|--------------------+------------------+------------------+------------------+------------------+------------------+------------------+------------------+------------------+------------------+------------------|
67   {"Keramik"           ,FXRGB(234,233,232),FXRGB(  0,  0,  0),FXRGB(255,255,255),FXRGB(  0,  0,  0),FXRGB(169,209,255),FXRGB(  0,  0,  0),FXRGB(255,255,225),FXRGB(  0,  0,  0),FXRGB(169,209,255),FXRGB(  0,  0,  0)},
68   {"Keramik Emerald"   ,FXRGB(238,238,230),FXRGB(  0,  0,  0),FXRGB(255,255,255),FXRGB(  0,  0,  0),FXRGB(134,204,134),FXRGB(  0,  0,  0),FXRGB(255,255,225),FXRGB(  0,  0,  0),FXRGB(134,204,134),FXRGB(  0,  0,  0)},
69   {"Keramik White"     ,FXRGB(239,239,239),FXRGB(  0,  0,  0),FXRGB(255,255,255),FXRGB(  0,  0,  0),FXRGB(103,141,178),FXRGB(255,255,255),FXRGB(255,255,225),FXRGB(  0,  0,  0),FXRGB(103,141,178),FXRGB(255,255,255)},
70   {"Mandrake"          ,FXRGB(230,231,230),FXRGB(  0,  0,  0),FXRGB(255,255,255),FXRGB(  0,  0,  0),FXRGB( 33, 68,156),FXRGB(255,255,255),FXRGB(255,255,225),FXRGB(  0,  0,  0),FXRGB( 33, 68,156),FXRGB(255,255,255)},
71   {"Media Peach"       ,FXRGB(239,239,239),FXRGB(  0,  0,  0),FXRGB(255,255,255),FXRGB(  0,  0,  0),FXRGB(103,141,178),FXRGB(255,255,255),FXRGB(255,255,225),FXRGB(  0,  0,  0),FXRGB(103,141,178),FXRGB(255,255,255)},
72 //|--------------------+------------------+------------------+------------------+------------------+------------------+------------------+------------------+------------------+------------------+------------------|
73 //|        Name        |        Base      |       Border     |       Back       |      Fore        |      Selback     |      Selfore     |      Tipback     |     Tipfore      |      Menuback    |      Menufore    |
74 //|--------------------+------------------+------------------+------------------+------------------+------------------+------------------+------------------+------------------+------------------+------------------|
75   {"Next"              ,FXRGB(168,168,168),FXRGB(  0,  0,  0),FXRGB(255,255,255),FXRGB(  0,  0,  0),FXRGB(  0,  0,  0),FXRGB(255,255,255),FXRGB(255,255,225),FXRGB(  0,  0,  0),FXRGB(  0,  0,  0),FXRGB(255,255,255)},
76   {"Pale Gray"         ,FXRGB(214,214,214),FXRGB(  0,  0,  0),FXRGB(255,255,255),FXRGB(  0,  0,  0),FXRGB(  0,  0,  0),FXRGB(255,255,255),FXRGB(255,255,225),FXRGB(  0,  0,  0),FXRGB(  0,  0,  0),FXRGB(255,255,255)},
77   {"Plastik"           ,FXRGB(239,239,239),FXRGB(  0,  0,  0),FXRGB(255,255,255),FXRGB(  0,  0,  0),FXRGB(103,141,178),FXRGB(255,255,255),FXRGB(255,255,225),FXRGB(  0,  0,  0),FXRGB(103,141,178),FXRGB(255,255,255)},
78   {"Pumpkin"           ,FXRGB(238,216,174),FXRGB(  0,  0,  0),FXRGB(255,255,255),FXRGB(  0,  0,  0),FXRGB(205,133, 63),FXRGB(255,255,255),FXRGB(255,255,225),FXRGB(  0,  0,  0),FXRGB(205,133, 63),FXRGB(255,255,255)},
79   {"Redmond 95"        ,FXRGB(195,195,195),FXRGB(  0,  0,  0),FXRGB(255,255,255),FXRGB(  0,  0,  0),FXRGB(  0,  0,128),FXRGB(255,255,255),FXRGB(255,255,225),FXRGB(  0,  0,  0),FXRGB(  0,  0,128),FXRGB(255,255,255)},
80 //|--------------------+------------------+------------------+------------------+------------------+------------------+------------------+------------------+------------------+------------------+------------------|
81 //|        Name        |        Base      |       Border     |       Back       |      Fore        |      Selback     |      Selfore     |      Tipback     |     Tipfore      |      Menuback    |      Menufore    |
82 //|--------------------+------------------+------------------+------------------+------------------+------------------+------------------+------------------+------------------+------------------+------------------|
83   {"Redmond 2000"      ,FXRGB(212,208,200),FXRGB(  0,  0,  0),FXRGB(255,255,255),FXRGB(  0,  0,  0),FXRGB(  0, 36,104),FXRGB(255,255,255),FXRGB(255,255,225),FXRGB(  0,  0,  0),FXRGB(  0, 36,104),FXRGB(255,255,255)},
84   {"Redmond XP"        ,FXRGB(238,238,230),FXRGB(  0,  0,  0),FXRGB(255,255,255),FXRGB(  0,  0,  0),FXRGB( 74,121,205),FXRGB(255,255,255),FXRGB(255,255,225),FXRGB(  0,  0,  0),FXRGB( 74,121,205),FXRGB(255,255,255)},
85   {"Solaris"           ,FXRGB(174,178,195),FXRGB(  0,  0,  0),FXRGB(147,151,165),FXRGB(  0,  0,  0),FXRGB(113,139,165),FXRGB(255,255,255),FXRGB(255,255,225),FXRGB(  0,  0,  0),FXRGB(113,139,165),FXRGB(255,255,255)},
86   {"Storm"             ,FXRGB(192,192,192),FXRGB(  0,  0,  0),FXRGB(255,255,255),FXRGB(  0,  0,  0),FXRGB(139,  0,139),FXRGB(255,255,255),FXRGB(255,255,225),FXRGB(  0,  0,  0),FXRGB(139,  0,139),FXRGB(255,255,255)},
87   {"Sea Sky"           ,FXRGB(165,178,198),FXRGB(  0,  0,  0),FXRGB(255,255,255),FXRGB(  0,  0,  0),FXRGB( 49,101,156),FXRGB(255,255,255),FXRGB(255,255,225),FXRGB(  0,  0,  0),FXRGB( 49,101,156),FXRGB(255,255,255)},
88   };
89 
90 const FXint numThemes=ARRAYNUMBER(ColorThemes);
91 
92 
93 struct FXFileBinding {
94   FXString key;
95   FXString description;
96   FXString command;
97   FXString bigname;
98   FXString bignameopen;
99   FXString name;
100   FXString nameopen;
101   FXString mime;
102   };
103 
104 
105 class FXDesktopSetup : public FXMainWindow {
106   FXDECLARE(FXDesktopSetup)
107 private:
108   FXSettings         desktopsettings;   // Desktop Settings Registry
109   FXFont            *titlefont;
110   FXIcon            *desktopicon;
111   FXIcon            *icon_colors;
112   FXIcon            *icon_settings;
113   FXIcon            *icon_filebinding;
114 private:
115   FXListBox         *list;
116   FXList            *filebindinglist;
117   FXComboBox        *mimetypelist;
118   FXButton          *button_bigname;
119   FXButton          *button_bignameopen;
120   FXButton          *button_name;
121   FXButton          *button_nameopen;
122 private:
123   FXToolTip         *tooltip;
124   FXTabBook         *tabbook;
125   FXTabItem         *tabitem;
126   FXVerticalFrame   *tabframe;
127   FXVerticalFrame   *mainframe;
128   FXVerticalFrame   *menuframe;
129   FXHorizontalFrame *labeltextframe1;
130   FXHorizontalFrame *labeltextframe2;
131   FXHorizontalFrame *textframe1;
132   FXHorizontalFrame *textframe2;
133   FXHorizontalFrame *tabsubframe;
134   FXGroupBox        *grpbox1;
135   FXGroupBox        *grpbox2;
136   FXLabel           *label1;
137   FXLabel           *label2;
138   FXLabel           *label3;
139   FXLabel           *label4;
140   FXLabel           *label5;
141   FXLabel           *menulabels[6];
142   FXTextField       *textfield1;
143   FXButton          *button1;
144   FXButton          *fontbutton;
145   FXSeparator       *sep1;
146   FXSeparator       *sep2;
147   FXSeparator       *sep3;
148 private:
149   ColorTheme        theme_current;  // Current Settings
150   ColorTheme        theme_user;     // Theme User may have set, which is different from the other themes
151   FXColor           hilite;
152   FXColor           shadow;
153 private:
154   FXFont           *font;
155   FXbool            hascurrent;
156   FXString          applicationname;
157   FXString          vendorname;
158   FXString          iconpath;
159   FXuint            typingSpeed;
160   FXuint            clickSpeed;
161   FXuint            scrollSpeed;
162   FXuint            scrollDelay;
163   FXuint            blinkSpeed;
164   FXuint            animSpeed;
165   FXuint            menuPause;
166   FXuint            tooltipPause;
167   FXuint            tooltipTime;
168   FXuint            maxcolors;
169   FXint             dragDelta;
170   FXint             wheelLines;
171   FXfloat           gamma;
172   FXFileBinding     filebinding;
173 private:
174   FXDataTarget      target_base;
175   FXDataTarget      target_back;
176   FXDataTarget      target_border;
177   FXDataTarget      target_fore;
178   FXDataTarget      target_hilite;
179   FXDataTarget      target_shadow;
180   FXDataTarget      target_selfore;
181   FXDataTarget      target_selback;
182   FXDataTarget      target_tipfore;
183   FXDataTarget      target_tipback;
184   FXDataTarget      target_menufore;
185   FXDataTarget      target_menuback;
186   FXDataTarget      target_typingspeed;
187   FXDataTarget      target_clickspeed;
188   FXDataTarget      target_scrollspeed;
189   FXDataTarget      target_scrolldelay;
190   FXDataTarget      target_blinkspeed;
191   FXDataTarget      target_animspeed;
192   FXDataTarget      target_menupause;
193   FXDataTarget      target_tooltippause;
194   FXDataTarget      target_tooltiptime;
195   FXDataTarget      target_dragdelta;
196   FXDataTarget      target_wheellines;
197   FXDataTarget      target_maxcolors;
198   FXDataTarget      target_gamma;
199   FXDataTarget      target_filebinding_description;
200   FXDataTarget      target_filebinding_command;
201   FXDataTarget      target_iconpath;
202 private:
203   void setup();
204   void setupFont();
205   void setupColors();
206   FXbool writeDesktop();
207   void initColors();
208   void saveFileBinding();
209   FXString getOutputFile();
210 private:
FXDesktopSetup()211   FXDesktopSetup(){}
212   FXDesktopSetup(const FXDesktopSetup&);
213   FXDesktopSetup& operator=(const FXDesktopSetup&);
214 public:
215   enum {
216     ID_COLORS =FXMainWindow::ID_LAST,
217     ID_COLOR_THEME,
218     ID_CHOOSE_FONT,
219     ID_SELECT_COMMAND,
220     ID_CREATE_FILEBINDING,
221     ID_REMOVE_FILEBINDING,
222     ID_RENAME_FILEBINDING,
223     ID_SELECT_FILEBINDING,
224     ID_SELECT_ICON_NAME,
225     ID_SELECT_ICON_BIGNAME,
226     ID_SELECT_ICON_NAMEOPEN,
227     ID_SELECT_ICON_BIGNAMEOPEN,
228     ID_SELECT_MIMETYPE,
229     ID_DESKTOPWINDOW,
230     };
231 public:
232   long onCmdClose(FXObject*,FXSelector,void*);
233   long onColorChanged(FXObject*,FXSelector,void*);
234   long onColorTheme(FXObject*,FXSelector,void*);
235   long onChooseFont(FXObject*,FXSelector,void*);
236   long onCmdFileBinding(FXObject*,FXSelector,void*);
237   long onCmdMimeType(FXObject*,FXSelector,void*);
238   long onCmdCreateFileBinding(FXObject*,FXSelector,void*);
239   long onCmdRemoveFileBinding(FXObject*,FXSelector,void*);
240   long onCmdRenameFileBinding(FXObject*,FXSelector,void*);
241   long onCmdSelectCommand(FXObject*,FXSelector,void*);
242   long onCmdSelectIcon(FXObject*,FXSelector,void*);
243 public:
244 
245   // Constructor
246   FXDesktopSetup(FXApp *app);
247 
248   virtual void create();
249 
250   // Destructor
251   virtual ~FXDesktopSetup();
252   };
253 
254 
255 FXDEFMAP(FXDesktopSetup) FXDesktopSetupMap[]={
256   FXMAPFUNC(SEL_CLOSE,FXDesktopSetup::ID_DESKTOPWINDOW,FXDesktopSetup::onCmdClose),
257   FXMAPFUNC(SEL_COMMAND,FXDesktopSetup::ID_COLORS,FXDesktopSetup::onColorChanged),
258   FXMAPFUNC(SEL_CHANGED,FXDesktopSetup::ID_COLORS,FXDesktopSetup::onColorChanged),
259   FXMAPFUNC(SEL_COMMAND,FXDesktopSetup::ID_COLOR_THEME,FXDesktopSetup::onColorTheme),
260   FXMAPFUNC(SEL_COMMAND,FXDesktopSetup::ID_CHOOSE_FONT,FXDesktopSetup::onChooseFont),
261   FXMAPFUNC(SEL_CHANGED,FXDesktopSetup::ID_SELECT_FILEBINDING,FXDesktopSetup::onCmdFileBinding),
262   FXMAPFUNC(SEL_COMMAND,FXDesktopSetup::ID_SELECT_COMMAND,FXDesktopSetup::onCmdSelectCommand),
263   FXMAPFUNC(SEL_COMMAND,FXDesktopSetup::ID_SELECT_MIMETYPE,FXDesktopSetup::onCmdMimeType),
264   FXMAPFUNC(SEL_COMMAND,FXDesktopSetup::ID_CREATE_FILEBINDING,FXDesktopSetup::onCmdCreateFileBinding),
265   FXMAPFUNC(SEL_COMMAND,FXDesktopSetup::ID_REMOVE_FILEBINDING,FXDesktopSetup::onCmdRemoveFileBinding),
266   FXMAPFUNC(SEL_COMMAND,FXDesktopSetup::ID_RENAME_FILEBINDING,FXDesktopSetup::onCmdRenameFileBinding),
267   FXMAPFUNCS(SEL_COMMAND,FXDesktopSetup::ID_SELECT_ICON_NAME,FXDesktopSetup::ID_SELECT_ICON_BIGNAMEOPEN,FXDesktopSetup::onCmdSelectIcon),
268 
269   };
270 
271 
272 // Object implementation
FXIMPLEMENT(FXDesktopSetup,FXMainWindow,FXDesktopSetupMap,ARRAYNUMBER (FXDesktopSetupMap))273 FXIMPLEMENT(FXDesktopSetup,FXMainWindow,FXDesktopSetupMap,ARRAYNUMBER(FXDesktopSetupMap))
274 
275 
276 FXDesktopSetup::FXDesktopSetup(FXApp * app) : FXMainWindow(app,"FOX Desktop Setup",NULL,NULL,DECOR_ALL,0,0,0,0) {
277 
278   setTarget(this);
279   setSelector(ID_DESKTOPWINDOW);
280 
281 
282   const char *const *argv=getApp()->getArgv();
283   if(getApp()->getArgc()>1){
284     applicationname = argv[1];
285     if (getApp()->getArgc()>2){
286       vendorname=argv[2];
287       }
288     }
289 
290   FXString desktopdir=FXSystem::getHomeDirectory() + PATHSEPSTRING +".foxrc";
291   FXString desktopfile;
292 
293   if(FXStat::exists(desktopdir)){
294     if (applicationname.empty()){
295       desktopfile = desktopdir + PATHSEPSTRING + "Desktop";
296       }
297     else if (vendorname.empty()){
298       desktopfile = desktopdir + PATHSEPSTRING + applicationname;
299       }
300     else {
301       desktopfile = desktopdir + PATHSEPSTRING + vendorname + PATHSEPSTRING + applicationname;
302       }
303     if (FXStat::exists(desktopfile)){
304       desktopsettings.parseFile(desktopfile,TRUE);
305       }
306     }
307 
308   tooltip = new FXToolTip(getApp());
309 
310   hilite	= getApp()->getHiliteColor();
311   shadow	= getApp()->getShadowColor();
312 
313   /// Retrieve Current Color Settings
314   theme_current.base		= getApp()->getBaseColor();
315   theme_current.back		= getApp()->getBackColor();
316   theme_current.border	= getApp()->getBorderColor();
317   theme_current.fore		= getApp()->getForeColor();
318   theme_current.selfore	= getApp()->getSelforeColor();
319   theme_current.selback	= getApp()->getSelbackColor();
320   theme_current.tipfore	= getApp()->getTipforeColor();
321   theme_current.tipback	= getApp()->getTipbackColor();
322   theme_current.menufore= getApp()->getSelMenuTextColor();
323   theme_current.menuback= getApp()->getSelMenuBackColor();
324 
325   typingSpeed =getApp()->getTypingSpeed();
326   clickSpeed  =getApp()->getClickSpeed();
327   scrollSpeed =getApp()->getScrollSpeed();
328   scrollDelay =getApp()->getScrollDelay();
329   blinkSpeed  =getApp()->getBlinkSpeed();
330   animSpeed   =getApp()->getAnimSpeed();
331   menuPause   =getApp()->getMenuPause();
332   tooltipPause=getApp()->getTooltipPause();
333   tooltipTime =getApp()->getTooltipTime();
334   dragDelta   =getApp()->getDragDelta();
335   wheelLines  =getApp()->getWheelLines();
336 
337   gamma=getApp()->reg().readRealEntry("SETTINGS","displaygamma",1.0);
338   maxcolors=getApp()->reg().readUnsignedEntry("SETTINGS","maxcolors",125);
339   iconpath = getApp()->reg().readStringEntry("SETTINGS","iconpath");
340 
341 
342   /// Setup the Datatargets
343   target_base.connect(theme_current.base);
344   target_back.connect(theme_current.back);
345   target_border.connect(theme_current.border);
346   target_fore.connect(theme_current.fore);
347   target_hilite.connect(hilite);
348   target_shadow.connect(shadow);
349   target_selfore.connect(theme_current.selfore);
350   target_selback.connect(theme_current.selback);
351   target_tipfore.connect(theme_current.tipfore);
352   target_tipback.connect(theme_current.tipback);
353   target_menufore.connect(theme_current.menufore);
354   target_menuback.connect(theme_current.menuback);
355 
356 
357   target_typingspeed.connect(typingSpeed);
358   target_clickspeed.connect(clickSpeed);
359   target_scrollspeed.connect(scrollSpeed);
360   target_scrolldelay.connect(scrollDelay);
361   target_blinkspeed.connect(blinkSpeed);
362   target_animspeed.connect(animSpeed);
363   target_menupause.connect(menuPause);
364   target_tooltippause.connect(tooltipPause);
365   target_tooltiptime.connect(tooltipTime);
366   target_dragdelta.connect(dragDelta);
367   target_wheellines.connect(wheelLines);
368   target_maxcolors.connect(maxcolors);
369   target_gamma.connect(gamma);
370 
371   target_filebinding_description.connect(filebinding.description);
372   target_filebinding_command.connect(filebinding.command);
373   target_iconpath.connect(iconpath);
374 
375   target_base.setTarget(this);
376   target_back.setTarget(this);
377   target_border.setTarget(this);
378   target_fore.setTarget(this);
379   target_hilite.setTarget(this);
380   target_shadow.setTarget(this);
381   target_selfore.setTarget(this);
382   target_selback.setTarget(this);
383   target_tipfore.setTarget(this);
384   target_tipback.setTarget(this);
385   target_menufore.setTarget(this);
386   target_menuback.setTarget(this);
387 
388   target_base.setSelector(ID_COLORS);
389   target_back.setSelector(ID_COLORS);
390   target_border.setSelector(ID_COLORS);
391   target_fore.setSelector(ID_COLORS);
392   target_hilite.setSelector(ID_COLORS);
393   target_shadow.setSelector(ID_COLORS);
394   target_selfore.setSelector(ID_COLORS);
395   target_selback.setSelector(ID_COLORS);
396   target_tipfore.setSelector(ID_COLORS);
397   target_tipback.setSelector(ID_COLORS);
398   target_menufore.setSelector(ID_COLORS);
399   target_menuback.setSelector(ID_COLORS);
400 
401   desktopicon=new FXGIFIcon(getApp(),controlpanel_gif);
402   icon_colors=new FXGIFIcon(getApp(),colors_gif);
403   icon_settings=new FXGIFIcon(getApp(),settings_gif);
404   icon_filebinding=new FXGIFIcon(getApp(),filebinding_gif);
405 
406   setup();
407   }
408 
409 
~FXDesktopSetup()410 FXDesktopSetup::~FXDesktopSetup(){
411   delete titlefont;
412   delete font;
413   delete desktopicon;
414   delete icon_colors;
415   delete icon_settings;
416   delete icon_filebinding;
417   }
418 
create()419 void FXDesktopSetup::create(){
420   FXMainWindow::create();
421   initColors();
422   }
423 
424 
setup()425 void FXDesktopSetup::setup(){
426 
427   getApp()->getNormalFont()->create();
428   FXFontDesc fontdescription;
429   getApp()->getNormalFont()->getFontDesc(fontdescription);
430 
431   font = new FXFont(getApp(),fontdescription);
432   font->create();
433 
434   fontdescription.size = (FXuint) (((double)fontdescription.size) * 1.5);
435   titlefont = new FXFont(getApp(),fontdescription);
436   titlefont->create();
437 
438   FXHorizontalFrame * hframe=NULL;
439   FXVerticalFrame   * frame=NULL;
440   FXVerticalFrame   * vframe=NULL;
441   FXMatrix          * matrix=NULL;
442   FXLabel           * label=NULL;
443   FXSpinner         * spinner=NULL;
444 
445   FXVerticalFrame * main = new FXVerticalFrame(this,LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0,0,0,0,0,0,0);
446 
447 
448   // Assuming we have a icon of size 48x48, using different spacing will give us about the same size header.
449   const FXint spacing=(desktopicon ? 5 : 15);
450 
451   // Create nice header
452   label = new FXLabel(main,"FOX Desktop Setup",desktopicon,LAYOUT_FILL_X|JUSTIFY_LEFT|TEXT_AFTER_ICON,0,0,0,0,spacing,spacing,spacing,spacing);
453   label->setBackColor(FXRGB(255,255,255));
454   label->setTextColor(FXRGB(  0,  0,  0));
455   label->setFont(titlefont);
456 
457   new FXSeparator(main,SEPARATOR_GROOVE|LAYOUT_FILL_X);
458 
459 
460   FXHorizontalFrame * hmainframe = new FXHorizontalFrame(main,LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0,0,0,0,0,0,0);
461 
462   FXVerticalFrame * buttonframe = new FXVerticalFrame(hmainframe,LAYOUT_FILL_Y|LAYOUT_LEFT|PACK_UNIFORM_WIDTH|PACK_UNIFORM_HEIGHT,0,0,0,0, DEFAULT_SPACING,DEFAULT_SPACING,DEFAULT_SPACING,DEFAULT_SPACING);
463 
464   new FXSeparator(hmainframe,SEPARATOR_GROOVE|LAYOUT_FILL_Y);
465 
466 
467   FXSwitcher * switcher = new FXSwitcher(hmainframe,LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0,0,0,0,0);
468 
469   vframe = new FXVerticalFrame(buttonframe,FRAME_SUNKEN,0,0,0,0,0,0,0,0);
470   new FXButton(vframe,"Themes",icon_colors,switcher,FXSwitcher::ID_OPEN_FIRST,FRAME_RAISED|ICON_ABOVE_TEXT|LAYOUT_FILL);
471   vframe = new FXVerticalFrame(buttonframe,FRAME_SUNKEN,0,0,0,0,0,0,0,0);
472   new FXButton(vframe,"Bindings",icon_filebinding,switcher,FXSwitcher::ID_OPEN_SECOND,FRAME_RAISED|ICON_ABOVE_TEXT|LAYOUT_FILL);
473   vframe = new FXVerticalFrame(buttonframe,FRAME_SUNKEN,0,0,0,0,0,0,0,0);
474   new FXButton(vframe,"General",icon_settings,switcher,FXSwitcher::ID_OPEN_THIRD,FRAME_RAISED|ICON_ABOVE_TEXT|LAYOUT_FILL);
475 
476 
477 
478 
479   vframe = new FXVerticalFrame(switcher,LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0,0,0,0,0,0,0);
480 
481   hframe = new FXHorizontalFrame(vframe,LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0,0,0,0,0,0,0);
482   new FXSeparator(vframe,SEPARATOR_GROOVE|LAYOUT_FILL_X);
483 
484 
485   frame  = new FXVerticalFrame(hframe,LAYOUT_FILL_Y,0,0,0,0,0,0,0,0,0,0);
486   new FXSeparator(hframe,SEPARATOR_GROOVE|LAYOUT_FILL_Y);
487 
488   FXVerticalFrame * themeframe = new FXVerticalFrame(frame,LAYOUT_FILL_X,0,0,0,0,DEFAULT_SPACING,DEFAULT_SPACING,DEFAULT_SPACING,DEFAULT_SPACING);
489   new FXLabel(themeframe,"Theme: ",NULL,LAYOUT_CENTER_Y);
490   list = new FXListBox(themeframe,this,ID_COLOR_THEME,LAYOUT_FILL_X|FRAME_SUNKEN|FRAME_THICK);
491   list->setNumVisible(9);
492 
493   new FXSeparator(frame,SEPARATOR_GROOVE|LAYOUT_FILL_X);
494 
495   matrix = new FXMatrix(frame,2,LAYOUT_FILL_Y|MATRIX_BY_COLUMNS,0,0,0,0,DEFAULT_SPACING,DEFAULT_SPACING,DEFAULT_SPACING,DEFAULT_SPACING,1,1);
496 
497   new FXColorWell(matrix,FXRGB(0,0,255),&target_base,FXDataTarget::ID_VALUE);
498   label	  = new FXLabel(matrix,"Base Color");
499 
500   new FXColorWell(matrix,FXRGB(0,0,255),&target_border,FXDataTarget::ID_VALUE);
501   label	  = new FXLabel(matrix,"Border Color");
502 
503   new FXColorWell(matrix,FXRGB(0,0,255),&target_fore,FXDataTarget::ID_VALUE);
504   label	  = new FXLabel(matrix,"Text Color");
505 
506   new FXColorWell(matrix,FXRGB(0,0,255),&target_back,FXDataTarget::ID_VALUE);
507   label	  = new FXLabel(matrix,"Background Color");
508 
509   new FXColorWell(matrix,FXRGB(0,0,255),&target_selfore,FXDataTarget::ID_VALUE);
510   label	  = new FXLabel(matrix,"Selected Text Color");
511 
512   new FXColorWell(matrix,FXRGB(0,0,255),&target_selback,FXDataTarget::ID_VALUE);
513   label	  = new FXLabel(matrix,"Selected Background Color");
514 
515   new FXColorWell(matrix,FXRGB(0,0,255),&target_menufore,FXDataTarget::ID_VALUE);
516   label	  = new FXLabel(matrix,"Selected Menu Text Color");
517 
518   new FXColorWell(matrix,FXRGB(0,0,255),&target_menuback,FXDataTarget::ID_VALUE);
519   label	  = new FXLabel(matrix,"Selected Menu Background Color");
520 
521   new FXColorWell(matrix,FXRGB(0,0,255),&target_tipfore,FXDataTarget::ID_VALUE);
522   label	  = new FXLabel(matrix,"Tip Text Color");
523 
524    new FXColorWell(matrix,FXRGB(0,0,255),&target_tipback,FXDataTarget::ID_VALUE);
525   label	  = new FXLabel(matrix,"Tip Background Color");
526 
527   frame = new FXVerticalFrame(hframe,LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0,DEFAULT_SPACING,DEFAULT_SPACING,DEFAULT_SPACING,DEFAULT_SPACING,0,0);
528 
529   tabbook = new FXTabBook(frame,NULL,0,LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0,0,0,0,0);
530   tabitem  = new FXTabItem(tabbook," Item 1 ");
531   tabframe = new FXVerticalFrame(tabbook,LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_THICK|FRAME_RAISED);
532 
533   labeltextframe1 = new FXHorizontalFrame(tabframe,LAYOUT_FILL_X);
534   label1 = new FXLabel(labeltextframe1,"Label with Text",NULL);
535   textfield1 = new FXTextField(labeltextframe1,30,NULL,0,LAYOUT_FILL_X|FRAME_THICK|FRAME_SUNKEN);
536   textfield1->setText("Select this text, to see the selected colors");
537 
538   labeltextframe2 = new FXHorizontalFrame(tabframe,LAYOUT_FILL_X);
539   textframe1 = new FXHorizontalFrame(labeltextframe2,LAYOUT_FILL_X|FRAME_THICK|FRAME_SUNKEN,0,0,0,0,2,2,2,2,0,0);
540   label3 = new FXLabel(textframe1,"Selected Text (with focus)",NULL,LAYOUT_FILL_X,0,0,0,0,1,1,1,1);
541   textframe2 = new FXHorizontalFrame(labeltextframe2,LAYOUT_FILL_X|FRAME_THICK|FRAME_SUNKEN,0,0,0,0,2,2,2,2,0,0);
542   label4 = new FXLabel(textframe2,"Selected Text (no focus)",NULL,LAYOUT_FILL_X,0,0,0,0,1,1,1,1);
543 
544   sep1 = new FXSeparator(tabframe,LAYOUT_FILL_X|SEPARATOR_LINE);
545 
546   tabsubframe = new FXHorizontalFrame(tabframe,LAYOUT_FILL_X|LAYOUT_FILL_Y);
547 
548   grpbox1 = new FXGroupBox(tabsubframe,"MenuPane",FRAME_GROOVE|LAYOUT_FILL_Y|LAYOUT_FILL_X);
549 
550   menuframe = new FXVerticalFrame(grpbox1,FRAME_RAISED|FRAME_THICK|LAYOUT_CENTER_X|LAYOUT_CENTER_Y,0,0,0,0,0,0,0,0,0,0);
551   menulabels[0]=new FXLabel(menuframe,"&Open",NULL,LABEL_NORMAL,0,0,0,0,16,4);
552   menulabels[1]=new FXLabel(menuframe,"S&ave",NULL,LABEL_NORMAL,0,0,0,0,16,4);
553   sep2 = new FXSeparator(menuframe,LAYOUT_FILL_X|SEPARATOR_GROOVE);
554   menulabels[2]=new FXLabel(menuframe,"I&mport",NULL,LABEL_NORMAL,0,0,0,0,16,4);
555   menulabels[4]=new FXLabel(menuframe,"Selected Menu Entry",NULL,LABEL_NORMAL,0,0,0,0,16,4);
556   menulabels[3]=new FXLabel(menuframe,"Print",NULL,LABEL_NORMAL,0,0,0,0,16,4);
557   sep3 = new FXSeparator(menuframe,LAYOUT_FILL_X|SEPARATOR_GROOVE);
558   menulabels[5]=new FXLabel(menuframe,"&Quit",NULL,LABEL_NORMAL,0,0,0,0,16,4);
559 
560   grpbox2 = new FXGroupBox(tabsubframe,"Tooltips",FRAME_GROOVE|LAYOUT_FILL_Y|LAYOUT_FILL_X);
561 
562   label2 = new FXLabel(grpbox2,"Sample Tooltip",NULL,FRAME_LINE|LAYOUT_CENTER_X);
563   label5 = new FXLabel(grpbox2,"Multiline Sample\n Tooltip",NULL,FRAME_LINE|LAYOUT_CENTER_X);
564 
565   hframe = new FXHorizontalFrame(vframe,LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0,DEFAULT_SPACING,DEFAULT_SPACING,DEFAULT_SPACING,DEFAULT_SPACING);
566 
567   new FXLabel(hframe,"Normal Font: ",NULL,LAYOUT_CENTER_Y);
568   fontbutton = new FXButton(hframe," ",NULL,this,ID_CHOOSE_FONT,LAYOUT_CENTER_Y|FRAME_RAISED|JUSTIFY_CENTER_X|JUSTIFY_CENTER_Y|LAYOUT_FILL_X);
569 
570 
571   vframe = new FXVerticalFrame(switcher,LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0,0,0,0,0,0,0);
572 
573   hframe = new FXHorizontalFrame(vframe,LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0,DEFAULT_SPACING,DEFAULT_SPACING,DEFAULT_SPACING,DEFAULT_SPACING);
574   new FXLabel(hframe,"Icon Search Path",NULL,LAYOUT_CENTER_Y);
575   new FXTextField(hframe,2,&target_iconpath,FXDataTarget::ID_VALUE,LAYOUT_SIDE_LEFT|LAYOUT_FILL_X|LAYOUT_CENTER_Y|FRAME_SUNKEN|FRAME_THICK);
576 
577   new FXSeparator(vframe,SEPARATOR_GROOVE|LAYOUT_FILL_X);
578 
579 
580   hframe = new FXHorizontalFrame(vframe,LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0,0,0,0,0,0,0);
581   vframe = new FXVerticalFrame(hframe,LAYOUT_FILL_Y,0,0,0,0,DEFAULT_SPACING,DEFAULT_SPACING,DEFAULT_SPACING,DEFAULT_SPACING);
582   new FXSeparator(hframe,SEPARATOR_GROOVE|LAYOUT_FILL_Y);
583 
584 
585   new FXLabel(vframe,"File Binding: ");
586   frame = new FXVerticalFrame(vframe,FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_Y|LAYOUT_FILL_X,0,0,0,0,0,0,0,0);
587 
588   filebindinglist = new FXList(frame,this,ID_SELECT_FILEBINDING,LAYOUT_FILL_Y|LAYOUT_FILL_X|LIST_BROWSESELECT);
589   filebindinglist->setSortFunc(FXList::ascending);
590   FXHorizontalFrame * listbuttonframe = new FXHorizontalFrame(vframe,PACK_UNIFORM_WIDTH|LAYOUT_FILL_X,0,0,0,0,0,0,0,0);
591   new FXButton(listbuttonframe,"&New\tAdd New Binding",NULL,this,ID_CREATE_FILEBINDING);
592   new FXButton(listbuttonframe,"&Delete\tDelete Selected Binding",NULL,this,ID_REMOVE_FILEBINDING);
593   new FXButton(listbuttonframe,"&Edit\tEdit Binding Name",NULL,this,ID_RENAME_FILEBINDING);
594 
595 
596 
597 
598 
599   vframe = new FXVerticalFrame(hframe,LAYOUT_FILL_Y|LAYOUT_FILL_X,0,0,0,0,0,0,0,0,0,0);
600 
601   FXPacker * packer = new FXPacker(vframe,LAYOUT_FILL_X,0,0,0,0,DEFAULT_SPACING,DEFAULT_SPACING,DEFAULT_SPACING,DEFAULT_SPACING);
602   new FXLabel(packer,"Description:");
603   new FXTextField(packer,2,&target_filebinding_description,FXDataTarget::ID_VALUE,LAYOUT_SIDE_LEFT|LAYOUT_FILL_X|LAYOUT_CENTER_Y|FRAME_SUNKEN|FRAME_THICK);
604   new FXSeparator(vframe,SEPARATOR_GROOVE|LAYOUT_FILL_X);
605 
606   packer = new FXPacker(vframe,LAYOUT_FILL_X,0,0,0,0,DEFAULT_SPACING,DEFAULT_SPACING,DEFAULT_SPACING,DEFAULT_SPACING);
607   new FXLabel(packer,"Command:");
608   FXCheckButton * checkbutton1 = new FXCheckButton(packer,"Run in terminal",NULL,0,ICON_BEFORE_TEXT|LAYOUT_LEFT|LAYOUT_SIDE_BOTTOM);
609   FXCheckButton * checkbutton2 = new FXCheckButton(packer,"Change directory",NULL,0,ICON_BEFORE_TEXT|LAYOUT_LEFT|LAYOUT_SIDE_BOTTOM);
610   checkbutton1->disable();
611   checkbutton2->disable();
612 
613   new FXButton(packer,"...",NULL,this,ID_SELECT_COMMAND,LAYOUT_SIDE_RIGHT|LAYOUT_CENTER_Y|FRAME_RAISED|FRAME_THICK);
614   new FXTextField(packer,2,&target_filebinding_command,FXDataTarget::ID_VALUE,LAYOUT_SIDE_LEFT|LAYOUT_FILL_X|LAYOUT_CENTER_Y|FRAME_SUNKEN|FRAME_THICK);
615 
616   new FXSeparator(vframe,SEPARATOR_GROOVE|LAYOUT_FILL_X);
617 
618   packer = new FXPacker(vframe,LAYOUT_FILL_X,0,0,0,0,DEFAULT_SPACING,DEFAULT_SPACING,DEFAULT_SPACING,DEFAULT_SPACING);
619   new FXLabel(packer,"Mime Type:");
620 
621   mimetypelist = new FXComboBox(packer,1,this,ID_SELECT_MIMETYPE,LAYOUT_FILL_X|FRAME_SUNKEN|FRAME_THICK|COMBOBOX_NO_REPLACE);
622   mimetypelist->setSortFunc(FXList::ascending);
623   mimetypelist->setNumVisible(9);
624   mimetypelist->appendItem(" ");
625 
626   new FXSeparator(vframe,SEPARATOR_GROOVE|LAYOUT_FILL_X);
627 
628   FXMatrix *iconsmatrix=new FXMatrix(vframe,4,MATRIX_BY_COLUMNS|LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0, DEFAULT_SPACING,DEFAULT_SPACING,DEFAULT_SPACING,DEFAULT_SPACING);
629   new FXLabel(iconsmatrix,"Small",NULL,LAYOUT_CENTER_X|LAYOUT_FILL_COLUMN);
630   new FXLabel(iconsmatrix,"Big",NULL,LAYOUT_CENTER_X|LAYOUT_FILL_COLUMN);
631   new FXLabel(iconsmatrix,"Small Open",NULL,LAYOUT_CENTER_X|LAYOUT_FILL_COLUMN);
632   new FXLabel(iconsmatrix,"Big Open",NULL,LAYOUT_CENTER_X|LAYOUT_FILL_COLUMN);
633 
634   button_name = new FXButton(iconsmatrix,"\tChange icon",NULL,this,ID_SELECT_ICON_NAME,FRAME_RAISED|LAYOUT_CENTER_X|LAYOUT_CENTER_Y|JUSTIFY_CENTER_X|JUSTIFY_CENTER_Y|LAYOUT_FILL_COLUMN|LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT,0,0,68,68, 1,1,1,1);
635   button_bigname = new FXButton(iconsmatrix,"\tChange icon",NULL,this,ID_SELECT_ICON_BIGNAME,FRAME_RAISED|LAYOUT_CENTER_X|LAYOUT_CENTER_Y|JUSTIFY_CENTER_X|JUSTIFY_CENTER_Y|LAYOUT_FILL_COLUMN|LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT,0,0,68,68, 1,1,1,1);
636   button_nameopen = new FXButton(iconsmatrix,"\tChange icon",NULL,this,ID_SELECT_ICON_NAMEOPEN,FRAME_RAISED|LAYOUT_CENTER_X|LAYOUT_CENTER_Y|JUSTIFY_CENTER_X|JUSTIFY_CENTER_Y|LAYOUT_FILL_COLUMN|LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT,0,0,68,68, 1,1,1,1);
637   button_bignameopen = new FXButton(iconsmatrix,"\tChange icon",NULL,this,ID_SELECT_ICON_BIGNAMEOPEN,FRAME_RAISED|LAYOUT_CENTER_X|LAYOUT_CENTER_Y|JUSTIFY_CENTER_X|JUSTIFY_CENTER_Y|LAYOUT_FILL_COLUMN|LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT,0,0,68,68, 1,1,1,1);
638 
639   FXString data;
640   FXString mime;
641   FXStringDict *prefs;
642   prefs = desktopsettings.find("FILETYPES");
643   if(prefs){
644     for(FXint e=prefs->first(); e<prefs->size(); e=prefs->next(e)){
645       filebindinglist->appendItem(prefs->key(e),NULL,NULL,TRUE);
646       data = prefs->data(e);
647       mime = data.section(";",4);
648       if (!mime.empty() && (mimetypelist->findItem(mime)==-1)){
649         mimetypelist->appendItem(mime);
650         }
651       }
652     }
653 
654   filebindinglist->sortItems();
655   mimetypelist->sortItems();
656 
657   FXString labelname="Desktop Settings";
658 
659   if(!applicationname.empty()){
660     labelname = applicationname;
661     if(!vendorname.empty()){
662       labelname += " [ " + vendorname + " ]";
663       }
664     labelname+= " Settings";
665     }
666 
667 
668 
669 
670   hframe = new FXHorizontalFrame(switcher,LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0,0,0,0,0,0,0);
671 
672   matrix = new FXMatrix(hframe,3,LAYOUT_FILL_Y|MATRIX_BY_COLUMNS,0,0,0,0,DEFAULT_SPACING,DEFAULT_SPACING,DEFAULT_SPACING,DEFAULT_SPACING);
673 
674   const FXuint spinnerstyle=FRAME_SUNKEN|FRAME_THICK;
675 
676   new FXLabel(matrix,"Typing Speed\t\tTyping Speed",NULL,LAYOUT_RIGHT|LAYOUT_CENTER_Y);
677   spinner=new FXSpinner(matrix,4,&target_typingspeed,FXDataTarget::ID_VALUE,spinnerstyle);
678   spinner->setRange(1,9999);
679   spinner->setIncrement(500);
680   new FXLabel(matrix,"ms",NULL,LAYOUT_CENTER_Y);
681 
682 
683   new FXLabel(matrix,"Double Click Speed\t\tDouble Click Speed",NULL,LAYOUT_RIGHT|LAYOUT_CENTER_Y);
684   spinner=new FXSpinner(matrix,4,&target_clickspeed,FXDataTarget::ID_VALUE,spinnerstyle);
685   spinner->setRange(1,9999);
686   spinner->setIncrement(100);
687   new FXLabel(matrix,"ms",NULL,LAYOUT_CENTER_Y);
688 
689   new FXLabel(matrix,"Scroll Speed\t\tScroll Speed",NULL,LAYOUT_RIGHT|LAYOUT_CENTER_Y);
690   spinner=new FXSpinner(matrix,4,&target_scrollspeed,FXDataTarget::ID_VALUE,spinnerstyle);
691   spinner->setRange(1,9999);
692   spinner->setIncrement(10);
693   new FXLabel(matrix,"ms",NULL,LAYOUT_CENTER_Y);
694 
695   new FXLabel(matrix,"Scroll Delay\t\tScroll Delay",NULL,LAYOUT_RIGHT|LAYOUT_CENTER_Y);
696   spinner=new FXSpinner(matrix,4,&target_scrolldelay,FXDataTarget::ID_VALUE,spinnerstyle);
697   spinner->setRange(1,9999);
698   spinner->setIncrement(100);
699   new FXLabel(matrix,"ms",NULL,LAYOUT_CENTER_Y);
700 
701   new FXLabel(matrix,"Cursor Blink Speed\t\tCursor Blink Speed",NULL,LAYOUT_RIGHT|LAYOUT_CENTER_Y);
702   spinner=new FXSpinner(matrix,4,&target_blinkspeed,FXDataTarget::ID_VALUE,spinnerstyle);
703   spinner->setRange(1,9999);
704   spinner->setIncrement(100);
705   new FXLabel(matrix,"ms",NULL,LAYOUT_CENTER_Y);
706 
707   new FXLabel(matrix,"Animation Speed\t\tAnimation Speed",NULL,LAYOUT_RIGHT|LAYOUT_CENTER_Y);
708   new FXSpinner(matrix,4,&target_animspeed,FXDataTarget::ID_VALUE,spinnerstyle);
709   spinner->setRange(1,9999);
710   spinner->setIncrement(1);
711   new FXLabel(matrix,"ms",NULL,LAYOUT_CENTER_Y);
712 
713   new FXLabel(matrix,"Cascade Menu Popup Delay\t\tAmount of delay before cascading menu is shown",NULL,LAYOUT_RIGHT|LAYOUT_CENTER_Y);
714   spinner=new FXSpinner(matrix,4,&target_menupause,FXDataTarget::ID_VALUE,spinnerstyle);
715   spinner->setRange(1,9999);
716   spinner->setIncrement(100);
717   new FXLabel(matrix,"ms",NULL,LAYOUT_CENTER_Y);
718 
719   new FXLabel(matrix,"Tooltip Popup Delay\t\tAmount of Delay before tooltip is shown ",NULL,LAYOUT_RIGHT|LAYOUT_CENTER_Y);
720   spinner=new FXSpinner(matrix,4,&target_tooltippause,FXDataTarget::ID_VALUE,spinnerstyle);
721   spinner->setRange(1,9999);
722   spinner->setIncrement(100);
723   new FXLabel(matrix,"ms",NULL,LAYOUT_CENTER_Y);
724 
725   new FXLabel(matrix,"Tooltip Time\t\tTime that tooltips are shown",NULL,LAYOUT_RIGHT|LAYOUT_CENTER_Y);
726   spinner=new FXSpinner(matrix,4,&target_tooltiptime,FXDataTarget::ID_VALUE,spinnerstyle);
727   spinner->setRange(1,9999);
728   spinner->setIncrement(500);
729   new FXLabel(matrix,"ms",NULL,LAYOUT_CENTER_Y);
730 
731   new FXLabel(matrix,"Drag Delta\t\tMinimum distance considered a mouse move",NULL,LAYOUT_RIGHT|LAYOUT_CENTER_Y);
732   spinner=new FXSpinner(matrix,4,&target_dragdelta,FXDataTarget::ID_VALUE,spinnerstyle);
733   spinner->setRange(1,9999);
734   spinner->setIncrement(1);
735   new FXFrame(matrix,FRAME_NONE);
736 
737   new FXLabel(matrix,"Wheel Lines",NULL,LAYOUT_RIGHT|LAYOUT_CENTER_Y);
738   spinner=new FXSpinner(matrix,4,&target_wheellines,FXDataTarget::ID_VALUE,spinnerstyle);
739   spinner->setRange(1,100);
740 
741   new FXSeparator(hframe,SEPARATOR_GROOVE|LAYOUT_FILL_Y);
742 
743   matrix = new FXMatrix(hframe,2,LAYOUT_FILL_Y|MATRIX_BY_COLUMNS,0,0,0,0,DEFAULT_SPACING,DEFAULT_SPACING,DEFAULT_SPACING,DEFAULT_SPACING);
744   new FXLabel(matrix,"Maximum Colors Allocated");
745   spinner = new FXSpinner(matrix,3,&target_maxcolors,FXDataTarget::ID_VALUE,spinnerstyle);
746   spinner->setRange(1,256);
747 
748   new FXLabel(matrix,"Gamma Correction");
749   FXRealSpinner * rspinner = new FXRealSpinner(matrix,3,&target_gamma,FXDataTarget::ID_VALUE,spinnerstyle);
750   rspinner->setRange(0.0,5.0);
751   rspinner->setIncrement(0.1);
752 
753 
754   new FXSeparator(main,SEPARATOR_GROOVE|LAYOUT_FILL_X);
755   FXHorizontalFrame *closebox=new FXHorizontalFrame(main,LAYOUT_BOTTOM|LAYOUT_FILL_X,0,0,0,0,DEFAULT_SPACING,DEFAULT_SPACING,DEFAULT_SPACING,DEFAULT_SPACING);
756   label = new FXLabel(closebox,labelname,NULL,LAYOUT_FILL_X|LAYOUT_CENTER_Y|JUSTIFY_LEFT,0,0,0,0,15);
757   label->disable();
758 
759   new FXButton(closebox,"&Close",NULL,this,FXTopWindow::ID_CLOSE,BUTTON_INITIAL|BUTTON_DEFAULT|LAYOUT_RIGHT|FRAME_RAISED|FRAME_THICK,0,0,0,0,20,20);
760 
761   setupColors();
762   setupFont();
763   }
764 
765 
766 
createIconFromName(FXApp * app,const FXString & name,const FXString & iconpath)767 static FXIcon * createIconFromName(FXApp * app,const FXString & name, const FXString & iconpath){
768   FXIcon * icon = NULL;
769   FXIconSource iconsource(app);
770   FXString fullpath;
771   if(FXStat::exists(name)){
772     fullpath = name;
773     }
774   else{
775     fullpath = FXPath::search(iconpath,name);
776     if(fullpath.empty()) return NULL;
777     }
778   icon = iconsource.loadIconFile(fullpath);
779   if (icon) {
780     icon->blend(app->getBaseColor());
781     icon->create();
782     return icon;
783     }
784   return NULL;
785   }
786 
787 
updateIcon(FXApp * app,FXButton * button,const FXString & path)788 static void updateIcon(FXApp*app,FXButton * button, const FXString & path){
789   FXIconSource iconsource(app);
790   FXIcon * icon = NULL;
791 
792   if (button->getIcon()){
793     icon = button->getIcon();
794     button->setIcon(NULL);
795     delete icon;
796     icon=NULL;
797     }
798 
799   icon = iconsource.loadIconFile(path);
800   if (icon) {
801     icon->blend(app->getBaseColor());
802     icon->create();
803     button->setIcon(icon);
804     }
805   }
806 
807 
808 
809 
810 /*
811 static FXint findItemInList(FXList * list,FXListItem * item){
812         for(FXint i=0;i<list->getNumItems();i++){
813                 if (list->getItem(i)==item) return i;
814                 }
815         return -1;
816         }
817 */
818 
819 
saveFileBinding()820 void FXDesktopSetup::saveFileBinding(){
821   ///fxmessage("Saving File Binding: %s\n",filebinding.key.text());
822   if (filebinding.key.empty()) return;
823 
824   FXString entry;
825 
826   entry = filebinding.command + ";" + filebinding.description + ";";
827   if (filebinding.bignameopen.empty())
828   entry	+= filebinding.bigname + ";";
829   else
830     entry += filebinding.bigname + ":" + filebinding.bignameopen + ";";
831 
832   if (filebinding.nameopen.empty())
833   entry	+= filebinding.name + ";";
834   else
835           entry += filebinding.name + ":" + filebinding.nameopen + ";";
836 
837   entry += filebinding.mime;
838 
839   desktopsettings.writeStringEntry("FILETYPES",filebinding.key.text(),entry.text());
840   }
841 
842 
onCmdSelectCommand(FXObject *,FXSelector,void *)843 long FXDesktopSetup::onCmdSelectCommand(FXObject*,FXSelector,void*){
844   FXString path = (filebinding.command.empty()) ? "/usr/bin/" : filebinding.command.text();
845 
846   FXString command = FXFileDialog::getOpenFilename(this,"Select Command",path,"*");
847   if (!command.empty()){
848     filebinding.command = command;
849     }
850   return 1;
851   }
852 
853 
onCmdMimeType(FXObject *,FXSelector,void * ptr)854 long FXDesktopSetup::onCmdMimeType(FXObject*,FXSelector,void*ptr){
855   FXString mime = (FXchar*)ptr;
856   if (!mime.empty() && (mimetypelist->findItem(mime)==-1)){
857     mimetypelist->appendItem(mime);
858     mimetypelist->sortItems();
859     }
860   filebinding.mime = mime;
861   return 1;
862   }
863 
onCmdFileBinding(FXObject *,FXSelector,void *)864 long FXDesktopSetup::onCmdFileBinding(FXObject*,FXSelector,void*){
865   saveFileBinding();
866 
867   FXIcon * icon;
868 
869   FXString iconname;
870   FXString association;
871   filebinding.key = filebindinglist->getItemText(filebindinglist->getCurrentItem());
872   if (filebinding.key.empty()) return 1;
873 
874   association = desktopsettings.readStringEntry("FILETYPES",filebinding.key.text());
875 
876   filebinding.command = association.section(";",0);
877   filebinding.description = association.section(";",1);
878 
879   iconname = association.section(";",2);
880   filebinding.bigname = iconname.section(":",0);
881   filebinding.bignameopen = iconname.section(":",1);
882 
883   iconname = association.section(";",3);
884   filebinding.name = iconname.section(":",0);
885   filebinding.nameopen = iconname.section(":",1);
886 
887   filebinding.mime = association.section(";",4);
888   if (!filebinding.mime.empty()){
889     FXint no = mimetypelist->findItem(filebinding.mime);
890     mimetypelist->setCurrentItem(no);
891     }
892   else {
893     FXint no = mimetypelist->findItem(" ");
894     mimetypelist->setCurrentItem(no);
895     }
896 
897   if (button_bigname->getIcon()){
898     icon = button_bigname->getIcon();
899     button_bigname->setIcon(NULL);
900     delete icon;
901     }
902   icon = createIconFromName(getApp(),filebinding.bigname,iconpath);
903   button_bigname->setIcon(icon);
904 
905   if (button_bignameopen->getIcon()){
906     icon = button_bignameopen->getIcon();
907     button_bignameopen->setIcon(NULL);
908     delete icon;
909     }
910   icon = createIconFromName(getApp(),filebinding.bignameopen,iconpath);
911   button_bignameopen->setIcon(icon);
912 
913   if (button_name->getIcon()){
914     icon = button_name->getIcon();
915     button_name->setIcon(NULL);
916     delete icon;
917     }
918   icon = createIconFromName(getApp(),filebinding.name,iconpath);
919   button_name->setIcon(icon);
920 
921   if (button_nameopen->getIcon()){
922     icon = button_nameopen->getIcon();
923     button_nameopen->setIcon(NULL);
924     delete icon;
925     }
926   icon = createIconFromName(getApp(),filebinding.nameopen,iconpath);
927   button_nameopen->setIcon(icon);
928 
929   return 1;
930   }
931 
932 
onCmdCreateFileBinding(FXObject *,FXSelector,void *)933 long FXDesktopSetup::onCmdCreateFileBinding(FXObject*,FXSelector,void*){
934   FXString result;
935   if (FXInputDialog::getString(result,this,"New File Binding","Please enter filebinding key:",NULL)){
936     if (result.empty()) return 1;
937     if ((filebindinglist->findItem(result))>=0){
938       FXMessageBox::question(this,MBOX_OK,"Duplicate Binding","The given key %s already exists.",result.text());
939       return 1;
940       }
941 
942     /// Save Current
943     saveFileBinding();
944 
945     filebinding.key = result;
946     filebinding.command = "";
947     filebinding.description = "";
948     filebinding.bigname = "";
949     filebinding.bignameopen = "";
950     filebinding.name = "";
951     filebinding.nameopen = "";
952     filebinding.mime = "";
953 
954     /// Save New
955     saveFileBinding();
956 
957     FXint no = filebindinglist->appendItem(filebinding.key);
958     filebindinglist->setCurrentItem(no,TRUE);
959     filebindinglist->sortItems();
960     filebindinglist->makeItemVisible(filebindinglist->getCurrentItem());
961     }
962   return 1;
963   }
964 
onCmdRemoveFileBinding(FXObject *,FXSelector,void *)965 long FXDesktopSetup::onCmdRemoveFileBinding(FXObject*,FXSelector,void*){
966   if (filebinding.key.empty()) return 1;
967   if (FXMessageBox::question(this,MBOX_OK_CANCEL,"Delete Filebinding?","Are you sure you want to delete\nthe filebinding for %s",filebinding.key.text())==MBOX_CLICKED_OK){
968     desktopsettings.deleteEntry("FILETYPES",filebinding.key.text());
969     filebinding.key="";
970     filebindinglist->removeItem(filebindinglist->getCurrentItem(),TRUE);
971     }
972   return 1;
973   }
974 
975 
onCmdRenameFileBinding(FXObject *,FXSelector,void *)976 long FXDesktopSetup::onCmdRenameFileBinding(FXObject*,FXSelector,void*){
977   FXint no;
978   FXString result = filebinding.key;
979   if (FXInputDialog::getString(result,this,"Rename File Binding","Rename File Binding",NULL)){
980     if (result==filebinding.key) return 1;
981     if ((no=filebindinglist->findItem(result))>=0){
982       if (FXMessageBox::question(this,MBOX_YES_NO,"Replace Binding?","Would you like to replace the existing binding?")!=MBOX_CLICKED_YES){
983         return 1;
984         }
985       }
986 
987     /// Remove Old Key
988     desktopsettings.deleteEntry("FILETYPES",filebinding.key.text());
989 
990     filebinding.key = result;
991     saveFileBinding();
992     if (no>=0){
993       FXint previtem = filebindinglist->getCurrentItem();
994       filebindinglist->setCurrentItem(no,TRUE);
995       filebindinglist->removeItem(previtem);
996       }
997     else {
998       filebindinglist->setItemText(filebindinglist->getCurrentItem(),filebinding.key);
999       }
1000     }
1001   return 1;
1002   }
1003 
1004 
onCmdSelectIcon(FXObject *,FXSelector sel,void *)1005 long FXDesktopSetup::onCmdSelectIcon(FXObject*,FXSelector sel,void*){
1006   FXString name,selected;
1007 
1008   switch(FXSELID(sel)){
1009     case ID_SELECT_ICON_NAME: name=filebinding.name; break;
1010     case ID_SELECT_ICON_BIGNAME: name=filebinding.bigname; break;
1011     case ID_SELECT_ICON_NAMEOPEN: name=filebinding.nameopen; break;
1012     case ID_SELECT_ICON_BIGNAMEOPEN: name=filebinding.bignameopen; break;
1013     }
1014 
1015   if(!FXStat::exists(name)){
1016     name=FXPath::search(iconpath,name);
1017     }
1018 
1019   if(name.empty()){
1020     if(!iconpath.empty())
1021       name=iconpath.section(PATHLISTSEP,0)+PATHSEPSTRING;
1022     else
1023       name=FXSystem::getCurrentDirectory();
1024     }
1025 
1026 //  FXString selected=FXFileDialog::getOpenFilename(this,"Select Icon",name);
1027   FXFileDialog opendialog(this,"Select Icon");
1028   opendialog.setSelectMode(SELECTFILE_EXISTING);
1029   opendialog.setFilename(name);
1030   opendialog.showImages(TRUE);
1031   if(opendialog.execute()){
1032     selected=opendialog.getFilename();
1033 //  if(!selected.empty()){
1034     FXString path;
1035     FXString relpath;
1036     FXString iconname=selected;
1037     FXint length=selected.length();
1038     FXint num_sections=iconpath.contains(PATHLISTSEP)+1;
1039     for(FXint i=0; i<num_sections; i++){
1040       path=iconpath.section(PATHLISTSEP,i);
1041       relpath=FXPath::relative(path,selected);
1042       if(relpath.length()<length){
1043         iconname=relpath;
1044         length=relpath.length();
1045         }
1046       }
1047     //fxmessage("Final Icon Name: %s\n",iconname.text());
1048     switch(FXSELID(sel)){
1049       case ID_SELECT_ICON_NAME:
1050         updateIcon(getApp(),button_name,selected);
1051         filebinding.name=iconname;
1052         break;
1053       case ID_SELECT_ICON_BIGNAME:
1054         updateIcon(getApp(),button_bigname,selected);
1055         filebinding.bigname=iconname;
1056         break;
1057       case ID_SELECT_ICON_NAMEOPEN:
1058         updateIcon(getApp(),button_nameopen,selected);
1059         filebinding.nameopen=iconname;
1060         break;
1061       case ID_SELECT_ICON_BIGNAMEOPEN:
1062         updateIcon(getApp(),button_bignameopen,selected);
1063         filebinding.bignameopen=iconname;
1064         break;
1065       }
1066     }
1067   return 1;
1068   }
1069 
1070 
onColorChanged(FXObject *,FXSelector,void *)1071 long FXDesktopSetup::onColorChanged(FXObject*,FXSelector,void*){
1072   list->setCurrentItem(list->getNumItems()-1);
1073   setupColors();
1074   return 1;
1075   }
1076 
1077 
onColorTheme(FXObject *,FXSelector,void * ptr)1078 long FXDesktopSetup::onColorTheme(FXObject*,FXSelector,void* ptr){
1079   FXint no=(FXint)(FXival)ptr;
1080   ColorTheme * theme_selected = reinterpret_cast<ColorTheme*>(list->getItemData(no));
1081   if (theme_selected) {
1082     /// Set new colors from selected theme
1083     theme_current.base     = theme_selected->base;
1084     theme_current.border   = theme_selected->border;
1085     theme_current.back     = theme_selected->back;
1086     theme_current.fore     = theme_selected->fore;
1087     theme_current.selfore  = theme_selected->selfore;
1088     theme_current.selback  = theme_selected->selback;
1089     theme_current.tipfore  = theme_selected->tipfore;
1090     theme_current.tipback  = theme_selected->tipback;
1091     theme_current.menufore = theme_selected->menufore;
1092     theme_current.menuback = theme_selected->menuback;
1093 
1094     /// Apply New Colors to Widgets
1095     setupColors();
1096     }
1097   return 1;
1098   }
1099 
1100 
onChooseFont(FXObject *,FXSelector,void *)1101 long FXDesktopSetup::onChooseFont(FXObject*,FXSelector,void*){
1102   FXFontDialog dialog(this,"Select Normal Font");
1103   FXFontDesc fontdescription;
1104   font->getFontDesc(fontdescription);
1105   strncpy(fontdescription.face,font->getActualName().text(),sizeof(fontdescription.face));
1106   dialog.setFontSelection(fontdescription);
1107   if(dialog.execute(PLACEMENT_SCREEN)){
1108     FXFont *oldfont=font;
1109     dialog.getFontSelection(fontdescription);
1110     font=new FXFont(getApp(),fontdescription);
1111     font->create();
1112     delete oldfont;
1113     setupFont();
1114     }
1115   return 1;
1116   }
1117 
1118 
1119 
onCmdClose(FXObject *,FXSelector,void *)1120 long FXDesktopSetup::onCmdClose(FXObject*,FXSelector,void*){
1121   FXint result = FXMessageBox::question(this,MBOX_SAVE_CANCEL_DONTSAVE,"Save Changes?","Do you want to save changes to the FOX Registry\nbefore closing?\n\nIf you don't save, your changes will be lost.");
1122   if(result==MBOX_CLICKED_SAVE){
1123     saveFileBinding();
1124     writeDesktop();
1125     return 0;
1126     }
1127   else if(result==MBOX_CLICKED_CANCEL){
1128     return 1;
1129     }
1130   else{
1131     return 0;
1132     }
1133   return 0;
1134   }
1135 
weightToString(FXuint weight)1136 static FXString weightToString(FXuint weight){
1137   switch(weight){
1138     case FXFont::Thin      : return "thin"; break;
1139     case FXFont::ExtraLight: return "extralight"; break;
1140     case FXFont::Light     : return "light"; break;
1141     case FXFont::Normal    : return "normal"; break;
1142     case FXFont::Medium    : return "medium"; break;
1143     case FXFont::DemiBold  : return "demibold"; break;
1144     case FXFont::Bold      : return "bold"; break;
1145     case FXFont::ExtraBold : return "extrabold"; break;
1146     case FXFont::Black     : return "heavy"; break;
1147     default: return ""; break;
1148     }
1149   return "";
1150   }
1151 
slantToString(FXuint slant)1152 static FXString slantToString(FXuint slant){
1153   switch(slant){
1154     case FXFont::Straight       : return "regular"; break;
1155     case FXFont::Italic         : return "italic"; break;
1156     case FXFont::Oblique        : return "oblique"; break;
1157     case FXFont::ReverseItalic  : return "reverse italic"; break;
1158     case FXFont::ReverseOblique : return "reverse oblique"; break;
1159     default : return ""; break;
1160     }
1161   return "";
1162   }
1163 
setupFont()1164 void FXDesktopSetup::setupFont(){
1165   FXString fontname = font->getActualName() +", " + FXStringVal(font->getSize()/10);
1166   if(font->getWeight()!=0 && font->getWeight()!=FXFont::Normal){
1167     fontname += ", " + weightToString(font->getWeight());
1168     }
1169   if (font->getSlant()!=0 && font->getSlant()!=FXFont::Straight){
1170     fontname += ", " + slantToString(font->getSlant());
1171     }
1172 
1173   tabitem->setFont(font);
1174   label1->setFont(font);
1175   label2->setFont(font);
1176   label3->setFont(font);
1177   label4->setFont(font);
1178   label5->setFont(font);
1179 
1180   menulabels[0]->setFont(font);
1181   menulabels[1]->setFont(font);
1182   menulabels[2]->setFont(font);
1183   menulabels[3]->setFont(font);
1184   menulabels[4]->setFont(font);
1185   menulabels[5]->setFont(font);
1186 
1187   textfield1->setFont(font);
1188   fontbutton->setText(fontname);
1189   }
1190 
1191 
initColors()1192 void FXDesktopSetup::initColors(){
1193   FXint i,scheme=-1;
1194 
1195   /// Find the correct current scheme
1196   for(i=0;i<numThemes;i++){
1197     if((theme_current.base==ColorThemes[i].base) &&
1198        (theme_current.border==ColorThemes[i].border) &&
1199        (theme_current.back==ColorThemes[i].back) &&
1200        (theme_current.fore==ColorThemes[i].fore) &&
1201        (theme_current.selfore==ColorThemes[i].selfore) &&
1202        (theme_current.selback==ColorThemes[i].selback) &&
1203        (theme_current.menufore==ColorThemes[i].menufore) &&
1204        (theme_current.menuback==ColorThemes[i].menuback) &&
1205        (theme_current.tipfore==ColorThemes[i].tipfore) &&
1206        (theme_current.tipback==ColorThemes[i].tipback)){
1207       scheme=i;
1208       break;
1209       }
1210     }
1211 
1212   if (scheme==-1) {
1213     theme_user.base = theme_current.base;
1214     theme_user.border = theme_current.border;
1215     theme_user.back = theme_current.back;
1216     theme_user.fore = theme_current.fore;
1217     theme_user.selfore = theme_current.selfore;
1218     theme_user.selback = theme_current.selback;
1219     theme_user.menufore = theme_current.menufore;
1220     theme_user.menuback = theme_current.menuback;
1221     theme_user.tipfore = theme_current.tipfore;
1222     theme_user.tipback = theme_current.tipback;
1223     list->appendItem("Current",NULL,&theme_user);
1224     }
1225 
1226   /// Add Standard Themes to List
1227   for(i=0; i<numThemes; i++){
1228     list->appendItem(ColorThemes[i].name,NULL,(void*)&ColorThemes[i]);
1229     }
1230   list->appendItem("User Defined");
1231   list->setCurrentItem(scheme);
1232   }
1233 
1234 
setupColors()1235 void FXDesktopSetup::setupColors(){
1236   shadow = makeShadowColor(theme_current.base);
1237   hilite = makeHiliteColor(theme_current.base);
1238 
1239   tabitem->setBorderColor(theme_current.border);
1240   tabitem->setBaseColor(theme_current.base);
1241   tabitem->setBackColor(theme_current.base);
1242   tabitem->setTextColor(theme_current.fore);
1243   tabitem->setShadowColor(shadow);
1244   tabitem->setHiliteColor(hilite);
1245 
1246   tabframe->setBorderColor(theme_current.border);
1247   tabframe->setBaseColor(theme_current.base);
1248   tabframe->setBackColor(theme_current.base);
1249   tabframe->setShadowColor(shadow);
1250   tabframe->setHiliteColor(hilite);
1251 
1252 
1253   tabsubframe->setBorderColor(theme_current.border);
1254   tabsubframe->setBaseColor(theme_current.base);
1255   tabsubframe->setBackColor(theme_current.base);
1256   tabsubframe->setShadowColor(shadow);
1257   tabsubframe->setHiliteColor(hilite);
1258 
1259   menuframe->setBorderColor(theme_current.border);
1260   menuframe->setBaseColor(theme_current.base);
1261   menuframe->setBackColor(theme_current.base);
1262   menuframe->setShadowColor(shadow);
1263   menuframe->setHiliteColor(hilite);
1264 
1265   grpbox1->setBorderColor(theme_current.border);
1266   grpbox1->setBaseColor(theme_current.base);
1267   grpbox1->setBackColor(theme_current.base);
1268   grpbox1->setShadowColor(shadow);
1269   grpbox1->setHiliteColor(hilite);
1270   grpbox1->setTextColor(theme_current.fore);
1271 
1272   grpbox2->setBorderColor(theme_current.border);
1273   grpbox2->setBaseColor(theme_current.base);
1274   grpbox2->setBackColor(theme_current.base);
1275   grpbox2->setShadowColor(shadow);
1276   grpbox2->setHiliteColor(hilite);
1277   grpbox2->setTextColor(theme_current.fore);
1278 
1279   sep1->setBorderColor(theme_current.border);
1280   sep1->setBaseColor(theme_current.base);
1281   sep1->setBackColor(theme_current.base);
1282   sep1->setShadowColor(shadow);
1283   sep1->setHiliteColor(hilite);
1284 
1285   sep2->setBorderColor(theme_current.border);
1286   sep2->setBaseColor(theme_current.base);
1287   sep2->setBackColor(theme_current.base);
1288   sep2->setShadowColor(shadow);
1289   sep2->setHiliteColor(hilite);
1290 
1291   sep3->setBorderColor(theme_current.border);
1292   sep3->setBaseColor(theme_current.base);
1293   sep3->setBackColor(theme_current.base);
1294   sep3->setShadowColor(shadow);
1295   sep3->setHiliteColor(hilite);
1296 
1297   labeltextframe1->setBorderColor(theme_current.border);
1298   labeltextframe1->setBaseColor(theme_current.base);
1299   labeltextframe1->setBackColor(theme_current.base);
1300   labeltextframe1->setShadowColor(shadow);
1301   labeltextframe1->setHiliteColor(hilite);
1302 
1303 
1304   labeltextframe2->setBorderColor(theme_current.border);
1305   labeltextframe2->setBaseColor(theme_current.base);
1306   labeltextframe2->setBackColor(theme_current.base);
1307   labeltextframe2->setShadowColor(shadow);
1308   labeltextframe2->setHiliteColor(hilite);
1309 
1310   label1->setBorderColor(theme_current.border);
1311   label1->setBaseColor(theme_current.base);
1312   label1->setBackColor(theme_current.base);
1313   label1->setTextColor(theme_current.fore);
1314   label1->setShadowColor(shadow);
1315   label1->setHiliteColor(hilite);
1316 
1317   label2->setBorderColor(theme_current.tipfore);
1318   label2->setBaseColor(theme_current.tipback);
1319   label2->setBackColor(theme_current.tipback);
1320   label2->setTextColor(theme_current.tipfore);
1321   label2->setShadowColor(shadow);
1322   label2->setHiliteColor(hilite);
1323 
1324   label3->setBorderColor(theme_current.border);
1325   label3->setBaseColor(theme_current.base);
1326   label3->setBackColor(theme_current.selback);
1327   label3->setTextColor(theme_current.selfore);
1328   label3->setShadowColor(shadow);
1329   label3->setHiliteColor(hilite);
1330 
1331   label4->setBorderColor(theme_current.border);
1332   label4->setBaseColor(theme_current.base);
1333   label4->setBackColor(theme_current.base);
1334   label4->setTextColor(theme_current.fore);
1335   label4->setShadowColor(shadow);
1336   label4->setHiliteColor(hilite);
1337 
1338   label5->setBorderColor(theme_current.tipfore);
1339   label5->setBaseColor(theme_current.tipback);
1340   label5->setBackColor(theme_current.tipback);
1341   label5->setTextColor(theme_current.tipfore);
1342   label5->setShadowColor(shadow);
1343   label5->setHiliteColor(hilite);
1344 
1345   for (int i=0;i<6;i++){
1346     menulabels[i]->setBorderColor(theme_current.border);
1347     menulabels[i]->setBaseColor(theme_current.base);
1348     menulabels[i]->setBackColor(theme_current.base);
1349     menulabels[i]->setTextColor(theme_current.fore);
1350     menulabels[i]->setShadowColor(shadow);
1351     menulabels[i]->setHiliteColor(hilite);
1352     }
1353 
1354   menulabels[4]->setBorderColor(theme_current.border);
1355   menulabels[4]->setBaseColor(theme_current.menuback);
1356   menulabels[4]->setBackColor(theme_current.menuback);
1357   menulabels[4]->setTextColor(theme_current.menufore);
1358   menulabels[4]->setShadowColor(shadow);
1359   menulabels[4]->setHiliteColor(hilite);
1360 
1361   textframe1->setBorderColor(theme_current.border);
1362   textframe1->setBaseColor(theme_current.base);
1363   textframe1->setBackColor(theme_current.back);
1364   textframe1->setShadowColor(shadow);
1365   textframe1->setHiliteColor(hilite);
1366 
1367   textframe2->setBorderColor(theme_current.border);
1368   textframe2->setBaseColor(theme_current.base);
1369   textframe2->setBackColor(theme_current.back);
1370   textframe2->setShadowColor(shadow);
1371   textframe2->setHiliteColor(hilite);
1372 
1373   textfield1->setBorderColor(theme_current.border);
1374   textfield1->setBackColor(theme_current.back);
1375   textfield1->setBaseColor(theme_current.base);
1376   textfield1->setTextColor(theme_current.fore);
1377   textfield1->setSelTextColor(theme_current.selfore);
1378   textfield1->setSelBackColor(theme_current.selback);
1379   textfield1->setCursorColor(theme_current.fore);
1380   textfield1->setShadowColor(shadow);
1381   textfield1->setHiliteColor(hilite);
1382 
1383   tooltip->setTextColor(theme_current.tipfore);
1384   tooltip->setBackColor(theme_current.tipback);
1385   }
1386 
1387 
getOutputFile()1388 FXString FXDesktopSetup::getOutputFile(){
1389   FXString desktopfile=FXSystem::getHomeDirectory() + PATHSEPSTRING +".foxrc";
1390 
1391   if(!FXStat::exists(desktopfile)){
1392     if(!FXDir::create(desktopfile)){
1393       return FXString::null;
1394       }
1395     }
1396 
1397   if(applicationname.empty()){
1398     desktopfile = desktopfile + PATHSEPSTRING + "Desktop";
1399     }
1400   else if(vendorname.empty()){
1401     desktopfile = desktopfile + PATHSEPSTRING + applicationname;
1402     }
1403   else{
1404     desktopfile = desktopfile + PATHSEPSTRING + vendorname;
1405     if(!FXStat::exists(desktopfile)){
1406       if(!FXDir::create(desktopfile)){
1407         return FXString::null;
1408         }
1409       }
1410     desktopfile += PATHSEPSTRING + applicationname;
1411     }
1412   return desktopfile;
1413   }
1414 
1415 
1416 
1417 
writeDesktop()1418 FXbool FXDesktopSetup::writeDesktop(){
1419 /*
1420   fxmessage("{\"\",FXRGB(%d,%d,%d),FXRGB(%d,%d,%d),FXRGB(%d,%d,%d),FXRGB(%d,%d,%d),FXRGB(%d,%d,%d),FXRGB(%d,%d,%d),FXRGB(%d,%d,%d),FXRGB(%d,%d,%d),FXRGB(%d,%d,%d),FXRGB(%d,%d,%d)}\n",
1421     FXREDVAL(base),FXGREENVAL(base),FXBLUEVAL(base),
1422     FXREDVAL(border),FXGREENVAL(border),FXBLUEVAL(border),
1423     FXREDVAL(back),FXGREENVAL(back),FXBLUEVAL(back),
1424     FXREDVAL(fore),FXGREENVAL(fore),FXBLUEVAL(fore),
1425     FXREDVAL(selback),FXGREENVAL(selback),FXBLUEVAL(selback),
1426     FXREDVAL(selfore),FXGREENVAL(selfore),FXBLUEVAL(selfore),
1427     FXREDVAL(tipback),FXGREENVAL(tipback),FXBLUEVAL(tipback),
1428     FXREDVAL(tipfore),FXGREENVAL(tipfore),FXBLUEVAL(tipfore),
1429     FXREDVAL(menuback),FXGREENVAL(menuback),FXBLUEVAL(menuback),
1430     FXREDVAL(menufore),FXGREENVAL(menufore),FXBLUEVAL(menufore)
1431 
1432     );
1433 */
1434 
1435         FXString desktopfile=getOutputFile();
1436 
1437   // Save Colors
1438   desktopsettings.writeColorEntry("SETTINGS","basecolor",theme_current.base);
1439   desktopsettings.writeColorEntry("SETTINGS","bordercolor",theme_current.border);
1440   desktopsettings.writeColorEntry("SETTINGS","backcolor",theme_current.back);
1441   desktopsettings.writeColorEntry("SETTINGS","forecolor",theme_current.fore);
1442   desktopsettings.writeColorEntry("SETTINGS","hilitecolor",hilite);
1443   desktopsettings.writeColorEntry("SETTINGS","shadowcolor",shadow);
1444   desktopsettings.writeColorEntry("SETTINGS","selforecolor",theme_current.selfore);
1445   desktopsettings.writeColorEntry("SETTINGS","selbackcolor",theme_current.selback);
1446   desktopsettings.writeColorEntry("SETTINGS","tipforecolor",theme_current.tipfore);
1447   desktopsettings.writeColorEntry("SETTINGS","tipbackcolor",theme_current.tipback);
1448   desktopsettings.writeColorEntry("SETTINGS","selmenutextcolor",theme_current.menufore);
1449   desktopsettings.writeColorEntry("SETTINGS","selmenubackcolor",theme_current.menuback);
1450 
1451   // Save General Settings
1452   desktopsettings.writeUnsignedEntry("SETTINGS","typingspeed",typingSpeed);
1453   desktopsettings.writeUnsignedEntry("SETTINGS","clickspeed",clickSpeed);
1454   desktopsettings.writeUnsignedEntry("SETTINGS","scrollspeed",scrollSpeed);
1455   desktopsettings.writeUnsignedEntry("SETTINGS","scrolldelay",scrollDelay);
1456   desktopsettings.writeUnsignedEntry("SETTINGS","blinkspeed",blinkSpeed);
1457   desktopsettings.writeUnsignedEntry("SETTINGS","animspeed",animSpeed);
1458   desktopsettings.writeUnsignedEntry("SETTINGS","menupause",menuPause);
1459   desktopsettings.writeUnsignedEntry("SETTINGS","tippause",tooltipPause);
1460   desktopsettings.writeUnsignedEntry("SETTINGS","tiptime",tooltipTime);
1461   desktopsettings.writeUnsignedEntry("SETTINGS","maxcolors",maxcolors);
1462 
1463   desktopsettings.writeIntEntry("SETTINGS","dragdelta",dragDelta);
1464   desktopsettings.writeIntEntry("SETTINGS","wheellines",wheelLines);
1465 
1466   desktopsettings.writeRealEntry("SETTINGS","displaygamma",gamma);
1467   desktopsettings.writeStringEntry("SETTINGS","iconpath",iconpath.text());
1468 
1469 
1470   FXString fontspec=font->getFont();
1471 
1472   desktopsettings.writeStringEntry("SETTINGS","normalfont",fontspec.text());
1473 
1474   if(!desktopsettings.unparseFile(desktopfile))  return FALSE;
1475 
1476   return TRUE;
1477   }
1478 
1479 
1480 
main(int argc,char ** argv)1481 int main(int argc,char **argv){
1482 
1483   if (argc>1 && ( (compare(argv[1],"-h")==0) || (compare(argv[1],"--help")==0))) {
1484     fprintf(stderr,"Usage: ControlPanel [applicationname] [vendorname]\n");
1485     fprintf(stderr,"Setup desktop appearance for FOX applications. Saves settings to ~/.foxrc/Desktop unless applicationname and optionally vendorname are given.\n");
1486     return 0;
1487     }
1488 
1489   FXApp application("FOX Desktop Setup","FOX-DESKTOP");
1490   application.init(argc,argv);
1491 
1492   FXDesktopSetup * setup = new FXDesktopSetup(&application);
1493   application.create();
1494 
1495   setup->show(PLACEMENT_SCREEN);
1496 
1497   return application.run();
1498   }
1499