From f9796c7090142a8b3e7db27184e2e89b409e2903 Mon Sep 17 00:00:00 2001
From: taynpg <taynpg@163.com>
Date: Wed, 28 Aug 2024 08:42:45 +0800
Subject: [PATCH] =?UTF-8?q?fix=EF=BC=9A1.=E4=BF=AE=E6=AD=A3=E5=90=8C?=
 =?UTF-8?q?=E7=BB=93=E6=9E=84=E5=AF=BC=E5=85=A5=E9=97=AE=E9=A2=98=E3=80=82?=
 =?UTF-8?q?2.=E5=8E=86=E5=8F=B2=E7=95=8C=E9=9D=A2=E6=B7=BB=E5=8A=A0?=
 =?UTF-8?q?=E5=88=A0=E9=99=A4=E3=80=823.=E5=AF=BC=E5=85=A5=E6=8E=92?=
 =?UTF-8?q?=E5=BA=8F=E9=97=AE=E9=A2=98=E3=80=82?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .vscode/settings.json |  9 ++++-
 MainWidget.cpp        | 77 +++++++++++++++++++++++--------------------
 src/history.h         |  4 +--
 src/uhistory.cpp      | 20 +++++++++++
 src/uhistory.h        |  1 +
 src/uhistory.ui       |  7 ++++
 src/xml_opr.cpp       |  1 +
 7 files changed, 81 insertions(+), 38 deletions(-)

diff --git a/.vscode/settings.json b/.vscode/settings.json
index be26477..4fd3205 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -115,6 +115,13 @@
         "optional": "cpp",
         "sstream": "cpp",
         "stop_token": "cpp",
-        "regex": "cpp"
+        "regex": "cpp",
+        "*.tcc": "cpp",
+        "cwctype": "cpp",
+        "deque": "cpp",
+        "memory_resource": "cpp",
+        "random": "cpp",
+        "fstream": "cpp",
+        "cinttypes": "cpp"
     }
 }
\ No newline at end of file
diff --git a/MainWidget.cpp b/MainWidget.cpp
index 2a8fbee..866abbb 100644
--- a/MainWidget.cpp
+++ b/MainWidget.cpp
@@ -1,8 +1,5 @@
 #include "MainWidget.h"
 
-#include "./ui_MainWidget.h"
-#include "src/data_edit.h"
-#include "public_def.h"
 #include <QClipboard>
 #include <QDateTime>
 #include <QFile>
@@ -12,13 +9,17 @@
 #include <QSettings>
 #include <filesystem>
 
+#include "./ui_MainWidget.h"
+#include "public_def.h"
+#include "src/data_edit.h"
+
 constexpr std::size_t g_OnePage = 100;
 namespace fs = std::filesystem;
 MainWidget::MainWidget(QWidget* parent) : QWidget(parent), ui(new Ui::MainWidget)
 {
     ui->setupUi(this);
 
-    setWindowTitle(u8"OneLevelXmlOpr v1.3.1");
+    setWindowTitle(u8"OneLevelXmlOpr v1.3.2");
     setWindowIcon(QIcon("://resource/xml.ico"));
 
     QScreen* primaryScreen = QGuiApplication::primaryScreen();
@@ -78,7 +79,13 @@ MainWidget::MainWidget(QWidget* parent) : QWidget(parent), ui(new Ui::MainWidget
         if (!edit.is_import_sucess_) {
             return;
         }
-        xml_.get_all_elements(vec_);
+
+        if (cur_config_.is_same) {
+            xml_.get_all_elements(vec_, ui->cbUnit->currentText().toStdString());
+        } else {
+            xml_.get_all_elements(vec_);
+        }
+
         current_.clear();
         current_ = vec_;
         push_content(current_);
@@ -161,11 +168,11 @@ void MainWidget::closeEvent(QCloseEvent* event)
 void MainWidget::keyPressEvent(QKeyEvent* event)
 {
     switch (event->key()) {
-    case Qt::Key_Return:
-        search(ui->edSearchKey->text());
-        break;
-    default:
-        break;
+        case Qt::Key_Return:
+            search(ui->edSearchKey->text());
+            break;
+        default:
+            break;
     }
     QWidget::keyPressEvent(event);
 }
@@ -326,15 +333,14 @@ bool MainWidget::read(const QString& file_path)
         for (const auto& unit : units) {
             list.append(QString::fromStdString(unit));
         }
-        u_ =  true;
+        u_ = true;
         ui->cbUnit->clear();
         if (!list.isEmpty()) {
             ui->cbUnit->addItems(list);
             ui->cbUnit->setCurrentIndex(0);
         }
         u_ = false;
-    }
-    else {
+    } else {
         ui->cbUnit->setEnabled(false);
     }
 
@@ -358,6 +364,7 @@ bool MainWidget::read(const QString& file_path)
 
     ui->cbConfig->setEnabled(false);
     ui->btnSet->setEnabled(false);
+    ui->btnHis->setEnabled(false);
 
     his_->push(ui->edStatus->text().toStdString());
 
@@ -823,30 +830,30 @@ void MainWidget::get_related_elements(std::vector<OperElement*>& out, ReplaceAre
     assert(tab_widget_);
     out.clear();
     switch (area) {
-    case AREA_ALL_PAGE: {
-        out.resize(current_.size());
-        std::transform(current_.begin(), current_.end(), out.begin(), [](Element_t* ele) { return new OperElement(ele, 0); });
-        break;
-    }
-    case AREA_CUR_PAGE: {
-        int rows = tab_widget_->rowCount();
-        for (int i = 0; i < rows; ++i) {
-            out.emplace_back(new OperElement(get_element_by_row(i), i));
+        case AREA_ALL_PAGE: {
+            out.resize(current_.size());
+            std::transform(current_.begin(), current_.end(), out.begin(), [](Element_t* ele) { return new OperElement(ele, 0); });
+            break;
         }
-        break;
-    }
-    case AREA_ALL: {
-        out.resize(vec_.size());
-        std::transform(vec_.begin(), vec_.end(), out.begin(), [](Element_t* ele) { return new OperElement(ele, 0); });
-        break;
-    }
-    default: {
-        QModelIndexList indexList = tab_widget_->selectionModel()->selectedRows();
-        for (int i = 0; i < indexList.size(); ++i) {
-            out.emplace_back(new OperElement(get_element_by_row(indexList[i].row()), indexList[i].row()));
+        case AREA_CUR_PAGE: {
+            int rows = tab_widget_->rowCount();
+            for (int i = 0; i < rows; ++i) {
+                out.emplace_back(new OperElement(get_element_by_row(i), i));
+            }
+            break;
+        }
+        case AREA_ALL: {
+            out.resize(vec_.size());
+            std::transform(vec_.begin(), vec_.end(), out.begin(), [](Element_t* ele) { return new OperElement(ele, 0); });
+            break;
+        }
+        default: {
+            QModelIndexList indexList = tab_widget_->selectionModel()->selectedRows();
+            for (int i = 0; i < indexList.size(); ++i) {
+                out.emplace_back(new OperElement(get_element_by_row(indexList[i].row()), indexList[i].row()));
+            }
+            break;
         }
-        break;
-    }
     }
 }
 
diff --git a/src/history.h b/src/history.h
index 105d0fb..6b9ce10 100644
--- a/src/history.h
+++ b/src/history.h
@@ -13,11 +13,11 @@ public:
 public:
     bool push(const std::string& content);
     bool get_history(std::vector<std::string>& vec);
+    bool read_file(std::vector<std::string>& vec);
+    bool write_file(std::vector<std::string>& vec);
 
 private:
     void default_set();
-    bool read_file(std::vector<std::string>& vec);
-    bool write_file(std::vector<std::string>& vec);
 
 private:
     std::string work_dir_{};
diff --git a/src/uhistory.cpp b/src/uhistory.cpp
index 7ad529f..2fe3d86 100644
--- a/src/uhistory.cpp
+++ b/src/uhistory.cpp
@@ -10,6 +10,7 @@ CUIHistory::CUIHistory(QWidget* parent, CHistory* his) : QDialog(parent), ui(new
 
     connect(ui->btnExit, &QPushButton::clicked, this, [&]() { close(); });
     connect(ui->btnOk, &QPushButton::clicked, this, [&]() { select_ok(); });
+    connect(ui->btnDel, &QPushButton::clicked, this, [&]() { del_item(); });
 }
 
 CUIHistory::~CUIHistory()
@@ -42,3 +43,22 @@ void CUIHistory::select_ok()
     cur_ = re[0]->text();
     close();
 }
+
+void CUIHistory::del_item()
+{
+    auto re = ui->listWidget->selectedItems();
+    if (re.empty()) {
+        return ;
+    }
+    for (auto& item : re) {
+        delete ui->listWidget->takeItem(ui->listWidget->row(item));
+    }
+    std::vector<std::string> vec;
+    for (int i = 0; i < ui->listWidget->count(); ++i) {
+        QListWidgetItem* item = ui->listWidget->item(i);
+        if (item) {
+            vec.push_back(item->text().toStdString());
+        }
+    }
+    his_->write_file(vec);
+}
diff --git a/src/uhistory.h b/src/uhistory.h
index ceb0453..fe4bdc3 100644
--- a/src/uhistory.h
+++ b/src/uhistory.h
@@ -19,6 +19,7 @@ public:
 private:
     void showEvent(QShowEvent* event);
     void select_ok();
+    void del_item();
 
 public:
     QString cur_{};
diff --git a/src/uhistory.ui b/src/uhistory.ui
index b8e4440..2aaea0c 100644
--- a/src/uhistory.ui
+++ b/src/uhistory.ui
@@ -32,6 +32,13 @@
        </property>
       </spacer>
      </item>
+     <item>
+      <widget class="QPushButton" name="btnDel">
+       <property name="text">
+        <string>删除</string>
+       </property>
+      </widget>
+     </item>
      <item>
       <widget class="QPushButton" name="btnOk">
        <property name="sizePolicy">
diff --git a/src/xml_opr.cpp b/src/xml_opr.cpp
index cb0633f..3b66e7e 100644
--- a/src/xml_opr.cpp
+++ b/src/xml_opr.cpp
@@ -244,6 +244,7 @@ bool CXmlOpr::import_newer_data(const std::vector<std::string>& vec, std::size_t
         ++success_count;
         auto* nitem = copy_element(item);
         insert_brother_node(last_item, nitem);
+        last_item = nitem;
     }
     return true;
 }