mirror of
https://github.com/Qv2ray/Qv2ray.git
synced 2025-05-19 18:30:34 +08:00
merging
This commit is contained in:
commit
2a21b89f0c
@ -1 +1 @@
|
|||||||
4739
|
4741
|
@ -99,7 +99,9 @@ void MainWindow::SortConnectionList(MW_ITEM_COL byCol, bool asending)
|
|||||||
{
|
{
|
||||||
connectionListWidget->sortByColumn(MW_ITEM_COL_NAME, Qt::AscendingOrder);
|
connectionListWidget->sortByColumn(MW_ITEM_COL_NAME, Qt::AscendingOrder);
|
||||||
for (auto i = 0; i < connectionListWidget->topLevelItemCount(); i++)
|
for (auto i = 0; i < connectionListWidget->topLevelItemCount(); i++)
|
||||||
{ connectionListWidget->topLevelItem(i)->sortChildren(byCol, asending ? Qt::AscendingOrder : Qt::DescendingOrder); }
|
{
|
||||||
|
connectionListWidget->topLevelItem(i)->sortChildren(byCol, asending ? Qt::AscendingOrder : Qt::DescendingOrder);
|
||||||
|
}
|
||||||
on_locateBtn_clicked();
|
on_locateBtn_clicked();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -108,7 +110,6 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
|
|||||||
setupUi(this);
|
setupUi(this);
|
||||||
MainWindow::mwInstance = this;
|
MainWindow::mwInstance = this;
|
||||||
QvMessageBusConnect(MainWindow);
|
QvMessageBusConnect(MainWindow);
|
||||||
adjustSize();
|
|
||||||
//
|
//
|
||||||
infoWidget = new ConnectionInfoWidget(this);
|
infoWidget = new ConnectionInfoWidget(this);
|
||||||
connectionInfoLayout->addWidget(infoWidget);
|
connectionInfoLayout->addWidget(infoWidget);
|
||||||
@ -258,7 +259,10 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
|
|||||||
MWAddGroupItem_p(group);
|
MWAddGroupItem_p(group);
|
||||||
auto connections = ConnectionManager->Connections(group);
|
auto connections = ConnectionManager->Connections(group);
|
||||||
|
|
||||||
for (auto connection : connections) { MWAddConnectionItem_p(connection, group); }
|
for (auto connection : connections)
|
||||||
|
{
|
||||||
|
MWAddConnectionItem_p(connection, group);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
// Find and start if there is an auto-connection
|
// Find and start if there is an auto-connection
|
||||||
@ -863,7 +867,10 @@ void MainWindow::OnGroupCreated(const GroupId &id, const QString &displayName)
|
|||||||
}
|
}
|
||||||
void MainWindow::OnGroupDeleted(const GroupId &id, const QList<ConnectionId> &connections)
|
void MainWindow::OnGroupDeleted(const GroupId &id, const QList<ConnectionId> &connections)
|
||||||
{
|
{
|
||||||
for (auto conn : connections) { groupNodes.value(id)->removeChild(connectionNodes.value(conn).get()); }
|
for (auto conn : connections)
|
||||||
|
{
|
||||||
|
groupNodes.value(id)->removeChild(connectionNodes.value(conn).get());
|
||||||
|
}
|
||||||
groupNodes.remove(id);
|
groupNodes.remove(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,14 +2,6 @@
|
|||||||
<ui version="4.0">
|
<ui version="4.0">
|
||||||
<class>MainWindow</class>
|
<class>MainWindow</class>
|
||||||
<widget class="QMainWindow" name="MainWindow">
|
<widget class="QMainWindow" name="MainWindow">
|
||||||
<property name="geometry">
|
|
||||||
<rect>
|
|
||||||
<x>0</x>
|
|
||||||
<y>0</y>
|
|
||||||
<width>880</width>
|
|
||||||
<height>660</height>
|
|
||||||
</rect>
|
|
||||||
</property>
|
|
||||||
<property name="minimumSize">
|
<property name="minimumSize">
|
||||||
<size>
|
<size>
|
||||||
<width>780</width>
|
<width>780</width>
|
||||||
@ -51,12 +43,6 @@
|
|||||||
<property name="sizeType">
|
<property name="sizeType">
|
||||||
<enum>QSizePolicy::Maximum</enum>
|
<enum>QSizePolicy::Maximum</enum>
|
||||||
</property>
|
</property>
|
||||||
<property name="sizeHint" stdset="0">
|
|
||||||
<size>
|
|
||||||
<width>999999999</width>
|
|
||||||
<height>0</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
</spacer>
|
</spacer>
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
|
@ -62,56 +62,23 @@
|
|||||||
|
|
||||||
namespace Qv2ray::ui::widgets
|
namespace Qv2ray::ui::widgets
|
||||||
{
|
{
|
||||||
AutoCompleteTextEdit::AutoCompleteTextEdit(const QString &prefix, QWidget *parent) : QTextEdit(parent)
|
AutoCompleteTextEdit::AutoCompleteTextEdit(const QString &prefix, const QStringList &sourceStrings, QWidget *parent) : QTextEdit(parent)
|
||||||
{
|
|
||||||
SetPrefix(prefix);
|
|
||||||
}
|
|
||||||
|
|
||||||
AutoCompleteTextEdit::~AutoCompleteTextEdit()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void AutoCompleteTextEdit::SetPrefix(const QString &prefix)
|
|
||||||
{
|
{
|
||||||
this->prefix = prefix;
|
this->prefix = prefix;
|
||||||
}
|
c = new QCompleter(this);
|
||||||
|
c->setModel(new QStringListModel(sourceStrings, c));
|
||||||
void AutoCompleteTextEdit::SetSourceStrings(QStringList sourceStrings)
|
|
||||||
{
|
|
||||||
auto x = new QCompleter(this);
|
|
||||||
auto model = new QStringListModel(sourceStrings);
|
|
||||||
x->setModel(model);
|
|
||||||
SetCompleter(x);
|
|
||||||
}
|
|
||||||
|
|
||||||
void AutoCompleteTextEdit::SetCompleter(QCompleter *completer)
|
|
||||||
{
|
|
||||||
if (c)
|
|
||||||
c->disconnect(this);
|
|
||||||
|
|
||||||
c = completer;
|
|
||||||
|
|
||||||
if (!c)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
c->setWidget(this);
|
c->setWidget(this);
|
||||||
c->setCompletionMode(QCompleter::PopupCompletion);
|
c->setCompletionMode(QCompleter::PopupCompletion);
|
||||||
c->setCaseSensitivity(Qt::CaseInsensitive);
|
c->setCaseSensitivity(Qt::CaseInsensitive);
|
||||||
QObject::connect(c, QOverload<const QString &>::of(&QCompleter::activated), this, &AutoCompleteTextEdit::insertCompletion);
|
QObject::connect(c, QOverload<const QString &>::of(&QCompleter::activated), this, &AutoCompleteTextEdit::insertCompletion);
|
||||||
}
|
}
|
||||||
|
|
||||||
QCompleter *AutoCompleteTextEdit::completer() const
|
AutoCompleteTextEdit::~AutoCompleteTextEdit()
|
||||||
{
|
{
|
||||||
return c;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void AutoCompleteTextEdit::insertCompletion(const QString &completion)
|
void AutoCompleteTextEdit::insertCompletion(const QString &completion)
|
||||||
{
|
{
|
||||||
if (c->widget() != this)
|
|
||||||
return;
|
|
||||||
|
|
||||||
QTextCursor tc = textCursor();
|
QTextCursor tc = textCursor();
|
||||||
int extra = completion.length() - c->completionPrefix().length();
|
int extra = completion.length() - c->completionPrefix().length();
|
||||||
tc.movePosition(QTextCursor::Left);
|
tc.movePosition(QTextCursor::Left);
|
||||||
|
@ -62,14 +62,9 @@ namespace Qv2ray::ui::widgets
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
AutoCompleteTextEdit(const QString &prefix, QWidget *parent = nullptr);
|
AutoCompleteTextEdit(const QString &prefix, const QStringList &sourceStrings, QWidget *parent = nullptr);
|
||||||
~AutoCompleteTextEdit();
|
~AutoCompleteTextEdit();
|
||||||
|
|
||||||
void SetPrefix(const QString &prefix);
|
|
||||||
void SetCompleter(QCompleter *c);
|
|
||||||
void SetSourceStrings(QStringList sourceStrings);
|
|
||||||
QCompleter *completer() const;
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void keyPressEvent(QKeyEvent *e) override;
|
void keyPressEvent(QKeyEvent *e) override;
|
||||||
void focusInEvent(QFocusEvent *e) override;
|
void focusInEvent(QFocusEvent *e) override;
|
||||||
@ -81,9 +76,7 @@ namespace Qv2ray::ui::widgets
|
|||||||
QString lineUnderCursor() const;
|
QString lineUnderCursor() const;
|
||||||
QString wordUnderCursor() const;
|
QString wordUnderCursor() const;
|
||||||
|
|
||||||
private:
|
|
||||||
QString prefix;
|
QString prefix;
|
||||||
QAbstractItemModel *modelFromStringList(const QStringList &list);
|
|
||||||
QCompleter *c = nullptr;
|
QCompleter *c = nullptr;
|
||||||
};
|
};
|
||||||
} // namespace Qv2ray::ui::widgets
|
} // namespace Qv2ray::ui::widgets
|
||||||
|
@ -11,27 +11,19 @@ RouteSettingsMatrixWidget::RouteSettingsMatrixWidget(const QString &assetsDirPat
|
|||||||
{
|
{
|
||||||
setupUi(this);
|
setupUi(this);
|
||||||
//
|
//
|
||||||
directDomainTxt = new AutoCompleteTextEdit("geosite", this);
|
|
||||||
proxyDomainTxt = new AutoCompleteTextEdit("geosite", this);
|
|
||||||
blockDomainTxt = new AutoCompleteTextEdit("geosite", this);
|
|
||||||
//
|
|
||||||
directIPTxt = new AutoCompleteTextEdit("geoip", this);
|
|
||||||
proxyIPTxt = new AutoCompleteTextEdit("geoip", this);
|
|
||||||
blockIPTxt = new AutoCompleteTextEdit("geoip", this);
|
|
||||||
//
|
|
||||||
builtInSchemesMenu = new QMenu(this);
|
builtInSchemesMenu = new QMenu(this);
|
||||||
builtInSchemesMenu->addActions(this->getBuiltInSchemes());
|
builtInSchemesMenu->addActions(this->getBuiltInSchemes());
|
||||||
builtInSchemeBtn->setMenu(builtInSchemesMenu);
|
builtInSchemeBtn->setMenu(builtInSchemesMenu);
|
||||||
//
|
//
|
||||||
auto sourceStringsDomain = ReadGeoSiteFromFile(assetsDirPath + "/geosite.dat");
|
auto sourceStringsDomain = ReadGeoSiteFromFile(assetsDirPath + "/geosite.dat");
|
||||||
directDomainTxt->SetSourceStrings(sourceStringsDomain);
|
directDomainTxt = new AutoCompleteTextEdit("geosite", sourceStringsDomain, this);
|
||||||
proxyDomainTxt->SetSourceStrings(sourceStringsDomain);
|
proxyDomainTxt = new AutoCompleteTextEdit("geosite", sourceStringsDomain, this);
|
||||||
blockDomainTxt->SetSourceStrings(sourceStringsDomain);
|
blockDomainTxt = new AutoCompleteTextEdit("geosite", sourceStringsDomain, this);
|
||||||
//
|
//
|
||||||
auto sourceStringsIP = ReadGeoSiteFromFile(assetsDirPath + "/geoip.dat");
|
auto sourceStringsIP = ReadGeoSiteFromFile(assetsDirPath + "/geoip.dat");
|
||||||
directIPTxt->SetSourceStrings(sourceStringsIP);
|
directIPTxt = new AutoCompleteTextEdit("geoip", sourceStringsIP, this);
|
||||||
proxyIPTxt->SetSourceStrings(sourceStringsIP);
|
proxyIPTxt = new AutoCompleteTextEdit("geoip", sourceStringsIP, this);
|
||||||
blockIPTxt->SetSourceStrings(sourceStringsIP);
|
blockIPTxt = new AutoCompleteTextEdit("geoip", sourceStringsIP, this);
|
||||||
//
|
//
|
||||||
directTxtLayout->addWidget(directDomainTxt, 0, 0);
|
directTxtLayout->addWidget(directDomainTxt, 0, 0);
|
||||||
proxyTxtLayout->addWidget(proxyDomainTxt, 0, 0);
|
proxyTxtLayout->addWidget(proxyDomainTxt, 0, 0);
|
||||||
@ -306,9 +298,11 @@ void RouteSettingsMatrixWidget::on_importSchemeBtn_clicked()
|
|||||||
this->SetRouteConfig(static_cast<Qv2rayRouteConfig>(scheme));
|
this->SetRouteConfig(static_cast<Qv2rayRouteConfig>(scheme));
|
||||||
|
|
||||||
// done
|
// done
|
||||||
|
LOG(MODULE_SETTINGS, "Imported route config: " + scheme.name + " by: " + scheme.author)
|
||||||
}
|
}
|
||||||
catch (exception)
|
catch (exception e)
|
||||||
{
|
{
|
||||||
|
LOG(MODULE_UI, "Exception: " + QString(e.what()))
|
||||||
// TODO: Give some error as Notification
|
// TODO: Give some error as Notification
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user