1/*
2 Copyright (c) 2010 Tobias Koenig <tokoe@kde.org>
3
4 This library is free software; you can redistribute it and/or modify it
5 under the terms of the GNU Library General Public License as published by
6 the Free Software Foundation; either version 2 of the License, or (at your
7 option) any later version.
8
9 This library is distributed in the hope that it will be useful, but WITHOUT
10 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
12 License for more details.
13
14 You should have received a copy of the GNU Library General Public License
15 along with this library; see the file COPYING.LIB. If not, write to the
16 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
17 02110-1301, USA.
18*/
19
20#ifndef AKONADI_ACTIONSTATEMANAGER_P_H
21#define AKONADI_ACTIONSTATEMANAGER_P_H
22
23#include <akonadi/collection.h>
24#include <akonadi/item.h>
25
26class QObject;
27
28namespace Akonadi {
29
30/**
31 * @short A helper class to manage action states.
32 *
33 * @author Tobias Koenig <tokoe@kde.org>
34 */
35class ActionStateManager
36{
37public:
38 /**
39 * Creates a new action state manager.
40 */
41 ActionStateManager();
42
43 /**
44 * Destroys the action state manager.
45 */
46 virtual ~ActionStateManager();
47
48 /**
49 * Updates the states according to the selected @p collections and @p items.
50 */
51 void updateState(const Collection::List &collections, const Item::List &items);
52
53 /**
54 * Sets the @p receiver object that will actually update the states.
55 *
56 * The object must provide the following three slots:
57 * - void enableAction( int, bool )
58 * - void updatePluralLabel( int, int )
59 * - bool isFavoriteCollection( const Akonadi::Collection& )
60 * @param receiver object that will actually update the states.
61 */
62 void setReceiver(QObject *receiver);
63
64protected:
65 virtual bool isRootCollection(const Collection &collection) const;
66 virtual bool isResourceCollection(const Collection &collection) const;
67 virtual bool isFolderCollection(const Collection &collection) const;
68 virtual bool isSpecialCollection(const Collection &collection) const;
69 virtual bool isFavoriteCollection(const Collection &collection) const;
70 virtual bool hasResourceCapability(const Collection &collection, const QString &capability) const;
71 virtual bool collectionCanHaveItems(const Collection &collection) const;
72
73 virtual void enableAction(int action, bool state);
74 virtual void updatePluralLabel(int action, int count);
75 virtual void updateAlternatingAction(int action);
76
77private:
78 QObject *mReceiver;
79};
80
81}
82
83#endif
84