Changed my email in the copyright statements.
[tagua/yd.git] / src / controllers / editposition.h
blob36b3d28be19f3222a01c572864b631812d96d933
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 "point.h"
16 #include "tagua.h"
17 #include <vector>
18 #include <boost/variant.hpp>
20 #if 0
21 //BROKEN
22 class VariantInfo;
23 class GraphicalInfo;
24 class EditPositionEntity;
26 //BEGIN UndoAction
28 class DropAction {
29 public:
30 Point m_to;
31 AbstractPiece::Ptr m_piece;
32 DropAction(const Point& to, AbstractPiece::Ptr piece)
33 : m_to(to)
34 , m_piece(piece) { }
37 class RemoveAction {
38 public:
39 Point m_to;
40 AbstractPiece::Ptr m_piece;
41 RemoveAction(const Point& to, AbstractPiece::Ptr piece)
42 : m_to(to)
43 , m_piece(piece) { }
46 class MoveAction {
47 public:
48 Point m_from;
49 Point m_to;
50 AbstractPiece::Ptr m_piece;
51 MoveAction(const Point& from, const Point& to, AbstractPiece::Ptr piece)
52 : m_from(from)
53 , m_to(to)
54 , m_piece(piece) { }
57 class WarpAction {
58 public:
59 AbstractPosition::Ptr m_from;
60 AbstractPosition::Ptr m_to;
61 WarpAction(AbstractPosition::Ptr from, AbstractPosition::Ptr to)
62 : m_from(from)
63 , m_to(to) { }
66 typedef boost::variant<DropAction, RemoveAction, MoveAction, WarpAction> UndoAction;
68 class UndoHistory {
69 typedef std::vector<UndoAction> Vector;
70 Vector m_history;
71 uint m_index;
72 public:
73 UndoHistory();
74 void add(const UndoAction& action);
75 const UndoAction* undo();
76 const UndoAction* redo();
79 //END UndoAction
81 class EditPositionController : public Controller {
82 boost::shared_ptr<GraphicalInfo> m_graphical;
83 boost::shared_ptr<EditPositionEntity> m_entity;
84 UndoHistory m_undo_history;
85 VariantInfo* m_variant;
86 protected:
87 virtual boost::shared_ptr<UserEntity> entity() const;
88 public:
89 EditPositionController(ChessTable* view, VariantInfo* variant);
90 virtual boost::shared_ptr<Controller> end() { return shared_from_this(); }
91 virtual bool clearBoard();
92 virtual bool setStartingPosition();
93 virtual bool setFEN(const QString&);
94 virtual QString fen();
96 virtual void setPromotionType(int) { }
98 virtual void setTurn(int);
100 virtual void handleMoveList(const class PGN&) { }
101 virtual QString save() { return ""; }
102 virtual void loadPGN(const PGN&) { }
104 virtual AbstractPosition::Ptr currentPosition() const;
107 #endif
109 #endif // EDITPOSITIONCONTROLLER_H