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 #ifdef EXTENDED_X11_TABLET_SUPPORT
00223     initTabletDevices();
00224 #else
00225     grpTabletDevices->hide();
00226 #endif
00227 }
00228 
00229 void TabletSettingsTab::setDefault()
00230 {
00231 }
00232 
00233 void TabletSettingsTab::applySettings()
00234 {
00235 
00236 #ifdef EXTENDED_X11_TABLET_SUPPORT
00237     applyTabletDeviceSettings();
00238 #endif
00239 }
00240 
00241 #ifdef EXTENDED_X11_TABLET_SUPPORT
00242 TabletSettingsTab::DeviceSettings::DeviceSettings(KisCanvasWidget::X11TabletDevice *tabletDevice, bool enabled,
00243                                                   Q_INT32 xAxis, Q_INT32 yAxis, Q_INT32 pressureAxis,
00244                                                   Q_INT32 xTiltAxis, Q_INT32 yTiltAxis, Q_INT32 wheelAxis,
00245                                                   Q_INT32 toolIDAxis, Q_INT32 serialNumberAxis)
00246     : m_tabletDevice(tabletDevice),
00247       m_enabled(enabled),
00248       m_xAxis(xAxis),
00249       m_yAxis(yAxis),
00250       m_pressureAxis(pressureAxis),
00251       m_xTiltAxis(xTiltAxis),
00252       m_yTiltAxis(yTiltAxis),
00253       m_wheelAxis(wheelAxis),
00254       m_toolIDAxis(toolIDAxis),
00255       m_serialNumberAxis(serialNumberAxis)
00256 {
00257 }
00258 
00259 TabletSettingsTab::DeviceSettings::DeviceSettings()
00260     : m_tabletDevice(0),
00261       m_enabled(false),
00262       m_xAxis(KisCanvasWidget::X11TabletDevice::NoAxis),
00263       m_yAxis(KisCanvasWidget::X11TabletDevice::NoAxis),
00264       m_pressureAxis(KisCanvasWidget::X11TabletDevice::NoAxis),
00265       m_xTiltAxis(KisCanvasWidget::X11TabletDevice::NoAxis),
00266       m_yTiltAxis(KisCanvasWidget::X11TabletDevice::NoAxis),
00267       m_wheelAxis(KisCanvasWidget::X11TabletDevice::NoAxis),
00268       m_toolIDAxis(KisCanvasWidget::X11TabletDevice::NoAxis),
00269       m_serialNumberAxis(KisCanvasWidget::X11TabletDevice::NoAxis)
00270 {
00271 }
00272 
00273 void TabletSettingsTab::DeviceSettings::applySettings()
00274 {
00275     m_tabletDevice->setEnabled(enabled());
00276     m_tabletDevice->setXAxis(xAxis());
00277     m_tabletDevice->setYAxis(yAxis());
00278     m_tabletDevice->setPressureAxis(pressureAxis());
00279     m_tabletDevice->setXTiltAxis(xTiltAxis());
00280     m_tabletDevice->setYTiltAxis(yTiltAxis());
00281     m_tabletDevice->setWheelAxis(wheelAxis());
00282     m_tabletDevice->setToolIDAxis(toolIDAxis());
00283     m_tabletDevice->setSerialNumberAxis(serialNumberAxis());
00284     m_tabletDevice->writeSettingsToConfig();
00285 }
00286 
00287 void TabletSettingsTab::DeviceSettings::setEnabled(bool enabled)
00288 {
00289     m_enabled = enabled;
00290 }
00291 
00292 bool TabletSettingsTab::DeviceSettings::enabled() const
00293 {
00294     return m_enabled;
00295 }
00296 
00297 Q_INT32 TabletSettingsTab::DeviceSettings::numAxes() const
00298 {
00299     return m_tabletDevice->numAxes();
00300 }
00301 
00302 void TabletSettingsTab::DeviceSettings::setXAxis(Q_INT32 axis)
00303 {
00304     m_xAxis = axis;
00305 }
00306 
00307 void TabletSettingsTab::DeviceSettings::setYAxis(Q_INT32 axis)
00308 {
00309     m_yAxis = axis;
00310 }
00311 
00312 void TabletSettingsTab::DeviceSettings::setPressureAxis(Q_INT32 axis)
00313 {
00314     m_pressureAxis = axis;
00315 }
00316 
00317 void TabletSettingsTab::DeviceSettings::setXTiltAxis(Q_INT32 axis)
00318 {
00319     m_xTiltAxis = axis;
00320 }
00321 
00322 void TabletSettingsTab::DeviceSettings::setYTiltAxis(Q_INT32 axis)
00323 {
00324     m_yTiltAxis = axis;
00325 }
00326 
00327 void TabletSettingsTab::DeviceSettings::setWheelAxis(Q_INT32 axis)
00328 {
00329     m_wheelAxis = axis;
00330 }
00331 
00332 void TabletSettingsTab::DeviceSettings::setToolIDAxis(Q_INT32 axis)
00333 {
00334     m_toolIDAxis = axis;
00335 }
00336 
00337 void TabletSettingsTab::DeviceSettings::setSerialNumberAxis(Q_INT32 axis)
00338 {
00339     m_serialNumberAxis = axis;
00340 }
00341 
00342 Q_INT32 TabletSettingsTab::DeviceSettings::xAxis() const
00343 {
00344     return m_xAxis;
00345 }
00346 
00347 Q_INT32 TabletSettingsTab::DeviceSettings::yAxis() const
00348 {
00349     return m_yAxis;
00350 }
00351 
00352 Q_INT32 TabletSettingsTab::DeviceSettings::pressureAxis() const
00353 {
00354     return m_pressureAxis;
00355 }
00356 
00357 Q_INT32 TabletSettingsTab::DeviceSettings::xTiltAxis() const
00358 {
00359     return m_xTiltAxis;
00360 }
00361 
00362 Q_INT32 TabletSettingsTab::DeviceSettings::yTiltAxis() const
00363 {
00364     return m_yTiltAxis;
00365 }
00366 
00367 Q_INT32 TabletSettingsTab::DeviceSettings::wheelAxis() const
00368 {
00369     return m_wheelAxis;
00370 }
00371 
00372 Q_INT32 TabletSettingsTab::DeviceSettings::toolIDAxis() const
00373 {
00374     return m_toolIDAxis;
00375 }
00376 
00377 Q_INT32 TabletSettingsTab::DeviceSettings::serialNumberAxis() const
00378 {
00379     return m_serialNumberAxis;
00380 }
00381 
00382 TabletSettingsTab::TabletDeviceSettingsDialog::TabletDeviceSettingsDialog(const QString& deviceName, DeviceSettings settings,
00383                                                                           QWidget *parent, const char *name)
00384     : super(parent, name, true, "", Ok | Cancel)
00385 {
00386     setCaption(i18n("Configure %1").arg(deviceName));
00387 
00388     m_page = new WdgTabletDeviceSettings(this);
00389 
00390     setMainWidget(m_page);
00391     resize(m_page->sizeHint());
00392 
00393     for (Q_INT32 axis = 0; axis < settings.numAxes(); axis++) {
00394         QString axisString;
00395 
00396         axisString.setNum(axis);
00397 
00398         m_page->cbX->insertItem(axisString);
00399         m_page->cbY->insertItem(axisString);
00400         m_page->cbPressure->insertItem(axisString);
00401         m_page->cbXTilt->insertItem(axisString);
00402         m_page->cbYTilt->insertItem(axisString);
00403         m_page->cbWheel->insertItem(axisString);
00404 //         m_page->cbToolID->insertItem(axisString);
00405 //         m_page->cbSerialNumber->insertItem(axisString);
00406     }
00407 
00408     m_page->cbX->insertItem(i18n("None"));
00409     m_page->cbY->insertItem(i18n("None"));
00410     m_page->cbPressure->insertItem(i18n("None"));
00411     m_page->cbXTilt->insertItem(i18n("None"));
00412     m_page->cbYTilt->insertItem(i18n("None"));
00413     m_page->cbWheel->insertItem(i18n("None"));
00414 //     m_page->cbToolID->insertItem(i18n("None"));
00415 //     m_page->cbSerialNumber->insertItem(i18n("None"));
00416 
00417     if (settings.xAxis() != KisCanvasWidget::X11TabletDevice::NoAxis) {
00418         m_page->cbX->setCurrentItem(settings.xAxis());
00419     } else {
00420         m_page->cbX->setCurrentItem(settings.numAxes());
00421     }
00422 
00423     if (settings.yAxis() != KisCanvasWidget::X11TabletDevice::NoAxis) {
00424         m_page->cbY->setCurrentItem(settings.yAxis());
00425     } else {
00426         m_page->cbY->setCurrentItem(settings.numAxes());
00427     }
00428 
00429     if (settings.pressureAxis() != KisCanvasWidget::X11TabletDevice::NoAxis) {
00430         m_page->cbPressure->setCurrentItem(settings.pressureAxis());
00431     } else {
00432         m_page->cbPressure->setCurrentItem(settings.numAxes());
00433     }
00434 
00435     if (settings.xTiltAxis() != KisCanvasWidget::X11TabletDevice::NoAxis) {
00436         m_page->cbXTilt->setCurrentItem(settings.xTiltAxis());
00437     } else {
00438         m_page->cbXTilt->setCurrentItem(settings.numAxes());
00439     }
00440 
00441     if (settings.yTiltAxis() != KisCanvasWidget::X11TabletDevice::NoAxis) {
00442         m_page->cbYTilt->setCurrentItem(settings.yTiltAxis());
00443     } else {
00444         m_page->cbYTilt->setCurrentItem(settings.numAxes());
00445     }
00446 
00447     if (settings.wheelAxis() != KisCanvasWidget::X11TabletDevice::NoAxis) {
00448         m_page->cbWheel->setCurrentItem(settings.wheelAxis());
00449     } else {
00450         m_page->cbWheel->setCurrentItem(settings.numAxes());
00451     }
00452 
00453 //     if (settings.toolIDAxis() != KisCanvasWidget::X11TabletDevice::NoAxis) {
00454 //         m_page->cbToolID->setCurrentItem(settings.toolIDAxis());
00455 //     } else {
00456 //         m_page->cbToolID->setCurrentItem(settings.numAxes());
00457 //     }
00458 //
00459 //     if (settings.serialNumberAxis() != KisCanvasWidget::X11TabletDevice::NoAxis) {
00460 //         m_page->cbSerialNumber->setCurrentItem(settings.serialNumberAxis());
00461 //     } else {
00462 //         m_page->cbSerialNumber->setCurrentItem(settings.numAxes());
00463 //     }
00464 
00465     m_settings = settings;
00466 }
00467 
00468 TabletSettingsTab::TabletDeviceSettingsDialog::~TabletDeviceSettingsDialog()
00469 {
00470     delete m_page;
00471 }
00472 
00473 TabletSettingsTab::DeviceSettings TabletSettingsTab::TabletDeviceSettingsDialog::settings()
00474 {
00475     const Q_INT32 noAxis = m_settings.numAxes();
00476 
00477     if (m_page->cbX->currentItem() != noAxis ) {
00478         m_settings.setXAxis(m_page->cbX->currentItem());
00479     } else {
00480         m_settings.setXAxis(KisCanvasWidget::X11TabletDevice::NoAxis);
00481     }
00482 
00483     if (m_page->cbY->currentItem() != noAxis ) {
00484         m_settings.setYAxis(m_page->cbY->currentItem());
00485     } else {
00486         m_settings.setYAxis(KisCanvasWidget::X11TabletDevice::NoAxis);
00487     }
00488 
00489     if (m_page->cbPressure->currentItem() != noAxis ) {
00490         m_settings.setPressureAxis(m_page->cbPressure->currentItem());
00491     } else {
00492         m_settings.setPressureAxis(KisCanvasWidget::X11TabletDevice::NoAxis);
00493     }
00494 
00495     if (m_page->cbXTilt->currentItem() != noAxis ) {
00496         m_settings.setXTiltAxis(m_page->cbXTilt->currentItem());
00497     } else {
00498         m_settings.setXTiltAxis(KisCanvasWidget::X11TabletDevice::NoAxis);
00499     }
00500 
00501     if (m_page->cbYTilt->currentItem() != noAxis ) {
00502         m_settings.setYTiltAxis(m_page->cbYTilt->currentItem());
00503     } else {
00504         m_settings.setYTiltAxis(KisCanvasWidget::X11TabletDevice::NoAxis);
00505     }
00506 
00507     if (m_page->cbWheel->currentItem() != noAxis ) {
00508         m_settings.setWheelAxis(m_page->cbWheel->currentItem());
00509     } else {
00510         m_settings.setWheelAxis(KisCanvasWidget::X11TabletDevice::NoAxis);
00511     }
00512 
00513 //     if (m_page->cbToolID->currentItem() != noAxis ) {
00514 //         m_settings.setToolIDAxis(m_page->cbToolID->currentItem());
00515 //     } else {
00516 //         m_settings.setToolIDAxis(KisCanvasWidget::X11TabletDevice::NoAxis);
00517 //     }
00518 //
00519 //     if (m_page->cbSerialNumber->currentItem() != noAxis ) {
00520 //         m_settings.setSerialNumberAxis(m_page->cbSerialNumber->currentItem());
00521 //     } else {
00522 //         m_settings.setSerialNumberAxis(KisCanvasWidget::X11TabletDevice::NoAxis);
00523 //     }
00524 
00525     return m_settings;
00526 }
00527 
00528 void TabletSettingsTab::initTabletDevices()
00529 {
00530     connect(cbTabletDevice, SIGNAL(activated(int)), SLOT(slotActivateDevice(int)));
00531     connect(chkEnableTabletDevice, SIGNAL(toggled(bool)), SLOT(slotSetDeviceEnabled(bool)));
00532     connect(btnConfigureTabletDevice, SIGNAL(clicked()), SLOT(slotConfigureDevice()));
00533 
00534     KisCanvasWidget::X11XIDTabletDeviceMap& tabletDevices = KisCanvasWidget::tabletDeviceMap();
00535 
00536     cbTabletDevice->clear();
00537 
00538     if (!tabletDevices.empty()) {
00539         KisCanvasWidget::X11XIDTabletDeviceMap::iterator it;
00540 
00541         for (it = tabletDevices.begin(); it != tabletDevices.end(); ++it) {
00542             KisCanvasWidget::X11TabletDevice& device = (*it).second;
00543 
00544             m_deviceSettings.append(DeviceSettings(&device, device.enabled(), device.xAxis(), device.yAxis(),
00545                                                    device.pressureAxis(), device.xTiltAxis(), device.yTiltAxis(), device.wheelAxis(),
00546                                                    device.toolIDAxis(), device.serialNumberAxis()));
00547             cbTabletDevice->insertItem(device.name());
00548         }
00549         slotActivateDevice(0);
00550     } else {
00551         cbTabletDevice->insertItem(i18n("No devices detected"));
00552         cbTabletDevice->setEnabled(false);
00553         chkEnableTabletDevice->setEnabled(false);
00554         btnConfigureTabletDevice->setEnabled(false);
00555     }
00556 }
00557 
00558 void TabletSettingsTab::slotActivateDevice(int deviceIndex)
00559 {
00560     bool deviceEnabled = m_deviceSettings[deviceIndex].enabled();
00561 
00562     chkEnableTabletDevice->setChecked(deviceEnabled);
00563     slotSetDeviceEnabled(deviceEnabled);
00564 }
00565 
00566 void TabletSettingsTab::slotSetDeviceEnabled(bool enabled)
00567 {
00568     btnConfigureTabletDevice->setEnabled(enabled);
00569     m_deviceSettings[cbTabletDevice->currentItem()].setEnabled(enabled);
00570 }
00571 
00572 void TabletSettingsTab::slotConfigureDevice()
00573 {
00574     TabletDeviceSettingsDialog dialog(cbTabletDevice->currentText(), m_deviceSettings[cbTabletDevice->currentItem()],
00575                                       this, "TabletDeviceSettings");
00576 
00577     if (dialog.exec() == QDialog::Accepted)
00578     {
00579         m_deviceSettings[cbTabletDevice->currentItem()] = dialog.settings();
00580     }
00581 }
00582 
00583 void TabletSettingsTab::applyTabletDeviceSettings()
00584 {
00585     for (Q_UINT32 deviceIndex = 0; deviceIndex < m_deviceSettings.count(); ++deviceIndex) {
00586         m_deviceSettings[deviceIndex].applySettings();
00587     }
00588 }
00589 
00590 #else // EXTENDED_X11_TABLET_SUPPORT
00591 
00592 // Fix compilation. moc seems to not see the undefined symbol needed
00593 // for these slots to be declared.
00594 void TabletSettingsTab::slotActivateDevice(int /*deviceIndex*/)
00595 {
00596 }
00597 
00598 void TabletSettingsTab::slotSetDeviceEnabled(bool /*enabled*/)
00599 {
00600 }
00601 
00602 void TabletSettingsTab::slotConfigureDevice()
00603 {
00604 }
00605 
00606 void TabletSettingsTab::applyTabletDeviceSettings()
00607 {
00608 }
00609 
00610 #endif
00611 
00612 //---------------------------------------------------------------------------------------------------
00613 
00614 DisplaySettingsTab::DisplaySettingsTab( QWidget *parent, const char *name)
00615     : WdgDisplaySettings( parent, name )
00616 {
00617 #ifdef HAVE_GL
00618     KisConfig cfg;
00619 
00620     if (!QGLFormat::hasOpenGL()) {
00621         cbUseOpenGL->setEnabled(false);
00622         //cbUseOpenGLShaders->setEnabled(false);
00623     } else {
00624         cbUseOpenGL->setChecked(cfg.useOpenGL());
00625         //cbUseOpenGLShaders->setChecked(cfg.useOpenGLShaders());
00626         //cbUseOpenGLShaders->setEnabled(cfg.useOpenGL());
00627     }
00628 #else
00629     cbUseOpenGL->setEnabled(false);
00630     //cbUseOpenGLShaders->setEnabled(false);
00631 #endif
00632 
00633     connect(cbUseOpenGL, SIGNAL(toggled(bool)), SLOT(slotUseOpenGLToggled(bool)));
00634 }
00635 
00636 void DisplaySettingsTab::setDefault()
00637 {
00638     cbUseOpenGL->setChecked(false);
00639     //cbUseOpenGLShaders->setChecked(false);
00640     //cbUseOpenGLShaders->setEnabled(false);
00641 }
00642 
00643 void DisplaySettingsTab::slotUseOpenGLToggled(bool /*isChecked*/)
00644 {
00645     //cbUseOpenGLShaders->setEnabled(isChecked);
00646 }
00647 
00648 //---------------------------------------------------------------------------------------------------
00649 GridSettingsTab::GridSettingsTab(QWidget* parent) : WdgGridSettingsBase(parent)
00650 {
00651     KisConfig cfg;
00652     selectMainStyle->setCurrentItem(cfg.getGridMainStyle());
00653     selectSubdivisionStyle->setCurrentItem(cfg.getGridSubdivisionStyle());
00654 
00655 #if KDE_IS_VERSION(3,4,0)
00656     colorMain->setDefaultColor( QColor( 99, 99, 99 ) );
00657     colorSubdivision->setDefaultColor( QColor( 200, 200, 200 ) );
00658 #endif
00659     colorMain->setColor(cfg.getGridMainColor());
00660     colorSubdivision->setColor(cfg.getGridSubdivisionColor());
00661 
00662     intHSpacing->setValue( cfg.getGridHSpacing() );
00663     intVSpacing->setValue( cfg.getGridVSpacing() );
00664     intSubdivision->setValue( cfg.getGridSubdivisions());
00665     intOffsetX->setValue( cfg.getGridOffsetX());
00666     intOffsetY->setValue( cfg.getGridOffsetY());
00667 
00668     linkSpacingToggled(true);
00669     connect(bnLinkSpacing, SIGNAL(toggled(bool)), this, SLOT(linkSpacingToggled( bool )));
00670 
00671     connect(intHSpacing, SIGNAL(valueChanged(int)),this,SLOT(spinBoxHSpacingChanged(int)));
00672     connect(intVSpacing, SIGNAL(valueChanged(int)),this,SLOT(spinBoxVSpacingChanged(int)));
00673 
00674 
00675 }
00676 
00677 void GridSettingsTab::setDefault()
00678 {
00679     KisConfig cfg;
00680     selectMainStyle->setCurrentItem(0);
00681     selectSubdivisionStyle->setCurrentItem(1);
00682 
00683     colorMain->setColor(QColor(99,99,99));
00684     colorSubdivision->setColor(QColor(199,199,199));
00685 
00686     intHSpacing->setValue( 10 );
00687     intVSpacing->setValue( 10 );
00688     intSubdivision->setValue( 1 );
00689     intOffsetX->setValue( 0 );
00690     intOffsetY->setValue( 0 );
00691 }
00692 
00693 void GridSettingsTab::spinBoxHSpacingChanged(int v)
00694 {
00695     if(m_linkSpacing)
00696     {
00697         intVSpacing->setValue(v);
00698     }
00699 }
00700 
00701 void GridSettingsTab::spinBoxVSpacingChanged(int v )
00702 {
00703     if(m_linkSpacing)
00704     {
00705         intHSpacing->setValue(v);
00706     }
00707 }
00708 
00709 
00710 void GridSettingsTab::linkSpacingToggled(bool b)
00711 {
00712     m_linkSpacing = b;
00713 
00714     KoImageResource kir;
00715     if (b) {
00716         bnLinkSpacing->setPixmap(kir.chain());
00717     }
00718     else {
00719         bnLinkSpacing->setPixmap(kir.chainBroken());
00720     }
00721 }
00722 
00723 
00724 //---------------------------------------------------------------------------------------------------
00725 
00726 PreferencesDialog::PreferencesDialog( QWidget* parent, const char* name )
00727     : KDialogBase( IconList, i18n("Preferences"), Ok | Cancel | Help | Default /*| Apply*/, Ok, parent, name, true, true )
00728 {
00729     QVBox *vbox;
00730 
00731     vbox = addVBoxPage( i18n( "General"), i18n( "General"), BarIcon( "misc", KIcon::SizeMedium ));
00732     m_general = new GeneralTab( vbox );
00733 #ifdef HAVE_GL
00734     vbox = addVBoxPage ( i18n( "Display" ), i18n( "Display" ), BarIcon( "kscreensaver", KIcon::SizeMedium ));
00735     m_displaySettings = new DisplaySettingsTab( vbox );
00736 #endif
00737     vbox = addVBoxPage( i18n( "Color Management"), i18n( "Color"), BarIcon( "colorize", KIcon::SizeMedium ));
00738     m_colorSettings = new ColorSettingsTab( vbox );
00739 
00740     vbox = addVBoxPage( i18n( "Performance"), i18n( "Performance"), BarIcon( "fork", KIcon::SizeMedium ));
00741     m_performanceSettings = new PerformanceTab ( vbox );
00742 
00743     vbox = addVBoxPage ( i18n( "Tablet" ), i18n( "Tablet" ), BarIcon( "tablet", KIcon::SizeMedium ));
00744     m_tabletSettings = new TabletSettingsTab( vbox );
00745 
00746     vbox = addVBoxPage ( i18n( "Grid" ), i18n( "Grid" ), BarIcon( "grid", KIcon::SizeMedium ));
00747     m_gridSettings = new GridSettingsTab( vbox );
00748 
00749 }
00750 
00751 PreferencesDialog::~PreferencesDialog()
00752 {
00753 }
00754 
00755 void PreferencesDialog::slotDefault()
00756 {
00757     m_general->setDefault();
00758     m_colorSettings->setDefault();
00759     m_tabletSettings->setDefault();
00760     m_performanceSettings->setDefault();
00761 #ifdef HAVE_GL
00762     m_displaySettings->setDefault();
00763 #endif
00764     m_gridSettings->setDefault();
00765 }
00766 
00767 bool PreferencesDialog::editPreferences()
00768 {
00769     PreferencesDialog* dialog;
00770 
00771     dialog = new PreferencesDialog();
00772         bool baccept = ( dialog->exec() == Accepted );
00773     if( baccept )
00774     {
00775         KisConfig cfg;
00776         cfg.setCursorStyle(dialog->m_general->cursorStyle());
00777         cfg.setDockability( dialog->m_general->dockability() );
00778         cfg.setDockerFontSize( dialog->m_general->dockerFontSize() );
00779 
00780         // Color settings
00781         cfg.setMonitorProfile( dialog->m_colorSettings->m_page->cmbMonitorProfile->currentText());
00782         cfg.setWorkingColorSpace( dialog->m_colorSettings->m_page->cmbWorkingColorSpace->currentText());
00783         cfg.setPrinterColorSpace( dialog->m_colorSettings->m_page->cmbPrintingColorSpace->currentText());
00784         cfg.setPrinterProfile( dialog->m_colorSettings->m_page->cmbPrintProfile->currentText());
00785 
00786         cfg.setUseBlackPointCompensation( dialog->m_colorSettings->m_page->chkBlackpoint->isChecked());
00787         cfg.setPasteBehaviour( dialog->m_colorSettings->m_page->grpPasteBehaviour->selectedId());
00788         cfg.setRenderIntent( dialog->m_colorSettings->m_page->cmbMonitorIntent->currentItem());
00789 
00790         // it's scaled from 0 - 6, but the config is in 0 - 300
00791         cfg.setSwappiness(dialog->m_performanceSettings->m_swappiness->value() * 50);
00792         cfg.setMaxTilesInMem(dialog->m_performanceSettings->m_maxTiles->value());
00793         // let the tile manager know
00794         KisTileManager::instance()->configChanged();
00795 
00796         dialog->m_tabletSettings->applySettings();
00797 
00798 #ifdef HAVE_GL
00799         cfg.setUseOpenGL(dialog->m_displaySettings->cbUseOpenGL->isChecked());
00800         //cfg.setUseOpenGLShaders(dialog->m_displaySettings->cbUseOpenGLShaders->isChecked());
00801 #endif
00802 
00803         // Grid settings
00804         cfg.setGridMainStyle( dialog->m_gridSettings->selectMainStyle->currentItem() );
00805         cfg.setGridSubdivisionStyle( dialog->m_gridSettings->selectSubdivisionStyle->currentItem() );
00806 
00807         cfg.setGridMainColor( dialog->m_gridSettings->colorMain->color() );
00808         cfg.setGridSubdivisionColor(dialog->m_gridSettings->colorSubdivision->color() );
00809 
00810         cfg.setGridHSpacing( dialog->m_gridSettings->intHSpacing->value( ));
00811         cfg.setGridVSpacing( dialog->m_gridSettings->intVSpacing->value( ));
00812         cfg.setGridSubdivisions( dialog->m_gridSettings->intSubdivision->value( ));
00813         cfg.setGridOffsetX( dialog->m_gridSettings->intOffsetX->value( ));
00814         cfg.setGridOffsetY( dialog->m_gridSettings->intOffsetY->value( ));
00815 
00816     }
00817     delete dialog;
00818     return baccept;
00819 }
00820 
00821 #include "kis_dlg_preferences.moc"
KDE Home | KDE Accessibility Home | Description of Access Keys