chalk

kis_resource_mediator.cpp
1/*
2 * Copyright (c) 2003 Patrick Julien <freak@codepimps.org>
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 */
18#include <koIconChooser.h>
19
20#include "kdebug.h"
21
22#include "kis_icon_item.h"
23#include "kis_resource.h"
24#include "kis_itemchooser.h"
25#include "kis_resourceserver.h"
26#include "kis_resource_mediator.h"
27
28KisResourceMediator::KisResourceMediator(KisItemChooser *chooser,
29 TQObject *parent,
30 const char *name) : super(parent, name), m_chooser(chooser)
31{
32 Q_ASSERT(chooser);
33 m_activeItem = 0;
34
35 connect(m_chooser, TQ_SIGNAL(selected(KoIconItem*)), TQ_SLOT(setActiveItem(KoIconItem*)));
36}
37
38KisResourceMediator::~KisResourceMediator()
39{
40}
41
42void KisResourceMediator::connectServer(KisResourceServerBase* rServer)
43{
44 // Add the initially loaded items
45 TQValueList<KisResource*> resources = rServer->resources();
46 TQValueList<KisResource*>::iterator it;
47 for ( it = resources.begin(); it != resources.end(); ++it )
48 rServerAddedResource( *it );
49
50 // And connect to the server permanently, so that we may recieve updates afterwards
51 connect(rServer, TQ_SIGNAL(resourceAdded(KisResource*)),
52 this, TQ_SLOT(rServerAddedResource(KisResource*)));
53}
54
55KisResource *KisResourceMediator::currentResource() const
56{
57 if (m_activeItem) {
58 Q_ASSERT(dynamic_cast<KisIconItem*>(m_activeItem));
59 return static_cast<KisIconItem*>(m_activeItem)->resource();
60 }
61
62 return 0;
63}
64
65KisIconItem *KisResourceMediator::itemFor(KisResource *r) const
66{
67 if(m_items.contains(r))
68 {
69 return m_items[r];
70 }
71 return 0;
72}
73
74KisResource *KisResourceMediator::resourceFor(KoIconItem *item) const
75{
76 KisIconItem *kisitem = dynamic_cast<KisIconItem*>(item);
77
78 return kisitem ? kisitem->resource() : 0;
79}
80
81KisResource *KisResourceMediator::resourceFor(KisIconItem *item) const
82{
83 return item ? item->resource() : 0;
84}
85
86TQWidget *KisResourceMediator::chooserWidget() const
87{
88 return m_chooser;
89}
90
91void KisResourceMediator::setActiveItem(KoIconItem *item)
92{
93 KisIconItem *kisitem = dynamic_cast<KisIconItem*>(item);
94
95 if (kisitem) {
96 m_activeItem = kisitem;
97 m_chooser->setCurrent(item);
98 emit activatedResource(kisitem ? kisitem->resource() : 0);
99 }
100}
101
102void KisResourceMediator::rServerAddedResource(KisResource *resource)
103{
104 if (resource && resource->valid()) {
105
106 KisIconItem *item = new KisIconItem(resource);
107 TQ_CHECK_PTR(item);
108
109 m_items[resource] = item;
110
111 m_chooser->addItem(item);
112 if (m_activeItem == 0) setActiveItem(item);
113 }
114}
115
116#include "kis_resource_mediator.moc"
117
The KisResource class provides a representation of Chalk image resources.