WsParser_VS/StoryPresent/cmp_present.h

94 lines
3.1 KiB
C
Raw Normal View History

2024-09-24 10:43:10 +00:00
#pragma once
#include <QWidget>
#include <QToolBox>
#include <QSplitter>
#include <QTableView>
#include <QStandardItemModel>
#include <QListView>
#include <QComboBox>
#include <QPushButton>
#include <QStyledItemDelegate>
#include <QMainWindow>
#include "xast_parse.h"
#include "storyline_compare.h"
namespace views {
class StorylineModel : public QAbstractItemModel {
private:
QList<std::shared_ptr<xast_parse::IElementSlice>> _nodes_temp;
std::shared_ptr<xast_parse::IElementSlice> _current_slice = nullptr;
public:
void loadCurrentSlice(std::shared_ptr<xast_parse::IElementSlice> target_slice);
std::shared_ptr<xast_parse::IElementSlice> currentSlice();
// Inherited via QAbstractItemModel
virtual QModelIndex index(int row, int column, const QModelIndex& parent) const override;
virtual QModelIndex parent(const QModelIndex& child) const override;
virtual int rowCount(const QModelIndex& parent) const override;
virtual int columnCount(const QModelIndex& parent) const override;
virtual QVariant data(const QModelIndex& index, int role) const override;
virtual Qt::ItemFlags flags(const QModelIndex& idx) const override;
virtual bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole);
};
class StorylineDelegate : public QStyledItemDelegate {
private:
QWidget* const bind_view;
public:
explicit StorylineDelegate(QAbstractItemView* pwidget);
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;
virtual QSize sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const override;
};
class StoryChangePresent : public QWidget {
public:
StoryChangePresent(
const QHash<QString, std::shared_ptr<xast_parse::StoryDefine>>& g_base,
const QHash<QString, std::shared_ptr<xast_parse::StoryDefine>>& g_old,
QWidget* parent = nullptr);
compare::Compare& compareTool();
private:
compare::Compare base_compare;
QHash<QString, std::shared_ptr<xast_parse::StoryDefine>> g_old;
QToolBox* const _type_appoint;
QTableView* const _fragment_summary; // <20><><EFBFBD>ڵ<EFBFBD><DAB5>޸Ļ<DEB8><C4BB><EFBFBD>
QTableView* const _upstream_summary; // <20><><EFBFBD>νڵ<CEBD><DAB5>޸Ļ<DEB8><C4BB><EFBFBD>
QStandardItemModel* const _change_model;
QComboBox* const _story_appoint;
QSplitter* const _edit_splitter;
QListView* const _define_view;
QListView* const _refer_view;
StorylineModel* const _defn_fragment;
StorylineModel* const _curr_refslice;
void type_change(int idx);
void fragment_selected(const QModelIndex& item);
void storyline_selected(const QString& line);
};
class CompareWindow : public QMainWindow {
private:
xast_parse::XAST_Parser _graph_base, _graph_old;
StoryChangePresent *const _cmp_widget;
public:
CompareWindow(QFileInfo file_base, QFileInfo file_old);
};
}