Enlightenment CVS committal

Author  : pfritz
Project : e17
Module  : apps/elitaire

Dir     : e17/apps/elitaire/src


Modified Files:
        Elitaire.h Rules.h edje_frontend_gui.cpp elitaire.cpp 
        elitaire_card.cpp elitaire_card.h elitaire_private.cpp 
        elitaire_private.h rules.cpp 


Log Message:
now elitaire can give you some hints which cards can be moved to another stack

===================================================================
RCS file: /cvs/e/e17/apps/elitaire/src/Elitaire.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- Elitaire.h  8 Jun 2007 17:32:49 -0000       1.1
+++ Elitaire.h  9 Aug 2007 21:45:49 -0000       1.2
@@ -39,6 +39,9 @@
 void          elitaire_object_restart              (Evas_Object * elitaire);
 Evas_Bool     elitaire_object_giveup               (Evas_Object * elitaire);
 void          elitaire_object_pause                (Evas_Object * elitaire);
+void          elitaire_object_hints_show           (Evas_Object * elitaire);
+void          elitaire_object_hints_hide           (Evas_Object * elitaire);
+Evas_Bool     elitaire_object_hints_visible        (Evas_Object * elitaire);
 void          elitaire_object_offset_set           (Evas_Object * elitaire, 
Evas_Coord l, Evas_Coord r, Evas_Coord t, Evas_Coord b);
 void          elitaire_object_offset_get           (Evas_Object * elitaire, 
Evas_Coord * l, Evas_Coord * r, Evas_Coord * t, Evas_Coord * b);
 
===================================================================
RCS file: /cvs/e/e17/apps/elitaire/src/Rules.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- Rules.h     8 Jun 2007 17:32:49 -0000       1.1
+++ Rules.h     9 Aug 2007 21:45:49 -0000       1.2
@@ -561,6 +561,7 @@
        
        bool undo();
        void restart();
+       vector<playingCard*> * getHints();
 };
 
 #include "rulesFreeCell.h"
===================================================================
RCS file: /cvs/e/e17/apps/elitaire/src/edje_frontend_gui.cpp,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -3 -r1.10 -r1.11
--- edje_frontend_gui.cpp       4 Aug 2007 00:43:18 -0000       1.10
+++ edje_frontend_gui.cpp       9 Aug 2007 21:45:49 -0000       1.11
@@ -27,6 +27,8 @@
                           const char * emission, const char * source);
 static void _restart_cb(void * data, Evas_Object * o, 
                           const char * emission, const char * source);
+static void _hints_cb(void * data, Evas_Object * o, 
+                          const char * emission, const char * source);
 static void _elitaire_scroll_stop_cb(void * data, Evas_Object * o,
                           const char * emission, const char * source);
 static void _elitaire_scroll_left_start_cb(void * data, Evas_Object * o,
@@ -195,6 +197,7 @@
                                         eef);
         edje_object_signal_callback_add(eef->gui, "new_game", "*",
                                         _eli_edje_frontend_new_game_cb, eap);
+        edje_object_signal_callback_add(eef->gui, "hints", "*", _hints_cb, 
eef);
         evas_object_event_callback_add(eef->gui, EVAS_CALLBACK_KEY_DOWN,
                                        _key_down_cb, eap);
         evas_object_event_callback_add(eef->gui, EVAS_CALLBACK_KEY_UP,
@@ -515,6 +518,20 @@
 
     if (!eef) return;
     if (eef->elitaire) elitaire_object_restart(eef->elitaire);
+}
+
+static void _hints_cb(void * data, Evas_Object * o, const char * emission,
+                 const char * source)
+{
+    Eli_Edje_Frontend * eef;
+
+    eef = (Eli_Edje_Frontend *) data;
+
+    if (!eef && !eef->elitaire) return;
+    if (elitaire_object_hints_visible(eef->elitaire)) 
+        elitaire_object_hints_hide(eef->elitaire);
+    else
+        elitaire_object_hints_show(eef->elitaire);
 }
 
 static void _elitaire_scroll_stop_cb(void * data, Evas_Object * o,
===================================================================
RCS file: /cvs/e/e17/apps/elitaire/src/elitaire.cpp,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- elitaire.cpp        4 Aug 2007 14:00:29 -0000       1.2
+++ elitaire.cpp        9 Aug 2007 21:45:49 -0000       1.3
@@ -308,6 +308,59 @@
     }
 }
 
+/*
+ * Highlight the cards that are moveable
+ */
+void elitaire_object_hints_show(Evas_Object * elitaire)
+{
+    Elitaire * eli;
+    card_iterator it, it_end;
+    vector<playingCard*> * hints;
+
+    eli = (Elitaire *) evas_object_smart_data_get(elitaire);
+    if (!eli) return;
+
+    hints = eli->game->getHints();
+    
+    it = hints->begin();
+    it_end = hints->end();
+
+    while (it != it_end) {
+        Evas_Object * card;
+        
+        card = (Evas_Object *) (*it)->data;
+        elitaire_card_hint_highlight_show(card);
+        it++;
+    }
+
+    eli->hints_on = true;
+    delete hints;
+}
+
+/*
+ * Unhighlight the cards that are moveable
+ */
+void elitaire_object_hints_hide(Evas_Object * elitaire)
+{
+    Elitaire * eli;
+    
+    eli = (Elitaire *) evas_object_smart_data_get(elitaire);
+    elitaire_hints_hide(eli);
+}
+
+/*
+ * return if the highlights are visible
+ */
+Evas_Bool elitaire_object_hints_visible(Evas_Object * elitaire)
+{
+    Elitaire * eli;
+
+    eli = (Elitaire *) evas_object_smart_data_get(elitaire);
+    if (!eli) return false;
+    
+    return eli->hints_on;
+}
+
 void elitaire_object_size_min_get(Evas_Object * elitaire, Evas_Coord * minw,
                            Evas_Coord * minh)
 {
@@ -529,6 +582,7 @@
 
     eli = (Elitaire *) evas_object_smart_data_get(elitaire);
     if (eli) {
+        elitaire_hints_hide(eli);
         eli->game->undo();
     }
 }
@@ -539,6 +593,7 @@
 
     eli = (Elitaire *) evas_object_smart_data_get(elitaire);
     if (eli) {
+        elitaire_hints_hide(eli);
         eli->game->restart();
     }
 }
@@ -549,6 +604,7 @@
 
     eli = (Elitaire *) evas_object_smart_data_get(elitaire);
     if (eli) {
+        elitaire_hints_hide(eli);
         return eli->game->giveUp();
     }
     return false;
===================================================================
RCS file: /cvs/e/e17/apps/elitaire/src/elitaire_card.cpp,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -3 -r1.3 -r1.4
--- elitaire_card.cpp   4 Aug 2007 14:00:29 -0000       1.3
+++ elitaire_card.cpp   9 Aug 2007 21:45:49 -0000       1.4
@@ -132,6 +132,26 @@
     return 0;
 }
 
+void elitaire_card_hint_highlight_show(Evas_Object * card)
+{
+    Elitaire_Card * data;
+
+    printf("card show hilite");
+    data = (Elitaire_Card *) evas_object_smart_data_get(card);
+    if (!data) return;
+        
+    edje_object_signal_emit(data->image, "hint,on", "elitaire");
+}
+
+void elitaire_card_hint_highlight_hide(Evas_Object * card)
+{
+    Elitaire_Card * data;
+
+    data = (Elitaire_Card *) evas_object_smart_data_get(card);
+    if (!data) return;
+        
+    edje_object_signal_emit(data->image, "hint,off", "elitaire");
+}
 
 Elitaire * elitaire_card_elitaire_get(Evas_Object * card)
 {
===================================================================
RCS file: /cvs/e/e17/apps/elitaire/src/elitaire_card.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- elitaire_card.h     4 Aug 2007 00:43:18 -0000       1.2
+++ elitaire_card.h     9 Aug 2007 21:45:49 -0000       1.3
@@ -23,6 +23,8 @@
 void          elitaire_card_callback_del      (Evas_Object * card, 
Evas_Callback_Type type, 
                               void(*func)(void *data, Evas *e, Evas_Object 
*obj, void *event_info));
 Evas_Bool        elitaire_card_moveable          (Evas_Object * card);
+void          elitaire_card_hint_highlight_show(Evas_Object * card);
+void          elitaire_card_hint_highlight_hide(Evas_Object * card);
 Elitaire    * elitaire_card_elitaire_get      (Evas_Object * card);
 void          elitaire_card_chain_make        (Evas_Object * card);
 void          elitaire_card_chain_del         (Evas_Object * card);
===================================================================
RCS file: /cvs/e/e17/apps/elitaire/src/elitaire_private.cpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- elitaire_private.cpp        8 Jun 2007 17:32:49 -0000       1.1
+++ elitaire_private.cpp        9 Aug 2007 21:45:49 -0000       1.2
@@ -133,6 +133,35 @@
     }
 }
 
+/*
+ * hide the hints higlights
+ * this function is private
+ */
+void elitaire_hints_hide(Elitaire * eli)
+{
+    int i;
+    Evas_Object * card;
+    card_iterator it, it_end;
+    int num_decks;
+
+    if (!eli || !eli->hints_on) return;
+
+    eli->hints_on = false;
+    num_decks = eli->game->getNumDecks();
+
+    for (i = 0; i < num_decks; i++) {
+        it = eli->game->getDeckBegin(i);
+        it_end = eli->game->getDeckEnd(i);
+
+        while (it != it_end) {
+            card = (Evas_Object *) (*it)->data;
+            elitaire_card_hint_highlight_hide(card);
+            it++;
+        }
+    }
+}
+
+
 /* calculate  the longest line */
 int elitaire_cols_max_calc(Elitaire * eli)
 {                               
@@ -471,9 +500,14 @@
     ev = (Evas_Event_Mouse_Down *) event_info;
     
     if (card) {
+        Elitaire *eli;
+
+        eli = elitaire_card_elitaire_get(card);
+
         if (ev->button == 1 && elitaire_card_moveable(card)) {
             elitaire_card_chain_make(card);
             elitaire_card_dragged(card);
+            elitaire_hints_hide(eli);
         }
         else if (ev->button == 2) {
             Evas_Object * next_card;
@@ -505,9 +539,11 @@
         switch (ev->button) {
         case 1:
             eli->game->clickOn(elitaire_card_playingCard_get(card));
+            elitaire_hints_hide(eli);
             break;
         case 3:
             eli->game->rightClickOn(elitaire_card_playingCard_get(card));
+            elitaire_hints_hide(eli);
             break;
         }
     }
===================================================================
RCS file: /cvs/e/e17/apps/elitaire/src/elitaire_private.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- elitaire_private.h  8 Jun 2007 17:32:49 -0000       1.1
+++ elitaire_private.h  9 Aug 2007 21:45:49 -0000       1.2
@@ -23,6 +23,7 @@
        Evas_Bool   deal;
        Evas_Bool   animate;
        Evas_Bool   shadow;
+       Evas_Bool   hints_on;
        
        Evas_Coord  card_w, card_h;
        Evas_Coord  card_max_w,card_max_h;
@@ -39,6 +40,7 @@
 void         elitaire_stack_layer_reinit (Elitaire * eli, playingCard * pcard);
 int          elitaire_clicked_stack_get  (Elitaire * eli, Evas_Coord x, 
Evas_Coord y);
 void         elitaire_stacks_reinit      (Elitaire * eli);
+void         elitaire_hints_hide         (Elitaire * eli);
 Evas_Coord   elitaire_card_offset_get    (Elitaire * eli);
 Evas_Coord   elitaire_card_offset_calc   (Elitaire * eli,Evas_Coord h);
 Evas_Coord   elitaire_spacing_abs_calc   (Elitaire * eli, int row);
===================================================================
RCS file: /cvs/e/e17/apps/elitaire/src/rules.cpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- rules.cpp   8 Jun 2007 17:32:49 -0000       1.1
+++ rules.cpp   9 Aug 2007 21:45:49 -0000       1.2
@@ -226,6 +226,32 @@
     deal();
 }
 
+vector<playingCard*> * cardGame::getHints()
+{
+    vector<playingCard*> * hints = new vector<playingCard*>;
+
+    /* search in every stack if a card is moveable to every stack excluding
+     * to itself */
+    for (size_t from = 0; from < stacks.size(); from++) {
+        card_iterator it, it_end;
+
+        it = stacks[from]->begin();
+        it_end = stacks[from]->end();
+        
+        while (it != it_end) {
+            for (size_t to = 0; to < stacks.size(); to++) {
+                if (from != to && moveable(*it, to)) {
+                    hints->push_back(*it);
+                    break;
+                }
+            }
+            it++;
+        }
+    }
+
+    return hints;
+}
+
 
 /* Klondike ******************************************************************/
 klondike::klondike(bool thoughtful):isThoughtful(thoughtful)



-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >>  http://get.splunk.com/
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to