mirror of
https://bitbucket.org/smil3y/kde-playground.git
synced 2025-02-24 02:42:51 +00:00
139 lines
4.4 KiB
C++
139 lines
4.4 KiB
C++
/*
|
|
Copyright (c) 2008 Tobias Koenig <tokoe@kde.org>
|
|
|
|
This library is free software; you can redistribute it and/or modify it
|
|
under the terms of the GNU Library General Public License as published by
|
|
the Free Software Foundation; either version 2 of the License, or (at your
|
|
option) any later version.
|
|
|
|
This library 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 Library General Public
|
|
License for more details.
|
|
|
|
You should have received a copy of the GNU Library General Public License
|
|
along with this library; see the file COPYING.LIB. If not, write to the
|
|
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
02110-1301, USA.
|
|
*/
|
|
|
|
#ifndef AKONADI_COLLECTIONUTILS_P_H
|
|
#define AKONADI_COLLECTIONUTILS_P_H
|
|
|
|
#include <QtCore/QStringList>
|
|
#include <akonadi/entitydisplayattribute.h>
|
|
#include <akonadi/collectionstatistics.h>
|
|
#include <akonadi/item.h>
|
|
|
|
namespace Akonadi {
|
|
|
|
/**
|
|
* @internal
|
|
*/
|
|
namespace CollectionUtils
|
|
{
|
|
inline bool isVirtualParent(const Collection &collection)
|
|
{
|
|
return (collection.parentCollection() == Collection::root() && collection.isVirtual());
|
|
}
|
|
|
|
inline bool isReadOnly(const Collection &collection)
|
|
{
|
|
return !(collection.rights() &Collection::CanCreateItem);
|
|
}
|
|
|
|
inline bool isRoot(const Collection &collection)
|
|
{
|
|
return (collection == Collection::root());
|
|
}
|
|
|
|
inline bool isResource(const Collection &collection)
|
|
{
|
|
return (collection.parentCollection() == Collection::root());
|
|
}
|
|
|
|
inline bool isStructural(const Collection &collection)
|
|
{
|
|
return collection.contentMimeTypes().isEmpty();
|
|
}
|
|
|
|
inline bool isFolder(const Collection &collection)
|
|
{
|
|
return (!isRoot(collection) &&
|
|
!isResource(collection) &&
|
|
!isStructural(collection) &&
|
|
collection.resource() != QLatin1String("akonadi_search_resource") &&
|
|
collection.resource() != QLatin1String("akonadi_nepomuktag_resource"));
|
|
}
|
|
|
|
inline QString defaultIconName(const Collection &col)
|
|
{
|
|
if (CollectionUtils::isVirtualParent(col)) {
|
|
return QLatin1String("edit-find");
|
|
}
|
|
if (col.isVirtual()) {
|
|
return QLatin1String("document-preview");
|
|
}
|
|
if (CollectionUtils::isResource(col)) {
|
|
return QLatin1String("network-server");
|
|
}
|
|
if (CollectionUtils::isStructural(col)) {
|
|
return QLatin1String("folder-grey");
|
|
}
|
|
if (CollectionUtils::isReadOnly(col)) {
|
|
return QLatin1String("folder-grey");
|
|
}
|
|
|
|
const QStringList content = col.contentMimeTypes();
|
|
if ((content.size() == 1) ||
|
|
(content.size() == 2 && content.contains(Collection::mimeType()))) {
|
|
if (content.contains(QLatin1String("text/x-vcard")) ||
|
|
content.contains(QLatin1String("text/directory")) ||
|
|
content.contains(QLatin1String("text/vcard"))) {
|
|
return QLatin1String("x-office-address-book");
|
|
}
|
|
// TODO: add all other content types and/or fix their mimetypes
|
|
if (content.contains(QLatin1String("akonadi/event")) || content.contains(QLatin1String("text/ical"))) {
|
|
return QLatin1String("view-pim-calendar");
|
|
}
|
|
if (content.contains(QLatin1String("akonadi/task"))) {
|
|
return QLatin1String("view-pim-tasks");
|
|
}
|
|
} else if (content.isEmpty()) {
|
|
return QLatin1String("folder-grey");
|
|
}
|
|
return QLatin1String("folder");
|
|
}
|
|
inline QString displayIconName(const Collection &col)
|
|
{
|
|
QString iconName = defaultIconName(col);
|
|
if (col.hasAttribute<EntityDisplayAttribute>() &&
|
|
!col.attribute<EntityDisplayAttribute>()->iconName().isEmpty()) {
|
|
if (!col.attribute<EntityDisplayAttribute>()->activeIconName().isEmpty() && col.statistics().unreadCount() > 0) {
|
|
iconName = col.attribute<EntityDisplayAttribute>()->activeIconName();
|
|
} else {
|
|
iconName = col.attribute<EntityDisplayAttribute>()->iconName();
|
|
}
|
|
}
|
|
return iconName;
|
|
|
|
}
|
|
inline bool hasValidHierarchicalRID(const Collection &col)
|
|
{
|
|
if (col == Collection::root()) {
|
|
return true;
|
|
}
|
|
if (col.remoteId().isEmpty()) {
|
|
return false;
|
|
}
|
|
return hasValidHierarchicalRID(col.parentCollection());
|
|
}
|
|
inline bool hasValidHierarchicalRID(const Item &item)
|
|
{
|
|
return !item.remoteId().isEmpty() && hasValidHierarchicalRID(item.parentCollection());
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
#endif
|