diff options
Diffstat (limited to 'src/extension/internal/cdr-input.cpp')
| -rw-r--r-- | src/extension/internal/cdr-input.cpp | 67 |
1 files changed, 39 insertions, 28 deletions
diff --git a/src/extension/internal/cdr-input.cpp b/src/extension/internal/cdr-input.cpp index 25fc4e704..851ca16a6 100644 --- a/src/extension/internal/cdr-input.cpp +++ b/src/extension/internal/cdr-input.cpp @@ -55,7 +55,7 @@ #include "ui/dialog-events.h" #include <glibmm/i18n.h> -#include "svg-view-widget.h" +#include "ui/view/svg-view-widget.h" #include "object/sp-root.h" @@ -84,7 +84,7 @@ private: void _onSpinButtonRelease(GdkEventButton* button_event); class Gtk::VBox * vbox1; - class Gtk::Widget * _previewArea; + class Inkscape::UI::View::SVGViewWidget * _previewArea; class Gtk::Button * cancelbutton; class Gtk::Button * okbutton; @@ -99,7 +99,10 @@ private: }; CdrImportDialog::CdrImportDialog(const std::vector<RVNGString> &vec) - : _vec(vec), _current_page(1), _spinning(false) + : _previewArea(nullptr) + , _vec(vec) + , _current_page(1) + , _spinning(false) { int num_pages = _vec.size(); if ( num_pages <= 1 ) @@ -114,9 +117,7 @@ CdrImportDialog::CdrImportDialog(const std::vector<RVNGString> &vec) this->property_destroy_with_parent().set_value(false); // Preview area - _previewArea = Gtk::manage(new class Gtk::VBox()); vbox1 = Gtk::manage(new class Gtk::VBox()); - vbox1->pack_start(*_previewArea, Gtk::PACK_EXPAND_WIDGET, 0); this->get_content_area()->pack_start(*vbox1); // CONTROLS @@ -208,29 +209,39 @@ void CdrImportDialog::_onSpinButtonRelease(GdkEventButton* /*button_event*/) */ void CdrImportDialog::_setPreviewPage() { - if (_spinning) { - return; - } - - SPDocument *doc = SPDocument::createNewDocFromMem(_vec[_current_page-1].cstr(), strlen(_vec[_current_page-1].cstr()), 0); - if(!doc) { - g_warning("CDR import: Could not create preview for page %d", _current_page); - gchar const *no_preview_template = - "<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'>" - " <path style='fill:none;stroke:#ff0000;stroke-width:2px;' d='M 82,10 18,74 m 0,-64 64,64' />" - " <rect style='fill:none;stroke:#000000;stroke-width:1.5px;' width='64' height='64' x='18' y='10' />" - " <text x='50' y='92' style='font-size:10px;text-anchor:middle;font-family:sans-serif;'>%s</text>" - "</svg>"; - gchar * no_preview = g_strdup_printf(no_preview_template, _("No preview")); - doc = SPDocument::createNewDocFromMem(no_preview, strlen(no_preview), 0); - g_free(no_preview); - } - - Gtk::Widget * tmpPreviewArea = Glib::wrap(sp_svg_view_widget_new(doc)); - std::swap(_previewArea, tmpPreviewArea); - delete tmpPreviewArea; - vbox1->pack_start(*_previewArea, Gtk::PACK_EXPAND_WIDGET, 0); - _previewArea->show_now(); + if (_spinning) { + return; + } + + SPDocument *doc = SPDocument::createNewDocFromMem(_vec[_current_page-1].cstr(), strlen(_vec[_current_page-1].cstr()), 0); + if(!doc) { + g_warning("CDR import: Could not create preview for page %d", _current_page); + gchar const *no_preview_template = R"A( + <svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'> + <path d='M 82,10 18,74 m 0,-64 64,64' style='fill:none;stroke:#ff0000;stroke-width:2px;'/> + <rect x='18' y='10' width='64' height='64' style='fill:none;stroke:#000000;stroke-width:1.5px;'/> + <text x='50' y='92' style='font-size:10px;text-anchor:middle;font-family:sans-serif;'>%s</text> + </svg> + )A"; + gchar * no_preview = g_strdup_printf(no_preview_template, _("No preview")); + doc = SPDocument::createNewDocFromMem(no_preview, strlen(no_preview), 0); + g_free(no_preview); + } + + if (!doc) { + std::cerr << "CdrImportDialog::_setPreviewPage: No document!" << std::endl; + return; + } + + if (_previewArea) { + _previewArea->setDocument(doc); + } else { + _previewArea = Gtk::manage(new Inkscape::UI::View::SVGViewWidget(doc)); + vbox1->pack_start(*_previewArea, Gtk::PACK_EXPAND_WIDGET, 0); + } + + _previewArea->setResize(400, 400); + _previewArea->show_all(); } SPDocument *CdrInput::open(Inkscape::Extension::Input * /*mod*/, const gchar * uri) |
