• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdepim API Reference
  • KDE Home
  • Contact Us
 

kontact

  • sources
  • kde-4.14
  • kdepim
  • kontact
  • plugins
  • knotes
knotesiconview.cpp
Go to the documentation of this file.
1 /*
2  Copyright (c) 2013-2015 Montel Laurent <montel@kde.org>
3 
4  This program is free software; you can redistribute it and/or modify it
5  under the terms of the GNU General Public License, version 2, as
6  published by the Free Software Foundation.
7 
8  This program is distributed in the hope that it will be useful, but
9  WITHOUT ANY WARRANTY; without even the implied warranty of
10  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11  General Public License for more details.
12 
13  You should have received a copy of the GNU General Public License along
14  with this program; if not, write to the Free Software Foundation, Inc.,
15  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16 */
17 
18 #include "knotesiconview.h"
19 #include "noteshared/akonadi/notesakonaditreemodel.h"
20 #include "noteshared/attributes/notedisplayattribute.h"
21 #include "noteshared/attributes/notelockattribute.h"
22 #include "noteshared/noteutils.h"
23 #include "knotes/notes/knotedisplaysettings.h"
24 #include "utils/knoteutils.h"
25 
26 
27 #include <KLocalizedString>
28 
29 #include <Akonadi/ItemModifyJob>
30 
31 #include <KMime/KMimeMessage>
32 
33 #include <KIconEffect>
34 #include <KIconLoader>
35 
36 #include <QColor>
37 #include <QPixmap>
38 #include <QMouseEvent>
39 #include <QListWidgetItem>
40 #include <QDebug>
41 #include <QToolTip>
42 
43 //#define DEBUG_SAVE_NOTE 1
44 
45 KNotesIconView::KNotesIconView( KNotesPart *part, QWidget *parent )
46  : KListWidget(parent),
47  m_part(part)
48 {
49  setViewMode( QListView::IconMode );
50  setMovement( QListView::Static );
51  setResizeMode( QListView::Adjust );
52 
53  setSelectionMode( QAbstractItemView::ExtendedSelection );
54  setWordWrap( true );
55  setMouseTracking ( true );
56 }
57 
58 KNotesIconView::~KNotesIconView()
59 {
60 
61 }
62 
63 bool KNotesIconView::event(QEvent *e)
64 {
65  if( e->type() != QEvent::ToolTip )
66  return KListWidget::event( e );
67  QHelpEvent * he = static_cast< QHelpEvent * >( e );
68 
69  QPoint pnt = viewport()->mapFromGlobal( mapToGlobal( he->pos() ) );
70 
71  if ( pnt.y() < 0 )
72  return true;
73 
74  QListWidgetItem *item = itemAt( pnt );
75  if (item) {
76  KNotesIconViewItem *noteItem = static_cast<KNotesIconViewItem*>(item);
77  NoteShared::NoteUtils noteUtils;
78  const QString toolTip = noteUtils.createToolTip(noteItem->item());
79  QToolTip::showText( he->globalPos(), toolTip, viewport(), visualItemRect( item ) );
80  }
81  return true;
82 }
83 
84 void KNotesIconView::mousePressEvent( QMouseEvent *e )
85 {
86  if ( e->button() == Qt::RightButton ) {
87  QListView::mousePressEvent( e );
88  m_part->popupRMB( currentItem(), e->pos (), e->globalPos() );
89  } else {
90  QListView::mousePressEvent( e );
91  }
92 }
93 
94 void KNotesIconView::addNote(const Akonadi::Item &item)
95 {
96  KNotesIconViewItem *iconView = new KNotesIconViewItem(item, this);
97  mNoteList.insert(item.id(), iconView);
98 }
99 
100 KNotesIconViewItem *KNotesIconView::iconView(Akonadi::Item::Id id) const
101 {
102  if (mNoteList.contains(id)) {
103  return mNoteList.value(id);
104  }
105  return 0;
106 }
107 
108 QHash<Akonadi::Entity::Id, KNotesIconViewItem *> KNotesIconView::noteList() const
109 {
110  return mNoteList;
111 }
112 
113 KNotesIconViewItem::KNotesIconViewItem( const Akonadi::Item &item, QListWidget *parent )
114  : QListWidgetItem( parent ),
115  mItem(item),
116  mDisplayAttribute(new KNoteDisplaySettings),
117  mReadOnly(false)
118 {
119  if ( mItem.hasAttribute<NoteShared::NoteDisplayAttribute>()) {
120  mDisplayAttribute->setDisplayAttribute(mItem.attribute<NoteShared::NoteDisplayAttribute>());
121  } else {
122  setDisplayDefaultValue();
123  //save default display value
124  }
125  prepare();
126 }
127 
128 KNotesIconViewItem::~KNotesIconViewItem()
129 {
130  delete mDisplayAttribute;
131 }
132 
133 void KNotesIconViewItem::prepare()
134 {
135  const KMime::Message::Ptr noteMessage = mItem.payload<KMime::Message::Ptr>();
136  const KMime::Headers::Subject * const subject = noteMessage ? noteMessage->subject(false) : 0;
137  setText(subject ? subject->asUnicodeString() : QString());
138 
139  if ( mItem.hasAttribute<NoteShared::NoteLockAttribute>() ) {
140  mReadOnly = true;
141  } else {
142  mReadOnly = false;
143  }
144  updateSettings();
145 }
146 
147 bool KNotesIconViewItem::readOnly() const
148 {
149  return mReadOnly;
150 }
151 
152 void KNotesIconViewItem::setReadOnly(bool b, bool save)
153 {
154  mReadOnly = b;
155  if (mItem.hasAttribute<NoteShared::NoteLockAttribute>()) {
156  if (!mReadOnly) {
157  mItem.removeAttribute<NoteShared::NoteLockAttribute>();
158  }
159  } else {
160  if (mReadOnly) {
161  mItem.attribute<NoteShared::NoteLockAttribute>( Akonadi::Entity::AddIfMissing );
162  }
163  }
164  if (save) {
165  Akonadi::ItemModifyJob *job = new Akonadi::ItemModifyJob(mItem);
166 #ifdef DEBUG_SAVE_NOTE
167  qDebug()<<" KNotesIconViewItem::setReadOnly savenote";
168 #endif
169  connect( job, SIGNAL(result(KJob*)), SLOT(slotNoteSaved(KJob*)) );
170  }
171 }
172 
173 void KNotesIconViewItem::setDisplayDefaultValue()
174 {
175  KNoteUtils::setDefaultValue(mItem);
176  Akonadi::ItemModifyJob *job = new Akonadi::ItemModifyJob(mItem);
177  connect( job, SIGNAL(result(KJob*)), SLOT(slotNoteSaved(KJob*)) );
178 }
179 
180 void KNotesIconViewItem::slotNoteSaved(KJob *job)
181 {
182  qDebug()<<" void KNotesIconViewItem::slotNoteSaved(KJob *job)";
183  if ( job->error() ) {
184  qDebug()<<" problem during save note:"<<job->errorString();
185  }
186 }
187 
188 void KNotesIconViewItem::setChangeIconTextAndDescription( const QString &iconText, const QString &description, int position)
189 {
190  setIconText(iconText, false);
191  saveNoteContent(iconText, description, position);
192 }
193 
194 void KNotesIconViewItem::setIconText( const QString &text, bool save )
195 {
196  QString replaceText ;
197  if ( text.count() > 50 ) {
198  replaceText = text.left(50) + QLatin1String("...");
199  } else {
200  replaceText = text ;
201  }
202 
203  setText( replaceText );
204  if (save)
205  saveNoteContent(text);
206 }
207 
208 QString KNotesIconViewItem::realName() const
209 {
210  const KMime::Message::Ptr noteMessage = mItem.payload<KMime::Message::Ptr>();
211  const KMime::Headers::Subject * const subject = noteMessage ? noteMessage->subject(false) : 0;
212  return subject ? subject->asUnicodeString() : QString();
213 }
214 
215 int KNotesIconViewItem::tabSize() const
216 {
217  return mDisplayAttribute->tabSize();
218 }
219 
220 QColor KNotesIconViewItem::textBackgroundColor() const
221 {
222  return mDisplayAttribute->backgroundColor();
223 }
224 
225 QColor KNotesIconViewItem::textForegroundColor() const
226 {
227  return mDisplayAttribute->foregroundColor();
228 }
229 
230 bool KNotesIconViewItem::autoIndent() const
231 {
232  return mDisplayAttribute->autoIndent();
233 }
234 
235 QFont KNotesIconViewItem::textFont() const
236 {
237  return mDisplayAttribute->font();
238 }
239 
240 bool KNotesIconViewItem::isRichText() const
241 {
242  const KMime::Message::Ptr noteMessage = mItem.payload<KMime::Message::Ptr>();
243  return noteMessage->contentType()->isHTMLText();
244 }
245 
246 QString KNotesIconViewItem::description() const
247 {
248  const KMime::Message::Ptr noteMessage = mItem.payload<KMime::Message::Ptr>();
249  return QString::fromUtf8(noteMessage->mainBodyPart()->decodedContent());
250 }
251 
252 int KNotesIconViewItem::cursorPositionFromStart() const
253 {
254  int pos = 0;
255  const KMime::Message::Ptr noteMessage = mItem.payload<KMime::Message::Ptr>();
256  if ( noteMessage->headerByType( "X-Cursor-Position" ) ) {
257  pos = noteMessage->headerByType( "X-Cursor-Position" )->asUnicodeString().toInt();
258  }
259  return pos;
260 }
261 
262 
263 void KNotesIconViewItem::setDescription(const QString &description)
264 {
265  saveNoteContent(QString(), description);
266 }
267 
268 KNoteDisplaySettings *KNotesIconViewItem::displayAttribute() const
269 {
270  return mDisplayAttribute;
271 }
272 
273 Akonadi::Item KNotesIconViewItem::item()
274 {
275  return mItem;
276 }
277 
278 void KNotesIconViewItem::saveNoteContent(const QString &subject, const QString &description, int position)
279 {
280  KMime::Message::Ptr message = mItem.payload<KMime::Message::Ptr>();
281  const QByteArray encoding( "utf-8" );
282  if (!subject.isEmpty()) {
283  message->subject( true )->fromUnicodeString( subject, encoding );
284  }
285  message->contentType( true )->setMimeType( isRichText() ? "text/html" : "text/plain" );
286  message->contentType()->setCharset(encoding);
287  message->contentTransferEncoding(true)->setEncoding(KMime::Headers::CEquPr);
288  message->date( true )->setDateTime( KDateTime::currentLocalDateTime() );
289  if (!description.isEmpty()) {
290  message->mainBodyPart()->fromUnicodeString( description );
291  } else if (message->mainBodyPart()->decodedText().isEmpty()) {
292  message->mainBodyPart()->fromUnicodeString( QString::fromLatin1( " " ) );
293  }
294 
295  if (position >=0 ) {
296  KMime::Headers::Generic *header = new KMime::Headers::Generic( "X-Cursor-Position", message.get(), QString::number( position ), "utf-8" );
297  message->setHeader( header );
298  }
299 
300  message->assemble();
301 
302  mItem.setPayload( message );
303  Akonadi::ItemModifyJob *job = new Akonadi::ItemModifyJob(mItem);
304 #ifdef DEBUG_SAVE_NOTE
305  qDebug()<<" KNotesIconViewItem::saveNoteContent savenote";
306 #endif
307  connect( job, SIGNAL(result(KJob*)), SLOT(slotNoteSaved(KJob*)) );
308 }
309 
310 
311 void KNotesIconViewItem::setChangeItem(const Akonadi::Item &item, const QSet<QByteArray> & set)
312 {
313  mItem = item;
314  if ( item.hasAttribute<NoteShared::NoteDisplayAttribute>()) {
315  mDisplayAttribute->setDisplayAttribute(item.attribute<NoteShared::NoteDisplayAttribute>());
316  }
317  if (set.contains("ATR:KJotsLockAttribute")) {
318  setReadOnly(item.hasAttribute<NoteShared::NoteLockAttribute>(), false);
319  }
320  if (set.contains("PLD:RFC822")) {
321  const KMime::Message::Ptr noteMessage = item.payload<KMime::Message::Ptr>();
322  const KMime::Headers::Subject * const subject = noteMessage ? noteMessage->subject(false) : 0;
323  setIconText(subject ? subject->asUnicodeString() : QString(), false);
324  }
325  if (set.contains("ATR:NoteDisplayAttribute")) {
326  updateSettings();
327  }
328 
329 }
330 void KNotesIconViewItem::updateSettings()
331 {
332  KIconEffect effect;
333  const QColor color( mDisplayAttribute->backgroundColor() );
334  if (mDefaultPixmap.isNull())
335  mDefaultPixmap = KIconLoader::global()->loadIcon( QLatin1String("knotes"), KIconLoader::Desktop );
336  QPixmap icon = effect.apply( mDefaultPixmap, KIconEffect::Colorize, 1, color, false );
337  setFont(mDisplayAttribute->titleFont());
338  setIcon( icon );
339 }
340 
341 #include "moc_knotesiconview.cpp"
KNotesIconViewItem::autoIndent
bool autoIndent() const
Definition: knotesiconview.cpp:230
QEvent
QWidget
KNotesIconView::addNote
void addNote(const Akonadi::Item &item)
Definition: knotesiconview.cpp:94
KNotesIconView::mousePressEvent
void mousePressEvent(QMouseEvent *)
Definition: knotesiconview.cpp:84
QEvent::type
Type type() const
QHash::insert
iterator insert(const Key &key, const T &value)
KNotesIconViewItem::cursorPositionFromStart
int cursorPositionFromStart() const
Definition: knotesiconview.cpp:252
QByteArray
text
virtual QByteArray text(quint32 serialNumber) const =0
KNotesIconViewItem::textForegroundColor
QColor textForegroundColor() const
Definition: knotesiconview.cpp:225
QFont
QListWidgetItem
QHelpEvent::pos
const QPoint & pos() const
KNotesIconViewItem::~KNotesIconViewItem
~KNotesIconViewItem()
Definition: knotesiconview.cpp:128
QPoint
QMouseEvent
KNotesIconViewItem::textBackgroundColor
QColor textBackgroundColor() const
Definition: knotesiconview.cpp:220
KNotesIconViewItem::updateSettings
void updateSettings()
Definition: knotesiconview.cpp:330
QListWidget
QToolTip::showText
void showText(const QPoint &pos, const QString &text, QWidget *w)
KNotesIconViewItem::saveNoteContent
void saveNoteContent(const QString &subject=QString(), const QString &description=QString(), int position=-1)
Definition: knotesiconview.cpp:278
KNotesIconViewItem::KNotesIconViewItem
KNotesIconViewItem(const Akonadi::Item &item, QListWidget *parent)
Definition: knotesiconview.cpp:113
QPoint::y
int y() const
KNotesIconView::~KNotesIconView
~KNotesIconView()
Definition: knotesiconview.cpp:58
KNotesPart
Definition: knotes_part.h:54
KNotesIconView::iconView
KNotesIconViewItem * iconView(Akonadi::Item::Id id) const
Definition: knotesiconview.cpp:100
QString::number
QString number(int n, int base)
QMouseEvent::globalPos
const QPoint & globalPos() const
QString::fromUtf8
QString fromUtf8(const char *str, int size)
QHash
KNotesIconViewItem::isRichText
bool isRichText() const
Definition: knotesiconview.cpp:240
QHelpEvent::globalPos
const QPoint & globalPos() const
QMouseEvent::button
Qt::MouseButton button() const
QString::isEmpty
bool isEmpty() const
subject
QString subject() const
QSet
KNotesIconViewItem::setChangeIconTextAndDescription
void setChangeIconTextAndDescription(const QString &iconText, const QString &description, int position)
Definition: knotesiconview.cpp:188
KNotesIconViewItem::realName
QString realName() const
Definition: knotesiconview.cpp:208
QString
QColor
KNotesIconView::noteList
QHash< Akonadi::Item::Id, KNotesIconViewItem * > noteList() const
Definition: knotesiconview.cpp:108
QPixmap
QHash::value
const T value(const Key &key) const
KNotesIconViewItem::displayAttribute
KNoteDisplaySettings * displayAttribute() const
Definition: knotesiconview.cpp:268
QPixmap::isNull
bool isNull() const
QListWidgetItem::setIcon
void setIcon(const QIcon &icon)
KNotesIconViewItem::readOnly
bool readOnly() const
Definition: knotesiconview.cpp:147
QSet::contains
bool contains(const T &value) const
KNotesIconViewItem::setDescription
void setDescription(const QString &)
Definition: knotesiconview.cpp:263
KNotesIconViewItem::textFont
QFont textFont() const
Definition: knotesiconview.cpp:235
set
void set(quint32, const QString &, const QString &, const QString &, const QString &, time_t)
knotesiconview.h
QListWidgetItem::icon
QIcon icon() const
KNotesIconViewItem
Definition: knotesiconview.h:47
QLatin1String
QAbstractItemView::mousePressEvent
virtual void mousePressEvent(QMouseEvent *event)
QString::count
int count() const
KNotesPart::popupRMB
void popupRMB(QListWidgetItem *item, const QPoint &pos, const QPoint &globalPos)
Definition: knotes_part.cpp:492
KNotesIconViewItem::description
QString description() const
Definition: knotesiconview.cpp:246
KNotesIconViewItem::item
Akonadi::Item item()
Definition: knotesiconview.cpp:273
KNotesIconView::KNotesIconView
KNotesIconView(KNotesPart *part, QWidget *parent)
Definition: knotesiconview.cpp:45
QString::left
QString left(int n) const
description
static const char description[]
Definition: main.cpp:48
KNotesIconViewItem::setIconText
void setIconText(const QString &text, bool save=true)
Definition: knotesiconview.cpp:194
QString::fromLatin1
QString fromLatin1(const char *str, int size)
QHash::contains
bool contains(const Key &key) const
KNotesIconViewItem::setChangeItem
void setChangeItem(const Akonadi::Item &item, const QSet< QByteArray > &set)
Definition: knotesiconview.cpp:311
QMouseEvent::pos
const QPoint & pos() const
QObject::connect
bool connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
KNotesIconView::event
bool event(QEvent *e)
Definition: knotesiconview.cpp:63
QHelpEvent
KListWidget
KNotesIconViewItem::tabSize
int tabSize() const
Definition: knotesiconview.cpp:215
KJob
QListWidgetItem::setFont
void setFont(const QFont &font)
QListWidgetItem::text
QString text() const
QListWidgetItem::setText
void setText(const QString &text)
KNotesIconViewItem::setReadOnly
void setReadOnly(bool b, bool save=true)
Definition: knotesiconview.cpp:152
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:34:11 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

kontact

Skip menu "kontact"
  • Main Page
  • Namespace List
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members

kdepim API Reference

Skip menu "kdepim API Reference"
  • akonadi_next
  • akregator
  • blogilo
  • calendarsupport
  • console
  •   kabcclient
  •   konsolekalendar
  • kaddressbook
  • kalarm
  •   lib
  • kdgantt2
  • kjots
  • kleopatra
  • kmail
  • knode
  • knotes
  • kontact
  • korgac
  • korganizer
  • ktimetracker
  • libkdepim
  • libkleo
  • libkpgp
  • mailcommon
  • messagelist
  • messageviewer
  • pimprint

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal