20struct BeginInterstrokeDataTransactionCommand :
public KUndo2Command
24 m_interstrokeData(newData)
28 void redo()
override {
30 if (m_device->interstrokeData() != m_interstrokeData) {
31 m_dataSwapCommand.reset(m_device->createChangeInterstrokeDataCommand(m_interstrokeData));
32 m_dataSwapCommand->redo();
35 if (m_interstrokeData) {
36 m_interstrokeData->beginTransaction();
40 }
else if (m_dataSwapCommand) {
41 m_dataSwapCommand->redo();
46 void undo()
override {
47 if (m_dataSwapCommand) {
48 m_dataSwapCommand->undo();
53 bool m_firstRedo {
true};
56 QScopedPointer<KUndo2Command> m_dataSwapCommand;
59struct EndInterstrokeDataTransactionCommand :
public KUndo2Command
66 void redo()
override {
69 if (!m_transactionCommand && data) {
70 m_transactionCommand.reset(data->endTransaction());
73 if (m_transactionCommand) {
74 m_transactionCommand->redo();
78 void undo()
override {
79 if (m_transactionCommand) {
80 m_transactionCommand->undo();
86 QScopedPointer<KUndo2Command> m_transactionCommand;
94 QScopedPointer<KisInterstrokeDataFactory>
factory;
102 m_d->factory.reset(factory);
103 m_d->supportsContinuedInterstrokeData = supportsContinuedInterstrokeData;
114 if (!
m_d->supportsContinuedInterstrokeData ||
116 !data->isStillCompatible() ||
117 !
m_d->factory->isCompatible(data.data())) {
128 m_d->device = device;
129 cmd =
new BeginInterstrokeDataTransactionCommand(device, data);
140 if (
m_d->supportsContinuedInterstrokeData) {
141 result =
new EndInterstrokeDataTransactionCommand(
m_d->device);
146 composite->
addCommand(
new EndInterstrokeDataTransactionCommand(
m_d->device));
147 composite->
addCommand(
new BeginInterstrokeDataTransactionCommand(
m_d->device, 0));
KUndo2Command * createEndTransactionCommand() override
QScopedPointer< Private > m_d
KUndo2Command * createBeginTransactionCommand(KisPaintDeviceSP device) override
KisInterstrokeDataTransactionWrapperFactory(KisInterstrokeDataFactory *factory, bool supportsContinuedInterstrokeData=true)
~KisInterstrokeDataTransactionWrapperFactory() override
KisInterstrokeDataSP interstrokeData() const
QSharedPointer< T > toQShared(T *ptr)
QAction * redo(const QObject *recvr, const char *slot, QObject *parent)
QAction * undo(const QObject *recvr, const char *slot, QObject *parent)
void addCommand(KUndo2Command *cmd)
bool supportsContinuedInterstrokeData
QScopedPointer< KisInterstrokeDataFactory > factory