File indexing completed on 2025-04-20 03:46:17
0001 /* 0002 SPDX-FileCopyrightText: 2010 Ni Hui <shuizhuyuanluo@126.com> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #ifndef UNDO_H 0008 #define UNDO_H 0009 0010 #include <QPointF> 0011 #include <QUndoCommand> 0012 #include "piece.h" 0013 0014 const int ID_HIDEPIECE = 100; 0015 const int ID_SWAPPIECE = 200; 0016 0017 class HidePiece : public QUndoCommand 0018 { 0019 public: 0020 explicit HidePiece( Piece* piece ) : m_piece(piece) { 0021 setText( QStringLiteral( "Hide Piece" ) ); 0022 } 0023 int id() const override { 0024 return ID_HIDEPIECE; 0025 } 0026 void undo() override { 0027 m_piece->setEnabled( true ); 0028 m_piece->show(); 0029 } 0030 void redo() override { 0031 m_piece->setEnabled( false ); 0032 m_piece->hide(); 0033 } 0034 private: 0035 friend void GameScene::loadGame( const KConfigGroup& config ); 0036 friend void GameScene::saveGame( KConfigGroup& config ) const; 0037 Piece* m_piece; 0038 }; 0039 0040 class SwapPiece : public QUndoCommand 0041 { 0042 public: 0043 explicit SwapPiece( Piece** a, Piece** b, const QPointF& posA, const QPointF& posB ) 0044 : m_pieceA(a), m_pieceB(b), m_posA(posA), m_posB(posB) { 0045 setText( QStringLiteral( "Swap Piece" ) ); 0046 } 0047 int id() const override { 0048 return ID_SWAPPIECE; 0049 } 0050 void undo() override { 0051 redo(); 0052 } 0053 void redo() override { 0054 Piece* tmpA = *m_pieceA; 0055 Piece* tmpB = *m_pieceB; 0056 int tmpAX = tmpA->m_x; 0057 int tmpAY = tmpA->m_y; 0058 int tmpBX = tmpB->m_x; 0059 int tmpBY = tmpB->m_y; 0060 *m_pieceA = tmpB; 0061 (*m_pieceA)->m_x = tmpAX; 0062 (*m_pieceA)->m_y = tmpAY; 0063 *m_pieceB = tmpA; 0064 (*m_pieceB)->m_x = tmpBX; 0065 (*m_pieceB)->m_y = tmpBY; 0066 (*m_pieceA)->setPos( m_posA ); 0067 (*m_pieceB)->setPos( m_posB ); 0068 } 0069 private: 0070 Piece** m_pieceA; 0071 Piece** m_pieceB; 0072 const QPointF m_posA; 0073 const QPointF m_posB; 0074 }; 0075 0076 #endif // UNDO_H