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;
+ }
+}