diff --git a/src/Mod/Spreadsheet/Gui/AppSpreadsheetGui.cpp b/src/Mod/Spreadsheet/Gui/AppSpreadsheetGui.cpp index fb6f21c701..1225f09123 100644 --- a/src/Mod/Spreadsheet/Gui/AppSpreadsheetGui.cpp +++ b/src/Mod/Spreadsheet/Gui/AppSpreadsheetGui.cpp @@ -65,6 +65,20 @@ public: } private: + void load(App::Document* pcDoc, const std::string& Name) + { + try { + Base::FileInfo file(Name); + Spreadsheet::Sheet* pcSheet = static_cast( + pcDoc->addObject("Spreadsheet::Sheet", file.fileNamePure().c_str())); + + pcSheet->importFromFile(Name, '\t', '"', '\\'); + pcSheet->execute(); + } + catch (const Base::Exception& e) { + throw Py::RuntimeError(e.what()); + } + } Py::Object open(const Py::Tuple& args) { char* Name; @@ -75,19 +89,9 @@ private: std::string EncodedName = std::string(Name); PyMem_Free(Name); - try { - Base::FileInfo file(EncodedName); - App::Document* pcDoc = - App::GetApplication().newDocument(DocName ? DocName : QT_TR_NOOP("Unnamed")); - Spreadsheet::Sheet* pcSheet = static_cast( - pcDoc->addObject("Spreadsheet::Sheet", file.fileNamePure().c_str())); - - pcSheet->importFromFile(EncodedName, '\t', '"', '\\'); - pcSheet->execute(); - } - catch (const Base::Exception& e) { - throw Py::RuntimeError(e.what()); - } + App::Document* pcDoc = + App::GetApplication().newDocument(DocName ? DocName : QT_TR_NOOP("Unnamed")); + load(pcDoc, EncodedName); return Py::None(); } @@ -102,18 +106,11 @@ private: std::string EncodedName = std::string(Name); PyMem_Free(Name); - try { - Base::FileInfo file(EncodedName); - App::Document* pcDoc = Gui::Application::Instance->activeDocument()->getDocument(); - Spreadsheet::Sheet* pcSheet = static_cast( - pcDoc->addObject("Spreadsheet::Sheet", file.fileNamePure().c_str())); - - pcSheet->importFromFile(EncodedName, '\t', '"', '\\'); - pcSheet->execute(); - } - catch (const Base::Exception& e) { - throw Py::RuntimeError(e.what()); + App::Document* pcDoc = App::GetApplication().getDocument(DocName); + if (!pcDoc) { + pcDoc = App::GetApplication().newDocument(DocName ? DocName : QT_TR_NOOP("Unnamed")); } + load(pcDoc, EncodedName); return Py::None(); } diff --git a/src/Mod/Start/Gui/StartView.cpp b/src/Mod/Start/Gui/StartView.cpp index a4769da390..9a892cfbb7 100644 --- a/src/Mod/Start/Gui/StartView.cpp +++ b/src/Mod/Start/Gui/StartView.cpp @@ -30,6 +30,7 @@ #include #include #include +#include #include #include #include @@ -41,14 +42,16 @@ #include "FileCardView.h" #include "FirstStartWidget.h" #include "FlowLayout.h" -#include "Gui/Workbench.h" -#include #include #include #include #include #include #include +#include +#include +#include +#include #include #include #include @@ -435,11 +438,22 @@ void StartView::fileCardSelected(const QModelIndex& index) auto file = index.data(static_cast(Start::DisplayedFilesModelRoles::path)).toString(); std::string escapedstr = Base::Tools::escapedUnicodeFromUtf8(file.toStdString().c_str()); escapedstr = Base::Tools::escapeEncodeFilename(escapedstr); - auto command = std::string("FreeCAD.loadFile('") + escapedstr + "')"; try { - Base::Interpreter().runString(command.c_str()); - Gui::Application::checkForRecomputes(); - postStart(PostStartBehavior::doNotSwitchWorkbench); + QString filename = QString::fromStdString(escapedstr); + QFileInfo fi(filename); + if (!fi.exists() || !fi.isFile()) { + QMessageBox::critical(Gui::getMainWindow(), + tr("File not found"), + tr("The file '%1' cannot be opened.").arg(filename)); + } + else { + // invokes appendFile() + Gui::SelectModule::Dict dict = Gui::SelectModule::importHandler(filename); + for (Gui::SelectModule::Dict::iterator it = dict.begin(); it != dict.end(); ++it) { + Gui::Application::Instance->open(it.key().toUtf8(), it.value().toLatin1()); + break; + } + } } catch (Base::PyException& e) { Base::Console().Error(e.getMessage().c_str());