22#include <tqvaluelist.h>
28#include <tdeactioncollection.h>
32#include <tdeglobalsettings.h>
33#include <tdeaccelmanager.h>
35#include <kstandarddirs.h>
37#include <kis_paintop_registry.h>
39#include <kis_painter.h>
40#include <kis_paintop.h>
42#include <kis_factory.h>
44#include "kis_paintop_box.h"
46KisPaintopBox::KisPaintopBox (KisView * view, TQWidget *parent,
const char * name)
47 : super (parent, name),
48 m_canvasController(view->getCanvasController())
50 TDEAcceleratorManager::setNoAccel(
this);
52 Q_ASSERT(m_canvasController != 0);
54 setCaption(i18n(
"Painter's Toolchest"));
56 m_paintops =
new TQValueList<KisID>();
57 m_displayedOps =
new TQValueList<KisID>();
59 m_cmbPaintops =
new TQComboBox(
this,
"KisPaintopBox::m_cmbPaintops");
60 m_cmbPaintops->setMinimumWidth(150);
61 TQToolTip::add(m_cmbPaintops, i18n(
"Styles of painting for the painting tools"));
62 m_layout =
new TQHBoxLayout(
this, 1, 1);
63 m_layout->addWidget(m_cmbPaintops);
65 connect(
this, TQ_SIGNAL(selected(
const KisID &,
const KisPaintOpSettings *)), view, TQ_SLOT(paintopActivated(
const KisID &,
const KisPaintOpSettings *)));
66 connect(m_cmbPaintops, TQ_SIGNAL(activated(
int)),
this, TQ_SLOT(slotItemSelected(
int)));
69 KisIDList keys = KisPaintOpRegistry::instance()->listKeys();
70 for ( KisIDList::Iterator it = keys.begin(); it != keys.end(); ++it ) {
75 connect(view, TQ_SIGNAL(currentColorSpaceChanged(
KisColorSpace*)),
77 connect(view, TQ_SIGNAL(sigInputDeviceChanged(
const KisInputDevice&)),
78 this, TQ_SLOT(slotInputDeviceChanged(
const KisInputDevice&)));
80 setCurrentPaintop(defaultPaintop(m_canvasController->currentInputDevice()));
83KisPaintopBox::~KisPaintopBox()
86 delete m_displayedOps;
89void KisPaintopBox::addItem(
const KisID & paintop,
const TQString & )
91 m_paintops->append(paintop);
94void KisPaintopBox::slotItemSelected(
int index)
96 if ((uint)index > m_displayedOps->count()) {
100 KisID paintop = *m_displayedOps->at(index);
102 setCurrentPaintop(paintop);
107 TQValueList<KisID>::iterator it = m_paintops->begin();
108 TQValueList<KisID>::iterator end = m_paintops->end();
109 m_displayedOps->clear();
110 m_cmbPaintops->clear();
112 for ( ; it != end; ++it ) {
113 if (KisPaintOpRegistry::instance()->userVisible(*it, cs)) {
114 TQPixmap pm = paintopPixmap(*it);
116 TQPixmap p = TQPixmap( 16, 16 );
118 m_cmbPaintops->insertItem(p, (*it).name());
121 m_cmbPaintops->insertItem(pm, (*it).name());
123 m_displayedOps->append(*it);
127 int index = m_displayedOps->findIndex(currentPaintop());
135 m_cmbPaintops->setCurrentItem( index );
136 slotItemSelected( index );
139TQPixmap KisPaintopBox::paintopPixmap(
const KisID & paintop)
141 TQString pixmapName = KisPaintOpRegistry::instance()->pixmap(paintop);
143 if (pixmapName.isEmpty()) {
147 TQString fname = KisFactory::instance()->dirs()->findResource(
"kis_images", pixmapName);
149 return TQPixmap(fname);
152void KisPaintopBox::slotInputDeviceChanged(
const KisInputDevice & inputDevice)
155 InputDevicePaintopMap::iterator it = m_currentID.find(inputDevice);
157 if (it == m_currentID.end()) {
158 paintop = defaultPaintop(inputDevice);
160 paintop = (*it).second;
163 int index = m_displayedOps->findIndex(paintop);
169 paintop = *m_displayedOps->at(index);
172 m_cmbPaintops->setCurrentItem(index);
173 setCurrentPaintop(paintop);
176void KisPaintopBox::updateOptionWidget()
178 if (m_optionWidget != 0) {
179 m_layout->remove(m_optionWidget);
180 m_optionWidget->hide();
181 m_layout->invalidate();
184 const KisPaintOpSettings *settings = paintopSettings(currentPaintop(), m_canvasController->currentInputDevice());
187 m_optionWidget = settings->widget();
188 Q_ASSERT(m_optionWidget != 0);
190 m_layout->addWidget(m_optionWidget);
192 m_optionWidget->show();
196const KisID& KisPaintopBox::currentPaintop()
198 return m_currentID[m_canvasController->currentInputDevice()];
201void KisPaintopBox::setCurrentPaintop(
const KisID & paintop)
203 m_currentID[m_canvasController->currentInputDevice()] = paintop;
205 updateOptionWidget();
207 emit selected(paintop, paintopSettings(paintop, m_canvasController->currentInputDevice()));
210KisID KisPaintopBox::defaultPaintop(
const KisInputDevice& inputDevice)
212 if (inputDevice == KisInputDevice::eraser()) {
213 return KisID(
"eraser",
"");
215 return KisID(
"paintbrush",
"");
219const KisPaintOpSettings *KisPaintopBox::paintopSettings(
const KisID & paintop,
const KisInputDevice & inputDevice)
221 TQValueVector<KisPaintOpSettings *> settingsArray;
222 InputDevicePaintopSettingsMap::iterator it = m_inputDevicePaintopSettings.find(inputDevice);
224 if (it == m_inputDevicePaintopSettings.end()) {
227 for (TQValueList<KisID>::const_iterator pit = m_paintops->begin(); pit != m_paintops->end(); ++pit) {
228 KisPaintOpSettings *settings = KisPaintOpRegistry::instance()->settings(*pit,
this, inputDevice);
229 settingsArray.append(settings);
230 if (settings && settings->widget()) {
231 settings->widget()->hide();
234 m_inputDevicePaintopSettings[inputDevice] = settingsArray;
236 settingsArray = (*it).second;
239 const int index = m_paintops->findIndex(paintop);
240 if (index >= 0 && index < (
int)settingsArray.count())
241 return settingsArray[index];
246#include "kis_paintop_box.moc"
A colorspace is the definition of a certain color model in Chalk.
Chalk has a large number of extensible resources.