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#if TDE_VERSION >= TDE_MAKE_VERSION(3,3,90)
51 TDEAcceleratorManager::setNoAccel(
this);
54 Q_ASSERT(m_canvasController != 0);
56 setCaption(i18n(
"Painter's Toolchest"));
58 m_paintops =
new TQValueList<KisID>();
59 m_displayedOps =
new TQValueList<KisID>();
61 m_cmbPaintops =
new TQComboBox(
this,
"KisPaintopBox::m_cmbPaintops");
62 m_cmbPaintops->setMinimumWidth(150);
63 TQToolTip::add(m_cmbPaintops, i18n(
"Styles of painting for the painting tools"));
64 m_layout =
new TQHBoxLayout(
this, 1, 1);
65 m_layout->addWidget(m_cmbPaintops);
67 connect(
this, TQ_SIGNAL(selected(
const KisID &,
const KisPaintOpSettings *)), view, TQ_SLOT(paintopActivated(
const KisID &,
const KisPaintOpSettings *)));
68 connect(m_cmbPaintops, TQ_SIGNAL(activated(
int)),
this, TQ_SLOT(slotItemSelected(
int)));
71 KisIDList keys = KisPaintOpRegistry::instance()->listKeys();
72 for ( KisIDList::Iterator it = keys.begin(); it != keys.end(); ++it ) {
77 connect(view, TQ_SIGNAL(currentColorSpaceChanged(
KisColorSpace*)),
79 connect(view, TQ_SIGNAL(sigInputDeviceChanged(
const KisInputDevice&)),
80 this, TQ_SLOT(slotInputDeviceChanged(
const KisInputDevice&)));
82 setCurrentPaintop(defaultPaintop(m_canvasController->currentInputDevice()));
85KisPaintopBox::~KisPaintopBox()
88 delete m_displayedOps;
91void KisPaintopBox::addItem(
const KisID & paintop,
const TQString & )
93 m_paintops->append(paintop);
96void KisPaintopBox::slotItemSelected(
int index)
98 if ((uint)index > m_displayedOps->count()) {
102 KisID paintop = *m_displayedOps->at(index);
104 setCurrentPaintop(paintop);
109 TQValueList<KisID>::iterator it = m_paintops->begin();
110 TQValueList<KisID>::iterator end = m_paintops->end();
111 m_displayedOps->clear();
112 m_cmbPaintops->clear();
114 for ( ; it != end; ++it ) {
115 if (KisPaintOpRegistry::instance()->userVisible(*it, cs)) {
116 TQPixmap pm = paintopPixmap(*it);
118 TQPixmap p = TQPixmap( 16, 16 );
120 m_cmbPaintops->insertItem(p, (*it).name());
123 m_cmbPaintops->insertItem(pm, (*it).name());
125 m_displayedOps->append(*it);
129 int index = m_displayedOps->findIndex(currentPaintop());
137 m_cmbPaintops->setCurrentItem( index );
138 slotItemSelected( index );
141TQPixmap KisPaintopBox::paintopPixmap(
const KisID & paintop)
143 TQString pixmapName = KisPaintOpRegistry::instance()->pixmap(paintop);
145 if (pixmapName.isEmpty()) {
149 TQString fname = KisFactory::instance()->dirs()->findResource(
"kis_images", pixmapName);
151 return TQPixmap(fname);
154void KisPaintopBox::slotInputDeviceChanged(
const KisInputDevice & inputDevice)
157 InputDevicePaintopMap::iterator it = m_currentID.find(inputDevice);
159 if (it == m_currentID.end()) {
160 paintop = defaultPaintop(inputDevice);
162 paintop = (*it).second;
165 int index = m_displayedOps->findIndex(paintop);
171 paintop = *m_displayedOps->at(index);
174 m_cmbPaintops->setCurrentItem(index);
175 setCurrentPaintop(paintop);
178void KisPaintopBox::updateOptionWidget()
180 if (m_optionWidget != 0) {
181 m_layout->remove(m_optionWidget);
182 m_optionWidget->hide();
183 m_layout->invalidate();
186 const KisPaintOpSettings *settings = paintopSettings(currentPaintop(), m_canvasController->
currentInputDevice());
189 m_optionWidget = settings->widget();
190 Q_ASSERT(m_optionWidget != 0);
192 m_layout->addWidget(m_optionWidget);
194 m_optionWidget->show();
198const KisID& KisPaintopBox::currentPaintop()
203void KisPaintopBox::setCurrentPaintop(
const KisID & paintop)
207 updateOptionWidget();
209 emit selected(paintop, paintopSettings(paintop, m_canvasController->
currentInputDevice()));
212KisID KisPaintopBox::defaultPaintop(
const KisInputDevice& inputDevice)
214 if (inputDevice == KisInputDevice::eraser()) {
215 return KisID(
"eraser",
"");
217 return KisID(
"paintbrush",
"");
221const KisPaintOpSettings *KisPaintopBox::paintopSettings(
const KisID & paintop,
const KisInputDevice & inputDevice)
223 TQValueVector<KisPaintOpSettings *> settingsArray;
224 InputDevicePaintopSettingsMap::iterator it = m_inputDevicePaintopSettings.find(inputDevice);
226 if (it == m_inputDevicePaintopSettings.end()) {
229 for (TQValueList<KisID>::const_iterator pit = m_paintops->begin(); pit != m_paintops->end(); ++pit) {
230 KisPaintOpSettings *settings = KisPaintOpRegistry::instance()->settings(*pit,
this, inputDevice);
231 settingsArray.append(settings);
232 if (settings && settings->widget()) {
233 settings->widget()->hide();
236 m_inputDevicePaintopSettings[inputDevice] = settingsArray;
238 settingsArray = (*it).second;
241 const int index = m_paintops->findIndex(paintop);
242 if (index >= 0 && index < (
int)settingsArray.count())
243 return settingsArray[index];
248#include "kis_paintop_box.moc"
virtual KisInputDevice currentInputDevice() const =0
A colorspace is the definition of a certain color model in Chalk.
Chalk has a large number of extensible resources.