geopro/src/app/panels/chart/DataTableView.hpp

61 lines
2.2 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#pragma once
#include <QAbstractTableModel>
#include <QStyledItemDelegate>
#include <QWidget>
#include "model/detail/DetailPayloads.hpp"
#include "panels/chart/IDetailView.hpp"
class QTableView;
namespace geopro::app {
// TablePayload 驱动的只读表模型(列标题来自 TableColumn单元为预格式化 QString
class TablePayloadModel : public QAbstractTableModel {
Q_OBJECT
public:
explicit TablePayloadModel(QObject* parent = nullptr);
void setPayload(const geopro::core::TablePayload& payload);
int rowCount(const QModelIndex& parent = QModelIndex()) const override;
int columnCount(const QModelIndex& parent = QModelIndex()) const override;
QVariant data(const QModelIndex& index, int role) const override;
QVariant headerData(int section, Qt::Orientation orientation, int role) const override;
// 列渲染种类(供委托判断是否画开关)。越界返回 Text。
geopro::core::TableColumnKind columnKind(int column) const;
private:
geopro::core::TablePayload payload_;
};
// Toggle 列委托:把单元值("1"=ON/"0"=OFF画成蓝色药丸开关仅展示状态暂不联动散点
// Text 列回退到默认绘制。
class ToggleSwitchDelegate : public QStyledItemDelegate {
Q_OBJECT
public:
explicit ToggleSwitchDelegate(const TablePayloadModel* model, QObject* parent = nullptr);
void paint(QPainter* painter, const QStyleOptionViewItem& option,
const QModelIndex& index) const override;
// Toggle 列返回贴合开关的窄尺寸(供 ResizeToContents 不至于撑宽);其余回退默认。
QSize sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const override;
private:
const TablePayloadModel* model_; // 不拥有
};
// 通用数据列表视图IDetailView + QTableView。measurement/grid/trajectory 列表共用。
class DataTableView : public QWidget, public IDetailView {
Q_OBJECT
public:
explicit DataTableView(QWidget* parent = nullptr);
QWidget* widget() override { return this; }
void setPayload(const QVariant& payload) override; // 坏/空 variant → 保持空态不崩
private:
QTableView* table_;
TablePayloadModel* model_;
};
} // namespace geopro::app