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

View File

@ -5,6 +5,7 @@
QT_FORWARD_DECLARE_CLASS(QCheckBox)
QT_FORWARD_DECLARE_CLASS(QComboBox)
QT_FORWARD_DECLARE_CLASS(QDateTimeEdit)
QT_FORWARD_DECLARE_CLASS(QDialog)
QT_FORWARD_DECLARE_CLASS(QLabel)
QT_FORWARD_DECLARE_CLASS(QLineEdit)
@ -45,6 +46,7 @@ private:
void setupUi();
void setupAppEditForm();
void setupComboAppGroups();
QLayout *setupCheckDateTimeEdit();
QLayout *setupHeader();
void setupLogOptions();
void setupLogBlocked();
@ -98,7 +100,10 @@ private:
QCheckBox *m_cbUseGroupPerm = nullptr;
QRadioButton *m_rbAllowApp = 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_btEditCancel = nullptr;
QDialog *m_formAppEdit = nullptr;

View File

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

Binary file not shown.

View File

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