DAWorkbench 0.0.1
DAWorkbench API
载入中...
搜索中...
未找到
DADataUndoCommand.h
1#ifndef DADATAUNDOCOMMAND_H
2#define DADATAUNDOCOMMAND_H
3#include <QUndoCommand>
4#include <functional>
5#include "DAData.h"
6#include "DAPybind11InQt.h"
7#include "DACallBackInterface.h"
8namespace DA
9{
10class DADATA_API DADataAbstractUndoCommand : public QUndoCommand, public DACallBackInterface
11{
12public:
13 DADataAbstractUndoCommand(QUndoCommand* par = nullptr);
15 // 设置旧对象
16 virtual void setOldData(const DAData& data) = 0;
17 // 设置新对象
18 virtual void setNewData(const DAData& data) = 0;
19 // 设置跳过第一次redo
20 void setSkipFirstRedo(bool skip = true);
21 // 是否跳过第一次
22 bool isSkipFirstRedo() const;
23 // 跳过第一次redo
24 void skipFirstRedo();
25
26private:
27 bool m_skipFirstRedo { true };
28};
29
46{
47public:
48 DADataObjectSwapUndoCommand(QUndoCommand* par = nullptr);
50 // 设置旧对象(立即 pickle 到临时文件)
51 void setOldData(const DAData& data) override;
52 // 设置新对象(把新对象也pickle到临时文件)
53 void setNewData(const DAData& data) override;
54 void undo() override;
55 void redo() override;
56
57protected:
58 DAData m_data;
59 pybind11::object m_oldObject;
60 pybind11::object m_newObject;
61};
62
83{
84public:
85 DADataObjectPersistUndoCommand(QUndoCommand* par = nullptr);
87 // 设置旧对象(立即 pickle 到临时文件)
88 void setOldData(const DAData& data) override;
89 // 设置新对象(把新对象也pickle到临时文件)
90 void setNewData(const DAData& data) override;
91 void undo() override;
92 void redo() override;
93 //
94 bool isValid() const;
95
96protected:
97 void dumpObj(const pybind11::object& obj, const QString& path);
98 pybind11::object loadObj(const QString& path);
99
100protected:
101 DAData m_data;
102 QString m_oldObjectPath;
103 QString m_newObjectPath;
104 bool m_isValid { false };
105};
106}
107
108#endif // DAPYOBJECTUNDOCOMMAND_H
Definition DACallBackInterface.h:9
Definition DADataUndoCommand.h:11
文件缓存命令,此命令适合非常大的dataframe,以及前后对象是一样的场景
Definition DADataUndoCommand.h:83
基于py::object的缓存命令
Definition DADataUndoCommand.h:46
DAAbstractData的封装 可以放入QMap,QHash中,DAData的等于操作相当于创建一个引用
Definition DAData.h:25
序列化类都是带异常的,使用中需要处理异常
Definition AppMainWindow.cpp:44