~ubuntu-branches/debian/sid/kexi/sid

« back to all changes in this revision

Viewing changes to src/core/kexipartmanager.h

  • Committer: Package Import Robot
  • Author(s): Pino Toscano
  • Date: 2017-06-24 20:10:10 UTC
  • Revision ID: package-import@ubuntu.com-20170624201010-5lrzd5r2vwthwifp
Tags: upstream-3.0.1.1
Import upstream version 3.0.1.1

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* This file is part of the KDE project
 
2
   Copyright (C) 2003 Lucijan Busch <lucijan@kde.org>
 
3
   Copyright (C) 2003-2016 Jarosław Staniek <staniek@kde.org>
 
4
 
 
5
   This library is free software; you can redistribute it and/or
 
6
   modify it under the terms of the GNU Library General Public
 
7
   License as published by the Free Software Foundation; either
 
8
   version 2 of the License, or (at your option) any later version.
 
9
 
 
10
   This library is distributed in the hope that it will be useful,
 
11
   but WITHOUT ANY WARRANTY; without even the implied warranty of
 
12
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 
13
   Library General Public License for more details.
 
14
 
 
15
   You should have received a copy of the GNU Library General Public License
 
16
   along with this library; see the file COPYING.LIB.  If not, write to
 
17
   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 
18
 * Boston, MA 02110-1301, USA.
 
19
*/
 
20
 
 
21
#ifndef KEXIPARTMANAGER_H
 
22
#define KEXIPARTMANAGER_H
 
23
 
 
24
//! @todo KEXI3 #include "kexistaticpart.h"
 
25
#include "kexiinternalpart.h"
 
26
 
 
27
#include <KDbResult>
 
28
 
 
29
class KexiInternal;
 
30
 
 
31
namespace KexiPart
 
32
{
 
33
class Info;
 
34
class Part;
 
35
 
 
36
typedef QHash<QString, Info*> PartInfoDict;
 
37
typedef QHash<QString, Info*>::iterator PartInfoDictIterator;
 
38
typedef QList<Info*> PartInfoList;
 
39
typedef QList<Info*>::iterator PartInfoListIterator;
 
40
typedef QHash<QString, Part*> PartDict;
 
41
 
 
42
/**
 
43
 * @short KexiPart's manager: looks up and instantiates KexiPart-based plugins
 
44
 *
 
45
 * It creates instances only when needed.
 
46
 */
 
47
class KEXICORE_EXPORT Manager : public QObject, public KDbResultable
 
48
{
 
49
    Q_OBJECT
 
50
 
 
51
public:
 
52
    ~Manager();
 
53
 
 
54
    /**
 
55
     * \return a part object for specified plugin ID @a pluginId, e.g. "org.kexi-project.table"
 
56
     * @note For compatibility with Kexi <= 2, if a string without any dot is provided, "org.kexi-project."
 
57
     *       will be prepended to the ID.
 
58
     * Dynamically loads a plugin using KexiPart::Info if needed. Returns 0 if loading failed.
 
59
     */
 
60
    Part *partForPluginId(const QString& pluginId);
 
61
 
 
62
    /**
 
63
     * \return a part object for specified info. Dlopens a part using KexiPart::Info
 
64
     * if needed. Return 0 if loading failed.
 
65
     */
 
66
    Part *part(Info *info);
 
67
 
 
68
    /**
 
69
     * \return the info for a corresponding plugin ID, e.g. "org.kexi-project.table"
 
70
     * @note For compatibility with Kexi <= 2, if a string without any dot is provided, "org.kexi-project."
 
71
     *       will be prepended to the ID.
 
72
     */
 
73
    Info *infoForPluginId(const QString& pluginId);
 
74
 
 
75
    /**
 
76
     * @return a list of the available KexiParts-based plugins in a well-defined order
 
77
     * Can return 0 if no plugins have been found, what means the installation is broken.
 
78
     */
 
79
    PartInfoList* infoList();
 
80
 
 
81
Q_SIGNALS:
 
82
    void partLoaded(KexiPart::Part*);
 
83
    void newObjectRequested(KexiPart::Info *info);
 
84
 
 
85
protected:
 
86
    //! Used by StaticPart
 
87
    //! @todo KEXI3 void insertStaticPart(KexiPart::StaticPart* part);
 
88
 
 
89
    //! Used by KexiInternalPart
 
90
    KexiInternalPart* internalPartForPluginId(const QString& pluginId);
 
91
 
 
92
private:
 
93
    /**
 
94
     * creates an empty instance
 
95
     */
 
96
    explicit Manager(QObject *parent = 0);
 
97
 
 
98
    /**
 
99
     * Queries the plugin system and creates a list of available parts.
 
100
     * @return false if required servicetype was not found (what means the installation is broken).
 
101
     */
 
102
    //! @todo Allow refreshing!!!! (will need calling removeClient() by Part objects)
 
103
    //! @todo This method generates a few warnings, maybe we want to optionally display them somewhere (via the message handler)?
 
104
    bool lookup();
 
105
 
 
106
    template <typename PartClass>
 
107
    PartClass* part(Info *info, QHash<QString, PartClass*> *partDict);
 
108
 
 
109
    Q_DISABLE_COPY(Manager)
 
110
 
 
111
    class Private;
 
112
    Private* const d;
 
113
 
 
114
    //! @todo KEXI3 friend KexiPart::StaticPart::StaticPart(const QString&, const QString&, const QString&);
 
115
    friend class ::KexiInternal;
 
116
    friend KexiInternalPart* KexiInternalPart::part(KDbMessageHandler*, const QString&);
 
117
};
 
118
 
 
119
}
 
120
 
 
121
#endif