index 5671e08fe5631c16bb36508a9c74faba17935165..5956cfb9bca739db16420eda4cb0056696725df8 100644 (file)
//---------------------------------------------------
-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 */
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),
_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();
}
{
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);
_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