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