summaryrefslogtreecommitdiff
authorllornkcor <llornkcor>2002-09-22 01:21:48 (UTC)
committer llornkcor <llornkcor>2002-09-22 01:21:48 (UTC)
commit4ad2edeaf52db70042ba27a97e16733cbc6a8cc0 (patch) (unidiff)
treeab2adb51887a5a1ceece5b2ba4b1131c13cc36d7
parentad9e290551c610e4ccaafb20b72699b39b55d079 (diff)
downloadopie-4ad2edeaf52db70042ba27a97e16733cbc6a8cc0.zip
opie-4ad2edeaf52db70042ba27a97e16733cbc6a8cc0.tar.gz
opie-4ad2edeaf52db70042ba27a97e16733cbc6a8cc0.tar.bz2
fix race
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/applets/notesapplet/notes.cpp20
1 files changed, 10 insertions, 10 deletions
diff --git a/noncore/applets/notesapplet/notes.cpp b/noncore/applets/notesapplet/notes.cpp
index 64731e3..a4aa093 100644
--- a/noncore/applets/notesapplet/notes.cpp
+++ b/noncore/applets/notesapplet/notes.cpp
@@ -1,363 +1,363 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2002 L.J. Potter <llornkcor@handhelds.org> 2** Copyright (C) 2002 L.J. Potter <llornkcor@handhelds.org>
3 3
4** All rights reserved. 4** All rights reserved.
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**********************************************************************/ 14**********************************************************************/
15 15
16#include "notes.h" 16#include "notes.h"
17 17
18#include <qapplication.h> 18#include <qapplication.h>
19#include <stdlib.h> 19#include <stdlib.h>
20#include <qstringlist.h> 20#include <qstringlist.h>
21 21
22#include <qpe/filemanager.h> 22#include <qpe/filemanager.h>
23#include <qpe/resource.h> 23#include <qpe/resource.h>
24#include <qpe/qpeapplication.h> 24#include <qpe/qpeapplication.h>
25#include <qpe/timestring.h> 25#include <qpe/timestring.h>
26#include <qpe/resource.h> 26#include <qpe/resource.h>
27#include <qpe/config.h> 27#include <qpe/config.h>
28#include <qpe/applnk.h> 28#include <qpe/applnk.h>
29#include <qpe/config.h> 29#include <qpe/config.h>
30#include <qsocket.h> 30#include <qsocket.h>
31 31
32#include <qmultilineedit.h> 32#include <qmultilineedit.h>
33#include <qlistbox.h> 33#include <qlistbox.h>
34#include <qpopupmenu.h> 34#include <qpopupmenu.h>
35#include <qmessagebox.h> 35#include <qmessagebox.h>
36 36
37#include <qdir.h> 37#include <qdir.h>
38#include <qpoint.h> 38#include <qpoint.h>
39#include <qpushbutton.h> 39#include <qpushbutton.h>
40#include <qpainter.h> 40#include <qpainter.h>
41#include <qlayout.h> 41#include <qlayout.h>
42#include <qframe.h> 42#include <qframe.h>
43#include <qpixmap.h> 43#include <qpixmap.h>
44#include <qstring.h> 44#include <qstring.h>
45#include <qtimer.h> 45#include <qtimer.h>
46 46
47/* XPM */ 47/* XPM */
48static char * notes_xpm[] = { 48static char * notes_xpm[] = {
49"16 16 11 1", 49"16 16 11 1",
50" c None", 50" c None",
51". c #000000", 51". c #000000",
52"+ c #7F7F7F", 52"+ c #7F7F7F",
53"@ c #BFBFBF", 53"@ c #BFBFBF",
54"# c #BFC1FF", 54"# c #BFC1FF",
55"$ c #FF0000", 55"$ c #FF0000",
56"% c #FFFFFF", 56"% c #FFFFFF",
57"& c #00037F", 57"& c #00037F",
58"* c #0006FF", 58"* c #0006FF",
59"= c #0005BF", 59"= c #0005BF",
60"- c #7F0000", 60"- c #7F0000",
61" .. ", 61" .. ",
62" .. ", 62" .. ",
63" ... ", 63" ... ",
64" .+ ", 64" .+ ",
65" .@. ", 65" .@. ",
66" . .+ ", 66" . .+ ",
67" ..#.@. ", 67" ..#.@. ",
68" ..###.+.. ", 68" ..###.+.. ",
69" ..###$...##.. ", 69" ..###$...##.. ",
70"..###$$$%+$$##&.", 70"..###$$$%+$$##&.",
71".*=####$-###&=&.", 71".*=####$-###&=&.",
72".=**=###==&=&=..", 72".=**=###==&=&=..",
73" ..=**=#&=&=.. ", 73" ..=**=#&=&=.. ",
74" ..=*=&=.. ", 74" ..=*=&=.. ",
75" ..=.. ", 75" ..=.. ",
76" . "}; 76" . "};
77 77
78 78
79NotesControl::NotesControl( QWidget *parent, const char *name ) 79NotesControl::NotesControl( QWidget *parent, const char *name )
80 : QFrame( parent, name,/* WDestructiveClose | */WStyle_StaysOnTop ) 80 : QFrame( parent, name,/* WDestructiveClose | */WStyle_StaysOnTop )
81// : QFrame( parent, name, WDestructiveClose | WStyle_StaysOnTop | WType_Popup ) 81// : QFrame( parent, name, WDestructiveClose | WStyle_StaysOnTop | WType_Popup )
82{ 82{
83 setFrameStyle( QFrame::PopupPanel | QFrame::Raised ); 83 setFrameStyle( QFrame::PopupPanel | QFrame::Raised );
84 loaded=false; 84 loaded=false;
85 edited=false; 85 edited=false;
86 doPopulate=true; 86 doPopulate=true;
87 QVBoxLayout *vbox = new QVBoxLayout( this,0, -1, "Vlayout" ); 87 QVBoxLayout *vbox = new QVBoxLayout( this,0, -1, "Vlayout" );
88 QHBoxLayout *hbox = new QHBoxLayout( this ); 88 QHBoxLayout *hbox = new QHBoxLayout( this );
89 89
90 view = new QMultiLineEdit(this, "OpieNotesView"); 90 view = new QMultiLineEdit(this, "OpieNotesView");
91 91
92 box = new QListBox(this, "OpieNotesBox"); 92 box = new QListBox(this, "OpieNotesBox");
93 QPEApplication::setStylusOperation( box->viewport(),QPEApplication::RightOnHold); 93 QPEApplication::setStylusOperation( box->viewport(),QPEApplication::RightOnHold);
94 box->setFixedHeight(50); 94 box->setFixedHeight(50);
95 95
96 vbox->setMargin( 6 ); 96 vbox->setMargin( 6 );
97 vbox->setSpacing( 3 ); 97 vbox->setSpacing( 3 );
98 98
99 vbox->addWidget( view); 99 vbox->addWidget( view);
100 vbox->addWidget( box); 100 vbox->addWidget( box);
101 101
102 setFixedHeight(180); 102 setFixedHeight(180);
103 QWidget *wid = QPEApplication::desktop(); 103 QWidget *wid = QPEApplication::desktop();
104 setFixedWidth( wid->width()-10 /*200*/); 104 setFixedWidth( wid->width()-10 /*200*/);
105 105
106 setFocusPolicy(QWidget::StrongFocus); 106 setFocusPolicy(QWidget::StrongFocus);
107 107
108 newButton= new QPushButton( this, "newButton" ); 108 newButton= new QPushButton( this, "newButton" );
109 newButton->setText(tr("New")); 109 newButton->setText(tr("New"));
110 hbox->addWidget( newButton); 110 hbox->addWidget( newButton);
111 vbox->addItem(hbox); 111 vbox->addItem(hbox);
112 112
113 connect( box, SIGNAL( mouseButtonPressed( int, QListBoxItem *, const QPoint&)), 113 connect( box, SIGNAL( mouseButtonPressed( int, QListBoxItem *, const QPoint&)),
114 this,SLOT( boxPressed(int, QListBoxItem *, const QPoint&)) ); 114 this,SLOT( boxPressed(int, QListBoxItem *, const QPoint&)) );
115 connect(box, SIGNAL(highlighted(const QString&)), this, SLOT(slotBoxSelected(const QString &))); 115 connect(box, SIGNAL(highlighted(const QString&)), this, SLOT(slotBoxSelected(const QString &)));
116 connect( &menuTimer, SIGNAL( timeout() ), SLOT( showMenu() ) ); 116 connect( &menuTimer, SIGNAL( timeout() ), SLOT( showMenu() ) );
117 117
118 connect(view,SIGNAL( textChanged() ), this, SLOT(slotViewEdited() ) ); 118 connect(view,SIGNAL( textChanged() ), this, SLOT(slotViewEdited() ) );
119 connect(newButton, SIGNAL(clicked()), this, SLOT(slotNewButton())); 119 connect(newButton, SIGNAL(clicked()), this, SLOT(slotNewButton()));
120 populateBox(); 120 populateBox();
121 load(); 121 load();
122 setCaption("Notes"); 122 setCaption("Notes");
123 // parent->setFocus(); 123 // parent->setFocus();
124} 124}
125 125
126void NotesControl::slotDeleteButton() { 126void NotesControl::slotDeleteButton() {
127 QString selectedText = box->currentText(); 127 QString selectedText = box->currentText();
128 qDebug("deleting "+selectedText); 128 qDebug("deleting "+selectedText);
129 Config cfg("Notes"); 129 Config cfg("Notes");
130 cfg.setGroup("Docs"); 130 cfg.setGroup("Docs");
131 int noOfFiles = cfg.readNumEntry("NumberOfFiles", 0 ); 131 int noOfFiles = cfg.readNumEntry("NumberOfFiles", 0 );
132 QString entryName, entryName2;; 132 QString entryName, entryName2;;
133 for ( int i = 0; i < noOfFiles; i++ ) { 133 for ( int i = 0; i < noOfFiles; i++ ) {
134 entryName.sprintf( "File%i", i + 1 ); 134 entryName.sprintf( "File%i", i + 1 );
135 if(selectedText == cfg.readEntry( entryName )) { 135 if(selectedText == cfg.readEntry( entryName )) {
136 qDebug("removing %s, %d", selectedText.latin1(), i); 136 qDebug("removing %s, %d", selectedText.latin1(), i);
137 for ( int j = i; j < noOfFiles; j++ ) { 137 for ( int j = i; j < noOfFiles; j++ ) {
138 entryName.sprintf( "File%i", i + 1 ); 138 entryName.sprintf( "File%i", i + 1 );
139 entryName2.sprintf( "File%i", i + 2 ); 139 entryName2.sprintf( "File%i", i + 2 );
140 QString temp = cfg.readEntry(entryName2); 140 QString temp = cfg.readEntry(entryName2);
141 qDebug("move "+temp); 141 qDebug("move "+temp);
142 cfg.writeEntry(entryName, temp); 142 cfg.writeEntry(entryName, temp);
143 i++; 143 i++;
144 } 144 }
145 cfg.writeEntry("NumberOfFiles", noOfFiles-1 ); 145 cfg.writeEntry("NumberOfFiles", noOfFiles-1 );
146 entryName.sprintf( "File%i", noOfFiles ); 146 entryName.sprintf( "File%i", noOfFiles );
147 cfg.removeEntry(entryName); 147 cfg.removeEntry(entryName);
148 cfg.write(); 148 cfg.write();
149 DocLnk nf(selectedText); 149 DocLnk nf(selectedText);
150 nf.removeFiles(); 150 nf.removeFiles();
151 } 151 }
152 } 152 }
153 populateBox(); 153 populateBox();
154} 154}
155 155
156void NotesControl::slotNewButton() { 156void NotesControl::slotNewButton() {
157 if(edited) save(); 157 if(edited) save();
158 view->clear(); 158 view->clear();
159 view->setFocus(); 159 view->setFocus();
160} 160}
161 161
162void NotesControl::boxPressed(int mouse, QListBoxItem *item, const QPoint&) { 162void NotesControl::boxPressed(int mouse, QListBoxItem *item, const QPoint&) {
163 switch (mouse) { 163 switch (mouse) {
164 case 1:{ 164 case 1:{
165 } 165 }
166 break; 166 break;
167 case 2: 167 case 2:
168 menuTimer.start( 500, TRUE ); 168 menuTimer.start( 500, TRUE );
169 break; 169 break;
170 }; 170 };
171} 171}
172 172
173void NotesControl::slotBoxSelected(const QString &itemString) { 173void NotesControl::slotBoxSelected(const QString &itemString) {
174 if(edited) { 174 if(edited) {
175 save(); 175 save();
176 } 176 }
177 loaded=false; 177 loaded=false;
178 edited=false; 178 edited=false;
179 load(itemString); 179 load(itemString);
180} 180}
181 181
182 182
183void NotesControl::showMenu() { 183void NotesControl::showMenu() {
184 QPopupMenu *m = new QPopupMenu(0); 184 QPopupMenu *m = new QPopupMenu(0);
185 185
186 m->insertItem( tr( "Delete" ), this, SLOT( slotDeleteButton() )); 186 m->insertItem( tr( "Delete" ), this, SLOT( slotDeleteButton() ));
187 187
188 m->setFocus(); 188 m->setFocus();
189 m->exec( QCursor::pos() ); 189 m->exec( QCursor::pos() );
190 190
191 if(m) delete m; 191 if(m) delete m;
192 192
193} 193}
194 194
195void NotesControl::focusOutEvent ( QFocusEvent * e) { 195void NotesControl::focusOutEvent ( QFocusEvent * e) {
196 if( e->reason() == QFocusEvent::Popup) 196 if( e->reason() == QFocusEvent::Popup)
197 save(); 197 save();
198 else { 198 else {
199 if(!loaded) { 199 if(!loaded) {
200 populateBox(); 200 populateBox();
201 load(); 201 load();
202 } 202 }
203 } 203 }
204 QWidget::focusOutEvent(e); 204 QWidget::focusOutEvent(e);
205} 205}
206 206
207void NotesControl::save() { 207void NotesControl::save() {
208 Config cfg("Notes"); 208 Config cfg("Notes");
209 cfg.setGroup("Docs"); 209 cfg.setGroup("Docs");
210 if( edited) { 210 if( edited) {
211 QString rt = view->text(); 211 QString rt = view->text();
212 if(!rt.isEmpty()) { 212 if(!rt.isEmpty()) {
213 QString pt = rt.simplifyWhiteSpace(); 213 QString pt = rt.simplifyWhiteSpace();
214 int i = pt.find( ' ' ); 214 int i = pt.find( ' ' );
215 QString docname = pt; 215 QString docname = pt;
216 if ( i > 0 ) 216 if ( i > 0 )
217 docname = pt.left( i ); 217 docname = pt.left( i );
218 // remove "." at the beginning 218 // remove "." at the beginning
219 while( docname.startsWith( "." ) ) 219 while( docname.startsWith( "." ) )
220 docname = docname.mid( 1 ); 220 docname = docname.mid( 1 );
221 docname.replace( QRegExp("/"), "_" ); 221 docname.replace( QRegExp("/"), "_" );
222 // cut the length. filenames longer than that don't make sense 222 // cut the length. filenames longer than that don't make sense
223 // and something goes wrong when they get too long. 223 // and something goes wrong when they get too long.
224 if ( docname.length() > 40 ) 224 if ( docname.length() > 40 )
225 docname = docname.left(40); 225 docname = docname.left(40);
226 if ( docname.isEmpty() ) 226 if ( docname.isEmpty() )
227 docname = "Empty Text"; 227 docname = "Empty Text";
228 qDebug(docname); 228 qDebug(docname);
229 229
230 if( oldDocName != docname) { 230 if( oldDocName != docname) {
231 int noOfFiles = cfg.readNumEntry("NumberOfFiles", 0 ); 231 int noOfFiles = cfg.readNumEntry("NumberOfFiles", 0 );
232 QString entryName; 232 QString entryName;
233 entryName.sprintf( "File%i", noOfFiles + 1 ); 233 entryName.sprintf( "File%i", noOfFiles + 1 );
234 cfg.writeEntry( entryName,docname ); 234 cfg.writeEntry( entryName,docname );
235 cfg.writeEntry("NumberOfFiles", noOfFiles+1 ); 235 cfg.writeEntry("NumberOfFiles", noOfFiles+1 );
236 cfg.write(); 236 cfg.write();
237 } 237 }
238 doc = new DocLnk(docname); 238 doc = new DocLnk(docname);
239 239
240 doc->setType("text/plain"); 240 doc->setType("text/plain");
241 doc->setFile(docname); 241 doc->setFile(docname);
242 doc->setName(docname); 242 doc->setName(docname);
243 243
244 FileManager fm; 244 FileManager fm;
245 if ( !fm.saveFile( *doc, rt ) ) { 245 if ( !fm.saveFile( *doc, rt ) ) {
246 } 246 }
247 247
248 oldDocName=docname; 248 oldDocName=docname;
249 edited=false; 249 edited=false;
250 } 250 }
251 qDebug("save"); 251 qDebug("save");
252 if (doPopulate) 252 if (doPopulate)
253 populateBox(); 253 populateBox();
254 } 254 }
255 cfg.writeEntry( "LastDoc",oldDocName ); 255 cfg.writeEntry( "LastDoc",oldDocName );
256 cfg.write(); 256 cfg.write();
257} 257}
258 258
259void NotesControl::populateBox() { 259void NotesControl::populateBox() {
260 box->clear(); 260 box->clear();
261 qDebug("populate"); 261 qDebug("populate");
262 Config cfg("Notes"); 262 Config cfg("Notes");
263 cfg.setGroup("Docs"); 263 cfg.setGroup("Docs");
264 int noOfFiles = cfg.readNumEntry("NumberOfFiles", 0 ); 264 int noOfFiles = cfg.readNumEntry("NumberOfFiles", 0 );
265 QStringList list; 265 QStringList list;
266 QString entryName; 266 QString entryName;
267 for ( int i = 0; i < noOfFiles; i++ ) { 267 for ( int i = 0; i < noOfFiles; i++ ) {
268 entryName.sprintf( "File%i", i + 1 ); 268 entryName.sprintf( "File%i", i + 1 );
269 list.append(cfg.readEntry( entryName )); 269 list.append(cfg.readEntry( entryName ));
270 } 270 }
271 list.sort(); 271 list.sort();
272 box->insertStringList(list,-1); 272 box->insertStringList(list,-1);
273 273 doPopulate=false;
274} 274}
275 275
276void NotesControl::load() { 276void NotesControl::load() {
277 277
278 Config cfg("Notes"); 278 Config cfg("Notes");
279 cfg.setGroup("Docs"); 279 cfg.setGroup("Docs");
280 if(!loaded) { 280 if(!loaded) {
281 QString lastDoc=cfg.readEntry( "LastDoc",""); 281 QString lastDoc=cfg.readEntry( "LastDoc","");
282 DocLnk nf; 282 DocLnk nf;
283 nf.setType("text/plain"); 283 nf.setType("text/plain");
284 nf.setFile(lastDoc); 284 nf.setFile(lastDoc);
285 285
286 loadDoc(nf); 286 loadDoc(nf);
287 loaded=true; 287 loaded=true;
288 oldDocName=lastDoc; 288 oldDocName=lastDoc;
289 } 289 }
290 cfg.writeEntry( "LastDoc",oldDocName ); 290 cfg.writeEntry( "LastDoc",oldDocName );
291 cfg.write(); 291 cfg.write();
292} 292}
293 293
294void NotesControl::load(const QString & file) { 294void NotesControl::load(const QString & file) {
295 qDebug("loading "+file); 295 qDebug("loading "+file);
296 if(!loaded) { 296 if(!loaded) {
297 DocLnk nf; 297 DocLnk nf;
298 nf.setType("text/plain"); 298 nf.setType("text/plain");
299 nf.setFile( file); 299 nf.setFile( file);
300 300
301 loadDoc(nf); 301 loadDoc(nf);
302 loaded=true; 302 loaded=true;
303 } 303 }
304// view->setFocus(); 304// view->setFocus();
305 oldDocName=file; 305 oldDocName=file;
306 Config cfg("Notes"); 306 Config cfg("Notes");
307 cfg.setGroup("Docs"); 307 cfg.setGroup("Docs");
308 cfg.writeEntry( "LastDoc",oldDocName ); 308 cfg.writeEntry( "LastDoc",oldDocName );
309 cfg.write(); 309 cfg.write();
310} 310}
311 311
312void NotesControl::loadDoc( const DocLnk &f) { 312void NotesControl::loadDoc( const DocLnk &f) {
313 FileManager fm; 313 FileManager fm;
314 QString txt; 314 QString txt;
315 if ( !fm.loadFile( f, txt ) ) { 315 if ( !fm.loadFile( f, txt ) ) {
316 return; 316 return;
317 } 317 }
318 view->setText(txt); 318 view->setText(txt);
319} 319}
320 320
321void NotesControl::slotViewEdited() { 321void NotesControl::slotViewEdited() {
322 if(loaded) { 322 if(loaded) {
323 edited=true; 323 edited=true;
324 } 324 }
325} 325}
326 326
327//=========================================================================== 327//===========================================================================
328 328
329NotesApplet::NotesApplet( QWidget *parent, const char *name ) 329NotesApplet::NotesApplet( QWidget *parent, const char *name )
330 : QWidget( parent, name ) { 330 : QWidget( parent, name ) {
331 setFixedHeight( 18 ); 331 setFixedHeight( 18 );
332 setFixedWidth( 14 ); 332 setFixedWidth( 14 );
333 vc = new NotesControl; 333 vc = new NotesControl;
334} 334}
335 335
336NotesApplet::~NotesApplet() { 336NotesApplet::~NotesApplet() {
337} 337}
338 338
339void NotesApplet::mousePressEvent( QMouseEvent *) { 339void NotesApplet::mousePressEvent( QMouseEvent *) {
340 if( !vc->isHidden()) { 340 if( !vc->isHidden()) {
341 vc->doPopulate=false; 341 vc->doPopulate=false;
342 vc->save(); 342 vc->save();
343 vc->close(); 343 vc->close();
344 } else { 344 } else {
345// vc = new NotesControl; 345// vc = new NotesControl;
346// QPoint curPos = mapToGlobal( rect().topLeft() ); 346// QPoint curPos = mapToGlobal( rect().topLeft() );
347 vc->show(); 347 vc->show();
348 vc->move( 5, 18); 348 vc->move( 5, 18);
349 vc->doPopulate=true; 349 vc->doPopulate=true;
350 vc->populateBox(); 350 vc->populateBox();
351 vc->load(); 351 vc->doPopulate=false;
352 352
353 353 vc->load();
354 this->setFocus(); 354// this->setFocus();
355 vc->view->setFocus(); 355 vc->view->setFocus();
356 } 356 }
357} 357}
358 358
359void NotesApplet::paintEvent( QPaintEvent* ) { 359void NotesApplet::paintEvent( QPaintEvent* ) {
360 QPainter p(this); 360 QPainter p(this);
361 p.drawPixmap( 0, 1, ( const char** ) notes_xpm ); 361 p.drawPixmap( 0, 1, ( const char** ) notes_xpm );
362} 362}
363 363