LAMPCAE/src/MainWindow/MainWindow.h

531 lines
14 KiB
C
Raw Normal View History

2023-05-08 06:32:41 +00:00
/**
* @file mainWindow.h
* @brief
* @author LAMPCAE(LAMPCAE@diso.cn)
2023-05-08 06:32:41 +00:00
* @version 2.5.0
* @date 2022-03-29 16:12
* @copyright Copyright (c) Since 2020 All rights reserved.
*
* ============================================================================
* Program: LAMPCAE
2023-05-08 06:32:41 +00:00
*
* Copyright (c) Since 2020 All rights reserved.
* See License or http://www.LAMPCAE.com/ for details.
2023-05-08 06:32:41 +00:00
*
* BSD 3-Clause License
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED.
* ==================================================================================
*/
#ifndef _MAINWINDOW_H_
#define _MAINWINDOW_H_
2023-05-09 11:00:22 +00:00
#include "Common/Types.h"
#include "MainWindowAPI.h"
#include "ModuleBase/messageWindowBase.h"
#include "SARibbonBar/SARibbonMainWindow.h"
2023-05-08 06:32:41 +00:00
#include <QHash>
2023-05-09 11:00:22 +00:00
#include <QMainWindow>
2023-05-08 06:32:41 +00:00
#include <QPair>
#include <QString>
// ribbon customize
#include "SARibbonBar/SARibbonActionsManager.h"
#include "SARibbonBar/SARibbonCustomizeWidget.h"
class XToolManger;
class QTreeWidgetItem;
class QSignalMapper;
class vtkDataSet;
class QMenu;
class QKeyEvent;
class QLabel;
class vtkActor;
class QAction;
class QToolBar;
class SARibbonCategory;
// ribbon customize
class SARibbonActionsManager;
2023-05-09 11:00:22 +00:00
namespace Ui {
2023-05-08 06:32:41 +00:00
class MainWindow;
class MainWindowRibbon;
2023-05-09 11:00:22 +00:00
} // namespace Ui
2023-05-08 06:32:41 +00:00
2023-05-09 11:00:22 +00:00
namespace DataProperty {
2023-05-08 06:32:41 +00:00
class DataBase;
}
2023-05-09 11:00:22 +00:00
namespace MeshData {
2023-05-08 06:32:41 +00:00
class MeshSet;
class MeshKernal;
2023-05-09 11:00:22 +00:00
} // namespace MeshData
2023-05-08 06:32:41 +00:00
2023-05-09 11:00:22 +00:00
namespace Geometry {
2023-05-08 06:32:41 +00:00
class GeometrySet;
class GeoComponent;
2023-05-09 11:00:22 +00:00
} // namespace Geometry
2023-05-08 06:32:41 +00:00
2023-05-09 11:00:22 +00:00
namespace MainWidget {
2023-05-08 06:32:41 +00:00
class ControlPanel;
class MessageWindow;
class ProcessWindow;
class PreWindow;
2023-05-09 11:00:22 +00:00
} // namespace MainWidget
2023-05-08 06:32:41 +00:00
2023-05-09 11:00:22 +00:00
namespace Post {
2023-05-08 06:32:41 +00:00
class PostWindowBase;
class RealTimeWindowBase;
class AnimationToolBar;
2023-05-09 11:00:22 +00:00
} // namespace Post
2023-05-08 06:32:41 +00:00
2023-05-09 11:00:22 +00:00
namespace XReport {
2023-05-08 06:32:41 +00:00
class ReportWindow;
}
2023-05-09 11:00:22 +00:00
namespace GUI {
2023-05-08 06:32:41 +00:00
class SubWindowManager;
class SignalHandler;
class Translator;
class CustomizerHelper;
/**
* @brief
* @note SARibbonMainWindowhttps://gitee.com/czyt1988/SARibbon
* @since 2.5.0
*/
2023-05-09 11:00:22 +00:00
class MAINWINDOWAPI MainWindow : public SARibbonMainWindow {
2023-05-08 06:32:41 +00:00
Q_OBJECT
friend CustomizerHelper;
friend SignalHandler;
public:
/**
* @brief
* @param useRibbon 使Ribbon
* @since 2.5.0
*/
MainWindow(bool useRibbon = true);
/**
* @brief
* @since 2.5.0
*/
~MainWindow();
/**
* @brief Ui
* @return Ui::MainWindowRibbon* Ui
* @since 2.5.0
*/
2023-05-09 11:00:22 +00:00
Ui::MainWindowRibbon* getUi();
// 获取翻译
Translator* GetTranslator();
QString getMD5();
void setMD5(const QString& md5);
// 设置当前文件
void setCurrentFile(const QString& file);
// 清空关闭所有窗口
void clearWidgets();
SubWindowManager* getSubWindowManager();
CustomizerHelper* getCustomizerHelper();
SignalHandler* getSignalHandler();
// 获取控制面板
MainWidget::ControlPanel* getControlPanel();
// 获取控制台
MainWidget::MessageWindow* getMessageWindow();
// 更新recentMenu
void updateRecentMenu();
2023-05-08 06:32:41 +00:00
// action状态控制
2023-05-09 11:00:22 +00:00
void setActionVisible(QString objname, bool enable);
// 设置图标
void setIcon(QString iconPath);
// 根据object name 获取action
QAction* getAction(QString& objName);
// 根据object name 获取toolbar
QToolBar* getToolBar(QString& objName);
// 根据object name 获取menu
QMenu* getMenu(QString& objName);
QPair<QWidget*, QList<QAction*>> createWidgetAndAction(const QString& title,
const QStringList& actionStrs);
Post::AnimationToolBar* getAnimationToolBar();
2023-05-08 06:32:41 +00:00
// Ribbon Customize
2023-05-09 11:00:22 +00:00
SARibbonActionsManager* getActionManager();
2023-05-08 06:32:41 +00:00
signals:
/*更新注册接口*/
void updateInterfaces();
/*发送信息给状态栏 */
void sendInfoToStatesBar(QString);
/*显示装状态栏绘图范围*/
void showGraphRangeSig(double, double);
/*模型树点击事件 鼠标信号eventType 0- 左键单机1-右键单击2- 左键双击 */
2023-05-09 11:00:22 +00:00
void treeMouseEvent(int eventType, QTreeWidgetItem* item, int projectID);
2023-05-08 06:32:41 +00:00
/*更新模型树信号 */
void updatePhysicsTreeSignal();
2023-05-09 11:00:22 +00:00
// 更新材料信号
2023-05-08 06:32:41 +00:00
void updateMaterialTreeSig();
/*打印输出信息 */
void printMessageToMessageWindow(QString message);
///< MG output message
void printMessageToMessageWindow(ModuleBase::Message message);
/**
* @brief
* @param type
* @param m
*/
void printMessageSig(Common::Message type, QString m);
/*开始求解 */
void startSolve();
/*暂停求解 */
void pauseSolve();
/*终止求解 */
2023-05-09 11:00:22 +00:00
void stopSolve(QWidget* w);
2023-05-08 06:32:41 +00:00
/*添加进度条 */
2023-05-09 11:00:22 +00:00
void addProcessBarSig(QWidget* w);
// 求解进程结束
2023-05-08 06:32:41 +00:00
void processFinished(int pid);
/****几何相关信号**** */
2023-05-09 11:00:22 +00:00
void startSketchSig(bool start, double* loc, double* dir);
// 清除所有高亮
2023-05-08 06:32:41 +00:00
void clearAllHighLight();
/*刷新几何树 */
void importGeometrySig(QStringList f);
void exportGeometrySig(QString);
void updateGeometryTreeSig();
void updateGeoDispalyStateSig(int index, bool display);
void removeGeometryActorSig(int index);
2023-05-09 11:00:22 +00:00
void highLightGeometrySetSig(Geometry::GeometrySet* s, bool on);
2023-05-08 06:32:41 +00:00
/****网格相关信号***** */
void importMeshByNamesSig(QString name);
2023-05-09 11:00:22 +00:00
void importMeshDataSetSig(vtkDataSet* dataset);
2023-05-08 06:32:41 +00:00
// void exportMeshByIDSig(QString fileName, QString suffix, int kID);
void editMeshSig(int dim, int kindex);
void updateMeshTreeSig();
void updateSetTreeSig();
void updateMeshDispalyStateSig(int index, bool display);
2023-05-09 11:00:22 +00:00
void updateMeshSetVisibleSig(MeshData::MeshSet*);
2023-05-08 06:32:41 +00:00
void removeMeshActorSig(int index);
void removeSetDataSig(int index);
2023-05-09 11:00:22 +00:00
void highLightSetSig(MeshData::MeshSet* set);
void highLightGeoComponentSig(Geometry::GeoComponent*);
void highLightKernelSig(MeshData::MeshKernal* k);
void highLightDataSetSig(vtkDataSet* dataset);
2023-05-08 06:32:41 +00:00
void updateMeshSetColorSig(int setID);
2023-05-09 11:00:22 +00:00
// 清空数据
2023-05-08 06:32:41 +00:00
void clearDataSig();
2023-05-09 11:00:22 +00:00
/// 更新前处理窗口所有几何网格Actor
2023-05-08 06:32:41 +00:00
// void updatePreActors();
/*创建物理模型 */
void createPhysiceModelSig();
/*更新属性框 */
2023-05-09 11:00:22 +00:00
void updateProperty(DataProperty::DataBase* data);
// 更新参数窗口
void updateParaWidget(QWidget* w);
/// 关闭前处理窗口
2023-05-08 06:32:41 +00:00
void closePreWindowSig();
2023-05-09 11:00:22 +00:00
/// 打开后处理窗口
void openPostWindowSig(Post::PostWindowBase* pw);
/// 打开实时曲线窗口,
void openRealTimeWindowSig(Post::RealTimeWindowBase* w, int proID);
/// 展示后处理窗口
2023-05-08 06:32:41 +00:00
void showPostWindowInfoSig(int id, int type);
2023-05-09 11:00:22 +00:00
/// 关闭后处理窗口
void closePostWindowSig(Post::PostWindowBase* w);
/// 关闭实时曲线窗口
void closeRealTimeWindowSig(Post::RealTimeWindowBase* w);
/// 更新实时曲线窗口
2023-05-08 06:32:41 +00:00
void updateRealTimePlotSig(QString fileName);
2023-05-09 11:00:22 +00:00
/// 切换选择模式
2023-05-08 06:32:41 +00:00
void selectModelChangedSig(int i);
2023-05-09 11:00:22 +00:00
/// 切换网格显示模式
2023-05-08 06:32:41 +00:00
void meshDisplayModeChangedSig();
2023-05-09 11:00:22 +00:00
/// 切换几何显示模型
2023-05-08 06:32:41 +00:00
// void displayGeometryChangedSig(QString mode);
2023-05-09 11:00:22 +00:00
/// 求解项目
2023-05-08 06:32:41 +00:00
void solveProjectSig(int proIndex, int solverIndex);
2023-05-09 11:00:22 +00:00
// 添加新生成网格
void appendGeneratedMesh(QString name, vtkDataSet* dataset);
// 显示报告窗口
void openReportWindowSig(XReport::ReportWindow* w);
// 关闭报告窗口
void closeReportWindowSig(XReport::ReportWindow* w);
/// 设置键盘事件
2023-05-08 06:32:41 +00:00
void enableGraphWindowKeyBoard(bool on);
2023-05-09 11:00:22 +00:00
/// 更新Action状态
2023-05-08 06:32:41 +00:00
// void updateActionStatesSig();
void updatePreMeshActorSig();
2023-05-09 11:00:22 +00:00
void updatePreGeometryActorSig(); // 徐文强2020/6/4添加
/// 根据绘图设置更新绘图
2023-05-08 06:32:41 +00:00
void updateGraphOptionsSig();
2023-05-09 11:00:22 +00:00
// 保存图片 winType 0- 前处理窗口 1-后处理 Wintype为前处理时winhandle可任意
void saveImageSig(QString fileName, int winType, Post::PostWindowBase* winhandle, int w,
int h);
2023-05-08 06:32:41 +00:00
// //面网格划分
// void surfaceMeshSig(Geometry::GeometrySet*);
// //体网格划分
// void solidMeshSig(Geometry::GeometrySet*);
2023-05-09 11:00:22 +00:00
// 保存图片
2023-05-08 06:32:41 +00:00
void saveImage(int w, int h, QString file);
2023-05-09 11:00:22 +00:00
// 清除高亮
2023-05-08 06:32:41 +00:00
void clearHighLightSig();
2023-05-09 11:00:22 +00:00
// 前处理窗口打开
void preWindowOpenedSig(MainWidget::PreWindow* p);
// 固定位置显示对话框
void showDialogSig(QDialog*);
// 记录几何显示控件状态
2023-05-08 06:32:41 +00:00
void selectGeometryDisplay(bool, bool, bool);
2023-05-09 11:00:22 +00:00
// 在几何上选取点、线、面。
2023-05-08 06:32:41 +00:00
void selectGeometryModelChangedSig(int);
2023-05-09 11:00:22 +00:00
// 更新工具栏状态
2023-05-08 06:32:41 +00:00
void updateActionStatesSig();
2023-05-09 11:00:22 +00:00
// 关闭主窗口
2023-05-08 06:32:41 +00:00
void closeMainWindow();
/**
* @brief
*/
void updatePostTreeSig();
2023-05-08 06:32:41 +00:00
//
2023-05-09 11:00:22 +00:00
// 更新二维曲线模型树
2023-05-08 06:32:41 +00:00
void updatePlotTreeSig();
//
2023-05-09 11:00:22 +00:00
// 打开二维曲线绘制信号
2023-05-08 06:32:41 +00:00
void openPlot();
public slots:
/*状态栏显示信息 */
void setStatusBarInfo(QString);
2023-05-09 11:00:22 +00:00
/// 切换语言
2023-05-08 06:32:41 +00:00
void ChangeLanguage(QString lang);
2023-05-09 11:00:22 +00:00
/// 切换选择模式,改变工具栏选中状态
2023-05-08 06:32:41 +00:00
void selectModelChanged(int model);
2023-05-09 11:00:22 +00:00
// 切换网格显示模式
2023-05-08 06:32:41 +00:00
void setMeshDisplay();
2023-05-09 11:00:22 +00:00
// 切换几何显示模式
2023-05-08 06:32:41 +00:00
void selectGeometryModelChanged(int m);
void setGeometryDisplay();
// ///<MG 显示/隐藏 工具栏/菜单栏 中的某一菜单/某一项
// void showToolMenu(QString name, bool show);
void updatePreGeometryActor();
void updatePreMeshActor();
2023-05-09 11:00:22 +00:00
/// 导入几何
2023-05-08 06:32:41 +00:00
void on_importGeometry();
2023-05-09 11:00:22 +00:00
/// 导出几何
2023-05-08 06:32:41 +00:00
void on_exportGeometry();
2023-05-09 11:00:22 +00:00
// 生成体网格
2023-05-08 06:32:41 +00:00
void on_solidMesh();
2023-05-09 11:00:22 +00:00
// 生成面网格
2023-05-08 06:32:41 +00:00
void on_surfaceMesh();
2023-05-09 11:00:22 +00:00
// 生成网格
2023-05-08 06:32:41 +00:00
void on_genMesh();
2023-05-09 11:00:22 +00:00
// 打印信息
2023-05-08 06:32:41 +00:00
void printMessage(Common::Message type, QString m);
2023-05-09 11:00:22 +00:00
// 导入网格
2023-05-08 06:32:41 +00:00
// void importMesh(QString fileName, QString s, int modelId);
2023-05-09 11:00:22 +00:00
// 导入几何
2023-05-08 06:32:41 +00:00
void importGeometry(QStringList f);
2023-05-09 11:00:22 +00:00
// 导出几何
2023-05-08 06:32:41 +00:00
void exportGeometry(QString f);
2023-05-09 11:00:22 +00:00
// 更新工具栏信息
2023-05-08 06:32:41 +00:00
// void updateActionsStates();
private slots:
/*关闭主窗口 */
void closeWindow();
2023-05-09 11:00:22 +00:00
/// 新建项目
2023-05-08 06:32:41 +00:00
void on_actionNew();
2023-05-09 11:00:22 +00:00
/// 打开工程文件
2023-05-08 06:32:41 +00:00
void on_actionOpen();
2023-05-09 11:00:22 +00:00
/// 保存工程文件
2023-05-08 06:32:41 +00:00
void on_actionSave();
2023-05-09 11:00:22 +00:00
/// 工程文件另存为
2023-05-08 06:32:41 +00:00
void on_actionSaveAs();
2023-05-09 11:00:22 +00:00
/// 导入网格
2023-05-08 06:32:41 +00:00
void on_importMesh();
2023-05-09 11:00:22 +00:00
// 导入网格
void importMeshDataset(vtkDataSet* dataset);
// 导出网格
2023-05-08 06:32:41 +00:00
void on_exportMesh();
2023-05-09 11:00:22 +00:00
/// 设置工作目录
2023-05-08 06:32:41 +00:00
void setWorkingDir();
2023-05-09 11:00:22 +00:00
/// 启动求解器
2023-05-08 06:32:41 +00:00
void on_solve();
2023-05-09 11:00:22 +00:00
// 单独工程求解
2023-05-08 06:32:41 +00:00
void solveProject(int id);
2023-05-09 11:00:22 +00:00
/// 管理求解器
2023-05-08 06:32:41 +00:00
void on_solverManager();
2023-05-09 11:00:22 +00:00
/// 设置求解选项
2023-05-08 06:32:41 +00:00
void on_solveOption();
2023-05-09 11:00:22 +00:00
// 设置绘图选项
2023-05-08 06:32:41 +00:00
void on_graphOption();
// About对话框
void on_about();
2023-05-09 11:00:22 +00:00
// 打开用户手册
2023-05-08 06:32:41 +00:00
void on_userManual();
2023-05-09 11:00:22 +00:00
// 打开最近文件
2023-05-08 06:32:41 +00:00
void openRencentFile(QString file);
2023-05-09 11:00:22 +00:00
// 创建组件Set
2023-05-08 06:32:41 +00:00
void on_CreateSet();
void on_CreateGeoComponent();
2023-05-09 11:00:22 +00:00
// 保存脚本
2023-05-08 06:32:41 +00:00
void on_SaveScript();
2023-05-09 11:00:22 +00:00
// 执行脚本
2023-05-08 06:32:41 +00:00
void on_ExecuateScript();
2023-05-09 11:00:22 +00:00
// 草绘点击
2023-05-08 06:32:41 +00:00
void on_sketchClicked();
2023-05-09 11:00:22 +00:00
// 显示窗口范围
2023-05-08 06:32:41 +00:00
void showGraphRange(double, double);
2023-05-09 11:00:22 +00:00
// 开始草绘
2023-05-08 06:32:41 +00:00
void startSketch(bool s);
2023-05-09 11:00:22 +00:00
// 网格过滤
2023-05-08 06:32:41 +00:00
void on_FilterMesh();
2023-05-09 11:00:22 +00:00
// 创建VTK空间变换窗口
void on_VTKTranslation();
2023-05-08 06:32:41 +00:00
private:
/*初始化Menu*/
// void initMenu();
/*信号槽关联 */
void connectSignals();
/*注册模块 */
void registerMoudel();
2023-05-09 11:00:22 +00:00
/// 初始化工具栏
2023-05-08 06:32:41 +00:00
void initToolBar();
/*重写QWidget虚函数 关闭主窗口事件 */
2023-05-09 11:00:22 +00:00
void closeEvent(QCloseEvent* event) override;
2023-05-08 06:32:41 +00:00
2023-05-09 11:00:22 +00:00
// 键盘按下事件
void keyPressEvent(QKeyEvent* e) override;
void keyReleaseEvent(QKeyEvent* e) override;
void showEvent(QShowEvent* e) override;
2023-05-08 06:32:41 +00:00
bool isLoadRecordScripFile();
// ribbon
void setSketchPageVisible(bool visible);
2023-05-09 11:00:22 +00:00
// 切换到Ribbon 若ok为false则为一般模式
2023-05-08 06:32:41 +00:00
void changeStyleToRibbon(bool ok);
//
void setPostAnimationToolBar(bool ribbon);
private:
/**
* @brief ui
* @since 2.5.0
*/
2023-05-09 11:00:22 +00:00
Ui::MainWindowRibbon* _ui{};
2023-05-08 06:32:41 +00:00
/**
* @brief
* @since 2.5.0
*/
2023-05-09 11:00:22 +00:00
Translator* _translator{};
2023-05-08 06:32:41 +00:00
/**
* @brief
* @since 2.5.0
*/
2023-05-09 11:00:22 +00:00
SignalHandler* _signalHandler{};
2023-05-08 06:32:41 +00:00
/**
* @brief
* @since 2.5.0
*/
2023-05-09 11:00:22 +00:00
SubWindowManager* _subWindowManager{};
2023-05-08 06:32:41 +00:00
/**
* @brief
* @since 2.5.0
*/
2023-05-09 11:00:22 +00:00
CustomizerHelper* _customizerHelper{};
2023-05-08 06:32:41 +00:00
// bool _designModel{ false };
// QHash<int, Post3D::Post3DWindow*> _post3DWindow{};
/**
* @brief
* @since 2.5.0
*/
2023-05-09 11:00:22 +00:00
QString _currentFile{};
2023-05-08 06:32:41 +00:00
2023-05-09 11:00:22 +00:00
QString _MD5{};
2023-05-08 06:32:41 +00:00
/**
* @brief
* @since 2.5.0
*/
2023-05-09 11:00:22 +00:00
MainWidget::ControlPanel* _controlPanel{};
2023-05-08 06:32:41 +00:00
/**
* @brief
* @since 2.5.0
*/
2023-05-09 11:00:22 +00:00
MainWidget::ProcessWindow* _processWindow{};
2023-05-08 06:32:41 +00:00
/**
* @brief
* @since 2.5.0
*/
2023-05-09 11:00:22 +00:00
MainWidget::MessageWindow* _messageWindow{};
2023-05-08 06:32:41 +00:00
/**
* @brief
* @since 2.5.0
*/
2023-05-09 11:00:22 +00:00
QSignalMapper* _viewSignalMapper{};
2023-05-08 06:32:41 +00:00
/**
* @brief
* @since 2.5.0
*/
2023-05-09 11:00:22 +00:00
QSignalMapper* _selectSignalMapper{};
2023-05-08 06:32:41 +00:00
// QSignalMapper* _displayModeSignalMapper{};
/**
* @brief
* @since 2.5.0
*/
2023-05-09 11:00:22 +00:00
QSignalMapper* _selectGeometryModeMapper{};
2023-05-08 06:32:41 +00:00
/**
* @brief
* @since 2.5.0
*/
2023-05-09 11:00:22 +00:00
QMenu* _recentMenu{};
2023-05-08 06:32:41 +00:00
/**
* @brief
* @since 2.5.0
*/
2023-05-09 11:00:22 +00:00
QSignalMapper* _recentFileMapper{};
2023-05-08 06:32:41 +00:00
/**
* @brief
* @since 2.5.0
*/
2023-05-09 11:00:22 +00:00
QLabel* _graphRange{};
2023-05-08 06:32:41 +00:00
///< MG tool manger
// MainWidget::ControlPanel* _controlPanel{};
// MainWidget::ProcessWindow* _processWindow{};
// MainWidget::MessageWindow* _messageWindow{};
2023-05-09 11:00:22 +00:00
Post::AnimationToolBar* _postToolBar{};
2023-05-08 06:32:41 +00:00
//
// QSignalMapper* _viewSignalMapper{};
// QSignalMapper* _selectSignalMapper{};
// // QSignalMapper* _displayModeSignalMapper{};
// QSignalMapper* _selectGeometryModeMapper{};
//
// QMenu* _recentMenu{};
// QSignalMapper* _recentFileMapper{};
//
// QLabel* _graphRange{};
///< MG tool manger
// XToolManger * _toolManger;
//
// ///<MG external menu
// QMap<QString, QMenu *> _externalMenus{};
//
// ///<MG external action
// QMap<QString, QAction*> _externalActions{};
// ribbon customize
2023-05-09 11:00:22 +00:00
SARibbonActionsManager* m_ribbonActionMgr{};
2023-05-08 06:32:41 +00:00
};
2023-05-09 11:00:22 +00:00
} // namespace GUI
2023-05-08 06:32:41 +00:00
#endif