krita

kis_filters_listview.h

00001 /*
00002  * This file is part of Krita
00003  *
00004  * Copyright (c) 2005 Cyrille Berger <cberger@cberger.net>
00005  *
00006  *  This program is free software; you can redistribute it and/or modify
00007  *  it under the terms of the GNU General Public License as published by
00008  *  the Free Software Foundation; either version 2 of the License, or
00009  *  (at your option) any later version.
00010  *
00011  *  This program is distributed in the hope that it will be useful,
00012  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
00013  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00014  *  GNU General Public License for more details.
00015  *
00016  *  You should have received a copy of the GNU General Public License
00017  *  along with this program; if not, write to the Free Software
00018  *  Foundation, Inc., 51 Franklin Street, Fifth Floor,
00019  * Boston, MA 02110-1301, USA.
00020  */
00021 #ifndef _KIS_FILTERS_LIST_VIEW_H_
00022 #define _KIS_FILTERS_LIST_VIEW_H_
00023 
00024 #include <qevent.h>
00025 
00026 #include <kiconview.h>
00027 
00028 #include "kis_id.h"
00029 #include "kis_types.h"
00030 #include "kis_layer.h"
00031 #include "kis_paint_device.h"
00032 #include "kis_thread.h"
00033 
00034 class KisView;
00035 class KisFilter;
00036 class KisFilterConfiguration;
00037 class KisPreviewView;
00038 class KisFiltersIconViewItem;
00039 class KisFiltersListView;
00040 class KisThreadPool;
00041 
00042 class KisThumbnailDoneEvent : public QCustomEvent
00043 {
00044 public:
00045 
00046     KisThumbnailDoneEvent(KisFiltersIconViewItem * iconItem, const QImage & img)
00047         : QCustomEvent(QEvent::User + 1969)
00048         , m_iconItem(iconItem)
00049         , m_image(img) {};
00050 
00051     KisFiltersIconViewItem * m_iconItem;
00052     QImage m_image;
00053 
00054 };
00055 
00056 
00057 class KisFiltersThumbnailThread : public KisThread
00058 {
00059 public:
00060 
00061     KisFiltersThumbnailThread(QIconView * parent,
00062                               KisFiltersIconViewItem * iconItem,
00063                               KisFilterConfiguration * config, KisFilter * filter,
00064                               KisPaintDeviceSP dev, const QRect & bounds,
00065                               KisProfile * profile);
00066 
00067     ~KisFiltersThumbnailThread();
00068     
00069     virtual void run();
00070     QPixmap pixmap();
00071     void cancel();
00072 
00073 private:
00074     QIconView * m_parent;
00075     KisFiltersIconViewItem * m_iconItem;
00076     KisFilterConfiguration * m_config;
00077     KisFilter * m_filter;
00078     KisPaintDeviceSP m_dev;
00079     const QRect m_bounds;
00080     KisProfile * m_profile;
00081     QImage m_pixmap;
00082 };
00083 
00084 class KisFiltersIconViewItem : public QIconViewItem {
00085 public:
00086     KisFiltersIconViewItem( QIconView * parent, const QString & text, const QPixmap & icon,
00087                             KisID id, KisFilter* filter, KisFilterConfiguration* filterConfig,
00088                             KisPaintDeviceSP thumb, const QRect & bounds, KisProfile * profile);
00089 
00090     virtual ~KisFiltersIconViewItem();
00091     KisID id() { return m_id; }
00092     KisFilter* filter() { return m_filter; }
00093     void setFilterConfiguration(KisFilterConfiguration* fc) { m_filterconfig = fc; }
00094 
00095     void resetThread() { m_thread = 0; };
00096     KisThread * thread() { return m_thread; }
00097     
00098 private:
00099     KisID m_id;
00100     KisFilter* m_filter;
00101     KisFilterConfiguration* m_filterconfig;
00102     KisFiltersThumbnailThread * m_thread;
00103 };
00104 
00105 class KisFiltersListView : public KIconView {
00106 
00107 public:
00108     explicit KisFiltersListView(QWidget * parent = 0, const char * name = 0, WFlags f = 0, bool filterForAdjustmentLayers = false);
00109     KisFiltersListView(QWidget* parent, bool filterForAdjustmentLayers = false, const char* name = 0);
00110     KisFiltersListView(KisLayerSP layer, QWidget* parent, bool filterForAdjustmentLayers = false,  const char * name = 0) KDE_DEPRECATED;
00111     KisFiltersListView(KisPaintDeviceSP layer, QWidget* parent, bool filterForAdjustmentLayers = false,  const char * name = 0);
00112         
00113     virtual void customEvent(QCustomEvent *);
00114 
00115     private:
00116     
00117     void init();
00118     
00119 public:
00120     void setLayer(KisLayerSP layer) KDE_DEPRECATED;
00121     void setProfile(KisProfile * profile) { m_profile = profile; };
00122     
00123     inline void setPaintDevice(KisPaintDeviceSP pd) {
00124         if( pd != m_original)
00125         {
00126             m_original = pd;
00127             buildPreview();
00128         }
00129     }
00130     void buildPreview();
00131     void setCurrentFilter(KisID filter);
00132 
00133 private:
00134     
00135     KisPaintDeviceSP m_original;
00136     KisImageSP m_imgthumb;
00137     KisPaintDeviceSP m_thumb;
00138     KisProfile * m_profile;
00139     KisThreadPool * threadPool;
00140     bool m_filterForAdjustmentLayers;
00141 };
00142 
00143 #endif
KDE Home | KDE Accessibility Home | Description of Access Keys