[gedit/wip/libgedit-file-loading-saving-ui] New GeditFileLoader class



commit 1cc3551980c3d8a8b27f65f69d03b2cc77859be5
Author: Sébastien Wilmet <swilmet gnome org>
Date:   Thu Apr 2 14:35:36 2015 +0200

    New GeditFileLoader class
    
    The goal is to make the file loading UI code re-usable, so it can be
    used in other text editors.

 gedit/Makefile.am         |    2 +
 gedit/gedit-file-loader.c |  110 +++++++++++++++++++++++++++++++++++++++++++++
 gedit/gedit-file-loader.h |   59 ++++++++++++++++++++++++
 3 files changed, 171 insertions(+), 0 deletions(-)
---
diff --git a/gedit/Makefile.am b/gedit/Makefile.am
index c720e39..c531dd8 100644
--- a/gedit/Makefile.am
+++ b/gedit/Makefile.am
@@ -110,6 +110,7 @@ gedit_NOINST_H_FILES =                                      \
        gedit/gedit-open-document-selector-store.h      \
        gedit/gedit-file-chooser-dialog.h               \
        gedit/gedit-file-chooser-dialog-gtk.h           \
+       gedit/gedit-file-loader.h                       \
        gedit/gedit-highlight-mode-dialog.h             \
        gedit/gedit-highlight-mode-selector.h           \
        gedit/gedit-history-entry.h                     \
@@ -186,6 +187,7 @@ gedit_libgedit_c_files =                            \
        gedit/gedit-open-document-selector-store.c      \
        gedit/gedit-file-chooser-dialog.c               \
        gedit/gedit-file-chooser-dialog-gtk.c           \
+       gedit/gedit-file-loader.c                       \
        gedit/gedit-highlight-mode-dialog.c             \
        gedit/gedit-highlight-mode-selector.c           \
        gedit/gedit-history-entry.c                     \
diff --git a/gedit/gedit-file-loader.c b/gedit/gedit-file-loader.c
new file mode 100644
index 0000000..c12f5f2
--- /dev/null
+++ b/gedit/gedit-file-loader.c
@@ -0,0 +1,110 @@
+/*
+ * gedit-file-loader.c
+ * This file is part of gedit
+ *
+ * Copyright (C) 2015 - Sébastien Wilmet <swilmet gnome org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "gedit-file-loader.h"
+#include "gedit-progress-info-bar.h"
+
+/* When you modify this class, keep in mind that it must remain re-usable for
+ * other text editors.
+ * This class wraps GtkSourceFileLoader to add an info bar that shows the
+ * progress of the file loading, and handles errors by asking some questions to
+ * stop or relaunch the file loading with different options.
+ */
+
+struct _GeditFileLoaderPrivate
+{
+       /* GtkInfoBars can be added/removed shown/hidden in @info_bar. */
+       GtkGrid *info_bar;
+       GeditProgressInfoBar *progress_info_bar;
+       GtkInfoBar *error_info_bar;
+};
+
+G_DEFINE_TYPE_WITH_PRIVATE (GeditFileLoader, _gedit_file_loader, G_TYPE_OBJECT)
+
+static void
+_gedit_file_loader_dispose (GObject *object)
+{
+       GeditFileLoader *loader = GEDIT_FILE_LOADER (object);
+
+       if (loader->priv->progress_info_bar != NULL)
+       {
+               gtk_widget_destroy (GTK_WIDGET (loader->priv->progress_info_bar));
+               loader->priv->progress_info_bar = NULL;
+       }
+
+       if (loader->priv->error_info_bar != NULL)
+       {
+               gtk_widget_destroy (GTK_WIDGET (loader->priv->error_info_bar));
+               loader->priv->error_info_bar = NULL;
+       }
+
+       G_OBJECT_CLASS (_gedit_file_loader_parent_class)->dispose (object);
+}
+
+static void
+_gedit_file_loader_class_init (GeditFileLoaderClass *klass)
+{
+       GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+       object_class->dispose = _gedit_file_loader_dispose;
+}
+
+static void
+_gedit_file_loader_init (GeditFileLoader *loader)
+{
+       loader->priv = _gedit_file_loader_get_instance_private (loader);
+
+       loader->priv->info_bar = GTK_GRID (gtk_grid_new ());
+       gtk_orientable_set_orientation (GTK_ORIENTABLE (loader->priv->info_bar),
+                                       GTK_ORIENTATION_VERTICAL);
+       gtk_widget_show (GTK_WIDGET (loader->priv->info_bar);
+
+       loader->priv->progress_info_bar =
+               GEDIT_PROGRESS_INFO_BAR (gedit_progress_info_bar_new (NULL, NULL, TRUE));
+
+       gtk_container_add (GTK_CONTAINER (loader->priv->info_bar),
+                          GTK_WIDGET (loader->priv->progress_info_bar));
+
+       loader->priv->error_info_bar = GTK_INFO_BAR (gtk_info_bar_new ());
+
+       gtk_container_add (GTK_CONTAINER (loader->priv->info_bar),
+                          GTK_WIDGET (loader->priv->error_info_bar));
+}
+
+GeditFileLoader *
+_gedit_file_loader_new (void)
+{
+       return GEDIT_FILE_LOADER (g_object_new (GEDIT_TYPE_FILE_LOADER, NULL));
+}
+
+GtkWidget *
+_gedit_file_loader_get_info_bar (GeditFileLoader *loader)
+{
+       g_return_val_if_fail (GEDIT_IS_FILE_LOADER (loader), NULL);
+
+       return GTK_WIDGET (loader->priv->info_bar);
+}
+
+void
+_gedit_file_loader_load (GeditFileLoader *loader)
+{
+}
+
+/* ex:set ts=8 noet: */
diff --git a/gedit/gedit-file-loader.h b/gedit/gedit-file-loader.h
new file mode 100644
index 0000000..297ecb9
--- /dev/null
+++ b/gedit/gedit-file-loader.h
@@ -0,0 +1,59 @@
+/*
+ * gedit-file-loader.h
+ * This file is part of gedit
+ *
+ * Copyright (C) 2015 - Sébastien Wilmet <swilmet gnome org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef __GEDIT_FILE_LOADER_H__
+#define __GEDIT_FILE_LOADER_H__
+
+#include <gtksourceview/gtksource.h>
+
+G_BEGIN_DECLS
+
+#define GEDIT_TYPE_FILE_LOADER             (_gedit_file_loader_get_type ())
+#define GEDIT_FILE_LOADER(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEDIT_TYPE_FILE_LOADER, 
GeditFileLoader))
+#define GEDIT_FILE_LOADER_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST ((klass), GEDIT_TYPE_FILE_LOADER, 
GeditFileLoaderClass))
+#define GEDIT_IS_FILE_LOADER(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEDIT_TYPE_FILE_LOADER))
+#define GEDIT_IS_FILE_LOADER_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE ((klass), GEDIT_TYPE_FILE_LOADER))
+#define GEDIT_FILE_LOADER_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj), GEDIT_TYPE_FILE_LOADER, 
GeditFileLoaderClass))
+
+typedef struct _GeditFileLoader         GeditFileLoader;
+typedef struct _GeditFileLoaderClass    GeditFileLoaderClass;
+typedef struct _GeditFileLoaderPrivate  GeditFileLoaderPrivate;
+
+struct _GeditFileLoader
+{
+       GtkSourceFileLoader parent;
+
+       GeditFileLoaderPrivate *priv;
+};
+
+struct _GeditFileLoaderClass
+{
+       GtkSourceFileLoaderClass parent_class;
+};
+
+GType                   _gedit_file_loader_get_type                    (void) G_GNUC_CONST;
+
+GeditFileLoader                *_gedit_file_loader_new                         (void);
+
+G_END_DECLS
+
+#endif /* __GEDIT_FILE_LOADER_H__ */
+
+/* ex:set ts=8 noet: */


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