OSDN Git Service

Fix tag line editor strangeness and add spell config dialog.
[neighbornote/NeighborNote.git] / src / cx / fbn / nevernote / Global.java
1 /*\r
2  * This file is part of NeverNote \r
3  * Copyright 2009 Randy Baumgarte\r
4  * \r
5  * This file may be licensed under the terms of of the\r
6  * GNU General Public License Version 2 (the ``GPL'').\r
7  *\r
8  * Software distributed under the License is distributed\r
9  * on an ``AS IS'' basis, WITHOUT WARRANTY OF ANY KIND, either\r
10  * express or implied. See the GPL for the specific language\r
11  * governing rights and limitations.\r
12  *\r
13  * You should have received a copy of the GPL along with this\r
14  * program. If not, go to http://www.gnu.org/licenses/gpl.html\r
15  * or write to the Free Software Foundation, Inc.,\r
16  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\r
17  *\r
18 */\r
19 \r
20 package cx.fbn.nevernote;\r
21 \r
22 \r
23 //import java.io.ByteArrayOutputStream;\r
24 \r
25 import java.io.PrintStream;\r
26 import java.text.SimpleDateFormat;\r
27 import java.util.ArrayList;\r
28 import java.util.Calendar;\r
29 import java.util.HashMap;\r
30 import java.util.List;\r
31 \r
32 import com.evernote.edam.type.Accounting;\r
33 import com.evernote.edam.type.PrivilegeLevel;\r
34 import com.evernote.edam.type.User;\r
35 import com.evernote.edam.type.UserAttributes;\r
36 import com.swabunga.spell.engine.Configuration;\r
37 import com.trolltech.qt.core.QByteArray;\r
38 import com.trolltech.qt.core.QSettings;\r
39 import com.trolltech.qt.gui.QPalette;\r
40 \r
41 import cx.fbn.nevernote.config.FileManager;\r
42 import cx.fbn.nevernote.config.InitializationException;\r
43 import cx.fbn.nevernote.config.StartupConfig;\r
44 import cx.fbn.nevernote.gui.ContainsAttributeFilterTable;\r
45 import cx.fbn.nevernote.gui.DateAttributeFilterTable;\r
46 import cx.fbn.nevernote.gui.ShortcutKeys;\r
47 import cx.fbn.nevernote.utilities.ApplicationLogger;\r
48 \r
49 public class Global {\r
50         public static String version = "0.91";\r
51     public static String username = ""; \r
52     public static String password = "";     \r
53     \r
54 \r
55     public static final int mainThreadId=0;\r
56     \r
57     public static final int syncThreadId=1;\r
58     \r
59     public static final int tagCounterThreadId=2;\r
60     \r
61     public static final int trashCounterThreadId=3;   // This should always be the highest thread ID\r
62 \r
63     public static final int indexThreadId=4;    // Thread for indexing words\r
64 \r
65     public static final int saveThreadId=5;     // Thread used for processing data to saving content\r
66 \r
67     public static final int notebookCounterThreadId=6;   // Notebook Thread\r
68 \r
69     public static final int indexThread03Id=7;   // unused\r
70 \r
71     public static final int indexThread04Id=8;   // unused\r
72     \r
73     public static final int dbThreadId=9;   // This should always be the highest thread ID\r
74     \r
75     \r
76     public static HashMap<String,String> passwordSafe = new HashMap<String, String>();\r
77     public static List<String> passwordRemember = new ArrayList<String>();\r
78     public static String currentNotebookGuid;\r
79     public static User user; \r
80     public static long authTimeRemaining;\r
81     public static long authRefreshTime;\r
82     public static long failedRefreshes = 0;\r
83     public static boolean keepRunning;\r
84     \r
85     public static String userStoreUrl;\r
86     public static String noteStoreUrl;\r
87     public static String noteStoreUrlBase;\r
88     \r
89     public static int noteTableCreationPosition = 0;\r
90     public static int noteTableTitlePosition = 1;\r
91     public static int noteTableTagPosition = 2;\r
92     public static int noteTableNotebookPosition = 3;\r
93     public static int noteTableChangedPosition = 4;\r
94     public static int noteTableGuidPosition = 5;\r
95     public static int noteTableAuthorPosition = 6;\r
96     public static int noteTableSourceUrlPosition = 7;\r
97     public static int noteTableSubjectDatePosition = 8;\r
98     public static int noteTableSynchronizedPosition = 9;\r
99     public static int noteTableColumnCount = 10;\r
100     public static Integer cryptCounter = 0;\r
101     \r
102     public static int minimumWordCount = 2;\r
103     private static String wordRegex;\r
104     public static boolean enableCarriageReturnFix = false;\r
105     \r
106     public static String name = null;\r
107     public static QSettings     settings;\r
108     public static boolean isConnected;\r
109     public static boolean showDeleted = false;\r
110     public static boolean disableUploads = false;\r
111         public static int messageLevel;\r
112         public static String tagDelimeter = ",";\r
113         public static String attachmentNameDelimeter = "------";\r
114         \r
115         public static String    databaseName = new String("NeverNote");\r
116         public static DateAttributeFilterTable createdSinceFilter;\r
117         public static DateAttributeFilterTable createdBeforeFilter;\r
118         public static DateAttributeFilterTable changedSinceFilter;\r
119         public static DateAttributeFilterTable changedBeforeFilter;\r
120         public static ContainsAttributeFilterTable containsFilter;\r
121         public static ApplicationLogger    logger;\r
122         PrintStream stdoutStream;\r
123         public static QPalette                          originalPalette;\r
124         public static ShortcutKeys                      shortcutKeys;\r
125         public static boolean                           disableViewing;\r
126         \r
127         public static List<String>                              invalidElements = new ArrayList<String>();\r
128         public static HashMap<String, ArrayList<String>>        invalidAttributes = new HashMap<String, ArrayList<String>>();\r
129         public static boolean mimicEvernoteInterface;\r
130         public static HashMap<String,String> resourceMap;\r
131         public static String cipherPassword = "";\r
132         \r
133         static Calendar startTraceTime;\r
134         static Calendar intervalTraceTime;\r
135 \r
136         private static FileManager fileManager;\r
137         \r
138     // Do initial setup \r
139     public static void setup(StartupConfig startupConfig) throws InitializationException  {\r
140         settings = new QSettings("fbn.cx", startupConfig.getName());\r
141         disableViewing = startupConfig.getDisableViewing();\r
142 \r
143         fileManager = new FileManager(startupConfig.getHomeDirPath(), startupConfig.getProgramDirPath());\r
144 \r
145 \r
146                         getServer();\r
147                         settings.beginGroup("General");\r
148                         String regex = (String) settings.value("regex", "[,\\s]+");\r
149                         setWordRegex(regex);\r
150                         String wordString = settings.value("minimumWordLength", "4").toString();\r
151                         Integer wordLen = new Integer(wordString);\r
152                         Global.minimumWordCount = wordLen;\r
153                         settings.endGroup();\r
154                         settings.beginGroup("Debug");\r
155                         String msglevel = (String) settings.value("messageLevel", "Low");\r
156                         settings.endGroup();\r
157                         messageLevel = 1;\r
158                         setMessageLevel(msglevel);\r
159                         keepRunning = true;\r
160                         disableUploads = disableUploads();\r
161                         enableCarriageReturnFix = enableCarriageReturnFix();\r
162                         logger = new ApplicationLogger("global.log");\r
163                         shortcutKeys = new ShortcutKeys();\r
164                         mimicEvernoteInterface = getMimicEvernoteInterface();\r
165                         resourceMap = new HashMap<String,String>();\r
166                                 \r
167     }\r
168 \r
169     public static String getWordRegex() {\r
170         return wordRegex;\r
171     }\r
172     public static void setWordRegex(String r) {\r
173         wordRegex = r;\r
174     }\r
175     public static void setMessageLevel(String msglevel) {\r
176         if (msglevel.equalsIgnoreCase("low")) \r
177                         messageLevel = 1;\r
178                 if (msglevel.equalsIgnoreCase("medium")) \r
179                         messageLevel = 2;\r
180                 if (msglevel.equalsIgnoreCase("high")) \r
181                                 messageLevel = 3;\r
182                 if (msglevel.equalsIgnoreCase("extreme")) \r
183                                         messageLevel = 4;\r
184                 settings.beginGroup("Debug");\r
185                 settings.setValue("messageLevel", msglevel);\r
186                 settings.endGroup();            \r
187     }\r
188 \r
189     public static void saveUserInformation(User user) {\r
190         settings.beginGroup("User");\r
191                 settings.setValue("id", user.getId());\r
192                 settings.setValue("username", user.getUsername());\r
193                 settings.setValue("email", user.getEmail());\r
194                 settings.setValue("name", user.getName());\r
195                 settings.setValue("timezone", user.getTimezone());\r
196                 settings.setValue("privilege", user.getPrivilege().getValue());\r
197                 settings.setValue("created", user.getCreated());\r
198                 settings.setValue("updated", user.getUpdated());\r
199                 settings.setValue("deleted", user.getDeleted());\r
200                 settings.endGroup();\r
201                 isPremium();\r
202                 if (user.getAttributes()!=null)\r
203                         saveUserAttributes(user.getAttributes());\r
204                 if (user.getAccounting()!=null)\r
205                         saveUserAccounting(user.getAccounting());\r
206 \r
207     }\r
208     public static void saveUserAttributes(UserAttributes attrib) {\r
209         settings.beginGroup("UserAttributes");\r
210                 settings.setValue("defaultLocationName", attrib.getDefaultLocationName());\r
211                 settings.setValue("defaultLatitude", attrib.getDefaultLocationName());\r
212                 settings.setValue("defaultLongitude", attrib.getDefaultLocationName());\r
213                 settings.setValue("incomingEmailAddress", attrib.getIncomingEmailAddress());\r
214                 settings.endGroup();\r
215     }\r
216     public static UserAttributes getUserAttributes() {\r
217         settings.beginGroup("UserAttributes");\r
218         UserAttributes attrib = new UserAttributes();\r
219                 attrib.setDefaultLocationName((String)settings.value("defaultLocationName",""));\r
220                 attrib.setDefaultLatitudeIsSet(false);\r
221                 attrib.setDefaultLongitudeIsSet(false);\r
222                 attrib.setIncomingEmailAddress((String)settings.value("incomingEmailAddress", ""));\r
223                 settings.endGroup();\r
224                 return attrib;\r
225     }\r
226     public static void saveUserAccounting(Accounting acc) {\r
227         settings.beginGroup("UserAccounting");\r
228                 settings.setValue("uploadLimit", acc.getUploadLimit());\r
229                 settings.setValue("uploadLimitEnd", acc.getUploadLimitEnd());\r
230                 settings.setValue("uploadLimitNextMonth", acc.getUploadLimitNextMonth());\r
231                 settings.setValue("premiumServiceStart", acc.getPremiumServiceStart());\r
232                 settings.setValue("nextPaymentDue", acc.getNextPaymentDue());\r
233                 settings.setValue("uploadAmount", acc.getUpdated());\r
234                 settings.endGroup();\r
235     }\r
236     public static long getUploadLimitEnd() {\r
237         Long limit;\r
238         settings.beginGroup("UserAccounting");\r
239         \r
240         // Upload limit\r
241                 try {\r
242                         String val  = (String)settings.value("uploadLimitEnd", "0");\r
243                         limit = new Long(val.trim());\r
244                 } catch (Exception e) {\r
245                         try {\r
246                                 limit = (Long)settings.value("uploadLimitEnd", 0);\r
247                         } catch (Exception e1) {\r
248                                 limit = new Long(0);\r
249                         }\r
250                 }\r
251         \r
252                 // return value\r
253         settings.endGroup();\r
254         return limit;\r
255     }\r
256     public static void saveUploadAmount(long amount) {\r
257         settings.beginGroup("UserAccounting");\r
258                 settings.setValue("uploadAmount", amount);\r
259                 settings.endGroup();\r
260    }\r
261     public static long getUploadAmount() {\r
262                 long amt=0;\r
263                 settings.beginGroup("UserAccounting");\r
264                 try {\r
265                         String num = (String)settings.value("uploadAmount", "0");\r
266                         amt = new Long(num.trim());\r
267                 } catch (Exception e) {\r
268                         try {\r
269                                 amt = (Integer)settings.value("uploadAmount", 0);\r
270                         } catch (Exception e1) {\r
271                                 amt = 0;\r
272                         }\r
273                 }\r
274                 settings.endGroup();\r
275                 return amt;\r
276     }\r
277     public static void saveEvernoteUpdateCount(long amount) {\r
278         settings.beginGroup("UserAccounting");\r
279                 settings.setValue("updateCount", amount);\r
280                 settings.endGroup();\r
281     }\r
282     public static long getEvernoteUpdateCount() {\r
283                 long amt;\r
284                 settings.beginGroup("UserAccounting");\r
285                 try {\r
286                         String num = (String)settings.value("updateCount", new Long(0).toString());\r
287                         amt = new Long(num.trim());\r
288                 } catch (java.lang.ClassCastException e) {\r
289                         amt = 0;\r
290                 }\r
291                 settings.endGroup();\r
292                 return amt;\r
293     }\r
294     public static boolean isPremium() {\r
295                 int level;\r
296                 settings.beginGroup("User");\r
297                 try {\r
298                         String num = (String)settings.value("privilege", "1");\r
299                         level = new Integer(num.trim());\r
300                 } catch (java.lang.ClassCastException e) {\r
301                         try {\r
302                                 level = (Integer)settings.value("privilege", 1);\r
303                         } catch (Exception e1) {\r
304                                 level = 1;\r
305                         }\r
306                 }\r
307                 settings.endGroup();\r
308                 PrivilegeLevel userLevel = PrivilegeLevel.findByValue(level);\r
309                 if (userLevel == PrivilegeLevel.NORMAL)\r
310                         return false;\r
311                 return true;\r
312                 \r
313    }\r
314     public static long getUploadLimit() {\r
315                 settings.beginGroup("UserAccounting");\r
316                 long limit;\r
317                 try {\r
318                         String num = (String)settings.value("uploadLimit", new Long(0).toString());\r
319                         limit = new Long(num.trim());\r
320                 } catch (java.lang.ClassCastException e) {\r
321                         limit = 0;\r
322                 }\r
323                 settings.endGroup();\r
324                 return limit;\r
325     }\r
326     public static boolean showTrayIcon() {\r
327                 settings.beginGroup("General");\r
328                 String max = (String) settings.value("showTrayIcon", "true");\r
329                 settings.endGroup();\r
330                 if (!max.equalsIgnoreCase("true"))\r
331                         return false;\r
332                 return true;    \r
333     }\r
334     public static void setShowTrayIcon(boolean val) {\r
335                 settings.beginGroup("General");\r
336                 if (val)\r
337                         settings.setValue("showTrayIcon", "true");\r
338                 else\r
339                         settings.setValue("showTrayIcon", "false");\r
340                 settings.endGroup();\r
341     }\r
342     public static boolean wasWindowMaximized() {\r
343                 settings.beginGroup("General");\r
344                 String max = (String) settings.value("isMaximized", "true");\r
345                 settings.endGroup();\r
346                 if (!max.equalsIgnoreCase("true"))\r
347                         return false;\r
348                 return true;    \r
349     }\r
350     public static void saveWindowMaximized(boolean isMax) {\r
351                 settings.beginGroup("General");\r
352                 if (isMax)\r
353                         settings.setValue("isMaximized", "true");\r
354                 else\r
355                         settings.setValue("isMaximized", "false");\r
356                 settings.endGroup();\r
357     }\r
358     public static String getLastViewedNoteGuid() {\r
359                 settings.beginGroup("General");\r
360                 String guid = (String) settings.value("lastViewedNote", "");\r
361                 settings.endGroup();\r
362                 return guid;    \r
363     }\r
364     public static void saveCurrentNoteGuid(String guid) {\r
365                 settings.beginGroup("General");\r
366                 if (guid != null)\r
367                         settings.setValue("lastViewedNote", guid);\r
368                 else\r
369                         settings.setValue("lastViewedNote", "");\r
370                 settings.endGroup();\r
371     }\r
372     public static void setSortColumn(int i) {\r
373                 settings.beginGroup("General");\r
374                 settings.setValue("sortColumn", i);\r
375                 settings.endGroup();\r
376     }\r
377     public static int getSortColumn() {;\r
378         settings.beginGroup("General");\r
379         int order;      \r
380         try {\r
381                 String val  = settings.value("sortColumn", new Integer(0)).toString();\r
382                 order = new Integer(val.trim());\r
383         } catch (Exception e) {\r
384                 try {\r
385                         order = (Integer)settings.value("sortColumn", 0);\r
386                 } catch (Exception e1) {\r
387                     order = 0;\r
388                 }\r
389         }\r
390         \r
391         settings.endGroup();\r
392         return order;\r
393     }\r
394     public static void setSortOrder(int i) {\r
395                 settings.beginGroup("General");\r
396                 settings.setValue("sortOrder", i);\r
397                 settings.endGroup();\r
398     }\r
399     public static int getSortOrder() {\r
400                 settings.beginGroup("General");\r
401                 int order;      \r
402                 try {\r
403                         String val  = settings.value("sortOrder", new Integer(0)).toString();\r
404                         order = new Integer(val.trim());\r
405                 } catch (Exception e) {\r
406                         try {\r
407                                 order = (Integer)settings.value("sortOrder", 0);\r
408                         } catch (Exception e1) {\r
409                             order = 0;\r
410                         }\r
411                 }\r
412                 \r
413                 settings.endGroup();\r
414                 return order;\r
415     }\r
416     public static boolean automaticLogin() {\r
417                 settings.beginGroup("General");\r
418                 String text = (String)settings.value("automaticLogin", "false");\r
419                 settings.endGroup();\r
420                 if (text.equalsIgnoreCase("true"))\r
421                         return true;\r
422                 else\r
423                         return false;           \r
424     }\r
425     public static void setAutomaticLogin(boolean val) {\r
426                 settings.beginGroup("General");\r
427                 if (val)\r
428                         settings.setValue("automaticLogin", "true");\r
429                 else\r
430                         settings.setValue("automaticLogin", "false");\r
431                 settings.endGroup();\r
432     }\r
433     public static boolean rememberPassword() {\r
434                 settings.beginGroup("General");\r
435                 String text = (String)settings.value("rememberPassword", "false");\r
436                 settings.endGroup();\r
437                 if (text.equalsIgnoreCase("true"))\r
438                         return true;\r
439                 else\r
440                         return false;           \r
441     }\r
442     public static void setRememberPassword(boolean val) {\r
443                 settings.beginGroup("General");\r
444                 if (val)\r
445                         settings.setValue("rememberPassword", "true");\r
446                 else\r
447                         settings.setValue("rememberPassword", "false");\r
448                 settings.endGroup();\r
449     }\r
450     public static void setServer(String server) {\r
451                 settings.beginGroup("General");\r
452                 settings.setValue("server", server);\r
453                 settings.endGroup();            \r
454     }\r
455     public static String getServer() {\r
456                 settings.beginGroup("General");\r
457                 String text = (String)settings.value("server", "www.evernote.com");\r
458                 if (text.equals("www.evernote.com")) {\r
459                         userStoreUrl = "https://www.evernote.com/edam/user";\r
460                     noteStoreUrlBase = "www.evernote.com/edam/note/";   \r
461                 } else {\r
462                         userStoreUrl = "https://sandbox.evernote.com/edam/user";\r
463                         noteStoreUrlBase = "sandbox.evernote.com/edam/note/";\r
464                 }\r
465                 settings.endGroup();\r
466                 if (isPremium())\r
467                         noteStoreUrlBase = "https://" + noteStoreUrlBase;\r
468                 else\r
469                         noteStoreUrlBase = "http://" + noteStoreUrlBase;\r
470                 return text;\r
471     }\r
472     public static boolean disableUploads() {\r
473                 settings.beginGroup("General");\r
474                 String text = (String)settings.value("disableUploads", "false");\r
475                 settings.endGroup();\r
476                 if (text.equalsIgnoreCase("true"))\r
477                         return true;\r
478                 else\r
479                         return false;\r
480     }\r
481     public static void setDisableUploads(boolean val) {\r
482                 settings.beginGroup("General");\r
483                 if (val)\r
484                         settings.setValue("disableUploads", "true");\r
485                 else\r
486                         settings.setValue("disableUploads", "false");\r
487                 settings.endGroup();\r
488                 disableUploads = val;\r
489     }\r
490     public static boolean pdfPreview() {\r
491                 settings.beginGroup("General");\r
492                 String text = (String)settings.value("pdfPreview", "true");\r
493                 settings.endGroup();\r
494                 if (text.equalsIgnoreCase("true"))\r
495                         return true;\r
496                 else\r
497                         return false;\r
498     }\r
499     public static void setPdfPreview(boolean val) {\r
500                 settings.beginGroup("General");\r
501                 if (val)\r
502                         settings.setValue("pdfPreview", "true");\r
503                 else\r
504                         settings.setValue("pdfPreview", "false");\r
505                 settings.endGroup();\r
506     }\r
507     public static boolean newNoteWithSelectedTags() {\r
508                 settings.beginGroup("General");\r
509                 String text = (String)settings.value("newNoteWithSelectedTags", "false");\r
510                 settings.endGroup();\r
511                 if (text.equalsIgnoreCase("true"))\r
512                         return true;\r
513                 else\r
514                         return false;\r
515     }\r
516     public static void setNewNoteWithSelectedTags(boolean val) {\r
517                 settings.beginGroup("General");\r
518                 if (val)\r
519                         settings.setValue("newNoteWithSelectedTags", "true");\r
520                 else\r
521                         settings.setValue("newNoteWithSelectedTags", "false");\r
522                 settings.endGroup();\r
523     }\r
524     public static void setMinimumWordLength(int len) {\r
525                 settings.beginGroup("General");\r
526                 settings.setValue("minimumWordLength", len);\r
527                 settings.endGroup();            \r
528     }\r
529     public static int getMinimumWordLength() {\r
530                 settings.beginGroup("General");\r
531                 Integer len = 4;\r
532                 try {\r
533                         String val  = (String)settings.value("minimumWordLength", "4");\r
534                         len = new Integer(val);\r
535                 } catch (Exception e) {\r
536                         try {\r
537                                 len = (Integer)settings.value("minimumWordLength", 4);\r
538                         } catch (Exception e1) {\r
539                                 len = 4;\r
540                         }\r
541                 }\r
542                 settings.endGroup();\r
543                 return len;\r
544                 \r
545     }\r
546     public static void setRecognitionWeight(int len) {\r
547                 settings.beginGroup("General");\r
548                 settings.setValue("recognitionWeight", len);\r
549                 settings.endGroup();            \r
550     }\r
551     public static int getRecognitionWeight() {\r
552                 settings.beginGroup("General");\r
553                 Integer len;\r
554                 try {\r
555                         len = (Integer)settings.value("recognitionWeight", 80);\r
556                 } catch (Exception e) {\r
557                         len = 80;\r
558                 }\r
559                 settings.endGroup();\r
560                 return len;\r
561     }\r
562     public static String getMessageLevel() {\r
563                 settings.beginGroup("Debug");\r
564                 String text = (String)settings.value("messageLevel", "Low");\r
565                 settings.endGroup();\r
566                 return text;\r
567     }\r
568     public static void setDateFormat(String format) {\r
569                 settings.beginGroup("General");\r
570                 settings.setValue("dateFormat", format);\r
571                 settings.endGroup();            \r
572     }\r
573     public static String getDateFormat() {\r
574                 settings.beginGroup("General");\r
575                 String text = (String)settings.value("dateFormat", "MM/dd/yyyy");\r
576                 settings.endGroup();\r
577                 return text;\r
578     }\r
579     public static void setTimeFormat(String format) {\r
580                 settings.beginGroup("General");\r
581                 settings.setValue("timeFormat", format);\r
582                 settings.endGroup();            \r
583     }\r
584     public static String getTimeFormat() {\r
585                 settings.beginGroup("General");\r
586                 String text = (String)settings.value("timeFormat", "HH:mm:ss");\r
587                 settings.endGroup();\r
588                 return text;\r
589     }\r
590     public static String getSyncInterval() {\r
591                 settings.beginGroup("General");\r
592                 String text = (String)settings.value("syncInterval", "15 minutes");\r
593                 settings.endGroup();\r
594                 return text;            \r
595     }\r
596     public static void setSyncInterval(String format) {\r
597                 settings.beginGroup("General");\r
598                 settings.setValue("syncInterval", format);\r
599                 settings.endGroup();            \r
600     }\r
601     public static void setColumnWidth(String col, int width) {\r
602                 settings.beginGroup("ColumnWidths");\r
603                 settings.setValue(col, width);\r
604                 settings.endGroup();\r
605     }\r
606     public static int getColumnWidth(String col) {\r
607                 settings.beginGroup("ColumnWidths");\r
608                 Integer width;\r
609                 try {\r
610                         String val  = (String)settings.value(col, "0");\r
611                         width = new Integer(val.trim());\r
612                 } catch (Exception e) {\r
613                         try {\r
614                                 width = (Integer)settings.value(col, 0);\r
615                         } catch (Exception e1) {\r
616                                 width = 0;\r
617                         }\r
618                 }\r
619                 settings.endGroup();\r
620                 return width;\r
621     }\r
622     public static void setColumnPosition(String col, int width) {\r
623                 settings.beginGroup("ColumnPosition");\r
624                 settings.setValue(col, width);\r
625                 settings.endGroup();\r
626     }\r
627     public static int getColumnPosition(String col) {\r
628                 settings.beginGroup("ColumnPosition");\r
629                 Integer width;\r
630                 try {\r
631                         String val  = (String)settings.value(col, "-1");\r
632                         width = new Integer(val.trim());\r
633                 } catch (Exception e) {\r
634                         try {\r
635                                 width = (Integer)settings.value(col, 0);\r
636                         } catch (Exception e1) {\r
637                                 width = 0;\r
638                         }\r
639                 }\r
640                 settings.endGroup();\r
641                 return width;\r
642     }\r
643     public static boolean verifyDelete() {\r
644                 settings.beginGroup("General");\r
645                 String text = (String)settings.value("verifyDelete", "true");\r
646                 settings.endGroup();\r
647                 if (text.equalsIgnoreCase("true"))\r
648                         return true;\r
649                 else\r
650                         return false;           \r
651     }\r
652     public static void setVerifyDelete(boolean val) {\r
653                 settings.beginGroup("General");\r
654                 if (val)\r
655                         settings.setValue("verifyDelete", "true");\r
656                 else\r
657                         settings.setValue("verifyDelete", "false");\r
658                 settings.endGroup();\r
659     }\r
660     public static boolean startMinimized() {\r
661                 settings.beginGroup("General");\r
662                 String text = (String)settings.value("startMinimized", "false");\r
663                 settings.endGroup();\r
664                 if (text.equalsIgnoreCase("true"))\r
665                         return true;\r
666                 else\r
667                         return false;           \r
668     }\r
669     public static void setStartMinimized(boolean val) {\r
670                 settings.beginGroup("General");\r
671                 if (val)\r
672                         settings.setValue("startMinimized", "true");\r
673                 else\r
674                         settings.setValue("startMinimized", "false");\r
675                 settings.endGroup();\r
676     }\r
677     public static boolean synchronizeDeletedContent() {\r
678                 settings.beginGroup("General");\r
679                 String text = (String)settings.value("syncDeletedContent", "false");\r
680                 settings.endGroup();\r
681                 if (text.equalsIgnoreCase("true"))\r
682                         return true;\r
683                 else\r
684                         return false;           \r
685     }\r
686     public static void setSynchronizeDeletedContent(boolean val) {\r
687                 settings.beginGroup("General");\r
688                 if (val)\r
689                         settings.setValue("syncDeletedContent", "true");\r
690                 else\r
691                         settings.setValue("syncDeletedContent", "false");\r
692                 settings.endGroup();\r
693     }\r
694     public static boolean isWindowVisible(String window) {\r
695                 settings.beginGroup("WindowsVisible");\r
696                 String text = (String)settings.value(window, "true");\r
697                 settings.endGroup();\r
698                 if (text.equalsIgnoreCase("true"))\r
699                         return true;\r
700                 else\r
701                         return false;           \r
702     }\r
703     public static void saveWindowVisible(String window, boolean val) {\r
704                 settings.beginGroup("WindowsVisible");\r
705                 if (val)\r
706                         settings.setValue(window, "true");\r
707                 else\r
708                         settings.setValue(window, "false");\r
709                 settings.endGroup();\r
710     }\r
711     public static boolean isColumnVisible(String window) {\r
712                 settings.beginGroup("ColumnsVisible");\r
713                 String text = (String)settings.value(window, "true");\r
714                 settings.endGroup();\r
715                 if (text.equalsIgnoreCase("true"))\r
716                         return true;\r
717                 else\r
718                         return false;   \r
719     }\r
720     public static void saveColumnVisible(String column, boolean val) {\r
721                 settings.beginGroup("ColumnsVisible");\r
722                 if (val)\r
723                         settings.setValue(column, "true");\r
724                 else\r
725                         settings.setValue(column, "false");\r
726                 settings.endGroup();\r
727     }\r
728     public static boolean isEditorButtonVisible(String window) {\r
729                 settings.beginGroup("EditorButtonsVisible");\r
730                 String text = (String)settings.value(window, "true");\r
731                 settings.endGroup();\r
732                 if (text.equalsIgnoreCase("true"))\r
733                         return true;\r
734                 else\r
735                         return false;   \r
736     }\r
737     public static void saveEditorButtonsVisible(String column, boolean val) {\r
738                 settings.beginGroup("EditorButtonsVisible");\r
739                 if (val)\r
740                         settings.setValue(column, "true");\r
741                 else\r
742                         settings.setValue(column, "false");\r
743                 settings.endGroup();\r
744     }\r
745     public static boolean enableCarriageReturnFix() {\r
746                 settings.beginGroup("Debug");\r
747                 String text = (String)settings.value("enableCarriageReturnFix", "false");\r
748                 settings.endGroup();\r
749                 if (text.equalsIgnoreCase("true"))\r
750                         return true;\r
751                 else\r
752                         return false;   \r
753     }\r
754     public static void saveCarriageReturnFix(boolean val) {\r
755                 settings.beginGroup("Debug");\r
756                 if (val)\r
757                         settings.setValue("enableCarriageReturnFix", "true");\r
758                 else\r
759                         settings.setValue("enableCarriageReturnFix", "false");\r
760                 settings.endGroup();\r
761     }\r
762     public static void setIndexThreads(int val) {\r
763                 settings.beginGroup("General");\r
764                 settings.setValue("indexThreads", val);\r
765                 settings.endGroup();\r
766     }\r
767     public static int getIndexThreads() {\r
768                 settings.beginGroup("General");\r
769                 Integer threads;\r
770                 try {\r
771                         String val  = (String)settings.value("indexThreads", "1");\r
772                         threads = new Integer(val.trim());\r
773                 } catch (Exception e) {\r
774                         try {\r
775                                 threads = (Integer)settings.value("indexThreads", 1);\r
776                         } catch (Exception e1) {\r
777                                 threads = 1;\r
778                         }\r
779                 }\r
780                 settings.endGroup();\r
781                 threads = 1;\r
782                 return threads;\r
783     }\r
784     public static void setZoomFactor(double val) {\r
785                 settings.beginGroup("General");\r
786                 settings.setValue("zoomFactor", val);\r
787                 settings.endGroup();\r
788     }\r
789     public static double getZoomFactor() {\r
790                 settings.beginGroup("General");\r
791                 Double threads;\r
792                 try {\r
793                         String val  = (String)settings.value("zoomFactor", "1.0");\r
794                         threads = new Double(val.trim());\r
795                 } catch (Exception e) {\r
796                         try {\r
797                                 threads = (Double)settings.value("zoomFactor", 1.0);\r
798                         } catch (Exception e1) {\r
799                                 threads = new Double(1);\r
800                         }\r
801                 }\r
802                 settings.endGroup();\r
803                 return threads;\r
804     }\r
805     public static void setTextSizeMultiplier(double val) {\r
806                 settings.beginGroup("General");\r
807                 settings.setValue("textMultiplier", val);\r
808                 settings.endGroup();\r
809     }\r
810     public static double getTextSizeMultiplier() {\r
811                 settings.beginGroup("General");\r
812                 Double threads;\r
813                 try {\r
814                         String val  = (String)settings.value("textMultiplier", "1");\r
815                         threads = new Double(val.trim());\r
816                 } catch (Exception e) {\r
817                         try {\r
818                                 threads = (Double)settings.value("textMultiplier", 1);\r
819                         } catch (Exception e1) {\r
820                                 threads = new Double(1);\r
821                         }\r
822                 }\r
823                 settings.endGroup();\r
824                 return threads;\r
825     }\r
826 \r
827     public static boolean getMimicEvernoteInterface() {\r
828                 settings.beginGroup("General");\r
829                 String text = (String)settings.value("mimicEvernoteInterface", "true");\r
830                 settings.endGroup();\r
831                 if (text.equalsIgnoreCase("true"))\r
832                         return true;\r
833                 else\r
834                         return false;\r
835     }\r
836     public static void setMimicEvernoteInterface(boolean value) {\r
837         settings.beginGroup("General");\r
838         if (value)\r
839                 settings.setValue("mimicEvernoteInterface", "true");\r
840         else\r
841                 settings.setValue("mimicEvernoteInterface", "false"); \r
842         settings.endGroup();\r
843     }\r
844     \r
845     public static boolean synchronizeOnClose() {\r
846                 settings.beginGroup("General");\r
847                 String text = (String)settings.value("synchronizeOnClose", "false");\r
848                 settings.endGroup();\r
849                 if (text.equalsIgnoreCase("true"))\r
850                         return true;\r
851                 else\r
852                         return false;\r
853     }\r
854     public static void setSynchronizeOnClose(boolean val) {\r
855                 settings.beginGroup("General");\r
856                 if (val)\r
857                         settings.setValue("synchronizeOnClose", "true");\r
858                 else\r
859                         settings.setValue("synchronizeOnClose", "false");\r
860                 settings.endGroup();\r
861     }\r
862     public static void setDatabaseVersion(String version) {\r
863                 settings.beginGroup("General");\r
864                 settings.setValue("databaseVersion", version);\r
865                 settings.endGroup();\r
866     }\r
867     public static String getDatabaseVersion() {\r
868                 settings.beginGroup("General");\r
869                 String val  = (String)settings.value("databaseVersion", "0.70");\r
870                 settings.endGroup();\r
871                 return val;\r
872     }\r
873     public static String getDatabaseUrl() {\r
874                 settings.beginGroup("General");\r
875                 String val  = (String)settings.value("DatabaseURL", "");\r
876                 settings.endGroup();\r
877                 if (val.equals(""))\r
878                         val = "jdbc:h2:"+Global.getFileManager().getDbDirPath(Global.databaseName);\r
879                 return val;\r
880     }\r
881     public static void setDatabaseUrl(String value) {\r
882                 settings.beginGroup("General");\r
883                 settings.setValue("DatabaseURL", value);\r
884                 settings.endGroup();\r
885     }\r
886     public static String getDatabaseUserid() {\r
887                 settings.beginGroup("General");\r
888                 String val  = (String)settings.value("databaseUserid", "");\r
889                 settings.endGroup();\r
890                 return val;\r
891     }\r
892     public static String getDatabaseUserPassword() {\r
893                 settings.beginGroup("General");\r
894                 String val  = (String)settings.value("databaseUserPassword", "");\r
895                 settings.endGroup();\r
896                 return val;\r
897     }\r
898     public static void setStyle(String style) {\r
899                 settings.beginGroup("General");\r
900                 settings.setValue("style", style);\r
901                 settings.endGroup();\r
902     }\r
903     public static String getStyle() {\r
904                 settings.beginGroup("General");\r
905                 String val  = (String)settings.value("style", "");\r
906                 settings.endGroup();\r
907                 return val;\r
908     }\r
909     public static boolean useStandardPalette() {\r
910                 settings.beginGroup("General");\r
911                 String text = (String)settings.value("standardPalette", "true");\r
912                 settings.endGroup();\r
913                 if (text.equalsIgnoreCase("true"))\r
914                         return true;\r
915                 else\r
916                         return false;\r
917     }\r
918     public static void setStandardPalette(boolean val) {\r
919                 settings.beginGroup("General");\r
920                 if (val)\r
921                         settings.setValue("standardPalette", "true");\r
922                 else\r
923                         settings.setValue("standardPalette", "false");\r
924                 settings.endGroup();\r
925     }\r
926     \r
927     // Get/Set interval when the index thread wakes up.\r
928     public static void setIndexThreadSleepInterval(int sleep) {\r
929                 settings.beginGroup("General");\r
930                 settings.setValue("IndexThreadSleepInterval", sleep);\r
931                 settings.endGroup();\r
932     }\r
933     public static int getIndexThreadSleepInterval() {\r
934                 settings.beginGroup("General");\r
935                 Integer sleep;\r
936                 try {\r
937                         String val  = (String)settings.value("IndexThreadSleepInterval", "300");\r
938                         sleep = new Integer(val.trim());\r
939                 } catch (Exception e) {\r
940                         try {\r
941                                 sleep = (Integer)settings.value("IndexThreadSleepInterval", 0);\r
942                         } catch (Exception e1) {\r
943                                 sleep = 300;\r
944                         }\r
945                 }\r
946                 settings.endGroup();\r
947                 return sleep;\r
948     }\r
949     \r
950     public static void saveState(String name, QByteArray state) {\r
951                 settings.beginGroup("SaveState");\r
952                 settings.setValue(name, state);\r
953                 settings.endGroup();\r
954     }\r
955     \r
956     public static QByteArray restoreState(String name) {\r
957                 settings.beginGroup("SaveState");\r
958                 QByteArray state = (QByteArray)settings.value(name);\r
959                 settings.endGroup();\r
960                 return state;\r
961     }\r
962     public static void saveGeometry(String name, QByteArray state) {\r
963                 settings.beginGroup("SaveGeometry");\r
964                 settings.setValue(name, state);\r
965                 settings.endGroup();\r
966     }\r
967     \r
968     public static QByteArray restoreGeometry(String name) {\r
969                 settings.beginGroup("SaveGeometry");\r
970                 QByteArray state = (QByteArray)settings.value(name);\r
971                 settings.endGroup();\r
972                 return state;\r
973     }\r
974     \r
975     public static void setAutoSaveInterval(int interval) {\r
976                 settings.beginGroup("General");\r
977                 settings.setValue("autoSaveInterval", interval);\r
978                 settings.endGroup();\r
979     }\r
980     public static int getAutoSaveInterval() {\r
981                 settings.beginGroup("General");\r
982                 Integer value;\r
983                 try {\r
984                         String val  = (String)settings.value("autoSaveInterval", "5");\r
985                         value = new Integer(val.trim());\r
986                 } catch (Exception e) {\r
987                         try {\r
988                                 value = (Integer)settings.value("autoSaveInterval", 5);\r
989                         } catch (Exception e1) {\r
990                                 value = 0;\r
991                         }\r
992                 }\r
993                 settings.endGroup();\r
994                 return value;\r
995     }\r
996      \r
997     // Add invalid attributes\r
998     public static void addInvalidAttribute(String element, String attribute) {\r
999         \r
1000                 List<String> attributes = invalidAttributes.get(element);\r
1001                 if (attributes != null) {\r
1002                         for (int i=0; i<attributes.size(); i++)\r
1003                                 if (attribute.equalsIgnoreCase(attributes.get(i))) {\r
1004                                         return;\r
1005                         }\r
1006         }\r
1007         \r
1008         ArrayList<String> attributeList;\r
1009         if (!invalidAttributes.containsKey(element)) {\r
1010                 attributeList = new ArrayList<String>();\r
1011                 attributeList.add(attribute);\r
1012                 invalidAttributes.put(element, attributeList);\r
1013         }\r
1014         else {\r
1015                 attributeList = invalidAttributes.get(element);\r
1016                 attributeList.add(attribute);\r
1017                 invalidAttributes.put(element,attributeList);\r
1018         }\r
1019     }\r
1020 \r
1021     \r
1022     // Add invalid attributes\r
1023     public static void addInvalidElement(String element) {\r
1024                 for (int i=0; i<invalidElements.size(); i++) {\r
1025                         if (element.equalsIgnoreCase(invalidElements.get(i)))\r
1026                                 return;\r
1027                 }\r
1028         invalidElements.add(element);\r
1029     }\r
1030     \r
1031     // Convert a byte array to a hex string\r
1032         public static String byteArrayToHexString(byte data[]) {\r
1033                 StringBuffer buf = new StringBuffer();\r
1034             for (byte element : data) {\r
1035                 int halfbyte = (element >>> 4) & 0x0F;\r
1036                 int two_halfs = 0;\r
1037                 do {\r
1038                         if ((0 <= halfbyte) && (halfbyte <= 9))\r
1039                                buf.append((char) ('0' + halfbyte));\r
1040                            else\r
1041                                 buf.append((char) ('a' + (halfbyte - 10)));\r
1042                         halfbyte = element & 0x0F;\r
1043                 } while(two_halfs++ < 1);\r
1044             }\r
1045             return buf.toString();              \r
1046         }\r
1047 \r
1048     public static boolean getSpellSetting(String value) {\r
1049                 settings.beginGroup("Spell");\r
1050                 String text = (String)settings.value(value, "");\r
1051                 settings.endGroup();\r
1052                 if (text.equalsIgnoreCase("true"))\r
1053                         return true;\r
1054                 if (text.equalsIgnoreCase("false"))\r
1055                         return false;\r
1056                 if (value.equalsIgnoreCase(Configuration.SPELL_IGNOREDIGITWORDS))\r
1057                         return true;\r
1058                 if (value.equalsIgnoreCase(Configuration.SPELL_IGNOREINTERNETADDRESSES))\r
1059                         return true;\r
1060                 if (value.equalsIgnoreCase(Configuration.SPELL_IGNOREUPPERCASE))\r
1061                         return true;\r
1062                 return false;\r
1063     }\r
1064     public static void setSpellSetting(String setting, boolean val) {\r
1065                 settings.beginGroup("Spell");\r
1066                 if (val)\r
1067                         settings.setValue(setting, "true");\r
1068                 else\r
1069                         settings.setValue(setting, "false");\r
1070                 settings.endGroup();\r
1071     }\r
1072         \r
1073         \r
1074         // What to do with inactive tags?\r
1075         public static String tagBehavior() {\r
1076                 settings.beginGroup("General");\r
1077                 String text = (String)settings.value("tagBehavior", "DoNothing");\r
1078                 settings.endGroup();\r
1079                 return text;\r
1080         }\r
1081         // What to do with inactive tags?\r
1082         public static void setTagBehavior(String value) {\r
1083                 settings.beginGroup("General");\r
1084                 settings.setValue("tagBehavior", value);\r
1085                 settings.endGroup();\r
1086         }\r
1087 \r
1088         \r
1089         // Print date/time.  Used mainly for performance tracing\r
1090         public static void trace(boolean resetInterval) {\r
1091                 String fmt = "MM/dd/yy HH:mm:ss.SSSSSS";\r
1092                 String dateTimeFormat = new String(fmt);\r
1093                 SimpleDateFormat simple = new SimpleDateFormat(dateTimeFormat);\r
1094                 Calendar cal = Calendar.getInstance();\r
1095                 if (intervalTraceTime == null) \r
1096                         intervalTraceTime = Calendar.getInstance();\r
1097                 if (startTraceTime == null)\r
1098                         startTraceTime = Calendar.getInstance();\r
1099                 \r
1100                 float interval = (cal.getTimeInMillis() - intervalTraceTime.getTimeInMillis());\r
1101                 float total = (cal.getTimeInMillis() - startTraceTime.getTimeInMillis());\r
1102                 \r
1103 //              if (interval > 00.0) {\r
1104                         StackTraceElement[] exceptions = Thread.currentThread().getStackTrace();\r
1105                         System.out.println("------------------------------------------");\r
1106 \r
1107                         System.out.println("Date/Time " +simple.format(cal.getTime()));\r
1108                         System.out.format("Interval Time: %-10.6f%n", interval);\r
1109                         System.out.format("Total Time: %-10.6f%n", total);\r
1110                         for (int i=2; i<5 && i<exceptions.length; i++) {\r
1111                                 System.out.println(exceptions[i]);\r
1112                         }\r
1113 //              }\r
1114                 if (resetInterval)\r
1115                         intervalTraceTime = cal;\r
1116         }\r
1117         public static void traceReset() {\r
1118                 intervalTraceTime = null;\r
1119                 startTraceTime = null;\r
1120         }\r
1121 \r
1122     public static FileManager getFileManager() {\r
1123         return fileManager;\r
1124     }\r
1125     public static boolean getDisableViewing() {\r
1126         return disableViewing;\r
1127     }\r
1128     \r
1129 \r
1130 }\r
1131 \r