Code

Merge and cleanup of GSoC C++-ification project.
[inkscape.git] / src / dialogs / item-properties.cpp
index 808775786b9a4fb5c6013e043ec2c3a1ffc790cc..8b5ac1784ce9bd29d59b9f22147c572ea5406b5f 100644 (file)
@@ -1,12 +1,11 @@
-#define __SP_ITEM_PROPERTIES_C__
-
-/*
- * Object properties dialog
- *
- * Authors:
+/** @file
+ * @brief Object properties dialog
+ */
+/* Authors:
  *   Lauris Kaplinski <lauris@kaplinski.com>
  *   bulia byak <buliabyak@users.sf.net>
  *   Johan Engelen <goejendaagh@zonnet.nl>
+ *   Abhishek Sharma
  *
  * Copyright (C) 1999-2006 Authors
  * Copyright (C) 2001 Ximian, Inc.
 #include <gtk/gtkhbox.h>
 #include <gtk/gtktable.h>
 #include <gtk/gtkcheckbutton.h>
-#include <gtk/gtkspinbutton.h>
+#include <gtk/gtk.h>
 #include <gtk/gtklabel.h>
 #include <gtk/gtkframe.h>
+#include <gtk/gtkexpander.h>
 #include <gtk/gtktextview.h>
 #include <gtk/gtktooltips.h>
 
+#include "../desktop-handles.h"
+#include "dialog-events.h"
+#include "../document.h"
 #include <glibmm/i18n.h>
-#include "helper/window.h"
-#include "../widgets/sp-widget.h"
+#include "../helper/window.h"
 #include "../inkscape.h"
-#include "../document.h"
-#include "../desktop-handles.h"
+#include "../interface.h"
+#include "../macros.h"
+#include "../preferences.h"
 #include "../selection.h"
 #include "../sp-item.h"
-#include "../macros.h"
 #include "../verbs.h"
-#include "../interface.h"
+#include "../widgets/sp-attribute-widget.h"
+#include "../widgets/sp-widget.h"
 
-#include "dialog-events.h"
-#include "../preferences.h"
+using Inkscape::DocumentUndo;
 
 #define MIN_ONSCREEN_DISTANCE 50
 
@@ -93,7 +95,7 @@ GtkWidget *
 sp_item_widget_new (void)
 {
 
-    GtkWidget *spw, *vb, *t, *cb, *l, *f, *tf, *pb;
+    GtkWidget *spw, *vb, *t, *cb, *l, *f, *tf, *pb, *int_expander, *int_label;
     GtkTextBuffer *desc_buffer;
 
     GtkTooltips *tt = gtk_tooltips_new();
@@ -118,7 +120,7 @@ sp_item_widget_new (void)
 
 
     /* Create the label for the object id */
-    l = gtk_label_new_with_mnemonic (_("_Id"));
+    l = gtk_label_new_with_mnemonic (_("_ID:"));
     gtk_misc_set_alignment (GTK_MISC (l), 1, 0.5);
     gtk_table_attach ( GTK_TABLE (t), l, 0, 1, 0, 1,
                        (GtkAttachOptions)( GTK_SHRINK | GTK_FILL ),
@@ -150,7 +152,7 @@ sp_item_widget_new (void)
                          spw );
 
     /* Create the label for the object label */
-    l = gtk_label_new_with_mnemonic (_("_Label"));
+    l = gtk_label_new_with_mnemonic (_("_Label:"));
     gtk_misc_set_alignment (GTK_MISC (l), 1, 0.5);
     gtk_table_attach ( GTK_TABLE (t), l, 0, 1, 1, 2,
                        (GtkAttachOptions)( GTK_SHRINK | GTK_FILL ),
@@ -171,7 +173,7 @@ sp_item_widget_new (void)
     g_signal_connect ( G_OBJECT (tf), "activate", G_CALLBACK (sp_item_widget_label_changed), spw);
 
     /* Create the label for the object title */
-    l = gtk_label_new_with_mnemonic (_("_Title"));
+    l = gtk_label_new_with_mnemonic (_("_Title:"));
     gtk_misc_set_alignment (GTK_MISC (l), 1, 0.5);
     gtk_table_attach ( GTK_TABLE (t), l, 0, 1, 2, 3,
                        (GtkAttachOptions)( GTK_SHRINK | GTK_FILL ),
@@ -240,6 +242,14 @@ sp_item_widget_new (void)
                          spw );
     gtk_object_set_data (GTK_OBJECT (spw), "sensitive", cb);
 
+    /* Create the frame for interactivity options */
+    int_label = gtk_label_new_with_mnemonic (_("_Interactivity"));
+    int_expander = gtk_expander_new (NULL);
+    gtk_expander_set_label_widget (GTK_EXPANDER (int_expander),int_label);
+    gtk_object_set_data (GTK_OBJECT (spw), "interactivity", int_expander);
+
+    gtk_box_pack_start (GTK_BOX (vb), int_expander, FALSE, FALSE, 0);
+
     gtk_widget_show_all (spw);
 
     sp_item_widget_setup (SP_WIDGET (spw), sp_desktop_selection (SP_ACTIVE_DESKTOP));
@@ -321,10 +331,10 @@ sp_item_widget_setup ( SPWidget *spw, Inkscape::Selection *selection )
 
         /* ID */
         w = GTK_WIDGET(gtk_object_get_data (GTK_OBJECT (spw), "id"));
-        gtk_entry_set_text (GTK_ENTRY (w), obj->id);
+        gtk_entry_set_text (GTK_ENTRY (w), obj->getId());
         gtk_widget_set_sensitive (w, TRUE);
         w = GTK_WIDGET(gtk_object_get_data (GTK_OBJECT (spw), "id_label"));
-        gtk_label_set_markup_with_mnemonic (GTK_LABEL (w), _("_Id"));
+        gtk_label_set_markup_with_mnemonic (GTK_LABEL (w), _("_ID:"));
 
         /* Label */
         w = GTK_WIDGET(gtk_object_get_data (GTK_OBJECT (spw), "label"));
@@ -353,6 +363,22 @@ sp_item_widget_setup ( SPWidget *spw, Inkscape::Selection *selection )
         }
         w = GTK_WIDGET(gtk_object_get_data(GTK_OBJECT(spw), "desc_frame"));
         gtk_widget_set_sensitive(w, TRUE);
+
+        w = GTK_WIDGET(gtk_object_get_data(GTK_OBJECT(spw), "interactivity"));
+
+        GtkWidget* int_table = GTK_WIDGET(gtk_object_get_data(GTK_OBJECT(spw), "interactivity_table"));
+        if (int_table){
+            gtk_container_remove(GTK_CONTAINER(w), int_table);
+        }
+
+        const gchar* int_labels[10] = {"onclick", "onmouseover", "onmouseout", "onmousedown", "onmouseup", "onmousemove","onfocusin", "onfocusout", "onactivate", "onload"};
+
+        int_table = sp_attribute_table_new (obj, 10, int_labels, int_labels);
+        gtk_widget_show_all (int_table);
+        gtk_object_set_data(GTK_OBJECT(spw), "interactivity_table", int_table);
+
+        gtk_container_add (GTK_CONTAINER (w), int_table);
+
     }
 
     gtk_object_set_data (GTK_OBJECT (spw), "blocked", GUINT_TO_POINTER (FALSE));
@@ -375,8 +401,8 @@ sp_item_widget_sensitivity_toggled (GtkWidget *widget, SPWidget *spw)
 
     item->setLocked(gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)));
 
-    sp_document_done (SP_ACTIVE_DOCUMENT, SP_VERB_DIALOG_ITEM,
-             gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget))? _("Lock object") : _("Unlock object"));
+    DocumentUndo::done(SP_ACTIVE_DOCUMENT, SP_VERB_DIALOG_ITEM,
+                      gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))? _("Lock object") : _("Unlock object"));
 
     gtk_object_set_data (GTK_OBJECT (spw), "blocked", GUINT_TO_POINTER (FALSE));
 }
@@ -394,8 +420,8 @@ sp_item_widget_hidden_toggled(GtkWidget *widget, SPWidget *spw)
 
     item->setExplicitlyHidden(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)));
 
-    sp_document_done (SP_ACTIVE_DOCUMENT, SP_VERB_DIALOG_ITEM,
-             gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget))? _("Hide object") : _("Unhide object"));
+    DocumentUndo::done(SP_ACTIVE_DOCUMENT, SP_VERB_DIALOG_ITEM,
+                      gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))? _("Hide object") : _("Unhide object"));
 
     gtk_object_set_data (GTK_OBJECT (spw), "blocked", GUINT_TO_POINTER (FALSE));
 }
@@ -416,19 +442,19 @@ sp_item_widget_label_changed( GtkWidget */*widget*/, SPWidget *spw )
     gchar *id = (gchar *) gtk_entry_get_text (GTK_ENTRY (id_entry));
     g_strcanon (id, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_.:", '_');
     GtkWidget *id_label = GTK_WIDGET(gtk_object_get_data (GTK_OBJECT (spw), "id_label"));
-    if (!strcmp (id, SP_OBJECT_ID(item))) {
-        gtk_label_set_markup_with_mnemonic (GTK_LABEL (id_label), _("_Id"));
+    if (!strcmp (id, item->getId())) {
+        gtk_label_set_markup_with_mnemonic (GTK_LABEL (id_label), _("_ID:"));
     } else if (!*id || !isalnum (*id)) {
         gtk_label_set_text (GTK_LABEL (id_label), _("Id invalid! "));
     } else if (SP_ACTIVE_DOCUMENT->getObjectById(id) != NULL) {
         gtk_label_set_text (GTK_LABEL (id_label), _("Id exists! "));
     } else {
         SPException ex;
-        gtk_label_set_markup_with_mnemonic (GTK_LABEL (id_label), _("_Id"));
+        gtk_label_set_markup_with_mnemonic (GTK_LABEL (id_label), _("_ID:"));
         SP_EXCEPTION_INIT (&ex);
-        sp_object_setAttribute (SP_OBJECT (item), "id", id, &ex);
-        sp_document_done (SP_ACTIVE_DOCUMENT, SP_VERB_DIALOG_ITEM,
-                                _("Set object ID"));
+        item->setAttribute("id", id, &ex);
+        DocumentUndo::done(SP_ACTIVE_DOCUMENT, SP_VERB_DIALOG_ITEM,
+                          _("Set object ID"));
     }
 
     /* Retrieve the label widget for the object's label */
@@ -442,16 +468,16 @@ sp_item_widget_label_changed( GtkWidget */*widget*/, SPWidget *spw )
     SPObject *obj = (SPObject*)item;
     if (strcmp (label, obj->defaultLabel())) {
         obj->setLabel(label);
-        sp_document_done (SP_ACTIVE_DOCUMENT, SP_VERB_DIALOG_ITEM,
-                                _("Set object label"));
+        DocumentUndo::done(SP_ACTIVE_DOCUMENT, SP_VERB_DIALOG_ITEM,
+                          _("Set object label"));
     }
 
     /* Retrieve the title */
     GtkWidget *w = GTK_WIDGET(gtk_object_get_data(GTK_OBJECT(spw), "title"));
     gchar *title = (gchar *)gtk_entry_get_text(GTK_ENTRY (w));
     if (obj->setTitle(title))
-        sp_document_done(SP_ACTIVE_DOCUMENT, SP_VERB_DIALOG_ITEM,
-                         _("Set object title"));
+        DocumentUndo::done(SP_ACTIVE_DOCUMENT, SP_VERB_DIALOG_ITEM,
+                          _("Set object title"));
 
     /* Retrieve the description */
     GtkTextView *tv = GTK_TEXT_VIEW(gtk_object_get_data(GTK_OBJECT(spw), "desc"));
@@ -460,8 +486,8 @@ sp_item_widget_label_changed( GtkWidget */*widget*/, SPWidget *spw )
     gtk_text_buffer_get_bounds(buf, &start, &end);
     gchar *desc = gtk_text_buffer_get_text(buf, &start, &end, TRUE);
     if (obj->setDesc(desc))
-        sp_document_done(SP_ACTIVE_DOCUMENT, SP_VERB_DIALOG_ITEM,
-                         _("Set object description"));
+        DocumentUndo::done(SP_ACTIVE_DOCUMENT, SP_VERB_DIALOG_ITEM,
+                          _("Set object description"));
     g_free(desc);
 
     gtk_object_set_data (GTK_OBJECT (spw), "blocked", GUINT_TO_POINTER (FALSE));
@@ -537,4 +563,4 @@ sp_item_dialog (void)
   fill-column:99
   End:
 */
-// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :