]> www.fi.muni.cz Git - evince.git/blobdiff - properties/ev-properties-view.c
Split the properties pages in two different objects, depend only on the
[evince.git] / properties / ev-properties-view.c
similarity index 55%
rename from shell/ev-properties.c
rename to properties/ev-properties-view.c
index d7974c0f1ef5b16bb3777e73075fd9cabac85196..297cbc5d5cf115bef2af3f3bb5a9cd5a96a9baa7 100644 (file)
 #include "config.h"
 #endif
 
-#include "ev-properties.h"
+#include "ev-properties-view.h"
 #include "ev-document-fonts.h"
-#include "ev-jobs.h"
-#include "ev-job-queue.h"
-#include "ev-page-cache.h"
 
 #include <glib/gi18n.h>
 #include <gtk/gtk.h>
 #include <sys/time.h>
 #include <string.h>
 
-enum
-{
-       FONT_NAME_COL,
-       NUM_COLS
-};
-
 typedef enum
 {
        TITLE_PROPERTY,
@@ -78,29 +69,22 @@ static const PropertyInfo properties_info[] = {
        { SECURITY_PROPERTY, "security" }
 };
 
-struct _EvProperties {
-       GObject base_instance;
+struct _EvPropertiesView {
+       GtkVBox base_instance;
 
        GladeXML *xml;
-
-       GtkWidget *dialog;
-       GtkWidget *fonts_treeview;
-       GtkWidget *fonts_progress_label;
-       GtkWidget *font_page;
-
-       EvDocument *document;
 };
 
-struct _EvPropertiesClass {
-       GObjectClass base_class;
+struct _EvPropertiesViewClass {
+       GtkVBoxClass base_class;
 };
 
-G_DEFINE_TYPE (EvProperties, ev_properties, G_TYPE_OBJECT)
+G_DEFINE_TYPE (EvPropertiesView, ev_properties_view, GTK_TYPE_VBOX)
 
 static void
-ev_properties_dispose (GObject *object)
+ev_properties_view_dispose (GObject *object)
 {
-       EvProperties *properties = EV_PROPERTIES (object);
+       EvPropertiesView *properties = EV_PROPERTIES_VIEW (object);
 
        if (properties->xml) {
                g_object_unref (properties->xml);
@@ -109,54 +93,16 @@ ev_properties_dispose (GObject *object)
 }
 
 static void
-ev_properties_class_init (EvPropertiesClass *properties_class)
+ev_properties_view_class_init (EvPropertiesViewClass *properties_class)
 {
        GObjectClass *g_object_class = G_OBJECT_CLASS (properties_class);
 
-       g_object_class->dispose = ev_properties_dispose;
-}
-
-static void
-dialog_destroy_cb (GtkWidget *dialog, EvProperties *properties)
-{
-       g_object_unref (properties);
-}
-
-static void
-ev_properties_init (EvProperties *properties)
-{
-       GladeXML *xml;
-       GtkCellRenderer *renderer;
-       GtkTreeViewColumn *column;
-
-       /* Create a new GladeXML object from XML file glade_file */
-       xml = glade_xml_new (DATADIR "/evince-properties.glade", NULL, NULL);
-       properties->xml = xml;
-       g_assert (xml != NULL);
-
-       properties->dialog = glade_xml_get_widget (xml, "properties_dialog");
-       properties->fonts_treeview = glade_xml_get_widget (xml, "fonts_treeview");
-       properties->fonts_progress_label = glade_xml_get_widget (xml, "font_progress_label");
-       properties->font_page = glade_xml_get_widget (xml, "fonts_page");
-
-       column = gtk_tree_view_column_new ();
-       gtk_tree_view_column_set_expand (GTK_TREE_VIEW_COLUMN (column), TRUE);
-       gtk_tree_view_append_column (GTK_TREE_VIEW (properties->fonts_treeview), column);
-
-       renderer = gtk_cell_renderer_text_new ();
-       gtk_tree_view_column_pack_start (GTK_TREE_VIEW_COLUMN (column), renderer, FALSE);
-       gtk_tree_view_column_set_title (GTK_TREE_VIEW_COLUMN (column), _("Name"));
-       gtk_tree_view_column_set_attributes (GTK_TREE_VIEW_COLUMN (column), renderer,
-                                            "text", EV_DOCUMENT_FONTS_COLUMN_NAME,
-                                            NULL);
-
-        g_signal_connect (properties->dialog, "destroy",
-                          G_CALLBACK (dialog_destroy_cb), properties);
+       g_object_class->dispose = ev_properties_view_dispose;
 }
 
 /* Returns a locale specific date and time representation */
 static char *
-ev_properties_format_date (GTime utime)
+ev_properties_view_format_date (GTime utime)
 {
        time_t time = (time_t) utime;
        struct tm t;
@@ -239,80 +185,12 @@ set_property (GladeXML *xml, Property property, const char *text)
        g_free (valid_text);
 }
 
-static void
-update_progress_label (GtkWidget *label, double progress)
-{
-       if (progress > 0) {
-               char *progress_text;
-               progress_text = g_strdup_printf (_("Gathering font information... %3d%%"),
-                                                (int) (progress * 100));
-               gtk_label_set_text (GTK_LABEL (label), progress_text);
-               g_free (progress_text);
-               gtk_widget_show (label);
-       } else {
-               gtk_widget_hide (label);
-       }
-}
-
-static void
-job_fonts_finished_cb (EvJob *job, EvProperties *properties)
-{      
-       EvDocumentFonts *document_fonts = EV_DOCUMENT_FONTS (job->document);
-       double progress;
-
-       progress = ev_document_fonts_get_progress (document_fonts);
-       update_progress_label (properties->fonts_progress_label, progress);
-
-       if (EV_JOB_FONTS (job)->scan_completed) {
-               g_signal_handlers_disconnect_by_func
-                               (job, job_fonts_finished_cb, properties);
-       } else {
-               GtkTreeModel *model;
-               EvJob *new_job;
-
-               model = gtk_tree_view_get_model
-                               (GTK_TREE_VIEW (properties->fonts_treeview));
-               ev_document_doc_mutex_lock ();
-               ev_document_fonts_fill_model (document_fonts, model);
-               ev_document_doc_mutex_unlock ();
-               new_job = ev_job_fonts_new (job->document);
-               ev_job_queue_add_job (job, EV_JOB_PRIORITY_LOW);
-               g_object_unref (new_job);
-       }
-}
-
-static void
-setup_fonts_view (EvProperties *properties)
-{
-       GtkTreeView *tree_view = GTK_TREE_VIEW (properties->fonts_treeview);
-       GtkListStore *list_store;
-       EvJob *job;
-
-       list_store = gtk_list_store_new (NUM_COLS, G_TYPE_STRING);
-       gtk_tree_view_set_model (tree_view, GTK_TREE_MODEL (list_store));
-
-       job = ev_job_fonts_new (properties->document);
-       g_signal_connect_object (job, "finished",
-                                G_CALLBACK (job_fonts_finished_cb),
-                                properties, 0);
-       ev_job_queue_add_job (job, EV_JOB_PRIORITY_LOW);
-       g_object_unref (job);
-}
-
 void
-ev_properties_set_document (EvProperties *properties,
-                           EvDocument   *document)
+ev_properties_view_set_info (EvPropertiesView *properties, const EvDocumentInfo *info)
 {
-       EvPageCache *page_cache;
        GladeXML *xml = properties->xml;
-       const EvDocumentInfo *info;
        char *text;
 
-       properties->document = document;
-
-       page_cache = ev_page_cache_get (document);
-       info = ev_page_cache_get_info (page_cache);
-
        if (info->fields_mask & EV_DOCUMENT_INFO_TITLE) {
                set_property (xml, TITLE_PROPERTY, info->title);
        }
@@ -332,12 +210,12 @@ ev_properties_set_document (EvProperties *properties,
                set_property (xml, CREATOR_PROPERTY, info->creator);
        }
        if (info->fields_mask & EV_DOCUMENT_INFO_CREATION_DATE) {
-               text = ev_properties_format_date (info->creation_date);
+               text = ev_properties_view_format_date (info->creation_date);
                set_property (xml, CREATION_DATE_PROPERTY, text);
                g_free (text);
        }
        if (info->fields_mask & EV_DOCUMENT_INFO_MOD_DATE) {
-               text = ev_properties_format_date (info->modified_date);
+               text = ev_properties_view_format_date (info->modified_date);
                set_property (xml, MOD_DATE_PROPERTY, text);
                g_free (text);
        }
@@ -356,31 +234,29 @@ ev_properties_set_document (EvProperties *properties,
        if (info->fields_mask & EV_DOCUMENT_INFO_SECURITY) {
                set_property (xml, SECURITY_PROPERTY, info->security);
        }
-
-       if (EV_IS_DOCUMENT_FONTS (document)) {
-               gtk_widget_show (properties->font_page);
-               setup_fonts_view (properties);
-       } else {
-               gtk_widget_hide (properties->font_page);
-       }
 }
 
-EvProperties *
-ev_properties_new ()
+static void
+ev_properties_view_init (EvPropertiesView *properties)
 {
-       EvProperties *properties;
+       GladeXML *xml;
 
-       properties = g_object_new (EV_TYPE_PROPERTIES, NULL);
+       /* Create a new GladeXML object from XML file glade_file */
+       xml = glade_xml_new (DATADIR "/evince-properties.glade", "general_page_root", NULL);
+       properties->xml = xml;
+       g_assert (xml != NULL);
 
-       return properties;
+       gtk_box_pack_start (GTK_BOX (properties),
+                           glade_xml_get_widget (xml, "general_page_root"),
+                           TRUE, TRUE, 0);
 }
 
-void
-ev_properties_show (EvProperties *properties, GtkWidget *parent)
+GtkWidget *
+ev_properties_view_new (void)
 {
-       gtk_window_set_transient_for (GTK_WINDOW (properties->dialog),
-                                     GTK_WINDOW (parent));
-       g_signal_connect (properties->dialog, "response",
-                         G_CALLBACK (gtk_widget_destroy), NULL);
-       gtk_widget_show (properties->dialog);
+       EvPropertiesView *properties;
+
+       properties = g_object_new (EV_TYPE_PROPERTIES, NULL);
+
+       return GTK_WIDGET (properties);
 }