qeditor_factory.cpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include "qeditor_factory.h"
00025 #include "qeditor_part.h"
00026 #include "qeditor_view.h"
00027
00028 #include <klocale.h>
00029 #include <kinstance.h>
00030 #include <kaboutdata.h>
00031 #include <kdebug.h>
00032
00033 #include <assert.h>
00034
00035 template class QPtrList<QEditorPart>;
00036 template class QPtrList<QEditorView>;
00037
00038 QEditorPartFactory *QEditorPartFactory::s_self = 0;
00039 unsigned long int QEditorPartFactory::s_refcnt = 0;
00040 KInstance *QEditorPartFactory::s_instance = 0;
00041 KAboutData *QEditorPartFactory::s_about = 0;
00042 QPtrList<QEditorPart> *QEditorPartFactory::s_documents = 0;
00043 QPtrList<QEditorView> *QEditorPartFactory::s_views = 0;
00044 KTrader::OfferList *QEditorPartFactory::s_plugins = 0;
00045
00046 extern "C"
00047 {
00048 void *init_libqeditorpart()
00049 {
00050 return new QEditorPartFactory( true );
00051 }
00052 }
00053
00054 QEditorPartFactory::QEditorPartFactory( bool clone )
00055 {
00056 if ( clone )
00057 {
00058 ref();
00059 return;
00060 }
00061 }
00062
00063 QEditorPartFactory::~QEditorPartFactory()
00064 {
00065 if ( s_self == this )
00066 {
00067 assert( !s_refcnt );
00068
00069 if ( s_instance )
00070 delete s_instance;
00071
00072 if ( s_about )
00073 delete s_about;
00074
00075 if ( s_documents )
00076 {
00077 assert( s_documents->isEmpty() );
00078 delete s_documents;
00079 }
00080
00081 if ( s_views )
00082 {
00083 assert( s_views->isEmpty() );
00084 delete s_views;
00085 }
00086
00087 if ( s_plugins )
00088 delete s_plugins;
00089
00090 s_instance = 0;
00091 s_about = 0;
00092 s_documents = 0;
00093 s_views = 0;
00094 s_plugins = 0;
00095 }
00096 else
00097 deref();
00098 }
00099
00100 void QEditorPartFactory::ref()
00101 {
00102 if ( !s_refcnt && !s_self )
00103 {
00104 s_self = new QEditorPartFactory;
00105 }
00106
00107 s_refcnt++;
00108 }
00109
00110 void QEditorPartFactory::deref()
00111 {
00112 if ( !--s_refcnt && s_self )
00113 {
00114 delete s_self;
00115 s_self = 0;
00116 }
00117 }
00118
00119 KParts::Part *QEditorPartFactory::createPartObject( QWidget *parentWidget, const char *widgetName, QObject *parent, const char *name, const char *classname, const QStringList & args )
00120 {
00121 bool bWantSingleView = !( classname == QString("KTextEditor::Document") );
00122 bool bWantBrowserView = ( classname == QString("Browser/View") );
00123 bool bWantReadOnly = (bWantBrowserView || ( classname == QString("KParts::ReadOnlyPart") ));
00124
00125 KParts::ReadWritePart *part = new QEditorPart (
00126
00127 parentWidget, widgetName, parent, name, args);
00128 part->setReadWrite( !bWantReadOnly );
00129
00130 return part;
00131 }
00132
00133 void QEditorPartFactory::registerDocument ( QEditorPart *doc )
00134 {
00135 if ( !s_documents )
00136 s_documents = new QPtrList<QEditorPart>;
00137
00138 if ( !s_documents->containsRef( doc ) )
00139 {
00140 s_documents->append( doc );
00141 ref();
00142 }
00143 }
00144
00145 void QEditorPartFactory::deregisterDocument ( QEditorPart *doc )
00146 {
00147 assert( s_documents );
00148
00149 if ( s_documents->removeRef( doc ) )
00150 {
00151 if ( s_documents->isEmpty() )
00152 {
00153 delete s_documents;
00154 s_documents = 0;
00155 }
00156
00157 deref();
00158 }
00159 }
00160
00161 void QEditorPartFactory::registerView ( QEditorView *view )
00162 {
00163 if ( !s_views )
00164 s_views = new QPtrList<QEditorView>;
00165
00166 if ( !s_views->containsRef( view ) )
00167 {
00168 s_views->append( view );
00169 ref();
00170 }
00171 }
00172
00173 void QEditorPartFactory::deregisterView ( QEditorView *view )
00174 {
00175 assert( s_views );
00176
00177 if ( s_views->removeRef( view ) )
00178 {
00179 if ( s_views->isEmpty() )
00180 {
00181 delete s_views;
00182 s_views = 0;
00183 }
00184
00185 deref();
00186 }
00187 }
00188
00189 KTrader::OfferList *QEditorPartFactory::plugins ()
00190 {
00191 if ( !s_plugins )
00192 s_plugins = new QValueList<KService::Ptr> (KTrader::self()->query("KTextEditor/Plugin"));
00193
00194 return s_plugins;
00195 }
00196
00197 KInstance *QEditorPartFactory::instance()
00198 {
00199 assert( s_self );
00200
00201 if ( !s_instance )
00202 {
00203 s_about = new KAboutData("qeditorpart", I18N_NOOP("QEditor (based on the editor of Qt-Designer)"), "0.1");
00204
00205 s_about->addAuthor("Roberto Raggi", 0, "roberto@kdevelop.org");
00206 s_about->addAuthor("Trolltech AS", 0, "info@trolltech.com");
00207 s_about->addAuthor("The Kate authors", 0, "kwrite-devel@kde.org");
00208 s_about->addAuthor("F@lk Brettschneider", 0, "falk@kdevelop.org");
00209 s_about->addAuthor("Milo Hoffman", 0, "Milo@NG-Projekt.ORG");
00210
00211 s_instance = new KInstance( s_about );
00212 }
00213
00214 return s_instance;
00215 }
00216
00217 const QPtrList<class QEditorPart>& QEditorPartFactory::documents()
00218 {
00219 return *s_documents;
00220 }
00221
00222 const QPtrList<class QEditorView>& QEditorPartFactory::views()
00223 {
00224 return *s_views;
00225 }
00226 #include "qeditor_factory.moc"
This file is part of the documentation for KDevelop Version 3.1.2.