OneLevelXmlOpr/MainWidget.h

128 lines
3.2 KiB
C
Raw Normal View History

2024-05-15 08:34:54 +08:00
#ifndef MAINWIDGET_H
#define MAINWIDGET_H
#include "conf_setting.h"
#include "src/attribute_edit.h"
#include "src/config.h"
#include "src/xml_opr.h"
#include "src/history.h"
#include "src/uhistory.h"
#include <QAction>
#include <QMenu>
2024-05-15 13:17:24 +08:00
#include <QMessageBox>
#include <QTableWidget>
#include <QWidget>
#include <unordered_map>
2024-05-15 08:34:54 +08:00
2024-05-20 23:36:44 +08:00
struct SElement_t {
2024-05-21 15:27:54 +08:00
SElement_t(Element_t* e, std::string& s);
Element_t* ele;
2024-05-21 15:27:54 +08:00
std::string str;
};
enum ReplaceArea {
AREA_SELECT,
AREA_ALL_PAGE,
AREA_CUR_PAGE,
AREA_ALL
};
2024-05-21 15:27:54 +08:00
struct OperElement {
OperElement(Element_t* ele, int row);
Element_t* element_{};
int row_{0};
2024-05-20 23:36:44 +08:00
};
2024-05-15 08:34:54 +08:00
QT_BEGIN_NAMESPACE
namespace Ui {
class MainWidget;
}
QT_END_NAMESPACE
using ump_t = std::unordered_map<int, int>;
2024-05-15 08:34:54 +08:00
class MainWidget : public QWidget
{
Q_OBJECT
public:
MainWidget(QWidget* parent = nullptr);
2024-05-15 08:34:54 +08:00
~MainWidget();
public:
void set_work_exe(char* path);
void generate_table_widget();
void push_content(const std::vector<Element_t*>& eles, std::size_t page = 1, bool auto_jump_pre = false);
private:
bool read(const QString& file_path);
2024-05-21 15:27:54 +08:00
void search(const QString& key);
void item_changed_handle(QTableWidgetItem* item);
void save();
void copy_select_line();
void insert_one_line(Element_t* ele, int row);
void del_select_line();
void reset();
void judge_btn_page();
void copy_key();
bool edit_property(Element_t* target, int row, bool is_copy);
void init_menu();
void ele_update_gui(Element_t* target, const QString& pre_value = "");
void show_custom_menu();
2024-05-18 01:26:52 +08:00
void sort_by_repeat(std::vector<Element_t*>& vec);
void copy_multi_data();
void replace_content(bool is_common = true);
void backup_file();
void base_init();
void unit_change();
2024-05-16 08:04:55 +08:00
private:
std::string extract_prefix(const std::string& name);
bool compare_by_prefix(const SElement_t& se1, const SElement_t& se2);
2024-05-16 08:04:55 +08:00
protected:
void closeEvent(QCloseEvent* event);
void keyPressEvent(QKeyEvent* event);
void replace_str(const QString& pre, const QString& after, Element_t* ele);
void replace_str(Element_t* ele, const QString& rg, const QString& after);
2024-05-21 15:27:54 +08:00
private:
void get_related_elements(std::vector<OperElement*>& out, ReplaceArea area);
private:
Element_t* get_element_by_key(const QString& key);
Element_t* get_element_by_row(int row);
Element_t* get_current_select_key();
QTableWidgetItem* get_current_select_item();
private:
std::shared_ptr<QFontMetrics> metrics_;
2024-05-15 08:34:54 +08:00
private:
QMenu* menu_simple_{};
QMenu* menu_multi_{};
QAction* ac_edit_property_{};
QAction* ac_copy_curline_{};
QAction* ac_del_curline_{};
QAction* ac_copy_key_{};
Ui::MainWidget* ui;
CXmlOpr xml_{};
std::string exe_path_{};
QTableWidget* tab_widget_{};
std::vector<Element_t*> vec_{};
std::vector<Element_t*> current_{};
std::vector<std::string> keys_{};
bool auto_add_{false};
std::size_t cur_page_{1};
std::size_t all_page_{1};
CAttributeEdit* attri_edit_{};
long allow_max_with_{500};
long blank_with_{50};
ump_t col_with_{};
CGroupSetting* group_set_{};
CGroupIni* ini_oper_{};
CHistory* his_{};
OneGroupIni cur_config_{};
bool u_{false};
2024-05-15 08:34:54 +08:00
};
#endif // MAINWIDGET_H