UI: ProgramsWindow: Improve Block Time editing.

This commit is contained in:
Nodir Temirkhodjaev 2020-02-10 07:33:00 +05:00
parent 0aaed055a2
commit 1b43674554
5 changed files with 157 additions and 91 deletions

View File

@ -1,7 +1,9 @@
#include "programswindow.h" #include "programswindow.h"
#include <QButtonGroup>
#include <QCheckBox> #include <QCheckBox>
#include <QComboBox> #include <QComboBox>
#include <QDateTimeEdit>
#include <QDialog> #include <QDialog>
#include <QFormLayout> #include <QFormLayout>
#include <QHeaderView> #include <QHeaderView>
@ -93,6 +95,9 @@ void ProgramsWindow::onRetranslateUi()
m_btAllowApp->setText(tr("Allow")); m_btAllowApp->setText(tr("Allow"));
m_btBlockApp->setText(tr("Block")); m_btBlockApp->setText(tr("Block"));
m_formAppEdit->unsetLocale();
m_formAppEdit->setWindowTitle(tr("Edit Program"));
m_labelEditPath->setText(tr("Program Path:")); m_labelEditPath->setText(tr("Program Path:"));
m_btSelectFile->setToolTip(tr("Select File")); m_btSelectFile->setToolTip(tr("Select File"));
m_labelEditName->setText(tr("Program Name:")); m_labelEditName->setText(tr("Program Name:"));
@ -100,13 +105,15 @@ void ProgramsWindow::onRetranslateUi()
m_cbUseGroupPerm->setText(tr("Use Application Group's Enabled State")); m_cbUseGroupPerm->setText(tr("Use Application Group's Enabled State"));
m_rbAllowApp->setText(tr("Allow")); m_rbAllowApp->setText(tr("Allow"));
m_rbBlockApp->setText(tr("Block")); m_rbBlockApp->setText(tr("Block"));
m_cscBlockApp->checkBox()->setText(tr("Block In:")); m_cscBlockAppIn->checkBox()->setText(tr("Block In:"));
retranslateAppBlockInHours(); retranslateAppBlockInHours();
m_cbBlockAppAt->setText(tr("Block At:"));
m_dteBlockAppAt->unsetLocale();
m_cbBlockAppNone->setText(tr("Forever"));
m_btEditOk->setText(tr("OK")); m_btEditOk->setText(tr("OK"));
m_btEditCancel->setText(tr("Cancel")); m_btEditCancel->setText(tr("Cancel"));
m_formAppEdit->setWindowTitle(tr("Edit Program"));
m_btLogOptions->setText(tr("Options")); m_btLogOptions->setText(tr("Options"));
m_cbLogBlocked->setText(tr("Show New Programs")); m_cbLogBlocked->setText(tr("Show New Programs"));
@ -125,8 +132,8 @@ void ProgramsWindow::retranslateAppBlockInHours()
tr("12 hours"), tr("Day"), tr("Week"), tr("Month") tr("12 hours"), tr("Day"), tr("Week"), tr("Month")
}; };
m_cscBlockApp->setNames(list); m_cscBlockAppIn->setNames(list);
m_cscBlockApp->spinBox()->setSuffix(tr(" hours")); m_cscBlockAppIn->spinBox()->setSuffix(tr(" hours"));
} }
void ProgramsWindow::setupUi() void ProgramsWindow::setupUi()
@ -217,10 +224,23 @@ void ProgramsWindow::setupAppEditForm()
allowLayout->addWidget(m_rbBlockApp, 1, Qt::AlignLeft); allowLayout->addWidget(m_rbBlockApp, 1, Qt::AlignLeft);
// Block after N hours // Block after N hours
m_cscBlockApp = new CheckSpinCombo(); m_cscBlockAppIn = new CheckSpinCombo();
m_cscBlockApp->spinBox()->setRange(1, 24 * 30 * 12); // ~Year m_cscBlockAppIn->spinBox()->setRange(1, 24 * 30 * 12); // ~Year
m_cscBlockApp->setValues(appBlockInHourValues); m_cscBlockAppIn->setValues(appBlockInHourValues);
m_cscBlockApp->setNamesByValues(); m_cscBlockAppIn->setNamesByValues();
// Block at specified date & time
auto blockAtLayout = setupCheckDateTimeEdit();
// Allow Forever
m_cbBlockAppNone = new QCheckBox();
// Eclusive End Time CheckBoxes Group
auto group = new QButtonGroup(this);
group->setExclusive(true);
group->addButton(m_cscBlockAppIn->checkBox());
group->addButton(m_cbBlockAppAt);
group->addButton(m_cbBlockAppNone);
// OK/Cancel // OK/Cancel
auto buttonsLayout = new QHBoxLayout(); auto buttonsLayout = new QHBoxLayout();
@ -238,7 +258,9 @@ void ProgramsWindow::setupAppEditForm()
layout->addLayout(formLayout); layout->addLayout(formLayout);
layout->addWidget(ControlUtil::createSeparator()); layout->addWidget(ControlUtil::createSeparator());
layout->addLayout(allowLayout); layout->addLayout(allowLayout);
layout->addWidget(m_cscBlockApp); layout->addWidget(m_cscBlockAppIn);
layout->addLayout(blockAtLayout);
layout->addWidget(m_cbBlockAppNone);
layout->addWidget(ControlUtil::createSeparator()); layout->addWidget(ControlUtil::createSeparator());
layout->addLayout(buttonsLayout); layout->addLayout(buttonsLayout);
@ -258,7 +280,12 @@ void ProgramsWindow::setupAppEditForm()
} }
}); });
connect(m_rbAllowApp, &QRadioButton::toggled, m_cscBlockApp, &CheckSpinCombo::setEnabled); connect(m_rbAllowApp, &QRadioButton::toggled, [&](bool checked) {
m_cbBlockAppNone->setEnabled(checked);
m_cscBlockAppIn->setEnabled(checked);
m_cbBlockAppAt->setEnabled(checked);
m_dteBlockAppAt->setEnabled(checked);
});
connect(m_btEditOk, &QAbstractButton::clicked, [&] { connect(m_btEditOk, &QAbstractButton::clicked, [&] {
if (saveAppEditForm()) { if (saveAppEditForm()) {
@ -285,6 +312,21 @@ void ProgramsWindow::setupComboAppGroups()
connect(confManager(), &ConfManager::confSaved, this, refreshComboAppGroups); connect(confManager(), &ConfManager::confSaved, this, refreshComboAppGroups);
} }
QLayout *ProgramsWindow::setupCheckDateTimeEdit()
{
m_cbBlockAppAt = new QCheckBox();
m_dteBlockAppAt = new QDateTimeEdit();
m_dteBlockAppAt->setCalendarPopup(true);
auto layout = new QHBoxLayout();
layout->setMargin(0);
layout->addWidget(m_cbBlockAppAt, 1);
layout->addWidget(m_dteBlockAppAt);
return layout;
}
QLayout *ProgramsWindow::setupHeader() QLayout *ProgramsWindow::setupHeader()
{ {
auto layout = new QHBoxLayout(); auto layout = new QHBoxLayout();
@ -526,8 +568,12 @@ void ProgramsWindow::updateAppEditForm(bool editCurrentApp)
m_cbUseGroupPerm->setChecked(appRow.useGroupPerm); m_cbUseGroupPerm->setChecked(appRow.useGroupPerm);
m_rbAllowApp->setChecked(!appRow.blocked); m_rbAllowApp->setChecked(!appRow.blocked);
m_rbBlockApp->setChecked(appRow.blocked); m_rbBlockApp->setChecked(appRow.blocked);
m_cscBlockApp->setEnabled(!appRow.blocked); m_cscBlockAppIn->checkBox()->setChecked(false);
m_cscBlockApp->checkBox()->setChecked(false); m_cscBlockAppIn->spinBox()->setValue(1);
m_cbBlockAppAt->setChecked(!appRow.endTime.isNull());
m_dteBlockAppAt->setDateTime(appRow.endTime);
m_dteBlockAppAt->setMinimumDateTime(QDateTime::currentDateTime());
m_cbBlockAppNone->setChecked(appRow.endTime.isNull());
m_formAppEdit->show(); m_formAppEdit->show();
} }
@ -544,11 +590,15 @@ bool ProgramsWindow::saveAppEditForm()
const bool blocked = m_rbBlockApp->isChecked(); const bool blocked = m_rbBlockApp->isChecked();
QDateTime endTime; QDateTime endTime;
if (!blocked && m_cscBlockApp->checkBox()->isChecked()) { if (!blocked) {
const int hours = m_cscBlockApp->spinBox()->value(); if (m_cscBlockAppIn->checkBox()->isChecked()) {
const int hours = m_cscBlockAppIn->spinBox()->value();
endTime = QDateTime::currentDateTime() endTime = QDateTime::currentDateTime()
.addSecs(hours * 60 * 60); .addSecs(hours * 60 * 60);
} else if (m_cbBlockAppAt->isChecked()) {
endTime = m_dteBlockAppAt->dateTime();
}
} }
// Add new app // Add new app

View File

@ -5,6 +5,7 @@
QT_FORWARD_DECLARE_CLASS(QCheckBox) QT_FORWARD_DECLARE_CLASS(QCheckBox)
QT_FORWARD_DECLARE_CLASS(QComboBox) QT_FORWARD_DECLARE_CLASS(QComboBox)
QT_FORWARD_DECLARE_CLASS(QDateTimeEdit)
QT_FORWARD_DECLARE_CLASS(QDialog) QT_FORWARD_DECLARE_CLASS(QDialog)
QT_FORWARD_DECLARE_CLASS(QLabel) QT_FORWARD_DECLARE_CLASS(QLabel)
QT_FORWARD_DECLARE_CLASS(QLineEdit) QT_FORWARD_DECLARE_CLASS(QLineEdit)
@ -45,6 +46,7 @@ private:
void setupUi(); void setupUi();
void setupAppEditForm(); void setupAppEditForm();
void setupComboAppGroups(); void setupComboAppGroups();
QLayout *setupCheckDateTimeEdit();
QLayout *setupHeader(); QLayout *setupHeader();
void setupLogOptions(); void setupLogOptions();
void setupLogBlocked(); void setupLogBlocked();
@ -98,7 +100,10 @@ private:
QCheckBox *m_cbUseGroupPerm = nullptr; QCheckBox *m_cbUseGroupPerm = nullptr;
QRadioButton *m_rbAllowApp = nullptr; QRadioButton *m_rbAllowApp = nullptr;
QRadioButton *m_rbBlockApp = nullptr; QRadioButton *m_rbBlockApp = nullptr;
CheckSpinCombo *m_cscBlockApp = nullptr; CheckSpinCombo *m_cscBlockAppIn = nullptr;
QCheckBox *m_cbBlockAppAt = nullptr;
QDateTimeEdit *m_dteBlockAppAt = nullptr;
QCheckBox *m_cbBlockAppNone = nullptr;
QPushButton *m_btEditOk = nullptr; QPushButton *m_btEditOk = nullptr;
QPushButton *m_btEditCancel = nullptr; QPushButton *m_btEditCancel = nullptr;
QDialog *m_formAppEdit = nullptr; QDialog *m_formAppEdit = nullptr;

View File

@ -77,6 +77,9 @@ void ZonesWindow::onRetranslateUi()
m_actEditZone->setText(tr("Edit")); m_actEditZone->setText(tr("Edit"));
m_actRemoveZone->setText(tr("Remove")); m_actRemoveZone->setText(tr("Remove"));
m_formZoneEdit->unsetLocale();
m_formZoneEdit->setWindowTitle(tr("Edit Zone"));
m_labelZoneName->setText(tr("Zone Name:")); m_labelZoneName->setText(tr("Zone Name:"));
m_labelSource->setText(tr("Source:")); m_labelSource->setText(tr("Source:"));
m_cbEnabled->setText(tr("Enabled")); m_cbEnabled->setText(tr("Enabled"));
@ -87,8 +90,6 @@ void ZonesWindow::onRetranslateUi()
m_btEditOk->setText(tr("OK")); m_btEditOk->setText(tr("OK"));
m_btEditCancel->setText(tr("Cancel")); m_btEditCancel->setText(tr("Cancel"));
m_formZoneEdit->setWindowTitle(tr("Edit Zone"));
zoneListModel()->refresh(); zoneListModel()->refresh();
this->setWindowTitle(tr("Zones")); this->setWindowTitle(tr("Zones"));

Binary file not shown.

View File

@ -246,12 +246,12 @@
<context> <context>
<name>ConfManager</name> <name>ConfManager</name>
<message> <message>
<location filename="../conf/confmanager.cpp" line="332"/> <location filename="../conf/confmanager.cpp" line="333"/>
<source>Configuration Error</source> <source>Configuration Error</source>
<translation>Ошибка конфигурации</translation> <translation>Ошибка конфигурации</translation>
</message> </message>
<message> <message>
<location filename="../conf/confmanager.cpp" line="827"/> <location filename="../conf/confmanager.cpp" line="832"/>
<source>Application &apos;%1&apos; already exists</source> <source>Application &apos;%1&apos; already exists</source>
<translation>Приложение &apos;%1&apos; уже существует</translation> <translation>Приложение &apos;%1&apos; уже существует</translation>
</message> </message>
@ -259,42 +259,42 @@
<context> <context>
<name>ConfUtil</name> <name>ConfUtil</name>
<message> <message>
<location filename="../util/conf/confutil.cpp" line="185"/> <location filename="../util/conf/confutil.cpp" line="205"/>
<source>Bad Include IP address: %1</source> <source>Bad Include IP address: %1</source>
<translation>Некорректный IP адрес для включения: %1</translation> <translation>Некорректный IP адрес для включения: %1</translation>
</message> </message>
<message> <message>
<location filename="../util/conf/confutil.cpp" line="193"/> <location filename="../util/conf/confutil.cpp" line="213"/>
<source>Bad Exclude IP address: %1</source> <source>Bad Exclude IP address: %1</source>
<translation>Некорректный IP адрес для исключения: %1</translation> <translation>Некорректный IP адрес для исключения: %1</translation>
</message> </message>
<message> <message>
<location filename="../util/conf/confutil.cpp" line="207"/> <location filename="../util/conf/confutil.cpp" line="227"/>
<source>Too many IP addresses</source> <source>Too many IP addresses</source>
<translation>Слишком много IP адресов</translation> <translation>Слишком много IP адресов</translation>
</message> </message>
<message> <message>
<location filename="../util/conf/confutil.cpp" line="236"/> <location filename="../util/conf/confutil.cpp" line="254"/>
<source>Number of Application Groups must be between 1 and %1</source> <source>Number of Application Groups must be between 1 and %1</source>
<translation>Количество групп приложений должно быть от 1 до %1</translation> <translation>Количество групп приложений должно быть от 1 до %1</translation>
</message> </message>
<message> <message>
<location filename="../util/conf/confutil.cpp" line="93"/> <location filename="../util/conf/confutil.cpp" line="98"/>
<source>Too many application paths</source> <source>Too many application paths</source>
<translation>Слишком много путей приложений</translation> <translation>Слишком много путей приложений</translation>
</message> </message>
<message> <message>
<location filename="../util/conf/confutil.cpp" line="248"/> <location filename="../util/conf/confutil.cpp" line="266"/>
<source>Length of Application Group&apos;s Name must be &lt; %1</source> <source>Length of Application Group&apos;s Name must be &lt; %1</source>
<translation>Длина наименования группы приложения должна быть &lt; %1</translation> <translation>Длина наименования группы приложения должна быть &lt; %1</translation>
</message> </message>
<message> <message>
<location filename="../util/conf/confutil.cpp" line="349"/> <location filename="../util/conf/confutil.cpp" line="367"/>
<source>Application &apos;%1&apos; already exists</source> <source>Application &apos;%1&apos; already exists</source>
<translation>Приложение &apos;%1&apos; уже существует</translation> <translation>Приложение &apos;%1&apos; уже существует</translation>
</message> </message>
<message> <message>
<location filename="../util/conf/confutil.cpp" line="357"/> <location filename="../util/conf/confutil.cpp" line="375"/>
<source>Length of Application&apos;s Path must be &lt; %1</source> <source>Length of Application&apos;s Path must be &lt; %1</source>
<translation>Длина пути приложения должна быть &lt; %1</translation> <translation>Длина пути приложения должна быть &lt; %1</translation>
</message> </message>
@ -595,7 +595,7 @@
<context> <context>
<name>OptionsWindow</name> <name>OptionsWindow</name>
<message> <message>
<location filename="../form/opt/optionswindow.cpp" line="50"/> <location filename="../form/opt/optionswindow.cpp" line="52"/>
<source>Options</source> <source>Options</source>
<translation>Опции</translation> <translation>Опции</translation>
</message> </message>
@ -603,162 +603,172 @@
<context> <context>
<name>ProgramsWindow</name> <name>ProgramsWindow</name>
<message> <message>
<location filename="../form/prog/programswindow.cpp" line="86"/> <location filename="../form/prog/programswindow.cpp" line="90"/>
<source>Add</source> <source>Add</source>
<translation>Добавить</translation> <translation>Добавить</translation>
</message> </message>
<message> <message>
<location filename="../form/prog/programswindow.cpp" line="83"/>
<location filename="../form/prog/programswindow.cpp" line="87"/> <location filename="../form/prog/programswindow.cpp" line="87"/>
<location filename="../form/prog/programswindow.cpp" line="91"/>
<source>Edit</source> <source>Edit</source>
<translation>Изменить</translation> <translation>Изменить</translation>
</message> </message>
<message> <message>
<location filename="../form/prog/programswindow.cpp" line="89"/> <location filename="../form/prog/programswindow.cpp" line="93"/>
<source>Purge All</source> <source>Purge All</source>
<translation>Прочистить всё</translation> <translation>Прочистить всё</translation>
</message> </message>
<message> <message>
<location filename="../form/prog/programswindow.cpp" line="84"/> <location filename="../form/prog/programswindow.cpp" line="88"/>
<location filename="../form/prog/programswindow.cpp" line="91"/> <location filename="../form/prog/programswindow.cpp" line="95"/>
<location filename="../form/prog/programswindow.cpp" line="99"/> <location filename="../form/prog/programswindow.cpp" line="106"/>
<source>Allow</source> <source>Allow</source>
<translation>Разрешить</translation> <translation>Разрешить</translation>
</message> </message>
<message> <message>
<location filename="../form/prog/programswindow.cpp" line="85"/> <location filename="../form/prog/programswindow.cpp" line="89"/>
<location filename="../form/prog/programswindow.cpp" line="92"/> <location filename="../form/prog/programswindow.cpp" line="96"/>
<location filename="../form/prog/programswindow.cpp" line="100"/> <location filename="../form/prog/programswindow.cpp" line="107"/>
<source>Block</source> <source>Block</source>
<translation>Блокировать</translation> <translation>Блокировать</translation>
</message> </message>
<message> <message>
<location filename="../form/prog/programswindow.cpp" line="94"/> <location filename="../form/prog/programswindow.cpp" line="101"/>
<source>Program Path:</source> <source>Program Path:</source>
<translation>Путь программы:</translation> <translation>Путь программы:</translation>
</message> </message>
<message> <message>
<location filename="../form/prog/programswindow.cpp" line="95"/> <location filename="../form/prog/programswindow.cpp" line="102"/>
<source>Select File</source> <source>Select File</source>
<translation>Выбрать файл</translation> <translation>Выбрать файл</translation>
</message> </message>
<message> <message>
<location filename="../form/prog/programswindow.cpp" line="96"/> <location filename="../form/prog/programswindow.cpp" line="103"/>
<source>Program Name:</source> <source>Program Name:</source>
<translation>Наименование программы:</translation> <translation>Наименование программы:</translation>
</message> </message>
<message> <message>
<location filename="../form/prog/programswindow.cpp" line="97"/> <location filename="../form/prog/programswindow.cpp" line="104"/>
<source>Application Group:</source> <source>Application Group:</source>
<translation>Группа приложений:</translation> <translation>Группа приложений:</translation>
</message> </message>
<message> <message>
<location filename="../form/prog/programswindow.cpp" line="98"/> <location filename="../form/prog/programswindow.cpp" line="105"/>
<source>Use Application Group&apos;s Enabled State</source> <source>Use Application Group&apos;s Enabled State</source>
<translation>Использовать вкл. состояние Группы приложения</translation> <translation>Использовать вкл. состояние Группы приложения</translation>
</message> </message>
<message> <message>
<location filename="../form/prog/programswindow.cpp" line="101"/> <location filename="../form/prog/programswindow.cpp" line="108"/>
<source>Block In:</source> <source>Block In:</source>
<translation>Блокировать через:</translation> <translation>Блокировать через:</translation>
</message> </message>
<message> <message>
<location filename="../form/prog/programswindow.cpp" line="103"/> <location filename="../form/prog/programswindow.cpp" line="110"/>
<source>Block At:</source>
<translation>Блокировать в заданное время:</translation>
</message>
<message>
<location filename="../form/prog/programswindow.cpp" line="112"/>
<source>Forever</source>
<translation>Навсегда</translation>
</message>
<message>
<location filename="../form/prog/programswindow.cpp" line="114"/>
<source>OK</source> <source>OK</source>
<translation>OK</translation> <translation>OK</translation>
</message> </message>
<message> <message>
<location filename="../form/prog/programswindow.cpp" line="104"/> <location filename="../form/prog/programswindow.cpp" line="115"/>
<source>Cancel</source> <source>Cancel</source>
<translation>Отмена</translation> <translation>Отмена</translation>
</message> </message>
<message> <message>
<location filename="../form/prog/programswindow.cpp" line="106"/> <location filename="../form/prog/programswindow.cpp" line="99"/>
<source>Edit Program</source> <source>Edit Program</source>
<translation>Редактирование программы</translation> <translation>Редактирование программы</translation>
</message> </message>
<message> <message>
<location filename="../form/prog/programswindow.cpp" line="108"/> <location filename="../form/prog/programswindow.cpp" line="117"/>
<source>Options</source> <source>Options</source>
<translation>Опции</translation> <translation>Опции</translation>
</message> </message>
<message> <message>
<location filename="../form/prog/programswindow.cpp" line="109"/> <location filename="../form/prog/programswindow.cpp" line="118"/>
<source>Show New Programs</source> <source>Show New Programs</source>
<translation>Показывать новые программы</translation> <translation>Показывать новые программы</translation>
</message> </message>
<message> <message>
<location filename="../form/prog/programswindow.cpp" line="327"/> <location filename="../form/prog/programswindow.cpp" line="371"/>
<source>Are you sure to remove selected program(s)?</source> <source>Are you sure to remove selected program(s)?</source>
<translation>Удалить выбранные программы?</translation> <translation>Удалить выбранные программы?</translation>
</message> </message>
<message> <message>
<location filename="../form/prog/programswindow.cpp" line="113"/> <location filename="../form/prog/programswindow.cpp" line="122"/>
<source>Copy Path</source> <source>Copy Path</source>
<translation>Копировать путь</translation> <translation>Копировать путь</translation>
</message> </message>
<message> <message>
<location filename="../form/prog/programswindow.cpp" line="114"/> <location filename="../form/prog/programswindow.cpp" line="123"/>
<source>Open Folder</source> <source>Open Folder</source>
<translation>Открыть папку</translation> <translation>Открыть папку</translation>
</message> </message>
<message> <message>
<location filename="../form/prog/programswindow.cpp" line="122"/> <location filename="../form/prog/programswindow.cpp" line="131"/>
<source>Custom</source> <source>Custom</source>
<translation>Нестандартный</translation> <translation>Нестандартный</translation>
</message> </message>
<message> <message>
<location filename="../form/prog/programswindow.cpp" line="122"/> <location filename="../form/prog/programswindow.cpp" line="131"/>
<source>1 hour</source> <source>1 hour</source>
<translation>1 час</translation> <translation>1 час</translation>
</message> </message>
<message> <message>
<location filename="../form/prog/programswindow.cpp" line="122"/> <location filename="../form/prog/programswindow.cpp" line="131"/>
<source>6 hours</source> <source>6 hours</source>
<translation>6 часов</translation> <translation>6 часов</translation>
</message> </message>
<message> <message>
<location filename="../form/prog/programswindow.cpp" line="123"/> <location filename="../form/prog/programswindow.cpp" line="132"/>
<source>12 hours</source> <source>12 hours</source>
<translation>12 часов</translation> <translation>12 часов</translation>
</message> </message>
<message> <message>
<location filename="../form/prog/programswindow.cpp" line="123"/> <location filename="../form/prog/programswindow.cpp" line="132"/>
<source>Day</source> <source>Day</source>
<translation>День</translation> <translation>День</translation>
</message> </message>
<message> <message>
<location filename="../form/prog/programswindow.cpp" line="123"/> <location filename="../form/prog/programswindow.cpp" line="132"/>
<source>Week</source> <source>Week</source>
<translation>Неделя</translation> <translation>Неделя</translation>
</message> </message>
<message> <message>
<location filename="../form/prog/programswindow.cpp" line="123"/> <location filename="../form/prog/programswindow.cpp" line="132"/>
<source>Month</source> <source>Month</source>
<translation>Месяц</translation> <translation>Месяц</translation>
</message> </message>
<message> <message>
<location filename="../form/prog/programswindow.cpp" line="127"/> <location filename="../form/prog/programswindow.cpp" line="136"/>
<source> hours</source> <source> hours</source>
<translation> час.</translation> <translation> час.</translation>
</message> </message>
<message> <message>
<location filename="../form/prog/programswindow.cpp" line="116"/> <location filename="../form/prog/programswindow.cpp" line="125"/>
<source>Programs</source> <source>Programs</source>
<translation>Программы</translation> <translation>Программы</translation>
</message> </message>
<message> <message>
<location filename="../form/prog/programswindow.cpp" line="88"/> <location filename="../form/prog/programswindow.cpp" line="92"/>
<source>Remove</source> <source>Remove</source>
<translation>Удалить</translation> <translation>Удалить</translation>
</message> </message>
<message> <message>
<location filename="../form/prog/programswindow.cpp" line="332"/> <location filename="../form/prog/programswindow.cpp" line="376"/>
<source>Are you sure to remove all non-existent programs?</source> <source>Are you sure to remove all non-existent programs?</source>
<translation>Удалить все несуществующие программы?</translation> <translation>Удалить все несуществующие программы?</translation>
</message> </message>
<message> <message>
<location filename="../form/prog/programswindow.cpp" line="252"/> <location filename="../form/prog/programswindow.cpp" line="276"/>
<source>Programs (*.exe);;All files (*.*)</source> <source>Programs (*.exe);;All files (*.*)</source>
<translation>Программы (*.exe);;Все файлы (*.*)</translation> <translation>Программы (*.exe);;Все файлы (*.*)</translation>
</message> </message>
@ -784,52 +794,52 @@
<context> <context>
<name>SchedulePage</name> <name>SchedulePage</name>
<message> <message>
<location filename="../form/opt/pages/schedulepage.cpp" line="67"/> <location filename="../form/opt/pages/schedulepage.cpp" line="68"/>
<source>Run</source> <source>Run</source>
<translation>Запустить</translation> <translation>Запустить</translation>
</message> </message>
<message> <message>
<location filename="../form/opt/pages/schedulepage.cpp" line="68"/> <location filename="../form/opt/pages/schedulepage.cpp" line="69"/>
<source>Abort</source> <source>Abort</source>
<translation>Остановить</translation> <translation>Остановить</translation>
</message> </message>
<message> <message>
<location filename="../form/opt/pages/schedulepage.cpp" line="76"/> <location filename="../form/opt/pages/schedulepage.cpp" line="77"/>
<source>Custom</source> <source>Custom</source>
<translation>Нестандартный</translation> <translation>Нестандартный</translation>
</message> </message>
<message> <message>
<location filename="../form/opt/pages/schedulepage.cpp" line="76"/> <location filename="../form/opt/pages/schedulepage.cpp" line="77"/>
<source>Hourly</source> <source>Hourly</source>
<translation>Каждый час</translation> <translation>Каждый час</translation>
</message> </message>
<message> <message>
<location filename="../form/opt/pages/schedulepage.cpp" line="76"/> <location filename="../form/opt/pages/schedulepage.cpp" line="77"/>
<source>Each 6 hours</source> <source>Each 6 hours</source>
<translation>Каждые 6 часов</translation> <translation>Каждые 6 часов</translation>
</message> </message>
<message> <message>
<location filename="../form/opt/pages/schedulepage.cpp" line="77"/> <location filename="../form/opt/pages/schedulepage.cpp" line="78"/>
<source>Each 12 hours</source> <source>Each 12 hours</source>
<translation>Каждые 12 часов</translation> <translation>Каждые 12 часов</translation>
</message> </message>
<message> <message>
<location filename="../form/opt/pages/schedulepage.cpp" line="77"/> <location filename="../form/opt/pages/schedulepage.cpp" line="78"/>
<source>Daily</source> <source>Daily</source>
<translation>Каждый день</translation> <translation>Каждый день</translation>
</message> </message>
<message> <message>
<location filename="../form/opt/pages/schedulepage.cpp" line="77"/> <location filename="../form/opt/pages/schedulepage.cpp" line="78"/>
<source>Weekly</source> <source>Weekly</source>
<translation>Каждую неделю</translation> <translation>Каждую неделю</translation>
</message> </message>
<message> <message>
<location filename="../form/opt/pages/schedulepage.cpp" line="77"/> <location filename="../form/opt/pages/schedulepage.cpp" line="78"/>
<source>Monthly</source> <source>Monthly</source>
<translation>Каждый месяц</translation> <translation>Каждый месяц</translation>
</message> </message>
<message> <message>
<location filename="../form/opt/pages/schedulepage.cpp" line="81"/> <location filename="../form/opt/pages/schedulepage.cpp" line="82"/>
<source> hours</source> <source> hours</source>
<translation> час.</translation> <translation> час.</translation>
</message> </message>
@ -1196,78 +1206,78 @@
<context> <context>
<name>ZonesWindow</name> <name>ZonesWindow</name>
<message> <message>
<location filename="../form/zone/zoneswindow.cpp" line="73"/>
<location filename="../form/zone/zoneswindow.cpp" line="75"/> <location filename="../form/zone/zoneswindow.cpp" line="75"/>
<location filename="../form/zone/zoneswindow.cpp" line="77"/>
<source>Edit</source> <source>Edit</source>
<translation>Изменить</translation> <translation>Изменить</translation>
</message> </message>
<message> <message>
<location filename="../form/zone/zoneswindow.cpp" line="74"/> <location filename="../form/zone/zoneswindow.cpp" line="76"/>
<source>Add</source> <source>Add</source>
<translation>Добавить</translation> <translation>Добавить</translation>
</message> </message>
<message> <message>
<location filename="../form/zone/zoneswindow.cpp" line="76"/> <location filename="../form/zone/zoneswindow.cpp" line="78"/>
<source>Remove</source> <source>Remove</source>
<translation>Удалить</translation> <translation>Удалить</translation>
</message> </message>
<message> <message>
<location filename="../form/zone/zoneswindow.cpp" line="78"/> <location filename="../form/zone/zoneswindow.cpp" line="83"/>
<source>Zone Name:</source> <source>Zone Name:</source>
<translation>Наименование зоны:</translation> <translation>Наименование зоны:</translation>
</message> </message>
<message> <message>
<location filename="../form/zone/zoneswindow.cpp" line="79"/> <location filename="../form/zone/zoneswindow.cpp" line="84"/>
<source>Source:</source> <source>Source:</source>
<translation>Источник:</translation> <translation>Источник:</translation>
</message> </message>
<message> <message>
<location filename="../form/zone/zoneswindow.cpp" line="80"/> <location filename="../form/zone/zoneswindow.cpp" line="85"/>
<source>Enabled</source> <source>Enabled</source>
<translation>Включено</translation> <translation>Включено</translation>
</message> </message>
<message> <message>
<location filename="../form/zone/zoneswindow.cpp" line="81"/> <location filename="../form/zone/zoneswindow.cpp" line="86"/>
<source>Store Text</source> <source>Store Text</source>
<translation>Сохранять текст</translation> <translation>Сохранять текст</translation>
</message> </message>
<message> <message>
<location filename="../form/zone/zoneswindow.cpp" line="82"/> <location filename="../form/zone/zoneswindow.cpp" line="87"/>
<source>Custom URL</source> <source>Custom URL</source>
<translation>Нестандартная ссылка</translation> <translation>Нестандартная ссылка</translation>
</message> </message>
<message> <message>
<location filename="../form/zone/zoneswindow.cpp" line="83"/> <location filename="../form/zone/zoneswindow.cpp" line="88"/>
<source>URL:</source> <source>URL:</source>
<translation>Ссылка:</translation> <translation>Ссылка:</translation>
</message> </message>
<message> <message>
<location filename="../form/zone/zoneswindow.cpp" line="84"/> <location filename="../form/zone/zoneswindow.cpp" line="89"/>
<source>Form Data:</source> <source>Form Data:</source>
<translation>Данные формы:</translation> <translation>Данные формы:</translation>
</message> </message>
<message> <message>
<location filename="../form/zone/zoneswindow.cpp" line="85"/> <location filename="../form/zone/zoneswindow.cpp" line="90"/>
<source>OK</source> <source>OK</source>
<translation>OK</translation> <translation>OK</translation>
</message> </message>
<message> <message>
<location filename="../form/zone/zoneswindow.cpp" line="86"/> <location filename="../form/zone/zoneswindow.cpp" line="91"/>
<source>Cancel</source> <source>Cancel</source>
<translation>Отмена</translation> <translation>Отмена</translation>
</message> </message>
<message> <message>
<location filename="../form/zone/zoneswindow.cpp" line="88"/> <location filename="../form/zone/zoneswindow.cpp" line="81"/>
<source>Edit Zone</source> <source>Edit Zone</source>
<translation>Редактирование зоны</translation> <translation>Редактирование зоны</translation>
</message> </message>
<message> <message>
<location filename="../form/zone/zoneswindow.cpp" line="92"/> <location filename="../form/zone/zoneswindow.cpp" line="95"/>
<source>Zones</source> <source>Zones</source>
<translation>Зоны</translation> <translation>Зоны</translation>
</message> </message>
<message> <message>
<location filename="../form/zone/zoneswindow.cpp" line="251"/> <location filename="../form/zone/zoneswindow.cpp" line="254"/>
<source>Are you sure to remove selected zone?</source> <source>Are you sure to remove selected zone?</source>
<translation>Удалить выбранную зону?</translation> <translation>Удалить выбранную зону?</translation>
</message> </message>