diff --git a/src/ui/form/opt/pages/applicationspage.cpp b/src/ui/form/opt/pages/applicationspage.cpp index 1ffb095b..b68db450 100644 --- a/src/ui/form/opt/pages/applicationspage.cpp +++ b/src/ui/form/opt/pages/applicationspage.cpp @@ -66,8 +66,8 @@ void pageAppGroupCheckEdited(ApplicationsPage *page, AppGroup *appGroup, bool is } void pageAppGroupSetChecked(ApplicationsPage *page, - const std::function &setBoolFunc, - bool v, bool isFlag = false) + const std::function &setBoolFunc, bool v, + bool isFlag = false) { AppGroup *appGroup = page->appGroup(); @@ -77,8 +77,7 @@ void pageAppGroupSetChecked(ApplicationsPage *page, } void pageAppGroupSetUInt16(ApplicationsPage *page, - const std::function &setUInt16Func, - quint16 v) + const std::function &setUInt16Func, quint16 v) { AppGroup *appGroup = page->appGroup(); @@ -88,8 +87,7 @@ void pageAppGroupSetUInt16(ApplicationsPage *page, } void pageAppGroupSetUInt32(ApplicationsPage *page, - const std::function &setUInt32Func, - quint32 v) + const std::function &setUInt32Func, quint32 v) { AppGroup *appGroup = page->appGroup(); @@ -418,10 +416,9 @@ void ApplicationsPage::setupGroupOptions() setupGroupLimitBufferSize(); // Menu - const QList menuWidgets = { m_cbApplyChild, m_cbLanOnly, - ControlUtil::createSeparator(), m_cbLogBlocked, m_cbLogConn, ControlUtil::createSeparator(), - m_cscLimitIn, m_cscLimitOut, m_limitLatency, m_limitPacketLoss, m_limitBufferSizeIn, - m_limitBufferSizeOut }; + const QList menuWidgets = { m_cbApplyChild, ControlUtil::createSeparator(), + m_cbLogBlocked, m_cbLogConn, ControlUtil::createSeparator(), m_cscLimitIn, m_cscLimitOut, + m_limitLatency, m_limitPacketLoss, m_limitBufferSizeIn, m_limitBufferSizeOut }; auto layout = ControlUtil::createLayoutByWidgets(menuWidgets); auto menu = ControlUtil::createMenuByLayout(layout, this); @@ -432,24 +429,20 @@ void ApplicationsPage::setupGroupOptions() void ApplicationsPage::setupGroupOptionFlags() { - m_cbApplyChild = ControlUtil::createCheckBox(false, [&](bool checked) { - pageAppGroupSetChecked(this, &AppGroup::setApplyChild, checked); - }); + m_cbApplyChild = ControlUtil::createCheckBox(false, + [&](bool checked) { pageAppGroupSetChecked(this, &AppGroup::setApplyChild, checked); }); - m_cbLanOnly = ControlUtil::createCheckBox(false, [&](bool checked) { - pageAppGroupSetChecked(this, &AppGroup::setLanOnly, checked); - }); + m_cbLanOnly = ControlUtil::createCheckBox(false, + [&](bool checked) { pageAppGroupSetChecked(this, &AppGroup::setLanOnly, checked); }); } void ApplicationsPage::setupGroupLog() { - m_cbLogBlocked = ControlUtil::createCheckBox(false, [&](bool checked) { - pageAppGroupSetChecked(this, &AppGroup::setLogBlocked, checked); - }); + m_cbLogBlocked = ControlUtil::createCheckBox(false, + [&](bool checked) { pageAppGroupSetChecked(this, &AppGroup::setLogBlocked, checked); }); - m_cbLogConn = ControlUtil::createCheckBox(false, [&](bool checked) { - pageAppGroupSetChecked(this, &AppGroup::setLogConn, checked); - }); + m_cbLogConn = ControlUtil::createCheckBox(false, + [&](bool checked) { pageAppGroupSetChecked(this, &AppGroup::setLogConn, checked); }); m_cbLogConn->setVisible(false); // TODO: Collect allowed connections } @@ -537,6 +530,8 @@ void ApplicationsPage::setupAllowApps() m_allowApps = new AppsColumn(); m_allowApps->icon()->setPixmap(IconCache::file(":/icons/accept.png")); + m_allowApps->headerLayout()->addWidget(m_cbLanOnly); + connect(m_allowApps->editText(), &QPlainTextEdit::textChanged, this, [&] { const auto text = m_allowApps->editText()->toPlainText(); diff --git a/src/ui/form/opt/pages/apps/appscolumn.cpp b/src/ui/form/opt/pages/apps/appscolumn.cpp index 7dae7c07..10f14e41 100644 --- a/src/ui/form/opt/pages/apps/appscolumn.cpp +++ b/src/ui/form/opt/pages/apps/appscolumn.cpp @@ -17,9 +17,9 @@ void AppsColumn::setupUi() layout->setContentsMargins(0, 0, 0, 0); // Header - auto headerLayout = new QHBoxLayout(); - headerLayout->setSpacing(2); - layout->addLayout(headerLayout); + m_headerLayout = new QHBoxLayout(); + m_headerLayout->setSpacing(2); + layout->addLayout(m_headerLayout); m_icon = ControlUtil::createLabel(); m_icon->setScaledContents(true); @@ -28,8 +28,8 @@ void AppsColumn::setupUi() m_labelTitle = ControlUtil::createLabel(); m_labelTitle->setFont(ControlUtil::fontDemiBold()); - headerLayout->addWidget(m_icon); - headerLayout->addWidget(m_labelTitle, 1); + m_headerLayout->addWidget(m_icon); + m_headerLayout->addWidget(m_labelTitle, 1); // Text Area m_editText = new PlainTextEdit(); diff --git a/src/ui/form/opt/pages/apps/appscolumn.h b/src/ui/form/opt/pages/apps/appscolumn.h index f0b91d2b..010d5d55 100644 --- a/src/ui/form/opt/pages/apps/appscolumn.h +++ b/src/ui/form/opt/pages/apps/appscolumn.h @@ -3,6 +3,7 @@ #include +QT_FORWARD_DECLARE_CLASS(QHBoxLayout) QT_FORWARD_DECLARE_CLASS(QLabel) class PlainTextEdit; @@ -14,6 +15,7 @@ class AppsColumn : public QWidget public: explicit AppsColumn(QWidget *parent = nullptr); + QHBoxLayout *headerLayout() const { return m_headerLayout; } QLabel *icon() const { return m_icon; } QLabel *labelTitle() const { return m_labelTitle; } PlainTextEdit *editText() const { return m_editText; } @@ -22,6 +24,7 @@ private: void setupUi(); private: + QHBoxLayout *m_headerLayout = nullptr; QLabel *m_icon = nullptr; QLabel *m_labelTitle = nullptr; PlainTextEdit *m_editText = nullptr; diff --git a/src/ui/form/prog/programeditdialog.cpp b/src/ui/form/prog/programeditdialog.cpp index e1c0aced..a7a78cfb 100644 --- a/src/ui/form/prog/programeditdialog.cpp +++ b/src/ui/form/prog/programeditdialog.cpp @@ -166,11 +166,11 @@ void ProgramEditDialog::setupUi() // Allow/Block auto allowLayout = setupAllowLayout(); - // Block at specified date & time - auto blockAtLayout = setupCheckDateTimeEdit(); + // Extra Allow/Block Options + auto extraLayout = setupExtraLayout(); - // Eclusive End Time CheckBoxes Group - setupAllowEclusiveGroup(); + // Allow/Block Connections + setupAllowConnections(); // OK/Cancel auto buttonsLayout = new QHBoxLayout(); @@ -195,9 +195,8 @@ void ProgramEditDialog::setupUi() layout->addLayout(logLayout); layout->addWidget(ControlUtil::createSeparator()); layout->addLayout(allowLayout); - layout->addWidget(m_cscBlockAppIn); - layout->addLayout(blockAtLayout); - layout->addWidget(m_cbBlockAppNone); + layout->addWidget(ControlUtil::createSeparator()); + layout->addLayout(extraLayout); layout->addStretch(); layout->addWidget(ControlUtil::createSeparator()); layout->addLayout(buttonsLayout); @@ -247,11 +246,6 @@ QLayout *ProgramEditDialog::setupAppLayout() layout->addRow(QString(), m_cbApplyChild); - // LAN Only - m_cbLanOnly = new QCheckBox(); - - layout->addRow(QString(), m_cbLanOnly); - return layout; } @@ -322,19 +316,16 @@ void ProgramEditDialog::setupComboAppGroups() QLayout *ProgramEditDialog::setupLogLayout() { - auto layout = new QFormLayout(); - // Log Blocked m_cbLogBlocked = new QCheckBox(); - layout->addRow(QString(), m_cbLogBlocked); - // Log Conn m_cbLogConn = new QCheckBox(); - m_cbLogConn->setVisible(false); // TODO: Collect allowed connections - layout->addRow(QString(), m_cbLogConn); + auto layout = new QVBoxLayout(); + layout->addWidget(m_cbLogBlocked); + layout->addWidget(m_cbLogConn); return layout; } @@ -358,30 +349,36 @@ QLayout *ProgramEditDialog::setupAllowLayout() allowLayout->addWidget(m_rbBlockApp, 1, Qt::AlignHCenter); allowLayout->addWidget(m_rbKillProcess, 1, Qt::AlignLeft); + return allowLayout; +} + +QLayout *ProgramEditDialog::setupExtraLayout() +{ + // LAN Only + m_cbLanOnly = new QCheckBox(); + // Block after N hours 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(); - connect(m_rbAllowApp, &QRadioButton::toggled, this, [&](bool checked) { - m_cbBlockAppNone->setEnabled(checked); - m_cscBlockAppIn->setEnabled(checked); - m_cbBlockAppAt->setEnabled(checked); - m_dteBlockAppAt->setEnabled(checked); - }); + // Eclusive End Time CheckBoxes Group + setupAllowEclusiveGroup(); - connect(m_rbKillProcess, &QRadioButton::clicked, this, [&] { - IoC()->showInfoBox( - tr("Attention: The 'Kill Process' option is very dangerous!!!\n\n" - "Be careful when killing a system services or other important programs!\n" - "It can cause a Windows malfunction or totally unusable.")); - }); + auto layout = new QVBoxLayout(); + layout->addWidget(m_cbLanOnly); + layout->addWidget(m_cscBlockAppIn); + layout->addLayout(blockAtLayout); + layout->addWidget(m_cbBlockAppNone); - return allowLayout; + return layout; } QLayout *ProgramEditDialog::setupCheckDateTimeEdit() @@ -403,6 +400,24 @@ void ProgramEditDialog::setupAllowEclusiveGroup() group->addButton(m_cbBlockAppNone); } +void ProgramEditDialog::setupAllowConnections() +{ + connect(m_rbAllowApp, &QRadioButton::toggled, this, [&](bool checked) { + m_cbLanOnly->setEnabled(checked); + m_cbBlockAppNone->setEnabled(checked); + m_cscBlockAppIn->setEnabled(checked); + m_cbBlockAppAt->setEnabled(checked); + m_dteBlockAppAt->setEnabled(checked); + }); + + connect(m_rbKillProcess, &QRadioButton::clicked, this, [&] { + IoC()->showInfoBox( + tr("Attention: The 'Kill Process' option is very dangerous!!!\n\n" + "Be careful when killing a system services or other important programs!\n" + "It can cause a Windows malfunction or totally unusable.")); + }); +} + bool ProgramEditDialog::save() { const int appIdsCount = m_appIdList.size(); diff --git a/src/ui/form/prog/programeditdialog.h b/src/ui/form/prog/programeditdialog.h index 1843ef81..18412f69 100644 --- a/src/ui/form/prog/programeditdialog.h +++ b/src/ui/form/prog/programeditdialog.h @@ -50,8 +50,10 @@ private: void setupComboAppGroups(); QLayout *setupLogLayout(); QLayout *setupAllowLayout(); + QLayout *setupExtraLayout(); QLayout *setupCheckDateTimeEdit(); void setupAllowEclusiveGroup(); + void setupAllowConnections(); bool save(); bool saveApp(App &app);