diff --git a/src/Gui/Application.cpp b/src/Gui/Application.cpp index 5d31569bc2..6929af9792 100644 --- a/src/Gui/Application.cpp +++ b/src/Gui/Application.cpp @@ -601,8 +601,16 @@ void Application::open(const char* FileName, const char* Module) // issue module loading Command::doCommand(Command::App, "import %s", Module); - // load the file with the module - Command::doCommand(Command::App, "%s.open(u\"%s\")", Module, unicodepath.c_str()); + // check for additional import options + std::stringstream str; + str << "if hasattr(" << Module << ", \"importOptions\"):\n" + << " options = " << Module << ".importOptions(u\"" << unicodepath << "\")\n" + << " " << Module << ".open(u\"" << unicodepath << "\", options = options)\n" + << "else:\n" + << " " << Module << ".open(u\"" << unicodepath << "\")\n"; + + std::string code = str.str(); + Gui::Command::runCommand(Gui::Command::App, code.c_str()); // ViewFit if (sendHasMsgToActiveView("ViewFit")) { @@ -663,15 +671,26 @@ void Application::importFrom(const char* FileName, const char* DocName, const ch doc->openCommand(QT_TRANSLATE_NOOP("Command", "Import")); } + // check for additional import options + std::stringstream str; if (DocName) { - Command::doCommand(Command::App, "%s.insert(u\"%s\",\"%s\")" - , Module, unicodepath.c_str(), DocName); + str << "if hasattr(" << Module << ", \"importOptions\"):\n" + << " options = " << Module << ".importOptions(u\"" << unicodepath << "\")\n" + << " " << Module << ".insert(u\"" << unicodepath << "\", \"" << DocName << "\", options = options)\n" + << "else:\n" + << " " << Module << ".insert(u\"" << unicodepath << "\", \"" << DocName << "\")\n"; } else { - Command::doCommand(Command::App, "%s.insert(u\"%s\")" - , Module, unicodepath.c_str()); + str << "if hasattr(" << Module << ", \"importOptions\"):\n" + << " options = " << Module << ".importOptions(u\"" << unicodepath << "\")\n" + << " " << Module << ".insert(u\"" << unicodepath << "\", options = options)\n" + << "else:\n" + << " " << Module << ".insert(u\"" << unicodepath << "\")\n"; } + std::string code = str.str(); + Gui::Command::runCommand(Gui::Command::App, code.c_str()); + // Commit the transaction if (doc && !pendingCommand) { doc->commitCommand();