X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fui%2Fdialog%2Fdocument-metadata.cpp;h=5956cfb9bca739db16420eda4cb0056696725df8;hb=ba885512446fff2803585a4aaec34e7742841f05;hp=7c845e70f62da61aa5b3d9a5c8cc900474b4101b;hpb=91c9ca3297fca362ec28d13bbc4e00f951837bc3;p=inkscape.git diff --git a/src/ui/dialog/document-metadata.cpp b/src/ui/dialog/document-metadata.cpp index 7c845e70f..5956cfb9b 100644 --- a/src/ui/dialog/document-metadata.cpp +++ b/src/ui/dialog/document-metadata.cpp @@ -46,12 +46,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 */ @@ -62,39 +57,32 @@ static Inkscape::XML::NodeEventVector const _repr_events = { }; -DocumentMetadata* -DocumentMetadata::create() +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() - : Dialog ("dialogs.documentmetadata", SP_VERB_DIALOG_METADATA), +DocumentMetadata::DocumentMetadata() + : UI::Widget::Panel ("", "dialogs.documentmetadata", SP_VERB_DIALOG_METADATA), _page_metadata1(1, 1), _page_metadata2(1, 1), _prefs_path("dialogs.documentmetadata") { hide(); - set_resizable (true); _tt.enable(); - get_vbox()->set_spacing (4); - get_vbox()->pack_start (_notebook, true, true); + _getContents()->set_spacing (4); + _getContents()->pack_start(_notebook, true, true); _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(); } @@ -103,26 +91,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(); - present(); } -DocumentMetadata::~DocumentMetadata() +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); @@ -144,28 +122,28 @@ attach_all (Gtk::Table &table, const Gtk::Widget *arr[], unsigned size, int star { if (arr[i] && arr[i+1]) { - table.attach (const_cast(*arr[i]), 1, 2, r, r+1, + table.attach (const_cast(*arr[i]), 1, 2, r, r+1, Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0,0,0); - table.attach (const_cast(*arr[i+1]), 2, 3, r, r+1, + table.attach (const_cast(*arr[i+1]), 2, 3, r, r+1, Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0,0,0); } else { if (arr[i+1]) - table.attach (const_cast(*arr[i+1]), 1, 3, r, r+1, + table.attach (const_cast(*arr[i+1]), 1, 3, r, r+1, Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0,0,0); else if (arr[i]) { - Gtk::Label& label = reinterpret_cast (const_cast(*arr[i])); + Gtk::Label& label = static_cast (const_cast(*arr[i])); label.set_alignment (0.0); - table.attach (label, 0, 3, r, r+1, + table.attach (label, 0, 3, r, r+1, Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0,0,0); } else { Gtk::HBox *space = manage (new Gtk::HBox); space->set_size_request (SPACE_SIZE_X, SPACE_SIZE_Y); - table.attach (*space, 0, 1, r, r+1, + table.attach (*space, 0, 1, r, r+1, (Gtk::AttachOptions)0, (Gtk::AttachOptions)0,0,0); } } @@ -220,7 +198,7 @@ void DocumentMetadata::update() { if (_wr.isUpdating()) return; - + _wr.setUpdating (true); set_sensitive (true); @@ -228,68 +206,47 @@ DocumentMetadata::update() /* update the RDF entities */ for (RDElist::iterator it = _rdflist.begin(); it != _rdflist.end(); it++) (*it)->update (SP_ACTIVE_DOCUMENT); - + _licensor.update (SP_ACTIVE_DOCUMENT); _wr.setUpdating (false); } -//-------------------------------------------------------------------- - -void -DocumentMetadata::on_response (int id) +void +DocumentMetadata::_handleDocumentReplaced(SPDesktop* desktop, SPDocument *) { - if (id == Gtk::RESPONSE_CLOSE) - hide(); + Inkscape::XML::Node *repr = SP_OBJECT_REPR(sp_desktop_namedview(desktop)); + repr->addListener (&_repr_events, this); + update(); } -/** - * 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::_handleActivateDesktop(Inkscape::Application *, SPDesktop *desktop) { - 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::_handleDeactivateDesktop(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->removeListenerByData(this); } -static void -on_deactivate_desktop (Inkscape::Application *, SPDesktop* dt, void*) -{ - if (!_instance) - return; - - Inkscape::XML::Node *repr = SP_OBJECT_REPR(sp_desktop_namedview(SP_ACTIVE_DESKTOP)); - repr->removeListenerByData (_instance); - _instance->_doc_replaced_connection.disconnect(); -} +//-------------------------------------------------------------------- -static void -on_doc_replaced (SPDesktop* dt, SPDocument* doc) +/** + * 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 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