summaryrefslogtreecommitdiff
path: root/shell/ev-annotation-properties-dialog.c
diff options
context:
space:
mode:
Diffstat (limited to 'shell/ev-annotation-properties-dialog.c')
-rw-r--r--shell/ev-annotation-properties-dialog.c327
1 files changed, 327 insertions, 0 deletions
diff --git a/shell/ev-annotation-properties-dialog.c b/shell/ev-annotation-properties-dialog.c
new file mode 100644
index 00000000..8828eba4
--- /dev/null
+++ b/shell/ev-annotation-properties-dialog.c
@@ -0,0 +1,327 @@
+/* ev-annotation-properties-dialog.c
+ * this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2010 Carlos Garcia Campos <[email protected]>
+ *
+ * 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.
+ */
+
+#include <config.h>
+
+#include <glib/gi18n.h>
+
+#include "ev-annotation-properties-dialog.h"
+
+enum {
+ PROP_0,
+ PROP_ANNOT_TYPE
+};
+
+struct _EvAnnotationPropertiesDialog {
+ GtkDialog base_instance;
+
+ EvAnnotationType annot_type;
+ EvAnnotation *annot;
+
+ GtkWidget *table;
+
+ GtkWidget *author;
+ GtkWidget *color;
+ GtkWidget *opacity;
+ GtkWidget *popup_state;
+
+ /* Text Annotations */
+ GtkWidget *icon;
+};
+
+struct _EvAnnotationPropertiesDialogClass {
+ GtkDialogClass base_class;
+};
+
+G_DEFINE_TYPE (EvAnnotationPropertiesDialog, ev_annotation_properties_dialog, GTK_TYPE_DIALOG)
+
+static void
+ev_annotation_properties_dialog_dispose (GObject *object)
+{
+ EvAnnotationPropertiesDialog *dialog = EV_ANNOTATION_PROPERTIES_DIALOG (object);
+
+ if (dialog->annot) {
+ g_object_unref (dialog->annot);
+ dialog->annot = NULL;
+ }
+
+ G_OBJECT_CLASS (ev_annotation_properties_dialog_parent_class)->dispose (object);
+}
+
+static void
+ev_annotation_properties_dialog_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ EvAnnotationPropertiesDialog *dialog = EV_ANNOTATION_PROPERTIES_DIALOG (object);
+
+ switch (prop_id) {
+ case PROP_ANNOT_TYPE:
+ dialog->annot_type = g_value_get_enum (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ }
+}
+
+static void
+ev_annotation_properties_dialog_constructed (GObject *object)
+{
+ EvAnnotationPropertiesDialog *dialog = EV_ANNOTATION_PROPERTIES_DIALOG (object);
+ GtkWidget *contant_area = gtk_dialog_get_content_area (GTK_DIALOG (dialog));
+ GtkWidget *table = dialog->table;
+ GtkWidget *label;
+
+ contant_area = gtk_dialog_get_content_area (GTK_DIALOG (dialog));
+
+ switch (dialog->annot_type) {
+ case EV_ANNOTATION_TYPE_TEXT:
+ label = gtk_label_new (_("Icon:"));
+ gtk_misc_set_alignment (GTK_MISC (label), 0., 0.5);
+ gtk_table_attach (GTK_TABLE (table), label, 0, 1, 5, 6,
+ GTK_FILL, GTK_FILL, 0, 0);
+ gtk_widget_show (label);
+
+ dialog->icon = gtk_combo_box_new_text ();
+ gtk_combo_box_append_text (GTK_COMBO_BOX (dialog->icon), _("Note"));
+ gtk_combo_box_append_text (GTK_COMBO_BOX (dialog->icon), _("Comment"));
+ gtk_combo_box_append_text (GTK_COMBO_BOX (dialog->icon), _("Key"));
+ gtk_combo_box_append_text (GTK_COMBO_BOX (dialog->icon), _("Help"));
+ gtk_combo_box_append_text (GTK_COMBO_BOX (dialog->icon), _("New Paragraph"));
+ gtk_combo_box_append_text (GTK_COMBO_BOX (dialog->icon), _("Paragraph"));
+ gtk_combo_box_append_text (GTK_COMBO_BOX (dialog->icon), _("Insert"));
+ gtk_combo_box_append_text (GTK_COMBO_BOX (dialog->icon), _("Cross"));
+ gtk_combo_box_append_text (GTK_COMBO_BOX (dialog->icon), _("Circle"));
+ gtk_combo_box_append_text (GTK_COMBO_BOX (dialog->icon), _("Unknown"));
+ gtk_combo_box_set_active (GTK_COMBO_BOX (dialog->icon), 0);
+ gtk_table_attach (GTK_TABLE (table), dialog->icon,
+ 1, 2, 5, 6,
+ GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0);
+ gtk_widget_show (dialog->icon);
+
+ break;
+ case EV_ANNOTATION_TYPE_ATTACHMENT:
+ /* TODO */
+ default:
+ break;
+ }
+}
+
+static void
+ev_annotation_properties_dialog_init (EvAnnotationPropertiesDialog *annot_dialog)
+{
+ GtkDialog *dialog = GTK_DIALOG (annot_dialog);
+ GtkWidget *content_area;
+ GtkWidget *label;
+ GtkWidget *table;
+ GtkWidget *hbox;
+ gchar *markup;
+ GdkColor color = { 0, 65535, 65535, 0 };
+
+ gtk_window_set_title (GTK_WINDOW (annot_dialog), _("Annotation Properties"));
+ gtk_window_set_destroy_with_parent (GTK_WINDOW (annot_dialog), TRUE);
+ gtk_container_set_border_width (GTK_CONTAINER (annot_dialog), 5);
+ gtk_dialog_set_has_separator (dialog, FALSE);
+ gtk_dialog_add_buttons (dialog,
+ GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE,
+ GTK_STOCK_APPLY, GTK_RESPONSE_APPLY,
+ NULL);
+ gtk_dialog_set_default_response (dialog, GTK_RESPONSE_APPLY);
+
+ content_area = gtk_dialog_get_content_area (dialog);
+ gtk_box_set_spacing (GTK_BOX (content_area), 2);
+
+ table = gtk_table_new (5, 2, FALSE);
+ annot_dialog->table = table;
+ gtk_table_set_col_spacings (GTK_TABLE (table), 12);
+ gtk_table_set_row_spacings (GTK_TABLE (table), 6);
+ gtk_container_set_border_width (GTK_CONTAINER (table), 12);
+ gtk_box_pack_start (GTK_BOX (content_area), table, FALSE, FALSE, 0);
+ gtk_widget_show (table);
+
+ label = gtk_label_new (_("Author:"));
+ gtk_misc_set_alignment (GTK_MISC (label), 0., 0.5);
+ gtk_table_attach (GTK_TABLE (table), label, 0, 1, 0, 1,
+ GTK_FILL, GTK_FILL, 0, 0);
+ gtk_widget_show (label);
+
+ annot_dialog->author = gtk_entry_new ();
+ gtk_entry_set_text (GTK_ENTRY (annot_dialog->author), g_get_real_name ());
+ gtk_table_attach (GTK_TABLE (table), annot_dialog->author,
+ 1, 2, 0, 1,
+ GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0);
+ gtk_widget_show (annot_dialog->author);
+
+ label = gtk_label_new (_("Color:"));
+ gtk_misc_set_alignment (GTK_MISC (label), 0., 0.5);
+ gtk_table_attach (GTK_TABLE (table), label, 0, 1, 1, 2,
+ GTK_FILL, GTK_FILL, 0, 0);
+ gtk_widget_show (label);
+
+ annot_dialog->color = gtk_color_button_new_with_color (&color);
+ gtk_table_attach (GTK_TABLE (table), annot_dialog->color,
+ 1, 2, 1, 2,
+ GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0);
+ gtk_widget_show (annot_dialog->color);
+
+ label = gtk_label_new (_("Style:"));
+ gtk_misc_set_alignment (GTK_MISC (label), 0., 0.5);
+ gtk_table_attach (GTK_TABLE (table), label, 0, 1, 2, 3,
+ GTK_FILL, GTK_FILL, 0, 0);
+ gtk_widget_show (label);
+
+ annot_dialog->opacity = gtk_hscale_new_with_range (0, 100, 5);
+ gtk_range_set_value (GTK_RANGE (annot_dialog->opacity), 100);
+ gtk_table_attach (GTK_TABLE (table), annot_dialog->opacity,
+ 1, 2, 2, 3,
+ GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0);
+ gtk_widget_show (annot_dialog->opacity);
+
+ hbox = gtk_hbox_new (FALSE, 6);
+
+ label = gtk_label_new (NULL);
+ markup = g_strdup_printf ("<small>%s</small>", _("Transparent"));
+ gtk_label_set_markup (GTK_LABEL (label), markup);
+ g_free (markup);
+ gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
+ gtk_widget_show (label);
+
+ label = gtk_label_new (NULL);
+ markup = g_strdup_printf ("<small>%s</small>", _("Opaque"));
+ gtk_label_set_markup (GTK_LABEL (label), markup);
+ g_free (markup);
+ gtk_box_pack_end (GTK_BOX (hbox), label, FALSE, FALSE, 0);
+ gtk_widget_show (label);
+
+ gtk_table_attach (GTK_TABLE (table), hbox,
+ 1, 2, 3, 4,
+ GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0);
+ gtk_widget_show (hbox);
+
+ label = gtk_label_new (_("Initial window state:"));
+ gtk_misc_set_alignment (GTK_MISC (label), 0., 0.5);
+ gtk_table_attach (GTK_TABLE (table), label, 0, 1, 4, 5,
+ GTK_FILL, GTK_FILL, 0, 0);
+ gtk_widget_show (label);
+
+ annot_dialog->popup_state = gtk_combo_box_new_text ();
+ gtk_combo_box_append_text (GTK_COMBO_BOX (annot_dialog->popup_state), _("Open"));
+ gtk_combo_box_append_text (GTK_COMBO_BOX (annot_dialog->popup_state), _("Close"));
+ gtk_combo_box_set_active (GTK_COMBO_BOX (annot_dialog->popup_state), 1);
+ gtk_table_attach (GTK_TABLE (table), annot_dialog->popup_state,
+ 1, 2, 4, 5,
+ GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0);
+ gtk_widget_show (annot_dialog->popup_state);
+}
+
+static void
+ev_annotation_properties_dialog_class_init (EvAnnotationPropertiesDialogClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->dispose = ev_annotation_properties_dialog_dispose;
+ object_class->constructed = ev_annotation_properties_dialog_constructed;
+ object_class->set_property = ev_annotation_properties_dialog_set_property;
+
+ g_object_class_install_property (object_class,
+ PROP_ANNOT_TYPE,
+ g_param_spec_enum ("annot-type",
+ "AnnotType",
+ "The type of annotation",
+ EV_TYPE_ANNOTATION_TYPE,
+ EV_ANNOTATION_TYPE_TEXT,
+ G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
+}
+
+GtkWidget *
+ev_annotation_properties_dialog_new (EvAnnotationType annot_type)
+{
+ return GTK_WIDGET (g_object_new (EV_TYPE_ANNOTATION_PROPERTIES_DIALOG,
+ "annot-type", annot_type,
+ NULL));
+}
+
+GtkWidget *
+ev_annotation_properties_dialog_new_with_annotation (EvAnnotation *annot)
+{
+ EvAnnotationPropertiesDialog *dialog;
+ const gchar *label;
+ gdouble opacity;
+ gboolean is_open;
+ GdkColor color;
+
+ dialog = (EvAnnotationPropertiesDialog *)ev_annotation_properties_dialog_new (ev_annotation_get_annotation_type (annot));
+ dialog->annot = g_object_ref (annot);
+
+ label = ev_annotation_markup_get_label (EV_ANNOTATION_MARKUP (annot));
+ if (label)
+ gtk_entry_set_text (GTK_ENTRY (dialog->author), label);
+
+ ev_annotation_get_color (annot, &color);
+ gtk_color_button_set_color (GTK_COLOR_BUTTON (dialog->color), &color);
+
+ opacity = ev_annotation_markup_get_opacity (EV_ANNOTATION_MARKUP (annot));
+ gtk_range_set_value (GTK_RANGE (dialog->opacity), opacity * 100);
+
+ is_open = ev_annotation_markup_get_popup_is_open (EV_ANNOTATION_MARKUP (annot));
+ gtk_combo_box_set_active (GTK_COMBO_BOX (dialog->popup_state),
+ is_open ? 0 : 1);
+
+ if (EV_IS_ANNOTATION_TEXT (annot)) {
+ EvAnnotationText *annot_text = EV_ANNOTATION_TEXT (annot);
+
+ gtk_combo_box_set_active (GTK_COMBO_BOX (dialog->icon),
+ ev_annotation_text_get_icon (annot_text));
+ }
+
+ return GTK_WIDGET (dialog);
+}
+
+const gchar *
+ev_annotation_properties_dialog_get_author (EvAnnotationPropertiesDialog *dialog)
+{
+ return gtk_entry_get_text (GTK_ENTRY (dialog->author));
+}
+
+void
+ev_annotation_properties_dialog_get_color (EvAnnotationPropertiesDialog *dialog,
+ GdkColor *color)
+{
+ gtk_color_button_get_color (GTK_COLOR_BUTTON (dialog->color), color);
+}
+
+gdouble
+ev_annotation_properties_dialog_get_opacity (EvAnnotationPropertiesDialog *dialog)
+{
+ return gtk_range_get_value (GTK_RANGE (dialog->opacity)) / 100;
+}
+
+gboolean
+ev_annotation_properties_dialog_get_popup_is_open (EvAnnotationPropertiesDialog *dialog)
+{
+ return gtk_combo_box_get_active (GTK_COMBO_BOX (dialog->popup_state)) == 0;
+}
+
+EvAnnotationTextIcon
+ev_annotation_properties_dialog_get_text_icon (EvAnnotationPropertiesDialog *dialog)
+{
+ return gtk_combo_box_get_active (GTK_COMBO_BOX (dialog->icon));
+}