#ifndef MAINWIDGET_H #define MAINWIDGET_H #include <QWidget> #include <QTableWidget> #include <QMenu> #include <QAction> #include <QMessageBox> #include <unordered_map> #include "src/xml_opr.h" #include "src/config.h" #include "src/attribute_edit.h" struct SElement_t { SElement_t(Element_t* e, std::string& s); Element_t* ele; std::string str; }; enum ReplaceArea { AREA_SELECT, AREA_ALL_PAGE, AREA_CUR_PAGE, AREA_ALL }; struct OperElement { OperElement(Element_t* ele, int row); Element_t* element_{}; int row_{0}; }; QT_BEGIN_NAMESPACE namespace Ui { class MainWidget; } QT_END_NAMESPACE using ump_t = std::unordered_map<int, int>; class MainWidget : public QWidget { Q_OBJECT public: MainWidget(QWidget* parent = nullptr); ~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); private: void read(const QString& file_path); 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); void init_menu(); void ele_update_gui(Element_t* target, int row); void show_custom_menu(); void sort_by_repeat(std::vector<Element_t*>& vec); void copy_multi_data(); void replace_content(bool is_common = true); void backup_file(); 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); 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_; 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; ConfigIni ini_{}; 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_{}; OprBase base_{}; long allow_max_with_{500}; long blank_with_{50}; ump_t col_with_{}; }; #endif // MAINWIDGET_H