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 }