File indexing completed on 2024-04-28 05:52:07

0001 /*
0002     SPDX-FileCopyrightText: 1998-1999 Matthias Hölzer-Klüpfel <matthias@hoelzer-kluepfel.de>
0003     SPDX-FileCopyrightText: 2002-2003 Martin Willers <willers@xm-arts.de>
0004     SPDX-FileCopyrightText: 2003 Daniel Teske <teske@bigfoot.com>
0005     SPDX-FileCopyrightText: 2007-2009 Stefan Böhmann <kde@hilefoks.org>
0006 
0007     SPDX-License-Identifier: GPL-2.0-or-later
0008 */
0009 #include "timeedit.h"
0010 #include "toplevel.h"
0011 #include "tea.h"
0012 
0013 #include <QScreen>
0014 #include <QGuiApplication>
0015 #include <QDialogButtonBox>
0016 #include <QPushButton>
0017 
0018 #include <KConfigGroup>
0019 #include <KSharedConfig>
0020 
0021 
0022 class TimeEditUI : public QWidget, public Ui::TimeEditWidget
0023 {
0024     public:
0025         explicit TimeEditUI(QWidget *parent = nullptr)
0026           : QWidget( parent )
0027         {
0028             setupUi( this );
0029         }
0030 };
0031 
0032 
0033 TimeEditDialog::TimeEditDialog(TopLevel *toplevel)
0034   : QDialog()
0035   , mUi(new TimeEditUI( this ))
0036   , mToplevel( toplevel )
0037 {
0038     setWindowTitle( i18n( "Custom Tea" ) );
0039 
0040     mButtonBox = new QDialogButtonBox(QDialogButtonBox::Ok|QDialogButtonBox::Cancel);
0041     mButtonBox->button(QDialogButtonBox::Ok)->setWhatsThis(i18n( "Start a new custom tea with the time configured in this dialog."  ));
0042     mButtonBox->button(QDialogButtonBox::Ok)->setDefault(true);
0043     mButtonBox->button(QDialogButtonBox::Ok)->setShortcut(Qt::CTRL | Qt::Key_Return);
0044     mButtonBox->button(QDialogButtonBox::Cancel)->setWhatsThis(i18n( "Close this dialog without starting a new tea."  ));
0045 
0046     QVBoxLayout *mainLayout = new QVBoxLayout;
0047     setLayout(mainLayout);
0048     mainLayout->addWidget(mUi);
0049     mainLayout->addWidget(mButtonBox);
0050 
0051     KSharedConfigPtr config = KSharedConfig::openConfig();
0052     KConfigGroup group( config, QStringLiteral("AnonymousTeaDialog") );
0053 
0054     int time=group.readEntry( "AnonymousTeaTime", 180 );
0055 
0056     mUi->minutes->setSuffix( ki18np( " minute", " minutes") );
0057     mUi->seconds->setSuffix( ki18np( " second", " seconds") );
0058 
0059     mUi->minutes->setValue( time / 60 );
0060     mUi->seconds->setValue( time % 60 );
0061 
0062     mUi->minutes->setFocus( Qt::ShortcutFocusReason );
0063 
0064     restoreGeometry(group.readEntry<QByteArray>("Geometry", QByteArray()));
0065 
0066     const QSize desktopSize = qApp->primaryScreen()->size();
0067     int x = group.readEntry( "AnonymousTeaDialogXPos", desktopSize.width()/2 - width()/2 );
0068     int y = group.readEntry( "AnonymousTeaDialogYPos", desktopSize.height()/2 - height()/2 );
0069 
0070     x = qMin( qMax( 0, x ), desktopSize.width() - width() );
0071     x = qMin( qMax( 0, y ), desktopSize.height() - height() );
0072     move( QPoint( x, y ) );
0073 
0074     connect(mUi->minutes, &KPluralHandlingSpinBox::valueChanged, this, &TimeEditDialog::checkOkButtonState);
0075     connect(mUi->seconds, &KPluralHandlingSpinBox::valueChanged, this, &TimeEditDialog::checkOkButtonState);
0076 
0077     connect(mButtonBox, &QDialogButtonBox::accepted, this, &TimeEditDialog::accept);
0078     connect(mButtonBox, &QDialogButtonBox::rejected, this, &TimeEditDialog::reject);
0079 }
0080 
0081 
0082 TimeEditDialog::~TimeEditDialog()
0083 {
0084     delete mUi;
0085 }
0086 
0087 
0088 void TimeEditDialog::checkOkButtonState()
0089 {
0090     mButtonBox->button(QDialogButtonBox::Ok)->setEnabled( mUi->minutes->value() || mUi->seconds->value() );
0091 }
0092 
0093 
0094 void TimeEditDialog::accept()
0095 {
0096     hide();
0097 
0098     int time = mUi->seconds->value();
0099     time += mUi->minutes->value() * 60;
0100 
0101     KSharedConfigPtr config = KSharedConfig::openConfig();
0102     KConfigGroup group( config, QStringLiteral("AnonymousTeaDialog") );
0103     group.writeEntry( "AnonymousTeaTime", time );
0104     group.writeEntry("Geometry", saveGeometry());
0105 
0106     group.writeEntry( "AnonymousTeaDialogXPos", x() );
0107     group.writeEntry( "AnonymousTeaDialogYPos", y() );
0108 
0109     mToplevel->runTea( Tea( i18n( "Custom Tea" ), time ) );
0110 }
0111 
0112 
0113 // kate: word-wrap off; encoding utf-8; indent-width 4; tab-width 4; line-numbers on; mixed-indent off; remove-trailing-space-save on; replace-tabs-save on; replace-tabs on; space-indent on;
0114 // vim:set spell et sw=4 ts=4 nowrap cino=l1,cs,U1: