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"