[gnome-nibbles/arnaudb/modernize-code: 45/58] Use GAction for number of players.



commit b50ea8494dc260c9f558f1498bb5f5eea2ed57e1
Author: Arnaud Bonatti <arnaud bonatti gmail com>
Date:   Sun May 31 21:07:49 2020 +0200

    Use GAction for number of players.

 data/nibbles.css        |  4 +++
 data/nibbles.ui         | 13 +++++++-
 src/nibbles-window.vala | 81 ++++++++-----------------------------------------
 3 files changed, 29 insertions(+), 69 deletions(-)
---
diff --git a/data/nibbles.css b/data/nibbles.css
index 3591183..0cc9a22 100644
--- a/data/nibbles.css
+++ b/data/nibbles.css
@@ -17,6 +17,10 @@
   font-family: Sans;
   padding: 1px 38px;
   background-image: linear-gradient(to bottom, #3e4444);
+  color:@theme-fg-color;
+}
+.number-box:disabled {
+  color:@theme-fg-color;
 }
 .number-box:hover {
   background-image: linear-gradient(to bottom, rgba(60, 69, 71, 0.8));
diff --git a/data/nibbles.ui b/data/nibbles.ui
index 033ec48..3d9ba4a 100644
--- a/data/nibbles.ui
+++ b/data/nibbles.ui
@@ -213,7 +213,9 @@
                                     <property name="visible">True</property>
                                     <property name="use-underline">True</property>
                                     <property name="label">_1</property>
-                                    <property name="active">True</property>
+                                    <property name="action-name">win.change-humans-number</property>
+                                    <property name="action-target">@i 1</property>
+                                    <property name="sensitive" bind-source="players1" bind-property="active" 
bind-flags="invert-boolean"/>
                                     <style>
                                       <class name="number-box"/>
                                     </style>
@@ -227,6 +229,9 @@
                                     <property name="visible">True</property>
                                     <property name="use-underline">True</property>
                                     <property name="label">_2</property>
+                                    <property name="action-name">win.change-humans-number</property>
+                                    <property name="action-target">@i 2</property>
+                                    <property name="sensitive" bind-source="players2" bind-property="active" 
bind-flags="invert-boolean"/>
                                     <style>
                                       <class name="number-box"/>
                                     </style>
@@ -240,6 +245,9 @@
                                     <property name="visible">True</property>
                                     <property name="use-underline">True</property>
                                     <property name="label">_3</property>
+                                    <property name="action-name">win.change-humans-number</property>
+                                    <property name="action-target">@i 3</property>
+                                    <property name="sensitive" bind-source="players3" bind-property="active" 
bind-flags="invert-boolean"/>
                                     <style>
                                       <class name="number-box"/>
                                     </style>
@@ -253,6 +261,9 @@
                                     <property name="visible">True</property>
                                     <property name="use-underline">True</property>
                                     <property name="label">_4</property>
+                                    <property name="action-name">win.change-humans-number</property>
+                                    <property name="action-target">@i 4</property>
+                                    <property name="sensitive" bind-source="players4" bind-property="active" 
bind-flags="invert-boolean"/>
                                     <style>
                                       <class name="number-box"/>
                                     </style>
diff --git a/src/nibbles-window.vala b/src/nibbles-window.vala
index d08cca6..403c652 100644
--- a/src/nibbles-window.vala
+++ b/src/nibbles-window.vala
@@ -41,12 +41,7 @@ private class NibblesWindow : ApplicationWindow
     [GtkChild] private Button pause_button;
 
     /* Pre-game screen widgets */
-    private Gee.LinkedList<ToggleButton> number_of_players_buttons;
     private Gee.LinkedList<ToggleButton> number_of_ai_buttons;
-    [GtkChild] private ToggleButton players1;
-    [GtkChild] private ToggleButton players2;
-    [GtkChild] private ToggleButton players3;
-    [GtkChild] private ToggleButton players4;
     [GtkChild] private ToggleButton ai0;
     [GtkChild] private ToggleButton ai1;
     [GtkChild] private ToggleButton ai2;
@@ -100,6 +95,7 @@ private class NibblesWindow : ApplicationWindow
         {"preferences", preferences_cb},
         {"scores", scores_cb},
 
+        {"change-humans-number", null, "i", "1", change_humans_number },
         {"show-new-game-screen", show_new_game_screen_cb},
         {"show-controls-screen", show_controls_screen_cb},
         {"back", back_cb}
@@ -132,16 +128,6 @@ private class NibblesWindow : ApplicationWindow
         key_controller = new EventControllerKey (this);
         key_controller.key_pressed.connect (key_press_event_cb);
 
-        number_of_players_buttons = new Gee.LinkedList<ToggleButton> ();
-        players1.toggled.connect (change_number_of_players_cb);
-        number_of_players_buttons.add (players1);
-        players2.toggled.connect (change_number_of_players_cb);
-        number_of_players_buttons.add (players2);
-        players3.toggled.connect (change_number_of_players_cb);
-        number_of_players_buttons.add (players3);
-        players4.toggled.connect (change_number_of_players_cb);
-        number_of_players_buttons.add (players4);
-
         number_of_ai_buttons = new Gee.LinkedList<ToggleButton> ();
         ai0.toggled.connect (change_number_of_ai_cb);
         number_of_ai_buttons.add (ai0);
@@ -187,6 +173,7 @@ private class NibblesWindow : ApplicationWindow
         /* Number of worms */
         game.numhumans = settings.get_int ("players");
         game.numai = settings.get_int ("ai");
+        ((SimpleAction) lookup_action ("change-humans-number")).set_state (game.numhumans);
 
         /* Controls screen */
         arrow_pixbuf = NibblesView.load_pixmap_file ("arrow.svg", 5 * view.tile_size, 5 * view.tile_size);
@@ -484,7 +471,6 @@ private class NibblesWindow : ApplicationWindow
         new_game_button.hide ();
         pause_button.hide ();
 
-        number_of_players_buttons[game.numhumans - 1].set_active (true);
         number_of_ai_buttons[game.numai].set_active (true);
 
         set_default (next_button);
@@ -496,21 +482,6 @@ private class NibblesWindow : ApplicationWindow
 
     private void show_controls_screen_cb ()
     {
-        /* Save selected number of players before changing the screen */
-        foreach (var button in number_of_players_buttons)
-        {
-            if (button.get_active ())
-            {
-                int numhumans = -1;
-                button.get_label ().scanf ("_%d", &numhumans);
-                game.numhumans = numhumans;
-
-                /* Remember the option for the following runs */
-                settings.set_int ("players", game.numhumans);
-                break;
-            }
-        }
-
         /* Save selected number of computer players before changing the screen */
         foreach (var button in number_of_ai_buttons)
         {
@@ -588,43 +559,17 @@ private class NibblesWindow : ApplicationWindow
         main_stack.set_transition_type (StackTransitionType.SLIDE_UP);
     }
 
-    private void change_number_of_players_cb (ToggleButton button)
+    private inline void change_humans_number (SimpleAction action, Variant variant)
     {
-        var is_same_button = true;
-        foreach (var other_button in number_of_players_buttons)
-        {
-            if (button != other_button)
-            {
-                if (other_button.get_active ())
-                {
-                    /* We are blocking the signal to prevent another callback when setting the previous
-                     * checked button to inactive
-                     */
-                    SignalHandler.block_matched (other_button, SignalMatchType.DATA, 0, 0, null, null, this);
-                    other_button.set_active (false);
-                    SignalHandler.unblock_matched (other_button, SignalMatchType.DATA, 0, 0, null, null, 
this);
-                    is_same_button = false;
-                    break;
-                }
-            }
-        }
-
-        /* Ignore clicks on the same button. */
-        if (is_same_button)
-        {
-            SignalHandler.block_matched (button, SignalMatchType.DATA, 0, 0, null, null, this);
-            button.set_active (true);
-            SignalHandler.unblock_matched (button, SignalMatchType.DATA, 0, 0, null, null, this);
-            return;
-        }
-
-        button.set_active (true);
-
-        int numhumans = -1;
-        button.get_label ().scanf ("_%d", &numhumans);
-
-        int min_ai = 4 - numhumans;
-        int max_ai = NibblesGame.MAX_WORMS - numhumans;
+        int humans_number = variant.get_int32 ();
+        if (humans_number < 1 || humans_number > 4)
+            assert_not_reached ();
+        action.set_state (humans_number);
+        game.numhumans = humans_number;
+        settings.set_int ("players", humans_number);
+
+        int min_ai = 4 - humans_number;
+        int max_ai = NibblesGame.MAX_WORMS - humans_number;
         for (int i = 0; i < min_ai; i++)
         {
             number_of_ai_buttons[i].hide ();
@@ -638,7 +583,7 @@ private class NibblesWindow : ApplicationWindow
             number_of_ai_buttons[i].hide ();
         }
 
-        if (numhumans == 4)
+        if (humans_number == 4)
         {
             number_of_ai_buttons[0].show ();
         }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]