krita

kis_dlg_preferences.cc

00001 /*
00002  *  preferencesdlg.cc - part of KImageShop
00003  *
00004  *  Copyright (c) 1999 Michael Koch <koch@kde.org>
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, Boston, MA 02110-1301, USA.
00019  */
00020 
00021 #ifdef HAVE_CONFIG_H
00022 #include <config.h>
00023 #endif
00024 
00025 #include <qbitmap.h>
00026 #include <qbuttongroup.h>
00027 #include <qcheckbox.h>
00028 #include <qcursor.h>
00029 #include <qlabel.h>
00030 #include <qlayout.h>
00031 #include <qlineedit.h>
00032 #include <qpixmap.h>
00033 #include <qpushbutton.h>
00034 #include <qslider.h>
00035 #include <qtoolbutton.h>
00036 #include <qvbox.h>
00037 
00038 #ifdef HAVE_GL
00039 #include <qgl.h>
00040 #endif
00041 
00042 #include <KoImageResource.h>
00043 
00044 #include <kcolorbutton.h>
00045 #include <kcombobox.h>
00046 #include <kfiledialog.h>
00047 #include <kiconloader.h>
00048 #include <klineedit.h>
00049 #include <klocale.h>
00050 #include <knuminput.h>
00051 #include <kurlrequester.h>
00052 
00053 #include "squeezedcombobox.h"
00054 #include "kis_cmb_idlist.h"
00055 #include "kis_colorspace.h"
00056 #include "kis_colorspace_factory_registry.h"
00057 #include "kis_cursor.h"
00058 #include "kis_config.h"
00059 #include "kis_dlg_preferences.h"
00060 #include "kis_factory.h"
00061 #include "kis_id.h"
00062 #include "kis_meta_registry.h"
00063 #include "kis_profile.h"
00064 
00065 #include "kis_canvas.h"
00066 
00067 #include "wdgcolorsettings.h"
00068 #include "wdgperformancesettings.h"
00069 #include "wdggeneralsettings.h"
00070 
00071 // for the performance update
00072 #include "tiles/kis_tilemanager.h"
00073 
00074 GeneralTab::GeneralTab( QWidget *_parent, const char *_name )
00075     : WdgGeneralSettings( _parent, _name )
00076 {
00077 
00078     KisConfig cfg;
00079 
00080     m_cmbCursorShape->setCurrentItem(cfg.cursorStyle());
00081     grpDockability->setButton(cfg.dockability());
00082     numDockerFontSize->setValue((int)cfg.dockerFontSize());
00083 }
00084 
00085 void GeneralTab::setDefault()
00086 {
00087     KisConfig cfg;
00088 
00089     m_cmbCursorShape->setCurrentItem( cfg.getDefaultCursorStyle());
00090     grpDockability->setButton(cfg.getDefaultDockability());
00091     numDockerFontSize->setValue((int)(cfg.getDefaultDockerFontSize()));
00092 }
00093 
00094 enumCursorStyle GeneralTab::cursorStyle()
00095 {
00096     return (enumCursorStyle)m_cmbCursorShape->currentItem();
00097 }
00098 
00099 enumKoDockability GeneralTab::dockability()
00100 {
00101     return (enumKoDockability)grpDockability->selectedId();
00102 }
00103 
00104 float GeneralTab::dockerFontSize()
00105 {
00106     return (float)numDockerFontSize->value();
00107 }
00108 
00109 //---------------------------------------------------------------------------------------------------
00110 
00111 ColorSettingsTab::ColorSettingsTab(QWidget *parent, const char *name  )
00112     : QWidget(parent, name)
00113 {
00114     // XXX: Make sure only profiles that fit the specified color model
00115     // are shown in the profile combos
00116 
00117     QGridLayout * l = new QGridLayout( this, 1, 1, KDialog::marginHint(), KDialog::spacingHint());
00118     l->setMargin(0);
00119     m_page = new WdgColorSettings(this);
00120     l->addWidget( m_page, 0, 0);
00121 
00122     KisConfig cfg;
00123 
00124     m_page->cmbWorkingColorSpace->setIDList(KisMetaRegistry::instance()->csRegistry()->listKeys());
00125     m_page->cmbWorkingColorSpace->setCurrentText(cfg.workingColorSpace());
00126 
00127     m_page->cmbPrintingColorSpace->setIDList(KisMetaRegistry::instance()->csRegistry()->listKeys());
00128     m_page->cmbPrintingColorSpace->setCurrentText(cfg.printerColorSpace());
00129 
00130     refillMonitorProfiles(KisID("RGBA", ""));
00131     refillPrintProfiles(KisID(cfg.printerColorSpace(), ""));
00132 
00133     if(m_page->cmbMonitorProfile->contains(cfg.monitorProfile()))
00134         m_page->cmbMonitorProfile->setCurrentText(cfg.monitorProfile());
00135     if(m_page->cmbPrintProfile->contains(cfg.printerProfile()))
00136         m_page->cmbPrintProfile->setCurrentText(cfg.printerProfile());
00137     m_page->chkBlackpoint->setChecked(cfg.useBlackPointCompensation());
00138     m_page->grpPasteBehaviour->setButton(cfg.pasteBehaviour());
00139     m_page->cmbMonitorIntent->setCurrentItem(cfg.renderIntent());
00140 
00141     connect(m_page->cmbPrintingColorSpace, SIGNAL(activated(const KisID &)),
00142             this, SLOT(refillPrintProfiles(const KisID &)));
00143 }
00144 
00145 void ColorSettingsTab::setDefault()
00146 {
00147     m_page->cmbWorkingColorSpace->setCurrentText("RGBA");
00148 
00149     m_page->cmbPrintingColorSpace->setCurrentText("CMYK");
00150     refillPrintProfiles(KisID("CMYK", ""));
00151 
00152     m_page->chkBlackpoint->setChecked(false);
00153     m_page->cmbMonitorIntent->setCurrentItem(INTENT_PERCEPTUAL);
00154     m_page->grpPasteBehaviour->setButton(2);
00155 }
00156 
00157 
00158 void ColorSettingsTab::refillMonitorProfiles(const KisID & s)
00159 {
00160     KisColorSpaceFactory * csf = KisMetaRegistry::instance()->csRegistry()->get(s);
00161 
00162     m_page->cmbMonitorProfile->clear();
00163 
00164     if ( !csf )
00165     return;
00166 
00167     QValueVector<KisProfile *>  profileList = KisMetaRegistry::instance()->csRegistry()->profilesFor( csf );
00168         QValueVector<KisProfile *> ::iterator it;
00169         for ( it = profileList.begin(); it != profileList.end(); ++it ) {
00170             if ((*it)->deviceClass() == icSigDisplayClass)
00171                 m_page->cmbMonitorProfile->insertItem((*it)->productName());
00172     }
00173 
00174     m_page->cmbMonitorProfile->setCurrentText(csf->defaultProfile());
00175 }
00176 
00177 void ColorSettingsTab::refillPrintProfiles(const KisID & s)
00178 {
00179     KisColorSpaceFactory * csf = KisMetaRegistry::instance()->csRegistry()->get(s);
00180 
00181     m_page->cmbPrintProfile->clear();
00182 
00183     if ( !csf )
00184         return;
00185 
00186     QValueVector<KisProfile *>  profileList = KisMetaRegistry::instance()->csRegistry()->profilesFor( csf );
00187         QValueVector<KisProfile *> ::iterator it;
00188         for ( it = profileList.begin(); it != profileList.end(); ++it ) {
00189             if ((*it)->deviceClass() == icSigOutputClass)
00190                 m_page->cmbPrintProfile->insertItem((*it)->productName());
00191     }
00192 
00193     m_page->cmbPrintProfile->setCurrentText(csf->defaultProfile());
00194 }
00195 
00196 //---------------------------------------------------------------------------------------------------
00197 
00198 PerformanceTab::PerformanceTab(QWidget *parent, const char *name  )
00199     : WdgPerformanceSettings(parent, name)
00200 {
00201     // XXX: Make sure only profiles that fit the specified color model
00202     // are shown in the profile combos
00203 
00204     KisConfig cfg;
00205 
00206     // it's scaled from 0 - 6, but the config is in 0 - 300
00207     m_swappiness->setValue(cfg.swappiness() / 50);
00208     m_maxTiles->setValue(cfg.maxTilesInMem());
00209 }
00210 
00211 void PerformanceTab::setDefault()
00212 {
00213     m_swappiness->setValue(3);
00214     m_maxTiles->setValue(500);
00215 }
00216 
00217 //---------------------------------------------------------------------------------------------------
00218 
00219 TabletSettingsTab::TabletSettingsTab( QWidget *parent, const char *name)
00220     : WdgTabletSettings( parent, name )
00221 {
00222     KisConfig cfg;
00223     // XXX: Bad me -- hard-coded constant.
00224     slPressure->setValue( 100 - cfg.getPressureCorrection() );
00225 
00226 #ifdef EXTENDED_X11_TABLET_SUPPORT
00227     initTabletDevices();
00228 #else
00229     grpTabletDevices->hide();
00230 #endif
00231 }
00232 
00233 void TabletSettingsTab::setDefault()
00234 {
00235     KisConfig cfg;
00236     // XXX: Bad me -- hard-coded constant.
00237     slPressure->setValue(100 - cfg.getDefaultPressureCorrection());
00238 }
00239 
00240 void TabletSettingsTab::applySettings()
00241 {
00242     KisConfig cfg;
00243 
00244     // Pressure sensitivity setting == between 0 and 99
00245     cfg.setPressureCorrection(100 - slPressure->value());
00246 
00247 #ifdef EXTENDED_X11_TABLET_SUPPORT
00248     applyTabletDeviceSettings();
00249 #endif
00250 }
00251 
00252 #ifdef EXTENDED_X11_TABLET_SUPPORT
00253 TabletSettingsTab::DeviceSettings::DeviceSettings(KisCanvasWidget::X11TabletDevice *tabletDevice, bool enabled,
00254                                                   Q_INT32 xAxis, Q_INT32 yAxis, Q_INT32 pressureAxis, 
00255                                                   Q_INT32 xTiltAxis, Q_INT32 yTiltAxis, Q_INT32 wheelAxis,
00256                                                   Q_INT32 toolIDAxis, Q_INT32 serialNumberAxis)
00257     : m_tabletDevice(tabletDevice),
00258       m_enabled(enabled),
00259       m_xAxis(xAxis),
00260       m_yAxis(yAxis),
00261       m_pressureAxis(pressureAxis),
00262       m_xTiltAxis(xTiltAxis),
00263       m_yTiltAxis(yTiltAxis),
00264       m_wheelAxis(wheelAxis),
00265       m_toolIDAxis(toolIDAxis),
00266       m_serialNumberAxis(serialNumberAxis)
00267 {
00268 }
00269 
00270 TabletSettingsTab::DeviceSettings::DeviceSettings()
00271     : m_tabletDevice(0),
00272       m_enabled(false),
00273       m_xAxis(KisCanvasWidget::X11TabletDevice::NoAxis),
00274       m_yAxis(KisCanvasWidget::X11TabletDevice::NoAxis),
00275       m_pressureAxis(KisCanvasWidget::X11TabletDevice::NoAxis),
00276       m_xTiltAxis(KisCanvasWidget::X11TabletDevice::NoAxis),
00277       m_yTiltAxis(KisCanvasWidget::X11TabletDevice::NoAxis),
00278       m_wheelAxis(KisCanvasWidget::X11TabletDevice::NoAxis),
00279       m_toolIDAxis(KisCanvasWidget::X11TabletDevice::NoAxis),
00280       m_serialNumberAxis(KisCanvasWidget::X11TabletDevice::NoAxis)
00281 {
00282 }
00283 
00284 void TabletSettingsTab::DeviceSettings::applySettings()
00285 {
00286     m_tabletDevice->setEnabled(enabled());
00287     m_tabletDevice->setXAxis(xAxis());
00288     m_tabletDevice->setYAxis(yAxis());
00289     m_tabletDevice->setPressureAxis(pressureAxis());
00290     m_tabletDevice->setXTiltAxis(xTiltAxis());
00291     m_tabletDevice->setYTiltAxis(yTiltAxis());
00292     m_tabletDevice->setWheelAxis(wheelAxis());
00293     m_tabletDevice->setToolIDAxis(toolIDAxis());
00294     m_tabletDevice->setSerialNumberAxis(serialNumberAxis());
00295     m_tabletDevice->writeSettingsToConfig();
00296 }
00297 
00298 void TabletSettingsTab::DeviceSettings::setEnabled(bool enabled)
00299 {
00300     m_enabled = enabled;
00301 }
00302 
00303 bool TabletSettingsTab::DeviceSettings::enabled() const
00304 {
00305     return m_enabled;
00306 }
00307 
00308 Q_INT32 TabletSettingsTab::DeviceSettings::numAxes() const
00309 {
00310     return m_tabletDevice->numAxes();
00311 }
00312 
00313 void TabletSettingsTab::DeviceSettings::setXAxis(Q_INT32 axis)
00314 {
00315     m_xAxis = axis;
00316 }
00317 
00318 void TabletSettingsTab::DeviceSettings::setYAxis(Q_INT32 axis)
00319 {
00320     m_yAxis = axis;
00321 }
00322 
00323 void TabletSettingsTab::DeviceSettings::setPressureAxis(Q_INT32 axis)
00324 {
00325     m_pressureAxis = axis;
00326 }
00327 
00328 void TabletSettingsTab::DeviceSettings::setXTiltAxis(Q_INT32 axis)
00329 {
00330     m_xTiltAxis = axis;
00331 }
00332 
00333 void TabletSettingsTab::DeviceSettings::setYTiltAxis(Q_INT32 axis)
00334 {
00335     m_yTiltAxis = axis;
00336 }
00337 
00338 void TabletSettingsTab::DeviceSettings::setWheelAxis(Q_INT32 axis)
00339 {
00340     m_wheelAxis = axis;
00341 }
00342 
00343 void TabletSettingsTab::DeviceSettings::setToolIDAxis(Q_INT32 axis)
00344 {
00345     m_toolIDAxis = axis;
00346 }
00347 
00348 void TabletSettingsTab::DeviceSettings::setSerialNumberAxis(Q_INT32 axis)
00349 {
00350     m_serialNumberAxis = axis;
00351 }
00352 
00353 Q_INT32 TabletSettingsTab::DeviceSettings::xAxis() const
00354 {
00355     return m_xAxis;
00356 }
00357 
00358 Q_INT32 TabletSettingsTab::DeviceSettings::yAxis() const
00359 {
00360     return m_yAxis;
00361 }
00362 
00363 Q_INT32 TabletSettingsTab::DeviceSettings::pressureAxis() const
00364 {
00365     return m_pressureAxis;
00366 }
00367 
00368 Q_INT32 TabletSettingsTab::DeviceSettings::xTiltAxis() const
00369 {
00370     return m_xTiltAxis;
00371 }
00372 
00373 Q_INT32 TabletSettingsTab::DeviceSettings::yTiltAxis() const
00374 {
00375     return m_yTiltAxis;
00376 }
00377 
00378 Q_INT32 TabletSettingsTab::DeviceSettings::wheelAxis() const
00379 {
00380     return m_wheelAxis;
00381 }
00382 
00383 Q_INT32 TabletSettingsTab::DeviceSettings::toolIDAxis() const
00384 {
00385     return m_toolIDAxis;
00386 }
00387 
00388 Q_INT32 TabletSettingsTab::DeviceSettings::serialNumberAxis() const
00389 {
00390     return m_serialNumberAxis;
00391 }
00392 
00393 TabletSettingsTab::TabletDeviceSettingsDialog::TabletDeviceSettingsDialog(const QString& deviceName, DeviceSettings settings, 
00394                                                                           QWidget *parent, const char *name)
00395     : super(parent, name, true, "", Ok | Cancel)
00396 {
00397     setCaption(i18n("Configure %1").arg(deviceName));
00398 
00399     m_page = new WdgTabletDeviceSettings(this);
00400 
00401     setMainWidget(m_page);
00402     resize(m_page->sizeHint());
00403 
00404     for (Q_INT32 axis = 0; axis < settings.numAxes(); axis++) {
00405         QString axisString;
00406 
00407         axisString.setNum(axis);
00408 
00409         m_page->cbX->insertItem(axisString);
00410         m_page->cbY->insertItem(axisString);
00411         m_page->cbPressure->insertItem(axisString);
00412         m_page->cbXTilt->insertItem(axisString);
00413         m_page->cbYTilt->insertItem(axisString);
00414         m_page->cbWheel->insertItem(axisString);
00415 //         m_page->cbToolID->insertItem(axisString);
00416 //         m_page->cbSerialNumber->insertItem(axisString);
00417     }
00418 
00419     m_page->cbX->insertItem(i18n("None"));
00420     m_page->cbY->insertItem(i18n("None"));
00421     m_page->cbPressure->insertItem(i18n("None"));
00422     m_page->cbXTilt->insertItem(i18n("None"));
00423     m_page->cbYTilt->insertItem(i18n("None"));
00424     m_page->cbWheel->insertItem(i18n("None"));
00425 //     m_page->cbToolID->insertItem(i18n("None"));
00426 //     m_page->cbSerialNumber->insertItem(i18n("None"));
00427 
00428     if (settings.xAxis() != KisCanvasWidget::X11TabletDevice::NoAxis) {
00429         m_page->cbX->setCurrentItem(settings.xAxis());
00430     } else {
00431         m_page->cbX->setCurrentItem(settings.numAxes());
00432     }
00433 
00434     if (settings.yAxis() != KisCanvasWidget::X11TabletDevice::NoAxis) {
00435         m_page->cbY->setCurrentItem(settings.yAxis());
00436     } else {
00437         m_page->cbY->setCurrentItem(settings.numAxes());
00438     }
00439 
00440     if (settings.pressureAxis() != KisCanvasWidget::X11TabletDevice::NoAxis) {
00441         m_page->cbPressure->setCurrentItem(settings.pressureAxis());
00442     } else {
00443         m_page->cbPressure->setCurrentItem(settings.numAxes());
00444     }
00445 
00446     if (settings.xTiltAxis() != KisCanvasWidget::X11TabletDevice::NoAxis) {
00447         m_page->cbXTilt->setCurrentItem(settings.xTiltAxis());
00448     } else {
00449         m_page->cbXTilt->setCurrentItem(settings.numAxes());
00450     }
00451 
00452     if (settings.yTiltAxis() != KisCanvasWidget::X11TabletDevice::NoAxis) {
00453         m_page->cbYTilt->setCurrentItem(settings.yTiltAxis());
00454     } else {
00455         m_page->cbYTilt->setCurrentItem(settings.numAxes());
00456     }
00457 
00458     if (settings.wheelAxis() != KisCanvasWidget::X11TabletDevice::NoAxis) {
00459         m_page->cbWheel->setCurrentItem(settings.wheelAxis());
00460     } else {
00461         m_page->cbWheel->setCurrentItem(settings.numAxes());
00462     }
00463 
00464 //     if (settings.toolIDAxis() != KisCanvasWidget::X11TabletDevice::NoAxis) {
00465 //         m_page->cbToolID->setCurrentItem(settings.toolIDAxis());
00466 //     } else {
00467 //         m_page->cbToolID->setCurrentItem(settings.numAxes());
00468 //     }
00469 //
00470 //     if (settings.serialNumberAxis() != KisCanvasWidget::X11TabletDevice::NoAxis) {
00471 //         m_page->cbSerialNumber->setCurrentItem(settings.serialNumberAxis());
00472 //     } else {
00473 //         m_page->cbSerialNumber->setCurrentItem(settings.numAxes());
00474 //     }
00475 
00476     m_settings = settings;
00477 }
00478 
00479 TabletSettingsTab::TabletDeviceSettingsDialog::~TabletDeviceSettingsDialog()
00480 {
00481     delete m_page;
00482 }
00483 
00484 TabletSettingsTab::DeviceSettings TabletSettingsTab::TabletDeviceSettingsDialog::settings()
00485 {
00486     const Q_INT32 noAxis = m_settings.numAxes();
00487 
00488     if (m_page->cbX->currentItem() != noAxis ) {
00489         m_settings.setXAxis(m_page->cbX->currentItem());
00490     } else {
00491         m_settings.setXAxis(KisCanvasWidget::X11TabletDevice::NoAxis);
00492     }
00493 
00494     if (m_page->cbY->currentItem() != noAxis ) {
00495         m_settings.setYAxis(m_page->cbY->currentItem());
00496     } else {
00497         m_settings.setYAxis(KisCanvasWidget::X11TabletDevice::NoAxis);
00498     }
00499 
00500     if (m_page->cbPressure->currentItem() != noAxis ) {
00501         m_settings.setPressureAxis(m_page->cbPressure->currentItem());
00502     } else {
00503         m_settings.setPressureAxis(KisCanvasWidget::X11TabletDevice::NoAxis);
00504     }
00505 
00506     if (m_page->cbXTilt->currentItem() != noAxis ) {
00507         m_settings.setXTiltAxis(m_page->cbXTilt->currentItem());
00508     } else {
00509         m_settings.setXTiltAxis(KisCanvasWidget::X11TabletDevice::NoAxis);
00510     }
00511 
00512     if (m_page->cbYTilt->currentItem() != noAxis ) {
00513         m_settings.setYTiltAxis(m_page->cbYTilt->currentItem());
00514     } else {
00515         m_settings.setYTiltAxis(KisCanvasWidget::X11TabletDevice::NoAxis);
00516     }
00517 
00518     if (m_page->cbWheel->currentItem() != noAxis ) {
00519         m_settings.setWheelAxis(m_page->cbWheel->currentItem());
00520     } else {
00521         m_settings.setWheelAxis(KisCanvasWidget::X11TabletDevice::NoAxis);
00522     }
00523 
00524 //     if (m_page->cbToolID->currentItem() != noAxis ) {
00525 //         m_settings.setToolIDAxis(m_page->cbToolID->currentItem());
00526 //     } else {
00527 //         m_settings.setToolIDAxis(KisCanvasWidget::X11TabletDevice::NoAxis);
00528 //     }
00529 //
00530 //     if (m_page->cbSerialNumber->currentItem() != noAxis ) {
00531 //         m_settings.setSerialNumberAxis(m_page->cbSerialNumber->currentItem());
00532 //     } else {
00533 //         m_settings.setSerialNumberAxis(KisCanvasWidget::X11TabletDevice::NoAxis);
00534 //     }
00535 
00536     return m_settings;
00537 }
00538 
00539 void TabletSettingsTab::initTabletDevices()
00540 {
00541     connect(cbTabletDevice, SIGNAL(activated(int)), SLOT(slotActivateDevice(int)));
00542     connect(chkEnableTabletDevice, SIGNAL(toggled(bool)), SLOT(slotSetDeviceEnabled(bool)));
00543     connect(btnConfigureTabletDevice, SIGNAL(clicked()), SLOT(slotConfigureDevice()));
00544 
00545     KisCanvasWidget::X11XIDTabletDeviceMap& tabletDevices = KisCanvasWidget::tabletDeviceMap();
00546 
00547     cbTabletDevice->clear();
00548 
00549     if (!tabletDevices.empty()) {
00550         KisCanvasWidget::X11XIDTabletDeviceMap::iterator it;
00551 
00552         for (it = tabletDevices.begin(); it != tabletDevices.end(); ++it) {
00553             KisCanvasWidget::X11TabletDevice& device = (*it).second;
00554 
00555             m_deviceSettings.append(DeviceSettings(&device, device.enabled(), device.xAxis(), device.yAxis(), 
00556                                                    device.pressureAxis(), device.xTiltAxis(), device.yTiltAxis(), device.wheelAxis(),
00557                                                    device.toolIDAxis(), device.serialNumberAxis()));
00558             cbTabletDevice->insertItem(device.name());
00559         }
00560         slotActivateDevice(0);
00561     } else {
00562         cbTabletDevice->insertItem(i18n("No devices detected"));
00563         cbTabletDevice->setEnabled(false);
00564         chkEnableTabletDevice->setEnabled(false);
00565         btnConfigureTabletDevice->setEnabled(false);
00566     }
00567 }
00568 
00569 void TabletSettingsTab::slotActivateDevice(int deviceIndex)
00570 {
00571     bool deviceEnabled = m_deviceSettings[deviceIndex].enabled();
00572 
00573     chkEnableTabletDevice->setChecked(deviceEnabled);
00574     slotSetDeviceEnabled(deviceEnabled);
00575 }
00576 
00577 void TabletSettingsTab::slotSetDeviceEnabled(bool enabled)
00578 {
00579     btnConfigureTabletDevice->setEnabled(enabled);
00580     m_deviceSettings[cbTabletDevice->currentItem()].setEnabled(enabled);
00581 }
00582 
00583 void TabletSettingsTab::slotConfigureDevice()
00584 {
00585     TabletDeviceSettingsDialog dialog(cbTabletDevice->currentText(), m_deviceSettings[cbTabletDevice->currentItem()],
00586                                       this, "TabletDeviceSettings");
00587 
00588     if (dialog.exec() == QDialog::Accepted)
00589     {
00590         m_deviceSettings[cbTabletDevice->currentItem()] = dialog.settings();
00591     }
00592 }
00593 
00594 void TabletSettingsTab::applyTabletDeviceSettings()
00595 {
00596     for (Q_UINT32 deviceIndex = 0; deviceIndex < m_deviceSettings.count(); ++deviceIndex) {
00597         m_deviceSettings[deviceIndex].applySettings();
00598     }
00599 }
00600 
00601 #else // EXTENDED_X11_TABLET_SUPPORT
00602 
00603 // Fix compilation. moc seems to not see the undefined symbol needed
00604 // for these slots to be declared.
00605 void TabletSettingsTab::slotActivateDevice(int /*deviceIndex*/)
00606 {
00607 }
00608 
00609 void TabletSettingsTab::slotSetDeviceEnabled(bool /*enabled*/)
00610 {
00611 }
00612 
00613 void TabletSettingsTab::slotConfigureDevice()
00614 {
00615 }
00616 
00617 void TabletSettingsTab::applyTabletDeviceSettings()
00618 {
00619 }
00620 
00621 #endif
00622 
00623 //---------------------------------------------------------------------------------------------------
00624 
00625 DisplaySettingsTab::DisplaySettingsTab( QWidget *parent, const char *name)
00626     : WdgDisplaySettings( parent, name )
00627 {
00628 #ifdef HAVE_GL
00629     KisConfig cfg;
00630 
00631     if (!QGLFormat::hasOpenGL()) {
00632         cbUseOpenGL->setEnabled(false);
00633         //cbUseOpenGLShaders->setEnabled(false);
00634     } else {
00635         cbUseOpenGL->setChecked(cfg.useOpenGL());
00636         //cbUseOpenGLShaders->setChecked(cfg.useOpenGLShaders());
00637         //cbUseOpenGLShaders->setEnabled(cfg.useOpenGL());
00638     }
00639 #else
00640     cbUseOpenGL->setEnabled(false);
00641     //cbUseOpenGLShaders->setEnabled(false);
00642 #endif
00643 
00644     connect(cbUseOpenGL, SIGNAL(toggled(bool)), SLOT(slotUseOpenGLToggled(bool)));
00645 }
00646 
00647 void DisplaySettingsTab::setDefault()
00648 {
00649     cbUseOpenGL->setChecked(false);
00650     //cbUseOpenGLShaders->setChecked(false);
00651     //cbUseOpenGLShaders->setEnabled(false);
00652 }
00653 
00654 void DisplaySettingsTab::slotUseOpenGLToggled(bool /*isChecked*/)
00655 {
00656     //cbUseOpenGLShaders->setEnabled(isChecked);
00657 }
00658 
00659 //---------------------------------------------------------------------------------------------------
00660 GridSettingsTab::GridSettingsTab(QWidget* parent) : WdgGridSettingsBase(parent)
00661 {
00662     KisConfig cfg;
00663     selectMainStyle->setCurrentItem(cfg.getGridMainStyle());
00664     selectSubdivisionStyle->setCurrentItem(cfg.getGridSubdivisionStyle());
00665     
00666     colorMain->setColor(cfg.getGridMainColor());
00667     colorSubdivision->setColor(cfg.getGridSubdivisionColor());
00668     
00669     intHSpacing->setValue( cfg.getGridHSpacing() );
00670     intVSpacing->setValue( cfg.getGridVSpacing() );
00671     intSubdivision->setValue( cfg.getGridSubdivisions());
00672     intOffsetX->setValue( cfg.getGridOffsetX());
00673     intOffsetY->setValue( cfg.getGridOffsetY());
00674     
00675     linkSpacingToggled(true);
00676     connect(bnLinkSpacing, SIGNAL(toggled(bool)), this, SLOT(linkSpacingToggled( bool )));
00677     
00678     connect(intHSpacing, SIGNAL(valueChanged(int)),this,SLOT(spinBoxHSpacingChanged(int)));
00679     connect(intVSpacing, SIGNAL(valueChanged(int)),this,SLOT(spinBoxVSpacingChanged(int)));
00680 
00681     
00682 }
00683 
00684 void GridSettingsTab::setDefault()
00685 {
00686     KisConfig cfg;
00687     selectMainStyle->setCurrentItem(0);
00688     selectSubdivisionStyle->setCurrentItem(1);
00689     
00690     colorMain->setColor(QColor(99,99,99));
00691     colorSubdivision->setColor(QColor(199,199,199));
00692     
00693     intHSpacing->setValue( 10 );
00694     intVSpacing->setValue( 10 );
00695     intSubdivision->setValue( 1 );
00696     intOffsetX->setValue( 0 );
00697     intOffsetY->setValue( 0 );
00698 }
00699 
00700 void GridSettingsTab::spinBoxHSpacingChanged(int v)
00701 {
00702     if(m_linkSpacing)
00703     {
00704         intVSpacing->setValue(v);
00705     }
00706 }
00707 
00708 void GridSettingsTab::spinBoxVSpacingChanged(int v )
00709 {
00710     if(m_linkSpacing)
00711     {
00712         intHSpacing->setValue(v);
00713     }
00714 }
00715 
00716 
00717 void GridSettingsTab::linkSpacingToggled(bool b)
00718 {
00719     m_linkSpacing = b;
00720     
00721     KoImageResource kir;
00722     if (b) {
00723         bnLinkSpacing->setPixmap(kir.chain());
00724     }
00725     else {
00726         bnLinkSpacing->setPixmap(kir.chainBroken());
00727     }
00728 }
00729 
00730 
00731 //---------------------------------------------------------------------------------------------------
00732 
00733 PreferencesDialog::PreferencesDialog( QWidget* parent, const char* name )
00734     : KDialogBase( IconList, i18n("Preferences"), Ok | Cancel | Help | Default /*| Apply*/, Ok, parent, name, true, true )
00735 {
00736     QVBox *vbox;
00737 
00738     vbox = addVBoxPage( i18n( "General"), i18n( "General"), BarIcon( "misc", KIcon::SizeMedium ));
00739     m_general = new GeneralTab( vbox );
00740 #ifdef HAVE_GL
00741     vbox = addVBoxPage ( i18n( "Display" ), i18n( "Display" ), BarIcon( "kscreensaver", KIcon::SizeMedium ));
00742     m_displaySettings = new DisplaySettingsTab( vbox );
00743 #endif
00744     vbox = addVBoxPage( i18n( "Color Management"), i18n( "Color"), BarIcon( "colorize", KIcon::SizeMedium ));
00745     m_colorSettings = new ColorSettingsTab( vbox );
00746 
00747     vbox = addVBoxPage( i18n( "Performance"), i18n( "Performance"), BarIcon( "fork", KIcon::SizeMedium ));
00748     m_performanceSettings = new PerformanceTab ( vbox );
00749 
00750     vbox = addVBoxPage ( i18n( "Tablet" ), i18n( "Tablet" ), BarIcon( "tablet", KIcon::SizeMedium ));
00751     m_tabletSettings = new TabletSettingsTab( vbox );
00752 
00753     vbox = addVBoxPage ( i18n( "Grid" ), i18n( "Grid" ), BarIcon( "grid", KIcon::SizeMedium ));
00754     m_gridSettings = new GridSettingsTab( vbox );
00755 
00756 }
00757 
00758 PreferencesDialog::~PreferencesDialog()
00759 {
00760 }
00761 
00762 void PreferencesDialog::slotDefault()
00763 {
00764     m_general->setDefault();
00765     m_colorSettings->setDefault();
00766     m_tabletSettings->setDefault();
00767     m_performanceSettings->setDefault();
00768     m_displaySettings->setDefault();
00769     m_gridSettings->setDefault();
00770 }
00771 
00772 bool PreferencesDialog::editPreferences()
00773 {
00774     PreferencesDialog* dialog;
00775 
00776     dialog = new PreferencesDialog();
00777         bool baccept = ( dialog->exec() == Accepted );
00778     if( baccept )
00779     {
00780         KisConfig cfg;
00781         cfg.setCursorStyle(dialog->m_general->cursorStyle());
00782         cfg.setDockability( dialog->m_general->dockability() );
00783         cfg.setDockerFontSize( dialog->m_general->dockerFontSize() );
00784 
00785         // Color settings
00786         cfg.setMonitorProfile( dialog->m_colorSettings->m_page->cmbMonitorProfile->currentText());
00787         cfg.setWorkingColorSpace( dialog->m_colorSettings->m_page->cmbWorkingColorSpace->currentText());
00788         cfg.setPrinterColorSpace( dialog->m_colorSettings->m_page->cmbPrintingColorSpace->currentText());
00789         cfg.setPrinterProfile( dialog->m_colorSettings->m_page->cmbPrintProfile->currentText());
00790 
00791         cfg.setUseBlackPointCompensation( dialog->m_colorSettings->m_page->chkBlackpoint->isChecked());
00792         cfg.setPasteBehaviour( dialog->m_colorSettings->m_page->grpPasteBehaviour->selectedId());
00793         cfg.setRenderIntent( dialog->m_colorSettings->m_page->cmbMonitorIntent->currentItem());
00794 
00795         // it's scaled from 0 - 6, but the config is in 0 - 300
00796         cfg.setSwappiness(dialog->m_performanceSettings->m_swappiness->value() * 50);
00797         cfg.setMaxTilesInMem(dialog->m_performanceSettings->m_maxTiles->value());
00798         // let the tile manager know
00799         KisTileManager::instance()->configChanged();
00800 
00801         dialog->m_tabletSettings->applySettings();
00802 
00803         cfg.setUseOpenGL(dialog->m_displaySettings->cbUseOpenGL->isChecked());
00804         //cfg.setUseOpenGLShaders(dialog->m_displaySettings->cbUseOpenGLShaders->isChecked());
00805     
00806         // Grid settings
00807         cfg.setGridMainStyle( dialog->m_gridSettings->selectMainStyle->currentItem() );
00808         cfg.setGridSubdivisionStyle( dialog->m_gridSettings->selectSubdivisionStyle->currentItem() );
00809 
00810         cfg.setGridMainColor( dialog->m_gridSettings->colorMain->color() );
00811         cfg.setGridSubdivisionColor(dialog->m_gridSettings->colorSubdivision->color() );
00812 
00813         cfg.setGridHSpacing( dialog->m_gridSettings->intHSpacing->value( ));
00814         cfg.setGridVSpacing( dialog->m_gridSettings->intVSpacing->value( ));
00815         cfg.setGridSubdivisions( dialog->m_gridSettings->intSubdivision->value( ));
00816         cfg.setGridOffsetX( dialog->m_gridSettings->intOffsetX->value( ));
00817         cfg.setGridOffsetY( dialog->m_gridSettings->intOffsetY->value( ));
00818 
00819     }
00820     delete dialog;
00821     return baccept;
00822 }
00823 
00824 #include "kis_dlg_preferences.moc"
KDE Home | KDE Accessibility Home | Description of Access Keys