From 40a7ac0b6767a2913f0f1fc8970cdb2bc9b11de8 Mon Sep 17 00:00:00 2001 From: Qv2ray-Bot <59914293+Qv2ray-Bot@users.noreply.github.com> Date: Sun, 2 Feb 2020 21:31:28 +0800 Subject: [PATCH] fix: several fixes in the complex connection editor --- Build.Counter | 2 +- src/ui/editors/w_RoutesEditor.cpp | 32 ++++++++++++------------- src/ui/editors/w_RoutesEditor.hpp | 1 + src/ui/editors/w_RoutesEditor.ui | 29 +++++++++++++++------- src/ui/editors/w_RoutesEditor_extra.cpp | 31 ++++++++++++++++++++++++ 5 files changed, 68 insertions(+), 27 deletions(-) diff --git a/Build.Counter b/Build.Counter index 94037c4c..1d54dd87 100644 --- a/Build.Counter +++ b/Build.Counter @@ -1 +1 @@ -3574 +3585 diff --git a/src/ui/editors/w_RoutesEditor.cpp b/src/ui/editors/w_RoutesEditor.cpp index 43a3647b..b13f6b6f 100644 --- a/src/ui/editors/w_RoutesEditor.cpp +++ b/src/ui/editors/w_RoutesEditor.cpp @@ -368,6 +368,9 @@ void RouteEditor::ShowCurrentRuleDetail() // Switch to the detailed page. ruleEnableCB->setEnabled(true); ruleEnableCB->setChecked(CurrentRule.QV2RAY_RULE_ENABLED); + routeEditGroupBox->setEnabled(true); + ruleTagLineEdit->setEnabled(true); + routeRuleGroupBox->setEnabled(true); LOAD_FLAG_BEGIN ruleTagLineEdit->setText(CurrentRule.QV2RAY_RULE_TAG); balancerSelectionCombo->clear(); @@ -668,7 +671,7 @@ void RouteEditor::on_delBtn_clicked() nodeScene->removeNode(*inboundNodes[currentInboundOutboundTag]); inboundNodes.remove(currentInboundOutboundTag); - // Remove corresponded inboundtags from the rules. + // Remove corresponded inbound tags from the rules. for (auto k : rules.keys()) { auto v = rules[k]; v.inboundTag.removeAll(currentInboundOutboundTag); @@ -679,10 +682,9 @@ void RouteEditor::on_delBtn_clicked() } else if (isOutbound) { currentInboundOutboundTag = GetFirstNodeData(*firstNode, QvOutboundNodeModel, OutboundNodeData)->GetOutbound(); outbounds.remove(currentInboundOutboundTag); - defaultOutboundCombo->clear(); - defaultOutboundCombo->addItems(outbounds.keys()); + ResolveDefaultOutboundTag(currentInboundOutboundTag, ""); - // Remove corresponded inboundtags from the rules. + // Remove corresponded outbound tags from the rules. for (auto k : rules.keys()) { auto v = rules[k]; @@ -692,28 +694,24 @@ void RouteEditor::on_delBtn_clicked() rules[k] = v; } - if (currentInboundOutboundTag == defaultOutbound) { - // Set default outbound to the new one since the current has been removed. - defaultOutbound = outbounds.firstKey(); - } - - defaultOutboundCombo->setCurrentText(defaultOutbound); nodeScene->removeNode(*outboundNodes[currentInboundOutboundTag]); outboundNodes.remove(currentInboundOutboundTag); } else if (isRule) { ruleEnableCB->setEnabled(false); - currentRuleTag = GetFirstNodeData(*firstNode, QvRuleNodeDataModel, RuleNodeData)->GetRuleTag(); + ruleTagLineEdit->setEnabled(false); + auto RuleTag = GetFirstNodeData(*firstNode, QvRuleNodeDataModel, RuleNodeData)->GetRuleTag(); + currentRuleTag.clear(); routeRuleGroupBox->setEnabled(false); routeEditGroupBox->setEnabled(false); - rules.remove(currentRuleTag); - nodeScene->removeNode(*ruleNodes[currentRuleTag]); - ruleNodes.remove(currentRuleTag); + rules.remove(RuleTag); + nodeScene->removeNode(*ruleNodes[RuleTag]); + ruleNodes.remove(RuleTag); // // Remove item from the rule order list widget. - ruleListWidget->takeItem(ruleListWidget->row(ruleListWidget->findItems(currentRuleTag, Qt::MatchExactly).first())); + ruleListWidget->takeItem(ruleListWidget->row(ruleListWidget->findItems(RuleTag, Qt::MatchExactly).first())); CHECKEMPTYRULES - currentRuleTag = rules.firstKey(); - ShowCurrentRuleDetail(); + //currentRuleTag = rules.firstKey(); + //ShowCurrentRuleDetail(); } else { LOG(MODULE_UI, "Unknown node selected.") QvMessageBoxWarn(this, tr("Error"), tr("Qv2ray entered an unknown state.")); diff --git a/src/ui/editors/w_RoutesEditor.hpp b/src/ui/editors/w_RoutesEditor.hpp index 69cac987..7b16ec6d 100644 --- a/src/ui/editors/w_RoutesEditor.hpp +++ b/src/ui/editors/w_RoutesEditor.hpp @@ -124,4 +124,5 @@ class RouteEditor : public QDialog, private Ui::RouteEditor void AddOutbound(OUTBOUND out); void AddRule(RuleObject rule); QString AddNewRule(); + void ResolveDefaultOutboundTag(QString original, QString newTag); }; diff --git a/src/ui/editors/w_RoutesEditor.ui b/src/ui/editors/w_RoutesEditor.ui index 48492f13..d75b612d 100644 --- a/src/ui/editors/w_RoutesEditor.ui +++ b/src/ui/editors/w_RoutesEditor.ui @@ -227,7 +227,7 @@ Add new route - Add Route + Add Rule @@ -262,15 +262,15 @@ - 1 + 0 0 0 - 359 - 511 + 361 + 512 @@ -317,7 +317,14 @@ - + + + + 0 + 0 + + + @@ -363,9 +370,9 @@ 0 - -140 - 345 - 651 + 0 + 341 + 687 @@ -402,7 +409,11 @@ - + + + false + + diff --git a/src/ui/editors/w_RoutesEditor_extra.cpp b/src/ui/editors/w_RoutesEditor_extra.cpp index 3c9308d8..87e8baa6 100644 --- a/src/ui/editors/w_RoutesEditor_extra.cpp +++ b/src/ui/editors/w_RoutesEditor_extra.cpp @@ -170,6 +170,9 @@ void RouteEditor::RenameItemTag(ROUTE_EDIT_MODE mode, const QString originalTag, rules[k] = v; } } + + // Resolve default outbound. + ResolveDefaultOutboundTag(originalTag, newTag); } else { LOG(MODULE_UI, "Failed to rename an outbound --> Item not found.") } @@ -213,3 +216,31 @@ void RouteEditor::RenameItemTag(ROUTE_EDIT_MODE mode, const QString originalTag, break; } } + +void RouteEditor::ResolveDefaultOutboundTag(QString original, QString newTag) +{ + LOG(MODULE_UI, "Resolving default outbound settings: default=" + defaultOutbound + " original=" + original + " new=" + newTag) + auto isDefaultChanged = original == defaultOutbound; + defaultOutboundCombo->clear(); + defaultOutboundCombo->addItems(outbounds.keys()); + + if (!isDefaultChanged) { + LOG(MODULE_UI, "Default outbound is not changed: retaining: " + defaultOutbound) + // Just simply restore the default one. + defaultOutboundCombo->setCurrentText(defaultOutbound); + } else if (newTag.isEmpty()) { + LOG(MODULE_UI, "Default outbound is removed, using first key from the outbounds as the default one.") + + // Removed the default one, so set the first one as the default. + if (outbounds.isEmpty()) { + defaultOutbound.clear(); + } else { + defaultOutbound = getTag(outbounds.first()); + defaultOutboundCombo->addItem(outbounds.firstKey()); + } + } else { + LOG(MODULE_UI, "Default outbound is renamed, ") + defaultOutboundCombo->setCurrentText(newTag); + defaultOutbound = newTag; + } +}