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 
KDE Home | KDE Accessibility Home | Description of Access Keys