[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    =?utf-8?q?=5Bknights=5D_src=3A_Add_D-Bus_adaptor_to_enable_exter?=
From:       Miha Čančula <miha.cancula () gmail ! com>
Date:       2011-03-24 14:11:15
Message-ID: 20110324141115.6C93EA60B9 () git ! kde ! org
[Download RAW message or body]

Git commit b1ab725527f05c0584a24537c5ddded985f8eb45 by Miha Čančula.
Committed on 24/03/2011 at 14:24.
Pushed by mihac into branch 'master'.

Add D-Bus adaptor to enable external control.

M  +12   -5    src/CMakeLists.txt     
M  +2    -1    src/core/piece.h     
M  +28   -1    src/gamemanager.cpp     
M  +2    -0    src/gamemanager.h     
M  +6    -0    src/rules/chessrules.cpp     

http://commits.kde.org/knights/b1ab725527f05c0584a24537c5ddded985f8eb45

diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index fff01fe..365e36d 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -1,4 +1,4 @@
-set(knights_SRCS offerwidget.cpp gamemanager.cpp proto/textprotocol.cpp
+set(knights_SRCS
     core/pos.cpp
     core/move.cpp
     core/renderer.cpp
@@ -7,19 +7,25 @@ set(knights_SRCS offerwidget.cpp gamemanager.cpp \
proto/textprotocol.cpp  
     proto/protocol.cpp
     proto/localprotocol.cpp
+    proto/textprotocol.cpp
     proto/xboardproto.cpp
     proto/ficsprotocol.cpp
-    proto/ficsdialog.cpp
+    
     proto/seekgraph.cpp
     proto/chatwidget.cpp
-   
-
+    proto/ficsdialog.cpp
+    
     rules/chessrules.cpp
 
     gamedialog.cpp
-    board.cpp
+    offerwidget.cpp
     clock.cpp
     clockwidget.cpp
+    
+    externalcontrol.cpp
+    gamemanager.cpp
+    
+    board.cpp
     knightsview.cpp
     knights.cpp
     main.cpp
@@ -53,6 +59,7 @@ kde4_add_ui_files(knights_SRCS
 )
 kde4_add_kcfg_files(knights_SRCS settings.kcfgc )
 qt4_add_dbus_interfaces(knights_SRCS \
${KDE4_DBUS_INTERFACES_DIR}/org.kde.KSpeech.xml) +qt4_add_dbus_adaptor(knights_SRCS \
org.kde.Knights.xml externalcontrol.h Knights::ExternalControl)  \
kde4_add_executable(knights ${knights_SRCS})  
 target_link_libraries(knights ${KDE4_KDEUI_LIBS} ${KDE4_KPARTS_LIBS} \
                ${KDE4_PLASMA_LIBS} ${KDEGAMES_LIBRARY} ${QT_QTNETWORK_LIBRARY})
diff --git a/src/core/piece.h b/src/core/piece.h
index 10ffee3..3be1f30 100644
--- a/src/core/piece.h
+++ b/src/core/piece.h
@@ -35,7 +35,8 @@ namespace Knights
         Bishop,
         Knight,
         Rook,
-        Pawn
+        Pawn,
+        PieceTypeCount
     };
     enum Color
     {
diff --git a/src/gamemanager.cpp b/src/gamemanager.cpp
index aa2b41b..20da286 100644
--- a/src/gamemanager.cpp
+++ b/src/gamemanager.cpp
@@ -34,6 +34,7 @@
 
 #include <KSpeech>
 #include "kspeechinterface.h"
+#include "externalcontrol.h"
 
 using namespace Knights;
 
@@ -69,6 +70,7 @@ public:
   QMap<int, Offer> offers;
   
   org::kde::KSpeech* speech;
+  ExternalControl* extControl;
 };
 
 GameManagerPrivate::GameManagerPrivate()
@@ -77,7 +79,8 @@ GameManagerPrivate::GameManagerPrivate()
     gameStarted(false),
     timer(0),
     rules(0),
-    speech(0)
+    speech(0),
+    extControl(0)
 {
 
 }
@@ -289,6 +292,7 @@ void Manager::initialize()
   connect ( Protocol::black(), SIGNAL(gameOver(Color)), SLOT(gameOver(Color)) );
   Protocol::white()->init();
   Protocol::black()->init();
+  d->extControl = new ExternalControl(this);
 }
 
 void Manager::setTimeControl(Color color, const TimeControl& control)
@@ -465,6 +469,7 @@ void Manager::reset()
   d->moveHistory.clear();
   d->moveUndoStack.clear();
   d->gameStarted = false;
+  delete d->extControl;
 }
 
 Rules* Manager::rules() const
@@ -479,6 +484,16 @@ void Manager::setRules(Rules* rules)
   d->rules = rules;
 }
 
+void Manager::sendOffer(GameAction action, Color player, int id)
+{
+    Offer o;
+    o.action = action;
+    o.player = player;
+    o.id = id;
+    sendOffer(o);
+}
+
+
 void Manager::sendOffer(const Offer& offer)
 {
   Q_D(GameManager);
@@ -704,8 +719,20 @@ void Manager::moveByBoard(const Move& move)
   processMove(move);
 }
 
+void Manager::moveByExternalControl(const Knights::Move& move)
+{
+    Q_D(GameManager);
+    if ( !Protocol::byColor(d->activePlayer)->isLocal() )
+    {
+        return;
+    }
+    processMove(move);
+}
+
+
 void Manager::processMove(const Move& move)
 {
+  sendPendingMove();
   Q_D(const GameManager);
   Move m = move;
   if ( activePlayer() == White )
diff --git a/src/gamemanager.h b/src/gamemanager.h
index 97a2f7a..f0c9755 100644
--- a/src/gamemanager.h
+++ b/src/gamemanager.h
@@ -141,10 +141,12 @@ signals:
 public slots:
   void moveByProtocol ( const Move& move );
   void moveByBoard ( const Move& move );
+  void moveByExternalControl ( const Move& move );
   void protocolInitSuccesful();
   void gameOver ( Color winner );
   void resign();
 
+  void sendOffer ( GameAction action, Color player, int id );
   void sendOffer ( const Offer& offer );
   void setOfferResult ( int id, OfferAction result );
   
diff --git a/src/rules/chessrules.cpp b/src/rules/chessrules.cpp
index d261b32..64025c7 100644
--- a/src/rules/chessrules.cpp
+++ b/src/rules/chessrules.cpp
@@ -448,6 +448,12 @@ void ChessRules::checkSpecialFlags ( Move* move, Color color )
         move->setFlag(Move::Illegal, true);
         return;
     }
+    if ( !legalMoves ( move->from() ).contains(*move) )
+    {
+        kWarning() << "Illegal move" << move;
+        move->setFlag(Move::Illegal, true);
+        return;
+    }
     move->setPieceData ( qMakePair( p->color(), p->pieceType() ) );
     move->setFlags ( move->flags() & ~(Move::Take | Move::Castle | Move::Check | \
Move::CheckMate | Move::EnPassant | Move::Promote) );  if ( m_grid->contains ( \
move->to() ) )


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic