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