kate Library API Documentation

katefactory.cpp

00001 /* This file is part of the KDE libraries
00002    Copyright (C) 2001-2004 Christoph Cullmann <cullmann@kde.org>
00003 
00004    This library is free software; you can redistribute it and/or
00005    modify it under the terms of the GNU Library General Public
00006    License version 2 as published by the Free Software Foundation.
00007 
00008    This library is distributed in the hope that it will be useful,
00009    but WITHOUT ANY WARRANTY; without even the implied warranty of
00010    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00011    Library General Public License for more details.
00012 
00013    You should have received a copy of the GNU Library General Public License
00014    along with this library; see the file COPYING.LIB.  If not, write to
00015    the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
00016    Boston, MA 02111-1307, USA.
00017 */
00018 
00019 #include "katefactory.h"
00020 
00021 #include "katedocument.h"
00022 #include "kateview.h"
00023 #include "katerenderer.h"
00024 #include "katecmds.h"
00025 #include "katefiletype.h"
00026 #include "kateschema.h"
00027 #include "katesearch.h"
00028 #include "kateconfig.h"
00029 #include <kvmallocator.h>
00030 
00031 #include "../interfaces/katecmd.h"
00032 
00033 #include <klocale.h>
00034 #include <kdirwatch.h>
00035 #include <kstaticdeleter.h>
00036 #include <qapplication.h>
00037 
00041 class KateFactoryPublic : public KParts::Factory
00042 {
00043   public:
00053     KParts::Part *createPartObject ( QWidget *parentWidget, const char *widgetName, QObject *parent, const char *name, const char *classname, const QStringList &args )
00054     {
00055       return KateFactory::self()->createPartObject (parentWidget, widgetName, parent, name, classname, args);
00056     }
00057 };
00058 
00059 K_EXPORT_COMPONENT_FACTORY( libkatepart, KateFactoryPublic )
00060 
00061 KateFactory *KateFactory::s_self = 0;
00062 
00063 KateFactory::KateFactory ()
00064  : m_aboutData ("katepart", I18N_NOOP("Kate Part"), KATEPART_VERSION,
00065              I18N_NOOP( "Embeddable editor component" ), KAboutData::License_LGPL_V2,
00066              I18N_NOOP( "(c) 2000-2004 The Kate Authors" ), 0, "http://kate.kde.org")
00067  , m_instance (&m_aboutData)
00068  , m_plugins (KTrader::self()->query("KTextEditor/Plugin"))
00069 {
00070   // set s_self
00071   s_self = this;
00072 
00073   //
00074   // fill about data
00075   //
00076   m_aboutData.addAuthor ("Christoph Cullmann", I18N_NOOP("Maintainer"), "cullmann@kde.org", "http://www.babylon2k.de");
00077   m_aboutData.addAuthor ("Anders Lund", I18N_NOOP("Core Developer"), "anders@alweb.dk", "http://www.alweb.dk");
00078   m_aboutData.addAuthor ("Joseph Wenninger", I18N_NOOP("Core Developer"), "jowenn@kde.org","http://stud3.tuwien.ac.at/~e9925371");
00079   m_aboutData.addAuthor ("Hamish Rodda",I18N_NOOP("Core Developer"), "rodda@kde.org");
00080   m_aboutData.addAuthor ("Waldo Bastian", I18N_NOOP( "The cool buffersystem" ), "bastian@kde.org" );
00081   m_aboutData.addAuthor ("Charles Samuels", I18N_NOOP("The Editing Commands"), "charles@kde.org");
00082   m_aboutData.addAuthor ("Matt Newell", I18N_NOOP("Testing, ..."), "newellm@proaxis.com");
00083   m_aboutData.addAuthor ("Michael Bartl", I18N_NOOP("Former Core Developer"), "michael.bartl1@chello.at");
00084   m_aboutData.addAuthor ("Michael McCallum", I18N_NOOP("Core Developer"), "gholam@xtra.co.nz");
00085   m_aboutData.addAuthor ("Jochen Wilhemly", I18N_NOOP( "KWrite Author" ), "digisnap@cs.tu-berlin.de" );
00086   m_aboutData.addAuthor ("Michael Koch",I18N_NOOP("KWrite port to KParts"), "koch@kde.org");
00087   m_aboutData.addAuthor ("Christian Gebauer", 0, "gebauer@kde.org" );
00088   m_aboutData.addAuthor ("Simon Hausmann", 0, "hausmann@kde.org" );
00089   m_aboutData.addAuthor ("Glen Parker",I18N_NOOP("KWrite Undo History, Kspell integration"), "glenebob@nwlink.com");
00090   m_aboutData.addAuthor ("Scott Manson",I18N_NOOP("KWrite XML Syntax highlighting support"), "sdmanson@alltel.net");
00091   m_aboutData.addAuthor ("John Firebaugh",I18N_NOOP("Patches and more"), "jfirebaugh@kde.org");
00092   m_aboutData.addAuthor ("Dominik Haumann", I18N_NOOP("Developer & Highlight wizard"), "dhdev@gmx.de");
00093 
00094   m_aboutData.addCredit ("Matteo Merli",I18N_NOOP("Highlighting for RPM Spec-Files, Perl, Diff and more"), "merlim@libero.it");
00095   m_aboutData.addCredit ("Rocky Scaletta",I18N_NOOP("Highlighting for VHDL"), "rocky@purdue.edu");
00096   m_aboutData.addCredit ("Yury Lebedev",I18N_NOOP("Highlighting for SQL"),"");
00097   m_aboutData.addCredit ("Chris Ross",I18N_NOOP("Highlighting for Ferite"),"");
00098   m_aboutData.addCredit ("Nick Roux",I18N_NOOP("Highlighting for ILERPG"),"");
00099   m_aboutData.addCredit ("Carsten Niehaus", I18N_NOOP("Highlighting for LaTeX"),"");
00100   m_aboutData.addCredit ("Per Wigren", I18N_NOOP("Highlighting for Makefiles, Python"),"");
00101   m_aboutData.addCredit ("Jan Fritz", I18N_NOOP("Highlighting for Python"),"");
00102   m_aboutData.addCredit ("Daniel Naber","","");
00103   m_aboutData.addCredit ("Roland Pabel",I18N_NOOP("Highlighting for Scheme"),"");
00104   m_aboutData.addCredit ("Cristi Dumitrescu",I18N_NOOP("PHP Keyword/Datatype list"),"");
00105   m_aboutData.addCredit ("Carsten Pfeiffer", I18N_NOOP("Very nice help"), "");
00106   m_aboutData.addCredit (I18N_NOOP("All people who have contributed and I have forgotten to mention"),"","");
00107 
00108   m_aboutData.setTranslator(I18N_NOOP("_: NAME OF TRANSLATORS\nYour names"), I18N_NOOP("_: EMAIL OF TRANSLATORS\nYour emails"));
00109 
00110   //
00111   // dir watch
00112   //
00113   m_dirWatch = new KDirWatch ();
00114 
00115   //
00116   // filetype man
00117   //
00118   m_fileTypeManager = new KateFileTypeManager ();
00119 
00120   //
00121   // schema man
00122   //
00123   m_schemaManager = new KateSchemaManager ();
00124 
00125   // config objects
00126   m_documentConfig = new KateDocumentConfig ();
00127   m_viewConfig = new KateViewConfig ();
00128   m_rendererConfig = new KateRendererConfig ();
00129 
00130   // vm allocator
00131   m_vm = new KVMAllocator ();
00132 
00133   //
00134   // init the cmds
00135   //
00136   m_cmds.push_back (new KateCommands::CoreCommands());
00137   m_cmds.push_back (new KateCommands::SedReplace ());
00138   m_cmds.push_back (new KateCommands::Character ());
00139   m_cmds.push_back (new KateCommands::Date ());
00140   m_cmds.push_back (new SearchCommand());
00141 
00142   for ( QValueList<Kate::Command *>::iterator it = m_cmds.begin(); it != m_cmds.end(); ++it )
00143     KateCmd::self()->registerCommand (*it);
00144 }
00145 
00146 KateFactory::~KateFactory()
00147 {
00148   /* ?hack? If  MainApplication-Interface::quit is called by dcop the factory gets destroyed before all documents are destroyed eg in kwrite.
00149   This could happen in other apps too. Since the documents try to unregister a new factory is created (in the ::self call) and registered with a 
00150   KStaticDeleter which causes a crash. That's why I ensure here that all documents are destroyed before the factory goes down (JOWENN)*/
00151   while (KateDocument *doc=m_documents.first()) {
00152     s_self=this; /* this is needed because the KStaticDeleter sets the global reference to 0, before it deletes the object it handles.
00153     To prevent a crash again restore the factory pointer temporarily. (jowenn)*/
00154     delete doc;
00155     s_self=0;
00156   }
00157   /*another solution would be to set a flag in the documents, and inhibit calling of the deregistering methods, but I don't see a problem
00158   if all created objects are deleted before their factory. If somebody sees a problem, let me know*/
00159   
00160   delete m_documentConfig;
00161   delete m_viewConfig;
00162   delete m_rendererConfig;
00163 
00164   delete m_fileTypeManager;
00165   delete m_schemaManager;
00166 
00167   delete m_dirWatch;
00168 
00169   delete m_vm;
00170 
00171   for ( QValueList<Kate::Command *>::iterator it = m_cmds.begin(); it != m_cmds.end(); ++it )
00172     delete *it;
00173 }
00174 
00175 static KStaticDeleter<KateFactory> sdFactory;
00176 
00177 KateFactory *KateFactory::self ()
00178 {
00179   if (!s_self) {
00180     sdFactory.setObject(s_self, new KateFactory ());
00181   }
00182   return s_self;
00183 }
00184 
00185 KParts::Part *KateFactory::createPartObject ( QWidget *parentWidget, const char *widgetName, QObject *parent, const char *name, const char *_classname, const QStringList & )
00186 {
00187   QCString classname( _classname );
00188   bool bWantSingleView = ( classname != "KTextEditor::Document" && classname != "Kate::Document" );
00189   bool bWantBrowserView = ( classname == "Browser/View" );
00190   bool bWantReadOnly = (bWantBrowserView || ( classname == "KParts::ReadOnlyPart" ));
00191 
00192   KParts::ReadWritePart *part = new KateDocument (bWantSingleView, bWantBrowserView, bWantReadOnly, parentWidget, widgetName, parent, name);
00193   part->setReadWrite( !bWantReadOnly );
00194 
00195   return part;
00196 }
00197 
00198 void KateFactory::registerDocument ( KateDocument *doc )
00199 {
00200   m_documents.append( doc );
00201 }
00202 
00203 void KateFactory::deregisterDocument ( KateDocument *doc )
00204 {
00205   m_documents.removeRef( doc );
00206 }
00207 
00208 void KateFactory::registerView ( KateView *view )
00209 {
00210   m_views.append( view );
00211 }
00212 
00213 void KateFactory::deregisterView ( KateView *view )
00214 {
00215   m_views.removeRef( view );
00216 }
00217 
00218 void KateFactory::registerRenderer ( KateRenderer  *renderer )
00219 {
00220   m_renderers.append( renderer );
00221 }
00222 
00223 void KateFactory::deregisterRenderer ( KateRenderer  *renderer )
00224 {
00225   m_renderers.removeRef( renderer );
00226 }
00227 
00228 // kate: space-indent on; indent-width 2; replace-tabs on;
KDE Logo
This file is part of the documentation for kate Library Version 3.4.0.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Thu Apr 28 01:42:34 2005 by doxygen 1.3.9.1 written by Dimitri van Heesch, © 1997-2003