QBinaryTranslate/TranslateUI/SequenceView.h

88 lines
2.6 KiB
C++

#pragma once
#include <QWidget>
#include <QTableView>
#include <QStandardItemModel>
#include <QStyledItemDelegate>
#include <QItemDelegate>
#include <QHash>
#include <memory>
#include "TranslateBasic.h"
namespace unit_func {
/// <summary>
/// 整形修改代理
/// </summary>
class IntDelegate : public QStyledItemDelegate {
Q_OBJECT
private:
int _min_value, _max_value;
signals:
void valueChanged(const QModelIndex& idx) const;
public:
IntDelegate(int min, int max);
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;
};
/// <summary>
/// 翻译规则编辑代理
/// </summary>
class RuleSelectDelegate : public QStyledItemDelegate {
Q_OBJECT
private:
std::shared_ptr<TranslateBasic> _kernel;
signals:
void dataChanged(const QModelIndex& idx) const;
public:
RuleSelectDelegate(std::shared_ptr<TranslateBasic> 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;
};
}
/// <summary>
/// 序列化规则视图
/// </summary>
class RuleSetCustom : public QTableView {
Q_OBJECT
private:
struct __Private {
QStandardItemModel* _seqs_model;
std::shared_ptr<TranslateBasic> base = nullptr;
std::shared_ptr<extract::BytesAsRuleSet> _ruleset = nullptr;
} _view;
signals:
void currentRuleChanged(std::shared_ptr<ExtractUnit> u, const QModelIndex& i) const;
public:
void targetRuleRefresh(const QModelIndex& idx);
void peersRuleChanged(const QModelIndex& idx_rule);
protected:
void showEvent(QShowEvent* e) override;
public:
RuleSetCustom(std::shared_ptr<TranslateBasic> base,
std::shared_ptr<extract::BytesAsRuleSet> rule_set, QWidget* p = nullptr);
void customTranslateRuleEdit(const QPoint& pos);
void addTranslateUnit();
void removeTranslateUnit();
void membersPresent(std::shared_ptr<extract::BytesAsRuleSet> _bind, QStandardItemModel* model);
};