#pragma once #include #include #include #include #include #include #include #include #include #include #include "extract_basic.h" #include "TranslateBasic.h" namespace unit_configurations { class SingleBasedConfiguration : public QWidget { Q_OBJECT private: std::shared_ptr _bind_core; QSpinBox* const _offset_enter; QComboBox* const _delegate_changed; QPushButton* const _delegate_sync; QTextBrowser* const _content_display; std::shared_ptr inst_current = nullptr; QModelIndex idx_current; public: SingleBasedConfiguration(std::shared_ptr core, QWidget* p = nullptr); void currentAccept(std::shared_ptr inst_u, const QModelIndex& idx); signals: void reloadRequest(); }; /// /// 列表字段配置面板 /// class ListBasedConfiguration : public QWidget { Q_OBJECT private: std::shared_ptr _bind_core; QSpinBox* const _offset_enter; QPushButton* const _delegate_sync; QComboBox* const _delegate_select; QComboBox* const _size_layout_select; QStackedWidget* const _configs_stack; QTextBrowser* const _content_display; QSpinBox* const _const_number_input; QComboBox* const _prev_field_refer; std::shared_ptr _bind_u = nullptr; std::shared_ptr _fields_getter = nullptr; QModelIndex _bind_index; public: ListBasedConfiguration(std::shared_ptr core, QWidget* p = nullptr); void currentAccept(std::shared_ptr inst_u, const QModelIndex& idx, std::shared_ptr get); signals: void reloadRequest(); }; class UnionBasedConfiguration : public QWidget { Q_OBJECT private: QSpinBox* const _offset_enter; // 偏移 QSpinBox* const _size_input; // 尺寸输入 QTextEdit* const _context_present; // 内容展示 QComboBox* const _match_select; // 匹配类型 QComboBox* const _delegate_select; // 解析代理类型 QTableView* const _members_present;// 成员代理类型 QStandardItemModel* const _members_model; QComboBox* const _intfield_bind; QComboBox* const _compare_op; QSpinBox* const _value_enters; public: UnionBasedConfiguration(std::shared_ptr core, QWidget* p = nullptr); void currentAccept(std::shared_ptr inst_u, const QModelIndex& idx, std::shared_ptr get); signals: void reloadRequest(); }; } #include class UnitSelectDelegate : public QStyledItemDelegate { private: std::shared_ptr _kernel; public: UnitSelectDelegate(std::shared_ptr ins); virtual QWidget* createEditor(QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index) const override; virtual void setEditorData(QWidget* editor, const QModelIndex& index) const override; virtual void setModelData(QWidget* editor, QAbstractItemModel* model, const QModelIndex& index) const override; virtual void updateEditorGeometry(QWidget* editor, const QStyleOptionViewItem& option, const QModelIndex& index) const override; }; class ExtractRuleView : public QWidget { private: std::shared_ptr _basic_bind; QTableView* const _member_units; QStandardItemModel* const _members_model; QStackedWidget* const _configs_stack; std::shared_ptr _current_rule; std::shared_ptr _current_fields_cache = nullptr; public: ExtractRuleView(std::shared_ptr base, std::shared_ptr inst_r, QWidget* p = nullptr); void reload(); void appendUnit(); void dataChanged(QStandardItem* item); protected: void showEvent(QShowEvent* e) override; };