krita
kis_resource_mediator.cc
00001 /* 00002 * Copyright (c) 2003 Patrick Julien <freak@codepimps.org> 00003 * 00004 * This program is free software; you can redistribute it and/or modify 00005 * it under the terms of the GNU General Public License as published by 00006 * the Free Software Foundation; either version 2 of the License, or 00007 * (at your option) any later version. 00008 * 00009 * This program is distributed in the hope that it will be useful, 00010 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00012 * GNU General Public License for more details. 00013 * 00014 * You should have received a copy of the GNU General Public License 00015 * along with this program; if not, write to the Free Software 00016 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 00017 */ 00018 #include <koIconChooser.h> 00019 00020 #include "kdebug.h" 00021 00022 #include "kis_icon_item.h" 00023 #include "kis_resource.h" 00024 #include "kis_itemchooser.h" 00025 #include "kis_resourceserver.h" 00026 #include "kis_resource_mediator.h" 00027 00028 KisResourceMediator::KisResourceMediator(KisItemChooser *chooser, 00029 QObject *parent, 00030 const char *name) : super(parent, name), m_chooser(chooser) 00031 { 00032 Q_ASSERT(chooser); 00033 m_activeItem = 0; 00034 00035 connect(m_chooser, SIGNAL(selected(KoIconItem*)), SLOT(setActiveItem(KoIconItem*))); 00036 } 00037 00038 KisResourceMediator::~KisResourceMediator() 00039 { 00040 } 00041 00042 void KisResourceMediator::connectServer(KisResourceServerBase* rServer) 00043 { 00044 // Add the initially loaded items 00045 QValueList<KisResource*> resources = rServer->resources(); 00046 QValueList<KisResource*>::iterator it; 00047 for ( it = resources.begin(); it != resources.end(); ++it ) 00048 rServerAddedResource( *it ); 00049 00050 // And connect to the server permanently, so that we may recieve updates afterwards 00051 connect(rServer, SIGNAL(resourceAdded(KisResource*)), 00052 this, SLOT(rServerAddedResource(KisResource*))); 00053 } 00054 00055 KisResource *KisResourceMediator::currentResource() const 00056 { 00057 if (m_activeItem) { 00058 Q_ASSERT(dynamic_cast<KisIconItem*>(m_activeItem)); 00059 return static_cast<KisIconItem*>(m_activeItem)->resource(); 00060 } 00061 00062 return 0; 00063 } 00064 00065 KisIconItem *KisResourceMediator::itemFor(KisResource *r) const 00066 { 00067 if(m_items.contains(r)) 00068 { 00069 return m_items[r]; 00070 } 00071 return 0; 00072 } 00073 00074 KisResource *KisResourceMediator::resourceFor(KoIconItem *item) const 00075 { 00076 KisIconItem *kisitem = dynamic_cast<KisIconItem*>(item); 00077 00078 return kisitem ? kisitem->resource() : 0; 00079 } 00080 00081 KisResource *KisResourceMediator::resourceFor(KisIconItem *item) const 00082 { 00083 return item ? item->resource() : 0; 00084 } 00085 00086 QWidget *KisResourceMediator::chooserWidget() const 00087 { 00088 return m_chooser; 00089 } 00090 00091 void KisResourceMediator::setActiveItem(KoIconItem *item) 00092 { 00093 KisIconItem *kisitem = dynamic_cast<KisIconItem*>(item); 00094 00095 if (kisitem) { 00096 m_activeItem = kisitem; 00097 m_chooser->setCurrent(item); 00098 emit activatedResource(kisitem ? kisitem->resource() : 0); 00099 } 00100 } 00101 00102 void KisResourceMediator::rServerAddedResource(KisResource *resource) 00103 { 00104 if (resource && resource->valid()) { 00105 00106 KisIconItem *item = new KisIconItem(resource); 00107 Q_CHECK_PTR(item); 00108 00109 m_items[resource] = item; 00110 00111 m_chooser->addItem(item); 00112 if (m_activeItem == 0) setActiveItem(item); 00113 } 00114 } 00115 00116 #include "kis_resource_mediator.moc" 00117