You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

121 lines
4.1 KiB

/*
* Copyright (c) 2011 Montel Laurent <montel@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; version 2 of the License
*
* 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; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* In addition, as a special exception, the copyright holders give
* permission to link the code of this program with any edition of
* the Qt library by Trolltech AS, Norway (or with modified versions
* of Qt that use the same license as Qt), and distribute linked
* combinations including the two. You must obey the GNU General
* Public License in all respects for all of the code used other than
* Qt. If you modify this file, you may extend this exception to
* your version of the file, but you are not obligated to do so. If
* you do not wish to do so, delete this exception statement from
* your version.
*/
#include "tagselectdialog.h"
#include "tag.h"
#include "kmkernel.h"
#include <KListWidgetSearchLine>
#include <Nepomuk2/Resource>
#include <Nepomuk2/ResourceManager>
#include <Nepomuk2/Tag>
#include <QGridLayout>
#include <QListWidget>
#include <akonadi/item.h>
using namespace KMail;
TagSelectDialog::TagSelectDialog( QWidget * parent, int numberOfSelectedMessages, const Akonadi::Item &selectedItem)
: KDialog( parent )
{
setCaption( i18n( "Select Tags" ) );
setButtons( Ok|Cancel );
setDefaultButton( Ok );
setModal( true );
QWidget *mainWidget = new QWidget( this );
QGridLayout *mainLayout = new QGridLayout( mainWidget );
mainLayout->setSpacing( KDialog::spacingHint() );
mainLayout->setMargin( KDialog::marginHint() );
setMainWidget( mainWidget );
mListTag = new QListWidget( this );
KListWidgetSearchLine *listWidgetSearchLine = new KListWidgetSearchLine(this,mListTag);
listWidgetSearchLine->setClickMessage(i18n("Search tag"));
listWidgetSearchLine->setClearButtonShown(true);
mainLayout->addWidget(listWidgetSearchLine);
mainLayout->addWidget( mListTag );
QList<MailCommon::Tag::Ptr> tagList;
foreach( const Nepomuk2::Tag &nepomukTag, Nepomuk2::Tag::allTags() ) {
tagList.append( MailCommon::Tag::fromNepomuk( nepomukTag ) );
}
qSort( tagList.begin(), tagList.end(), MailCommon::Tag::compare );
Nepomuk2::Resource itemResource( selectedItem.url() );
foreach( const MailCommon::Tag::Ptr &tag, tagList ) {
if(tag->tagStatus)
continue;
QListWidgetItem *item = new QListWidgetItem(KIcon(tag->iconName), tag->tagName, mListTag );
item->setData(UrlTag, tag->nepomukResourceUri.toString());
item->setFlags( Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsSelectable );
item->setCheckState( Qt::Unchecked );
mListTag->addItem( item );
if ( numberOfSelectedMessages == 1 ) {
const bool hasTag = itemResource.tags().contains( Nepomuk2::Tag( tag->tagName ) );
item->setCheckState( hasTag ? Qt::Checked : Qt::Unchecked );
} else {
item->setCheckState( Qt::Unchecked );
}
}
KConfigGroup group( KMKernel::self()->config(), "TagSelectDialog" );
const QSize size = group.readEntry( "Size", QSize() );
if ( size.isValid() ) {
resize( size );
} else {
resize( 500, 300 );
}
}
TagSelectDialog::~TagSelectDialog()
{
KConfigGroup group( KMKernel::self()->config(), "TagSelectDialog" );
group.writeEntry( "Size", size() );
}
QList<QString> TagSelectDialog::selectedTag() const
{
QList<QString> lst;
const int numberOfItems( mListTag->count() );
for ( int i = 0; i< numberOfItems;++i ) {
QListWidgetItem *item = mListTag->item( i );
if ( item->checkState() == Qt::Checked ) {
lst.append( item->data(UrlTag).toString() );
}
}
return lst;
}
#include "tagselectdialog.moc"