From 8f32828f9dfee6ad40665c2f06e4277e455ac86c Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 26 Jul 2024 15:25:43 +0330 Subject: [PATCH] feat: Improve context menus and remove useless ones --- ui/mainwindow.cpp | 105 +++++++--------------------------------------- ui/mainwindow.h | 8 ---- ui/mainwindow.ui | 45 +++++++++++--------- 3 files changed, 40 insertions(+), 118 deletions(-) diff --git a/ui/mainwindow.cpp b/ui/mainwindow.cpp index 18c7893..ac16e05 100644 --- a/ui/mainwindow.cpp +++ b/ui/mainwindow.cpp @@ -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> out; - QList> 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; } diff --git a/ui/mainwindow.h b/ui/mainwindow.h index b58d591..300de8e 100644 --- a/ui/mainwindow.h +++ b/ui/mainwindow.h @@ -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); diff --git a/ui/mainwindow.ui b/ui/mainwindow.ui index 83ec46e..e7876c8 100644 --- a/ui/mainwindow.ui +++ b/ui/mainwindow.ui @@ -38,10 +38,10 @@ - QToolButton::ToolButtonPopupMode::InstantPopup + QToolButton::InstantPopup - Qt::ToolButtonStyle::ToolButtonTextUnderIcon + Qt::ToolButtonTextUnderIcon @@ -60,10 +60,10 @@ - QToolButton::ToolButtonPopupMode::InstantPopup + QToolButton::InstantPopup - Qt::ToolButtonStyle::ToolButtonTextUnderIcon + Qt::ToolButtonTextUnderIcon @@ -82,10 +82,10 @@ - QToolButton::ToolButtonPopupMode::InstantPopup + QToolButton::InstantPopup - Qt::ToolButtonStyle::ToolButtonTextUnderIcon + Qt::ToolButtonTextUnderIcon @@ -104,10 +104,10 @@ - QToolButton::ToolButtonPopupMode::InstantPopup + QToolButton::InstantPopup - Qt::ToolButtonStyle::ToolButtonTextUnderIcon + Qt::ToolButtonTextUnderIcon @@ -138,7 +138,7 @@ - Qt::Orientation::Horizontal + Qt::Horizontal @@ -160,7 +160,7 @@ - Qt::Orientation::Vertical + Qt::Vertical @@ -192,19 +192,19 @@ - Qt::ContextMenuPolicy::CustomContextMenu + Qt::CustomContextMenu - QAbstractItemView::EditTrigger::NoEditTriggers + QAbstractItemView::NoEditTriggers true - QAbstractItemView::SelectionBehavior::SelectRows + QAbstractItemView::SelectRows - QAbstractItemView::ScrollMode::ScrollPerPixel + QAbstractItemView::ScrollPerPixel false @@ -274,7 +274,7 @@ - Qt::ContextMenuPolicy::CustomContextMenu + Qt::CustomContextMenu false @@ -300,10 +300,10 @@ - Qt::Orientation::Horizontal + Qt::Horizontal - QSizePolicy::Policy::Maximum + QSizePolicy::Maximum @@ -337,7 +337,7 @@ 0 0 800 - 33 + 25 @@ -411,12 +411,11 @@ - - + @@ -756,11 +755,17 @@ Url Test Selected + + Ctrl+Shift+S + Url Test Group + + Ctrl+Shift+G +