00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef KDEV_DOC_PLUGIN_H
00020 #define KDEV_DOC_PLUGIN_H
00021
00022 #include <qmap.h>
00023 #include <qvaluelist.h>
00024 #include <qpair.h>
00025
00026 #include <klistbox.h>
00027 #include <klistview.h>
00028 #include <kurl.h>
00029 #include <kfile.h>
00030
00031 #define CACHE_VERSION "3"
00032
00033 class DocumentationItem: public KListViewItem
00034 {
00035 public:
00036 enum Type { Collection, Catalog, Book, Document };
00037
00038 DocumentationItem(Type type, KListView *parent, const QString &name);
00039 DocumentationItem(Type type, KListView *parent, KListViewItem *after, const QString &name);
00040 DocumentationItem(Type type, KListViewItem *parent, const QString &name);
00041 DocumentationItem(Type type, KListViewItem *parent, KListViewItem *after, const QString &name);
00042
00043 virtual void setURL(const KURL &url) { m_url = url; }
00044 virtual KURL url() const { return m_url; }
00045
00046 Type type() const { return m_type; }
00047
00048 private:
00049 void init();
00050
00051 KURL m_url;
00052 Type m_type;
00053 };
00054
00055 class DocumentationPlugin;
00056
00057 class DocumentationCatalogItem: public DocumentationItem
00058 {
00059 public:
00060 DocumentationCatalogItem(DocumentationPlugin* plugin, KListView *parent, const QString &name);
00061 DocumentationCatalogItem(DocumentationPlugin* plugin, DocumentationItem *parent, const QString &name);
00062 virtual ~DocumentationCatalogItem();
00063
00064 DocumentationPlugin* plugin() const { return m_plugin; }
00065
00066 virtual void setOpen(bool o);
00067 void load();
00068
00069 virtual bool isProjectDocumentationItem() const { return m_isProjectDocumentationItem; }
00070 virtual void setProjectDocumentationItem(bool b) { m_isProjectDocumentationItem = b; }
00071
00072 protected:
00073 virtual void activate();
00074
00075 private:
00076 DocumentationPlugin* m_plugin;
00077 bool isLoaded;
00078 bool isActivated;
00079 bool m_isProjectDocumentationItem;
00080 };
00081
00082 class IndexBox;
00083
00084 class IndexItemProto
00085 {
00086 public:
00087 IndexItemProto(DocumentationPlugin *plugin, DocumentationCatalogItem *catalog, IndexBox *listbox,
00088 const QString &text, const QString &description);
00089 ~IndexItemProto();
00090
00091 void addURL(const KURL &url) { m_url = url; }
00092 KURL url() const { return m_url; }
00093 QString text() const { return m_text; }
00094 QString description() const { return m_description; }
00095
00096 private:
00097 KURL m_url;
00098 IndexBox *m_listbox;
00099 QString m_text;
00100 QString m_description;
00101 };
00102
00103 class IndexItem: public QListBoxText {
00104 public:
00105 typedef QPair<QString, KURL> URL;
00106 typedef QValueList<URL> List;
00107
00108 IndexItem(IndexBox *listbox, const QString &text);
00109
00110 List urls() const;
00111
00112 private:
00113 IndexBox *m_listbox;
00114 };
00115
00116 class IndexBox: public KListBox{
00117 public:
00118 IndexBox(QWidget *parent = 0, const char *name = 0);
00119
00120 virtual void addIndexItem(IndexItemProto *item);
00121 virtual void removeIndexItem(IndexItemProto *item);
00122 virtual void fill();
00123 virtual void refill();
00124 virtual void setDirty(bool dirty);
00125
00126
00127 private:
00128 QMap<QString, QValueList<IndexItemProto*> > items;
00129 friend class IndexItem;
00130
00131 bool m_dirty;
00132 };
00133
00134 class QPainter;
00135 class QColorGroup;
00136 class QFontMetrics;
00137
00138 class ConfigurationItem: public QCheckListItem
00139 {
00140 public:
00141 ConfigurationItem(QListView *parent, const QString &title, const QString &url,
00142 bool indexPossible, bool fullTextSearchPossible);
00143
00144 virtual QString title() const { return m_title; }
00145 virtual void setTitle(const QString title) { setText(3, m_title = title); }
00146 virtual QString url() const { return m_url; }
00147 virtual void setURL(const QString url) { setText(4, m_url = url); }
00148
00149 virtual bool isChanged() const { return m_title == m_origTitle; }
00150 virtual QString origTitle() const {return m_origTitle; }
00151
00152 virtual void paintCell(QPainter *p, const QColorGroup &cg, int column, int width, int align);
00153 virtual int width(const QFontMetrics &fm, const QListView *lv, int c) const;
00154
00155 bool contents() const { return m_contents; }
00156 void setContents(bool contents) { m_contents = contents; }
00157 bool index() const { return m_index; }
00158 void setIndex(bool index) { m_index = index; }
00159 bool fullTextSearch() const { return m_fullTextSearch; }
00160 void setFullTextSearch(bool fullTextSearch) { m_fullTextSearch = fullTextSearch; }
00161
00162 bool indexPossible() const { return m_indexPossible; }
00163 bool fullTextSearchPossible() const { return m_fullTextSearchPossible; }
00164
00165 private:
00166 QString m_title;
00167 QString m_url;
00168 QString m_origTitle;
00169
00170 bool m_contents;
00171 bool m_index;
00172 bool m_fullTextSearch;
00173
00174 bool m_indexPossible;
00175 bool m_fullTextSearchPossible;
00176 };
00177
00178
00179 class ProjectDocumentationPlugin;
00180
00190 class DocumentationPlugin: public QObject
00191 {
00192 Q_OBJECT
00193 public:
00195 enum Capability { Index=1 ,
00196 FullTextSearch=2 ,
00197 CustomDocumentationTitles=4 ,
00198 ProjectDocumentation=8 ,
00199 ProjectUserManual=16 };
00201 enum ProjectDocType { APIDocs, UserManual };
00202
00209 DocumentationPlugin(KConfig *pluginConfig, QObject *parent =0, const char *name =0);
00210 virtual ~DocumentationPlugin();
00211
00213 virtual QString pluginName() const = 0;
00214
00216 virtual DocumentationCatalogItem *createCatalog(KListView *contents, const QString &title, const QString &url) = 0;
00217
00221 virtual void init(KListView *contents);
00228 virtual void reinit(KListView *contents, IndexBox *index, QStringList restrictions);
00232 virtual void autoSetup();
00234 virtual void autoSetupPlugin() = 0;
00235
00239 virtual bool catalogEnabled(const QString &name) const;
00241 virtual void setCatalogEnabled(const QString &name, bool e);
00242
00246 virtual bool needRefreshIndex(DocumentationCatalogItem *item) = 0;
00250 virtual bool indexEnabled(DocumentationCatalogItem *item) const;
00252 virtual void setIndexEnabled(DocumentationCatalogItem *item, bool e);
00257 virtual void createIndex(IndexBox *index, DocumentationCatalogItem *item) = 0;
00258
00262 virtual void createTOC(DocumentationCatalogItem *item) = 0;
00266 virtual void setCatalogURL(DocumentationCatalogItem *item) = 0;
00267 virtual QStringList fullTextSearchLocations() = 0;
00268
00270 virtual void loadCatalogConfiguration(KListView *configurationView);
00274 virtual void saveCatalogConfiguration(KListView *configurationView);
00276 virtual void addCatalogConfiguration(KListView *configurationView,
00277 const QString &title, const QString &url);
00279 virtual void editCatalogConfiguration(ConfigurationItem *configurationItem,
00280 const QString &title, const QString &url);
00282 virtual void deleteCatalogConfiguration(const ConfigurationItem *const configurationItem);
00283
00285 virtual QPair<KFile::Mode, QString> catalogLocatorProps() = 0;
00287 virtual QString catalogTitle(const QString &url) = 0;
00288
00290 virtual void reload();
00292 virtual void clear();
00293
00295 bool hasCapability(Capability cap) const { return m_capabilities & cap; }
00296
00299 void setDirtyIndex(bool dirty) { m_indexCreated = dirty; }
00300
00304 virtual void cacheIndex(DocumentationCatalogItem *item);
00308 virtual bool loadCachedIndex(IndexBox *index, DocumentationCatalogItem *item);
00309
00312 virtual ProjectDocumentationPlugin *projectDocumentationPlugin(ProjectDocType type) { return 0; }
00313
00314 public slots:
00318 virtual void createIndex(IndexBox *index);
00319
00320 protected:
00322 QValueList<DocumentationCatalogItem*> catalogs;
00324 QMap<QString, DocumentationCatalogItem*> namedCatalogs;
00326 QMap<DocumentationCatalogItem*, QValueList<IndexItemProto*> > indexes;
00327
00329 void setCapabilities(int caps) { m_capabilities = caps; }
00331 virtual void clearCatalogIndex(DocumentationCatalogItem *item);
00333 void loadIndex(IndexBox *index, DocumentationCatalogItem *item);
00334
00337 QStringList deletedConfigurationItems;
00338
00340 KConfig *config;
00341
00342 private:
00344 virtual void addCatalog(DocumentationCatalogItem *item);
00346 virtual void clearCatalog(DocumentationCatalogItem *item);
00347
00348 int m_capabilities;
00349 bool m_indexCreated;
00350
00351
00352 friend class IndexItemProto;
00353 friend class DocumentationCatalogItem;
00354 };
00355
00356
00362 class ProjectDocumentationPlugin: public QObject {
00363 Q_OBJECT
00364 public:
00365 ProjectDocumentationPlugin(DocumentationPlugin *docPlugin, DocumentationPlugin::ProjectDocType type);
00366 virtual ~ProjectDocumentationPlugin();
00367
00369 virtual void init(KListView *contents, IndexBox *index, const QString &url);
00371 virtual void deinit();
00372
00373 QString pluginName() const;
00374 QString catalogURL() const;
00375
00376 public slots:
00378 virtual void reinit();
00379
00380 protected:
00381 DocumentationPlugin *m_docPlugin;
00382 DocumentationCatalogItem *m_catalog;
00383
00384 private:
00385 DocumentationPlugin::ProjectDocType m_type;
00386
00387 class KDirWatch *m_watch;
00388 class KListView *m_contents;
00389 class IndexBox *m_index;
00390 QString m_url;
00391 };
00392
00393 #endif