summaryrefslogtreecommitdiff
path: root/gladeui/glade-design-view.c
diff options
context:
space:
mode:
authorTristan Van Berkom <tristan.van.berkom@gmail.com>2010-12-22 17:13:41 +0900
committerTristan Van Berkom <tristan.van.berkom@gmail.com>2010-12-22 17:14:52 +0900
commit3f04cb3e4deb60b2bbb3c8db1506e94a61e75006 (patch)
tree71fde6cf6f8ebfc72eedb0cf97c8f8fc6e09cdb6 /gladeui/glade-design-view.c
parentd1fbe27908253c8f825715e459435967c88e35c9 (diff)
downloadglade-3f04cb3e4deb60b2bbb3c8db1506e94a61e75006.tar.gz
* gladeui/glade-project.c: Added "parse-began" signal
* gladeui/glade-design-view.c: Hide workspace and show load progress while loading so that one cannot access project widgets during the load (insensitive workspace was problematic and causing some loaded project windows to be permanently insensitive). * src/glade-window.c: Avoid any messups during project load, cannot close projects while they are loading, etc.
Diffstat (limited to 'gladeui/glade-design-view.c')
-rw-r--r--gladeui/glade-design-view.c77
1 files changed, 67 insertions, 10 deletions
diff --git a/gladeui/glade-design-view.c b/gladeui/glade-design-view.c
index e7689f9e..d50052f9 100644
--- a/gladeui/glade-design-view.c
+++ b/gladeui/glade-design-view.c
@@ -57,6 +57,11 @@ struct _GladeDesignViewPrivate
GtkWidget *layout;
GladeProject *project;
+
+ GtkWidget *scrolled_window;
+
+ GtkWidget *progress;
+ GtkWidget *progress_window;
};
static GtkVBoxClass *parent_class = NULL;
@@ -64,15 +69,53 @@ static GtkVBoxClass *parent_class = NULL;
G_DEFINE_TYPE(GladeDesignView, glade_design_view, GTK_TYPE_VBOX)
+
+static void
+glade_design_view_parse_began (GladeProject *project,
+ GladeDesignView *view)
+{
+ gtk_widget_hide (view->priv->scrolled_window);
+ gtk_widget_show (view->priv->progress_window);
+}
+
+static void
+glade_design_view_parse_finished (GladeProject *project,
+ GladeDesignView *view)
+{
+ gtk_widget_hide (view->priv->progress_window);
+ gtk_widget_show (view->priv->scrolled_window);
+}
+
+static void
+glade_design_view_load_progress (GladeProject *project,
+ gint total,
+ gint step,
+ GladeDesignView *view)
+{
+ gchar *path;
+ gchar *str;
+
+ path = glade_utils_replace_home_dir_with_tilde (glade_project_get_path (project));
+ str = g_strdup_printf (_("Loading %s: loaded %d of %d objects"), path, step, total);
+ gtk_progress_bar_set_text (GTK_PROGRESS_BAR (view->priv->progress), str);
+ g_free (str);
+ g_free (path);
+
+ gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (view->priv->progress), step * 1.0 / total);
+}
+
static void
glade_design_view_set_project (GladeDesignView *view, GladeProject *project)
{
g_return_if_fail (GLADE_IS_PROJECT (project));
view->priv->project = project;
-
- g_object_set_data (G_OBJECT (view->priv->project), GLADE_DESIGN_VIEW_KEY, view);
+ g_signal_connect (project, "parse-began", G_CALLBACK (glade_design_view_parse_began), view);
+ g_signal_connect (project, "parse-finished", G_CALLBACK (glade_design_view_parse_finished), view);
+ g_signal_connect (project, "load-progress", G_CALLBACK (glade_design_view_load_progress), view);
+
+ g_object_set_data (G_OBJECT (view->priv->project), GLADE_DESIGN_VIEW_KEY, view);
}
static void
@@ -112,28 +155,42 @@ glade_design_view_get_property (GObject *object,
static void
glade_design_view_init (GladeDesignView *view)
{
- GtkWidget *sw;
- GtkWidget *viewport;
+ GtkWidget *viewport, *filler;
view->priv = GLADE_DESIGN_VIEW_GET_PRIVATE (view);
view->priv->project = NULL;
view->priv->layout = glade_design_layout_new ();
- sw = gtk_scrolled_window_new (NULL, NULL);
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
- gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (sw), GTK_SHADOW_IN);
+ view->priv->scrolled_window = gtk_scrolled_window_new (NULL, NULL);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (view->priv->scrolled_window),
+ GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+ gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (view->priv->scrolled_window),
+ GTK_SHADOW_IN);
viewport = gtk_viewport_new (NULL, NULL);
gtk_viewport_set_shadow_type (GTK_VIEWPORT (viewport), GTK_SHADOW_NONE);
gtk_container_add (GTK_CONTAINER (viewport), view->priv->layout);
- gtk_container_add (GTK_CONTAINER (sw), viewport);
+ gtk_container_add (GTK_CONTAINER (view->priv->scrolled_window), viewport);
- gtk_widget_show (sw);
+ gtk_widget_show (view->priv->scrolled_window);
gtk_widget_show (viewport);
gtk_widget_show (view->priv->layout);
- gtk_box_pack_start (GTK_BOX (view), sw, TRUE, TRUE, 0);
+ gtk_box_pack_start (GTK_BOX (view), view->priv->scrolled_window, TRUE, TRUE, 0);
+
+ /* The progress window */
+ view->priv->progress_window = gtk_vbox_new (FALSE, 0);
+ filler = gtk_label_new (NULL);
+ gtk_widget_show (filler);
+ gtk_box_pack_start (GTK_BOX (view->priv->progress_window), filler, TRUE, TRUE, 0);
+ view->priv->progress = gtk_progress_bar_new ();
+ gtk_widget_show (view->priv->progress);
+ gtk_box_pack_start (GTK_BOX (view->priv->progress_window), view->priv->progress, FALSE, TRUE, 0);
+ filler = gtk_label_new (NULL);
+ gtk_widget_show (filler);
+ gtk_box_pack_start (GTK_BOX (view->priv->progress_window), filler, TRUE, TRUE, 0);
+ gtk_box_pack_start (GTK_BOX (view), view->priv->progress_window, TRUE, TRUE, 0);
gtk_container_set_border_width (GTK_CONTAINER (view), 0);
}