00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
#include <qpopupmenu.h>
00023
#include <qclipboard.h>
00024
00025
#include <kapplication.h>
00026
#include <kdebug.h>
00027
#include <kaction.h>
00028
#include <kmessagebox.h>
00029
00030
#include <libkdepim/infoextension.h>
00031
#include <libkdepim/sidebarextension.h>
00032
00033
#include "knotes/resourcemanager.h"
00034
00035
#include "knotes_part.h"
00036
#include "knotes_part_p.h"
00037
#include "knotetip.h"
00038
00039
00040 KNotesPart::KNotesPart(
QObject *parent,
const char *name )
00041 : DCOPObject("KNotesIface"), KParts::ReadOnlyPart( parent, name ),
00042 m_notesView( new KIconView() ),
00043 m_noteTip( new KNoteTip( m_notesView ) ),
00044 m_noteEditDlg( 0 ),
00045 m_manager( new KNotesResourceManager() )
00046 {
00047 m_noteList.setAutoDelete(
true );
00048
00049 setInstance(
new KInstance(
"knotes" ) );
00050
00051
00052
new KAction( i18n(
"&New..."),
"knotes", CTRL+Key_N,
this, SLOT(newNote()),
00053 actionCollection(),
"file_new" );
00054
new KAction( i18n(
"Rename"),
"text",
this, SLOT(renameNote()),
00055 actionCollection(),
"edit_rename" );
00056
new KAction( i18n(
"Delete"),
"editdelete", 0,
this, SLOT(killSelectedNotes()),
00057 actionCollection(),
"edit_delete" );
00058
00059
00060
00061
00062
00063 m_notesView->setSelectionMode( QIconView::Extended );
00064 m_notesView->setItemsMovable(
false );
00065 m_notesView->setResizeMode( QIconView::Adjust );
00066
00067 connect( m_notesView, SIGNAL(executed(
QIconViewItem * )),
00068
this, SLOT(editNote(
QIconViewItem * )) );
00069 connect( m_notesView, SIGNAL(returnPressed(
QIconViewItem * )),
00070
this, SLOT(editNote(
QIconViewItem * )) );
00071 connect( m_notesView, SIGNAL(itemRenamed(
QIconViewItem * )),
00072
this, SLOT(renamedNote(
QIconViewItem * )) );
00073 connect( m_notesView, SIGNAL(contextMenuRequested(
QIconViewItem *,
const QPoint & )),
00074
this, SLOT(popupRMB(
QIconViewItem *,
const QPoint & )) );
00075 connect( m_notesView, SIGNAL(onItem(
QIconViewItem * )),
00076
this, SLOT(slotOnItem(
QIconViewItem * )) );
00077 connect( m_notesView, SIGNAL(onViewport()),
this, SLOT(slotOnViewport()) );
00078
00079
new KParts::SideBarExtension( m_notesView,
this,
"NotesSideBarExtension" );
00080
00081 setWidget( m_notesView );
00082 setXMLFile(
"knotes_part.rc" );
00083
00084
00085 connect( m_manager, SIGNAL(sigRegisteredNote( KCal::Journal * )),
00086
this, SLOT(createNote( KCal::Journal * )) );
00087 connect( m_manager, SIGNAL(sigDeregisteredNote( KCal::Journal * )),
00088
this, SLOT(killNote( KCal::Journal * )) );
00089
00090
00091 m_manager->load();
00092 }
00093
00094 KNotesPart::~KNotesPart()
00095 {
00096
delete m_noteTip;
00097
delete m_manager;
00098 }
00099
00100
bool KNotesPart::openFile()
00101 {
00102
return false;
00103 }
00104
00105
00106
00107
00108
QString KNotesPart::newNote(
const QString& name,
const QString& text )
00109 {
00110
00111 KCal::Journal *journal =
new KCal::Journal();
00112
00113
00114
if ( !name.isEmpty() )
00115 journal->setSummary( name );
00116
else
00117 journal->setSummary( KGlobal::locale()->formatDateTime( QDateTime::currentDateTime() ) );
00118
00119
00120 journal->setDescription( text );
00121
00122 m_manager->addNewNote( journal );
00123
00124 showNote( journal->uid() );
00125
00126 m_manager->save();
00127
00128
return journal->uid();
00129 }
00130
00131
QString KNotesPart::newNoteFromClipboard(
const QString& name )
00132 {
00133
const QString& text = KApplication::clipboard()->text();
00134
return newNote( name, text );
00135 }
00136
00137
void KNotesPart::showNote(
const QString&
id )
const
00138
{
00139 KNotesIconViewItem *note = m_noteList[
id];
00140
if ( !note )
00141
return;
00142
00143 m_notesView->ensureItemVisible( note );
00144 m_notesView->setCurrentItem( note );
00145 }
00146
00147
void KNotesPart::hideNote(
const QString& )
const
00148
{
00149
00150 }
00151
00152
void KNotesPart::killNote(
const QString&
id )
00153 {
00154 killNote(
id,
false );
00155 }
00156
00157
void KNotesPart::killNote(
const QString&
id,
bool force )
00158 {
00159 KNotesIconViewItem *note = m_noteList[
id];
00160
00161
if ( note && !force && KMessageBox::warningContinueCancelList( m_notesView,
00162 i18n(
"Do you really want to delete this note?" ),
00163 m_noteList[
id]->text(), i18n(
"Confirm Delete"),
00164 KGuiItem( i18n(
"Delete"),
"editdelete" ) ) == KMessageBox::Continue )
00165 {
00166 m_manager->deleteNote( m_noteList[
id]->journal() );
00167 m_manager->save();
00168 }
00169 }
00170
00171
QString KNotesPart::name(
const QString&
id )
const
00172
{
00173 KNotesIconViewItem *note = m_noteList[
id];
00174
if ( note )
00175
return note->text();
00176
else
00177
return QString::null;
00178 }
00179
00180
QString KNotesPart::text(
const QString&
id )
const
00181
{
00182 KNotesIconViewItem *note = m_noteList[
id];
00183
if ( note )
00184
return note->journal()->description();
00185
else
00186
return QString::null;
00187 }
00188
00189
void KNotesPart::setName(
const QString&
id,
const QString& newName )
00190 {
00191 KNotesIconViewItem *note = m_noteList[
id];
00192
if ( note )
00193 {
00194 note->setText( newName );
00195 m_manager->save();
00196 }
00197 }
00198
00199
void KNotesPart::setText(
const QString&
id,
const QString& newText )
00200 {
00201 KNotesIconViewItem *note = m_noteList[
id];
00202
if ( note )
00203 {
00204 note->journal()->setDescription( newText );
00205 m_manager->save();
00206 }
00207 }
00208
00209
QMap<QString, QString> KNotesPart::notes()
const
00210
{
00211
QMap<QString, QString> notes;
00212
QDictIterator<KNotesIconViewItem> it( m_noteList );
00213
00214
for ( ; it.current(); ++it )
00215 notes.insert( (*it)->journal()->uid(), (*it)->journal()->description() );
00216
00217
return notes;
00218 }
00219
00220
00221
00222
void KNotesPart::sync(
const QString& )
00223 {
00224 }
00225
00226
bool KNotesPart::isNew(
const QString&,
const QString& )
const
00227
{
00228
return true;
00229 }
00230
00231
bool KNotesPart::isModified(
const QString&,
const QString& )
const
00232
{
00233
return true;
00234 }
00235
00236
00237
00238
00239
void KNotesPart::killSelectedNotes()
00240 {
00241
QPtrList<KNotesIconViewItem> items;
00242
QStringList notes;
00243
00244 KNotesIconViewItem *knivi;
00245
for (
QIconViewItem *it = m_notesView->firstItem(); it; it = it->nextItem() )
00246 {
00247
if ( it->isSelected() )
00248 {
00249 knivi = static_cast<KNotesIconViewItem *>( it );
00250 items.append( knivi );
00251 notes.append( knivi->text() );
00252 }
00253 }
00254
00255
if ( items.isEmpty() )
00256
return;
00257
00258
00259
00260
00261
int ret = KMessageBox::warningContinueCancelList( m_notesView,
00262 i18n(
"Do you really want to delete this note?",
00263
"Do you really want to delete these %n notes?", items.count() ),
00264 notes, i18n(
"Confirm Delete"),
00265 KGuiItem( i18n(
"Delete"),
"editdelete" )
00266 );
00267
00268
if ( ret == KMessageBox::Continue )
00269 {
00270
QPtrListIterator<KNotesIconViewItem> kniviIt( items );
00271
while ( (knivi = *kniviIt) )
00272 {
00273 ++kniviIt;
00274 m_manager->deleteNote( knivi->journal() );
00275 }
00276 m_manager->save();
00277 }
00278
00279
00280 }
00281
00282
void KNotesPart::popupRMB(
QIconViewItem *item,
const QPoint& pos )
00283 {
00284
QPopupMenu *contextMenu = static_cast<QPopupMenu *>( factory()->container(
"note_context",
this ) );
00285
00286
if ( !contextMenu || !item )
00287
return;
00288
00289 contextMenu->popup( pos );
00290 }
00291
00292
void KNotesPart::slotOnItem(
QIconViewItem *i )
00293 {
00294
00295
00296 KNotesIconViewItem *item = static_cast<KNotesIconViewItem *>(i);
00297 m_noteTip->setNote( item, Qt::AutoText );
00298 }
00299
00300
void KNotesPart::slotOnViewport()
00301 {
00302 m_noteTip->setNote( 0 );
00303 }
00304
00305
00306
00307
00308
00309
void KNotesPart::createNote( KCal::Journal *journal )
00310 {
00311 m_noteList.insert( journal->uid(),
new KNotesIconViewItem( m_notesView, journal ) );
00312 }
00313
00314
void KNotesPart::killNote( KCal::Journal *journal )
00315 {
00316 m_noteList.remove( journal->uid() );
00317 }
00318
00319
void KNotesPart::editNote(
QIconViewItem *item )
00320 {
00321
if ( !m_noteEditDlg )
00322 m_noteEditDlg =
new KNoteEditDlg( widget() );
00323
00324 KCal::Journal *journal = static_cast<KNotesIconViewItem *>(item)->journal();
00325 m_noteEditDlg->setText( journal->description() );
00326
if ( m_noteEditDlg->exec() == QDialog::Accepted )
00327 journal->setDescription( m_noteEditDlg->text() );
00328
00329 m_manager->save();
00330 }
00331
00332
void KNotesPart::renameNote()
00333 {
00334 m_notesView->currentItem()->rename();
00335 }
00336
00337
void KNotesPart::renamedNote(
QIconViewItem * )
00338 {
00339 m_manager->save();
00340 }
00341
00342
#include "knotes_part.moc"
00343
#include "knotes_part_p.moc"