|
|
#ifndef NMWXPEBIRESULTCONTROLBAR_H
|
|
|
#define NMWXPEBIRESULTCONTROLBAR_H
|
|
|
|
|
|
#include "nmSubWxs_global.h"
|
|
|
|
|
|
#include <QStringList>
|
|
|
#include <QWidget>
|
|
|
#include <QtGlobal>
|
|
|
|
|
|
class QComboBox;
|
|
|
class QToolButton;
|
|
|
class QVariant;
|
|
|
|
|
|
class nmPebiResultPlaybackController;
|
|
|
class nmPebiResultSceneController;
|
|
|
|
|
|
/**
|
|
|
* @brief 结果属性选择与时间回放底部控制条。
|
|
|
*
|
|
|
* 控件只镜像 PlaybackController/SceneController 状态,不创建 Renderer、
|
|
|
* Actor、Mapper、Adapter 或任何额外 VTK 管线。
|
|
|
*/
|
|
|
class NM_SUB_WXS_EXPORT nmWxPebiResultControlBar : public QWidget
|
|
|
{
|
|
|
Q_OBJECT
|
|
|
|
|
|
public:
|
|
|
/** @param pSceneController 非所有权指针,必须比控制条生命周期更长。 */
|
|
|
explicit nmWxPebiResultControlBar(
|
|
|
nmPebiResultSceneController* pSceneController,
|
|
|
QWidget* pParent = nullptr);
|
|
|
/** @brief 析构前停止回放,随后由 Qt 对象树释放控制器和子控件。 */
|
|
|
virtual ~nmWxPebiResultControlBar();
|
|
|
|
|
|
/** @brief 立即停止当前窗口播放,保留 Scene 已显示帧。 */
|
|
|
void stopPlayback();
|
|
|
/** @brief 在外部完成 Scene 快照提交或清理后同步全部控件。 */
|
|
|
void synchronizeFromScene();
|
|
|
/**
|
|
|
* @brief 返回本控制条独占的回放控制器。
|
|
|
* @note 仅供组合窗口查询或配置,调用方不得保存到控制条生命周期之外。
|
|
|
*/
|
|
|
nmPebiResultPlaybackController* getPlaybackController() const;
|
|
|
|
|
|
signals:
|
|
|
/** @brief 一次明确的用户操作已经成功提交,供组合窗口清除旧普通错误。 */
|
|
|
void operationSucceeded();
|
|
|
/** @brief 转发回放控制器错误,供后续组合窗口显示非阻塞提示。 */
|
|
|
void operationFailed(const QString& sError);
|
|
|
|
|
|
private slots:
|
|
|
/** @brief 用户选择属性时提交稳定属性 ID。 */
|
|
|
void onPropertyIndexChanged(int nIndex);
|
|
|
/** @brief 用户选择时间时提交 itemData 中的零基帧。 */
|
|
|
void onTimeIndexChanged(int nIndex);
|
|
|
/** @brief 暂停后打开当前属性的 Saphir 风格颜色设置对话框。 */
|
|
|
void onColorSettingsClicked();
|
|
|
/** @brief 响应首帧按钮。 */
|
|
|
void onFirstFrameClicked();
|
|
|
/** @brief 响应上一帧按钮。 */
|
|
|
void onPreviousFrameClicked();
|
|
|
/** @brief 响应下一帧按钮。 */
|
|
|
void onNextFrameClicked();
|
|
|
/** @brief 响应末帧按钮。 */
|
|
|
void onLastFrameClicked();
|
|
|
/** @brief 切换播放或暂停图标对应的回放状态。 */
|
|
|
void onPlayPauseClicked();
|
|
|
/** @brief 暂停后打开当前窗口独立的动画设置对话框。 */
|
|
|
void onAnimationSettingsClicked();
|
|
|
/** @brief 从 Controller getter 重建或刷新控件镜像状态。 */
|
|
|
void refreshFromController();
|
|
|
/** @brief 将控制器错误转发给后续组合窗口。 */
|
|
|
void forwardOperationFailure(const QString& sError);
|
|
|
/** @brief 从 Scene 当前设置刷新颜色按钮的色带预览。 */
|
|
|
void refreshColorPreview();
|
|
|
|
|
|
private:
|
|
|
Q_DISABLE_COPY(nmWxPebiResultControlBar)
|
|
|
|
|
|
/** @brief 按固定顺序创建属性、导航、时间、播放和设置控件。 */
|
|
|
void createUi();
|
|
|
/** @brief 按快照属性顺序重建属性项,itemData 保存稳定 ID。 */
|
|
|
void rebuildPropertyItems(const QStringList& listPropertyIds);
|
|
|
/** @brief 按小时制时间轴重建时间项,itemData 保存零基帧。 */
|
|
|
void rebuildTimeItems(const QString& sPropertyId, int nFrameCount);
|
|
|
/** @brief 清空并禁用不适用于静态属性的时间下拉框。 */
|
|
|
void clearTimeItems();
|
|
|
/** @brief 使用 QVariant 精确匹配 ComboBox 的稳定业务数据。 */
|
|
|
int findItemByData(QComboBox* pComboBox,
|
|
|
const QVariant& oData) const;
|
|
|
|
|
|
/** @brief 本控制条独占的 QObject 子对象,负责全部回放业务状态。 */
|
|
|
nmPebiResultPlaybackController* m_pPlaybackController;
|
|
|
/** @brief 已渲染属性、帧和显示设置的唯一真源;本控件不拥有。 */
|
|
|
nmPebiResultSceneController* m_pSceneController;
|
|
|
/** @brief 属性选择框,条目数据保存稳定英文属性 ID。 */
|
|
|
QComboBox* m_pPropertyCombo;
|
|
|
/** @brief 显示当前色带预览并打开颜色设置对话框。 */
|
|
|
QToolButton* m_pColorSettingsButton;
|
|
|
/** @brief 跳到第 0 帧的图标按钮。 */
|
|
|
QToolButton* m_pFirstButton;
|
|
|
/** @brief 跳到上一帧的图标按钮。 */
|
|
|
QToolButton* m_pPreviousButton;
|
|
|
/** @brief 小时制时间选择框,条目数据保存零基帧。 */
|
|
|
QComboBox* m_pTimeCombo;
|
|
|
/** @brief 跳到下一帧的图标按钮。 */
|
|
|
QToolButton* m_pNextButton;
|
|
|
/** @brief 跳到末帧的图标按钮。 */
|
|
|
QToolButton* m_pLastButton;
|
|
|
/** @brief 根据回放状态切换播放和暂停图标。 */
|
|
|
QToolButton* m_pPlayPauseButton;
|
|
|
/** @brief 打开速度与循环设置对话框。 */
|
|
|
QToolButton* m_pSettingsButton;
|
|
|
/** @brief 当前属性项对应的 Snapshot ID,仅用于避免重复重建 UI。 */
|
|
|
QString m_sDisplayedSnapshotId;
|
|
|
/** @brief 属性和时间列表最近一次完整展示的 Scene 成功绑定序号。 */
|
|
|
quint64 m_nDisplayedBindingRevision;
|
|
|
/** @brief 当前属性框已展示的有序 ID,仅用于避免重复重建 UI。 */
|
|
|
QStringList m_listDisplayedPropertyIds;
|
|
|
/** @brief 当前时间框对应的动态属性 ID。 */
|
|
|
QString m_sDisplayedTimePropertyId;
|
|
|
/** @brief 当前时间框已完整构建的帧数,失败时为 -1。 */
|
|
|
int m_nDisplayedTimeFrameCount;
|
|
|
};
|
|
|
|
|
|
#endif // NMWXPEBIRESULTCONTROLBAR_H
|