summaryrefslogtreecommitdiffstats
path: root/kghostview/kgvfactory.cpp
blob: edf2014472a27ad1fe5c367fb3d2f7e35fc3ed0b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
/**
 * Copyright (C) 2003, Luís Pedro Coelho,
 * based on kdelibs/kparts/genericfactory.h
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program 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 General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 */

#include <kparts/factory.h>
#include <kparts/part.h>
#include <kgenericfactory.h>
#include <kaboutdata.h>
#include <kdebug.h>
#include "kgv_view.h"

#include "kgvfactory.h"

KGVFactory::KGVFactory()
{
    if ( s_self )
        kdWarning() << "KGVFactory instantiated more than once!" << endl;
    s_self = this;
}

KGVFactory::~KGVFactory()
{
    delete s_aboutData;
    delete s_instance;
    s_aboutData = 0;
    s_instance = 0;
    s_self = 0;
}

KInstance *KGVFactory::createInstance()
{
    KInstance* res = new KInstance( aboutData() );
    return res;
}

KGVFactory *KGVFactory::s_self;
KInstance *KGVFactory::s_instance;
KAboutData *KGVFactory::s_aboutData;

KParts::Part *KGVFactory::createPartObject( QWidget *parentWidget, const char *widgetName,
        QObject *parent, const char *name,
        const char *className,
        const QStringList &args_ )
{
    QStringList args = args_;
    /* Below is the reason why we must
     * have our own factory instead of
     * typedef KParts::GenericFactory<KGVPart> KGVFactory
     *
     * as we did before.
     */
    args << QString::fromLatin1( className );
    if ( !strcmp( className, "Browser/View" ) ) {
	    className = "KParts::ReadOnlyPart";
    }
    KGVPart *part = KDEPrivate::ConcreteFactory<KGVPart>::create( parentWidget,
            widgetName,
            parent,
            name,
            className,
            args );

    if ( part && !qstrcmp( className, "KParts::ReadOnlyPart" ) )
    {
        KParts::ReadWritePart *rwp = dynamic_cast<KParts::ReadWritePart *>( part );
        if ( rwp )
            rwp->setReadWrite( false );
    }
    return part;
}

KInstance *KGVFactory::instance()
{
    if ( !s_instance )
    {
        if ( s_self )
            s_instance = s_self->createInstance();
        else
            s_instance = new KInstance( aboutData() );
    }
    return s_instance;
}

KAboutData *KGVFactory::aboutData()
{
    if ( !s_aboutData )
        s_aboutData = KGVPart::createAboutData();
    return s_aboutData;
}