[prev in list] [next in list] [prev in thread] [next in thread]
List: ktexteditor-devel
Subject: Re: Patch for moving LoadSaveFilterCheck in KTextEditor
From: Cyrille Berger <cberger () cberger ! net>
Date: 2008-03-28 12:37:17
Message-ID: 200803281337.18056.cberger () cberger ! net
[Download RAW message or body]
Hi,
Here is an updated version of the patch after discussing the previous version
with Dominik Haumann: now there is a plugin interface :
KTextEditor::PluginFilterExtension* , plugins should implement that, then
katepart check if the plugin inherits it, and made it available for use in
document.
--
Cyrille Berger
["texteditor-loadsavefiltercheck.2.diff" (text/x-diff)]
Index: interfaces/ktexteditor/CMakeLists.txt
===================================================================
--- interfaces/ktexteditor/CMakeLists.txt (revision 790219)
+++ interfaces/ktexteditor/CMakeLists.txt (working copy)
@@ -59,6 +59,7 @@
codecompletionmodel.h
configinterface.h
containerinterface.h
+ pluginfilterextension.h
DESTINATION ${INCLUDE_INSTALL_DIR}/ktexteditor COMPONENT Devel)
install( FILES ktexteditor.desktop ktexteditorplugin.desktop DESTINATION \
${SERVICETYPES_INSTALL_DIR} )
Index: interfaces/ktexteditor/pluginfilterextension.h
===================================================================
--- interfaces/ktexteditor/pluginfilterextension.h (revision 0)
+++ interfaces/ktexteditor/pluginfilterextension.h (revision 0)
@@ -0,0 +1,66 @@
+/* This file is part of the KDE libraries
+ Copyright (C) 2001-2004 Christoph Cullmann <cullmann@kde.org>
+ Copyright (C) 2001 Joseph Wenninger <jowenn@kde.org>
+ Copyright (C) 1999 Jochen Wilhelmy <digisnap@cs.tu-berlin.de>
+ Copyright (C) 2006 Hamish Rodda <rodda@kde.org>
+ Copyright (C) 2007 Mirko Stocker <me@misto.ch>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ 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 02111-13020, USA.
+*/
+
+#ifndef _PLUGINFILTEREXTENSION_H_
+#define _PLUGINFILTEREXTENSION_H_
+
+#include <QList>
+#include <QString>
+#include <ktexteditor/ktexteditor_export.h>
+
+namespace KTextEditor {
+ class Document;
+ /**
+ * This plugin allows to filter a file after loading and before saving.
+ * For instance, this can be used either for applying a transformation
+ * to a file or either that it validates or to save into a distributed
+ * version control system.
+ */
+ class KTEXTEDITOR_EXPORT PluginFilterExtension {
+ public:
+ PluginFilterExtension() {}
+ virtual ~PluginFilterExtension(){}
+ /**
+ * This one should be called once everything is set up for
+ * saving (especially the encoding has been determind
+ * (example: used for checking python source encoding headers))
+ */
+ virtual bool preSaveFilter(KTextEditor::Document *document) const =0;
+ /**
+ * this one should be called once the document has been completely
+ * loaded and configured (encoding,highlighting, ...))
+ */
+ virtual void postLoadFilter(KTextEditor::Document *document) const =0;
+ /**
+ * @return the list of mime type that are supported by this filter,
+ * or empty if it apply for all mime types
+ */
+ virtual QList<QString> mimeType() const = 0;
+ /**
+ * @return a wildcard for files supported by this filter.
+ */
+ virtual QString wildCard() const =0;
+ };
+
+}
+
+#endif
Index: kate/utils/katepartpluginmanager.cpp
===================================================================
--- kate/utils/katepartpluginmanager.cpp (revision 790219)
+++ kate/utils/katepartpluginmanager.cpp (working copy)
@@ -24,6 +24,7 @@
#include "kateglobal.h"
+#include <ktexteditor/pluginfilterextension.h>
#include <ktexteditor/plugin.h>
#include <ktexteditor/document.h>
#include <ktexteditor/view.h>
@@ -187,6 +188,11 @@
item.plugin = KTextEditor::createPlugin (item.service, this);
Q_ASSERT(item.plugin);
item.load = (item.plugin != 0);
+ KTextEditor::PluginFilterExtension* pluginFilterExtension = \
dynamic_cast<KTextEditor::PluginFilterExtension*>(item.plugin); + if( \
pluginFilterExtension ) + {
+ m_filtersExtension[ item.saveName() ] = pluginFilterExtension;
+ }
}
void KatePartPluginManager::unloadPlugin (KatePartPluginInfo &item)
@@ -250,4 +256,9 @@
}
}
+const KTextEditor::PluginFilterExtension* \
KatePartPluginManager::filterExtension(const QString& name) +{
+ return m_filtersExtension.value( name );
+}
+
// kate: space-indent on; indent-width 2; replace-tabs on;
Index: kate/utils/katepartpluginmanager.h
===================================================================
--- kate/utils/katepartpluginmanager.h (revision 790219)
+++ kate/utils/katepartpluginmanager.h (working copy)
@@ -31,6 +31,7 @@
namespace KTextEditor {
class Plugin;
+ class PluginFilterExtension;
class Document;
class View;
}
@@ -78,12 +79,15 @@
{
return m_pluginList;
}
+
+ const KTextEditor::PluginFilterExtension* filterExtension(const QString& name);
private:
void setupPluginList ();
KConfig *m_config;
KatePartPluginList m_pluginList;
+ QMap<QString, KTextEditor::PluginFilterExtension*> m_filtersExtension;
};
#endif // KATEPLUGINMANAGER_H
Index: kate/document/katedocument.cpp
===================================================================
--- kate/document/katedocument.cpp (revision 790219)
+++ kate/document/katedocument.cpp (working copy)
@@ -21,6 +21,7 @@
*/
//BEGIN includes
+#include <ktexteditor/pluginfilterextension.h>
#include "katedocument.h"
#include "katedocument.moc"
#include "katekeyinterceptorfunctor.h"
@@ -105,19 +106,7 @@
static int dummy = 0;
-#ifdef __GNUC__
-#warning consider moving this to KTextEditor
-#endif
-class LoadSaveFilterCheckPlugin {
- public:
- LoadSaveFilterCheckPlugin() {}
- virtual ~LoadSaveFilterCheckPlugin(){}
- /*this one should be called once everything is set up for saving (especially the \
encoding has been determind (example: used for checking python source encoding \
headers))*/
- virtual bool preSavePostDialogFilterCheck(KTextEditor::Document *document) =0;
- /*this one should be called once the document has been completely loaded and \
configured (encoding,highlighting, ...))*/
- virtual void postLoadFilter(KTextEditor::Document *document) =0;
-};
-
+#if 0
class KatePythonEncodingCheck: public LoadSaveFilterCheckPlugin {
public:
KatePythonEncodingCheck():LoadSaveFilterCheckPlugin(){interpreterLine=QRegExp(QString("#!.*$"));}
@@ -176,42 +165,8 @@
QRegExp interpreterLine;
};
-class KateDocument::LoadSaveFilterCheckPlugins
-{
- public:
- LoadSaveFilterCheckPlugins() { m_plugins["python-encoding"]=new \
KatePythonEncodingCheck();}
- ~LoadSaveFilterCheckPlugins() {
- QHashIterator<QString,LoadSaveFilterCheckPlugin*>i(m_plugins);
- while (i.hasNext())
- i.next();
- delete i.value();
- m_plugins.clear();
- }
- bool preSavePostDialogFilterCheck(const QString& pluginName,KateDocument \
*document) {
- LoadSaveFilterCheckPlugin *plug=getPlugin(pluginName);
- if (!plug) return false;
- return plug->preSavePostDialogFilterCheck(document);
- }
- void postLoadFilter(const QString& pluginName,KateDocument *document) {
- LoadSaveFilterCheckPlugin *plug=getPlugin(pluginName);
- if (!plug) return;
- plug->postLoadFilter(document);
- }
- private:
- LoadSaveFilterCheckPlugin *getPlugin(const QString & pluginName)
- {
- if (!m_plugins.contains(pluginName))
- {
-#ifdef __GNUC__
-#warning implement dynamic loading here
#endif
- }
- if (!m_plugins.contains(pluginName)) return 0;
- return m_plugins[pluginName];
- }
- QHash <QString,LoadSaveFilterCheckPlugin*> m_plugins;
-};
-
+
//BEGIN d'tor, c'tor
//
// KateDocument Constructor
@@ -3416,10 +3371,13 @@
if (!m_postLoadFilterChecks.isEmpty())
{
- LoadSaveFilterCheckPlugins *lscps=loadSaveFilterCheckPlugins();
foreach(const QString& checkplugin, m_postLoadFilterChecks)
{
- lscps->postLoadFilter(checkplugin,this);
+ const KTextEditor::PluginFilterExtension* extension = \
KatePartPluginManager::self()->filterExtension( checkplugin ); + if( extension \
) + {
+ extension->postLoadFilter(this);
+ }
}
}
}
@@ -3629,10 +3587,10 @@
if (!m_preSavePostDialogFilterChecks.isEmpty())
{
- LoadSaveFilterCheckPlugins *lscps=loadSaveFilterCheckPlugins();
foreach(const QString& checkplugin, m_preSavePostDialogFilterChecks)
{
- if (lscps->preSavePostDialogFilterCheck(checkplugin,this)==false)
+ const KTextEditor::PluginFilterExtension* extension = \
KatePartPluginManager::self()->filterExtension( checkplugin ); + if (extension \
&& extension->preSaveFilter(this)==false) return false;
}
}
@@ -6285,18 +6243,10 @@
return smartLocked;
}
-
-KateDocument::LoadSaveFilterCheckPlugins* KateDocument::loadSaveFilterCheckPlugins()
-{
- K_GLOBAL_STATIC(KateDocument::LoadSaveFilterCheckPlugins, \
s_loadSaveFilterCheckPlugins)
- return s_loadSaveFilterCheckPlugins;
-}
-
-
-
// Kill our helpers again
#ifdef FAST_DEBUG_ENABLE
# undef FAST_DEBUG_ENABLE
#endif
#undef FAST_DEBUG
+// kate: space-indent on; indent-width 2; replace-tabs on;
Index: kate/document/katedocument.h
===================================================================
--- kate/document/katedocument.h (revision 790219)
+++ kate/document/katedocument.h (working copy)
@@ -1126,17 +1126,13 @@
protected Q_SLOTS:
void testTemplateCode();
void dumpRegionTree();
- public:
- class LoadSaveFilterCheckPlugins;
private:
void setPreSavePostDialogFilterChecks(QStringList plugins) \
{m_preSavePostDialogFilterChecks=plugins;} QStringList \
m_preSavePostDialogFilterChecks;
void setPostLoadFilterChecks(QStringList plugins) \
{m_postLoadFilterChecks=plugins;} QStringList m_postLoadFilterChecks;
- static LoadSaveFilterCheckPlugins* loadSaveFilterCheckPlugins();
};
#endif
// kate: space-indent on; indent-width 2; replace-tabs on;
-
_______________________________________________
KTextEditor-Devel mailing list
KTextEditor-Devel@kde.org
https://mail.kde.org/mailman/listinfo/ktexteditor-devel
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic