1 /*
2     SPDX-FileCopyrightText: 2007 Joris Guisson <joris.guisson@gmail.com>
3     SPDX-FileCopyrightText: 2007 Ivan Vasic <ivasic@gmail.com>
4     SPDX-License-Identifier: GPL-2.0-or-later
5 */
6 
7 #include <QLocale>
8 #include <QPushButton>
9 
10 #include <KLocalizedString>
11 
12 #include "edititemdlg.h"
13 #include "schedule.h"
14 
15 namespace kt
16 {
EditItemDlg(kt::Schedule * schedule,ScheduleItem * item,bool new_item,QWidget * parent)17 EditItemDlg::EditItemDlg(kt::Schedule *schedule, ScheduleItem *item, bool new_item, QWidget *parent)
18     : QDialog(parent)
19     , schedule(schedule)
20     , item(item)
21 {
22     setupUi(this);
23     connect(m_buttonBox, &QDialogButtonBox::accepted, this, &EditItemDlg::accept);
24     connect(m_buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject);
25 
26     connect(m_suspended, &QCheckBox::toggled, this, &EditItemDlg::suspendedChanged);
27     connect(m_screensaver_limits, &QCheckBox::toggled, this, &EditItemDlg::screensaverLimitsToggled);
28 
29     QLocale locale(QLocale::system());
30     for (int i = 1; i <= 7; i++) {
31         m_start_day->addItem(locale.dayName(i));
32         m_end_day->addItem(locale.dayName(i));
33     }
34 
35     m_from->setMaximumTime(QTime(23, 58, 0));
36     m_to->setMinimumTime(QTime(0, 1, 0));
37 
38     m_start_day->setCurrentIndex(0);
39     m_end_day->setCurrentIndex(6);
40 
41     m_from->setTime(item->start);
42     m_to->setTime(item->end);
43     m_start_day->setCurrentIndex(item->start_day - 1);
44     m_end_day->setCurrentIndex(item->end_day - 1);
45     m_suspended->setChecked(item->suspended);
46     m_upload_limit->setValue(item->upload_limit);
47     m_download_limit->setValue(item->download_limit);
48     m_set_connection_limits->setChecked(item->set_conn_limits);
49     m_max_conn_per_torrent->setEnabled(item->set_conn_limits);
50     m_max_conn_per_torrent->setValue(item->torrent_conn_limit);
51     m_max_conn_global->setValue(item->global_conn_limit);
52     m_max_conn_global->setEnabled(item->set_conn_limits);
53     m_screensaver_limits->setChecked(item->screensaver_limits);
54     m_screensaver_limits->setEnabled(!item->suspended);
55     m_ss_download_limit->setValue(item->ss_download_limit);
56     m_ss_upload_limit->setValue(item->ss_upload_limit);
57     m_ss_download_limit->setEnabled(!item->suspended && item->screensaver_limits);
58     m_ss_upload_limit->setEnabled(!item->suspended && item->screensaver_limits);
59 
60     m_buttonBox->button(QDialogButtonBox::Ok)->setEnabled(!schedule->conflicts(item));
61 
62     connect(m_from, &QTimeEdit::timeChanged, this, &EditItemDlg::fromChanged);
63     connect(m_to, &QTimeEdit::timeChanged, this, &EditItemDlg::toChanged);
64     connect(m_start_day, qOverload<int>(&QComboBox::activated), this, &EditItemDlg::startDayChanged);
65     connect(m_end_day, qOverload<int>(&QComboBox::activated), this, &EditItemDlg::endDayChanged);
66 
67     setWindowTitle(new_item ? i18n("Add an item") : i18n("Edit an item"));
68 }
69 
~EditItemDlg()70 EditItemDlg::~EditItemDlg()
71 {
72 }
73 
fromChanged(const QTime & time)74 void EditItemDlg::fromChanged(const QTime &time)
75 {
76     // ensure that from is always smaller then to
77     if (time >= m_to->time())
78         m_to->setTime(time.addSecs(60));
79 
80     fillItem();
81     m_buttonBox->button(QDialogButtonBox::Ok)->setEnabled(!schedule->conflicts(item));
82 }
83 
toChanged(const QTime & time)84 void EditItemDlg::toChanged(const QTime &time)
85 {
86     // ensure that from is always smaller then to
87     if (time <= m_from->time())
88         m_from->setTime(time.addSecs(-60));
89 
90     fillItem();
91     m_buttonBox->button(QDialogButtonBox::Ok)->setEnabled(!schedule->conflicts(item));
92 }
93 
startDayChanged(int idx)94 void EditItemDlg::startDayChanged(int idx)
95 {
96     // Make sure end day is >= start day
97     if (idx > m_end_day->currentIndex())
98         m_end_day->setCurrentIndex(idx);
99 
100     fillItem();
101     m_buttonBox->button(QDialogButtonBox::Ok)->setEnabled(!schedule->conflicts(item));
102 }
103 
endDayChanged(int idx)104 void EditItemDlg::endDayChanged(int idx)
105 {
106     // Make sure end day is >= start day
107     if (idx < m_start_day->currentIndex())
108         m_start_day->setCurrentIndex(idx);
109 
110     fillItem();
111     m_buttonBox->button(QDialogButtonBox::Ok)->setEnabled(!schedule->conflicts(item));
112 }
113 
suspendedChanged(bool on)114 void EditItemDlg::suspendedChanged(bool on)
115 {
116     m_upload_limit->setDisabled(on);
117     m_download_limit->setDisabled(on);
118     m_screensaver_limits->setDisabled(on);
119     screensaverLimitsToggled(m_screensaver_limits->isChecked());
120 }
121 
screensaverLimitsToggled(bool on)122 void EditItemDlg::screensaverLimitsToggled(bool on)
123 {
124     m_ss_download_limit->setEnabled(!m_suspended->isChecked() && on);
125     m_ss_upload_limit->setEnabled(!m_suspended->isChecked() && on);
126 }
127 
accept()128 void EditItemDlg::accept()
129 {
130     fillItem();
131     if (!schedule->conflicts(item))
132         QDialog::accept();
133 }
134 
fillItem()135 void EditItemDlg::fillItem()
136 {
137     item->start = m_from->time();
138     item->end = m_to->time();
139     item->start_day = m_start_day->currentIndex() + 1;
140     item->end_day = m_end_day->currentIndex() + 1;
141     item->upload_limit = m_upload_limit->value();
142     item->download_limit = m_download_limit->value();
143     item->suspended = m_suspended->isChecked();
144     item->global_conn_limit = m_max_conn_global->value();
145     item->torrent_conn_limit = m_max_conn_per_torrent->value();
146     item->set_conn_limits = m_set_connection_limits->isChecked();
147     item->screensaver_limits = m_screensaver_limits->isChecked();
148     item->ss_download_limit = m_ss_download_limit->value();
149     item->ss_upload_limit = m_ss_upload_limit->value();
150     item->checkTimes();
151 }
152 
153 }
154