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

kmail

  • sources
  • kde-4.12
  • kdepim
  • kmail
  • tag
tagselectdialog.cpp
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2011, 2012, 2013 Montel Laurent <montel@kde.org>
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; version 2 of the License
7  *
8  * This program is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11  * GNU General Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public License
14  * along with this program; if not, write to the Free Software
15  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
16  *
17  * In addition, as a special exception, the copyright holders give
18  * permission to link the code of this program with any edition of
19  * the Qt library by Trolltech AS, Norway (or with modified versions
20  * of Qt that use the same license as Qt), and distribute linked
21  * combinations including the two. You must obey the GNU General
22  * Public License in all respects for all of the code used other than
23  * Qt. If you modify this file, you may extend this exception to
24  * your version of the file, but you are not obligated to do so. If
25  * you do not wish to do so, delete this exception statement from
26  * your version.
27  */
28 
29 #include "tagselectdialog.h"
30 #include "tag.h"
31 #include "kmkernel.h"
32 
33 #include <mailcommon/tag/addtagdialog.h>
34 
35 #include <KListWidgetSearchLine>
36 
37 #include <Nepomuk2/Resource>
38 #include <Nepomuk2/ResourceManager>
39 #include <Nepomuk2/Tag>
40 #include <QGridLayout>
41 #include <QListWidget>
42 #include <akonadi/item.h>
43 
44 using namespace KMail;
45 
46 TagSelectDialog::TagSelectDialog( QWidget * parent, int numberOfSelectedMessages, const Akonadi::Item &selectedItem)
47  : KDialog( parent ),
48  mNumberOfSelectedMessages(numberOfSelectedMessages),
49  mSelectedItem(selectedItem)
50 {
51  setCaption( i18n( "Select Tags" ) );
52  setButtons( User1|Ok|Cancel );
53  setButtonText(User1, i18n("Add new tag..."));
54  setDefaultButton( Ok );
55  setModal( true );
56 
57  QWidget *mainWidget = new QWidget( this );
58  QGridLayout *mainLayout = new QGridLayout( mainWidget );
59  mainLayout->setSpacing( KDialog::spacingHint() );
60  mainLayout->setMargin( KDialog::marginHint() );
61  setMainWidget( mainWidget );
62 
63  mListTag = new QListWidget( this );
64  KListWidgetSearchLine *listWidgetSearchLine = new KListWidgetSearchLine(this,mListTag);
65  listWidgetSearchLine->setClickMessage(i18n("Search tag"));
66  listWidgetSearchLine->setClearButtonShown(true);
67 
68  mainLayout->addWidget(listWidgetSearchLine);
69  mainLayout->addWidget( mListTag );
70 
71  createTagList();
72  connect(this, SIGNAL(user1Clicked()), SLOT(slotAddNewTag()));
73 
74  KConfigGroup group( KMKernel::self()->config(), "TagSelectDialog" );
75  const QSize size = group.readEntry( "Size", QSize(500, 300) );
76  if ( size.isValid() ) {
77  resize( size );
78  }
79 }
80 
81 TagSelectDialog::~TagSelectDialog()
82 {
83  KConfigGroup group( KMKernel::self()->config(), "TagSelectDialog" );
84  group.writeEntry( "Size", size() );
85 }
86 
87 void TagSelectDialog::slotAddNewTag()
88 {
89  QPointer<MailCommon::AddTagDialog> dialog = new MailCommon::AddTagDialog(QList<KActionCollection*>(), this);
90  dialog->setTags(mTagList);
91  if ( dialog->exec() ) {
92  mListTag->clear();
93  mTagList.clear();
94  createTagList();
95  }
96  delete dialog;
97 }
98 
99 void TagSelectDialog::createTagList()
100 {
101  foreach( const Nepomuk2::Tag &nepomukTag, Nepomuk2::Tag::allTags() ) {
102  mTagList.append( MailCommon::Tag::fromNepomuk( nepomukTag ) );
103  }
104  qSort( mTagList.begin(), mTagList.end(), MailCommon::Tag::compare );
105 
106  Nepomuk2::Resource itemResource( mSelectedItem.url() );
107 
108  foreach( const MailCommon::Tag::Ptr &tag, mTagList ) {
109  if(tag->tagStatus)
110  continue;
111  QListWidgetItem *item = new QListWidgetItem(KIcon(tag->iconName), tag->tagName, mListTag );
112  item->setData(UrlTag, tag->nepomukResourceUri.toString());
113  item->setFlags( Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsSelectable );
114  item->setCheckState( Qt::Unchecked );
115  mListTag->addItem( item );
116 
117  if ( mNumberOfSelectedMessages == 1 ) {
118  const bool hasTag = itemResource.tags().contains( Nepomuk2::Tag( tag->tagName ) );
119  item->setCheckState( hasTag ? Qt::Checked : Qt::Unchecked );
120  } else {
121  item->setCheckState( Qt::Unchecked );
122  }
123  }
124 
125 }
126 
127 QList<QString> TagSelectDialog::selectedTag() const
128 {
129  QList<QString> lst;
130  const int numberOfItems( mListTag->count() );
131  for ( int i = 0; i< numberOfItems;++i ) {
132  QListWidgetItem *item = mListTag->item( i );
133  if ( item->checkState() == Qt::Checked ) {
134  lst.append( item->data(UrlTag).toString() );
135  }
136  }
137  return lst;
138 }
139 
140 #include "tagselectdialog.moc"
QWidget
QListWidget
KDialog
KMKernel::self
static KMKernel * self()
normal control stuff
Definition: kmkernel.cpp:1451
tagselectdialog.h
QListWidgetItem
kmkernel.h
TagSelectDialog::~TagSelectDialog
~TagSelectDialog()
Definition: tagselectdialog.cpp:81
TagSelectDialog::TagSelectDialog
TagSelectDialog(QWidget *parent, int numberOfSelectedMessages, const Akonadi::Item &selectedItem)
Definition: tagselectdialog.cpp:46
QList
TagSelectDialog::selectedTag
QList< QString > selectedTag() const
Definition: tagselectdialog.cpp:127
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 22:58:52 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

kmail

Skip menu "kmail"
  • Main Page
  • Namespace List
  • Namespace Members
  • 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

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