summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--library/global.cpp4
1 files changed, 2 insertions, 2 deletions
diff --git a/library/global.cpp b/library/global.cpp
index 5a28595..4f1cc38 100644
--- a/library/global.cpp
+++ b/library/global.cpp
@@ -1,322 +1,322 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2000 Trolltech AS. All rights reserved. 2** Copyright (C) 2000 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of Qtopia Environment. 4** This file is part of Qtopia Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20#define QTOPIA_INTERNAL_LANGLIST 20#define QTOPIA_INTERNAL_LANGLIST
21#include <qpe/qpedebug.h> 21#include <qpe/qpedebug.h>
22#include <qpe/global.h> 22#include <qpe/global.h>
23#include <qpe/qdawg.h> 23#include <qpe/qdawg.h>
24#include <qpe/qpeapplication.h> 24#include <qpe/qpeapplication.h>
25#include <qpe/resource.h> 25#include <qpe/resource.h>
26#include <qpe/storage.h> 26#include <qpe/storage.h>
27#include <qpe/applnk.h> 27#include <qpe/applnk.h>
28#if defined(Q_WS_QWS) && !defined(QT_NO_COP) 28#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
29#include "qpe/qcopenvelope_qws.h" 29#include "qpe/qcopenvelope_qws.h"
30#endif 30#endif
31 31
32#include <qfile.h> 32#include <qfile.h>
33#include <qlabel.h> 33#include <qlabel.h>
34#include <qtimer.h> 34#include <qtimer.h>
35#include <qmap.h> 35#include <qmap.h>
36#include <qdict.h> 36#include <qdict.h>
37#include <qdir.h> 37#include <qdir.h>
38#include <qmessagebox.h> 38#include <qmessagebox.h>
39#include <qregexp.h> 39#include <qregexp.h>
40 40
41#include <stdlib.h> 41#include <stdlib.h>
42#include <sys/stat.h> 42#include <sys/stat.h>
43#include <sys/wait.h> 43#include <sys/wait.h>
44#include <sys/types.h> 44#include <sys/types.h>
45#include <fcntl.h> 45#include <fcntl.h>
46#include <unistd.h> 46#include <unistd.h>
47 47
48#include <qwindowsystem_qws.h> // for qwsServer 48#include <qwindowsystem_qws.h> // for qwsServer
49#include <qdatetime.h> 49#include <qdatetime.h>
50 50
51#include <qfile.h> 51#include <qfile.h>
52 52
53namespace { 53namespace {
54 // checks if the storage should be searched 54 // checks if the storage should be searched
55 bool checkStorage(const QString &path ){ // this is a small Config replacement cause config is too limited -zecke 55 bool checkStorage(const QString &path ){ // this is a small Config replacement cause config is too limited -zecke
56 QFile file(path ); 56 QFile file(path );
57 if(!file.open(IO_ReadOnly ) ) 57 if(!file.open(IO_ReadOnly ) )
58 return true; 58 return true;
59 59
60 QByteArray array = file.readAll(); 60 QByteArray array = file.readAll();
61 QStringList list = QStringList::split('\n', QString( array ) ); 61 QStringList list = QStringList::split('\n', QString( array ) );
62 for(QStringList::Iterator it = list.begin(); it != list.end(); ++it ){ 62 for(QStringList::Iterator it = list.begin(); it != list.end(); ++it ){
63 if( (*it).startsWith("autocheck = 0" ) ){ 63 if( (*it).startsWith("autocheck = 0" ) ){
64 return true;
65 }else if( (*it).startsWith("autocheck = 1" ) ){
66 return false; 64 return false;
65 }else if( (*it).startsWith("autocheck = 1" ) ){
66 return true;
67 } 67 }
68 } 68 }
69 return true; 69 return true;
70 } 70 }
71} 71}
72 72
73//#include "quickexec_p.h" 73//#include "quickexec_p.h"
74 74
75class Emitter : public QObject { 75class Emitter : public QObject {
76 Q_OBJECT 76 Q_OBJECT
77public: 77public:
78 Emitter( QWidget* receiver, const QString& document ) 78 Emitter( QWidget* receiver, const QString& document )
79 { 79 {
80 connect(this, SIGNAL(setDocument(const QString&)), 80 connect(this, SIGNAL(setDocument(const QString&)),
81 receiver, SLOT(setDocument(const QString&))); 81 receiver, SLOT(setDocument(const QString&)));
82 emit setDocument(document); 82 emit setDocument(document);
83 disconnect(this, SIGNAL(setDocument(const QString&)), 83 disconnect(this, SIGNAL(setDocument(const QString&)),
84 receiver, SLOT(setDocument(const QString&))); 84 receiver, SLOT(setDocument(const QString&)));
85 } 85 }
86 86
87signals: 87signals:
88 void setDocument(const QString&); 88 void setDocument(const QString&);
89}; 89};
90 90
91 91
92class StartingAppList : public QObject { 92class StartingAppList : public QObject {
93 Q_OBJECT 93 Q_OBJECT
94public: 94public:
95 static void add( const QString& name ); 95 static void add( const QString& name );
96 static bool isStarting( const QString name ); 96 static bool isStarting( const QString name );
97private slots: 97private slots:
98 void handleNewChannel( const QString &); 98 void handleNewChannel( const QString &);
99private: 99private:
100 StartingAppList( QObject *parent=0, const char* name=0 ) ; 100 StartingAppList( QObject *parent=0, const char* name=0 ) ;
101 101
102 QDict<QTime> dict; 102 QDict<QTime> dict;
103 static StartingAppList *appl; 103 static StartingAppList *appl;
104}; 104};
105 105
106StartingAppList* StartingAppList::appl = 0; 106StartingAppList* StartingAppList::appl = 0;
107 107
108StartingAppList::StartingAppList( QObject *parent, const char* name ) 108StartingAppList::StartingAppList( QObject *parent, const char* name )
109 :QObject( parent, name ) 109 :QObject( parent, name )
110{ 110{
111#if QT_VERSION >= 232 && !defined(QT_NO_COP) 111#if QT_VERSION >= 232 && !defined(QT_NO_COP)
112 connect( qwsServer, SIGNAL( newChannel(const QString&)), 112 connect( qwsServer, SIGNAL( newChannel(const QString&)),
113 this, SLOT( handleNewChannel(const QString&)) ); 113 this, SLOT( handleNewChannel(const QString&)) );
114 dict.setAutoDelete( TRUE ); 114 dict.setAutoDelete( TRUE );
115#endif 115#endif
116} 116}
117 117
118void StartingAppList::add( const QString& name ) 118void StartingAppList::add( const QString& name )
119{ 119{
120#if QT_VERSION >= 232 && !defined(QT_NO_COP) 120#if QT_VERSION >= 232 && !defined(QT_NO_COP)
121 if ( !appl ) 121 if ( !appl )
122 appl = new StartingAppList; 122 appl = new StartingAppList;
123 QTime *t = new QTime; 123 QTime *t = new QTime;
124 t->start(); 124 t->start();
125 appl->dict.insert( "QPE/Application/" + name, t ); 125 appl->dict.insert( "QPE/Application/" + name, t );
126#endif 126#endif
127} 127}
128 128
129bool StartingAppList::isStarting( const QString name ) 129bool StartingAppList::isStarting( const QString name )
130{ 130{
131#if QT_VERSION >= 232 && !defined(QT_NO_COP) 131#if QT_VERSION >= 232 && !defined(QT_NO_COP)
132 if ( appl ) { 132 if ( appl ) {
133 QTime *t = appl->dict.find( "QPE/Application/" + name ); 133 QTime *t = appl->dict.find( "QPE/Application/" + name );
134 if ( !t ) 134 if ( !t )
135 return FALSE; 135 return FALSE;
136 if ( t->elapsed() > 10000 ) { 136 if ( t->elapsed() > 10000 ) {
137 // timeout in case of crash or something 137 // timeout in case of crash or something
138 appl->dict.remove( "QPE/Application/" + name ); 138 appl->dict.remove( "QPE/Application/" + name );
139 return FALSE; 139 return FALSE;
140 } 140 }
141 return TRUE; 141 return TRUE;
142 } 142 }
143#endif 143#endif
144 return FALSE; 144 return FALSE;
145} 145}
146 146
147void StartingAppList::handleNewChannel( const QString & name ) 147void StartingAppList::handleNewChannel( const QString & name )
148{ 148{
149#if QT_VERSION >= 232 && !defined(QT_NO_COP) 149#if QT_VERSION >= 232 && !defined(QT_NO_COP)
150 dict.remove( name ); 150 dict.remove( name );
151#endif 151#endif
152} 152}
153 153
154static bool docDirCreated = FALSE; 154static bool docDirCreated = FALSE;
155static QDawg* fixed_dawg = 0; 155static QDawg* fixed_dawg = 0;
156static QDict<QDawg> *named_dawg = 0; 156static QDict<QDawg> *named_dawg = 0;
157 157
158static QString qpeDir() 158static QString qpeDir()
159{ 159{
160 QString dir = getenv("OPIEDIR"); 160 QString dir = getenv("OPIEDIR");
161 if ( dir.isEmpty() ) dir = ".."; 161 if ( dir.isEmpty() ) dir = "..";
162 return dir; 162 return dir;
163} 163}
164 164
165static QString dictDir() 165static QString dictDir()
166{ 166{
167 return qpeDir() + "/etc/dict"; 167 return qpeDir() + "/etc/dict";
168} 168}
169 169
170/*! 170/*!
171 \class Global global.h 171 \class Global global.h
172 \brief The Global class collects application-wide global functions. 172 \brief The Global class collects application-wide global functions.
173*/ 173*/
174 174
175/*! 175/*!
176 \internal 176 \internal
177*/ 177*/
178Global::Global() 178Global::Global()
179{ 179{
180} 180}
181 181
182/*! 182/*!
183 Returns the unchangeable QDawg that contains general 183 Returns the unchangeable QDawg that contains general
184 words for the current locale. 184 words for the current locale.
185 185
186 \sa addedDawg() 186 \sa addedDawg()
187*/ 187*/
188const QDawg& Global::fixedDawg() 188const QDawg& Global::fixedDawg()
189{ 189{
190 if ( !fixed_dawg ) { 190 if ( !fixed_dawg ) {
191 if ( !docDirCreated ) 191 if ( !docDirCreated )
192 createDocDir(); 192 createDocDir();
193 193
194 fixed_dawg = new QDawg; 194 fixed_dawg = new QDawg;
195 QString dawgfilename = dictDir() + "/dawg"; 195 QString dawgfilename = dictDir() + "/dawg";
196 QString words_lang; 196 QString words_lang;
197 QStringList langs = Global::languageList(); 197 QStringList langs = Global::languageList();
198 for (QStringList::ConstIterator it = langs.begin(); it!=langs.end(); ++it) { 198 for (QStringList::ConstIterator it = langs.begin(); it!=langs.end(); ++it) {
199 QString lang = *it; 199 QString lang = *it;
200 words_lang = dictDir() + "/words." + lang; 200 words_lang = dictDir() + "/words." + lang;
201 QString dawgfilename_lang = dawgfilename + "." + lang; 201 QString dawgfilename_lang = dawgfilename + "." + lang;
202 if ( QFile::exists(dawgfilename_lang) || 202 if ( QFile::exists(dawgfilename_lang) ||
203 QFile::exists(words_lang) ) { 203 QFile::exists(words_lang) ) {
204 dawgfilename = dawgfilename_lang; 204 dawgfilename = dawgfilename_lang;
205 break; 205 break;
206 } 206 }
207 } 207 }
208 QFile dawgfile(dawgfilename); 208 QFile dawgfile(dawgfilename);
209 209
210 if ( !dawgfile.exists() ) { 210 if ( !dawgfile.exists() ) {
211 QString fn = dictDir() + "/words"; 211 QString fn = dictDir() + "/words";
212 if ( QFile::exists(words_lang) ) 212 if ( QFile::exists(words_lang) )
213 fn = words_lang; 213 fn = words_lang;
214 QFile in(fn); 214 QFile in(fn);
215 if ( in.open(IO_ReadOnly) ) { 215 if ( in.open(IO_ReadOnly) ) {
216 fixed_dawg->createFromWords(&in); 216 fixed_dawg->createFromWords(&in);
217 dawgfile.open(IO_WriteOnly); 217 dawgfile.open(IO_WriteOnly);
218 fixed_dawg->write(&dawgfile); 218 fixed_dawg->write(&dawgfile);
219 dawgfile.close(); 219 dawgfile.close();
220 } 220 }
221 } else { 221 } else {
222 fixed_dawg->readFile(dawgfilename); 222 fixed_dawg->readFile(dawgfilename);
223 } 223 }
224 } 224 }
225 225
226 return *fixed_dawg; 226 return *fixed_dawg;
227} 227}
228 228
229/*! 229/*!
230 Returns the changeable QDawg that contains general 230 Returns the changeable QDawg that contains general
231 words for the current locale. 231 words for the current locale.
232 232
233 \sa fixedDawg() 233 \sa fixedDawg()
234*/ 234*/
235const QDawg& Global::addedDawg() 235const QDawg& Global::addedDawg()
236{ 236{
237 return dawg("local"); 237 return dawg("local");
238} 238}
239 239
240/*! 240/*!
241 Returns the QDawg with the given \a name. 241 Returns the QDawg with the given \a name.
242 This is an application-specific word list. 242 This is an application-specific word list.
243 243
244 \a name should not contain "/". 244 \a name should not contain "/".
245*/ 245*/
246const QDawg& Global::dawg(const QString& name) 246const QDawg& Global::dawg(const QString& name)
247{ 247{
248 createDocDir(); 248 createDocDir();
249 if ( !named_dawg ) 249 if ( !named_dawg )
250 named_dawg = new QDict<QDawg>; 250 named_dawg = new QDict<QDawg>;
251 QDawg* r = named_dawg->find(name); 251 QDawg* r = named_dawg->find(name);
252 if ( !r ) { 252 if ( !r ) {
253 r = new QDawg; 253 r = new QDawg;
254 named_dawg->insert(name,r); 254 named_dawg->insert(name,r);
255 QString dawgfilename = dictDir() + "/" + name + ".dawg"; 255 QString dawgfilename = dictDir() + "/" + name + ".dawg";
256 QFile dawgfile(dawgfilename); 256 QFile dawgfile(dawgfilename);
257 if ( dawgfile.open(IO_ReadOnly) ) 257 if ( dawgfile.open(IO_ReadOnly) )
258 r->readFile(dawgfilename); 258 r->readFile(dawgfilename);
259 } 259 }
260 return *r; 260 return *r;
261} 261}
262 262
263/*! 263/*!
264 Adds \a wordlist to the addedDawg(). 264 Adds \a wordlist to the addedDawg().
265*/ 265*/
266void Global::addWords(const QStringList& wordlist) 266void Global::addWords(const QStringList& wordlist)
267{ 267{
268 addWords("local",wordlist); 268 addWords("local",wordlist);
269} 269}
270 270
271/*! 271/*!
272 Adds \a wordlist to the dawg() named \a dictname. 272 Adds \a wordlist to the dawg() named \a dictname.
273*/ 273*/
274void Global::addWords(const QString& dictname, const QStringList& wordlist) 274void Global::addWords(const QString& dictname, const QStringList& wordlist)
275{ 275{
276 QDawg& d = (QDawg&)dawg(dictname); 276 QDawg& d = (QDawg&)dawg(dictname);
277 QStringList all = d.allWords() + wordlist; 277 QStringList all = d.allWords() + wordlist;
278 d.createFromWords(all); 278 d.createFromWords(all);
279 279
280 QString dawgfilename = dictDir() + "/" + dictname + ".dawg"; 280 QString dawgfilename = dictDir() + "/" + dictname + ".dawg";
281 QFile dawgfile(dawgfilename); 281 QFile dawgfile(dawgfilename);
282 if ( dawgfile.open(IO_WriteOnly) ) { 282 if ( dawgfile.open(IO_WriteOnly) ) {
283 d.write(&dawgfile); 283 d.write(&dawgfile);
284 dawgfile.close(); 284 dawgfile.close();
285 } 285 }
286 286
287 // #### Re-read the dawg here if we use mmap(). 287 // #### Re-read the dawg here if we use mmap().
288 288
289 // #### Signal other processes to re-read. 289 // #### Signal other processes to re-read.
290} 290}
291 291
292 292
293/*! 293/*!
294 Returns a full path for the application named \a appname, with the 294 Returns a full path for the application named \a appname, with the
295 given \a filename or QString::null if there was a problem creating 295 given \a filename or QString::null if there was a problem creating
296 the directory tree for \a appname. 296 the directory tree for \a appname.
297 If \a filename contains "/", it is the caller's responsibility to 297 If \a filename contains "/", it is the caller's responsibility to
298 ensure those directories exist. 298 ensure those directories exist.
299*/ 299*/
300QString Global::applicationFileName(const QString& appname, const QString& filename) 300QString Global::applicationFileName(const QString& appname, const QString& filename)
301{ 301{
302 QDir d; 302 QDir d;
303 QString r = getenv("HOME"); 303 QString r = getenv("HOME");
304 r += "/Applications/"; 304 r += "/Applications/";
305 if ( !QFile::exists( r ) ) 305 if ( !QFile::exists( r ) )
306 if ( d.mkdir(r) == false ) 306 if ( d.mkdir(r) == false )
307 return QString::null; 307 return QString::null;
308 r += appname; 308 r += appname;
309 if ( !QFile::exists( r ) ) 309 if ( !QFile::exists( r ) )
310 if ( d.mkdir(r) == false ) 310 if ( d.mkdir(r) == false )
311 return QString::null; 311 return QString::null;
312 r += "/"; r += filename; 312 r += "/"; r += filename;
313 return r; 313 return r;
314} 314}
315 315
316/*! 316/*!
317 \internal 317 \internal
318*/ 318*/
319void Global::createDocDir() 319void Global::createDocDir()
320{ 320{
321 if ( !docDirCreated ) { 321 if ( !docDirCreated ) {
322 docDirCreated = TRUE; 322 docDirCreated = TRUE;