Code

Merge and cleanup of GSoC C++-ification project.
[inkscape.git] / src / extension / internal / pdfinput / pdf-input.cpp
index 1de74541bb6e2f6013a5cb7757687fca420a1a14..ae3e473a5d72d3dd187adb56505ecbe5d29b0c47 100644 (file)
@@ -3,6 +3,7 @@
  *
  * Authors:
  *   miklos erdelyi
+ *   Abhishek Sharma
  *
  * Copyright (C) 2007 Authors
  *
@@ -36,6 +37,7 @@
 #include "pdf-parser.h"
 
 #include "document-private.h"
+#include "inkscape.h"
 
 #include "dialogs/dialog-events.h"
 #include <gtk/gtkdialog.h>
@@ -116,6 +118,7 @@ PdfImportDialog::PdfImportDialog(PDFDoc *doc, const gchar *uri)
     _textHandlingCombo = Gtk::manage(new class Gtk::ComboBoxText());
     _textHandlingCombo->append_text(_("Import text as text"));
     _textHandlingCombo->set_active_text(_("Import text as text"));
+    _localFontsCheck = Gtk::manage(new class Gtk::CheckButton(_("Replace PDF fonts by closest-named installed fonts")));
 
     hbox5 = Gtk::manage(new class Gtk::HBox(false, 4));
     _embedImagesCheck = Gtk::manage(new class Gtk::CheckButton(_("Embed images")));
@@ -210,6 +213,10 @@ PdfImportDialog::PdfImportDialog(PDFDoc *doc, const gchar *uri)
     _labelText->set_selectable(false);
     hbox5->pack_start(*_labelText, Gtk::PACK_SHRINK, 0);
     hbox5->pack_start(*_textHandlingCombo, Gtk::PACK_SHRINK, 0);
+    _localFontsCheck->set_flags(Gtk::CAN_FOCUS);
+    _localFontsCheck->set_relief(Gtk::RELIEF_NORMAL);
+    _localFontsCheck->set_mode(true);
+    _localFontsCheck->set_active(true);
     _embedImagesCheck->set_flags(Gtk::CAN_FOCUS);
     _embedImagesCheck->set_relief(Gtk::RELIEF_NORMAL);
     _embedImagesCheck->set_mode(true);
@@ -218,6 +225,7 @@ PdfImportDialog::PdfImportDialog(PDFDoc *doc, const gchar *uri)
     vbox3->pack_start(*hbox6, Gtk::PACK_SHRINK, 0);
     vbox3->pack_start(*_labelPrecisionWarning, Gtk::PACK_SHRINK, 0);
     vbox3->pack_start(*hbox5, Gtk::PACK_SHRINK, 4);
+    vbox3->pack_start(*_localFontsCheck, Gtk::PACK_SHRINK, 0);
     vbox3->pack_start(*_embedImagesCheck, Gtk::PACK_SHRINK, 0);
     alignment4->add(*vbox3);
     _labelImportSettings->set_alignment(0.5,0.5);
@@ -268,6 +276,7 @@ PdfImportDialog::PdfImportDialog(PDFDoc *doc, const gchar *uri)
     _labelText->show();
     _textHandlingCombo->show();
     hbox5->show();
+    _localFontsCheck->show();
     _embedImagesCheck->show();
     vbox3->show();
     alignment4->show();
@@ -363,6 +372,11 @@ void PdfImportDialog::getImportSettings(Inkscape::XML::Node *prefs) {
     }
     sp_repr_set_svg_double(prefs, "approximationPrecision",
                            _fallbackPrecisionSlider->get_value());
+    if (_localFontsCheck->get_active()) {
+        prefs->setAttribute("localFonts", "1");
+    } else {
+        prefs->setAttribute("localFonts", "0");
+    }
     if (_embedImagesCheck->get_active()) {
         prefs->setAttribute("embedImages", "1");
     } else {
@@ -377,10 +391,10 @@ void PdfImportDialog::getImportSettings(Inkscape::XML::Node *prefs) {
 void PdfImportDialog::_onPrecisionChanged() {
 
     static Glib::ustring precision_comments[] = {
-        Glib::ustring(_("rough")),
-        Glib::ustring(Q_("pdfinput|medium")),
-        Glib::ustring(_("fine")),
-        Glib::ustring(_("very fine"))
+        Glib::ustring(C_("PDF input precision", "rough")),
+        Glib::ustring(C_("PDF input precision", "medium")),
+        Glib::ustring(C_("PDF input precision", "fine")),
+        Glib::ustring(C_("PDF input precision", "very fine"))
     };
 
     double min = _fallbackPrecisionSlider_adj->get_lower();
@@ -626,22 +640,29 @@ PdfInput::open(::Inkscape::Extension::Input * /*mod*/, const gchar * uri) {
 
         return NULL;
     }
-    PdfImportDialog *dlg = new PdfImportDialog(pdf_doc, uri);
-    if (!dlg->showDialog()) {
-        delete dlg;
-        delete pdf_doc;
 
-        return NULL;
+    PdfImportDialog *dlg = NULL;
+    if (inkscape_use_gui()) {
+        dlg = new PdfImportDialog(pdf_doc, uri);
+        if (!dlg->showDialog()) {
+            delete dlg;
+            delete pdf_doc;
+            return NULL;
+        }
     }
 
     // Get needed page
-    int page_num = dlg->getSelectedPage();
+    int page_num;
+    if (dlg)
+        page_num = dlg->getSelectedPage();
+    else 
+        page_num = 1;
     Catalog *catalog = pdf_doc->getCatalog();
     Page *page = catalog->getPage(page_num);
 
-    SPDocument *doc = sp_document_new(NULL, TRUE, TRUE);
-    bool saved = sp_document_get_undo_sensitive(doc);
-    sp_document_set_undo_sensitive(doc, false); // No need to undo in this temporary document
+    SPDocument *doc = SPDocument::createNewDoc(NULL, TRUE, TRUE);
+    bool saved = DocumentUndo::getUndoSensitive(doc);
+    DocumentUndo::setUndoSensitive(doc, false); // No need to undo in this temporary document
 
     // Create builder
     gchar *docname = g_path_get_basename(uri);
@@ -653,7 +674,8 @@ PdfInput::open(::Inkscape::Extension::Input * /*mod*/, const gchar * uri) {
 
     // Get preferences
     Inkscape::XML::Node *prefs = builder->getPreferences();
-    dlg->getImportSettings(prefs);
+    if (dlg)
+        dlg->getImportSettings(prefs);
 
     // Apply crop settings
     PDFRectangle *clipToBox = NULL;
@@ -711,9 +733,10 @@ PdfInput::open(::Inkscape::Extension::Input * /*mod*/, const gchar * uri) {
     delete builder;
     g_free(docname);
     delete pdf_doc;
+    delete dlg;
 
     // Restore undo
-    sp_document_set_undo_sensitive(doc, saved);
+    DocumentUndo::setUndoSensitive(doc, saved);
 
     return doc;
 }