[gnome-builder/wip/device-selection] workbench: stub out a primitive device selector
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder/wip/device-selection] workbench: stub out a primitive device selector
- Date: Wed, 29 Apr 2015 03:25:22 +0000 (UTC)
commit c732dedb3d66592bde00dfbff4a89bb81dc9ce00
Author: Christian Hergert <christian hergert me>
Date: Tue Apr 28 20:25:03 2015 -0700
workbench: stub out a primitive device selector
** NOTE **
This ins't a real branch, nor is it the design we would be going with to
do this. I just wanted to see what it would take to map this stuff to
GListModel and, as you can see, it's quite easy.
Saving for later.
data/ui/gb-workbench.ui | 51 ++++++++++++++++++++++++++++++++++
src/workbench/gb-workbench-private.h | 1 +
src/workbench/gb-workbench.c | 50 +++++++++++++++++++++++++++++++++
3 files changed, 102 insertions(+), 0 deletions(-)
---
diff --git a/data/ui/gb-workbench.ui b/data/ui/gb-workbench.ui
index fb42fec..3f5b693 100644
--- a/data/ui/gb-workbench.ui
+++ b/data/ui/gb-workbench.ui
@@ -16,6 +16,33 @@
</object>
</child>
<child>
+ <object class="GtkMenuButton">
+ <property name="visible">true</property>
+ <property name="popover">device_popover</property>
+ <child>
+ <object class="GtkBox">
+ <property name="visible">true</property>
+ <property name="orientation">horizontal</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel">
+ <property name="label">stardust - x86_64-linux-gnu</property>
+ <property name="visible">true</property>
+ <property name="valign">baseline</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkArrow">
+ <property name="arrow-type">down</property>
+ <property name="valign">baseline</property>
+ <property name="visible">true</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
<object class="GtkMenuButton" id="gear_menu_button">
<property name="visible">true</property>
<style>
@@ -59,4 +86,28 @@
</object>
</child>
</template>
+ <object class="GtkPopover" id="device_popover">
+ <child>
+ <object class="GtkBox">
+ <property name="margin">12</property>
+ <property name="visible">true</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GbScrolledWindow">
+ <property name="shadow-type">in</property>
+ <property name="min-content-width">100</property>
+ <property name="max-content-width">500</property>
+ <property name="min-content-height">1</property>
+ <property name="max-content-height">500</property>
+ <property name="visible">true</property>
+ <child>
+ <object class="GtkListBox" id="devices_list_box">
+ <property name="visible">true</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
</interface>
diff --git a/src/workbench/gb-workbench-private.h b/src/workbench/gb-workbench-private.h
index 3d99018..66532da 100644
--- a/src/workbench/gb-workbench-private.h
+++ b/src/workbench/gb-workbench-private.h
@@ -50,6 +50,7 @@ struct _GbWorkbench
GeditMenuStackSwitcher *gear_menu_button;
GbSearchBox *search_box;
GtkStack *stack;
+ GtkListBox *devices_list_box;
gulong project_notify_name_handler;
diff --git a/src/workbench/gb-workbench.c b/src/workbench/gb-workbench.c
index 2a90fb2..a11f829 100644
--- a/src/workbench/gb-workbench.c
+++ b/src/workbench/gb-workbench.c
@@ -103,10 +103,52 @@ gb_workbench__context_restore_cb (GObject *object,
gtk_widget_grab_focus (GTK_WIDGET (self->editor_workspace));
}
+static GtkWidget *
+create_device_widget (gpointer item,
+ gpointer user_data)
+{
+ GbWorkbench *self = user_data;
+ IdeDevice *device = item;
+ GtkWidget *row;
+ GtkWidget *name;
+ GtkWidget *desc;
+
+ g_assert (IDE_IS_DEVICE (device));
+ g_assert (GB_IS_WORKBENCH (self));
+
+ row = g_object_new (GTK_TYPE_BOX,
+ "orientation", GTK_ORIENTATION_HORIZONTAL,
+ "visible", TRUE,
+ "spacing", 6,
+ "margin", 6,
+ NULL);
+
+ name = g_object_new (GTK_TYPE_LABEL,
+ "visible", TRUE,
+ "hexpand", TRUE,
+ "xalign", 0.0f,
+ "valign", GTK_ALIGN_BASELINE,
+ NULL);
+ g_object_bind_property (device, "display-name", name, "label", G_BINDING_SYNC_CREATE);
+ gtk_container_add (GTK_CONTAINER (row), name);
+
+ desc = g_object_new (GTK_TYPE_LABEL,
+ "visible", TRUE,
+ "valign", GTK_ALIGN_BASELINE,
+ "xalign", 1.0f,
+ NULL);
+ gtk_style_context_add_class (gtk_widget_get_style_context (desc), "dim-label");
+ g_object_bind_property (device, "system-type", desc, "label", G_BINDING_SYNC_CREATE);
+ gtk_container_add (GTK_CONTAINER (row), desc);
+
+ return row;
+}
+
static void
gb_workbench_connect_context (GbWorkbench *self,
IdeContext *context)
{
+ IdeDeviceManager *device_manager;
IdeProject *project;
g_assert (GB_IS_WORKBENCH (self));
@@ -121,6 +163,13 @@ gb_workbench_connect_context (GbWorkbench *self,
self,
G_CONNECT_SWAPPED);
gb_workbench__project_notify_name_cb (self, NULL, project);
+
+ device_manager = ide_context_get_device_manager (context);
+ gtk_list_box_bind_model (self->devices_list_box,
+ G_LIST_MODEL (device_manager),
+ create_device_widget,
+ self,
+ NULL);
}
static void
@@ -492,6 +541,7 @@ gb_workbench_class_init (GbWorkbenchClass *klass)
GB_WIDGET_CLASS_TEMPLATE (klass, "gb-workbench.ui");
GB_WIDGET_CLASS_BIND (klass, GbWorkbench, command_bar);
+ GB_WIDGET_CLASS_BIND (klass, GbWorkbench, devices_list_box);
GB_WIDGET_CLASS_BIND (klass, GbWorkbench, editor_workspace);
GB_WIDGET_CLASS_BIND (klass, GbWorkbench, gear_menu_button);
GB_WIDGET_CLASS_BIND (klass, GbWorkbench, search_box);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]