diff options
Diffstat (limited to 'src/ui/dialog/extension-editor.cpp')
| -rw-r--r-- | src/ui/dialog/extension-editor.cpp | 85 |
1 files changed, 84 insertions, 1 deletions
diff --git a/src/ui/dialog/extension-editor.cpp b/src/ui/dialog/extension-editor.cpp index aca41f6f6..fb8284e63 100644 --- a/src/ui/dialog/extension-editor.cpp +++ b/src/ui/dialog/extension-editor.cpp @@ -1,5 +1,5 @@ /** - * \brief Extension editor + * \brief Extension editor dialog * * Authors: * Bryce W. Harrington <bryce@bryceharrington.org> @@ -20,11 +20,24 @@ #include "extension-editor.h" #include "verbs.h" +#include "prefs-utils.h" + +#include "extension/extension.h" +#include "extension/db.h" namespace Inkscape { namespace UI { namespace Dialog { +/** \brief Create a new ExtensionEditor dialog + \return None + + This function creates a new extension editor dialog. The dialog + consists of two basic areas. The left side is a tree widget, which + is only used as a list. And the right side is a notebook of information + about the selected extension. A handler is set up so that when + a new extension is selected, the notebooks are changed appropriately. +*/ ExtensionEditor::ExtensionEditor() : Dialog ("dialogs.extensioneditor", SP_VERB_DIALOG_EXTENSIONEDITOR) { @@ -63,14 +76,84 @@ ExtensionEditor::ExtensionEditor() _page_frame.set_shadow_type(Gtk::SHADOW_IN); title_frame->set_shadow_type(Gtk::SHADOW_IN); + Inkscape::Extension::db.foreach(dbfunc, this); show_all_children(); } +/** \brief Destroys the extension editor dialog + \return None +*/ ExtensionEditor::~ExtensionEditor() { } +/** \brief Called every time a new extention is selected + \return None + + This function is set up to handle the signal for a changed extension + from the tree view in the left pane. It figure out which extension + is selected and updates the widgets to have data for that extension. +*/ +void +ExtensionEditor::on_pagelist_selection_changed (void) +{ + Glib::RefPtr<Gtk::TreeSelection> selection = _page_list.get_selection(); + Gtk::TreeModel::iterator iter = selection->get_selected(); + if (iter) { + _page_frame.remove(); + Gtk::TreeModel::Row row = *iter; + // _current_page = row[_page_list_columns._col_page]; + // prefs_set_string_attribute("dialogs.extensioneditor", "selected", row[_page_list_columns._col_id].c_str()); + _page_title.set_markup("<span size='large'><b>" + row[_page_list_columns._col_name] + "</b></span>"); + // _page_frame.add(*_current_page); + // _current_page->show(); + } + + return; +} + +/** \brief A function to pass to the iterator in the Extensions Database + \param in_plug The extension to evaluate + \param in_data A pointer to the Extension Editor class + \return None + + This function is a static function with the prototype required for + the Extension Database's foreach function. It will get called for + every extension in the database, and will then turn around and + call the more object oriented function \c add_extension in the + ExtensionEditor. +*/ +void +ExtensionEditor::dbfunc (Inkscape::Extension::Extension * in_plug, gpointer in_data) +{ + ExtensionEditor * ee = reinterpret_cast<ExtensionEditor *>(in_data); + ee->add_extension(in_plug); + return; +} + +/** \brief Adds an extension into the tree model + \param ext The extension to add + \return The iterator representing the location in the tree model + + This function takes the data out of the extension and puts it + into the tree model for the dialog. +*/ +Gtk::TreeModel::iterator +ExtensionEditor::add_extension (Inkscape::Extension::Extension * ext) +{ + Gtk::TreeModel::iterator iter; + + iter = _page_list_model->append(); + + Gtk::TreeModel::Row row = *iter; + row[_page_list_columns._col_name] = ext->get_name(); + row[_page_list_columns._col_id] = ext->get_id(); + row[_page_list_columns._col_page] = NULL; + + return iter; +} + } // namespace Dialog } // namespace UI } // namespace Inkscape |
