--Bug fixes:

-Fix path bugs when creating dialogs on Mac.
 -Add new setting for path when creating palette from image.
This commit is contained in:
Person 2017-04-04 16:21:58 -07:00
parent 2f54215e65
commit 2773ef27f7
9 changed files with 99 additions and 30 deletions

View File

@ -417,9 +417,6 @@
<CustomBuild Include="..\..\..\Source\Fractorium\GLWidget.h">
<Filter>MainWindows</Filter>
</CustomBuild>
<CustomBuild Include="..\..\..\Source\Fractorium\Fractorium.h">
<Filter>MainWindows</Filter>
</CustomBuild>
<CustomBuild Include="..\..\..\Source\Fractorium\EmberTreeWidgetItem.h">
<Filter>Widgets</Filter>
</CustomBuild>
@ -477,6 +474,9 @@
<CustomBuild Include="..\..\..\Source\Fractorium\paletteeditor.ui">
<Filter>Form Files</Filter>
</CustomBuild>
<CustomBuild Include="..\..\..\Source\Fractorium\Fractorium.h">
<Filter>Header Files</Filter>
</CustomBuild>
</ItemGroup>
<ItemGroup>
<None Include="..\..\..\Source\Fractorium\Icons\Fractorium.ico" />

View File

@ -51,8 +51,6 @@ Fractorium::Fractorium(QWidget* p)
#endif
m_Settings = FractoriumSettings::Instance();
m_QssDialog = new QssDialog(this);
m_FileDialog = nullptr;//Use lazy instantiation upon first use.
m_FolderDialog = nullptr;
m_FinalRenderDialog = new FractoriumFinalRenderDialog(this);
m_OptionsDialog = new FractoriumOptionsDialog(this);
m_VarDialog = new FractoriumVariationsDialog(this);
@ -509,6 +507,8 @@ void Fractorium::SetFixedTableHeader(QHeaderView* header, QHeaderView::ResizeMod
/// <returns>The filename selected</returns>
QStringList Fractorium::SetupOpenXmlDialog()
{
#ifndef __APPLE__
//Lazy instantiate since it takes a long time.
if (!m_FileDialog)
{
@ -534,6 +534,15 @@ QStringList Fractorium::SetupOpenXmlDialog()
m_Settings->OpenFolder(QFileInfo(filenames[0]).canonicalPath());
}
#else
auto defaultFilter(m_Settings->OpenXmlExt());
auto filenames = QFileDialog::getOpenFileNames(this, tr("Open Flame"), m_Settings->OpenFolder(), tr("Flame Files (*.flam3 *.flame *.xml)"), &defaultFilter);
m_Settings->OpenXmlExt(defaultFilter);
if (!filenames.empty())
m_Settings->OpenFolder(QFileInfo(filenames[0]).canonicalPath());
#endif
return filenames;
}
@ -545,6 +554,8 @@ QStringList Fractorium::SetupOpenXmlDialog()
/// <returns>The filename selected</returns>
QString Fractorium::SetupSaveXmlDialog(const QString& defaultFilename)
{
#ifndef __APPLE__
//Lazy instantiate since it takes a long time.
//QS
if (!m_FileDialog)
@ -553,9 +564,6 @@ QString Fractorium::SetupSaveXmlDialog(const QString& defaultFilename)
m_FileDialog->setViewMode(QFileDialog::List);
}
if (!m_FileDialog)
return "";
QString filename;
m_FileDialog->disconnect(SIGNAL(filterSelected(const QString&)));
connect(m_FileDialog, &QFileDialog::filterSelected, [&](const QString & filter) { m_Settings->SaveXmlExt(filter); });
@ -583,6 +591,11 @@ QString Fractorium::SetupSaveXmlDialog(const QString& defaultFilename)
}
}
#else
auto defaultFilter(m_Settings->SaveXmlExt());
auto filename = QFileDialog::getSaveFileName(this, tr("Save flame as xml"), m_Settings->SaveFolder() + "/" + defaultFilename, tr("Flam3 (*.flam3);;Flame (*.flame);;Xml (*.xml)"), &defaultFilter);
m_Settings->SaveXmlExt(defaultFilter);
#endif
return filename;
}
@ -594,6 +607,8 @@ QString Fractorium::SetupSaveXmlDialog(const QString& defaultFilename)
/// <returns>The filename selected</returns>
QString Fractorium::SetupSaveImageDialog(const QString& defaultFilename)
{
#ifndef __APPLE__
//Lazy instantiate since it takes a long time.
if (!m_FileDialog)
{
@ -601,9 +616,6 @@ QString Fractorium::SetupSaveImageDialog(const QString& defaultFilename)
m_FileDialog->setViewMode(QFileDialog::List);
}
if (!m_FileDialog)
return "";
QString filename;
m_FileDialog->disconnect(SIGNAL(filterSelected(const QString&)));
connect(m_FileDialog, &QFileDialog::filterSelected, [&](const QString & filter) { m_Settings->SaveImageExt(filter); });
@ -622,6 +634,11 @@ QString Fractorium::SetupSaveImageDialog(const QString& defaultFilename)
if (m_FileDialog->exec() == QDialog::Accepted)
filename = m_FileDialog->selectedFiles().value(0);
#else
auto defaultFilter(m_Settings->SaveImageExt());
auto filename = QFileDialog::getSaveFileName(this, tr("Save image"), m_Settings->SaveFolder() + "/" + defaultFilename, tr("Jpeg (*.jpg);;Png (*.png);;Bmp (*.bmp)"));
m_Settings->SaveImageExt(defaultFilter);
#endif
return filename;
}
@ -632,6 +649,8 @@ QString Fractorium::SetupSaveImageDialog(const QString& defaultFilename)
/// <returns>The folder selected, with '/' appended to the end</returns>
QString Fractorium::SetupSaveFolderDialog()
{
#ifndef __APPLE__
//Lazy instantiate since it takes a long time.
if (!m_FolderDialog)
{
@ -639,9 +658,6 @@ QString Fractorium::SetupSaveFolderDialog()
m_FolderDialog->setViewMode(QFileDialog::List);
}
if (!m_FolderDialog)
return "";
QString filename;
//This must come first because it clears various internal states which allow the file text to be properly set.
//This is most likely a bug in QFileDialog.
@ -658,6 +674,15 @@ QString Fractorium::SetupSaveFolderDialog()
filename = MakeEnd(m_FolderDialog->selectedFiles().value(0), '/');
}
#else
auto filename = QFileDialog::getExistingDirectory(this, tr("Save to folder"),
m_Settings->SaveFolder(),
QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
if (filename.size() > 0)
filename = MakeEnd(filename, '/');
#endif
return filename;
}

View File

@ -530,8 +530,10 @@ private:
QTableWidgetItem* m_InfoFinalXformItem;
//Files.
#ifndef __APPLE__
QFileDialog* m_FileDialog = nullptr;
QFileDialog* m_FolderDialog = nullptr;
#endif
QssDialog* m_QssDialog = nullptr;
QString m_LastSaveAll;
QString m_LastSaveCurrent;

View File

@ -75,7 +75,7 @@ void FractoriumSettings::EnsureDefaults()
if (FinalExt() != "jpg" && FinalExt() != "png")
FinalExt("png");
QString s = SaveFolder();
auto s = SaveFolder();
QDir dir(s);
if (s.isEmpty() || !dir.exists())
@ -85,6 +85,9 @@ void FractoriumSettings::EnsureDefaults()
if (!paths.empty())
SaveFolder(paths[0]);
}
if (OpenPaletteImageFolder() == "")
OpenPaletteImageFolder(QCoreApplication::applicationDirPath());
}
/// <summary>
@ -285,6 +288,9 @@ void FractoriumSettings::Nick(const QString& s) { setValue(IDENTITYNICK, s);
QString FractoriumSettings::OpenFolder() { return value(OPENFOLDER).toString(); }
void FractoriumSettings::OpenFolder(const QString& s) { setValue(OPENFOLDER, s); }
QString FractoriumSettings::OpenPaletteImageFolder() { return value(OPENPALETTEIMAGEFOLDER).toString(); }
void FractoriumSettings::OpenPaletteImageFolder(const QString& s) { setValue(OPENPALETTEIMAGEFOLDER, s); }
QString FractoriumSettings::SaveFolder() { return value(SAVEFOLDER).toString(); }
void FractoriumSettings::SaveFolder(const QString& s) { setValue(SAVEFOLDER, s); }

View File

@ -67,8 +67,9 @@
#define XMLQUALITY "xml/quality"
#define XMLSUPERSAMPLE "xml/supersample"
#define OPENFOLDER "path/open"
#define SAVEFOLDER "path/save"
#define OPENFOLDER "path/open"
#define OPENPALETTEIMAGEFOLDER "path/openpaletteimage"
#define SAVEFOLDER "path/save"
#define OPENXMLEXT "file/openxmlext"
#define SAVEXMLEXT "file/savexmlext"
@ -261,6 +262,9 @@ public:
QString OpenFolder();
void OpenFolder(const QString& s);
QString OpenPaletteImageFolder();
void OpenPaletteImageFolder(const QString& s);
QString SaveFolder();
void SaveFolder(const QString& s);

View File

@ -425,6 +425,10 @@ void PaletteEditor::EmitPaletteChanged()
/// </summary>
QStringList PaletteEditor::SetupOpenImagesDialog()
{
QStringList filenames;
auto settings = FractoriumSettings::Instance();
#ifndef __APPLE__
if (!m_FileDialog)
{
m_FileDialog = new QFileDialog(this);
@ -433,20 +437,33 @@ QStringList PaletteEditor::SetupOpenImagesDialog()
m_FileDialog->setAcceptMode(QFileDialog::AcceptOpen);
m_FileDialog->setNameFilter("Image Files (*.png *.jpg *.bmp)");
m_FileDialog->setWindowTitle("Open Image");
m_FileDialog->setDirectory(QCoreApplication::applicationDirPath());
m_FileDialog->setDirectory(settings->OpenPaletteImageFolder());
m_FileDialog->selectNameFilter("*.jpg");
}
QStringList filenames;
if (m_FileDialog->exec() == QDialog::Accepted)
{
filenames = m_FileDialog->selectedFiles();
if (!filenames.empty())
m_FileDialog->setDirectory(QFileInfo(filenames[0]).canonicalPath());
{
auto path = QFileInfo(filenames[0]).canonicalPath();
m_FileDialog->setDirectory(path);
settings->OpenPaletteImageFolder(path);
}
}
#else
auto filename = QFileDialog::getOpenFileName(this, tr("Open Image"), settings->OpenPaletteImageFolder(), tr("Image Files (*.png *.jpg *.bmp)"));
if (filename.size() > 0)
{
filenames.append(filename);
auto path = QFileInfo(filenames[0]).canonicalPath();
settings->OpenPaletteImageFolder(path);
}
#endif
return filenames;
}

View File

@ -72,7 +72,9 @@ private:
string m_CurrentPaletteFilePath;
ColorPickerWidget* m_ColorPicker = nullptr;
GradientColorsView* m_GradientColorView = nullptr;
#ifndef __APPLE__
QFileDialog* m_FileDialog = nullptr;
#endif
shared_ptr<PaletteList<float>> m_PaletteList;
std::unique_ptr<Ui::PaletteEditor> ui;
};

View File

@ -44,9 +44,7 @@ bool CaseInsensitiveLessThanQ(const QString& s1, const QString& s2)
QssDialog::QssDialog(Fractorium* parent) :
QDialog(parent),
ui(new Ui::QssDialog),
m_FileDialog(nullptr),
m_Parent(parent),
m_Theme(nullptr),
m_AddColorAction(new QAction(tr("Add Color"), this)),
m_AddGeomAction(new QAction(tr("Add Geometry"), this)),
m_AddBorderAction(new QAction(tr("Add Border"), this)),
@ -631,13 +629,16 @@ void QssDialog::InsertCssProperty(const QString& name, const QString& value)
/// </summary>
void QssDialog::SetupFileDialog()
{
#ifndef __APPLE__
if (!m_FileDialog)
{
auto path = m_Parent->m_SettingsPath;
m_FileDialog = new QFileDialog(this);
m_FileDialog->setDirectory(path);
m_FileDialog->setDirectory(m_Parent->m_SettingsPath);
m_FileDialog->setViewMode(QFileDialog::List);
}
#endif
}
/// <summary>
@ -646,6 +647,7 @@ void QssDialog::SetupFileDialog()
/// <returns>The file selected if any, else empty string.</returns>
QString QssDialog::OpenFile()
{
#ifndef __APPLE__
QStringList filenames;
SetupFileDialog();
m_FileDialog->setFileMode(QFileDialog::ExistingFile);
@ -658,6 +660,10 @@ QString QssDialog::OpenFile()
filenames = m_FileDialog->selectedFiles();
return !filenames.empty() ? filenames[0] : "";
#else
auto filename = QFileDialog::getOpenFileName(this, tr("Open Stylesheet"), m_Parent->m_SettingsPath, tr("Qss (*.qss)"));
return filename.size() > 0 ? filename : "";
#endif
}
/// <summary>
@ -666,6 +672,7 @@ QString QssDialog::OpenFile()
/// <returns>The file selected for saving if any, else empty string.</returns>
QString QssDialog::SaveFile()
{
#ifndef __APPLE__
QStringList filenames;
SetupFileDialog();
m_FileDialog->setFileMode(QFileDialog::AnyFile);
@ -678,4 +685,8 @@ QString QssDialog::SaveFile()
filenames = m_FileDialog->selectedFiles();
return !filenames.empty() ? filenames[0] : "";
#else
auto filename = QFileDialog::getSaveFileName(this, tr("Save Stylesheet"), m_Parent->m_SettingsPath, tr("Qss (*.qss)"));
return filename.size() > 0 ? filename : "";
#endif
}

View File

@ -53,7 +53,7 @@
namespace Ui
{
class QssDialog;
class QssDialog;
}
/// <summary>
@ -113,12 +113,12 @@ private slots:
private:
void SaveAsDefault();
void InsertCssProperty(const QString &name, const QString &value);
void InsertCssProperty(const QString& name, const QString& value);
void SetupFileDialog();
QString OpenFile();
QString SaveFile();
QStyle* m_Theme;
QStyle* m_Theme = nullptr;
QStyle* m_LastTheme;
QString m_LastStyle;
QAction* m_AddColorAction;
@ -136,6 +136,8 @@ private:
QHash<QString, QString> m_StyleMap;
QTimer* m_ApplyTimer;
Fractorium* m_Parent;
QFileDialog* m_FileDialog;
Ui::QssDialog *ui;
#ifndef __APPLE__
QFileDialog* m_FileDialog = nullptr;
#endif
Ui::QssDialog* ui;
};