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