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 Tue Apr 12 23:40:00 2005 by doxygen 1.3.7 written by Dimitri van Heesch, © 1997-2003