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.
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."));

View File

@ -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);
};

View File

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

View File

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