From e4aec3b2e19d1ea9601bf43a6a7976dbff497862 Mon Sep 17 00:00:00 2001
From: taynpg <taynpg@163.com>
Date: Tue, 21 May 2024 15:47:27 +0800
Subject: [PATCH] =?UTF-8?q?func=EF=BC=9A=E6=B7=BB=E5=8A=A0=E5=88=A0?=
 =?UTF-8?q?=E9=99=A4=E5=A4=9A=E8=A1=8C=E7=9A=84=E9=80=89=E9=A1=B9=E3=80=82?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 MainWidget.cpp | 62 +++++++++++++++++++++++++++++---------------------
 MainWidget.h   |  3 ++-
 2 files changed, 38 insertions(+), 27 deletions(-)

diff --git a/MainWidget.cpp b/MainWidget.cpp
index 1814e08..ef4ba98 100644
--- a/MainWidget.cpp
+++ b/MainWidget.cpp
@@ -16,7 +16,7 @@ MainWidget::MainWidget(QWidget* parent) : QWidget(parent), ui(new Ui::MainWidget
 {
     ui->setupUi(this);
 
-    setWindowTitle(u8"OneLevelXmlOpr v1.2.10");
+    setWindowTitle(u8"OneLevelXmlOpr v1.2.11");
     setWindowIcon(QIcon("://resource/xml.ico"));
 
     QScreen* primaryScreen = QGuiApplication::primaryScreen();
@@ -170,7 +170,10 @@ void MainWidget::show_custom_menu()
     QModelIndexList indexList = tab_widget_->selectionModel()->selectedRows();
 
     if (indexList.size() == 1) {
-        context_menu_->exec(QCursor::pos());
+        menu_simple_->exec(QCursor::pos());
+    }
+    else {
+        menu_multi_->exec(QCursor::pos());
     }
 }
 
@@ -447,16 +450,19 @@ void MainWidget::ele_update_gui(Element_t* target, int row)
 
 void MainWidget::init_menu()
 {
-    context_menu_ = new QMenu();
+    menu_simple_ = new QMenu();
+    menu_multi_ = new QMenu();
+
     ac_edit_property_ = new QAction(u8"编辑");
-    ac_copy_curline_ = new QAction(u8"复制此项");
-    ac_del_curline_ = new QAction(u8"删除此项");
+    ac_copy_curline_ = new QAction(u8"复制项");
+    ac_del_curline_ = new QAction(u8"删除项");
     ac_copy_key_ = new QAction(u8"复制key");
 
-    context_menu_->addAction(ac_edit_property_);
-    context_menu_->addAction(ac_copy_curline_);
-    context_menu_->addAction(ac_del_curline_);
-    context_menu_->addAction(ac_copy_key_);
+    menu_simple_->addAction(ac_edit_property_);
+    menu_simple_->addAction(ac_copy_curline_);
+    menu_simple_->addAction(ac_del_curline_);
+    menu_simple_->addAction(ac_copy_key_);
+    menu_multi_->addAction(ac_del_curline_);
 
     connect(ac_edit_property_, &QAction::triggered, this, [&]() {
         QTableWidgetItem* cur_item = get_current_select_item();
@@ -500,26 +506,30 @@ void MainWidget::del_select_line()
     if (!CUtil::affirm(this, u8"确认", u8"确认删除吗?")) {
         return;
     }
-    QTableWidgetItem* item = get_current_select_item();
-    if (item == nullptr) {
-        return;
-    }
-    Element_t* target = get_element_by_key(item->text());
-    if (target == nullptr) {
-        return;
-    }
-    xml_.del_element(target);
 
-    // TODO: 添加到界面
-    tab_widget_->removeRow(item->row());
-
-    std::vector<Element_t*>::iterator it;
-    for (it = vec_.begin(); it != vec_.end(); ++it) {
-        if (*it == target) {
-            break;
+    QModelIndexList  indexList = tab_widget_->selectionModel()->selectedRows();
+    int              size = indexList.size();
+    std::vector<int> erase_row;
+    for (auto i = size - 1; i > -1; --i) {
+        Element_t* target = get_element_by_row(indexList[i].row());
+        if (target == nullptr) {
+            continue;
         }
+        xml_.del_element(target);
+        tab_widget_->removeRow(indexList[i].row());
+        erase_row.push_back(indexList[i].row());
+        std::vector<Element_t*>::iterator it;
+        for (it = vec_.begin(); it != vec_.end(); ++it) {
+            if (*it == target) {
+                break;
+            }
+        }
+        vec_.erase(it);
     }
-    vec_.erase(it);
+    // std::sort(erase_row.begin(), erase_row.end(), std::greater<int>());
+    // for (const auto& item : erase_row) {
+    //     tab_widget_->removeRow(item);
+    // }
     search(ui->edSearchKey->text());
 }
 
diff --git a/MainWidget.h b/MainWidget.h
index 563a7fa..89607bf 100644
--- a/MainWidget.h
+++ b/MainWidget.h
@@ -79,7 +79,8 @@ private:
     QTableWidgetItem* get_current_select_item();
 
 private:
-    QMenu*                   context_menu_{};
+    QMenu*                   menu_simple_{};
+    QMenu*                   menu_multi_{};
     QAction*                 ac_edit_property_{};
     QAction*                 ac_copy_curline_{};
     QAction*                 ac_del_curline_{};