File indexing completed on 2025-02-09 05:07:30

0001 /*
0002  *  SPDX-FileCopyrightText: 2015 Dmitry Kazakov <dimula73@gmail.com>
0003  *
0004  *  SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 
0007 #include "kis_screen_size_choice_dialog.h"
0008 #include "ui_kis_screen_size_choice_dialog.h"
0009 
0010 #include <QButtonGroup>
0011 
0012 #include <kconfig.h>
0013 #include <ksharedconfig.h>
0014 #include <kconfiggroup.h>
0015 #include <kstandardguiitem.h>
0016 
0017 
0018 #include "kis_debug.h"
0019 
0020 
0021 QString rectToString(const QRect &rc) {
0022     return i18nc("Screen rect when choosing Wintab/Qt settings", "%1x%2 offset: %3,%4", rc.width(), rc.height(), rc.x(), rc.y());
0023 }
0024 
0025 KisScreenSizeChoiceDialog::KisScreenSizeChoiceDialog(QWidget *parent,
0026                                                      const QRect &wintabRect,
0027                                                      const QRect &qtRect)
0028     : QDialog(parent),
0029       ui(new Ui::KisScreenSizeChoiceDialog),
0030       m_wintabRect(wintabRect),
0031       m_qtRect(qtRect)
0032 {
0033     ui->setupUi(this);
0034 
0035     connect(ui->radioManual, SIGNAL(toggled(bool)), ui->lblXOffset, SLOT(setEnabled(bool)));
0036     connect(ui->radioManual, SIGNAL(toggled(bool)), ui->lblYOffset, SLOT(setEnabled(bool)));
0037     connect(ui->radioManual, SIGNAL(toggled(bool)), ui->lblWidth, SLOT(setEnabled(bool)));
0038     connect(ui->radioManual, SIGNAL(toggled(bool)), ui->lblHeight, SLOT(setEnabled(bool)));
0039 
0040     connect(ui->radioManual, SIGNAL(toggled(bool)), ui->intXOffset, SLOT(setEnabled(bool)));
0041     connect(ui->radioManual, SIGNAL(toggled(bool)), ui->intYOffset, SLOT(setEnabled(bool)));
0042     connect(ui->radioManual, SIGNAL(toggled(bool)), ui->intWidth, SLOT(setEnabled(bool)));
0043     connect(ui->radioManual, SIGNAL(toggled(bool)), ui->intHeight, SLOT(setEnabled(bool)));
0044 
0045     // cold-init the state of the manual controls
0046     ui->radioManual->setChecked(true);
0047 
0048     ui->radioWintab->setText(i18nc("@option:radio", "%1 (Wintab)", rectToString(wintabRect)));
0049     ui->radioQt->setText(i18nc("@option:radio", "%1 (Qt)", rectToString(qtRect)));
0050 
0051     m_dataSource = new QButtonGroup(this);
0052     m_dataSource->addButton(ui->radioWintab, 0);
0053     m_dataSource->addButton(ui->radioQt, 1);
0054     m_dataSource->addButton(ui->radioManual, 2);
0055 
0056     loadSettings(wintabRect);
0057 
0058     connect(this, SIGNAL(finished(int)), SLOT(slotFinished()));
0059     
0060     KGuiItem::assign(ui->buttonBox->button(QDialogButtonBox::Ok), KStandardGuiItem::ok());
0061 }
0062 
0063 void KisScreenSizeChoiceDialog::slotFinished()
0064 {
0065     saveSettings();
0066 }
0067 
0068 bool KisScreenSizeChoiceDialog::canUseDefaultSettings() const
0069 {
0070     return ui->chkRememberSetting->isChecked();
0071 }
0072 
0073 QRect KisScreenSizeChoiceDialog::screenRect() const
0074 {
0075     QRect rect;
0076 
0077     switch (m_dataSource->checkedId()) {
0078     case 0:
0079         rect = m_wintabRect;
0080         break;
0081     case 1:
0082         rect = m_qtRect;
0083         break;
0084     case 2:
0085         rect.setRect(ui->intXOffset->value(),
0086                      ui->intYOffset->value(),
0087                      ui->intWidth->value(),
0088                      ui->intHeight->value());
0089         break;
0090 
0091     }
0092 
0093     return rect;
0094 }
0095 
0096 void KisScreenSizeChoiceDialog::loadSettings(const QRect &defaultRect)
0097 {
0098     KConfigGroup cfg = KSharedConfig::openConfig()->group("ScreenSizeWorkaroundDialog");
0099     int index = qBound(0, cfg.readEntry("choiceIndex", 0), 2);
0100 
0101     m_dataSource->button(index)->setChecked(true);
0102 
0103     ui->intXOffset->setValue(cfg.readEntry("xOffset", defaultRect.x()));
0104     ui->intYOffset->setValue(cfg.readEntry("yOffset", defaultRect.y()));
0105     ui->intWidth->setValue(cfg.readEntry("Width", defaultRect.width()));
0106     ui->intHeight->setValue(cfg.readEntry("Height", defaultRect.height()));
0107 
0108     ui->chkRememberSetting->setChecked(cfg.readEntry("RememberSetting", false));
0109 }
0110 
0111 void KisScreenSizeChoiceDialog::saveSettings()
0112 {
0113     KConfigGroup cfg = KSharedConfig::openConfig()->group("ScreenSizeWorkaroundDialog");
0114 
0115     cfg.writeEntry("choiceIndex", m_dataSource->checkedId());
0116 
0117     cfg.writeEntry("xOffset", ui->intXOffset->value());
0118     cfg.writeEntry("yOffset", ui->intYOffset->value());
0119     cfg.writeEntry("Width", ui->intWidth->value());
0120     cfg.writeEntry("Height", ui->intHeight->value());
0121 
0122     cfg.writeEntry("RememberSetting", ui->chkRememberSetting->isChecked());
0123 }
0124 
0125 KisScreenSizeChoiceDialog::~KisScreenSizeChoiceDialog()
0126 {
0127     delete ui;
0128 }