-rw-r--r-- | korganizer/journalentry.cpp | 83 | ||||
-rw-r--r-- | korganizer/journalentry.h | 2 | ||||
-rw-r--r-- | korganizer/koeventeditor.cpp | 4 |
3 files changed, 85 insertions, 4 deletions
diff --git a/korganizer/journalentry.cpp b/korganizer/journalentry.cpp index 7af5cf4..dca42e0 100644 --- a/korganizer/journalentry.cpp +++ b/korganizer/journalentry.cpp @@ -1,170 +1,249 @@ /* This file is part of KOrganizer. Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ // // Journal Entry #include <qlabel.h> #include <qlayout.h> +#include <qvbox.h> +#include <qfile.h> +#include <qdir.h> +#include <qtextstream.h> +#include <qtextcodec.h> +#include <qpixmap.h> +#include <qpushbutton.h> #include <kdebug.h> #include <kglobal.h> #include <klocale.h> #include <ktextedit.h> +#include <kfiledialog.h> +#include <kmessagebox.h> #include "koprefs.h" #include <libkcal/journal.h> #include <libkcal/calendarresources.h> #include <libkcal/resourcecalendar.h> #include <kresources/resourceselectdialog.h> #include "journalentry.h" //#include "journalentry.moc" #ifndef DESKTOP_VERSION #include <qpe/qpeapplication.h> #endif JournalEntry::JournalEntry(Calendar *calendar,QWidget *parent) : QFrame(parent) { mCalendar = calendar; mJournal = 0; mDirty = false; - mTitleLabel = new QLabel(i18n("Title"),this); + QHBox * vb = new QHBox ( this ); + QPushButton * loadTemplate = new QPushButton( vb ); + QPushButton * saveTemplate = new QPushButton( vb ); + QIconSet icon; + if ( QApplication::desktop()->width() < 321 ) + icon = SmallIcon("fileexport16"); + else + icon = SmallIcon("fileexport"); + saveTemplate->setIconSet (icon ) ; + int size = saveTemplate->sizeHint().height(); + saveTemplate->setFixedSize( size, size ); + if ( QApplication::desktop()->width() < 321 ) + icon = SmallIcon("fileimport16"); + else + icon = SmallIcon("fileimport"); + loadTemplate->setIconSet (icon ) ; + loadTemplate->setFixedSize( size, size ); + + mTitleLabel = new QLabel(i18n("Title"),vb); mTitleLabel->setMargin(2); mTitleLabel->setAlignment(AlignCenter); mEditor = new KTextEdit(this); connect(mEditor,SIGNAL(textChanged()),SLOT(setDirty())); #ifndef DESKTOP_VERSION QPEApplication::setStylusOperation( mEditor, QPEApplication::RightOnHold ); #endif mEditor->setWordWrap( KTextEdit::WidgetWidth ); QBoxLayout *topLayout = new QVBoxLayout(this); - topLayout->addWidget(mTitleLabel); + topLayout->addWidget(vb); topLayout->addWidget(mEditor); mEditor->installEventFilter(this); + connect( saveTemplate, SIGNAL( clicked() ), this , SLOT( slotSaveTemplate() ) ); + connect( loadTemplate, SIGNAL( clicked() ), this , SLOT( slotLoadTemplate() ) ); } JournalEntry::~JournalEntry() { } +void JournalEntry::slotSaveTemplate() +{ + QString fileName =locateLocal( "templates", "journals" ); + QDir t_dir; + if ( !t_dir.exists(fileName) ) + t_dir.mkdir ( fileName ); + fileName += "/journal"; + fileName = KFileDialog::getSaveFileName( fileName , i18n("Save as Journal template"), this ); + if ( fileName.length() == 0 ) + return; + + QFile fileIn( fileName ); + if (!fileIn.open( IO_WriteOnly ) ) { + KMessageBox::error( this, i18n("Error saving template file\n '%1'.") + .arg( fileName ) ); + return; + } + // QString text; + QTextStream tsIn( &fileIn ); + tsIn.setCodec( QTextCodec::codecForName("utf8") ); + tsIn << mEditor->text(); + fileIn.close(); +} +void JournalEntry::slotLoadTemplate() +{ + QString fileName =locateLocal( "templates", "journals" ); + QDir t_dir; + if ( !t_dir.exists(fileName) ) + t_dir.mkdir ( fileName ); + fileName += "/journal"; + fileName = KFileDialog::getOpenFileName( fileName , i18n("Insert Journal template"), this ); + if ( fileName.length() == 0 ) + return; + QFile fileIn( fileName ); + if (!fileIn.open( IO_ReadOnly ) ) { + KMessageBox::error( this, i18n("Error loading template file\n '%1'.") + .arg( fileName ) ); + return; + } + QTextStream tsIn( &fileIn ); + tsIn.setCodec( QTextCodec::codecForName("utf8") ); + QString text = tsIn.read(); + fileIn.close(); + int line, col; + mEditor->getCursorPosition (& line, & col ); + mEditor-> insertAt ( text, line, col, true ); + //mEditor->setIgnoreMark( true ); + setDirty(); +} void JournalEntry::setDate(const QDate &date) { writeJournal(); mTitleLabel->setText(KGlobal::locale()->formatDate(date)); mDate = date; } void JournalEntry::setJournal(Journal *journal) { writeJournal(); mJournal = journal; mEditor->setText(mJournal->description()); mDirty = false; } Journal *JournalEntry::journal() const { return mJournal; } void JournalEntry::setDirty() { mDirty = true; // kdDebug() << "JournalEntry::setDirty()" << endl; } void JournalEntry::clear() { mJournal = 0; mEditor->setText(""); } bool JournalEntry::eventFilter( QObject *o, QEvent *e ) { // kdDebug() << "JournalEntry::event received " << e->type() << endl; if ( e->type() == QEvent::FocusOut ) { writeJournal(); } if ( e->type() == QEvent::KeyPress ) { QKeyEvent * k = (QKeyEvent *) e; if ( k->state() == Qt::ControlButton ) { k->ignore(); //return true; } } return QFrame::eventFilter( o, e ); // standard event processing } void JournalEntry::writeJournal() { // kdDebug() << "JournalEntry::writeJournal()" << endl; if (!mDirty) return; if (mEditor->text().isEmpty()) { if ( mJournal ) { mDirty = false; bool conf = KOPrefs::instance()->mConfirm; KOPrefs::instance()->mConfirm = false; emit deleteJournal(mJournal); KOPrefs::instance()->mConfirm = conf; mJournal = 0; } return; } // kdDebug() << "JournalEntry::writeJournal()..." << endl; if (!mJournal) { mJournal = new Journal; mJournal->setDtStart(QDateTime(mDate,QTime(0,0,0))); mCalendar->addJournal(mJournal); } mJournal->setDescription(mEditor->text()); + //qDebug("tttt%s ", mEditor->text().latin1()); mDirty = false; } void JournalEntry::flushEntry() { if (!mDirty) return; writeJournal(); } void JournalEntry::keyPressEvent ( QKeyEvent * e ) { e->ignore(); } diff --git a/korganizer/journalentry.h b/korganizer/journalentry.h index 1f784f4..f1a1fef 100644 --- a/korganizer/journalentry.h +++ b/korganizer/journalentry.h @@ -1,73 +1,75 @@ /* This file is part of KOrganizer. Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #ifndef JOURNALENTRY_H #define JOURNALENTRY_H // // Widget showing one Journal entry #include <qframe.h> #include <libkcal/calendar.h> class QLabel; class KTextEdit; using namespace KCal; class JournalEntry : public QFrame { Q_OBJECT public: JournalEntry(Calendar *,QWidget *parent); virtual ~JournalEntry(); void setJournal(Journal *); Journal *journal() const; void setDate(const QDate &); void clear(); void flushEntry(); protected slots: + void slotSaveTemplate(); + void slotLoadTemplate(); void setDirty(); signals: void deleteJournal(Journal *); protected: bool eventFilter( QObject *o, QEvent *e ); void writeJournal(); private: Calendar *mCalendar; Journal *mJournal; QDate mDate; void keyPressEvent ( QKeyEvent * ) ; QLabel *mTitleLabel; KTextEdit *mEditor; bool mDirty; }; #endif diff --git a/korganizer/koeventeditor.cpp b/korganizer/koeventeditor.cpp index 0ff99a4..337db9b 100644 --- a/korganizer/koeventeditor.cpp +++ b/korganizer/koeventeditor.cpp @@ -146,232 +146,232 @@ void KOEventEditor::setupGeneral() mGeneral->initClass(topFrame2,topLayout2); mGeneral->initSecrecy( topFrame2, topLayout2 ); mGeneral->initDescription(topFrame2,topLayout2); connect( saveTemplate, SIGNAL( clicked() ), this , SLOT( slotSaveTemplate() ) ); connect( loadTemplate, SIGNAL( clicked() ), this , SLOT( slotLoadTemplate() ) ); } else { QFrame *topFrame = addPage(i18n("General")); QBoxLayout *topLayout = new QVBoxLayout(topFrame); topLayout->setSpacing(spacingHint()); mGeneral->initHeader(topFrame,topLayout); mGeneral->initTime(topFrame,topLayout); QBoxLayout *alarmLineLayout = new QHBoxLayout(topLayout); mGeneral->initAlarm(topFrame,alarmLineLayout); mGeneral->initClass(topFrame,alarmLineLayout); mGeneral->initDescription(topFrame,topLayout); QBoxLayout *detailsLayout = new QHBoxLayout(topLayout); mGeneral->initCategories( topFrame, detailsLayout ); mGeneral->initSecrecy( topFrame, detailsLayout ); } mGeneral->finishSetup(); } void KOEventEditor::setupRecurrence() { QFrame *topFrame = addPage( i18n("Recurrence") ); QBoxLayout *topLayout = new QVBoxLayout( topFrame ); mRecurrence = new KOEditorRecurrence( topFrame ); topLayout->addWidget( mRecurrence ); } void KOEventEditor::editEvent(Event *event, bool showDescription) { // init(); mEvent = event; readEvent(mEvent); qApp->processEvents(); if ( showDescription ) { showPage( 1 ); mGeneral->setFocusOn( 1 ); } else { showPage( 0 ); mGeneral->setFocusOn( 2 ); } } void KOEventEditor::newEvent( QDateTime from, QDateTime to, bool allDay ) { // init(); mEvent = 0; setDefaults(from,to,allDay); } void KOEventEditor::loadDefaults() { int fmt = KOPrefs::instance()->mStartTime; QDateTime from(QDate::currentDate(), QTime(fmt,0,0)); QDateTime to(QDate::currentDate(), QTime(fmt+KOPrefs::instance()->mDefaultDuration,0,0)); setDefaults(from,to,false); } bool KOEventEditor::processInput( bool emitTime ) { if (!validateInput()) return false; Event *event = 0; if (mEvent) event = mEvent; else { event = new Event; event->setOrganizer(KOPrefs::instance()->email()); } writeEvent(event); if ( emitTime ) { globalFlagBlockAgenda = 1; emit showAgendaView( false ); emit jumpToTime( event->dtStart().date() ); globalFlagBlockAgenda = 2; } if (mEvent) { event->setRevision(event->revision()+1); emit eventChanged(event); } else { mCalendar->addEvent(event); mEvent = event; emit eventAdded(event); } return true; } void KOEventEditor::deleteEvent() { kdDebug() << "Delete event" << endl; if (mEvent) { if (KOPrefs::instance()->mConfirm) { switch (msgItemDelete()) { case KMessageBox::Continue: // OK emit eventToBeDeleted(mEvent); emit dialogClose(mEvent); mCalendar->deleteEvent(mEvent); emit eventDeleted(); reject(); break; } } else { emit eventToBeDeleted(mEvent); emit dialogClose(mEvent); mCalendar->deleteEvent(mEvent); emit eventDeleted(); reject(); } } else { reject(); } } void KOEventEditor::setDefaults(QDateTime from, QDateTime to, bool allDay) { mGeneral->setDefaults(from,to,allDay); mDetails->setDefaults(); mRecurrence->setDefaults(from,to,allDay); showPage( 0 ); mGeneral->setFocusOn( 2 ); } void KOEventEditor::readEvent( Event *event, bool tmpl ) { mGeneral->readEvent( event, tmpl ); mDetails->readEvent( event ); mRecurrence->readEvent( event ); // categories //mCategoryDialog->setSelected( event->categories() ); } void KOEventEditor::writeEvent(Event *event) { mGeneral->writeEvent( event ); mDetails->writeEvent( event ); if ( event->organizer() == KOPrefs::instance()->email() ) { Event *ev = new Event( *event ); ev->registerObserver(0); mDetails->cancelAttendeeEvent( ev ); if ( ev->attendeeCount() > 0 ) { emit deleteAttendee( ev ); } delete(ev); } mRecurrence->writeEvent(event); } bool KOEventEditor::validateInput() { if (!mGeneral->validateInput()) return false; if (!mDetails->validateInput()) return false; if (!mRecurrence->validateInput()) return false; return true; } int KOEventEditor::msgItemDelete() { return KMessageBox::warningContinueCancel(this, i18n("This item will be permanently deleted."), i18n("KOrganizer Confirmation"),i18n("Delete")); } void KOEventEditor::slotLoadTemplate() { QString fileName =locateLocal( "templates", "events" ); QDir t_dir; if ( !t_dir.exists(fileName) ) t_dir.mkdir ( fileName ); fileName += "/event"; - fileName = KFileDialog::getSaveFileName( fileName , "Load Event template", this ); + fileName = KFileDialog::getOpenFileName( fileName , i18n("Load Event template"), this ); if ( fileName.length() == 0 ) return; CalendarLocal cal; ICalFormat format; if ( !format.load( &cal, fileName ) ) { KMessageBox::error( this, i18n("Error loading template file\n '%1'.") .arg( fileName ) ); return ; } QPtrList<Event> events = cal.events(); Event* event = events.first(); if ( !event ) { KMessageBox::error( this, i18n("Template does not contain\na valid Event.")); } else { kdDebug() << "KOEventEditor::slotLoadTemplate(): readTemplate" << endl; readEvent( event, true ); } } void KOEventEditor::slotSaveTemplate() { QString fileName =locateLocal( "templates", "events" ); QDir t_dir; if ( !t_dir.exists(fileName) ) t_dir.mkdir ( fileName ); fileName += "/event"; - fileName = KFileDialog::getSaveFileName( fileName , "Save as Event template", this ); + fileName = KFileDialog::getSaveFileName( fileName , i18n("Save as Event template"), this ); if ( fileName.length() > 0 ) saveTemplate( fileName ); } void KOEventEditor::saveTemplate( const QString &templateName ) { Event *event = new Event; writeEvent( event ); saveAsTemplate( event, templateName ); } |