Code

updating my email address in file headers
[inkscape.git] / src / ui / dialog / document-metadata.cpp
index 5671e08fe5631c16bb36508a9c74faba17935165..96cad1fbe6074596d9edfde15ba8a1b44c4f8cae 100644 (file)
@@ -1,8 +1,7 @@
-/** \file
- *
- * Document metadata dialog, Gtkmm-style
- *
- * Authors:
+/** @file
+ * @brief Document metadata dialog, Gtkmm-style
+ */
+/* Authors:
  *   bulia byak <buliabyak@users.sf.net>
  *   Bryce W. Harrington <bryce@bryceharrington.org>
  *   Lauris Kaplinski <lauris@kaplinski.com>
 # include <config.h>
 #endif
 
-
-
-#include "ui/widget/entity-entry.h"
-
-#include "xml/node-event-vector.h"
-#include "dialogs/rdf.h"
-
-#include "inkscape.h"
-#include "verbs.h"
-#include "desktop-handles.h"
 #include "desktop.h"
+#include "desktop-handles.h"
+#include "inkscape.h"
+#include "rdf.h"
 #include "sp-namedview.h"
+#include "ui/widget/entity-entry.h"
+#include "verbs.h"
+#include "xml/node-event-vector.h"
 
 #include "document-metadata.h"
 
@@ -46,12 +41,7 @@ namespace Dialog {
 
 //---------------------------------------------------
 
-static DocumentMetadata *_instance = 0;
-
 static void on_repr_attr_changed (Inkscape::XML::Node *, gchar const *, gchar const *, gchar const *, bool, gpointer);
-static void on_doc_replaced (SPDesktop* dt, SPDocument* doc);
-static void on_activate_desktop (Inkscape::Application *, SPDesktop* dt, void*);
-static void on_deactivate_desktop (Inkscape::Application *, SPDesktop* dt, void*);
 
 static Inkscape::XML::NodeEventVector const _repr_events = {
     NULL, /* child_added */
@@ -65,26 +55,15 @@ static Inkscape::XML::NodeEventVector const _repr_events = {
 DocumentMetadata &
 DocumentMetadata::getInstance()
 {
-    if (_instance) return *_instance;
-    _instance = new DocumentMetadata();
-    _instance->init();
-    return *_instance;
+    DocumentMetadata &instance = *new DocumentMetadata();
+    instance.init();
+    return instance;
 }
 
-void
-DocumentMetadata::destroy()
-{
-    if (_instance)
-    {
-        delete _instance;
-        _instance = 0;
-    }
-}
 
 DocumentMetadata::DocumentMetadata()
-    : UI::Widget::Panel ("", "dialogs.documentmetadata", SP_VERB_DIALOG_METADATA),
-      _page_metadata1(1, 1), _page_metadata2(1, 1),
-      _prefs_path("dialogs.documentmetadata")
+    : UI::Widget::Panel ("", "/dialogs/documentmetadata", SP_VERB_DIALOG_METADATA),
+      _page_metadata1(1, 1), _page_metadata2(1, 1)
 {
     hide();
     _tt.enable();
@@ -94,6 +73,10 @@ DocumentMetadata::DocumentMetadata()
     _notebook.append_page(_page_metadata1, _("Metadata"));
     _notebook.append_page(_page_metadata2, _("License"));
 
+    signalDocumentReplaced().connect(sigc::mem_fun(*this, &DocumentMetadata::_handleDocumentReplaced));
+    signalActivateDesktop().connect(sigc::mem_fun(*this, &DocumentMetadata::_handleActivateDesktop));
+    signalDeactiveDesktop().connect(sigc::mem_fun(*this, &DocumentMetadata::_handleDeactivateDesktop));
+
     build_metadata();
 }
 
@@ -102,25 +85,16 @@ DocumentMetadata::init()
 {
     update();
 
-    Inkscape::XML::Node *repr = SP_OBJECT_REPR(sp_desktop_namedview(SP_ACTIVE_DESKTOP));
+    Inkscape::XML::Node *repr = SP_OBJECT_REPR(sp_desktop_namedview(getDesktop()));
     repr->addListener (&_repr_events, this);
 
-    _doc_replaced_connection = SP_ACTIVE_DESKTOP->connectDocumentReplaced (sigc::ptr_fun (on_doc_replaced));
-
-    g_signal_connect(G_OBJECT(INKSCAPE), "activate_desktop",
-                     G_CALLBACK(on_activate_desktop), 0);
-
-    g_signal_connect(G_OBJECT(INKSCAPE), "deactivate_desktop",
-                     G_CALLBACK(on_deactivate_desktop), 0);
-
     show_all_children();
 }
 
 DocumentMetadata::~DocumentMetadata()
 {
-    Inkscape::XML::Node *repr = SP_OBJECT_REPR(sp_desktop_namedview(SP_ACTIVE_DESKTOP));
+    Inkscape::XML::Node *repr = SP_OBJECT_REPR(sp_desktop_namedview(getDesktop()));
     repr->removeListenerByData (this);
-    _doc_replaced_connection.disconnect();
 
     for (RDElist::iterator it = _rdflist.begin(); it != _rdflist.end(); it++)
         delete (*it);
@@ -232,56 +206,41 @@ DocumentMetadata::update()
     _wr.setUpdating (false);
 }
 
-//--------------------------------------------------------------------
-
-
-/**
- * Called when XML node attribute changed; updates dialog widgets.
- */
-static void
-on_repr_attr_changed (Inkscape::XML::Node *, gchar const *, gchar const *, gchar const *, bool, gpointer)
+void 
+DocumentMetadata::_handleDocumentReplaced(SPDesktop* desktop, SPDocument *)
 {
-    if (!_instance)
-        return;
-
-    _instance->update();
+    Inkscape::XML::Node *repr = SP_OBJECT_REPR(sp_desktop_namedview(desktop));
+    repr->addListener (&_repr_events, this);
+    update();
 }
 
-static void
-on_activate_desktop (Inkscape::Application *, SPDesktop* /*dt*/, void*)
+void 
+DocumentMetadata::_handleActivateDesktop(Inkscape::Application *, SPDesktop *desktop)
 {
-    if (!_instance)
-        return;
-
-    Inkscape::XML::Node *repr = SP_OBJECT_REPR(sp_desktop_namedview(SP_ACTIVE_DESKTOP));
-    repr->addListener (&_repr_events, _instance);
-    _instance->_doc_replaced_connection = SP_ACTIVE_DESKTOP->connectDocumentReplaced (sigc::ptr_fun (on_doc_replaced));
-    _instance->update();
+    Inkscape::XML::Node *repr = SP_OBJECT_REPR(sp_desktop_namedview(desktop));
+    repr->addListener(&_repr_events, this);
+    update();
 }
 
-static void
-on_deactivate_desktop (Inkscape::Application *, SPDesktop* /*dt*/, void*)
+void
+DocumentMetadata::_handleDeactivateDesktop(Inkscape::Application *, SPDesktop *desktop)
 {
-    if (!_instance)
-        return;
-
-    Inkscape::XML::Node *repr = SP_OBJECT_REPR(sp_desktop_namedview(SP_ACTIVE_DESKTOP));
-    repr->removeListenerByData (_instance);
-    _instance->_doc_replaced_connection.disconnect();
+    Inkscape::XML::Node *repr = SP_OBJECT_REPR(sp_desktop_namedview(desktop));
+    repr->removeListenerByData(this);
 }
 
+//--------------------------------------------------------------------
+
+/**
+ * Called when XML node attribute changed; updates dialog widgets.
+ */
 static void
-on_doc_replaced (SPDesktop* dt, SPDocument* /*doc*/)
+on_repr_attr_changed (Inkscape::XML::Node *, gchar const *, gchar const *, gchar const *, bool, gpointer data)
 {
-    if (!_instance)
-        return;
-
-    Inkscape::XML::Node *repr = SP_OBJECT_REPR(sp_desktop_namedview(dt));
-    repr->addListener (&_repr_events, _instance);
-    _instance->update();
+    if (DocumentMetadata *dialog = static_cast<DocumentMetadata *>(data))
+       dialog->update();
 }
 
-
 } // namespace Dialog
 } // namespace UI
 } // namespace Inkscape
@@ -290,9 +249,9 @@ on_doc_replaced (SPDesktop* dt, SPDocument* /*doc*/)
   Local Variables:
   mode:c++
   c-file-style:"stroustrup"
-  c-file-offsets:((innamespace . 0)(inline-open . 0))
+  c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
   indent-tabs-mode:nil
   fill-column:99
   End:
 */
-// vim: filetype=c++:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 :
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :