mirror of
https://github.com/Mahdi-zarei/nekoray.git
synced 2025-12-31 06:59:04 +08:00
feat: Improve context menus and remove useless ones
This commit is contained in:
parent
6b82a75d85
commit
8f32828f9d
@ -332,6 +332,15 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi
|
||||
}
|
||||
|
||||
auto currGroup = NekoGui::profileManager->GetGroup(NekoGui::dataStore->current_group);
|
||||
|
||||
if (!currGroup->Profiles().empty()) {
|
||||
ui->menu_server->addAction(ui->menu_clear_test_result);
|
||||
ui->menu_server->addAction(ui->menu_remove_unavailable);
|
||||
} else {
|
||||
ui->menu_server->removeAction(ui->menu_clear_test_result);
|
||||
ui->menu_server->removeAction(ui->menu_remove_unavailable);
|
||||
}
|
||||
|
||||
if (currGroup != nullptr && !currGroup->url.isEmpty()) {
|
||||
ui->menu_server->addAction(ui->menu_update_subscription);
|
||||
} else {
|
||||
@ -1078,30 +1087,6 @@ void MainWindow::on_menu_clone_triggered() {
|
||||
NekoGui_sub::groupUpdater->AsyncUpdate(sls.join("\n"));
|
||||
}
|
||||
|
||||
void MainWindow::on_menu_move_triggered() {
|
||||
auto ents = get_now_selected_list();
|
||||
if (ents.isEmpty()) return;
|
||||
|
||||
auto items = QStringList{};
|
||||
for (auto gid: NekoGui::profileManager->groupsTabOrder) {
|
||||
auto group = NekoGui::profileManager->GetGroup(gid);
|
||||
if (group == nullptr) continue;
|
||||
items += Int2String(gid) + " " + group->name;
|
||||
}
|
||||
|
||||
bool ok;
|
||||
auto a = QInputDialog::getItem(nullptr,
|
||||
tr("Move"),
|
||||
tr("Move %1 item(s)").arg(ents.count()),
|
||||
items, 0, false, &ok);
|
||||
if (!ok) return;
|
||||
auto gid = SubStrBefore(a, " ").toInt();
|
||||
for (const auto &ent: ents) {
|
||||
NekoGui::profileManager->MoveProfile(ent, gid);
|
||||
}
|
||||
refresh_proxy_list();
|
||||
}
|
||||
|
||||
void MainWindow::on_menu_delete_triggered() {
|
||||
auto ents = get_now_selected_list();
|
||||
if (ents.count() == 0) return;
|
||||
@ -1124,19 +1109,6 @@ void MainWindow::on_menu_reset_traffic_triggered() {
|
||||
}
|
||||
}
|
||||
|
||||
void MainWindow::on_menu_profile_debug_info_triggered() {
|
||||
auto ents = get_now_selected_list();
|
||||
if (ents.count() != 1) return;
|
||||
auto btn = QMessageBox::information(this, software_name, ents.first()->ToJsonBytes(), "OK", "Edit", "Reload", 0, 0);
|
||||
if (btn == 1) {
|
||||
QDesktopServices::openUrl(QUrl::fromLocalFile(QFileInfo(QString("profiles/%1.json").arg(ents.first()->id)).absoluteFilePath()));
|
||||
} else if (btn == 2) {
|
||||
NekoGui::dataStore->Load();
|
||||
NekoGui::profileManager->LoadManager();
|
||||
refresh_proxy_list();
|
||||
}
|
||||
}
|
||||
|
||||
void MainWindow::on_menu_copy_links_triggered() {
|
||||
if (ui->masterLogBrowser->hasFocus()) {
|
||||
ui->masterLogBrowser->copy();
|
||||
@ -1321,32 +1293,6 @@ void MainWindow::on_menu_select_all_triggered() {
|
||||
ui->proxyListTable->selectAll();
|
||||
}
|
||||
|
||||
void MainWindow::on_menu_delete_repeat_triggered() {
|
||||
QList<std::shared_ptr<NekoGui::ProxyEntity>> out;
|
||||
QList<std::shared_ptr<NekoGui::ProxyEntity>> out_del;
|
||||
|
||||
NekoGui::ProfileFilter::Uniq(NekoGui::profileManager->CurrentGroup()->Profiles(), out, true, false);
|
||||
NekoGui::ProfileFilter::OnlyInSrc_ByPointer(NekoGui::profileManager->CurrentGroup()->Profiles(), out, out_del);
|
||||
|
||||
int remove_display_count = 0;
|
||||
QString remove_display;
|
||||
for (const auto &ent: out_del) {
|
||||
remove_display += ent->bean->DisplayTypeAndName() + "\n";
|
||||
if (++remove_display_count == 20) {
|
||||
remove_display += "...";
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (out_del.length() > 0 &&
|
||||
QMessageBox::question(this, tr("Confirmation"), tr("Remove %1 item(s) ?").arg(out_del.length()) + "\n" + remove_display) == QMessageBox::StandardButton::Yes) {
|
||||
for (const auto &ent: out_del) {
|
||||
NekoGui::profileManager->DeleteProfile(ent->id);
|
||||
}
|
||||
refresh_proxy_list();
|
||||
}
|
||||
}
|
||||
|
||||
bool mw_sub_updating = false;
|
||||
|
||||
void MainWindow::on_menu_update_subscription_triggered() {
|
||||
@ -1384,29 +1330,6 @@ void MainWindow::on_menu_remove_unavailable_triggered() {
|
||||
}
|
||||
}
|
||||
|
||||
void MainWindow::on_menu_resolve_domain_triggered() {
|
||||
auto profiles = get_selected_or_group();
|
||||
if (profiles.isEmpty()) return;
|
||||
|
||||
if (QMessageBox::question(this,
|
||||
tr("Confirmation"),
|
||||
tr("Resolving domain to IP, if support.")) != QMessageBox::StandardButton::Yes) {
|
||||
return;
|
||||
}
|
||||
if (mw_sub_updating) return;
|
||||
mw_sub_updating = true;
|
||||
NekoGui::dataStore->resolve_count = profiles.count();
|
||||
|
||||
for (const auto &profile: profiles) {
|
||||
profile->bean->ResolveDomainToIP([=] {
|
||||
profile->Save();
|
||||
if (--NekoGui::dataStore->resolve_count != 0) return;
|
||||
refresh_proxy_list();
|
||||
mw_sub_updating = false;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
void MainWindow::on_proxyListTable_customContextMenuRequested(const QPoint &pos) {
|
||||
ui->menu_server->popup(ui->proxyListTable->viewport()->mapToGlobal(pos)); // 弹出菜单
|
||||
}
|
||||
@ -1494,10 +1417,6 @@ void MainWindow::show_log_impl(const QString &log) {
|
||||
}
|
||||
}
|
||||
|
||||
#define ADD_TO_CURRENT_ROUTE(a, b) \
|
||||
NekoGui::dataStore->routing->a = (SplitLines(NekoGui::dataStore->routing->a) << (b)).join("\n"); \
|
||||
NekoGui::dataStore->routing->Save();
|
||||
|
||||
void MainWindow::on_masterLogBrowser_customContextMenuRequested(const QPoint &pos) {
|
||||
QMenu *menu = ui->masterLogBrowser->createStandardContextMenu();
|
||||
|
||||
@ -1612,7 +1531,13 @@ void MainWindow::on_tabWidget_customContextMenuRequested(const QPoint &p) {
|
||||
});
|
||||
menu->addAction(addAction);
|
||||
menu->addAction(editAction);
|
||||
auto group = NekoGui::profileManager->GetGroup(NekoGui::dataStore->current_group);
|
||||
if (NekoGui::profileManager->groups.size() > 1) menu->addAction(deleteAction);
|
||||
if (!group->Profiles().empty()) {
|
||||
menu->addAction(ui->menu_clear_test_result);
|
||||
menu->addAction(ui->menu_remove_unavailable);
|
||||
}
|
||||
if (!group->url.isEmpty()) menu->addAction(ui->menu_update_subscription);
|
||||
menu->exec(ui->tabWidget->tabBar()->mapToGlobal(p));
|
||||
return;
|
||||
}
|
||||
|
||||
@ -98,14 +98,10 @@ private slots:
|
||||
|
||||
void on_menu_clone_triggered();
|
||||
|
||||
void on_menu_move_triggered();
|
||||
|
||||
void on_menu_delete_triggered();
|
||||
|
||||
void on_menu_reset_traffic_triggered();
|
||||
|
||||
void on_menu_profile_debug_info_triggered();
|
||||
|
||||
void on_menu_copy_links_triggered();
|
||||
|
||||
void on_menu_copy_links_nkr_triggered();
|
||||
@ -122,14 +118,10 @@ private slots:
|
||||
|
||||
void on_menu_select_all_triggered();
|
||||
|
||||
void on_menu_delete_repeat_triggered();
|
||||
|
||||
void on_menu_remove_unavailable_triggered();
|
||||
|
||||
void on_menu_update_subscription_triggered();
|
||||
|
||||
void on_menu_resolve_domain_triggered();
|
||||
|
||||
void on_proxyListTable_itemDoubleClicked(QTableWidgetItem *item);
|
||||
|
||||
void on_proxyListTable_customContextMenuRequested(const QPoint &pos);
|
||||
|
||||
@ -38,10 +38,10 @@
|
||||
</size>
|
||||
</property>
|
||||
<property name="popupMode">
|
||||
<enum>QToolButton::ToolButtonPopupMode::InstantPopup</enum>
|
||||
<enum>QToolButton::InstantPopup</enum>
|
||||
</property>
|
||||
<property name="toolButtonStyle">
|
||||
<enum>Qt::ToolButtonStyle::ToolButtonTextUnderIcon</enum>
|
||||
<enum>Qt::ToolButtonTextUnderIcon</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@ -60,10 +60,10 @@
|
||||
</size>
|
||||
</property>
|
||||
<property name="popupMode">
|
||||
<enum>QToolButton::ToolButtonPopupMode::InstantPopup</enum>
|
||||
<enum>QToolButton::InstantPopup</enum>
|
||||
</property>
|
||||
<property name="toolButtonStyle">
|
||||
<enum>Qt::ToolButtonStyle::ToolButtonTextUnderIcon</enum>
|
||||
<enum>Qt::ToolButtonTextUnderIcon</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@ -82,10 +82,10 @@
|
||||
</size>
|
||||
</property>
|
||||
<property name="popupMode">
|
||||
<enum>QToolButton::ToolButtonPopupMode::InstantPopup</enum>
|
||||
<enum>QToolButton::InstantPopup</enum>
|
||||
</property>
|
||||
<property name="toolButtonStyle">
|
||||
<enum>Qt::ToolButtonStyle::ToolButtonTextUnderIcon</enum>
|
||||
<enum>Qt::ToolButtonTextUnderIcon</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@ -104,10 +104,10 @@
|
||||
</size>
|
||||
</property>
|
||||
<property name="popupMode">
|
||||
<enum>QToolButton::ToolButtonPopupMode::InstantPopup</enum>
|
||||
<enum>QToolButton::InstantPopup</enum>
|
||||
</property>
|
||||
<property name="toolButtonStyle">
|
||||
<enum>Qt::ToolButtonStyle::ToolButtonTextUnderIcon</enum>
|
||||
<enum>Qt::ToolButtonTextUnderIcon</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@ -138,7 +138,7 @@
|
||||
<item>
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Horizontal</enum>
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
@ -160,7 +160,7 @@
|
||||
<item>
|
||||
<widget class="QSplitter" name="splitter">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Vertical</enum>
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<widget class="QTabWidget" name="tabWidget">
|
||||
<property name="currentIndex">
|
||||
@ -192,19 +192,19 @@
|
||||
<item row="0" column="0">
|
||||
<widget class="MyTableWidget" name="proxyListTable">
|
||||
<property name="contextMenuPolicy">
|
||||
<enum>Qt::ContextMenuPolicy::CustomContextMenu</enum>
|
||||
<enum>Qt::CustomContextMenu</enum>
|
||||
</property>
|
||||
<property name="editTriggers">
|
||||
<set>QAbstractItemView::EditTrigger::NoEditTriggers</set>
|
||||
<set>QAbstractItemView::NoEditTriggers</set>
|
||||
</property>
|
||||
<property name="alternatingRowColors">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="selectionBehavior">
|
||||
<enum>QAbstractItemView::SelectionBehavior::SelectRows</enum>
|
||||
<enum>QAbstractItemView::SelectRows</enum>
|
||||
</property>
|
||||
<property name="horizontalScrollMode">
|
||||
<enum>QAbstractItemView::ScrollMode::ScrollPerPixel</enum>
|
||||
<enum>QAbstractItemView::ScrollPerPixel</enum>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>false</bool>
|
||||
@ -274,7 +274,7 @@
|
||||
<item>
|
||||
<widget class="QTextBrowser" name="masterLogBrowser">
|
||||
<property name="contextMenuPolicy">
|
||||
<enum>Qt::ContextMenuPolicy::CustomContextMenu</enum>
|
||||
<enum>Qt::CustomContextMenu</enum>
|
||||
</property>
|
||||
<property name="openLinks">
|
||||
<bool>false</bool>
|
||||
@ -300,10 +300,10 @@
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Horizontal</enum>
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Policy::Maximum</enum>
|
||||
<enum>QSizePolicy::Maximum</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
@ -337,7 +337,7 @@
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>800</width>
|
||||
<height>33</height>
|
||||
<height>25</height>
|
||||
</rect>
|
||||
</property>
|
||||
<widget class="QMenu" name="menu_program">
|
||||
@ -411,12 +411,11 @@
|
||||
<addaction name="menu_stop"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="menu_select_all"/>
|
||||
<addaction name="menu_move"/>
|
||||
<addaction name="menu_clone"/>
|
||||
<addaction name="menu_reset_traffic"/>
|
||||
<addaction name="menu_delete"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="menu_share_item"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="actionUrl_Test_Selected"/>
|
||||
<addaction name="actionUrl_Test_Group"/>
|
||||
</widget>
|
||||
@ -756,11 +755,17 @@
|
||||
<property name="text">
|
||||
<string>Url Test Selected</string>
|
||||
</property>
|
||||
<property name="shortcut">
|
||||
<string>Ctrl+Shift+S</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionUrl_Test_Group">
|
||||
<property name="text">
|
||||
<string>Url Test Group</string>
|
||||
</property>
|
||||
<property name="shortcut">
|
||||
<string>Ctrl+Shift+G</string>
|
||||
</property>
|
||||
</action>
|
||||
</widget>
|
||||
<customwidgets>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user