/* This file is part of the KDE libraries and the Kate part. * * Copyright (C) 2001-2010 Christoph Cullmann * Copyright (C) 2009 Erlend Hamberg * * 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 __KATE_GLOBAL_H__ #define __KATE_GLOBAL_H__ #include "katepartinterfaces_export.h" #include #include #include #include #include #include #include #include #include #include class KateCmd; class KateModeManager; class KateSchemaManager; class KateGlobalConfig; class KateDocumentConfig; class KateViewConfig; class KateRendererConfig; class KateDocument; class KateRenderer; class KateView; class KDirWatch; class KateHlManager; class KatePartPluginManager; class KateSpellCheckManager; class KateViGlobal; class KateWordCompletionModel; class KateKeywordCompletionModel; namespace Kate { class Command; } Q_DECLARE_METATYPE(KSharedConfig::Ptr) /** * loader block size, load 256 kb at once per default * if file size is smaller, fall back to file size * must be a multiple of 2 */ static const qint64 KATE_FILE_LOADER_BS = QT_BUFFSIZE; /** * loader hash sum algorithm */ static const QCryptographicHash::Algorithm KATE_HASH_ALGORITHM = QCryptographicHash::KAT; /** * KateGlobal * One instance of this class is hold alive during * a kate part session, as long as any factory, document * or view stay around, here is the place to put things * which are needed and shared by all this objects ;) */ class KATEPARTINTERFACES_EXPORT KateGlobal : public KTextEditor::Editor, public KTextEditor::CommandInterface, public KTextEditor::ContainerInterface { Q_OBJECT Q_INTERFACES(KTextEditor::CommandInterface) Q_INTERFACES(KTextEditor::ContainerInterface) public: /** * property to tell the editor to use a given session config for session related * configuration instead of KGlobal::config(). * MUST be set directly after first creation of the editor as otherwise * some parts might not pick this up. */ Q_PROPERTY (KSharedConfig::Ptr sessionConfig READ sessionConfig WRITE setSessionConfig) /** * Get session config, defaults to KGlobal::config() * @return session config */ KSharedConfig::Ptr sessionConfig () { return m_sessionConfig; } /** * Set session config * @param sessionConfig new session config */ void setSessionConfig (KSharedConfig::Ptr sessionConfig) { m_sessionConfig = sessionConfig; } // for setDefaultEncoding friend class KateDocumentConfig; private: /** * Default constructor, private, as singleton */ KateGlobal (); public: /** * Destructor */ ~KateGlobal (); /** * Create a new document object * @param parent parent object * @return created KTextEditor::Document */ KTextEditor::Document *createDocument ( QObject *parent ); /** * Returns a list of all documents of this editor. * @return list of all existing documents */ const QList &documents (); /** * General Information about this editor */ public: /** * return the about data * @return about data of this editor part */ const KAboutData* aboutData() const { return &m_aboutData; } /** * Configuration management */ public: /** * Read editor configuration from given config object * @param config config object */ void readConfig (KConfig *config = 0); /** * Write editor configuration to given config object * @param config config object */ void writeConfig (KConfig *config = 0); /** * Does this editor support a config dialog * @return does this editor have a config dialog? */ bool configDialogSupported () const; /** * Shows a config dialog for the part, changes will be applied * to the editor, but not saved anywhere automagically, call * writeConfig to save them */ void configDialog (QWidget *parent); /** * Number of available config pages * If the editor returns a number < 1, it doesn't support this * and the embedding app should use the configDialog () instead * @return number of config pages */ int configPages () const; /** * returns config page with the given number, * config pages from 0 to configPages()-1 are available * if configPages() > 0 */ KTextEditor::ConfigPage *configPage (int number, QWidget *parent); QString configPageName (int number) const; QString configPageFullName (int number) const; KIcon configPageIcon (int number) const; /** * Kate Part Internal stuff ;) */ public: /** * singleton accessor * @return instance of the factory */ static KateGlobal *self (); /** * increment reference counter */ static void incRef () { ++s_ref; } /** * decrement reference counter */ static void decRef () { if (s_ref > 0) --s_ref; if (s_ref == 0) { delete s_self; s_self = 0L; } } /** * Returns the current version of Kate Part: KDE X.Y.Z contains Kate Part X-1.Y * @return version of type x.y, e.g. 3.2 */ static QString katePartVersion(); /** * public accessor to the instance * @return instance */ const KComponentData &componentData() { return m_componentData; } /** * register document at the factory * this allows us to loop over all docs for example on config changes * @param doc document to register */ void registerDocument ( KateDocument *doc ); /** * unregister document at the factory * @param doc document to register */ void deregisterDocument ( KateDocument *doc ); /** * register view at the factory * this allows us to loop over all views for example on config changes * @param view view to register */ void registerView ( KateView *view ); /** * unregister view at the factory * @param view view to unregister */ void deregisterView ( KateView *view ); /** * return a list of all registered docs * @return all known documents */ QList &kateDocuments () { return m_documents; } /** * return a list of all registered views * @return all known views */ QList &views () { return m_views; } /** * global plugin manager * @return kate part plugin manager */ KatePartPluginManager *pluginManager () { return m_pluginManager; } /** * global dirwatch * @return dirwatch instance */ KDirWatch *dirWatch () { return m_dirWatch; } /** * global mode manager * used to manage the modes centrally * @return mode manager */ KateModeManager *modeManager () { return m_modeManager; } /** * manager for the katepart schemas * @return schema manager */ KateSchemaManager *schemaManager () { return m_schemaManager; } /** * fallback document config * @return default config for all documents */ KateDocumentConfig *documentConfig () { return m_documentConfig; } /** * fallback view config * @return default config for all views */ KateViewConfig *viewConfig () { return m_viewConfig; } /** * fallback renderer config * @return default config for all renderers */ KateRendererConfig *rendererConfig () { return m_rendererConfig; } /** * hl manager * @return hl manager */ KateHlManager *hlManager () { return m_hlManager; } /** * command manager * @return command manager */ KateCmd *cmdManager () { return m_cmdManager; } /** * spell check manager * @return spell check manager */ KateSpellCheckManager *spellCheckManager () { return m_spellCheckManager; } /** * global instance of the simple word completion mode * @return global instance of the simple word completion mode */ KateWordCompletionModel *wordCompletionModel () { return m_wordCompletionModel; } /** * global instance of the language-aware keyword completion model * @return global instance of the keyword completion model */ KateKeywordCompletionModel *keywordCompletionModel () { return m_keywordCompletionModel; } /** * register given command * this works global, for all documents * @param cmd command to register * @return success */ bool registerCommand (KTextEditor::Command *cmd); /** * unregister given command * this works global, for all documents * @param cmd command to unregister * @return success */ bool unregisterCommand (KTextEditor::Command *cmd); /** * query for command * @param cmd name of command to query for * @return found command or 0 */ KTextEditor::Command *queryCommand (const QString &cmd) const; /** * Get a list of all registered commands. * \return list of all commands */ QList commands() const; /** * Get a list of available commandline strings. * \return commandline strings */ QStringList commandList() const; /** * Get the currently associated Container object * \return container object */ QObject * container(); /** * Set the associated container object */ void setContainer( QObject * container ); /** * Copy text to clipboard an remember it in the history * @param text text to copy to clipboard, does nothing if empty! */ void copyToClipboard (const QString &text); /** * Clipboard history, filled with text we ever copied * to clipboard via copyToClipboard. */ const QStringList &clipboardHistory () const { return m_clipboardHistory; } Q_SIGNALS: /** * Emitted if the history of clipboard changes via copyToClipboard */ void clipboardHistoryChanged (); private Q_SLOTS: void updateColorPalette(); private: /** * instance of this factory */ static KateGlobal *s_self; /** * reference counter */ static int s_ref; /** * about data (authors and more) */ KAboutData m_aboutData; /** * our kinstance */ KComponentData m_componentData; /** * registered docs */ QList m_documents; /** * registered views */ QList m_views; /** * global dirwatch object */ KDirWatch *m_dirWatch; /** * mode manager */ KateModeManager *m_modeManager; /** * schema manager */ KateSchemaManager *m_schemaManager; /** * at start found plugins */ KatePartPluginManager *m_pluginManager; /** * global config */ KateGlobalConfig *m_globalConfig; /** * fallback document config */ KateDocumentConfig *m_documentConfig; /** * fallback view config */ KateViewConfig *m_viewConfig; /** * fallback renderer config */ KateRendererConfig *m_rendererConfig; /** * internal commands */ QList m_cmds; /** * hl manager */ KateHlManager *m_hlManager; /** * command manager */ KateCmd *m_cmdManager; /** * spell check manager */ KateSpellCheckManager *m_spellCheckManager; QList m_docs; /** * container interface */ QPointer m_container; /** * global instance of the simple word completion mode */ KateWordCompletionModel *m_wordCompletionModel; /** * global instance of the language-specific keyword completion model */ KateKeywordCompletionModel *m_keywordCompletionModel; /** * session config */ KSharedConfig::Ptr m_sessionConfig; /** * clipboard history */ QStringList m_clipboardHistory; }; #endif // kate: space-indent on; indent-width 2; replace-tabs on;