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