DAWorkbench 0.0.1
DAWorkbench API
载入中...
搜索中...
未找到
DAAppController.h
1#ifndef DAAPPCONTROLLER_H
2#define DAAPPCONTROLLER_H
3#include <QObject>
4#include <functional>
5#include <QAction>
6#include <QUndoStack>
7#include <QScopedPointer>
8#include "DADataManageWidget.h"
9#include "DAWorkFlowGraphicsScene.h"
10#include "DAFigureElementSelection.h"
11#if DA_ENABLE_PYTHON
12#include "numpy/DAPyDType.h"
13#endif
14// Qt
15class QComboBox;
16class QToolBar;
17class QMenuBar;
18class QFontComboBox;
19class QUndoStack;
20class QGraphicsItem;
21// qwt
22class QwtPlotItem;
23// Qt-Advanced-Docking-System 前置申明
24namespace ads
25{
26class CDockWidget;
27}
28namespace DA
29{
30class AppMainWindow;
31class DAAppCore;
32class DAProjectInterface;
33class DAAppRibbonArea;
34class DAAppDockingArea;
35class DAAppCommand;
36class DAAppActions;
37class DAAppDataManager;
38class DASettingContainerWidget;
39class DADataOperateOfDataFrameWidget;
40class DAWorkFlowOperateWidget;
41class DADataOperateWidget;
42class DAAppChartOperateWidget;
43class DADataManageWidget;
44class DAFigureWidget;
45class DAChartWidget;
46class DADataOperatePageWidget;
47class DAAppSettingDialog;
48class DAAppConfig;
49class DAWorkFlowEditWidget;
53class DAAppController : public QObject
54{
55 Q_OBJECT
56public:
61 {
62 LastFocusedNoneOptWidget = 0x00,
66 };
67 Q_DECLARE_FLAGS(LastFocusedOpertateWidgets, LastFocusedOpertateWidget)
74 using FpChartWidgetApply = std::function< bool(DAChartWidget*) >;
75
76public:
77 DAAppController(QObject* par = nullptr);
79 // 设置AppMainWindow
81 // 设置core
83 // 设置ribbon
85 // 设置dock
87 // 设置AppCommand
89 // 设置AppActions
91 // 设置AppDataManager
93 // 获取app
94 AppMainWindow* app() const;
95 // 初始化--必须初始化才能生效
96 void initialize();
97
98public:
99 // 获取当前dataframeOperateWidget,如果没有返回nullptr,此函数不返回nullptr的前提是
100 DADataOperateOfDataFrameWidget* getCurrentDataFrameOperateWidget(bool checkDataOperateAreaFocused = true,
101 bool isShowMessage = true);
102 // 获取工作流操作窗口
104 // 获取数据操作窗口
106 // 获取绘图操作窗口
108 // 获取数据管理窗口
110 // 获取当前的绘图,如果没有回返回nullptr
112 DAFigureWidget* gcf();
113 // 获取绘图操作窗口,如果没有回返回nullptr
115 DAChartWidget* gca() const;
116 QList< DAChartWidget* > getAllCharts() const;
117 QList< DAChartWidget* > gcas() const;
118 bool applyToCharts(const FpChartWidgetApply& fp);
119 // 获取需要操作的绘图
120 QList< DAChartWidget* > needOperateCharts() const;
121 // 获取设置窗口
123 // 判断当前是否是在绘图操作模式,就算绘图操作不在焦点,但绘图操作在前端,此函数也返回true
126 bool isLastFocusedOnDataOptWidget() const;
127 DAAppConfig* getConfig() const;
128 void setConfig(DAAppConfig* config);
129 // 设置工程为dirty
130 void setDirty(bool on = true);
131 bool isDirty() const;
132 // 导入数据
133 bool importData(const QString& filePath, const QVariantMap& args, QString* err = nullptr);
134 // 更新窗口标题
135 void updateWindowTitle();
136 // 生成窗口标题
137 static QString makeWindowTitle();
138 static QString makeWindowTitle(DAProjectInterface* proj);
139 // 是否应用到所有绘图
140 bool isApplyToAllCharts() const;
141public Q_SLOTS:
142 // 保存
143 void save();
144 // 另存为
145 void saveAs();
146 // 打开 文件前的检查, 返回true说明可以打开
147 bool openCheck();
148 // 打开文件
149 void open();
150 // 打开工程文件
151 bool openProjectFile(const QString& projectFilePath);
152private Q_SLOTS:
153 // 工程的胀状态改变槽
154 void onProjectDirtyStateChanged(bool isdirty);
155 //===================================================
156 // 主页标签 Main Category
157 //===================================================
158 void onActionAppendProjectTriggered();
159
160 // app设定
161 void onActionSettingTriggered();
162 // 插件管理对话框触发
163 void onActionPluginManagerTriggered(bool on);
164 // about
165 void onActionAboutTriggered();
166 //===================================================
167 // 数据标签 Data Category
168 //===================================================
169 // 添加数据
170 void onActionAddDataTriggered();
171 // 移除数据
172 void onActionRemoveDataTriggered();
173 //===================================================
174 // 绘图标签 Chart Category
175 //===================================================
176 // 添加绘图
177 void onActionAddFigureTriggered();
178 // 添加绘图
179 void onActionFigureResizeChartTriggered(bool on);
180 // 新坐标系
181 void onActionFigureNewXYAxisTriggered();
182 // 添加曲线
183 void onActionChartAddCurveTriggered();
184 // 添加散点图
185 void onActionChartAddScatterTriggered();
186 // 添加柱状图
187 void onActionChartAddBarTriggered();
188 // 添加误差棒图
189 void onActionactionChartAddErrorBarTriggered();
190 // 添加箱型图
191 void onActionChartAddBoxPlotTriggered();
192 // 添加谱图
193 void onActionChartAddCloudMapTriggered();
194 //===================================================
195 // 绘图标签 Chart Context Category
196 //===================================================
197 // 允许网格
198 void onActionChartEnableGridTriggered(bool on);
199 // 允许网格X
200 void onActionChartEnableGridXTriggered(bool on);
201 // 允许网格Y
202 void onActionChartEnableGridYTriggered(bool on);
203 // 允许网格XMin
204 void onActionChartEnableGridXMinEnableTriggered(bool on);
205 // 允许网格YMin
206 void onActionChartEnableGridYMinTriggered(bool on);
207 // 允许缩放
208 void onActionChartEnableZoomTriggered(bool on);
209 // 当前图表放大
210 void onActionChartZoomInTriggered();
211 // 当前图表缩小
212 void onActionChartZoomOutTriggered();
213 // 当前图表全部显示
214 void onActionChartZoomAllTriggered();
215 // 允许绘图拖动
216 void onActionChartEnablePanTriggered(bool on);
217 // 允许绘图拾取
218 void onActionChartEnablePickerCrossTriggered(bool on);
219 // 允许绘图拾取Y
220 void onActionChartEnablePickerYTriggered(bool on);
221 // 绘图样式选择
222 void onActionGroupChartPickerTextRegionTriggered(QAction* act);
223 // 允许绘图拾取XY
224 void onActionChartEnablePickerXYTriggered(bool on);
225 // 连接所有picker
226 void onActionChartLinkAllPickerEnabledTriggered(bool on);
227 // 是否在ypicker的时候显示x值
228 void onActionChartYPickerShowXValueEnabledTriggered(bool on);
229 // 允许绘图图例
230 void onActionChartEnableLegendTriggered(bool on);
231 // 绘图样式选择
232 void onActionGroupFigureThemeTriggered(QAction* act);
233 // 复制到剪切板
234 void onActionCopyFigureToClipboardTriggered();
235 //===================================================
236 // 数据操作的上下文标签 Data Operate Context Category
237 //===================================================
238 // 移除选中行
239 void onActionRemoveRowTriggered();
240 // 移除选中列
241 void onActionRemoveColumnTriggered();
242 // 移除单元格内容
243 void onActionRemoveCellTriggered();
244 // 插入一行
245 void onActionInsertRowTriggered();
246 // 在选中位置上面插入一行
247 void onActionInsertRowAboveTriggered();
248 // 在选中位置右边插入一列
249 void onActionInsertColumnRightTriggered();
250 // 在选中位置左边插入一列
251 void onActionInsertColumnLeftTriggered();
252 // dataframe列重命名
253 void onActionRenameColumnsTriggered();
254#if DA_ENABLE_PYTHON
255 // 列数据类型改变
256 void onComboxColumnTypesCurrentDTypeChanged(const DA::DAPyDType& dt);
257 void onDataOperateDataFrameWidgetSelectTypeChanged(const QList< int >& column, DA::DAPyDType dt);
258#endif
259 // 选中列转换为数值
260 void onActionCastToNumTriggered();
261 // 选中列转换为文字
262 void onActionCastToStringTriggered();
263 // 选中列转换为日期
264 void onActionCastToDatetimeTriggered();
265 // 选中列转换为索引
266 void onActionChangeToIndexTriggered();
267
268 //===================================================
269 // 视图标签 View Category
270 //===================================================
271 // 显示工作流区域
272 void onActionShowWorkFlowAreaTriggered();
273 void onActionShowWorkFlowManagerAreaTriggered();
274 // 显示绘图区域
275 void onActionShowChartAreaTriggered();
276 void onActionShowChartManagerAreaTriggered();
277 // 显示数据区域
278 void onActionShowDataAreaTriggered();
279 void onActionShowDataManagerAreaTriggered();
280 // 显示信息区域
281 void onActionShowMessageLogViewTriggered();
282 // 显示设置区域
283 void onActionSettingWidgetTriggered();
284 // 显示标记线 - 此action有个menu,menu的action选中会设置当前action的图标,具体实现放在DAAppRibbonArea::buildContextCategoryWorkflowView_函数中
285 void onActionWorkflowViewMarkerTriggered(bool on);
286 // 显示右侧边栏
287 void onActionShowRightSideBarTriggered(bool on);
288 // 显示左侧边栏
289 void onActionShowLeftSideBarTriggered(bool on);
290 //===================================================
291 // workflow上下文
292 //===================================================
293
294 void onActionNewWorkflowTriggered();
295
296 // 绘制矩形
297 void onActionStartDrawRectTriggered(bool on);
298 // 绘制文本框
299 void onActionStartDrawTextTriggered(bool on);
300 // 允许连线
301 void onActionWorkflowLinkEnableTriggered(bool on);
302
303 // 通用的字体变更
304 void onEditFontChanged(const QFont& f);
305 void onEditFontColorChanged(const QColor& c);
306 // 通用的背景和框线变更
307 void onEditBrushChanged(const QBrush& b);
308 void onEditPenChanged(const QPen& p);
309
310 // 当前工作流的字体变更
311 void onCurrentWorkflowFontChanged(const QFont& f);
312 void onCurrentWorkflowFontColorChanged(const QColor& c);
313 // 图元的背景和框线变更
314 void onCurrentWorkflowShapeBackgroundBrushChanged(const QBrush& b);
315 void onCurrentWorkflowShapeBorderPenChanged(const QPen& p);
316 // 添加背景图
317 void onActionAddBackgroundPixmapTriggered();
318 // 锁定背景图
319 void onActionLockBackgroundPixmapTriggered(bool on);
320 // 跟随背景图
321 void onActionEnableItemMoveWithBackgroundTriggered(bool on);
322 // 允许移动图元时,其它和此图元链接起来的图元跟随移动
323 void onActionWorkflowEnableItemLinkageMoveTriggered(bool on);
324 // 分组
325 void onActionItemGroupingTriggered();
326 // 取消分组
327 void onActionItemUngroupTriggered();
328
330 // 导出png
331 void onActionExportWorkflowScenePNGTriggered();
332 // 锁定视图
333 void onActionWorkflowViewReadOnlyTriggered(bool on);
335 // 运行
336 void onActionRunCurrentWorkflowTriggered();
337 // 终止
338 void onActionTerminateCurrentWorkflowTriggered();
339 //===================================================
340 // 其他
341 //===================================================
342 // 主题切换
343 void onActionGroupRibbonThemeTriggered(QAction* a);
344private slots:
345 //===================================================
346 // DAWorkFlowOperateWidget的槽
347 //===================================================
348 void onWorkflowSceneSelectionItemChanged(QGraphicsItem* lastSelectItem);
349 void onWorkflowStartExecute(DA::DAWorkFlowEditWidget* wfw);
350 void onWorkflowFinished(DA::DAWorkFlowEditWidget* wfw, bool success);
351 void onWorkflowSceneitemsAdded(DA::DAGraphicsScene* sc, const QList< QGraphicsItem* >& its);
352 void onWorkflowSceneitemsRemoved(DA::DAGraphicsScene* sc, const QList< QGraphicsItem* >& its);
353 void onCurrentWorkflowWidgetChanged(DA::DAWorkFlowEditWidget* wfw);
354 //===================================================
355 // DAChartOperateWidget
356 //===================================================
357 // 绘图窗口有新窗口创建
358 void onFigureCreated(DA::DAFigureWidget* f);
359 // 绘图窗口当前窗口改变
360 void onCurrentFigureChanged(DA::DAFigureWidget* f, int index);
361 // 图表有新窗口创建
362 void onChartAdded(DA::DAChartWidget* c);
363 // 当前图表窗口改变
364 void onCurrentChartChanged(DA::DAChartWidget* c);
365 //===================================================
366 // project
367 //===================================================
368 void onProjectSaved(const QString& path);
369 void onProjectLoaded(const QString& path);
370
371 //===================================================
372 // DADataOperatePageWidget数据操作相关
373 //===================================================
374 // 数据操作窗口添加,需要绑定相关信号槽到ribbon的页面
375 void onDataOperatePageCreated(DA::DADataOperatePageWidget* page);
376 //==========================================
377 // Qt-Advanced-Docking-System
378 //===================================================
379 // DockWidget的焦点变化
380 void onFocusedDockWidgetChanged(ads::CDockWidget* old, ads::CDockWidget* now);
381
382 //===================================================
383 // DADataManageWidget
384 //===================================================
385
386 // 一些界面的联动槽在此
387
388 //===================================================
389 // DAWorkFlowGraphicsScene
390 //===================================================
391 // 鼠标动作结束
392 void onWorkFlowGraphicsSceneActionDeactive(DA::DAAbstractGraphicsSceneAction* scAction);
393 // 工作流页面创建槽
394 void onWorkflowCreated(DA::DAWorkFlowEditWidget* wfw);
395
396 //===================================================
397 // 其它
398 //===================================================
399 void onRecentFileSelected(const QString& filePath);
400 // 绘图元素选中,信号由DAChartManageWidget发出
401 void onFigureElementClicked(const DAFigureElementSelection& selection);
402 void onFigureElementDbClicked(const DAFigureElementSelection& selection);
403
404private:
405 // 初始化信号槽
406 void initConnection();
407#if DA_ENABLE_PYTHON
408 // 初始化脚本信息
409 void initScripts();
410#endif
411
412private:
413 AppMainWindow* mMainWindow { nullptr };
414 DAAppCore* mCore { nullptr };
415 DAProjectInterface* mProject { nullptr };
416 DAAppRibbonArea* mRibbon { nullptr };
417 DAAppDockingArea* mDock { nullptr };
418 DAAppCommand* mCommand { nullptr };
419 DAAppActions* mActions { nullptr };
420 DAAppDataManager* mDatas { nullptr };
421
422 QStringList mFileReadFilters;
423 //
424 LastFocusedOpertateWidgets mLastFocusedOpertateWidget;
425 //
426 DAAppSettingDialog* mSettingDialog { nullptr };
427 DAAppConfig* mConfig;
428};
429}
430
431#endif // DAAPPCONTROLLER_H
Definition AppMainWindow.h:28
这是一个scene的动作,DAGraphicsScene支持持有一个动作,这个动作可以捕获scene的所有界面事件
Definition DAAbstractGraphicsSceneAction.h:22
action管理
Definition DAAppActions.h:13
DAChartOperateWidget的app特化
Definition DAAppChartOperateWidget.h:18
App的命令管理
Definition DAAppCommand.h:17
此类为本程序的设置类
Definition DAAppConfig.h:27
控制层负责逻辑的对接
Definition DAAppController.h:54
void open()
打开文件
Definition DAAppController.cpp:897
LastFocusedOpertateWidget
针对Operate窗口的最后焦点枚举,用于识别最后用户所在的操作窗口
Definition DAAppController.h:61
@ LastFocusedOnDataOpt
最后焦点在数据操作窗口
Definition DAAppController.h:64
@ LastFocusedOnChartOpt
最后焦点在绘图操作窗口
Definition DAAppController.h:65
@ LastFocusedOnWorkflowOpt
最后焦点在工作流操作窗口
Definition DAAppController.h:63
void initialize()
控制层初始化
Definition DAAppController.cpp:196
DAAppController & setAppDockingArea(DAAppDockingArea *dock)
设置dock
Definition DAAppController.cpp:144
DADataOperateWidget * getDataOperateWidget() const
获取数据操作窗口
Definition DAAppController.cpp:561
DADataManageWidget * getDataManageWidget() const
获取数据管理窗口
Definition DAAppController.cpp:579
bool isDirty() const
工程是否为脏
Definition DAAppController.cpp:420
void updateWindowTitle()
更新窗口标题
Definition DAAppController.cpp:447
static QString makeWindowTitle()
生成窗口标题
Definition DAAppController.cpp:461
AppMainWindow * app() const
获取app
Definition DAAppController.cpp:188
DAWorkFlowOperateWidget * getWorkFlowOperateWidget() const
获取工作流操作窗口
Definition DAAppController.cpp:552
DAAppController & setAppMainWindow(AppMainWindow *mainWindow)
设置AppMainWindow
Definition DAAppController.cpp:111
DAAppController & setAppCore(DAAppCore *core)
设置core
Definition DAAppController.cpp:122
bool openProjectFile(const QString &projectFilePath)
打开工程文件
Definition DAAppController.cpp:925
DAFigureWidget * getCurrentFigure()
获取当前的绘图
Definition DAAppController.cpp:587
DAAppController & setAppCommand(DAAppCommand *cmd)
设置AppCommand
Definition DAAppController.cpp:156
DAAppChartOperateWidget * getChartOperateWidget() const
获取绘图操作窗口
Definition DAAppController.cpp:570
QList< DAChartWidget * > getAllCharts() const
获取当前的所有图表
Definition DAAppController.cpp:610
QList< DAChartWidget * > needOperateCharts() const
获取需要操作的绘图
Definition DAAppController.cpp:640
DADataOperateOfDataFrameWidget * getCurrentDataFrameOperateWidget(bool checkDataOperateAreaFocused=true, bool isShowMessage=true)
获取当前dataframeOperateWidget,如果没有返回nullptr
Definition DAAppController.cpp:530
bool isLastFocusedOnChartOptWidget() const
判断当前是否是在绘图操作模式,就算绘图操作不在焦点,但绘图操作在前端,此函数也返回true
Definition DAAppController.cpp:669
DAAppController & setAppRibbonArea(DAAppRibbonArea *ribbon)
设置ribbon
Definition DAAppController.cpp:133
DAAppController & setAppDataManager(DAAppDataManager *d)
设置AppDataManager
Definition DAAppController.cpp:178
bool applyToCharts(const FpChartWidgetApply &fp)
给当前绘图应用方法
Definition DAAppController.cpp:625
void saveAs()
另存为
Definition DAAppController.cpp:493
DASettingContainerWidget * getSettingContainerWidget() const
获取设置窗口
Definition DAAppController.cpp:660
DAChartWidget * getCurrentChart() const
获取当前的图表
Definition DAAppController.cpp:601
bool importData(const QString &filePath, const QVariantMap &args, QString *err=nullptr)
导入数据
Definition DAAppController.cpp:434
void setDirty(bool on=true)
设置工程为脏
Definition DAAppController.cpp:409
std::function< bool(DAChartWidget *) > FpChartWidgetApply
批量应用绘图的函数指针
Definition DAAppController.h:74
bool isLastFocusedOnWorkflowOptWidget() const
判断当前是否是在工作流操作模式,就算工作流操作不在焦点,但工作流操作在前端,此函数也返回true
Definition DAAppController.cpp:678
bool isApplyToAllCharts() const
是否应用到所有绘图
Definition DAAppController.cpp:479
bool isLastFocusedOnDataOptWidget() const
判断当前是否是在数据操作模式,就算数据操作不在焦点,但工作流操作在前端,此函数也返回true
Definition DAAppController.cpp:687
DAAppController & setAppActions(DAAppActions *act)
设置AppActions
Definition DAAppController.cpp:167
DA的核心接口,作为单例存在
Definition DAAppCore.h:16
DA的变量管理类,da的变量统一由此类管理
Definition DAAppDataManager.h:19
负责docking窗口区域的管理,APP分两大区域-RibbonArea和DockArea DockArea包含所有的窗口
Definition DAAppDockingArea.h:43
App的Ribbon区域接口,负责ribbon层的管理和调度
Definition DAAppRibbonArea.h:118
增强的Qwt图表控件,提供完整的数据绘图、样式设置和交互控制功能
Definition DAChartWidget.h:40
数据管理窗口
Definition DADataManageWidget.h:22
针对DataFrame的操作窗口
Definition DADataOperateOfDataFrameWidget.h:34
数据操作的基类窗口,所有数据操作页面继承此窗口方便管理
Definition DADataOperatePageWidget.h:12
数据操作窗口,负责数据区域操作
Definition DADataOperateWidget.h:24
用于存放绘图元素
Definition DAFigureElementSelection.h:19
绘图窗口
Definition DAFigureWidget.h:35
这是带着undostack的GraphicsScene 此QGraphicsScene支持:
Definition DAGraphicsScene.h:30
负责总体工程的接口
Definition DAProjectInterface.h:21
对numpy.dtype的封装
Definition DAPyDType.h:37
这是一个类似QStackedWidget的窗体,只内部有一个scallview
Definition DASettingContainerWidget.h:15
工作流绘图窗口
Definition DAWorkFlowEditWidget.h:29
工作流绘图建模窗口
Definition DAWorkFlowOperateWidget.h:26
序列化类都是带异常的,使用中需要处理异常
Definition AppMainWindow.cpp:44