[gnome-boxes/wip/feborges/new-wizard-design: 8/13] wizard-source: Introduce "Download an OS" page



commit 737bd726bae41f50ff295da90c72b053b72d3b8d
Author: Felipe Borges <felipeborges gnome org>
Date:   Tue Jan 16 15:18:18 2018 +0100

    wizard-source: Introduce "Download an OS" page
    
    Fixes #42

 data/ui/wizard-source.ui | 72 ++++++++++++++++++++++++++++++++++++++++++++++++
 src/wizard-source.vala   | 64 +++++++++++++++++++++++++-----------------
 src/wizard.vala          | 10 +++++--
 3 files changed, 119 insertions(+), 27 deletions(-)
---
diff --git a/data/ui/wizard-source.ui b/data/ui/wizard-source.ui
index 94dfe782..23e2d222 100644
--- a/data/ui/wizard-source.ui
+++ b/data/ui/wizard-source.ui
@@ -174,6 +174,49 @@
             <property name="visible">True</property>
             <property name="orientation">vertical</property>
 
+            <child>
+              <object class="GtkButton" id="download_an_os_button">
+                <property name="visible">True</property>
+                <signal name="clicked" handler="on_download_an_os_button_clicked"/>
+                <style>
+                  <class name="boxes-menu-row"/>
+                </style>
+                <child>
+                  <object class="GtkBox">
+                    <property name="visible">True</property>
+                    <property name="margin-top">10</property>
+                    <property name="margin-bottom">10</property>
+                    <property name="margin-start">20</property>
+                    <property name="margin-end">20</property>
+                    <property name="spacing">20</property>
+                    <property name="orientation">horizontal</property>
+                    <child>
+                      <object class="GtkLabel">
+                        <property name="visible">True</property>
+                        <property name="halign">start</property>
+                        <property name="use-underline">True</property>
+                        <property name="label" translatable="yes">Download an OS</property>
+                      </object>
+                      <packing>
+                        <property name="expand">True</property>
+                        <property name="fill">True</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkLabel">
+                        <property name="visible">True</property>
+                        <property name="label" translatable="yes">▶</property>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">False</property>
+                      </packing>
+                    </child>
+                  </object>
+                </child>
+              </object>
+            </child>
+
             <child>
               <object class="GtkButton" id="enter_url_button">
                 <property name="visible">True</property>
@@ -288,6 +331,35 @@
       </packing>
     </child>
 
+    <!-- Download an OS page -->
+    <child>
+      <object class="GtkBox" id="download_an_os_page">
+        <property name="visible">True</property>
+        <child>
+          <object class="GtkScrolledWindow">
+            <property name="visible">True</property>
+            <property name="expand">True</property>
+            <child>
+              <object class="GtkBox">
+                <property name="visible">True</property>
+                <property name="orientation">vertical</property>
+                <property name="border-width">20</property>
+                <property name="margin-start">20</property>
+                <property name="margin-end">20</property>
+                <child>
+                  <object class="GtkListBox" id="downloads_list">
+                    <property name="visible">True</property>
+                  </object>
+                </child>
+              </object>
+            </child>
+          </object>
+        </child>
+      </object>
+      <packing>
+        <property name="name">download-an-os-page</property>
+      </packing>
+    </child>
 
     <!-- RHEL web view page -->
     <child>
diff --git a/src/wizard-source.vala b/src/wizard-source.vala
index 470d9744..15ef5f3d 100644
--- a/src/wizard-source.vala
+++ b/src/wizard-source.vala
@@ -4,6 +4,7 @@
     MAIN,
     RHEL_WEB_VIEW,
     URL,
+    DOWNLOADS,
 
     LAST,
 }
@@ -307,7 +308,7 @@ private void on_notify_estimated_load_progress () {
 
 [GtkTemplate (ui = "/org/gnome/Boxes/ui/wizard-source.ui")]
 private class Boxes.WizardSource: Gtk.Stack {
-    private const string[] page_names = { "main-page", "rhel-web-view-page", "url-page" };
+    private const string[] page_names = { "main-page", "rhel-web-view-page", "url-page", 
"download-an-os-page" };
 
     public Gtk.Widget? selected { get; set; }
     public string uri {
@@ -342,6 +343,8 @@ private void on_notify_estimated_load_progress () {
     private Gtk.Image install_rhel_image;
     [GtkChild]
     private Boxes.WizardWebView rhel_web_view;
+    [GtkChild]
+    private Gtk.ListBox downloads_list;
 
     private AppWindow window;
 
@@ -401,6 +404,7 @@ private void on_notify_estimated_load_progress () {
                 main_vbox.grab_focus ();
                 break;
             case SourcePage.RHEL_WEB_VIEW:
+            case SourcePage.DOWNLOADS:
                 break;
             case SourcePage.URL:
                 url_entry.changed ();
@@ -448,31 +452,11 @@ public void setup_ui (AppWindow window) {
         var os_db = media_manager.os_db;
 
         var available_downloads_model = new GLib.ListStore (typeof (Osinfo.Os));
-        available_downloads_listbox.bind_model (available_downloads_model, (obj) => {
-            var os = obj as Osinfo.Os;
-
-            var entry = new WizardDownloadableEntry (os);
-            entry.activated.connect ((media) => {
-                this.uri = media.url;
-
-                activated ();
-            });
-
-            return entry;
-        });
-
-        available_downloads_listbox.row_activated.connect ((row) => {
-            var entry = (row as WizardDownloadableEntry);
+        available_downloads_listbox.bind_model (available_downloads_model, create_downloadable_entry);
+        available_downloads_listbox.row_activated.connect (on_downloadable_entry_clicked);
 
-            selected = entry;
-            if (entry.single_media != null) {
-                this.uri = entry.single_media.url;
-
-                activated ();
-            } else {
-                entry.toggle();
-            }
-        });
+        downloads_list.bind_model (available_downloads_model, create_downloadable_entry);
+        downloads_list.row_activated.connect (on_downloadable_entry_clicked);
 
         os_db.list_latest_downloadable_oses.begin ((db, result) => {
             try {
@@ -547,6 +531,31 @@ public void setup_ui (AppWindow window) {
         });
     }
 
+    private Gtk.Widget create_downloadable_entry (Object item) {
+        var os = item as Osinfo.Os;
+
+        var entry = new WizardDownloadableEntry (os);
+        entry.activated.connect ((media) => {
+            this.uri = media.url;
+        activated ();
+        });
+
+        return entry;
+    }
+
+    private void on_downloadable_entry_clicked (Gtk.ListBoxRow row) {
+        var entry = (row as WizardDownloadableEntry);
+
+        selected = entry;
+        if (entry.single_media != null) {
+           this.uri = entry.single_media.url;
+
+           activated ();
+        } else {
+            entry.toggle();
+        }
+    }
+
     public void cleanup () {
         filename = null;
         install_media = null;
@@ -665,6 +674,11 @@ private void on_media_selected (InstallerMedia media) {
         }
     }
 
+    [GtkCallback]
+    private void on_download_an_os_button_clicked () {
+        page = SourcePage.DOWNLOADS;
+    }
+
     [GtkCallback]
     private void on_install_rhel_button_clicked () {
         page = SourcePage.RHEL_WEB_VIEW;
diff --git a/src/wizard.vala b/src/wizard.vala
index 975bafaf..5182a7eb 100644
--- a/src/wizard.vala
+++ b/src/wizard.vala
@@ -121,7 +121,8 @@
             } else {
                 switch (value) {
                 case WizardPage.SOURCE:
-                    if (wizard_source.page == SourcePage.RHEL_WEB_VIEW)
+                    if (wizard_source.page == SourcePage.RHEL_WEB_VIEW ||
+                        wizard_source.page == SourcePage.DOWNLOADS)
                         wizard_source.page = SourcePage.MAIN;
                     break;
                 }
@@ -177,6 +178,10 @@ private void wizard_source_update_buttons () {
             next_button.sensitive = false;
             break;
 
+        case Boxes.SourcePage.DOWNLOADS:
+            next_button.sensitive = false;
+            break;
+
         case Boxes.SourcePage.URL:
             next_button.sensitive = false;
             if (wizard_source.uri.length == 0)
@@ -657,7 +662,8 @@ public void setup_ui (AppWindow window, WizardWindow wizard_window) {
         back_button = wizard_window.topbar.back_btn;
         back_button.clicked.connect (() => {
             if (page == WizardPage.SOURCE) {
-                return_if_fail (wizard_source.page == SourcePage.RHEL_WEB_VIEW);
+                return_if_fail (wizard_source.page == SourcePage.RHEL_WEB_VIEW ||
+                                wizard_source.page == SourcePage.DOWNLOADS);
                 wizard_source.page = SourcePage.MAIN;
                 wizard_source.cleanup ();
             } else {


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