Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/shell
diff options
context:
space:
mode:
authorMarco Pesenti Gritti <mpg@redhat.com>2005-06-03 17:57:18 (GMT)
committer Marco Pesenti Gritti <marco@src.gnome.org>2005-06-03 17:57:18 (GMT)
commitf84660311ba8807c6223178ab3f2515b209d1a57 (patch)
tree476c943b9cbb13828c5ee6aee62197e8c5f9601f /shell
parent4e8c27b1594fbfc20df693cb25537da8fad9cde4 (diff)
Initial go at file properties. Patch by Emil Soleyman-Zomalan
2005-06-03 Marco Pesenti Gritti <mpg@redhat.com> * backend/ev-document-info.h: * data/Makefile.am: * data/evince-ui.xml: * pdf/ev-poppler.cc: * shell/Makefile.am: * shell/ev-window.c: (update_action_sensitivity), (ev_window_cmd_file_properties): Initial go at file properties. Patch by Emil Soleyman-Zomalan <emil@soleyman.com>. Needs love see #169583
Diffstat (limited to 'shell')
-rw-r--r--shell/Makefile.am2
-rw-r--r--shell/ev-properties.c140
-rw-r--r--shell/ev-properties.h53
-rw-r--r--shell/ev-window.c16
4 files changed, 210 insertions, 1 deletions
diff --git a/shell/Makefile.am b/shell/Makefile.am
index bd104e8..7668e97 100644
--- a/shell/Makefile.am
+++ b/shell/Makefile.am
@@ -70,6 +70,8 @@ evince_SOURCES= \
ev-pixbuf-cache.h \
ev-print-job.c \
ev-print-job.h \
+ ev-properties.c \
+ ev-properties.h \
ev-utils.c \
ev-utils.h \
ev-view.c \
diff --git a/shell/ev-properties.c b/shell/ev-properties.c
new file mode 100644
index 0000000..995de60
--- /dev/null
+++ b/shell/ev-properties.c
@@ -0,0 +1,140 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; c-indent-level: 8 -*- */
+/* this file is part of evince, a gnome document viewer
+ *
+ * Copyright (C) 2005 Red Hat, Inc
+ *
+ * Evince 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.
+ *
+ * Evince 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "ev-properties.h"
+
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+#include <glade/glade.h>
+
+GtkDialog *
+ev_properties_new (EvDocument *document,
+ GtkWidget *toplevel)
+{
+ const char *glade_file = DATADIR "/evince-properties.glade";
+ GladeXML *xml;
+ GtkWidget *dialog = NULL;
+ EvDocumentInfo *info;
+ GtkWidget *title, *subject, *author, *keywords, *producer, *creator;
+ GtkWidget *created, *modified, *security, *version, *pages, *optimized;
+ gchar *n_pages, **format_str, *pdf_version;
+ gchar *creation_date, *modified_date;
+ gchar *secured_document;
+
+ /* Create a new GladeXML object from XML file glade_file */
+ xml = glade_xml_new (glade_file, NULL, NULL);
+ g_return_val_if_fail (xml != NULL, NULL);
+
+ /* Retrieve the document structure */
+ info = ev_document_get_info (document);
+
+ /* Assign variables to labels */
+ dialog = glade_xml_get_widget (xml, "properties_dialog");
+ title = glade_xml_get_widget (xml, "title");
+ subject = glade_xml_get_widget (xml, "subject");
+ author = glade_xml_get_widget (xml, "author");
+ keywords = glade_xml_get_widget (xml, "keywords");
+ producer = glade_xml_get_widget (xml, "producer");
+ creator = glade_xml_get_widget (xml, "creator");
+ created = glade_xml_get_widget (xml, "created");
+ modified = glade_xml_get_widget (xml, "modified");
+ security = glade_xml_get_widget (xml, "security");
+ version = glade_xml_get_widget (xml, "version");
+ pages = glade_xml_get_widget (xml, "pages");
+ optimized = glade_xml_get_widget (xml, "optimized");
+
+ /* Number of pages */
+ n_pages = g_strdup_printf (_("%d"), ev_document_get_n_pages (document));
+
+ /* PDF version */
+ format_str = g_strsplit (info->format, "-", 2);
+ pdf_version = g_strdup_printf (_("%s"), format_str[1]);
+
+ /* Creation and modified date */
+ creation_date = ev_properties_format_date ((GTime) info->creation_date);
+ modified_date = ev_properties_format_date ((GTime) info->modified_date);
+
+ /* Does the document have security? */
+ if (ev_document_security_has_document_security (EV_DOCUMENT_SECURITY (document))) {
+ secured_document = "Yes";
+ } else {
+ secured_document = "No";
+ }
+
+ /* Shorten label values to fit window size by ellipsizing */
+ gtk_label_set_ellipsize (GTK_LABEL (title), PANGO_ELLIPSIZE_END);
+ gtk_label_set_ellipsize (GTK_LABEL (keywords), PANGO_ELLIPSIZE_END);
+
+ /* Assign values to label fields */
+ gtk_label_set_text (GTK_LABEL (title), info->title);
+ gtk_label_set_text (GTK_LABEL (subject), info->subject);
+ gtk_label_set_text (GTK_LABEL (author), info->author);
+ gtk_label_set_text (GTK_LABEL (keywords), info->keywords);
+ gtk_label_set_text (GTK_LABEL (producer), info->producer);
+ gtk_label_set_text (GTK_LABEL (creator), info->creator);
+ gtk_label_set_text (GTK_LABEL (created), creation_date);
+ gtk_label_set_text (GTK_LABEL (modified), modified_date);
+ gtk_label_set_text (GTK_LABEL (security), secured_document);
+ gtk_label_set_text (GTK_LABEL (version), pdf_version);
+ gtk_label_set_text (GTK_LABEL (pages), n_pages);
+ gtk_label_set_text (GTK_LABEL (optimized), info->linearized);
+
+ /* Clean up */
+ g_strfreev (format_str);
+ g_free (n_pages);
+ g_free (pdf_version);
+ g_free (creation_date);
+ g_free (modified_date);
+
+ return GTK_DIALOG (dialog);
+}
+
+/* Returns a locale specific date and time representation */
+gchar *
+ev_properties_format_date (GTime utime)
+{
+ struct tm *time;
+ gchar *date_string;
+
+ date_string = g_new0 (char, 101);
+
+ time = localtime ((const time_t *) &utime);
+ my_strftime (date_string, 100, "%c", time);
+
+ return date_string;
+}
+
+/* Some buggy versions of gcc complain about the use of %c:
+ * warning: `%c' yields only last 2 digits of year in some locales.
+ *
+ * This is a relatively clean one is to add an intermediate
+ * function thanks to the strftime(3) manpage
+ */
+size_t
+my_strftime (char *s, size_t max,
+ const char *fmt,
+ const struct tm *tm)
+{
+ return strftime (s, max, fmt, tm);
+}
diff --git a/shell/ev-properties.h b/shell/ev-properties.h
new file mode 100644
index 0000000..0d0eaf8
--- /dev/null
+++ b/shell/ev-properties.h
@@ -0,0 +1,53 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; c-indent-level: 8 -*- */
+/* this file is part of evince, a gnome document viewer
+ *
+ * Copyright (C) 2005 Red Hat, Inc
+ *
+ * Evince 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.
+ *
+ * Evince 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __EV_PROPERTIES_H__
+#define __EV_PROPERTIES_H__
+
+#include "ev-document.h"
+#include "ev-document-security.h"
+#include "ev-window.h"
+
+#include <time.h>
+#include <sys/time.h>
+#include <gtk/gtkdialog.h>
+#include <gtk/gtkwidget.h>
+#include <gtk/gtkwindow.h>
+
+G_BEGIN_DECLS
+
+typedef struct _EvProperties EvProperties;
+
+struct _EvProperties {
+ GtkDialog parent;
+};
+
+GtkDialog *ev_properties_new (EvDocument *document,
+ GtkWidget *toplevel);
+
+gchar *ev_properties_format_date (GTime utime);
+
+size_t my_strftime (char *s, size_t max,
+ const char *fmt,
+ const struct tm *tm);
+
+G_END_DECLS
+
+#endif /* __EV_PROPERTIES_H__ */
diff --git a/shell/ev-window.c b/shell/ev-window.c
index c5cfac6..b94871b 100644
--- a/shell/ev-window.c
+++ b/shell/ev-window.c
@@ -37,6 +37,7 @@
#include "ev-password.h"
#include "ev-password-view.h"
#include "ev-print-job.h"
+#include "ev-properties.h"
#include "ev-document-thumbnails.h"
#include "ev-document-links.h"
#include "ev-document-types.h"
@@ -218,10 +219,10 @@ update_action_sensitivity (EvWindow *ev_window)
/* "FileOpen": always sensitive */
set_action_sensitive (ev_window, "FileSaveAs", has_document && ok_to_copy);
set_action_sensitive (ev_window, "FilePrint", has_pages && ok_to_print);
+ set_action_sensitive (ev_window, "FileProperties", has_document);
/* "FileCloseWindow": always sensitive */
/* Edit menu */
-
sensitive = has_pages && ev_document_can_get_text (document);
set_action_sensitive (ev_window, "EditCopy", sensitive && ok_to_copy);
set_action_sensitive (ev_window, "EditSelectAll", sensitive && ok_to_copy);
@@ -1181,6 +1182,16 @@ ev_window_cmd_file_print (GtkAction *action, EvWindow *ev_window)
}
static void
+ev_window_cmd_file_properties (GtkAction *action, EvWindow *ev_window)
+{
+ GtkDialog *dialog;
+
+ dialog = ev_properties_new (ev_window->priv->document, GTK_WIDGET (ev_window));
+ gtk_dialog_run (dialog);
+ gtk_widget_destroy (GTK_WIDGET (dialog));
+}
+
+static void
ev_window_cmd_file_close_window (GtkAction *action, EvWindow *ev_window)
{
g_return_if_fail (EV_IS_WINDOW (ev_window));
@@ -2351,6 +2362,9 @@ static const GtkActionEntry entries[] = {
{ "FilePrint", GTK_STOCK_PRINT, N_("Print..."), "<control>P",
N_("Print this document"),
G_CALLBACK (ev_window_cmd_file_print) },
+ { "FileProperties", GTK_STOCK_PROPERTIES, N_("Properties"), "<alt>Return",
+ N_("View the properties of this document"),
+ G_CALLBACK (ev_window_cmd_file_properties) },
{ "FileCloseWindow", GTK_STOCK_CLOSE, NULL, "<control>W",
N_("Close this window"),
G_CALLBACK (ev_window_cmd_file_close_window) },