00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
#include <qpopupmenu.h>
00021
00022
#include <kiconloader.h>
00023
#include <kiconview.h>
00024
#include <dcopclient.h>
00025
#include <kapplication.h>
00026
#include <kdebug.h>
00027
#include <klocale.h>
00028
#include <krun.h>
00029
#include <kstandarddirs.h>
00030
#include <kmessagebox.h>
00031
00032
#include "knotes_part.h"
00033
00034 class NotesItem :
public KIconViewItem
00035 {
00036
public:
00037
NotesItem(
KIconView * parent,
int id,
const QString&
text);
00038
00039 QString id()
const {
return QString::number(
_noteID ); }
00040 int noteID() {
return _noteID; };
00041
00042
private:
00043 int _noteID;
00044 };
00045
00046 NotesItem::NotesItem(
KIconView * parent,
int id,
const QString& text):
00047
KIconViewItem(parent,
text, DesktopIcon("knotes"))
00048 {
00049
_noteID =
id;
00050 setRenameEnabled(
true);
00051 }
00052
00053 KNotesPart::KNotesPart(
QObject *parent,
const char *name)
00054 : KParts::ReadOnlyPart(parent, name),
00055 m_iconView(new
KIconView), m_popupMenu(new
QPopupMenu)
00056 {
00057
00058
m_popupMenu->insertItem(BarIcon(
"editdelete"), i18n(
"Remove Note"),
00059
this, SLOT(
slotRemoveCurrentNote()));
00060
m_popupMenu->insertItem(BarIcon(
"editrename"), i18n(
"Rename Note"),
00061
this, SLOT(
slotRenameCurrentNote()));
00062
00063 connect(
m_iconView, SIGNAL(executed(
QIconViewItem*)),
00064
this, SLOT(
slotOpenNote(
QIconViewItem*)));
00065 connect(
m_iconView, SIGNAL(rightButtonClicked(
QIconViewItem*,
const QPoint&)),
00066
this, SLOT(
slotPopupRMB(
QIconViewItem*,
const QPoint&)));
00067 connect(
m_iconView, SIGNAL(itemRenamed(
QIconViewItem*,
const QString&)),
00068
this, SLOT(
slotNoteRenamed(
QIconViewItem*,
const QString&)));
00069
00070
initKNotes();
00071 setWidget(
m_iconView);
00072
00073
m_iconView->arrangeItemsInGrid();
00074
m_iconView->setItemsMovable(
false);
00075 }
00076
00077 void KNotesPart::initKNotes()
00078 {
00079
QString *error = 0;
00080
int started = KApplication::startServiceByDesktopName(
"knotes",
QString(), error);
00081
00082
if ( started > 0 )
00083 {
00084
if (error)
00085 KMessageBox::error(0L, *error, i18n(
"Error"));
00086
return;
00087 }
00088
00089
delete error;
00090
00091
m_iconView->clear();
00092
00093
NotesMap map;
00094 map =
fetchNotes();
00095 NotesMap::const_iterator it;
00096
for (it = map.begin(); it != map.end(); ++it )
00097 {
00098 (
void)
new NotesItem(
m_iconView, it.key(), it.data() );
00099 }
00100
00101 }
00102
00103 bool KNotesPart::openFile()
00104 {
00105
return false;
00106 }
00107
00108 NotesMap KNotesPart::fetchNotes()
00109 {
00110
QCString replyType;
00111
QByteArray data, replyData;
00112
QDataStream arg( data, IO_WriteOnly );
00113
if( kapp->dcopClient()->call(
"knotes",
"KNotesIface",
"notes()", data, replyType, replyData ) )
00114 {
00115
kdDebug() <<
"Reply Type: " << replyType <<
endl;
00116
QDataStream answer( replyData, IO_ReadOnly );
00117
NotesMap notes;
00118 answer >> notes;
00119
return notes;
00120 }
00121
else
00122
return NotesMap();
00123
00124 }
00125
00126 void KNotesPart::slotPopupRMB(
QIconViewItem *item,
const QPoint& pos)
00127 {
00128
if (!item)
00129
return;
00130
00131
m_popupMenu->popup(pos);
00132 }
00133
00134 void KNotesPart::slotRemoveCurrentNote()
00135 {
00136
QIconViewItem* item =
m_iconView->currentItem();
00137
00138
00139
if (!item)
00140
return;
00141
00142
int id = static_cast<NotesItem*>( item )->noteID();
00143
00144
QByteArray data;
00145
QDataStream arg( data, IO_WriteOnly );
00146 arg <<
id;
00147
if ( kapp->dcopClient()->send(
"knotes",
"KNotesIface",
"killNote(int)", data ) )
00148
kdDebug() <<
"Deleting Note!" <<
endl;
00149
00150
00151
initKNotes();
00152 }
00153
00154 void KNotesPart::slotRenameCurrentNote()
00155 {
00156
00157
if(
m_iconView->currentItem())
00158
m_iconView->currentItem()->rename();
00159 }
00160
00161
00162 void KNotesPart::slotNoteRenamed(
QIconViewItem *item,
const QString& text)
00163 {
00164
00165
if (!item)
00166
return;
00167
00168
int id = static_cast<NotesItem*>( item )->noteID();
00169
00170
QByteArray data;
00171
QDataStream arg( data, IO_WriteOnly );
00172 arg <<
id;
00173 arg <<
text;
00174
if ( kapp->dcopClient()->send(
"knotes",
"KNotesIface",
"setName(int, QString)", data ) )
00175
kdDebug() <<
"Rename Note!" <<
endl;
00176
00177
00178
initKNotes();
00179
00180
m_iconView->arrangeItemsInGrid();
00181 }
00182
00183 void KNotesPart::slotOpenNote(
QIconViewItem *item )
00184 {
00185
int id = static_cast<NotesItem*>( item )->noteID();
00186
00187
QByteArray data;
00188
QDataStream arg( data, IO_WriteOnly );
00189 arg <<
id;
00190
if ( kapp->dcopClient()->send(
"knotes",
"KNotesIface",
"showNote(int)", data ) )
00191
kdDebug() <<
"Opening Note!" <<
id <<
endl;
00192 }
00193
00194 void KNotesPart::slotNewNote()
00195 {
00196
kdDebug() <<
"slotNewNote called!" <<
endl;
00197
QByteArray data;
00198
QDataStream arg( data, IO_WriteOnly );
00199 arg << QString::null << QString::null;
00200
if ( !kapp->dcopClient()->send(
"knotes",
"KNotesIface",
"newNote(QString, QString)", data ) )
00201 KMessageBox::error(0, i18n(
"Unable to add a new note!"));
00202
00203
00204
initKNotes();
00205 }
00206
00207
00208
#include "knotes_part.moc"