new 4475edb243ed4627f4c5f2c470ca40b3def034d4
[tagua/yd.git] / src / controllers / editposition.h
blob5d8b5a48175a500bc82d5fc645c6d49ffd879409
1 /*
2 Copyright (c) 2006 Paolo Capriotti <p.capriotti@gmail.com>
3 (c) 2006 Maurizio Monge <maurizio.monge@kdemail.net>
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version.
9 */
11 #ifndef EDITPOSITIONCONTROLLER_H
12 #define EDITPOSITIONCONTROLLER_H
14 #include "abstract.h"
15 #include <core/point.h>
16 #include <vector>
17 #include <boost/variant.hpp>
19 #if 0
20 //BROKEN
21 class VariantInfo;
22 class GraphicalInfo;
23 class EditPositionEntity;
25 //BEGIN UndoAction
27 class DropAction {
28 public:
29 Point m_to;
30 AbstractPiece::Ptr m_piece;
31 DropAction(const Point& to, AbstractPiece::Ptr piece)
32 : m_to(to)
33 , m_piece(piece) { }
36 class RemoveAction {
37 public:
38 Point m_to;
39 AbstractPiece::Ptr m_piece;
40 RemoveAction(const Point& to, AbstractPiece::Ptr piece)
41 : m_to(to)
42 , m_piece(piece) { }
45 class MoveAction {
46 public:
47 Point m_from;
48 Point m_to;
49 AbstractPiece::Ptr m_piece;
50 MoveAction(const Point& from, const Point& to, AbstractPiece::Ptr piece)
51 : m_from(from)
52 , m_to(to)
53 , m_piece(piece) { }
56 class WarpAction {
57 public:
58 AbstractPosition::Ptr m_from;
59 AbstractPosition::Ptr m_to;
60 WarpAction(AbstractPosition::Ptr from, AbstractPosition::Ptr to)
61 : m_from(from)
62 , m_to(to) { }
65 typedef boost::variant<DropAction, RemoveAction, MoveAction, WarpAction> UndoAction;
67 class UndoHistory {
68 typedef std::vector<UndoAction> Vector;
69 Vector m_history;
70 uint m_index;
71 public:
72 UndoHistory();
73 void add(const UndoAction& action);
74 const UndoAction* undo();
75 const UndoAction* redo();
78 //END UndoAction
80 class EditPositionController : public Controller {
81 boost::shared_ptr<GraphicalInfo> m_graphical;
82 boost::shared_ptr<EditPositionEntity> m_entity;
83 UndoHistory m_undo_history;
84 VariantInfo* m_variant;
85 protected:
86 virtual boost::shared_ptr<UserEntity> entity() const;
87 public:
88 EditPositionController(ChessTable* view, VariantInfo* variant);
89 virtual boost::shared_ptr<Controller> end() { return shared_from_this(); }
90 virtual bool clearBoard();
91 virtual bool setStartingPosition();
92 virtual bool setFEN(const QString&);
93 virtual QString fen();
95 virtual void setPromotionType(int) { }
97 virtual void setTurn(int);
99 virtual void handleMoveList(const class PGN&) { }
100 virtual QString save() { return ""; }
101 virtual void loadPGN(const PGN&) { }
103 virtual AbstractPosition::Ptr currentPosition() const;
106 #endif
108 #endif // EDITPOSITIONCONTROLLER_H