diff options
author | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
---|---|---|
committer | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
commit | 460c52653ab0dcca6f19a4f492ed2c5e4e963ab0 (patch) | |
tree | 67208f7c145782a7e90b123b982ca78d88cc2c87 /kontact/plugins/knotes/knotes_part.cpp | |
download | tdepim-460c52653ab0dcca6f19a4f492ed2c5e4e963ab0.tar.gz tdepim-460c52653ab0dcca6f19a4f492ed2c5e4e963ab0.zip |
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdepim@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kontact/plugins/knotes/knotes_part.cpp')
-rw-r--r-- | kontact/plugins/knotes/knotes_part.cpp | 413 |
1 files changed, 413 insertions, 0 deletions
diff --git a/kontact/plugins/knotes/knotes_part.cpp b/kontact/plugins/knotes/knotes_part.cpp new file mode 100644 index 000000000..5bd160d1d --- /dev/null +++ b/kontact/plugins/knotes/knotes_part.cpp @@ -0,0 +1,413 @@ +/* + This file is part of the KDE project + Copyright (C) 2002-2003 Daniel Molkentin <molkentin@kde.org> + Copyright (C) 2004-2006 Michael Brade <brade@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; see the file COPYING. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#include <qpopupmenu.h> +#include <qclipboard.h> + +#include <kapplication.h> +#include <kdebug.h> +#include <kaction.h> +#include <kmessagebox.h> + +#include <libkdepim/infoextension.h> +#include <libkdepim/sidebarextension.h> + +#include "knotes/knoteprinter.h" +#include "knotes/resourcemanager.h" + +#include "knotes_part.h" +#include "knotes_part_p.h" +#include "knotetip.h" + + +KNotesPart::KNotesPart( QObject *parent, const char *name ) + : DCOPObject( "KNotesIface" ), KParts::ReadOnlyPart( parent, name ), + mNotesView( new KNotesIconView() ), + mNoteTip( new KNoteTip( mNotesView ) ), + mNoteEditDlg( 0 ), + mManager( new KNotesResourceManager() ) +{ + mNoteList.setAutoDelete( true ); + + setInstance( new KInstance( "knotes" ) ); + + // create the actions + new KAction( i18n( "&New" ), "knotes", CTRL+Key_N, this, SLOT( newNote() ), + actionCollection(), "file_new" ); + new KAction( i18n( "Rename..." ), "text", this, SLOT( renameNote() ), + actionCollection(), "edit_rename" ); + new KAction( i18n( "Delete" ), "editdelete", Key_Delete, this, SLOT( killSelectedNotes() ), + actionCollection(), "edit_delete" ); + new KAction( i18n( "Print Selected Notes..." ), "print", CTRL+Key_P, this, SLOT( printSelectedNotes() ), + actionCollection(), "print_note" ); + + // TODO icons: s/editdelete/knotes_delete/ or the other way round in knotes + + // set the view up + mNotesView->setSelectionMode( QIconView::Extended ); + mNotesView->setItemsMovable( false ); + mNotesView->setResizeMode( QIconView::Adjust ); + mNotesView->setAutoArrange( true ); + mNotesView->setSorting( true ); + + connect( mNotesView, SIGNAL( executed( QIconViewItem* ) ), + this, SLOT( editNote( QIconViewItem* ) ) ); + connect( mNotesView, SIGNAL( returnPressed( QIconViewItem* ) ), + this, SLOT( editNote( QIconViewItem* ) ) ); + connect( mNotesView, SIGNAL( itemRenamed( QIconViewItem* ) ), + this, SLOT( renamedNote( QIconViewItem* ) ) ); + connect( mNotesView, SIGNAL( contextMenuRequested( QIconViewItem*, const QPoint& ) ), + this, SLOT( popupRMB( QIconViewItem*, const QPoint& ) ) ); + connect( mNotesView, SIGNAL( onItem( QIconViewItem* ) ), + this, SLOT( slotOnItem( QIconViewItem* ) ) ); + connect( mNotesView, SIGNAL( onViewport() ), + this, SLOT( slotOnViewport() ) ); + connect( mNotesView, SIGNAL( currentChanged( QIconViewItem* ) ), + this, SLOT( slotOnCurrentChanged( QIconViewItem* ) ) ); + + slotOnCurrentChanged( 0 ); + + new KParts::SideBarExtension( mNotesView, this, "NotesSideBarExtension" ); + + setWidget( mNotesView ); + setXMLFile( "knotes_part.rc" ); + + // connect the resource manager + connect( mManager, SIGNAL( sigRegisteredNote( KCal::Journal* ) ), + this, SLOT( createNote( KCal::Journal* ) ) ); + connect( mManager, SIGNAL( sigDeregisteredNote( KCal::Journal* ) ), + this, SLOT( killNote( KCal::Journal* ) ) ); + + // read the notes + mManager->load(); +} + +KNotesPart::~KNotesPart() +{ + delete mNoteTip; + mNoteTip = 0; + + delete mManager; + mManager = 0; +} + +void KNotesPart::printSelectedNotes() +{ + QValueList<KCal::Journal*> journals; + + for ( QIconViewItem *it = mNotesView->firstItem(); it; it = it->nextItem() ) { + if ( it->isSelected() ) { + journals.append( static_cast<KNotesIconViewItem *>( it )->journal() ); + } + } + + if ( journals.isEmpty() ) { + KMessageBox::information( mNotesView, i18n("To print notes, first select the notes to print from the list."), i18n("Print Notes") ); + return; + } + + KNotePrinter printer; + printer.printNotes(journals ); + +#if 0 + QString content; + if ( m_editor->textFormat() == PlainText ) + content = QStyleSheet::convertFromPlainText( m_editor->text() ); + else + content = m_editor->text(); + + KNotePrinter printer; + printer.setMimeSourceFactory( m_editor->mimeSourceFactory() ); + //printer.setFont( m_config->font() ); + //printer.setContext( m_editor->context() ); + //printer.setStyleSheet( m_editor->styleSheet() ); + printer.setColorGroup( colorGroup() ); + printer.printNote( , content ); +#endif +} + +bool KNotesPart::openFile() +{ + return false; +} + + +// public KNotes DCOP interface implementation + +QString KNotesPart::newNote( const QString& name, const QString& text ) +{ + // create the new note + KCal::Journal *journal = new KCal::Journal(); + + // new notes have the current date/time as title if none was given + if ( !name.isEmpty() ) + journal->setSummary( name ); + else + journal->setSummary( KGlobal::locale()->formatDateTime( QDateTime::currentDateTime() ) ); + + // the body of the note + journal->setDescription( text ); + + + + // Edit the new note if text is empty + if ( text.isNull() ) + { + if ( !mNoteEditDlg ) + mNoteEditDlg = new KNoteEditDlg( widget() ); + + mNoteEditDlg->setTitle( journal->summary() ); + mNoteEditDlg->setText( journal->description() ); + + if ( mNoteEditDlg->exec() == QDialog::Accepted ) + { + journal->setSummary( mNoteEditDlg->title() ); + journal->setDescription( mNoteEditDlg->text() ); + } + else + { + delete journal; + return ""; + } + } + + mManager->addNewNote( journal ); + mManager->save(); + + KNotesIconViewItem *note = mNoteList[ journal->uid() ]; + mNotesView->ensureItemVisible( note ); + mNotesView->setCurrentItem( note ); + + return journal->uid(); +} + +QString KNotesPart::newNoteFromClipboard( const QString& name ) +{ + const QString& text = KApplication::clipboard()->text(); + return newNote( name, text ); +} + +void KNotesPart::killNote( const QString& id ) +{ + killNote( id, false ); +} + +void KNotesPart::killNote( const QString& id, bool force ) +{ + KNotesIconViewItem *note = mNoteList[ id ]; + + if ( note && + ( (!force && KMessageBox::warningContinueCancelList( mNotesView, + i18n( "Do you really want to delete this note?" ), + mNoteList[ id ]->text(), i18n( "Confirm Delete" ), + KStdGuiItem::del() ) == KMessageBox::Continue) + || force ) + ) + { + mManager->deleteNote( mNoteList[id]->journal() ); + mManager->save(); + } +} + +QString KNotesPart::name( const QString& id ) const +{ + KNotesIconViewItem *note = mNoteList[ id ]; + if ( note ) + return note->text(); + else + return QString::null; +} + +QString KNotesPart::text( const QString& id ) const +{ + KNotesIconViewItem *note = mNoteList[id]; + if ( note ) + return note->journal()->description(); + else + return QString::null; +} + +void KNotesPart::setName( const QString& id, const QString& newName ) +{ + KNotesIconViewItem *note = mNoteList[ id ]; + if ( note ) { + note->setText( newName ); + mManager->save(); + } +} + +void KNotesPart::setText( const QString& id, const QString& newText ) +{ + KNotesIconViewItem *note = mNoteList[ id ]; + if ( note ) { + note->journal()->setDescription( newText ); + mManager->save(); + } +} + +QMap<QString, QString> KNotesPart::notes() const +{ + QMap<QString, QString> notes; + QDictIterator<KNotesIconViewItem> it( mNoteList ); + + for ( ; it.current(); ++it ) + notes.insert( (*it)->journal()->uid(), (*it)->journal()->summary() ); + + return notes; +} + + +// private stuff + +void KNotesPart::killSelectedNotes() +{ + QPtrList<KNotesIconViewItem> items; + QStringList notes; + + KNotesIconViewItem *knivi; + for ( QIconViewItem *it = mNotesView->firstItem(); it; it = it->nextItem() ) { + if ( it->isSelected() ) { + knivi = static_cast<KNotesIconViewItem *>( it ); + items.append( knivi ); + notes.append( knivi->text() ); + } + } + + if ( items.isEmpty() ) + return; + + int ret = KMessageBox::warningContinueCancelList( mNotesView, + i18n( "Do you really want to delete this note?", + "Do you really want to delete these %n notes?", items.count() ), + notes, i18n( "Confirm Delete" ), + KStdGuiItem::del() ); + + if ( ret == KMessageBox::Continue ) { + QPtrListIterator<KNotesIconViewItem> kniviIt( items ); + while ( (knivi = *kniviIt) ) { + ++kniviIt; + mManager->deleteNote( knivi->journal() ); + } + + mManager->save(); + } +} + +void KNotesPart::popupRMB( QIconViewItem *item, const QPoint& pos ) +{ + QPopupMenu *contextMenu = NULL; + + if ( item ) + contextMenu = static_cast<QPopupMenu *>( factory()->container( "note_context", this ) ); + else + contextMenu = static_cast<QPopupMenu *>( factory()->container( "notepart_context", this ) ); + + if ( !contextMenu ) + return; + + contextMenu->popup( pos ); +} + +void KNotesPart::slotOnItem( QIconViewItem *i ) +{ + // TODO: disable (i.e. setNote( QString::null )) when mouse button pressed + + KNotesIconViewItem *item = static_cast<KNotesIconViewItem *>( i ); + mNoteTip->setNote( item ); +} + +void KNotesPart::slotOnViewport() +{ + mNoteTip->setNote( 0 ); +} + +// TODO: also with takeItem, clear(), + +// create and kill the icon view item corresponding to the note, edit the note + +void KNotesPart::createNote( KCal::Journal *journal ) +{ + // make sure all fields are existent, initialize them with default values + QString property = journal->customProperty( "KNotes", "BgColor" ); + if ( property.isNull() ) + journal->setCustomProperty( "KNotes", "BgColor", "#ffff00" ); + + property = journal->customProperty( "KNotes", "FgColor" ); + if ( property.isNull() ) + journal->setCustomProperty( "KNotes", "FgColor", "#000000" ); + + property = journal->customProperty( "KNotes", "RichText" ); + if ( property.isNull() ) + journal->setCustomProperty( "KNotes", "RichText", "true" ); + + mNoteList.insert( journal->uid(), new KNotesIconViewItem( mNotesView, journal ) ); +} + +void KNotesPart::killNote( KCal::Journal *journal ) +{ + mNoteList.remove( journal->uid() ); +} + +void KNotesPart::editNote( QIconViewItem *item ) +{ + if ( !mNoteEditDlg ) + mNoteEditDlg = new KNoteEditDlg( widget() ); + + KCal::Journal *journal = static_cast<KNotesIconViewItem *>( item )->journal(); + + mNoteEditDlg->setRichText( journal->customProperty( "KNotes", "RichText" ) == "true" ); + mNoteEditDlg->setTitle( journal->summary() ); + mNoteEditDlg->setText( journal->description() ); + + if ( mNoteEditDlg->exec() == QDialog::Accepted ) { + item->setText( mNoteEditDlg->title() ); + journal->setDescription( mNoteEditDlg->text() ); + mManager->save(); + } +} + +void KNotesPart::renameNote() +{ + mNotesView->currentItem()->rename(); +} + +void KNotesPart::renamedNote( QIconViewItem* ) +{ + mManager->save(); +} + +void KNotesPart::slotOnCurrentChanged( QIconViewItem* ) +{ + KAction *renameAction = actionCollection()->action( "edit_rename" ); + KAction *deleteAction = actionCollection()->action( "edit_delete" ); + + if ( !mNotesView->currentItem() ) { + renameAction->setEnabled( false ); + deleteAction->setEnabled( false ); + } else { + renameAction->setEnabled( true ); + deleteAction->setEnabled( true ); + } +} + +#include "knotes_part.moc" +#include "knotes_part_p.moc" + |