fix: several fixes in the complex connection editor

This commit is contained in:
Qv2ray-Bot 2020-02-02 21:31:28 +08:00
parent 644b8d00b6
commit 40a7ac0b67
5 changed files with 68 additions and 27 deletions

View File

@ -1 +1 @@
3574 3585

View File

@ -368,6 +368,9 @@ void RouteEditor::ShowCurrentRuleDetail()
// Switch to the detailed page. // Switch to the detailed page.
ruleEnableCB->setEnabled(true); ruleEnableCB->setEnabled(true);
ruleEnableCB->setChecked(CurrentRule.QV2RAY_RULE_ENABLED); ruleEnableCB->setChecked(CurrentRule.QV2RAY_RULE_ENABLED);
routeEditGroupBox->setEnabled(true);
ruleTagLineEdit->setEnabled(true);
routeRuleGroupBox->setEnabled(true);
LOAD_FLAG_BEGIN LOAD_FLAG_BEGIN
ruleTagLineEdit->setText(CurrentRule.QV2RAY_RULE_TAG); ruleTagLineEdit->setText(CurrentRule.QV2RAY_RULE_TAG);
balancerSelectionCombo->clear(); balancerSelectionCombo->clear();
@ -668,7 +671,7 @@ void RouteEditor::on_delBtn_clicked()
nodeScene->removeNode(*inboundNodes[currentInboundOutboundTag]); nodeScene->removeNode(*inboundNodes[currentInboundOutboundTag]);
inboundNodes.remove(currentInboundOutboundTag); inboundNodes.remove(currentInboundOutboundTag);
// Remove corresponded inboundtags from the rules. // Remove corresponded inbound tags from the rules.
for (auto k : rules.keys()) { for (auto k : rules.keys()) {
auto v = rules[k]; auto v = rules[k];
v.inboundTag.removeAll(currentInboundOutboundTag); v.inboundTag.removeAll(currentInboundOutboundTag);
@ -679,10 +682,9 @@ void RouteEditor::on_delBtn_clicked()
} else if (isOutbound) { } else if (isOutbound) {
currentInboundOutboundTag = GetFirstNodeData(*firstNode, QvOutboundNodeModel, OutboundNodeData)->GetOutbound(); currentInboundOutboundTag = GetFirstNodeData(*firstNode, QvOutboundNodeModel, OutboundNodeData)->GetOutbound();
outbounds.remove(currentInboundOutboundTag); outbounds.remove(currentInboundOutboundTag);
defaultOutboundCombo->clear(); ResolveDefaultOutboundTag(currentInboundOutboundTag, "");
defaultOutboundCombo->addItems(outbounds.keys());
// Remove corresponded inboundtags from the rules. // Remove corresponded outbound tags from the rules.
for (auto k : rules.keys()) { for (auto k : rules.keys()) {
auto v = rules[k]; auto v = rules[k];
@ -692,28 +694,24 @@ void RouteEditor::on_delBtn_clicked()
rules[k] = v; 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]); nodeScene->removeNode(*outboundNodes[currentInboundOutboundTag]);
outboundNodes.remove(currentInboundOutboundTag); outboundNodes.remove(currentInboundOutboundTag);
} else if (isRule) { } else if (isRule) {
ruleEnableCB->setEnabled(false); ruleEnableCB->setEnabled(false);
currentRuleTag = GetFirstNodeData(*firstNode, QvRuleNodeDataModel, RuleNodeData)->GetRuleTag(); ruleTagLineEdit->setEnabled(false);
auto RuleTag = GetFirstNodeData(*firstNode, QvRuleNodeDataModel, RuleNodeData)->GetRuleTag();
currentRuleTag.clear();
routeRuleGroupBox->setEnabled(false); routeRuleGroupBox->setEnabled(false);
routeEditGroupBox->setEnabled(false); routeEditGroupBox->setEnabled(false);
rules.remove(currentRuleTag); rules.remove(RuleTag);
nodeScene->removeNode(*ruleNodes[currentRuleTag]); nodeScene->removeNode(*ruleNodes[RuleTag]);
ruleNodes.remove(currentRuleTag); ruleNodes.remove(RuleTag);
// //
// Remove item from the rule order list widget. // 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 CHECKEMPTYRULES
currentRuleTag = rules.firstKey(); //currentRuleTag = rules.firstKey();
ShowCurrentRuleDetail(); //ShowCurrentRuleDetail();
} else { } else {
LOG(MODULE_UI, "Unknown node selected.") LOG(MODULE_UI, "Unknown node selected.")
QvMessageBoxWarn(this, tr("Error"), tr("Qv2ray entered an unknown state.")); QvMessageBoxWarn(this, tr("Error"), tr("Qv2ray entered an unknown state."));

View File

@ -124,4 +124,5 @@ class RouteEditor : public QDialog, private Ui::RouteEditor
void AddOutbound(OUTBOUND out); void AddOutbound(OUTBOUND out);
void AddRule(RuleObject rule); void AddRule(RuleObject rule);
QString AddNewRule(); QString AddNewRule();
void ResolveDefaultOutboundTag(QString original, QString newTag);
}; };

View File

@ -227,7 +227,7 @@
<string>Add new route</string> <string>Add new route</string>
</property> </property>
<property name="text"> <property name="text">
<string>Add Route</string> <string>Add Rule</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -262,15 +262,15 @@
<item row="1" column="1"> <item row="1" column="1">
<widget class="QToolBox" name="toolBox"> <widget class="QToolBox" name="toolBox">
<property name="currentIndex"> <property name="currentIndex">
<number>1</number> <number>0</number>
</property> </property>
<widget class="QWidget" name="page_2"> <widget class="QWidget" name="page_2">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>359</width> <width>361</width>
<height>511</height> <height>512</height>
</rect> </rect>
</property> </property>
<attribute name="label"> <attribute name="label">
@ -317,7 +317,14 @@
</widget> </widget>
</item> </item>
<item row="1" column="1"> <item row="1" column="1">
<widget class="QComboBox" name="defaultOutboundCombo"/> <widget class="QComboBox" name="defaultOutboundCombo">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item> </item>
</layout> </layout>
</widget> </widget>
@ -363,9 +370,9 @@
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>0</x> <x>0</x>
<y>-140</y> <y>0</y>
<width>345</width> <width>341</width>
<height>651</height> <height>687</height>
</rect> </rect>
</property> </property>
<attribute name="label"> <attribute name="label">
@ -402,7 +409,11 @@
</widget> </widget>
</item> </item>
<item row="1" column="1"> <item row="1" column="1">
<widget class="QLineEdit" name="ruleTagLineEdit"/> <widget class="QLineEdit" name="ruleTagLineEdit">
<property name="enabled">
<bool>false</bool>
</property>
</widget>
</item> </item>
</layout> </layout>
</item> </item>

View File

@ -170,6 +170,9 @@ void RouteEditor::RenameItemTag(ROUTE_EDIT_MODE mode, const QString originalTag,
rules[k] = v; rules[k] = v;
} }
} }
// Resolve default outbound.
ResolveDefaultOutboundTag(originalTag, newTag);
} else { } else {
LOG(MODULE_UI, "Failed to rename an outbound --> Item not found.") 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; 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;
}
}