[gnome-builder] greeter: add basic state transition for object selection
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] greeter: add basic state transition for object selection
- Date: Thu, 21 May 2015 07:18:14 +0000 (UTC)
commit c31d3002da375219b763b9ba231c6012361630b8
Author: Christian Hergert <christian hergert me>
Date: Thu May 21 00:15:37 2015 -0700
greeter: add basic state transition for object selection
We still need to plumb the object selection in the rows, and deal with
removal, but this gets the basic state machine in place.
data/ui/gb-greeter-window.ui | 84 ++++++++++++++++++++++++++++++++++++--
src/greeter/gb-greeter-window.c | 14 ++++++-
2 files changed, 91 insertions(+), 7 deletions(-)
---
diff --git a/data/ui/gb-greeter-window.ui b/data/ui/gb-greeter-window.ui
index 25392e2..1aef956 100644
--- a/data/ui/gb-greeter-window.ui
+++ b/data/ui/gb-greeter-window.ui
@@ -6,11 +6,27 @@
<property name="default-height">800</property>
<child type="titlebar">
<object class="GtkHeaderBar" id="header_bar">
- <property name="show-close-button">true</property>
- <property name="title" translatable="yes">Select a Project</property>
<property name="visible">true</property>
+ <child type="title">
+ <object class="GtkStack" id="title_stack">
+ <property name="visible">true</property>
+ <property name="transition-type">crossfade</property>
+ <child>
+ <object class="GtkLabel" id="browse_title">
+ <property name="visible">true</property>
+ <property name="label" translatable="yes">Select a Project</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="selection_title">
+ <property name="visible">true</property>
+ <property name="label" translatable="yes">Click an item to select</property>
+ </object>
+ </child>
+ </object>
+ </child>
<child>
- <object class="GtkButton">
+ <object class="GtkButton" id="new_button">
<property name="action-name">app.new-project</property>
<property name="visible">true</property>
<property name="label" translatable="yes">_New</property>
@@ -38,13 +54,14 @@
</child>
</object>
<packing>
- <property name="position">1</property>
+ <property name="position">2</property>
<property name="pack-type">end</property>
</packing>
</child>
<child>
<object class="GtkToggleButton" id="selection_button">
- <property name="visible">false</property>
+ <property name="action-name">win.state</property>
+ <property name="action-target">'selection'</property>
<style>
<class name="image-button"/>
</style>
@@ -56,6 +73,21 @@
</child>
</object>
<packing>
+ <property name="position">1</property>
+ <property name="pack-type">end</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="cancel_button">
+ <property name="label" translatable="yes">_Cancel</property>
+ <property name="use-underline">true</property>
+ <property name="action-name">win.state</property>
+ <property name="action-target">'browse'</property>
+ <style>
+ <class name="text-button"/>
+ </style>
+ </object>
+ <packing>
<property name="position">0</property>
<property name="pack-type">end</property>
</packing>
@@ -195,6 +227,48 @@
</object>
</child>
</template>
+ <object class="EggStateMachine" id="state_machine">
+ <property name="state">browse</property>
+ <states>
+ <state name="browse">
+ <object id="header_bar">
+ <property name="show-close-button">true</property>
+ </object>
+ <object id="title_stack">
+ <property name="visible-child">browse_title</property>
+ </object>
+ <object id="cancel_button">
+ <property name="visible">false</property>
+ </object>
+ <object id="selection_button">
+ <property name="visible">true</property>
+ </object>
+ <object id="new_button">
+ <property name="visible">true</property>
+ </object>
+ </state>
+ <state name="selection">
+ <object id="header_bar">
+ <property name="show-close-button">false</property>
+ <style>
+ <class name="selection-mode"/>
+ </style>
+ </object>
+ <object id="title_stack">
+ <property name="visible-child">selection_title</property>
+ </object>
+ <object id="cancel_button">
+ <property name="visible">true</property>
+ </object>
+ <object id="selection_button">
+ <property name="visible">false</property>
+ </object>
+ <object id="new_button">
+ <property name="visible">false</property>
+ </object>
+ </state>
+ </states>
+ </object>
<object class="GtkSizeGroup">
<property name="mode">horizontal</property>
<widgets>
diff --git a/src/greeter/gb-greeter-window.c b/src/greeter/gb-greeter-window.c
index 98979a4..c20db10 100644
--- a/src/greeter/gb-greeter-window.c
+++ b/src/greeter/gb-greeter-window.c
@@ -22,6 +22,7 @@
#include <ide.h>
#include "egg-signal-group.h"
+#include "egg-state-machine.h"
#include "gb-application.h"
#include "gb-greeter-project-row.h"
@@ -45,6 +46,7 @@ struct _GbGreeterWindow
GtkBox *other_projects_container;
GtkListBox *other_projects_list_box;
GtkSearchEntry *search_entry;
+ EggStateMachine *state_machine;
};
G_DEFINE_TYPE (GbGreeterWindow, gb_greeter_window, GTK_TYPE_APPLICATION_WINDOW)
@@ -448,8 +450,8 @@ gb_greeter_window_class_init (GbGreeterWindowClass *klass)
_("The recent projects that have been mined."),
IDE_TYPE_RECENT_PROJECTS,
(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- g_object_class_install_property (object_class, PROP_RECENT_PROJECTS,
- gParamSpecs [PROP_RECENT_PROJECTS]);
+
+ g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/builder/ui/gb-greeter-window.ui");
gtk_widget_class_bind_template_child (widget_class, GbGreeterWindow, header_bar);
@@ -458,8 +460,10 @@ gb_greeter_window_class_init (GbGreeterWindowClass *klass)
gtk_widget_class_bind_template_child (widget_class, GbGreeterWindow, other_projects_container);
gtk_widget_class_bind_template_child (widget_class, GbGreeterWindow, other_projects_list_box);
gtk_widget_class_bind_template_child (widget_class, GbGreeterWindow, search_entry);
+ gtk_widget_class_bind_template_child (widget_class, GbGreeterWindow, state_machine);
gtk_widget_class_bind_template_child (widget_class, GbGreeterWindow, viewport);
+ g_type_ensure (EGG_TYPE_STATE_MACHINE);
g_type_ensure (GB_TYPE_GREETER_PROJECT_ROW);
g_type_ensure (GB_TYPE_SCROLLED_WINDOW);
}
@@ -467,6 +471,8 @@ gb_greeter_window_class_init (GbGreeterWindowClass *klass)
static void
gb_greeter_window_init (GbGreeterWindow *self)
{
+ GAction *action;
+
self->signal_group = egg_signal_group_new (IDE_TYPE_RECENT_PROJECTS);
egg_signal_group_connect_object (self->signal_group,
"items-changed",
@@ -525,4 +531,8 @@ gb_greeter_window_init (GbGreeterWindow *self)
gtk_list_box_set_filter_func (self->other_projects_list_box,
gb_greeter_window_filter_row,
self, NULL);
+
+ action = egg_state_machine_create_action (self->state_machine, "state");
+ g_action_map_add_action (G_ACTION_MAP (self), action);
+ g_object_unref (action);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]