chalk

kis_dlg_preferences.cpp
1/*
2 * preferencesdlg.cpp - part of KImageShop
3 *
4 * Copyright (c) 1999 Michael Koch <koch@kde.org>
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19 */
20
21#ifdef HAVE_CONFIG_H
22#include <config.h>
23#endif
24
25#include <tqbitmap.h>
26#include <tqbuttongroup.h>
27#include <tqcheckbox.h>
28#include <tqcursor.h>
29#include <tqlabel.h>
30#include <tqlayout.h>
31#include <tqlineedit.h>
32#include <tqpixmap.h>
33#include <tqpushbutton.h>
34#include <tqslider.h>
35#include <tqtoolbutton.h>
36#include <tqvbox.h>
37
38#ifdef HAVE_GL
39#include <tqgl.h>
40#endif
41
42#include <KoImageResource.h>
43
44#include <kcolorbutton.h>
45#include <kcombobox.h>
46#include <tdefiledialog.h>
47#include <kiconloader.h>
48#include <klineedit.h>
49#include <tdelocale.h>
50#include <knuminput.h>
51#include <kurlrequester.h>
52
53#include "squeezedcombobox.h"
54#include "kis_cmb_idlist.h"
55#include "kis_colorspace.h"
56#include "kis_colorspace_factory_registry.h"
57#include "kis_cursor.h"
58#include "kis_config.h"
59#include "kis_dlg_preferences.h"
60#include "kis_factory.h"
61#include "kis_id.h"
62#include "kis_meta_registry.h"
63#include "kis_profile.h"
64
65#include "kis_canvas.h"
66
67#include "wdgcolorsettings.h"
68#include "wdgperformancesettings.h"
69#include "wdggeneralsettings.h"
70
71// for the performance update
72#include "tiles/kis_tilemanager.h"
73
74GeneralTab::GeneralTab( TQWidget *_parent, const char *_name )
75 : WdgGeneralSettings( _parent, _name )
76{
77
78 KisConfig cfg;
79
80 m_cmbCursorShape->setCurrentItem(cfg.cursorStyle());
81 grpDockability->setButton(cfg.dockability());
82 numDockerFontSize->setValue((int)cfg.dockerFontSize());
83}
84
85void GeneralTab::setDefault()
86{
87 KisConfig cfg;
88
89 m_cmbCursorShape->setCurrentItem( cfg.getDefaultCursorStyle());
90 grpDockability->setButton(cfg.getDefaultDockability());
91 numDockerFontSize->setValue((int)(cfg.getDefaultDockerFontSize()));
92}
93
94enumCursorStyle GeneralTab::cursorStyle()
95{
96 return (enumCursorStyle)m_cmbCursorShape->currentItem();
97}
98
99enumKoDockability GeneralTab::dockability()
100{
101 return (enumKoDockability)grpDockability->selectedId();
102}
103
104float GeneralTab::dockerFontSize()
105{
106 return (float)numDockerFontSize->value();
107}
108
109//---------------------------------------------------------------------------------------------------
110
111ColorSettingsTab::ColorSettingsTab(TQWidget *parent, const char *name )
112 : TQWidget(parent, name)
113{
114 // XXX: Make sure only profiles that fit the specified color model
115 // are shown in the profile combos
116
117 TQGridLayout * l = new TQGridLayout( this, 1, 1, KDialog::marginHint(), KDialog::spacingHint());
118 l->setMargin(0);
119 m_page = new WdgColorSettings(this);
120 l->addWidget( m_page, 0, 0);
121
122 KisConfig cfg;
123
124 m_page->cmbWorkingColorSpace->setIDList(KisMetaRegistry::instance()->csRegistry()->listKeys());
125 m_page->cmbWorkingColorSpace->setCurrentText(cfg.workingColorSpace());
126
127 m_page->cmbPrintingColorSpace->setIDList(KisMetaRegistry::instance()->csRegistry()->listKeys());
128 m_page->cmbPrintingColorSpace->setCurrentText(cfg.printerColorSpace());
129
130 refillMonitorProfiles(KisID("RGBA", ""));
131 refillPrintProfiles(KisID(cfg.printerColorSpace(), ""));
132
133 if(m_page->cmbMonitorProfile->contains(cfg.monitorProfile()))
134 m_page->cmbMonitorProfile->setCurrentText(cfg.monitorProfile());
135 if(m_page->cmbPrintProfile->contains(cfg.printerProfile()))
136 m_page->cmbPrintProfile->setCurrentText(cfg.printerProfile());
137 m_page->chkBlackpoint->setChecked(cfg.useBlackPointCompensation());
138 m_page->grpPasteBehaviour->setButton(cfg.pasteBehaviour());
139 m_page->cmbMonitorIntent->setCurrentItem(cfg.renderIntent());
140
141 connect(m_page->cmbPrintingColorSpace, TQ_SIGNAL(activated(const KisID &)),
142 this, TQ_SLOT(refillPrintProfiles(const KisID &)));
143}
144
145void ColorSettingsTab::setDefault()
146{
147 m_page->cmbWorkingColorSpace->setCurrentText("RGBA");
148
149 m_page->cmbPrintingColorSpace->setCurrentText("CMYK");
150 refillPrintProfiles(KisID("CMYK", ""));
151
152 m_page->chkBlackpoint->setChecked(false);
153 m_page->cmbMonitorIntent->setCurrentItem(INTENT_PERCEPTUAL);
154 m_page->grpPasteBehaviour->setButton(2);
155}
156
157
158void ColorSettingsTab::refillMonitorProfiles(const KisID & s)
159{
160 KisColorSpaceFactory * csf = KisMetaRegistry::instance()->csRegistry()->get(s);
161
162 m_page->cmbMonitorProfile->clear();
163
164 if ( !csf )
165 return;
166
167 TQValueVector<KisProfile *> profileList = KisMetaRegistry::instance()->csRegistry()->profilesFor( csf );
168 TQValueVector<KisProfile *> ::iterator it;
169 for ( it = profileList.begin(); it != profileList.end(); ++it ) {
170 if ((*it)->deviceClass() == icSigDisplayClass)
171 m_page->cmbMonitorProfile->insertItem((*it)->productName());
172 }
173
174 m_page->cmbMonitorProfile->setCurrentText(csf->defaultProfile());
175}
176
177void ColorSettingsTab::refillPrintProfiles(const KisID & s)
178{
179 KisColorSpaceFactory * csf = KisMetaRegistry::instance()->csRegistry()->get(s);
180
181 m_page->cmbPrintProfile->clear();
182
183 if ( !csf )
184 return;
185
186 TQValueVector<KisProfile *> profileList = KisMetaRegistry::instance()->csRegistry()->profilesFor( csf );
187 TQValueVector<KisProfile *> ::iterator it;
188 for ( it = profileList.begin(); it != profileList.end(); ++it ) {
189 if ((*it)->deviceClass() == icSigOutputClass)
190 m_page->cmbPrintProfile->insertItem((*it)->productName());
191 }
192
193 m_page->cmbPrintProfile->setCurrentText(csf->defaultProfile());
194}
195
196//---------------------------------------------------------------------------------------------------
197
198PerformanceTab::PerformanceTab(TQWidget *parent, const char *name )
199 : WdgPerformanceSettings(parent, name)
200{
201 // XXX: Make sure only profiles that fit the specified color model
202 // are shown in the profile combos
203
204 KisConfig cfg;
205
206 // it's scaled from 0 - 6, but the config is in 0 - 300
207 m_swappiness->setValue(cfg.swappiness() / 50);
208 m_maxTiles->setValue(cfg.maxTilesInMem());
209}
210
211void PerformanceTab::setDefault()
212{
213 m_swappiness->setValue(3);
214 m_maxTiles->setValue(500);
215}
216
217//---------------------------------------------------------------------------------------------------
218
219TabletSettingsTab::TabletSettingsTab( TQWidget *parent, const char *name)
220 : WdgTabletSettings( parent, name )
221{
222#ifdef EXTENDED_X11_TABLET_SUPPORT
223 initTabletDevices();
224#else
225 grpTabletDevices->hide();
226#endif
227}
228
229void TabletSettingsTab::setDefault()
230{
231}
232
233void TabletSettingsTab::applySettings()
234{
235
236#ifdef EXTENDED_X11_TABLET_SUPPORT
237 applyTabletDeviceSettings();
238#endif
239}
240
241#ifdef EXTENDED_X11_TABLET_SUPPORT
242TabletSettingsTab::DeviceSettings::DeviceSettings(KisCanvasWidget::X11TabletDevice *tabletDevice, bool enabled,
243 TQ_INT32 xAxis, TQ_INT32 yAxis, TQ_INT32 pressureAxis,
244 TQ_INT32 xTiltAxis, TQ_INT32 yTiltAxis, TQ_INT32 wheelAxis,
245 TQ_INT32 toolIDAxis, TQ_INT32 serialNumberAxis)
246 : m_tabletDevice(tabletDevice),
247 m_enabled(enabled),
248 m_xAxis(xAxis),
249 m_yAxis(yAxis),
250 m_pressureAxis(pressureAxis),
251 m_xTiltAxis(xTiltAxis),
252 m_yTiltAxis(yTiltAxis),
253 m_wheelAxis(wheelAxis),
254 m_toolIDAxis(toolIDAxis),
255 m_serialNumberAxis(serialNumberAxis)
256{
257}
258
259TabletSettingsTab::DeviceSettings::DeviceSettings()
260 : m_tabletDevice(0),
261 m_enabled(false),
262 m_xAxis(KisCanvasWidget::X11TabletDevice::NoAxis),
263 m_yAxis(KisCanvasWidget::X11TabletDevice::NoAxis),
264 m_pressureAxis(KisCanvasWidget::X11TabletDevice::NoAxis),
265 m_xTiltAxis(KisCanvasWidget::X11TabletDevice::NoAxis),
266 m_yTiltAxis(KisCanvasWidget::X11TabletDevice::NoAxis),
267 m_wheelAxis(KisCanvasWidget::X11TabletDevice::NoAxis),
268 m_toolIDAxis(KisCanvasWidget::X11TabletDevice::NoAxis),
269 m_serialNumberAxis(KisCanvasWidget::X11TabletDevice::NoAxis)
270{
271}
272
273void TabletSettingsTab::DeviceSettings::applySettings()
274{
275 m_tabletDevice->setEnabled(enabled());
276 m_tabletDevice->setXAxis(xAxis());
277 m_tabletDevice->setYAxis(yAxis());
278 m_tabletDevice->setPressureAxis(pressureAxis());
279 m_tabletDevice->setXTiltAxis(xTiltAxis());
280 m_tabletDevice->setYTiltAxis(yTiltAxis());
281 m_tabletDevice->setWheelAxis(wheelAxis());
282 m_tabletDevice->setToolIDAxis(toolIDAxis());
283 m_tabletDevice->setSerialNumberAxis(serialNumberAxis());
284 m_tabletDevice->writeSettingsToConfig();
285}
286
287void TabletSettingsTab::DeviceSettings::setEnabled(bool enabled)
288{
289 m_enabled = enabled;
290}
291
292bool TabletSettingsTab::DeviceSettings::enabled() const
293{
294 return m_enabled;
295}
296
297TQ_INT32 TabletSettingsTab::DeviceSettings::numAxes() const
298{
299 return m_tabletDevice->numAxes();
300}
301
302void TabletSettingsTab::DeviceSettings::setXAxis(TQ_INT32 axis)
303{
304 m_xAxis = axis;
305}
306
307void TabletSettingsTab::DeviceSettings::setYAxis(TQ_INT32 axis)
308{
309 m_yAxis = axis;
310}
311
312void TabletSettingsTab::DeviceSettings::setPressureAxis(TQ_INT32 axis)
313{
314 m_pressureAxis = axis;
315}
316
317void TabletSettingsTab::DeviceSettings::setXTiltAxis(TQ_INT32 axis)
318{
319 m_xTiltAxis = axis;
320}
321
322void TabletSettingsTab::DeviceSettings::setYTiltAxis(TQ_INT32 axis)
323{
324 m_yTiltAxis = axis;
325}
326
327void TabletSettingsTab::DeviceSettings::setWheelAxis(TQ_INT32 axis)
328{
329 m_wheelAxis = axis;
330}
331
332void TabletSettingsTab::DeviceSettings::setToolIDAxis(TQ_INT32 axis)
333{
334 m_toolIDAxis = axis;
335}
336
337void TabletSettingsTab::DeviceSettings::setSerialNumberAxis(TQ_INT32 axis)
338{
339 m_serialNumberAxis = axis;
340}
341
342TQ_INT32 TabletSettingsTab::DeviceSettings::xAxis() const
343{
344 return m_xAxis;
345}
346
347TQ_INT32 TabletSettingsTab::DeviceSettings::yAxis() const
348{
349 return m_yAxis;
350}
351
352TQ_INT32 TabletSettingsTab::DeviceSettings::pressureAxis() const
353{
354 return m_pressureAxis;
355}
356
357TQ_INT32 TabletSettingsTab::DeviceSettings::xTiltAxis() const
358{
359 return m_xTiltAxis;
360}
361
362TQ_INT32 TabletSettingsTab::DeviceSettings::yTiltAxis() const
363{
364 return m_yTiltAxis;
365}
366
367TQ_INT32 TabletSettingsTab::DeviceSettings::wheelAxis() const
368{
369 return m_wheelAxis;
370}
371
372TQ_INT32 TabletSettingsTab::DeviceSettings::toolIDAxis() const
373{
374 return m_toolIDAxis;
375}
376
377TQ_INT32 TabletSettingsTab::DeviceSettings::serialNumberAxis() const
378{
379 return m_serialNumberAxis;
380}
381
382TabletSettingsTab::TabletDeviceSettingsDialog::TabletDeviceSettingsDialog(const TQString& deviceName, DeviceSettings settings,
383 TQWidget *parent, const char *name)
384 : super(parent, name, true, "", Ok | Cancel)
385{
386 setCaption(i18n("Configure %1").arg(deviceName));
387
388 m_page = new WdgTabletDeviceSettings(this);
389
390 setMainWidget(m_page);
391 resize(m_page->sizeHint());
392
393 for (TQ_INT32 axis = 0; axis < settings.numAxes(); axis++) {
394 TQString axisString;
395
396 axisString.setNum(axis);
397
398 m_page->cbX->insertItem(axisString);
399 m_page->cbY->insertItem(axisString);
400 m_page->cbPressure->insertItem(axisString);
401 m_page->cbXTilt->insertItem(axisString);
402 m_page->cbYTilt->insertItem(axisString);
403 m_page->cbWheel->insertItem(axisString);
404// m_page->cbToolID->insertItem(axisString);
405// m_page->cbSerialNumber->insertItem(axisString);
406 }
407
408 m_page->cbX->insertItem(i18n("None"));
409 m_page->cbY->insertItem(i18n("None"));
410 m_page->cbPressure->insertItem(i18n("None"));
411 m_page->cbXTilt->insertItem(i18n("None"));
412 m_page->cbYTilt->insertItem(i18n("None"));
413 m_page->cbWheel->insertItem(i18n("None"));
414// m_page->cbToolID->insertItem(i18n("None"));
415// m_page->cbSerialNumber->insertItem(i18n("None"));
416
417 if (settings.xAxis() != KisCanvasWidget::X11TabletDevice::NoAxis) {
418 m_page->cbX->setCurrentItem(settings.xAxis());
419 } else {
420 m_page->cbX->setCurrentItem(settings.numAxes());
421 }
422
423 if (settings.yAxis() != KisCanvasWidget::X11TabletDevice::NoAxis) {
424 m_page->cbY->setCurrentItem(settings.yAxis());
425 } else {
426 m_page->cbY->setCurrentItem(settings.numAxes());
427 }
428
429 if (settings.pressureAxis() != KisCanvasWidget::X11TabletDevice::NoAxis) {
430 m_page->cbPressure->setCurrentItem(settings.pressureAxis());
431 } else {
432 m_page->cbPressure->setCurrentItem(settings.numAxes());
433 }
434
435 if (settings.xTiltAxis() != KisCanvasWidget::X11TabletDevice::NoAxis) {
436 m_page->cbXTilt->setCurrentItem(settings.xTiltAxis());
437 } else {
438 m_page->cbXTilt->setCurrentItem(settings.numAxes());
439 }
440
441 if (settings.yTiltAxis() != KisCanvasWidget::X11TabletDevice::NoAxis) {
442 m_page->cbYTilt->setCurrentItem(settings.yTiltAxis());
443 } else {
444 m_page->cbYTilt->setCurrentItem(settings.numAxes());
445 }
446
447 if (settings.wheelAxis() != KisCanvasWidget::X11TabletDevice::NoAxis) {
448 m_page->cbWheel->setCurrentItem(settings.wheelAxis());
449 } else {
450 m_page->cbWheel->setCurrentItem(settings.numAxes());
451 }
452
453// if (settings.toolIDAxis() != KisCanvasWidget::X11TabletDevice::NoAxis) {
454// m_page->cbToolID->setCurrentItem(settings.toolIDAxis());
455// } else {
456// m_page->cbToolID->setCurrentItem(settings.numAxes());
457// }
458//
459// if (settings.serialNumberAxis() != KisCanvasWidget::X11TabletDevice::NoAxis) {
460// m_page->cbSerialNumber->setCurrentItem(settings.serialNumberAxis());
461// } else {
462// m_page->cbSerialNumber->setCurrentItem(settings.numAxes());
463// }
464
465 m_settings = settings;
466}
467
468TabletSettingsTab::TabletDeviceSettingsDialog::~TabletDeviceSettingsDialog()
469{
470 delete m_page;
471}
472
473TabletSettingsTab::DeviceSettings TabletSettingsTab::TabletDeviceSettingsDialog::settings()
474{
475 const TQ_INT32 noAxis = m_settings.numAxes();
476
477 if (m_page->cbX->currentItem() != noAxis ) {
478 m_settings.setXAxis(m_page->cbX->currentItem());
479 } else {
480 m_settings.setXAxis(KisCanvasWidget::X11TabletDevice::NoAxis);
481 }
482
483 if (m_page->cbY->currentItem() != noAxis ) {
484 m_settings.setYAxis(m_page->cbY->currentItem());
485 } else {
486 m_settings.setYAxis(KisCanvasWidget::X11TabletDevice::NoAxis);
487 }
488
489 if (m_page->cbPressure->currentItem() != noAxis ) {
490 m_settings.setPressureAxis(m_page->cbPressure->currentItem());
491 } else {
492 m_settings.setPressureAxis(KisCanvasWidget::X11TabletDevice::NoAxis);
493 }
494
495 if (m_page->cbXTilt->currentItem() != noAxis ) {
496 m_settings.setXTiltAxis(m_page->cbXTilt->currentItem());
497 } else {
498 m_settings.setXTiltAxis(KisCanvasWidget::X11TabletDevice::NoAxis);
499 }
500
501 if (m_page->cbYTilt->currentItem() != noAxis ) {
502 m_settings.setYTiltAxis(m_page->cbYTilt->currentItem());
503 } else {
504 m_settings.setYTiltAxis(KisCanvasWidget::X11TabletDevice::NoAxis);
505 }
506
507 if (m_page->cbWheel->currentItem() != noAxis ) {
508 m_settings.setWheelAxis(m_page->cbWheel->currentItem());
509 } else {
510 m_settings.setWheelAxis(KisCanvasWidget::X11TabletDevice::NoAxis);
511 }
512
513// if (m_page->cbToolID->currentItem() != noAxis ) {
514// m_settings.setToolIDAxis(m_page->cbToolID->currentItem());
515// } else {
516// m_settings.setToolIDAxis(KisCanvasWidget::X11TabletDevice::NoAxis);
517// }
518//
519// if (m_page->cbSerialNumber->currentItem() != noAxis ) {
520// m_settings.setSerialNumberAxis(m_page->cbSerialNumber->currentItem());
521// } else {
522// m_settings.setSerialNumberAxis(KisCanvasWidget::X11TabletDevice::NoAxis);
523// }
524
525 return m_settings;
526}
527
528void TabletSettingsTab::initTabletDevices()
529{
530 connect(cbTabletDevice, TQ_SIGNAL(activated(int)), TQ_SLOT(slotActivateDevice(int)));
531 connect(chkEnableTabletDevice, TQ_SIGNAL(toggled(bool)), TQ_SLOT(slotSetDeviceEnabled(bool)));
532 connect(btnConfigureTabletDevice, TQ_SIGNAL(clicked()), TQ_SLOT(slotConfigureDevice()));
533
534 KisCanvasWidget::X11XIDTabletDeviceMap& tabletDevices = KisCanvasWidget::tabletDeviceMap();
535
536 cbTabletDevice->clear();
537
538 if (!tabletDevices.empty()) {
539 KisCanvasWidget::X11XIDTabletDeviceMap::iterator it;
540
541 for (it = tabletDevices.begin(); it != tabletDevices.end(); ++it) {
542 KisCanvasWidget::X11TabletDevice& device = (*it).second;
543
544 m_deviceSettings.append(DeviceSettings(&device, device.enabled(), device.xAxis(), device.yAxis(),
545 device.pressureAxis(), device.xTiltAxis(), device.yTiltAxis(), device.wheelAxis(),
546 device.toolIDAxis(), device.serialNumberAxis()));
547 cbTabletDevice->insertItem(device.name());
548 }
549 slotActivateDevice(0);
550 } else {
551 cbTabletDevice->insertItem(i18n("No devices detected"));
552 cbTabletDevice->setEnabled(false);
553 chkEnableTabletDevice->setEnabled(false);
554 btnConfigureTabletDevice->setEnabled(false);
555 }
556}
557
558void TabletSettingsTab::slotActivateDevice(int deviceIndex)
559{
560 bool deviceEnabled = m_deviceSettings[deviceIndex].enabled();
561
562 chkEnableTabletDevice->setChecked(deviceEnabled);
563 slotSetDeviceEnabled(deviceEnabled);
564}
565
566void TabletSettingsTab::slotSetDeviceEnabled(bool enabled)
567{
568 btnConfigureTabletDevice->setEnabled(enabled);
569 m_deviceSettings[cbTabletDevice->currentItem()].setEnabled(enabled);
570}
571
572void TabletSettingsTab::slotConfigureDevice()
573{
574 TabletDeviceSettingsDialog dialog(cbTabletDevice->currentText(), m_deviceSettings[cbTabletDevice->currentItem()],
575 this, "TabletDeviceSettings");
576
577 if (dialog.exec() == TQDialog::Accepted)
578 {
579 m_deviceSettings[cbTabletDevice->currentItem()] = dialog.settings();
580 }
581}
582
583void TabletSettingsTab::applyTabletDeviceSettings()
584{
585 for (TQ_UINT32 deviceIndex = 0; deviceIndex < m_deviceSettings.count(); ++deviceIndex) {
586 m_deviceSettings[deviceIndex].applySettings();
587 }
588}
589
590#else // EXTENDED_X11_TABLET_SUPPORT
591
592// Fix compilation. moc seems to not see the undefined symbol needed
593// for these slots to be declared.
594void TabletSettingsTab::slotActivateDevice(int /*deviceIndex*/)
595{
596}
597
598void TabletSettingsTab::slotSetDeviceEnabled(bool /*enabled*/)
599{
600}
601
602void TabletSettingsTab::slotConfigureDevice()
603{
604}
605
606void TabletSettingsTab::applyTabletDeviceSettings()
607{
608}
609
610#endif
611
612//---------------------------------------------------------------------------------------------------
613
614DisplaySettingsTab::DisplaySettingsTab( TQWidget *parent, const char *name)
615 : WdgDisplaySettings( parent, name )
616{
617#ifdef HAVE_GL
618 KisConfig cfg;
619
620 if (!TQGLFormat::hasOpenGL()) {
621 cbUseOpenGL->setEnabled(false);
622 //cbUseOpenGLShaders->setEnabled(false);
623 } else {
624 cbUseOpenGL->setChecked(cfg.useOpenGL());
625 //cbUseOpenGLShaders->setChecked(cfg.useOpenGLShaders());
626 //cbUseOpenGLShaders->setEnabled(cfg.useOpenGL());
627 }
628#else
629 cbUseOpenGL->setEnabled(false);
630 //cbUseOpenGLShaders->setEnabled(false);
631#endif
632
633 connect(cbUseOpenGL, TQ_SIGNAL(toggled(bool)), TQ_SLOT(slotUseOpenGLToggled(bool)));
634}
635
636void DisplaySettingsTab::setDefault()
637{
638 cbUseOpenGL->setChecked(false);
639 //cbUseOpenGLShaders->setChecked(false);
640 //cbUseOpenGLShaders->setEnabled(false);
641}
642
643void DisplaySettingsTab::slotUseOpenGLToggled(bool /*isChecked*/)
644{
645 //cbUseOpenGLShaders->setEnabled(isChecked);
646}
647
648//---------------------------------------------------------------------------------------------------
649GridSettingsTab::GridSettingsTab(TQWidget* parent) : WdgGridSettingsBase(parent)
650{
651 KisConfig cfg;
652 selectMainStyle->setCurrentItem(cfg.getGridMainStyle());
653 selectSubdivisionStyle->setCurrentItem(cfg.getGridSubdivisionStyle());
654
655#if KDE_IS_VERSION(3,4,0)
656 colorMain->setDefaultColor( TQColor( 99, 99, 99 ) );
657 colorSubdivision->setDefaultColor( TQColor( 200, 200, 200 ) );
658#endif
659 colorMain->setColor(cfg.getGridMainColor());
660 colorSubdivision->setColor(cfg.getGridSubdivisionColor());
661
662 intHSpacing->setValue( cfg.getGridHSpacing() );
663 intVSpacing->setValue( cfg.getGridVSpacing() );
664 intSubdivision->setValue( cfg.getGridSubdivisions());
665 intOffsetX->setValue( cfg.getGridOffsetX());
666 intOffsetY->setValue( cfg.getGridOffsetY());
667
668 linkSpacingToggled(true);
669 connect(bnLinkSpacing, TQ_SIGNAL(toggled(bool)), this, TQ_SLOT(linkSpacingToggled( bool )));
670
671 connect(intHSpacing, TQ_SIGNAL(valueChanged(int)),this,TQ_SLOT(spinBoxHSpacingChanged(int)));
672 connect(intVSpacing, TQ_SIGNAL(valueChanged(int)),this,TQ_SLOT(spinBoxVSpacingChanged(int)));
673
674
675}
676
677void GridSettingsTab::setDefault()
678{
679 KisConfig cfg;
680 selectMainStyle->setCurrentItem(0);
681 selectSubdivisionStyle->setCurrentItem(1);
682
683 colorMain->setColor(TQColor(99,99,99));
684 colorSubdivision->setColor(TQColor(199,199,199));
685
686 intHSpacing->setValue( 10 );
687 intVSpacing->setValue( 10 );
688 intSubdivision->setValue( 1 );
689 intOffsetX->setValue( 0 );
690 intOffsetY->setValue( 0 );
691}
692
693void GridSettingsTab::spinBoxHSpacingChanged(int v)
694{
695 if(m_linkSpacing)
696 {
697 intVSpacing->setValue(v);
698 }
699}
700
701void GridSettingsTab::spinBoxVSpacingChanged(int v )
702{
703 if(m_linkSpacing)
704 {
705 intHSpacing->setValue(v);
706 }
707}
708
709
710void GridSettingsTab::linkSpacingToggled(bool b)
711{
712 m_linkSpacing = b;
713
714 KoImageResource kir;
715 if (b) {
716 bnLinkSpacing->setPixmap(kir.chain());
717 }
718 else {
719 bnLinkSpacing->setPixmap(kir.chainBroken());
720 }
721}
722
723
724//---------------------------------------------------------------------------------------------------
725
726PreferencesDialog::PreferencesDialog( TQWidget* parent, const char* name )
727 : KDialogBase( IconList, i18n("Preferences"), Ok | Cancel | Help | Default /*| Apply*/, Ok, parent, name, true, true )
728{
729 TQVBox *vbox;
730
731 vbox = addVBoxPage( i18n( "General"), i18n( "General"), BarIcon( "misc", TDEIcon::SizeMedium ));
732 m_general = new GeneralTab( vbox );
733#ifdef HAVE_GL
734 vbox = addVBoxPage ( i18n( "Display" ), i18n( "Display" ), BarIcon( "tdescreensaver", TDEIcon::SizeMedium ));
735 m_displaySettings = new DisplaySettingsTab( vbox );
736#endif
737 vbox = addVBoxPage( i18n( "Color Management"), i18n( "Color"), BarIcon( "colorize", TDEIcon::SizeMedium ));
738 m_colorSettings = new ColorSettingsTab( vbox );
739
740 vbox = addVBoxPage( i18n( "Performance"), i18n( "Performance"), BarIcon( "fork", TDEIcon::SizeMedium ));
741 m_performanceSettings = new PerformanceTab ( vbox );
742
743 vbox = addVBoxPage ( i18n( "Tablet" ), i18n( "Tablet" ), BarIcon( "input-tablet", TDEIcon::SizeMedium ));
744 m_tabletSettings = new TabletSettingsTab( vbox );
745
746 vbox = addVBoxPage ( i18n( "Grid" ), i18n( "Grid" ), BarIcon( "grid", TDEIcon::SizeMedium ));
747 m_gridSettings = new GridSettingsTab( vbox );
748
749}
750
751PreferencesDialog::~PreferencesDialog()
752{
753}
754
755void PreferencesDialog::slotDefault()
756{
757 m_general->setDefault();
758 m_colorSettings->setDefault();
759 m_tabletSettings->setDefault();
760 m_performanceSettings->setDefault();
761#ifdef HAVE_GL
762 m_displaySettings->setDefault();
763#endif
764 m_gridSettings->setDefault();
765}
766
767bool PreferencesDialog::editPreferences()
768{
769 PreferencesDialog* dialog;
770
771 dialog = new PreferencesDialog();
772 bool baccept = ( dialog->exec() == Accepted );
773 if( baccept )
774 {
775 KisConfig cfg;
776 cfg.setCursorStyle(dialog->m_general->cursorStyle());
777 cfg.setDockability( dialog->m_general->dockability() );
778 cfg.setDockerFontSize( dialog->m_general->dockerFontSize() );
779
780 // Color settings
781 cfg.setMonitorProfile( dialog->m_colorSettings->m_page->cmbMonitorProfile->currentText());
782 cfg.setWorkingColorSpace( dialog->m_colorSettings->m_page->cmbWorkingColorSpace->currentText());
783 cfg.setPrinterColorSpace( dialog->m_colorSettings->m_page->cmbPrintingColorSpace->currentText());
784 cfg.setPrinterProfile( dialog->m_colorSettings->m_page->cmbPrintProfile->currentText());
785
786 cfg.setUseBlackPointCompensation( dialog->m_colorSettings->m_page->chkBlackpoint->isChecked());
787 cfg.setPasteBehaviour( dialog->m_colorSettings->m_page->grpPasteBehaviour->selectedId());
788 cfg.setRenderIntent( dialog->m_colorSettings->m_page->cmbMonitorIntent->currentItem());
789
790 // it's scaled from 0 - 6, but the config is in 0 - 300
791 cfg.setSwappiness(dialog->m_performanceSettings->m_swappiness->value() * 50);
792 cfg.setMaxTilesInMem(dialog->m_performanceSettings->m_maxTiles->value());
793 // let the tile manager know
794 KisTileManager::instance()->configChanged();
795
796 dialog->m_tabletSettings->applySettings();
797
798#ifdef HAVE_GL
799 cfg.setUseOpenGL(dialog->m_displaySettings->cbUseOpenGL->isChecked());
800 //cfg.setUseOpenGLShaders(dialog->m_displaySettings->cbUseOpenGLShaders->isChecked());
801#endif
802
803 // Grid settings
804 cfg.setGridMainStyle( dialog->m_gridSettings->selectMainStyle->currentItem() );
805 cfg.setGridSubdivisionStyle( dialog->m_gridSettings->selectSubdivisionStyle->currentItem() );
806
807 cfg.setGridMainColor( dialog->m_gridSettings->colorMain->color() );
808 cfg.setGridSubdivisionColor(dialog->m_gridSettings->colorSubdivision->color() );
809
810 cfg.setGridHSpacing( dialog->m_gridSettings->intHSpacing->value( ));
811 cfg.setGridVSpacing( dialog->m_gridSettings->intVSpacing->value( ));
812 cfg.setGridSubdivisions( dialog->m_gridSettings->intSubdivision->value( ));
813 cfg.setGridOffsetX( dialog->m_gridSettings->intOffsetX->value( ));
814 cfg.setGridOffsetY( dialog->m_gridSettings->intOffsetY->value( ));
815
816 }
817 delete dialog;
818 return baccept;
819}
820
821#include "kis_dlg_preferences.moc"
Display settings tab for preferences dialog.
"General"-tab for preferences dialog
Grid settings tab for preferences dialog.
TQValueVector< KisProfile * > profilesFor(KisColorSpaceFactory *cs)
Return the vector of profiles for this colorspacefactory.
_T get(const KisID &name) const
This function allow to get an object from its KisID.
Chalk has a large number of extensible resources.
Definition kis_id.h:57
"Performance"-tab for preferences dialog
Preferences dialog of KImageShop^WKrayon^WChalk.
Tablet settings tab for preferences dialog.