Changeset View
Changeset View
Standalone View
Standalone View
plugins/dockers/channeldocker/channeldocker_dock.cpp
Context not available. | |||||
32 | #include <kis_group_layer.h> | 32 | #include <kis_group_layer.h> | ||
---|---|---|---|---|---|
33 | #include <kis_layer.h> | 33 | #include <kis_layer.h> | ||
34 | #include <kis_paint_device.h> | 34 | #include <kis_paint_device.h> | ||
35 | #include "kis_signal_compressor.h" | ||||
35 | #include <KisView.h> | 36 | #include <KisView.h> | ||
37 | #include <kis_idle_watcher.h> | ||||
36 | 38 | | |||
37 | ChannelDockerDock::ChannelDockerDock( ) : QDockWidget(i18n("Channels")), m_canvas(0) | 39 | ChannelDockerDock::ChannelDockerDock( ) : | ||
40 | QDockWidget(i18n("Channels")), | ||||
41 | m_imageIdleWatcher(new KisIdleWatcher(250, this)), | ||||
42 | m_canvas(0) | ||||
38 | { | 43 | { | ||
39 | m_channelTable = new QTableView(this); | 44 | m_channelTable = new QTableView(this); | ||
40 | m_model = new ChannelModel(this); | 45 | m_model = new ChannelModel(this); | ||
41 | m_channelTable->setModel(m_model); | 46 | m_channelTable->setModel(m_model); | ||
42 | m_channelTable->setShowGrid(false); | 47 | m_channelTable->setShowGrid(false); | ||
48 | m_channelTable->horizontalHeader()->setStretchLastSection(true); | ||||
43 | m_channelTable->verticalHeader()->setVisible(false); | 49 | m_channelTable->verticalHeader()->setVisible(false); | ||
50 | m_channelTable->horizontalHeader()->setVisible(false); | ||||
51 | m_channelTable->setSelectionBehavior( QAbstractItemView::SelectRows ); | ||||
52 | | ||||
44 | setWidget(m_channelTable); | 53 | setWidget(m_channelTable); | ||
54 | | ||||
55 | connect(m_channelTable,&QTableView::activated, m_model, &ChannelModel::rowActivated); | ||||
45 | } | 56 | } | ||
46 | 57 | | |||
47 | void ChannelDockerDock::setCanvas(KoCanvasBase * canvas) | 58 | void ChannelDockerDock::setCanvas(KoCanvasBase * canvas) | ||
48 | { | 59 | { | ||
60 | if(m_canvas == canvas) | ||||
61 | return; | ||||
62 | | ||||
49 | setEnabled(canvas != 0); | 63 | setEnabled(canvas != 0); | ||
50 | 64 | | |||
65 | if (m_canvas) { | ||||
66 | m_canvas->disconnectCanvasObserver(this); | ||||
67 | m_canvas->image()->disconnect(this); | ||||
68 | } | ||||
69 | | ||||
51 | if (!canvas) { | 70 | if (!canvas) { | ||
52 | m_canvas = 0; | 71 | m_canvas = 0; | ||
53 | return; | 72 | return; | ||
54 | } | 73 | } | ||
74 | | ||||
55 | m_canvas = dynamic_cast<KisCanvas2*>(canvas); | 75 | m_canvas = dynamic_cast<KisCanvas2*>(canvas); | ||
56 | if (m_canvas && m_canvas->imageView() && m_canvas->imageView()->image()) { | 76 | if ( m_canvas && m_canvas->image() ) { | ||
57 | QPointer<KisView> view = m_canvas->imageView(); | 77 | KisPaintDeviceSP dev = m_canvas->image()->projection(); | ||
58 | m_model->slotLayerActivated(view->image()->rootLayer()); | 78 | | ||
59 | KisPaintDeviceSP dev = view->image()->projection(); | 79 | m_imageIdleWatcher->setTrackedImage(m_canvas->image()); | ||
80 | connect(m_imageIdleWatcher, &KisIdleWatcher::startedIdleMode, this, &ChannelDockerDock::updateChannelTable); | ||||
81 | | ||||
60 | connect(dev, SIGNAL(colorSpaceChanged(const KoColorSpace*)), m_model, SLOT(slotColorSpaceChanged(const KoColorSpace*))); | 82 | connect(dev, SIGNAL(colorSpaceChanged(const KoColorSpace*)), m_model, SLOT(slotColorSpaceChanged(const KoColorSpace*))); | ||
61 | connect(dev, SIGNAL(colorSpaceChanged(const KoColorSpace*)), m_canvas, SLOT(channelSelectionChanged())); | 83 | connect(dev, SIGNAL(colorSpaceChanged(const KoColorSpace*)), m_canvas, SLOT(channelSelectionChanged())); | ||
84 | connect(m_model, SIGNAL(channelFlagsChanged()), m_canvas, SLOT(channelSelectionChanged())); | ||||
85 | m_imageIdleWatcher->startCountdown(); | ||||
62 | } | 86 | } | ||
63 | 87 | | |||
64 | connect(m_model, SIGNAL(channelFlagsChanged()), m_canvas, SLOT(channelSelectionChanged())); | | |||
65 | } | 88 | } | ||
66 | 89 | | |||
90 | void ChannelDockerDock::unsetCanvas() | ||||
91 | { | ||||
92 | setEnabled(false); | ||||
93 | m_canvas = 0; | ||||
94 | m_model->unsetCanvas(); | ||||
95 | } | ||||
96 | | ||||
97 | void ChannelDockerDock::showEvent(QShowEvent *event) | ||||
98 | { | ||||
99 | Q_UNUSED(event); | ||||
100 | m_imageIdleWatcher->startCountdown(); | ||||
101 | } | ||||
102 | | ||||
103 | void ChannelDockerDock::startUpdateCanvasProjection() | ||||
104 | { | ||||
105 | m_imageIdleWatcher->startCountdown(); | ||||
106 | } | ||||
107 | | ||||
108 | void ChannelDockerDock::updateChannelTable() | ||||
109 | { | ||||
110 | if (isVisible() && m_canvas && m_canvas->image()){ | ||||
111 | m_model->updateData(m_canvas); | ||||
112 | m_channelTable->resizeRowsToContents(); | ||||
113 | m_channelTable->resizeColumnsToContents(); | ||||
114 | } | ||||
115 | } | ||||
116 | | ||||
117 | | ||||
67 | 118 | | |||
68 | 119 | | |||
Context not available. |