1 /* vim:tabstop=4:expandtab:shiftwidth=4
2  *
3  * Idesk -- DesktopIconConfig.cpp
4  *
5  * Copyright (c) 2002, Chris (nikon) (nikon@sc.rr.com)
6  * All rights reserved.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions are met:
10  *
11  *      Redistributions of source code must retain the above copyright
12  *      notice, this list of conditions and the following disclaimer.
13  *
14  *      Redistributions in binary form must reproduce the above copyright
15  *      notice, this list of conditions and the following disclaimer in the
16  *      documentation and/or other materials provided with the distribution.
17  *
18  *      Neither the name of the <ORGANIZATION> nor the names of its
19  *      contributors may be used to endorse or promote products derived from
20  *      this software without specific prior written permission.
21  *
22  * (See the included file COPYING / BSD )
23  */
24 
25 #include "DesktopIconConfig.h"
26 
DesktopIconConfig(const string & fName,CommonOptions * parentData)27 DesktopIconConfig::DesktopIconConfig(const string & fName, CommonOptions * parentData)
28 {
29     iconFilename = fName;
30 
31     common = new CommonOptions();
32 
33     common->setDefaultsFromParent(*parentData);
34 
35     Database db(iconFilename);
36     Table table = db.Query("Icon");
37 
38     if(!table.isValid())
39         cout << "No Icon table found in the config file!!\n";
40     else
41     {
42         common->setOptions(table);
43         setIconOptions(table);
44     }
45 }
46 
~DesktopIconConfig()47 DesktopIconConfig::~DesktopIconConfig()
48 {
49 }
50 
setIconOptions(Table table)51 void DesktopIconConfig::setIconOptions(Table table)
52 {
53     pictureFilename = table.Query("Icon");
54     picExtension = getExtension(pictureFilename);
55     caption = table.Query("Caption");
56     captionTip = table.Query("ToolTip.Caption");
57     x = atoi(table.Query("X").c_str());
58     y = atoi(table.Query("Y").c_str());
59     width = atoi(table.Query("Width").c_str());
60     height = atoi(table.Query("Height").c_str());
61 
62     if (table.ArrayExists("Command"))
63         commandArray = table.QueryArray("Command");
64     else if (table.Query("Command") != "")  //for a single command (non-array)
65         commandArray.push_back(table.Query("Command"));
66 }
67 
saveIcon(int xCord,int yCord)68 void DesktopIconConfig::saveIcon(int xCord, int yCord)
69 {
70     x = xCord;
71     y = yCord;
72 
73     Database db(iconFilename);
74     Table & table = db.Query("Icon");
75 
76     if(table.isValid())
77     {
78         table.Set("X", itos(xCord));
79         table.Set("Y", itos(yCord));
80 
81         db.Write();
82     }
83 
84 }
85 
getExtension(const string & file)86 string DesktopIconConfig::getExtension(const string & file)
87 {
88     string returnString;
89     int pos = file.rfind('.', file.size() - 1); //search for '.' from the end
90 
91     if (pos == string::npos      || //no '.' is string
92         pos == (file.size() - 1) || // '.' is at end of string
93         pos == file.size() )        // '.' is at beginning of string
94     {
95         cout << "Cannot determine file extension of: " << file << endl;
96         returnString = "?";
97     }
98     else  //grab all of the string that is after the '.'
99         returnString = getUpper(file.substr(pos + 1, file.size() - pos));
100 
101     if(returnString.size() > 3){  //remove all white space
102 	    while(returnString.size() > 3){
103 	       returnString =   returnString.substr(0, returnString.size() - 1);
104 	    }
105     }
106 
107     return returnString;
108 }
109 
110 /***************************************************************************\
111  * CommonOptions class                                                     *
112 \***************************************************************************/
113 
CommonOptions()114 CommonOptions::CommonOptions()
115 {
116 }
117 
~CommonOptions()118 CommonOptions::~CommonOptions()
119 {
120 }
121 
setCommonDefaults()122 void CommonOptions::setCommonDefaults()
123 {
124 
125     fontName = "Arial";
126     fontSize = 16;
127     fontColor = "#ffffff";
128 
129     clickDelay = 200;
130 
131     shadowColor = "#000000";
132     shadowX = 1;
133     shadowY = 1;
134 
135     isBold = false;
136 
137     shadowOn = false;
138     snapShadow = false;
139     snapShadowTrans = -1;
140 
141     captionOnHover = false;
142     captionPlacement = "Bottom";
143 
144     fillStyle = "None";
145 
146     cursorOver = XC_hand1;
147 }
148 
setDefaultsFromParent(CommonOptions & other)149 void CommonOptions::setDefaultsFromParent(CommonOptions & other)
150 {
151     fontName = other.fontName;
152     fontSize = other.fontSize;
153     fontColor = other.fontColor;
154 
155     clickDelay = other.clickDelay;
156 
157     shadowColor = other.shadowColor;
158     shadowX = other.shadowX;
159     shadowY = other.shadowY;
160 
161     isBold = other.isBold;
162 
163     shadowOn = other.shadowOn;
164     snapShadow = other.snapShadow;
165     snapShadowTrans = other.snapShadowTrans;
166 
167     captionOnHover = other.captionOnHover;
168 
169     captionPlacement = other.captionPlacement;
170 
171     cursorOver = other.cursorOver;
172 
173     fillStyle = other.fillStyle;
174 
175 }
176 
setOptions(Table t)177 void CommonOptions::setOptions(Table t)
178 {
179     table = t;
180 
181     //font options
182     if (table.Query("FontName") != "")
183         fontName = table.Query("FontName");
184     if (table.Query("FontSize") != "")
185         fontSize = atoi(table.Query("FontSize").c_str());
186 	if (fontSize>256)
187 	    fontSize = 16;
188     if (table.Query("FontColor") != "")
189         fontColor = table.Query("FontColor");
190 
191     //click options
192     if (table.Query("ClickDelay") != "")
193         clickDelay = atoi(table.Query("ClickDelay").c_str());
194 
195     //shadow fonts
196     if (getUpper(table.Query("Shadow")) == "TRUE")
197         shadowOn = true;
198     else if (getUpper(table.Query("Shadow")) == "FALSE")
199         shadowOn = false;
200 
201     if (table.Query("ShadowColor") != "")
202         shadowColor = table.Query("ShadowColor");
203     if (table.Query("ShadowX") != "")
204         shadowX = atoi(table.Query("ShadowX").c_str());
205     if (table.Query("ShadowY") != "")
206         shadowY = atoi(table.Query("ShadowY").c_str());
207 
208     //boldness
209     if (getUpper(table.Query( "Bold" )) == "TRUE")
210         isBold = true;
211     else if (getUpper(table.Query( "Bold" )) == "FALSE")
212         isBold = false;
213 
214     //snap shadow
215     if (getUpper(table.Query("SnapShadow")) == "TRUE")
216         snapShadow = true;
217     else if (getUpper(table.Query("SnapShadow")) == "FALSE")
218         snapShadow = false;
219 
220     if (table.Query("SnapShadowTrans") != "")
221         snapShadowTrans = atoi(table.Query("SnapShadowTrans").c_str());
222 
223     //captionOnHover
224     if (getUpper(table.Query("CaptionOnHover")) == "TRUE")
225         captionOnHover = true;
226     else if (getUpper(table.Query("CaptionOnHover")) == "FALSE")
227         captionOnHover = false;
228 
229 
230     //captionPlacement
231     if (getUpper(table.Query("CaptionPlacement")) == "BOTTOM")
232         captionPlacement = "Bottom";
233     else if (getUpper(table.Query("CaptionPlacement")) == "TOP")
234         captionPlacement = "Top";
235     else if (getUpper(table.Query("CaptionPlacement")) == "LEFT")
236         captionPlacement = "Left";
237     else if (getUpper(table.Query("CaptionPlacement")) == "RIGHT")
238         captionPlacement = "Right";
239 
240 
241     //fillStyle
242     if (getUpper(table.Query("FillStyle")) == "FILLINVERT")
243 	    fillStyle = "FillInvert";
244     else if (getUpper(table.Query("FillStyle")) == "FILLHLINE")
245 	    fillStyle = "FillHLine";
246     else if (getUpper(table.Query("FillStyle")) == "FILLVLINE")
247 	    fillStyle = "FillVLine";
248     else if (getUpper(table.Query("FillStyle")) == "None")
249 	    fillStyle = "None";
250 
251     //Cursor
252     if (getUpper(table.Query("CursorOver")) == "X_CURSOR")
253 	    cursorOver = XC_X_cursor;
254     else if (getUpper(table.Query("CursorOver")) == "ARROW")
255 	    cursorOver = XC_arrow;
256     else if (getUpper(table.Query("CursorOver")) == "BASED_ARROW_DOWN")
257 	    cursorOver = XC_based_arrow_down;
258     else if (getUpper(table.Query("CursorOver")) == "BASED_ARROW_UP")
259 	    cursorOver = XC_based_arrow_up;
260     else if (getUpper(table.Query("CursorOver")) == "BOAT")
261 	    cursorOver = XC_boat;
262     else if (getUpper(table.Query("CursorOver")) == "BOGOSiTY")
263 	    cursorOver = XC_bogosity;
264     else if (getUpper(table.Query("CursorOver")) == "BOTTOM_LEFT_CORNER")
265 	    cursorOver = XC_bottom_left_corner;
266     else if (getUpper(table.Query("CursorOver")) == "BOTTOM_RIGHT_CORNER")
267 	    cursorOver =  XC_bottom_right_corner;
268     else if (getUpper(table.Query("CursorOver")) == "BOTTOM_SIDE")
269 	    cursorOver = XC_bottom_side;
270     else if (getUpper(table.Query("CursorOver")) == "BOTTOM_TEE")
271 	    cursorOver = XC_bottom_tee;
272     else if (getUpper(table.Query("CursorOver")) == "BOX_SPIRAL")
273 	    cursorOver =  XC_box_spiral;
274     else if (getUpper(table.Query("CursorOver")) == "CENTER_PTR")
275 	    cursorOver = XC_center_ptr;
276     else if (getUpper(table.Query("CursorOver")) == "CIRCLE")
277 	    cursorOver = XC_circle;
278     else if (getUpper(table.Query("CursorOver")) == "CLOCK")
279 	    cursorOver = XC_clock;
280     else if (getUpper(table.Query("CursorOver")) == "COFFE_MUG")
281 	    cursorOver = XC_coffee_mug;
282     else if (getUpper(table.Query("CursorOver")) == "CROSS")
283 	    cursorOver = XC_cross;
284     else if (getUpper(table.Query("CursorOver")) == "CROSS_REVERSE")
285 	    cursorOver = XC_cross_reverse;
286     else if (getUpper(table.Query("CursorOver")) == "CROSSHAIR")
287 	    cursorOver = XC_crosshair;
288     else if (getUpper(table.Query("CursorOver")) == "DIAMOND_CROSS")
289 	    cursorOver = XC_diamond_cross;
290     else if (getUpper(table.Query("CursorOver")) == "DOT")
291 	    cursorOver = XC_dot;
292     else if (getUpper(table.Query("CursorOver")) == "DOTBOX")
293 	    cursorOver = XC_dotbox;
294     else if (getUpper(table.Query("CursorOver")) == "DOUBLE_ARROW")
295 	    cursorOver = XC_double_arrow;
296     else if (getUpper(table.Query("CursorOver")) == "DRAFT_LARGE")
297 	    cursorOver = XC_draft_large;
298     else if (getUpper(table.Query("CursorOver")) == "DRAFT_SMALL")
299 	    cursorOver = XC_draft_small;
300     else if (getUpper(table.Query("CursorOver")) == "DRAPED_BOX")
301 	    cursorOver = XC_draped_box;
302     else if (getUpper(table.Query("CursorOver")) == "EXCHANGE")
303 	    cursorOver = XC_exchange;
304     else if (getUpper(table.Query("CursorOver")) == "FLEUR")
305 	    cursorOver =  XC_fleur;
306     else if (getUpper(table.Query("CursorOver")) == "GOBBLER")
307 	    cursorOver = XC_gobbler;
308     else if (getUpper(table.Query("CursorOver")) == "GUMBY")
309 	    cursorOver = XC_gumby;
310     else if (getUpper(table.Query("CursorOver")) == "HAND1")
311 	    cursorOver = XC_hand1;
312     else if (getUpper(table.Query("CursorOver")) == "HAND2")
313 	    cursorOver = XC_hand2;
314     else if (getUpper(table.Query("CursorOver")) == "HEART")
315 	    cursorOver = XC_heart;
316     else if (getUpper(table.Query("CursorOver")) == "ICON")
317 	    cursorOver = XC_icon;
318     else if (getUpper(table.Query("CursorOver")) == "IRON_CROSS")
319 	    cursorOver = XC_iron_cross;
320     else if (getUpper(table.Query("CursorOver")) == "LEFT_PTR")
321 	    cursorOver = XC_left_ptr;
322     else if (getUpper(table.Query("CursorOver")) == "LEFT_PTR")
323 	    cursorOver = XC_left_side;
324     else if (getUpper(table.Query("CursorOver")) == "LEFT_TEE")
325 	    cursorOver = XC_left_tee;
326     else if (getUpper(table.Query("CursorOver")) == "LEFFBUTTON")
327 	    cursorOver = XC_leftbutton;
328     else if (getUpper(table.Query("CursorOver")) == "LL_ANGLE")
329 	    cursorOver = XC_ll_angle;
330     else if (getUpper(table.Query("CursorOver")) == "LR_ANGLE")
331 	    cursorOver = XC_lr_angle;
332     else if (getUpper(table.Query("CursorOver")) == "MAN")
333 	    cursorOver = XC_man;
334     else if (getUpper(table.Query("CursorOver")) == "MIDDLEBUTTON")
335 	    cursorOver = XC_middlebutton;
336     else if (getUpper(table.Query("CursorOver")) == "MOUSE")
337 	    cursorOver = XC_mouse;
338     else if (getUpper(table.Query("CursorOver")) == "PENCIL")
339 	    cursorOver = XC_pencil;
340     else if (getUpper(table.Query("CursorOver")) == "PIRATE")
341 	    cursorOver = XC_pirate;
342     else if (getUpper(table.Query("CursorOver")) == "PLUS")
343 	    cursorOver = XC_plus;
344     else if (getUpper(table.Query("CursorOver")) == "QUESTION_ARROW")
345 	    cursorOver = XC_question_arrow;
346     else if (getUpper(table.Query("CursorOver")) == "RIGHT_PTR")
347 	    cursorOver = XC_right_ptr;
348     else if (getUpper(table.Query("CursorOver")) == "RIGHT_SIDE")
349 	    cursorOver = XC_right_side;
350     else if (getUpper(table.Query("CursorOver")) == "RIGHT_TEE")
351 	    cursorOver = XC_right_tee;
352     else if (getUpper(table.Query("CursorOver")) == "RIGHTBUTTON")
353 	    cursorOver = XC_rightbutton;
354     else if (getUpper(table.Query("CursorOver")) == "RTL_LOGO")
355 	    cursorOver = XC_rtl_logo;
356     else if (getUpper(table.Query("CursorOver")) == "SAILBOAT")
357 	    cursorOver = XC_sailboat;
358     else if (getUpper(table.Query("CursorOver")) == "SB_DOWN_ARROW")
359 	    cursorOver = XC_sb_down_arrow;
360     else if (getUpper(table.Query("CursorOver")) == "SB_H_DOUBLE_ARROW")
361 	    cursorOver = XC_sb_h_double_arrow;
362     else if (getUpper(table.Query("CursorOver")) == "SB_LEFT_ARROW")
363 	    cursorOver = XC_sb_left_arrow;
364     else if (getUpper(table.Query("CursorOver")) == "SB_RIGHT_ARROW")
365 	    cursorOver = XC_sb_right_arrow;
366     else if (getUpper(table.Query("CursorOver")) == "SB_UP_ARROW")
367 	    cursorOver = XC_sb_up_arrow;
368     else if (getUpper(table.Query("CursorOver")) == "SB_V_DOUBLE_ARROW")
369 	    cursorOver = XC_sb_v_double_arrow;
370     else if (getUpper(table.Query("CursorOver")) == "SHUTTLE")
371 	    cursorOver = XC_shuttle;
372     else if (getUpper(table.Query("CursorOver")) == "SIZING")
373 	    cursorOver = XC_sizing;
374     else if (getUpper(table.Query("CursorOver")) == "SPIDER")
375 	    cursorOver = XC_spider;
376     else if (getUpper(table.Query("CursorOver")) == "SPRAYCAN")
377 	    cursorOver = XC_spraycan;
378     else if (getUpper(table.Query("CursorOver")) == "STAR")
379 	    cursorOver = XC_star;
380     else if (getUpper(table.Query("CursorOver")) == "TARGET")
381 	    cursorOver = XC_target;
382     else if (getUpper(table.Query("CursorOver")) == "TCROSS")
383 	    cursorOver = XC_tcross;
384     else if (getUpper(table.Query("CursorOver")) == "TOP_LEFT_ARROW")
385 	    cursorOver = XC_top_left_arrow;
386     else if (getUpper(table.Query("CursorOver")) == "TOP_LEFT_CORNER")
387 	    cursorOver = XC_top_left_corner;
388     else if (getUpper(table.Query("CursorOver")) == "TOP_RIGHT_CORNER")
389 	    cursorOver = XC_top_right_corner;
390     else if (getUpper(table.Query("CursorOver")) == "TOP_SIDE")
391 	    cursorOver = XC_top_side;
392     else if (getUpper(table.Query("CursorOver")) == "TOP_TEE")
393 	    cursorOver = XC_top_tee;
394     else if (getUpper(table.Query("CursorOver")) == "TREK")
395 	    cursorOver = XC_trek;
396     else if (getUpper(table.Query("CursorOver")) == "UL_ANGLE")
397 	    cursorOver = XC_ul_angle;
398     else if (getUpper(table.Query("CursorOver")) == "UMBRELLA")
399 	    cursorOver = XC_umbrella;
400     else if (getUpper(table.Query("CursorOver")) == "UR_ANGLE")
401 	    cursorOver = XC_ur_angle;
402     else if (getUpper(table.Query("CursorOver")) == "WATCH")
403 	    cursorOver = XC_watch;
404     else if (getUpper(table.Query("CursorOver")) == "XTERM")
405 	    cursorOver = XC_xterm;
406 }
407