mirror of
https://github.com/Qv2ray/Qv2ray.git
synced 2025-05-19 10:20:49 +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);
|
||||
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();
|
||||
}
|
||||
|
||||
@ -108,7 +110,6 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
|
||||
setupUi(this);
|
||||
MainWindow::mwInstance = this;
|
||||
QvMessageBusConnect(MainWindow);
|
||||
adjustSize();
|
||||
//
|
||||
infoWidget = new ConnectionInfoWidget(this);
|
||||
connectionInfoLayout->addWidget(infoWidget);
|
||||
@ -258,7 +259,10 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
|
||||
MWAddGroupItem_p(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
|
||||
@ -863,7 +867,10 @@ void MainWindow::OnGroupCreated(const GroupId &id, const QString &displayName)
|
||||
}
|
||||
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);
|
||||
}
|
||||
|
||||
|
@ -2,14 +2,6 @@
|
||||
<ui version="4.0">
|
||||
<class>MainWindow</class>
|
||||
<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">
|
||||
<size>
|
||||
<width>780</width>
|
||||
@ -51,12 +43,6 @@
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Maximum</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>999999999</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
|
@ -62,56 +62,23 @@
|
||||
|
||||
namespace Qv2ray::ui::widgets
|
||||
{
|
||||
AutoCompleteTextEdit::AutoCompleteTextEdit(const QString &prefix, QWidget *parent) : QTextEdit(parent)
|
||||
{
|
||||
SetPrefix(prefix);
|
||||
}
|
||||
|
||||
AutoCompleteTextEdit::~AutoCompleteTextEdit()
|
||||
{
|
||||
}
|
||||
|
||||
void AutoCompleteTextEdit::SetPrefix(const QString &prefix)
|
||||
AutoCompleteTextEdit::AutoCompleteTextEdit(const QString &prefix, const QStringList &sourceStrings, QWidget *parent) : QTextEdit(parent)
|
||||
{
|
||||
this->prefix = prefix;
|
||||
}
|
||||
|
||||
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 = new QCompleter(this);
|
||||
c->setModel(new QStringListModel(sourceStrings, c));
|
||||
c->setWidget(this);
|
||||
c->setCompletionMode(QCompleter::PopupCompletion);
|
||||
c->setCaseSensitivity(Qt::CaseInsensitive);
|
||||
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)
|
||||
{
|
||||
if (c->widget() != this)
|
||||
return;
|
||||
|
||||
QTextCursor tc = textCursor();
|
||||
int extra = completion.length() - c->completionPrefix().length();
|
||||
tc.movePosition(QTextCursor::Left);
|
||||
|
@ -62,14 +62,9 @@ namespace Qv2ray::ui::widgets
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
AutoCompleteTextEdit(const QString &prefix, QWidget *parent = nullptr);
|
||||
AutoCompleteTextEdit(const QString &prefix, const QStringList &sourceStrings, QWidget *parent = nullptr);
|
||||
~AutoCompleteTextEdit();
|
||||
|
||||
void SetPrefix(const QString &prefix);
|
||||
void SetCompleter(QCompleter *c);
|
||||
void SetSourceStrings(QStringList sourceStrings);
|
||||
QCompleter *completer() const;
|
||||
|
||||
protected:
|
||||
void keyPressEvent(QKeyEvent *e) override;
|
||||
void focusInEvent(QFocusEvent *e) override;
|
||||
@ -81,9 +76,7 @@ namespace Qv2ray::ui::widgets
|
||||
QString lineUnderCursor() const;
|
||||
QString wordUnderCursor() const;
|
||||
|
||||
private:
|
||||
QString prefix;
|
||||
QAbstractItemModel *modelFromStringList(const QStringList &list);
|
||||
QCompleter *c = nullptr;
|
||||
};
|
||||
} // namespace Qv2ray::ui::widgets
|
||||
|
@ -11,27 +11,19 @@ RouteSettingsMatrixWidget::RouteSettingsMatrixWidget(const QString &assetsDirPat
|
||||
{
|
||||
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->addActions(this->getBuiltInSchemes());
|
||||
builtInSchemeBtn->setMenu(builtInSchemesMenu);
|
||||
//
|
||||
auto sourceStringsDomain = ReadGeoSiteFromFile(assetsDirPath + "/geosite.dat");
|
||||
directDomainTxt->SetSourceStrings(sourceStringsDomain);
|
||||
proxyDomainTxt->SetSourceStrings(sourceStringsDomain);
|
||||
blockDomainTxt->SetSourceStrings(sourceStringsDomain);
|
||||
directDomainTxt = new AutoCompleteTextEdit("geosite", sourceStringsDomain, this);
|
||||
proxyDomainTxt = new AutoCompleteTextEdit("geosite", sourceStringsDomain, this);
|
||||
blockDomainTxt = new AutoCompleteTextEdit("geosite", sourceStringsDomain, this);
|
||||
//
|
||||
auto sourceStringsIP = ReadGeoSiteFromFile(assetsDirPath + "/geoip.dat");
|
||||
directIPTxt->SetSourceStrings(sourceStringsIP);
|
||||
proxyIPTxt->SetSourceStrings(sourceStringsIP);
|
||||
blockIPTxt->SetSourceStrings(sourceStringsIP);
|
||||
directIPTxt = new AutoCompleteTextEdit("geoip", sourceStringsIP, this);
|
||||
proxyIPTxt = new AutoCompleteTextEdit("geoip", sourceStringsIP, this);
|
||||
blockIPTxt = new AutoCompleteTextEdit("geoip", sourceStringsIP, this);
|
||||
//
|
||||
directTxtLayout->addWidget(directDomainTxt, 0, 0);
|
||||
proxyTxtLayout->addWidget(proxyDomainTxt, 0, 0);
|
||||
@ -306,9 +298,11 @@ void RouteSettingsMatrixWidget::on_importSchemeBtn_clicked()
|
||||
this->SetRouteConfig(static_cast<Qv2rayRouteConfig>(scheme));
|
||||
|
||||
// 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
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user