-rw-r--r-- | ChangeLog | 1 | ||||
-rw-r--r-- | core/pim/notes/editwindow.cpp | 57 | ||||
-rw-r--r-- | core/pim/notes/editwindow.h | 22 | ||||
-rw-r--r-- | core/pim/notes/main.cpp | 12 | ||||
-rw-r--r-- | core/pim/notes/mainwindow.cpp | 255 | ||||
-rw-r--r-- | core/pim/notes/mainwindow.h | 52 | ||||
-rw-r--r-- | core/pim/notes/opie-notes.pro | 11 |
7 files changed, 410 insertions, 0 deletions
@@ -1,12 +1,13 @@ 2005-??-?? Opie 1.2.2 New Features ------------ * Appearance: Added configuration options to set smallIconSize, bigIconSize, useBigPixmaps (hrw) + * Opie-Notes: Notes application based on NoteZ (hrw) Fixed Bugs ---------- * #1695 - Date selector use too small fontsize on VGA screen (hrw) * #1686 - opie-console lack UI setting for switching scrollbar (hrw) * #1647 - Opie-console doesn't respect scroll-bar on left side (hrw) diff --git a/core/pim/notes/editwindow.cpp b/core/pim/notes/editwindow.cpp new file mode 100644 index 0000000..1b2d4a6 --- a/dev/null +++ b/core/pim/notes/editwindow.cpp @@ -0,0 +1,57 @@ +#include "editwindow.h" + +editWindowWidget::editWindowWidget( QWidget* parent, const char* name, bool modal, WFlags fl ) : QDialog( parent, name, modal, fl ) +{ + setCaption( tr( "Information:" ) ); + QGridLayout *gridLayout = new QGridLayout(this, 1, 1, 5, 5); + editArea = new QMultiLineEdit(this, "editArea"); + gridLayout->addWidget(editArea, 0, 0); + editArea->setWordWrap(QMultiLineEdit::WidgetWidth); + + showMaximized(); +} + +void editWindowWidget::loadFile(QString fileName) +{ + QFileInfo fileinfo(fileName); + setCaption(fileinfo.fileName()); + + QFile file(fileName); + + if (file.exists()) + { + if (!file.open(IO_ReadOnly)) + { + QMessageBox::warning(0, tr("File i/o error"), fileName.sprintf(tr("Could not read file '%s'"), fileName)); + } + else + { + QTextStream inStream(&file); + inStream.setEncoding(QTextStream::UnicodeUTF8); + editArea->setText(inStream.read()); + file.close(); + } + } +} + +void editWindowWidget::saveFile(QString fileName) +{ + QFile file(fileName); + + if(!file.open(IO_WriteOnly)) + { + QMessageBox::warning(0, tr("File i/o error"), fileName.sprintf(tr("Could not write file '%s'"), fileName)); + } + else + { + QTextStream outStream(&file); + outStream.setEncoding(QTextStream::UnicodeUTF8); + outStream << editArea->text(); + file.close(); + this->accept(); + } +} + +editWindowWidget::~editWindowWidget() +{ +} diff --git a/core/pim/notes/editwindow.h b/core/pim/notes/editwindow.h new file mode 100644 index 0000000..57c5241 --- a/dev/null +++ b/core/pim/notes/editwindow.h @@ -0,0 +1,22 @@ +#include <qdialog.h> +#include <qlayout.h> +#include <qmultilineedit.h> +#include <qmessagebox.h> +#include <qtextstream.h> +#include <qfile.h> +#include <qfileinfo.h> + +class editWindowWidget : public QDialog +{ + Q_OBJECT + + public: + editWindowWidget::editWindowWidget(QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0); + ~editWindowWidget(); + void loadFile(QString fileName); + void saveFile(QString fileName); + + private: + QMultiLineEdit *editArea; + +}; diff --git a/core/pim/notes/main.cpp b/core/pim/notes/main.cpp new file mode 100644 index 0000000..c69fa93 --- a/dev/null +++ b/core/pim/notes/main.cpp @@ -0,0 +1,12 @@ +#include "mainwindow.h" + +int main(int argc, char* argv[]) +{ + QPEApplication a(argc, argv); + + mainWindowWidget mainWindow; + + a.showMainWidget(&mainWindow); + + return a.exec(); +} diff --git a/core/pim/notes/mainwindow.cpp b/core/pim/notes/mainwindow.cpp new file mode 100644 index 0000000..d10578a --- a/dev/null +++ b/core/pim/notes/mainwindow.cpp @@ -0,0 +1,255 @@ +/* + * OPIE Notes + * + * based on NoteZ 1.1.0 by Henning Holtschneider <hh@holtschneider.com> + * + * moved to OPIE Pim framework by Marcin Juszkiewicz <openembedded@hrw.one.pl> + * + * History: + * - 2005.10.12 - started work + * - 2005.10.19 - version 0.2: + * - first working version + * - info sent to NoteZ author and to OPIE devel + * + * - 2005.10.20 - version 0.3: + * - load/save in UTF-8 + * - load all files from Documents/text/plain + * - create .txt files not .ntz - timestamp used as name + * - one variable (documentsDirName) keep location of notes + * - code (re)indented and converted to spaces + * - variables translated to English (were in German) + * - started work on beaming + * + * ToDo: + * - beaming + * - moving to SQLite database + * - category support + * - searching + * + */ + +#include "mainwindow.h" +#include "editwindow.h" +#include <qpe/ir.h> + +mainWindowWidget::mainWindowWidget( QWidget *parent, const char *name, WFlags) + : Opie::OPimMainWindow( "Notes", "Notes", tr( "Note" ), "notes", + parent, name, WType_TopLevel | WStyle_ContextHelp ) +{ + setCaption( tr("Notes")); + notesList = new QListBox(this, "notesList"); + setCentralWidget(notesList); + + documentsDirName = QPEApplication::documentDir() + "/text/plain/"; + this->selected = -1; + refreshList(); + + QObject::connect(notesList, SIGNAL(returnPressed(QListBoxItem*)), this, SLOT(slotItemEdit())); + QObject::connect(notesList, SIGNAL(doubleClicked(QListBoxItem*)), this, SLOT(slotItemEdit())); +} + +void mainWindowWidget::deleteFile() +{ + if( notesList->count() > 0 ) + { + switch (QMessageBox::warning(0, tr("Delete note"), tr("Really delete\n'") + notesList->currentText() + "'?", + QMessageBox::Yes, QMessageBox::No)) + { + case QMessageBox::Yes: + this->selected = notesList->currentItem(); + QFile::remove(documentsDirName + fileList[notesList->currentItem()]); + refreshList(); + break; + + case QMessageBox::No: + // don't delete + break; + } + } +} + +void mainWindowWidget::editFile(QString filename, int create) +{ + editWindowWidget *editWindow = new editWindowWidget(0, "editWindow", true); + + editWindow->loadFile(filename); + + if(QPEApplication::execDialog(editWindow) == QDialog::Accepted) + { + editWindow->saveFile(filename); + if( create ) + { + // the new selection will be always at the end and count is already + // 1 bigger than selected + this->selected = notesList->count(); + } + } + + refreshList(); +} + +int mainWindowWidget::create() +{ + QString name; + int now = time(0); + + this->editFile(name.sprintf(documentsDirName + "%d.txt", now), true ); + + return 0; //FIXME +} + +void mainWindowWidget::slotItemEdit() +{ + openFile(); +} + +void mainWindowWidget::slotItemDelete() +{ + deleteFile(); +} + +void mainWindowWidget::slotItemNew() +{ + create(); +} + +void mainWindowWidget::slotItemDuplicate() +{ + QString fileName = documentsDirName + fileList[notesList->currentItem()]; + int now = time(0); + + QFile fileOld(fileName); + + if (fileOld.exists()) + { + if (!fileOld.open(IO_ReadOnly)) + { + QMessageBox::warning(0, tr("File i/o error"), fileName.sprintf(tr("Could not read file '%s'"), fileName)); + } + else + { + QFile fileNew(documentsDirName + fileName.sprintf("%d.txt", now)); + + if (!fileNew.exists()) + { + if(fileNew.open(IO_WriteOnly)) + { + QTextStream inStream(&fileOld); + inStream.setEncoding(QTextStream::UnicodeUTF8); + + QTextStream outStream(&fileNew); + outStream.setEncoding(QTextStream::UnicodeUTF8); + outStream << inStream.read(); + + fileOld.close(); + fileNew.close(); + refreshList(); + } + } + } + } +} + +void mainWindowWidget::openFile() +{ + int number = notesList->currentItem(); + + if( notesList->count() > 0 ) + { + this->selected = number; + this->editFile(documentsDirName + fileList[number], false); + } +} + +void mainWindowWidget::refreshList() +{ + unsigned int item; + QString title; + + notesList->clear(); + + fileList.setPath(documentsDirName); + fileList.setFilter(QDir::Files); + fileList.setSorting(QDir::Name); + + for (item = 0; item < fileList.count(); item++) + { + QFile file(documentsDirName + fileList[item]); + + if (!file.open(IO_ReadOnly)) + { + QMessageBox::warning(0, tr("File i/o error"), title.sprintf(tr("Could not read file '%s'"), fileList[item])); + } + else + { + QTextStream inStream(&file); + inStream.setEncoding(QTextStream::UnicodeUTF8); + + if (!inStream.atEnd()) + { + title = inStream.readLine(); + } + else + { + title = tr("<empty file>"); + } + + if (title.length() < 1) + { + title = tr("<no caption>"); + } + + file.close(); + + notesList->insertItem(title); + } + } + + if( notesList->count() > 0 ) + { + if( this->selected == -1 ) + { + notesList->setCurrentItem( 0 ); + } + else + { + if( notesList->count() > this->selected ) + { + notesList->setCurrentItem( this->selected ); + } + else + { + notesList->setCurrentItem( notesList->count() - 1 ); + } + + } + } + else + { + this->selected = -1; + } + +} + +void mainWindowWidget::slotItemBeam() +{ + Ir obex; + + obex.send(documentsDirName + fileList[notesList->currentItem()], "test", "text/plain"); +} + +void mainWindowWidget::slotItemFind() { toBeDone();} +void mainWindowWidget::slotConfigure() { toBeDone();} +void mainWindowWidget::flush() { toBeDone();} +void mainWindowWidget::reload() { toBeDone();} +bool mainWindowWidget::remove( int /*uid*/ ) { toBeDone(); return false; } +void mainWindowWidget::beam( int /*uid*/ ) { toBeDone();} +void mainWindowWidget::show( int /*uid*/ ) { toBeDone();} +void mainWindowWidget::edit( int /*uid*/ ) { toBeDone();} +void mainWindowWidget::add( const Opie::OPimRecord& ) { toBeDone();} + +void mainWindowWidget::toBeDone(void) +{ + QMessageBox::information( this, "Notes", tr("Not yet implemented")); +} + diff --git a/core/pim/notes/mainwindow.h b/core/pim/notes/mainwindow.h new file mode 100644 index 0000000..32431ef --- a/dev/null +++ b/core/pim/notes/mainwindow.h @@ -0,0 +1,52 @@ +#include <qpe/qpeapplication.h> +#include <qlistbox.h> +#include <qdir.h> +#include <qfile.h> +#include <qtextstream.h> +#include <qmessagebox.h> + +#include <opie2/opimmainwindow.h> +#include <opie2/owidgetstack.h> + +class mainWindowWidget : public Opie::OPimMainWindow +{ + Q_OBJECT + + public: + QListBox *notesList; + QDir fileList; + + mainWindowWidget( QWidget *parent=0, const char *name=0, WFlags fl=0 ); + void refreshList(); + + public slots: + void openFile(); + void deleteFile(); + + private: + int selected; + QString fileName; + QString documentsDirName; + + void editFile(QString filename, int create); + void toBeDone(void); + + private slots: + void slotItemNew(); + void slotItemEdit(); + void slotItemDuplicate(); + void slotItemDelete(); + void slotItemBeam(); + void slotItemFind(); + void slotConfigure(); + + protected slots: + void flush(); + void reload(); + int create(); + bool remove( int uid ); + void beam( int uid); + void show( int uid ); + void edit( int uid ); + void add( const Opie::OPimRecord& ); +}; diff --git a/core/pim/notes/opie-notes.pro b/core/pim/notes/opie-notes.pro new file mode 100644 index 0000000..6a343d8 --- a/dev/null +++ b/core/pim/notes/opie-notes.pro @@ -0,0 +1,11 @@ +TEMPLATE = app +CONFIG = qt warn_on + +INCLUDEPATH += $(OPIEDIR)/include +DEPENDPATH += $(OPIEDIR)/include +LIBS += -lqpe -lopiecore2 -lopieui2 -lopiepim2 + +HEADERS = mainwindow.h editwindow.h +SOURCES = mainwindow.cpp main.cpp editwindow.cpp + +include( $(OPIEDIR)/include.pro ) |