support of user defined Povray or Lux templates

This commit is contained in:
wmayer
2018-10-03 14:29:34 +02:00
parent 39d072bf82
commit 41f0dc1fe8
4 changed files with 70 additions and 42 deletions

View File

@@ -60,7 +60,7 @@ void LuxProject::onDocumentRestored()
fi.setFile(PageResult.getValue());
std::string path = App::Application::getResourceDir() + "Mod/Raytracing/Templates/" + fi.fileName();
// try to find the template in user dir/Templates first
Base::FileInfo tempfi(App::Application::getUserAppDataDir() + "Templates/" + fi.fileName());
Base::FileInfo tempfi(App::Application::getUserAppDataDir() + "data/Mod/Raytracing/Templates/" + fi.fileName());
if (tempfi.exists())
path = tempfi.filePath();
Template.setValue(path);

View File

@@ -59,7 +59,7 @@ void RayProject::onDocumentRestored()
fi.setFile(PageResult.getValue());
std::string path = App::Application::getResourceDir() + "Mod/Raytracing/Templates/" + fi.fileName();
// try to find the template in user dir/Templates first
Base::FileInfo tempfi(App::Application::getUserAppDataDir() + "Templates/" + fi.fileName());
Base::FileInfo tempfi(App::Application::getUserAppDataDir() + "data/Mod/Raytracing/Templates/" + fi.fileName());
if (tempfi.exists())
path = tempfi.filePath();
Template.setValue(path);

View File

@@ -376,16 +376,24 @@ Gui::Action * CmdRaytracingNewPovrayProject::createAction(void)
pcAction->setDropDownMenu(true);
applyCommandData(this->className(), pcAction);
auto addTemplates = [pcAction](const std::string& path) {
QDir dir(QString::fromUtf8(path.c_str()), QString::fromLatin1("*.pov"));
for (unsigned int i=0; i<dir.count(); i++ ) {
QFileInfo fi(dir[i]);
QAction* a = pcAction->addAction(fi.baseName());
a->setIcon(Gui::BitmapFactory().pixmap("Raytrace_New"));
a->setProperty("Template", dir.absoluteFilePath(dir[i]));
}
};
std::string path = App::Application::getResourceDir();
path += "Mod/Raytracing/Templates/";
QDir dir(QString::fromUtf8(path.c_str()), QString::fromLatin1("*.pov"));
for (unsigned int i=0; i<dir.count(); i++ ) {
QFileInfo fi(dir[i]);
QAction* a = pcAction->addAction(fi.baseName());
a->setIcon(Gui::BitmapFactory().pixmap("Raytrace_New"));
addTemplates(path);
a->setProperty("Template", dir.absoluteFilePath(dir[i]));
}
path = App::Application::getUserAppDataDir();
path += "data/Mod/Raytracing/Templates/";
addTemplates(path);
_pcAction = pcAction;
languageChange();
@@ -794,16 +802,24 @@ Gui::Action * CmdRaytracingNewLuxProject::createAction(void)
pcAction->setDropDownMenu(true);
applyCommandData(this->className(), pcAction);
auto addTemplates = [pcAction](const std::string& path) {
QDir dir(QString::fromUtf8(path.c_str()), QString::fromLatin1("*.lxs"));
for (unsigned int i=0; i<dir.count(); i++ ) {
QFileInfo fi(dir[i]);
QAction* a = pcAction->addAction(fi.baseName());
a->setIcon(Gui::BitmapFactory().pixmap("Raytrace_Lux"));
a->setProperty("Template", dir.absoluteFilePath(dir[i]));
}
};
std::string path = App::Application::getResourceDir();
path += "Mod/Raytracing/Templates/";
QDir dir(QString::fromUtf8(path.c_str()), QString::fromLatin1("*.lxs"));
for (unsigned int i=0; i<dir.count(); i++ ) {
QFileInfo fi(dir[i]);
QAction* a = pcAction->addAction(fi.baseName());
a->setIcon(Gui::BitmapFactory().pixmap("Raytrace_Lux"));
addTemplates(path);
a->setProperty("Template", dir.absoluteFilePath(dir[i]));
}
path = App::Application::getUserAppDataDir();
path += "data/Mod/Raytracing/Templates/";
addTemplates(path);
_pcAction = pcAction;
languageChange();

View File

@@ -73,28 +73,34 @@ void ViewProviderLux::setupContextMenu(QMenu* menu, QObject* receiver, const cha
bool ViewProviderLux::setEdit(int ModNum)
{
if (ModNum == ViewProvider::Default ) {
QStringList items;
auto addTemplates = [&items](const std::string& path) {
QString dataDir = QString::fromUtf8(path.c_str());
QDir dir(dataDir);
QFileInfoList files = dir.entryInfoList(QStringList() << QString::fromLatin1("*.lxs"));
for (int i=0; i<files.count(); i++ ) {
QFileInfo fi(files[i]);
items << fi.absoluteFilePath();
}
};
std::string path = App::Application::getResourceDir();
path += "Mod/Raytracing/Templates/";
QString dataDir = QString::fromUtf8(path.c_str());
QDir dir(dataDir, QString::fromLatin1("*.lxs"));
QStringList items;
int current = 0;
addTemplates(path);
path = App::Application::getUserAppDataDir();
path += "data/Mod/Raytracing/Templates/";
addTemplates(path);
QFileInfo cfi(QString::fromUtf8(static_cast<Raytracing::LuxProject*>(getObject())->Template.getValue()));
for (unsigned int i=0; i<dir.count(); i++ ) {
QFileInfo fi(dir[i]);
items << fi.baseName();
if (fi.baseName() == cfi.baseName()) {
current = i;
}
}
int current = items.indexOf(cfi.absoluteFilePath());
bool ok;
QString file = QInputDialog::getItem(Gui::getMainWindow(), tr("LuxRender template"), tr("Select a LuxRender template"), items, current, false, &ok);
if (ok) {
App::Document* doc = getObject()->getDocument();
doc->openTransaction("Edit LuxRender project");
QString fn = QString::fromLatin1("%1%2.lxs").arg(dataDir).arg(file);
static_cast<Raytracing::LuxProject*>(getObject())->Template.setValue((const char*)fn.toUtf8());
static_cast<Raytracing::LuxProject*>(getObject())->Template.setValue((const char*)file.toUtf8());
doc->commitTransaction();
doc->recompute();
}
@@ -145,28 +151,34 @@ void ViewProviderPovray::setupContextMenu(QMenu* menu, QObject* receiver, const
bool ViewProviderPovray::setEdit(int ModNum)
{
if (ModNum == ViewProvider::Default ) {
QStringList items;
auto addTemplates = [&items](const std::string& path) {
QString dataDir = QString::fromUtf8(path.c_str());
QDir dir(dataDir);
QFileInfoList files = dir.entryInfoList(QStringList() << QString::fromLatin1("*.pov"));
for (int i=0; i<files.count(); i++ ) {
QFileInfo fi(files[i]);
items << fi.absoluteFilePath();
}
};
std::string path = App::Application::getResourceDir();
path += "Mod/Raytracing/Templates/";
QString dataDir = QString::fromUtf8(path.c_str());
QDir dir(dataDir, QString::fromLatin1("*.pov"));
QStringList items;
int current = 0;
addTemplates(path);
path = App::Application::getUserAppDataDir();
path += "data/Mod/Raytracing/Templates/";
addTemplates(path);
QFileInfo cfi(QString::fromUtf8(static_cast<Raytracing::RayProject*>(getObject())->Template.getValue()));
for (unsigned int i=0; i<dir.count(); i++ ) {
QFileInfo fi(dir[i]);
items << fi.baseName();
if (fi.baseName() == cfi.baseName()) {
current = i;
}
}
int current = items.indexOf(cfi.absoluteFilePath());
bool ok;
QString file = QInputDialog::getItem(Gui::getMainWindow(), tr("Povray template"), tr("Select a Povray template"), items, current, false, &ok);
if (ok) {
App::Document* doc = getObject()->getDocument();
doc->openTransaction("Edit Povray project");
QString fn = QString::fromLatin1("%1%2.pov").arg(dataDir).arg(file);
static_cast<Raytracing::RayProject*>(getObject())->Template.setValue((const char*)fn.toUtf8());
static_cast<Raytracing::RayProject*>(getObject())->Template.setValue((const char*)file.toUtf8());
doc->commitTransaction();
doc->recompute();
}