File indexing completed on 2024-05-05 04:02:56

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