61 lines
2.2 KiB
C++
61 lines
2.2 KiB
C++
#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
|