[gnome-boxes/wip/wizard-n-props-in-dialog2] tmp
- From: Zeeshan Ali Khattak <zeeshanak src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-boxes/wip/wizard-n-props-in-dialog2] tmp
- Date: Thu, 28 Aug 2014 00:14:31 +0000 (UTC)
commit 87989a5f00507e588616a46e4c6222166fa4b2a5
Author: Zeeshan Ali (Khattak) <zeeshanak gnome org>
Date: Fri Aug 15 19:16:35 2014 +0100
tmp
data/gnome-boxes.gresource.xml | 4 +-
data/ui/app-window.ui | 54 -------------
data/ui/properties-dialog.ui | 74 ++++++++++++++++++
data/ui/properties-sidebar.ui | 3 +-
data/ui/properties-toolbar.ui | 47 ------------
data/ui/topbar.ui | 23 ------
data/ui/wizard-dialog.ui | 141 +++++++++++++++++++++++++++++++++++
data/ui/wizard-toolbar.ui | 95 -----------------------
src/Makefile.am | 5 +-
src/app-window.vala | 38 ++--------
src/app.vala | 8 +-
src/libvirt-machine-properties.vala | 2 +-
src/machine.vala | 4 +-
src/properties-dialog.vala | 62 +++++++++++++++
src/properties-sidebar.vala | 2 +-
src/properties-toolbar.vala | 54 -------------
src/properties.vala | 21 +++---
src/sidebar.vala | 46 -----------
src/topbar.vala | 44 +----------
src/wizard-dialog.vala | 85 +++++++++++++++++++++
src/wizard-toolbar.vala | 24 ------
src/wizard.vala | 42 ++++------
22 files changed, 415 insertions(+), 463 deletions(-)
---
diff --git a/data/gnome-boxes.gresource.xml b/data/gnome-boxes.gresource.xml
index 14ae7ea..2342a31 100644
--- a/data/gnome-boxes.gresource.xml
+++ b/data/gnome-boxes.gresource.xml
@@ -14,7 +14,7 @@
<file preprocess="xml-stripblanks">ui/mini-graph.ui</file>
<file preprocess="xml-stripblanks">ui/notification.ui</file>
<file preprocess="xml-stripblanks">ui/properties-sidebar.ui</file>
- <file preprocess="xml-stripblanks">ui/properties-toolbar.ui</file>
+ <file preprocess="xml-stripblanks">ui/properties-dialog.ui</file>
<file preprocess="xml-stripblanks">ui/searchbar.ui</file>
<file preprocess="xml-stripblanks">ui/selectionbar.ui</file>
<file preprocess="xml-stripblanks">ui/selection-toolbar.ui</file>
@@ -27,6 +27,6 @@
<file preprocess="xml-stripblanks">ui/wizard-sidebar.ui</file>
<file preprocess="xml-stripblanks">ui/wizard-source.ui</file>
<file preprocess="xml-stripblanks">ui/wizard-summary.ui</file>
- <file preprocess="xml-stripblanks">ui/wizard-toolbar.ui</file>
+ <file preprocess="xml-stripblanks">ui/wizard-dialog.ui</file>
</gresource>
</gresources>
diff --git a/data/ui/app-window.ui b/data/ui/app-window.ui
index ab82ab1..ed74372 100644
--- a/data/ui/app-window.ui
+++ b/data/ui/app-window.ui
@@ -18,16 +18,6 @@
| | |
| | |-> view = new Boxes.CollectionView ();
| | |
- | | |-> below_bin_hbox = new Gtk.Box (Gtk.Orientation.HORIZONTAL, 0);
- | | | |
- | | | |-> sidebar = new Boxes.Sidebar ();
- | | | |
- | | | |-> content_bin = Gtk.Stack ();
- | | | |
- | | | |-> wizard = new Boxes.Wizard ();
- | | | |
- | | | |-> properties = new Boxes.Properties ();
- | | |
| | |-> empty_boxes = new Boxes.EmptyBoxes ();
| | |
| | |-> display_page = new Boxes.DisplayPage ();
@@ -101,50 +91,6 @@
</child>
<child>
- <object class="GtkBox" id="below_bin_hbox">
- <property name="visible">True</property>
- <property name="orientation">horizontal</property>
- <property name="halign">fill</property>
- <property name="valign">fill</property>
- <property name="hexpand">True</property>
- <property name="vexpand">True</property>
- <property name="spacing">0</property>
-
- <child>
- <object class="BoxesSidebar" id="sidebar">
- <property name="visible">True</property>
- </object>
- </child>
-
- <child>
- <object class="GtkStack" id="content_bin">
- <property name="visible">True</property>
- <property name="homogeneous">True</property>
- <property name="transition-type">slide-left-right</property>
- <property name="transition-duration">400</property>
- <property name="hexpand">True</property>
- <property name="vexpand">True</property>
-
- <child>
- <object class="BoxesWizard" id="wizard">
- <property name="visible">True</property>
- </object>
- </child>
-
- <child>
- <object class="BoxesProperties" id="properties">
- <property name="visible">True</property>
- </object>
- </child>
- </object>
- </child>
- </object>
- <packing>
- <property name="name">below-bin-hbox</property>
- </packing>
- </child>
-
- <child>
<object class="BoxesDisplayPage" id="display_page">
<property name="visible">True</property>
</object>
diff --git a/data/ui/properties-dialog.ui b/data/ui/properties-dialog.ui
new file mode 100644
index 0000000..f965ebf
--- /dev/null
+++ b/data/ui/properties-dialog.ui
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <!-- interface-requires gtk+ 3.9 -->
+
+ <!-- Widget hierarchy:
+
+ Boxes.PropertiesDialog : Gtk.Dialog
+ |
+ |-> vbox (internal child)
+ | |
+ | |-> hbox = new Gtk.Box (Gtk.Orientation.HORIZONTAL, 0);
+ | |
+ | |-> sidebar = new Boxes.PropertiesSidebar ();
+ | |
+ | |-> properties = new Boxes.Properties ();
+ |
+ |-> close_button (action child) = new Gtk.Button ();
+ -->
+
+ <template class="BoxesPropertiesDialog" parent="GtkDialog">
+ <property name="can_focus">False</property>
+ <property name="resizable">False</property>
+ <property name="modal">True</property>
+ <signal name="delete-event" handler="on_delete_event"/>
+
+ <child internal-child="vbox">
+ <object class="GtkBox">
+
+ <child>
+ <object class="GtkBox" id="hbox">
+ <property name="visible">True</property>
+ <property name="orientation">horizontal</property>
+ <property name="halign">fill</property>
+ <property name="valign">fill</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <object class="BoxesPropertiesSidebar" id="sidebar">
+ <property name="visible">True</property>
+ </object>
+ </child>
+
+ <child>
+ <object class="BoxesProperties" id="properties">
+ <property name="visible">True</property>
+ </object>
+ </child>
+
+ </object>
+ </child>
+ </object>
+ </child>
+
+ <child type="action">
+ <object class="GtkButton" id="close_button">
+ <property name="visible">True</property>
+ <property name="valign">center</property>
+ <property name="use-underline">True</property>
+ <property name="can-default">True</property>
+ <property name="has-default">True</property>
+ <property name="label" translatable="yes">_Close</property>
+ <signal name="clicked" handler="on_close_button_clicked"/>
+ <style>
+ <class name="text-button"/>
+ </style>
+ </object>
+ </child>
+ <action-widgets>
+ <action-widget response="ok" default="true">close_button</action-widget>
+ </action-widgets>
+ </template>
+</interface>
diff --git a/data/ui/properties-sidebar.ui b/data/ui/properties-sidebar.ui
index 32aecb9..444d96f 100644
--- a/data/ui/properties-sidebar.ui
+++ b/data/ui/properties-sidebar.ui
@@ -5,7 +5,7 @@
<template class="BoxesPropertiesSidebar" parent="GtkBox">
<property name="visible">True</property>
<property name="orientation">vertical</property>
- <property name="spacing">10</property>
+ <property name="spacing">300</property>
<child>
<object class="GtkTreeView" id="tree_view">
@@ -57,7 +57,6 @@
<property name="margin-start">10</property>
<property name="margin-end">10</property>
<property name="margin-top">10</property>
- <property name="margin-bottom">30</property>
<child>
<object class="GtkImage" id="screenshot">
diff --git a/data/ui/topbar.ui b/data/ui/topbar.ui
index 7b70cff..058d809 100644
--- a/data/ui/topbar.ui
+++ b/data/ui/topbar.ui
@@ -28,29 +28,6 @@
</packing>
</child>
- <!-- Wizard -->
- <child>
- <object class="BoxesWizardToolbar" id="wizard_toolbar">
- <property name="visible">True</property>
- </object>
-
- <packing>
- <property name="name">wizard</property>
- </packing>
- </child>
-
- <!-- Properties -->
- <child>
- <object class="BoxesPropertiesToolbar" id="props_toolbar">
- <property name="visible">True</property>
- <property name="show-close-button">True</property>
- </object>
-
- <packing>
- <property name="name">properties</property>
- </packing>
- </child>
-
<!-- Display -->
<child>
<object class="BoxesDisplayToolbar" id="display_toolbar">
diff --git a/data/ui/wizard-dialog.ui b/data/ui/wizard-dialog.ui
new file mode 100644
index 0000000..65cd011
--- /dev/null
+++ b/data/ui/wizard-dialog.ui
@@ -0,0 +1,141 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <!-- interface-requires gtk+ 3.9 -->
+
+ <!-- Widget hierarchy:
+
+ Boxes.WizardDialog : Gtk.Dialog
+ |
+ |-> vbox (internal child)
+ | |
+ | |-> hbox = new Gtk.Box (Gtk.Orientation.HORIZONTAL, 0);
+ | |
+ | |-> sidebar = new Boxes.WizardSidebar ();
+ | |
+ | |-> wizard = new Boxes.Wizard ();
+ |
+ |-> cancel_btn (action child) = new Gtk.Button ();
+ |-> create_btn (action child) = new Gtk.Button ();
+ |-> continue_btn (action child) = new Gtk.Button ();
+ |-> back_btn (action child) = new Gtk.Button ();
+ -->
+
+ <template class="BoxesWizardDialog" parent="GtkDialog">
+ <property name="title" translatable="yes">Create a Box</property>
+ <property name="can_focus">False</property>
+ <property name="resizable">False</property>
+ <property name="modal">True</property>
+ <signal name="key-press-event" after="yes" handler="on_key_pressed"/>
+ <signal name="delete-event" handler="on_delete_event"/>
+
+ <child internal-child="vbox">
+ <object class="GtkBox" id="vbox">
+ <property name="visible">True</property>
+ <property name="spacing">10</property>
+
+ <child>
+ <object class="GtkBox" id="hbox">
+ <property name="visible">True</property>
+ <property name="orientation">horizontal</property>
+ <property name="halign">fill</property>
+ <property name="valign">fill</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <property name="spacing">10</property>
+
+ <child>
+ <object class="BoxesWizardSidebar" id="sidebar">
+ <property name="visible">True</property>
+ </object>
+ </child>
+
+ <child>
+ <object class="BoxesWizard" id="wizard">
+ <property name="visible">True</property>
+ </object>
+ </child>
+
+ </object>
+ </child>
+
+ </object>
+ </child>
+
+ <child type="action">
+ <object class="GtkButton" id="cancel_btn">
+ <property name="visible">True</property>
+ <property name="valign">center</property>
+ <property name="use-underline">True</property>
+ <property name="can-default">True</property>
+ <property name="has-default">True</property>
+ <property name="label" translatable="yes">_Cancel</property>
+ <signal name="clicked" handler="on_cancel_btn_clicked"/>
+ <style>
+ <class name="text-button"/>
+ </style>
+ </object>
+ </child>
+
+ <child type="action">
+ <object class="GtkButton" id="create_btn">
+ <property name="visible">False</property>
+ <property name="valign">center</property>
+ <property name="use-underline">True</property>
+ <property name="can-default">True</property>
+ <property name="label" translatable="yes">C_reate</property>
+ <signal name="clicked" handler="on_create_btn_clicked"/>
+ <style>
+ <class name="text-button"/>
+ <class name="boxes-continue"/>
+ </style>
+ </object>
+ </child>
+
+ <child type="action">
+ <object class="GtkButton" id="continue_btn">
+ <property name="visible">True</property>
+ <property name="valign">center</property>
+ <property name="use-underline">True</property>
+ <property name="can-default">True</property>
+ <property name="has-default">True</property>
+ <property name="label" translatable="yes">C_ontinue</property>
+ <signal name="clicked" handler="on_continue_btn_clicked"/>
+ <style>
+ <class name="text-button"/>
+ <class name="boxes-continue"/>
+ </style>
+ </object>
+ </child>
+
+ <child type="action">
+ <object class="GtkButton" id="back_btn">
+ <property name="visible">True</property>
+ <property name="valign">center</property>
+ <property name="use-underline">True</property>
+ <property name="label" translatable="yes">_Back</property>
+ <signal name="clicked" handler="on_back_btn_clicked"/>
+ <style>
+ <class name="text-button"/>
+ </style>
+ </object>
+ </child>
+
+ <action-widgets>
+ <action-widget response="cancel" default="true">cancel_btn</action-widget>
+ <action-widget response="none">back_btn</action-widget>
+ <action-widget response="none">create_btn</action-widget>
+ <action-widget response="none">continue_btn</action-widget>
+ </action-widgets>
+
+ </template>
+
+ <object class="GtkSizeGroup" id="sizegroup">
+ <property name="mode">horizontal</property>
+ <widgets>
+ <widget name="cancel_btn"/>
+ <widget name="back_btn"/>
+ <widget name="continue_btn"/>
+ <widget name="create_btn"/>
+ </widgets>
+ </object>
+</interface>
diff --git a/src/Makefile.am b/src/Makefile.am
index e43d96b..79da105 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -122,13 +122,12 @@ gnome_boxes_SOURCES = \
notificationbar.vala \
os-database.vala \
properties.vala \
+ properties-dialog.vala \
properties-sidebar.vala \
- properties-toolbar.vala \
remote-machine.vala \
searchbar.vala \
selectionbar.vala \
selection-toolbar.vala \
- sidebar.vala \
spice-display.vala \
topbar.vala \
ui.vala \
@@ -142,9 +141,9 @@ gnome_boxes_SOURCES = \
libvirt-system-importer.vala \
libvirt-system-vm-importer.vala \
vnc-display.vala \
+ wizard-dialog.vala \
wizard-sidebar.vala \
wizard-source.vala \
- wizard-toolbar.vala \
wizard.vala \
downloader.vala \
empty-boxes.vala \
diff --git a/src/app-window.vala b/src/app-window.vala
index bdaaf57..40e285f 100644
--- a/src/app-window.vala
+++ b/src/app-window.vala
@@ -36,6 +36,9 @@ private class Boxes.AppWindow: Gtk.ApplicationWindow, Boxes.UI {
}
}
+ public WizardDialog wizard_dialog;
+ public PropertiesDialog props_dialog;
+
[GtkChild]
public Searchbar searchbar;
[GtkChild]
@@ -45,22 +48,12 @@ private class Boxes.AppWindow: Gtk.ApplicationWindow, Boxes.UI {
[GtkChild]
public Selectionbar selectionbar;
[GtkChild]
- public Sidebar sidebar;
- [GtkChild]
- public Wizard wizard;
- [GtkChild]
- public Properties properties;
- [GtkChild]
public DisplayPage display_page;
[GtkChild]
public EmptyBoxes empty_boxes;
[GtkChild]
public Gtk.Stack below_bin;
[GtkChild]
- private Gtk.Stack content_bin;
- [GtkChild]
- private Gtk.Box below_bin_hbox;
- [GtkChild]
public CollectionView view;
public GLib.Settings settings;
@@ -106,15 +99,15 @@ private class Boxes.AppWindow: Gtk.ApplicationWindow, Boxes.UI {
public void setup_ui () {
topbar.setup_ui (this);
- wizard.setup_ui (this);
display_page.setup_ui (this);
view.setup_ui (this);
selectionbar.setup_ui (this);
searchbar.setup_ui (this);
- sidebar.setup_ui (this);
- properties.setup_ui (this);
empty_boxes.setup_ui (this);
notificationbar.searchbar = searchbar;
+
+ wizard_dialog = new WizardDialog (this);
+ props_dialog = new PropertiesDialog (this);
}
private void save_window_geometry () {
@@ -131,9 +124,7 @@ private class Boxes.AppWindow: Gtk.ApplicationWindow, Boxes.UI {
}
private void ui_state_changed () {
- // The order is important for some widgets here (e.g properties must change its state before wizard
so it can
- // flush any deferred changes for wizard to pick-up when going back from properties to wizard
(review).
- foreach (var ui in new Boxes.UI[] { sidebar, topbar, view, properties, wizard, empty_boxes }) {
+ foreach (var ui in new Boxes.UI[] { topbar, view, wizard_dialog, props_dialog, empty_boxes }) {
ui.set_state (ui_state);
}
@@ -165,18 +156,8 @@ private class Boxes.AppWindow: Gtk.ApplicationWindow, Boxes.UI {
case UIState.CREDS:
case UIState.DISPLAY:
-
- break;
-
case UIState.WIZARD:
- below_bin.visible_child = below_bin_hbox;
- content_bin.visible_child = wizard;
-
- break;
-
case UIState.PROPERTIES:
- below_bin.visible_child = below_bin_hbox;
- content_bin.visible_child = properties;
break;
@@ -280,12 +261,9 @@ private class Boxes.AppWindow: Gtk.ApplicationWindow, Boxes.UI {
(event.state & default_modifiers) == Gdk.ModifierType.MOD1_MASK) {
topbar.click_back_button ();
return true;
- } else if (event.keyval == Gdk.Key.Right && // ALT + Right -> forward
- (event.state & default_modifiers) == Gdk.ModifierType.MOD1_MASK) {
- topbar.click_forward_button ();
- return true;
} else if (event.keyval == Gdk.Key.Escape) { // ESC -> cancel
topbar.click_cancel_button ();
+
}
return false;
diff --git a/src/app.vala b/src/app.vala
index 63575f8..983c806 100644
--- a/src/app.vala
+++ b/src/app.vala
@@ -232,11 +232,11 @@ private class Boxes.App: Gtk.Application {
if (file.query_exists ()) {
if (is_uri)
- main_window.wizard.open_with_uri (arg);
+ main_window.wizard_dialog.wizard.open_with_uri (arg);
else
- main_window.wizard.open_with_uri (file.get_uri ());
+ main_window.wizard_dialog.wizard.open_with_uri (file.get_uri ());
} else if (is_uri)
- main_window.wizard.open_with_uri (arg);
+ main_window.wizard_dialog.wizard.open_with_uri (arg);
else
open_name (arg);
});
@@ -274,7 +274,7 @@ private class Boxes.App: Gtk.Application {
foreach (var window in windows) {
window.notificationbar.cancel ();
- window.wizard.cleanup ();
+ window.wizard_dialog.wizard.cleanup ();
}
suspend_machines ();
}
diff --git a/src/libvirt-machine-properties.vala b/src/libvirt-machine-properties.vala
index b15c7d0..f9e4c6f 100644
--- a/src/libvirt-machine-properties.vala
+++ b/src/libvirt-machine-properties.vala
@@ -145,7 +145,7 @@ private class Boxes.LibvirtMachineProperties: GLib.Object, Boxes.IPropertiesProv
button.clicked.connect (() => {
var log = collect_logs ();
var dialog = new Gtk.Dialog.with_buttons (_("Troubleshooting log"),
- machine.window,
+ machine.window.props_dialog,
DialogFlags.DESTROY_WITH_PARENT,
_("_Save"), 100,
_("Copy to clipboard"), 101,
diff --git a/src/machine.vala b/src/machine.vala
index 6a90147..ca2773d 100644
--- a/src/machine.vala
+++ b/src/machine.vala
@@ -380,7 +380,7 @@ private abstract class Boxes.Machine: Boxes.CollectionItem, Boxes.IPropertiesPro
orig_pixbuf = small_screenshot;
pixbuf = draw_vm (small_screenshot, SCREENSHOT_WIDTH, SCREENSHOT_HEIGHT);
if (window.current_item == this)
- window.sidebar.props_sidebar.screenshot.set_from_pixbuf (pixbuf);
+ window.props_dialog.sidebar.screenshot.set_from_pixbuf (pixbuf);
if (save)
save_pixbuf_as_screenshot (small_screenshot);
@@ -541,7 +541,7 @@ private abstract class Boxes.Machine: Boxes.CollectionItem, Boxes.IPropertiesPro
} else {
pixbuf = this.pixbuf;
}
- window.sidebar.props_sidebar.screenshot.set_from_pixbuf (pixbuf);
+ window.props_dialog.sidebar.screenshot.set_from_pixbuf (pixbuf);
break;
}
diff --git a/src/properties-dialog.vala b/src/properties-dialog.vala
new file mode 100644
index 0000000..3918f1c
--- /dev/null
+++ b/src/properties-dialog.vala
@@ -0,0 +1,62 @@
+// This file is part of GNOME Boxes. License: LGPLv2+
+using Gtk;
+
+[GtkTemplate (ui = "/org/gnome/Boxes/ui/properties-dialog.ui")]
+private class Boxes.PropertiesDialog: Gtk.Dialog, Boxes.UI {
+ public UIState previous_ui_state { get; protected set; }
+ public UIState ui_state { get; protected set; }
+
+ [GtkChild]
+ public PropertiesSidebar sidebar;
+ [GtkChild]
+ public Properties properties;
+
+ private unowned AppWindow app_window;
+
+ private GLib.Binding item_name_bind;
+
+ construct {
+ use_header_bar = 1;
+ }
+
+ public PropertiesDialog (AppWindow app_window) {
+ this.app_window = app_window;
+
+ sidebar.setup_ui (app_window);
+ properties.setup_ui (app_window, this);
+
+ set_transient_for (app_window);
+
+ notify["ui-state"].connect (ui_state_changed);
+ }
+
+ private void ui_state_changed () {
+ properties.set_state (ui_state);
+ item_name_bind = null;
+
+ if (ui_state != UIState.PROPERTIES) {
+ this.visible = false;
+
+ return;
+ }
+
+ item_name_bind = app_window.current_item.bind_property ("name", this, "title",
BindingFlags.SYNC_CREATE);
+ this.visible = true;
+ }
+
+ [GtkCallback]
+ private bool on_delete_event () {
+ revert_ui_state ();
+
+ return true;
+ }
+
+ [GtkCallback]
+ private void on_close_button_clicked () {
+ revert_ui_state ();
+ }
+
+ private void revert_ui_state () {
+ app_window.set_state (previous_ui_state);
+ }
+}
diff --git a/src/properties-sidebar.vala b/src/properties-sidebar.vala
index b98da6f..a2f8094 100644
--- a/src/properties-sidebar.vala
+++ b/src/properties-sidebar.vala
@@ -36,7 +36,7 @@ private class Boxes.PropertiesSidebar: Gtk.Box {
Gtk.TreeIter filter_iter, iter;
model_filter.get_iter (out filter_iter, path);
model_filter.convert_iter_to_child_iter (out iter, filter_iter);
- window.properties.page = (PropertiesPage) listmodel.get_path (iter).get_indices ()[0];
+ window.props_dialog.properties.page = (PropertiesPage) listmodel.get_path (iter).get_indices ()[0];
}
[GtkCallback]
diff --git a/src/properties.vala b/src/properties.vala
index 1eb5b40..dc44ef4 100644
--- a/src/properties.vala
+++ b/src/properties.vala
@@ -17,6 +17,7 @@ private class Boxes.Properties: Gtk.Stack, Boxes.UI {
public UIState ui_state { get; protected set; }
private AppWindow window;
+ private PropertiesSidebar sidebar;
private ulong stats_id;
private bool restore_fullscreen;
@@ -134,15 +135,14 @@ private class Boxes.Properties: Gtk.Stack, Boxes.UI {
}
private void populate () {
- window.sidebar.props_sidebar.listmodel.clear ();
+ sidebar.listmodel.clear ();
foreach (var page in get_children ())
remove (page);
var machine = window.current_item as Machine;
var libvirt_machine = window.current_item as LibvirtMachine;
- window.sidebar.props_sidebar.shutdown_button.sensitive = libvirt_machine != null &&
- libvirt_machine.is_running ();
+ sidebar.shutdown_button.sensitive = libvirt_machine != null && libvirt_machine.is_running ();
if (machine == null)
return;
@@ -156,11 +156,11 @@ private class Boxes.Properties: Gtk.Stack, Boxes.UI {
var current_page = page;
this.populate ();
var path = new Gtk.TreePath.from_indices (current_page);
- window.sidebar.props_sidebar.selection.select_path (path);
+ sidebar.selection.select_path (path);
page = current_page;
});
- list_append (window.sidebar.props_sidebar.listmodel, page.name, !page.empty);
+ list_append (sidebar.listmodel, page.name, !page.empty);
}
PropertiesPage current_page;
@@ -171,12 +171,13 @@ private class Boxes.Properties: Gtk.Stack, Boxes.UI {
current_page = PropertiesPage.LOGIN;
var path = new Gtk.TreePath.from_indices (current_page);
- window.sidebar.props_sidebar.selection.select_path (path);
+ sidebar.selection.select_path (path);
visible_child_name = page_names[current_page];
}
- public void setup_ui (AppWindow window) {
+ public void setup_ui (AppWindow window, PropertiesDialog dialog) {
this.window = window;
+ this.sidebar = dialog.sidebar;
transition_type = Gtk.StackTransitionType.SLIDE_UP_DOWN;
transition_duration = 400;
@@ -197,9 +198,9 @@ private class Boxes.Properties: Gtk.Stack, Boxes.UI {
if (window.current_item is LibvirtMachine) {
var libvirt_machine = window.current_item as LibvirtMachine;
stats_id = libvirt_machine.stats_updated.connect (() => {
- window.sidebar.props_sidebar.cpu_graph.points = libvirt_machine.cpu_stats;
- window.sidebar.props_sidebar.net_graph.points = libvirt_machine.net_stats;
- window.sidebar.props_sidebar.io_graph.points = libvirt_machine.io_stats;
+ sidebar.cpu_graph.points = libvirt_machine.cpu_stats;
+ sidebar.net_graph.points = libvirt_machine.net_stats;
+ sidebar.io_graph.points = libvirt_machine.io_stats;
});
}
diff --git a/src/topbar.vala b/src/topbar.vala
index 85e6527..f20156c 100644
--- a/src/topbar.vala
+++ b/src/topbar.vala
@@ -4,14 +4,12 @@ using Gtk;
public enum Boxes.TopbarPage {
COLLECTION,
SELECTION,
- WIZARD,
- PROPERTIES,
DISPLAY
}
[GtkTemplate (ui = "/org/gnome/Boxes/ui/topbar.ui")]
private class Boxes.Topbar: Gtk.Stack, Boxes.UI {
- private const string[] page_names = { "collection", "selection", "wizard", "properties", "display" };
+ private const string[] page_names = { "collection", "selection", "display" };
public UIState previous_ui_state { get; protected set; }
public UIState ui_state { get; protected set; }
@@ -22,44 +20,19 @@ private class Boxes.Topbar: Gtk.Stack, Boxes.UI {
private SelectionToolbar selection_toolbar;
[GtkChild]
private DisplayToolbar display_toolbar;
- [GtkChild]
- public WizardToolbar wizard_toolbar;
-
- [GtkChild]
- private PropertiesToolbar props_toolbar;
private AppWindow window;
// Clicks the appropriate back button depending on the ui state.
public void click_back_button () {
- switch (window.ui_state) {
- case UIState.PROPERTIES:
- break;
- case UIState.CREDS:
+ if (window.ui_state == UIState.CREDS)
collection_toolbar.click_back_button ();
- break;
- case UIState.WIZARD:
- wizard_toolbar.click_back_button ();
- break;
- }
- }
-
- // Clicks the appropriate forward button dependent on the ui state.
- public void click_forward_button () {
- wizard_toolbar.click_forward_button ();
}
// Clicks the appropriate cancel button dependent on the ui state.
public void click_cancel_button () {
- switch (window.ui_state) {
- case UIState.COLLECTION:
- if (window.selection_mode)
- window.selection_mode = false;
- return;
- case UIState.WIZARD:
- wizard_toolbar.cancel_btn.clicked ();
- return;
- }
+ if (window.ui_state == UIState.COLLECTION && window.selection_mode)
+ window.selection_mode = false;
}
public void click_new_button () {
@@ -114,7 +87,6 @@ private class Boxes.Topbar: Gtk.Stack, Boxes.UI {
collection_toolbar.setup_ui (window);
selection_toolbar.setup_ui (window);
display_toolbar.setup_ui (window);
- props_toolbar.setup_ui (window);
}
private void ui_state_changed () {
@@ -131,14 +103,6 @@ private class Boxes.Topbar: Gtk.Stack, Boxes.UI {
page = TopbarPage.DISPLAY;
break;
- case UIState.PROPERTIES:
- page = TopbarPage.PROPERTIES;
- break;
-
- case UIState.WIZARD:
- page = TopbarPage.WIZARD;
- break;
-
default:
break;
}
diff --git a/src/wizard-dialog.vala b/src/wizard-dialog.vala
new file mode 100644
index 0000000..95300f6
--- /dev/null
+++ b/src/wizard-dialog.vala
@@ -0,0 +1,85 @@
+// This file is part of GNOME Boxes. License: LGPLv2+
+using Gtk;
+
+[GtkTemplate (ui = "/org/gnome/Boxes/ui/wizard-dialog.ui")]
+private class Boxes.WizardDialog : Gtk.Dialog, Boxes.UI {
+ public UIState previous_ui_state { get; protected set; }
+ public UIState ui_state { get; protected set; }
+
+ [GtkChild]
+ public WizardSidebar sidebar;
+ [GtkChild]
+ public Wizard wizard;
+
+ [GtkChild]
+ public Button back_btn;
+ [GtkChild]
+ public Button continue_btn;
+ [GtkChild]
+ public Button create_btn;
+
+ construct {
+ use_header_bar = 1;
+ }
+
+ public WizardDialog (AppWindow app_window) {
+ wizard.setup_ui (app_window, this);
+
+ set_transient_for (app_window);
+
+ notify["ui-state"].connect (ui_state_changed);
+ }
+
+ private void ui_state_changed () {
+ wizard.set_state (ui_state);
+
+ this.visible = (ui_state == UIState.WIZARD);
+ }
+
+ [GtkCallback]
+ public bool on_key_pressed (Widget widget, Gdk.EventKey event) {
+ var default_modifiers = Gtk.accelerator_get_default_mod_mask ();
+
+ if (event.keyval == Gdk.Key.Left && // ALT + Left -> back
+ (event.state & default_modifiers) == Gdk.ModifierType.MOD1_MASK) {
+ if (back_btn.sensitive)
+ back_btn.clicked ();
+ return true;
+ } else if (event.keyval == Gdk.Key.Right && // ALT + Right -> forward
+ (event.state & default_modifiers) == Gdk.ModifierType.MOD1_MASK) {
+ if (continue_btn.sensitive)
+ continue_btn.clicked ();
+ return true;
+ }
+
+ return false;
+ }
+
+ [GtkCallback]
+ private bool on_delete_event () {
+ wizard.cancel ();
+
+ return true;
+ }
+
+ [GtkCallback]
+ private void on_cancel_btn_clicked () {
+ wizard.cancel ();
+ }
+
+ [GtkCallback]
+ private void on_back_btn_clicked () {
+ wizard.cancel_prepare ();
+ wizard.page = wizard.page - 1;
+ }
+
+ [GtkCallback]
+ private void on_continue_btn_clicked () {
+ wizard.page = wizard.page + 1;
+ }
+
+ [GtkCallback]
+ private void on_create_btn_clicked () {
+ wizard.page = WizardPage.LAST;
+ }
+}
diff --git a/src/wizard.vala b/src/wizard.vala
index 082a2f0..ef06a12 100644
--- a/src/wizard.vala
+++ b/src/wizard.vala
@@ -19,7 +19,6 @@ private class Boxes.Wizard: Gtk.Stack, Boxes.UI {
public UIState previous_ui_state { get; protected set; }
public UIState ui_state { get; protected set; }
- private Gtk.Button cancel_button;
private Gtk.Button back_button;
private Gtk.Button next_button;
private Gtk.Button continue_button;
@@ -60,7 +59,7 @@ private class Boxes.Wizard: Gtk.Stack, Boxes.UI {
private WizardPage _page;
public WizardPage page {
get { return _page; }
- private set {
+ set {
back_button.sensitive = (value != WizardPage.INTRODUCTION);
var forwards = value > page;
@@ -135,7 +134,7 @@ private class Boxes.Wizard: Gtk.Stack, Boxes.UI {
return;
_page = value;
- window.sidebar.wizard_sidebar.set_page (value);
+ window.wizard_dialog.sidebar.set_page (value);
visible_child_name = page_names[value];
if (value == WizardPage.SOURCE)
@@ -615,30 +614,12 @@ private class Boxes.Wizard: Gtk.Stack, Boxes.UI {
prepare (progress);
}
- public void setup_ui (AppWindow window) {
+ public void setup_ui (AppWindow window, WizardDialog dialog) {
this.window = window;
- cancel_button = window.topbar.wizard_toolbar.cancel_btn;
- cancel_button.clicked.connect (() => {
- cleanup ();
- wizard_source.page = SourcePage.MAIN;
- window.set_state (UIState.COLLECTION);
- });
- back_button = window.topbar.wizard_toolbar.back_btn;
- back_button.clicked.connect (() => {
- if (prepare_cancellable != null)
- prepare_cancellable.cancel ();
-
- page = page - 1;
- });
- continue_button = window.topbar.wizard_toolbar.continue_btn;
- continue_button.clicked.connect (() => {
- page = page + 1;
- });
- create_button = window.topbar.wizard_toolbar.create_btn;
- create_button.clicked.connect (() => {
- page = WizardPage.LAST;
- });
+ back_button = dialog.back_btn;
+ continue_button = dialog.continue_btn;
+ create_button = dialog.create_btn;
wizard_source.setup_ui (window);
}
@@ -653,6 +634,17 @@ private class Boxes.Wizard: Gtk.Stack, Boxes.UI {
page = WizardPage.PREPARATION;
}
+ public void cancel () {
+ cleanup ();
+ wizard_source.page = SourcePage.MAIN;
+ window.set_state (UIState.COLLECTION);
+ }
+
+ public void cancel_prepare () {
+ if (prepare_cancellable != null)
+ prepare_cancellable.cancel ();
+ }
+
private void ui_state_changed () {
if (ui_state != UIState.WIZARD)
return;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]