X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fui%2Fdialog%2Fdocument-metadata.cpp;h=96cad1fbe6074596d9edfde15ba8a1b44c4f8cae;hb=5ef6cb9428f2e6f5457e890a1c3b37f53730c07a;hp=5671e08fe5631c16bb36508a9c74faba17935165;hpb=963f23115db07f460bdd862b957f8bd9dba88b9b;p=inkscape.git diff --git a/src/ui/dialog/document-metadata.cpp b/src/ui/dialog/document-metadata.cpp index 5671e08fe..96cad1fbe 100644 --- a/src/ui/dialog/document-metadata.cpp +++ b/src/ui/dialog/document-metadata.cpp @@ -1,8 +1,7 @@ -/** \file - * - * Document metadata dialog, Gtkmm-style - * - * Authors: +/** @file + * @brief Document metadata dialog, Gtkmm-style + */ +/* Authors: * bulia byak * Bryce W. Harrington * Lauris Kaplinski @@ -18,18 +17,14 @@ # include #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(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 :