[gnome-games/wip/exalm/platform-preferences: 90/95] preferences-page-retro-platform: List cores



commit 0c4d44a310c81b0205624296f53c7ccd333cbe87
Author: Alexander Mikhaylenko <exalm7659 gmail com>
Date:   Thu Sep 27 15:49:47 2018 +0500

    preferences-page-retro-platform: List cores

 data/ui/preferences-page-retro-platform.ui  |  1 +
 src/ui/preferences-page-retro-platform.vala | 46 ++++++++++++++++++++++++-----
 2 files changed, 39 insertions(+), 8 deletions(-)
---
diff --git a/data/ui/preferences-page-retro-platform.ui b/data/ui/preferences-page-retro-platform.ui
index 83841200..b943261d 100644
--- a/data/ui/preferences-page-retro-platform.ui
+++ b/data/ui/preferences-page-retro-platform.ui
@@ -11,6 +11,7 @@
           <object class="GtkListBox" id="core_list_box">
             <property name="selection-mode">none</property>
             <property name="visible">true</property>
+            <signal name="row-activated" handler="core_list_box_row_activated"/>
           </object>
         </child>
       </object>
diff --git a/src/ui/preferences-page-retro-platform.vala b/src/ui/preferences-page-retro-platform.vala
index e2ee08b4..d20afe82 100644
--- a/src/ui/preferences-page-retro-platform.vala
+++ b/src/ui/preferences-page-retro-platform.vala
@@ -7,6 +7,18 @@ private class Games.PreferencesPageRetroPlatform: PreferencesPage {
        [GtkChild]
        private Gtk.ListBox core_list_box;
 
+       private Settings settings;
+
+       private string _current_core;
+       public string current_core {
+               get { return _current_core; }
+               set {
+                       _current_core = value;
+
+                       update_core_list ();
+               }
+       }
+
        private static Retro.CoreDescriptor[] core_descriptors;
 
        static construct {
@@ -22,6 +34,12 @@ private class Games.PreferencesPageRetroPlatform: PreferencesPage {
                category = PreferencesPageCategory.PLATFORMS;
 
                build_core_list ();
+
+               var path = "/org/gnome/Games/platforms/%s/".printf (platform.get_id ());
+               settings = new Settings.with_path ("org.gnome.Games.platforms", path);
+
+               settings.bind ("libretro-core", this, "current-core",
+                              SettingsBindFlags.DEFAULT);
        }
 
        private void build_core_list () {
@@ -50,15 +68,27 @@ private class Games.PreferencesPageRetroPlatform: PreferencesPage {
                }
        }
 
-       private void add_core_descriptor (Retro.CoreDescriptor core_descriptor) throws Error {
-               var name = core_descriptor.get_name ();
+       private void update_core_list () {
+               core_list_box.foreach ((item) => {
+                       var core_item = item as CoreItem;
+                       var core_descriptor = core_item.core_descriptor;
+                       var core_id = core_descriptor.get_id ();
+
+                       core_item.checkmark_visible = (core_id == current_core);
+               });
+       }
+
+       private void add_core_descriptor (Retro.CoreDescriptor core_descriptor) {
+               var item = new CoreItem (core_descriptor);
+               core_list_box.add (item);
+       }
+
+       [GtkCallback]
+       private void core_list_box_row_activated (Gtk.ListBoxRow row_item) {
+               var core_item = row_item as CoreItem;
 
-               var item = new CheckmarkItem (name);
-               var row = new Gtk.ListBoxRow ();
-               row.add (item);
-               core_list_box.add (row);
+               var core_descriptor = core_item.core_descriptor;
 
-               item.show ();
-               row.show ();
+               current_core = core_descriptor.get_id ();
        }
 }


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