File: modviewfact_impl.cpp

package info (click to toggle)
korelib 0.0.1-8
  • links: PTS
  • area: main
  • in suites: woody
  • size: 1,788 kB
  • ctags: 1,918
  • sloc: sh: 8,555; cpp: 3,989; makefile: 633; ansic: 65
file content (74 lines) | stat: -rw-r--r-- 2,663 bytes parent folder | download | duplicates (3)
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

#include <kore/version.h>
#include <kore/servicemanager.h>
#include <kore/kernel.h>
#include <kore/modulemanager.h>

#include "modviewfact_impl.h"
#include "moduleview_impl.h"

#define MVF_MAJOR 0
#define MVF_MINOR 0
#define MVF_REVISION 1
#define MVF_VERSION "0.0.1"
#define MVF_API_MAJOR 0
#define MVF_API_MINOR 0
#define MVF_API_REVISION 2
#define MVF_API_VERSION "0.0.2"
#define MVF_NAME "ModuleView Factory"
#define MVF_TYPE MODULEVIEWFACTORY_TYPE
#define MVF_DESCRIPTION "Creates ModuleViews on demand."
#define MVF_SERVICE MODULEVIEWFACTORY_SERVICE
#define MVF_SERVICE_DESCRIPTION "'" MODULEVIEWFACTORY_SERVICE "' service"

ModViewFactImpl::ModViewFactImpl()
{
    _mvfVersion = new Version(MVF_MAJOR,MVF_MINOR,MVF_REVISION,MVF_VERSION);
    _mvfAPIVersion = new Version(MVF_API_MAJOR,MVF_API_MINOR,MVF_API_REVISION,MVF_API_VERSION);
    _mvfInfo = new Info(this, MVF_NAME, MVF_TYPE, MVF_DESCRIPTION, _mvfVersion, _mvfAPIVersion);
    setInfo(_mvfInfo);
    _mvfService = new Service(this, MVF_SERVICE, MVF_SERVICE_DESCRIPTION);
    addService(_mvfService);
}
ModViewFactImpl::~ModViewFactImpl()
{
    delete _mvfInfo;
    delete _mvfVersion;
    delete _mvfAPIVersion;
    delete _mvfService;
}

ModuleView* ModViewFactImpl::createView( Module* mod, QWidget* parent = 0, const char* name = 0, bool modal = false, WFlags fl = 0 )
{
    return new ModuleViewImpl(mod, parent, name, modal, fl);
}
ModuleView* ModViewFactImpl::reuseView( Module* mod, QWidget* parent = 0, const char* name = 0, bool modal = false, WFlags fl = 0 )
{
    // check for a provider for service "Kore/UI/Module View/<modname>"
    ServiceManager* sm = Kernel::instance()->serviceManager();
    ModuleManager* mm = dynamic_cast<ModuleManager*> (sm->registeredProvider("Kore/Kernel/Module Manager"));
    ModuleView* mv;
    char* srv = new char[ strlen(MODULEVIEW_SERVICE) + strlen(mod->info()->name()) + 4];
    strcat( strcat( strcat( strcpy( srv, MODULEVIEW_SERVICE),"/<" ), mod->info()->name() ), ">");
    mv = dynamic_cast<ModuleView*> (sm->registeredProvider(srv));
    if( !mv )
    {
        mv = createView(mod, parent, name, modal, fl);
        if( mm )
            mm->registerModule(mv);
        sm->registerProvider(mv);
    }
    return mv;
}
void ModViewFactImpl::destroyViews()
{
    ServiceManager* sm = Kernel::instance()->serviceManager();
    ModuleManager* mm = dynamic_cast<ModuleManager*> (sm->registeredProvider("Kore/Kernel/Module Manager"));
    ServiceProvider** mv = sm->registeredProviders(MODULEVIEW_SERVICE);
    for(int i= 0; mv[i]; i++)
    {
        if( mm )
            mm->unregisterModule(mv[i]);
        sm->unregisterProvider(mv[i]);
    }
}