diff --git a/Builds/MSVC/VS2015/Fractorium.vcxproj.filters b/Builds/MSVC/VS2015/Fractorium.vcxproj.filters
index 99913c6..5a528cc 100644
--- a/Builds/MSVC/VS2015/Fractorium.vcxproj.filters
+++ b/Builds/MSVC/VS2015/Fractorium.vcxproj.filters
@@ -417,9 +417,6 @@
MainWindows
-
- MainWindows
-
Widgets
@@ -477,6 +474,9 @@
Form Files
+
+ Header Files
+
diff --git a/Source/Fractorium/Fractorium.cpp b/Source/Fractorium/Fractorium.cpp
index a422d4c..80a9d57 100644
--- a/Source/Fractorium/Fractorium.cpp
+++ b/Source/Fractorium/Fractorium.cpp
@@ -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
/// The filename selected
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()
/// The filename selected
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)
/// The filename selected
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)
/// The folder selected, with '/' appended to the end
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;
}
diff --git a/Source/Fractorium/Fractorium.h b/Source/Fractorium/Fractorium.h
index d0f61de..6495e75 100644
--- a/Source/Fractorium/Fractorium.h
+++ b/Source/Fractorium/Fractorium.h
@@ -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;
diff --git a/Source/Fractorium/FractoriumSettings.cpp b/Source/Fractorium/FractoriumSettings.cpp
index 14e37ed..c2782f8 100644
--- a/Source/Fractorium/FractoriumSettings.cpp
+++ b/Source/Fractorium/FractoriumSettings.cpp
@@ -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());
}
///
@@ -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); }
diff --git a/Source/Fractorium/FractoriumSettings.h b/Source/Fractorium/FractoriumSettings.h
index 27b8ec1..4025f2a 100644
--- a/Source/Fractorium/FractoriumSettings.h
+++ b/Source/Fractorium/FractoriumSettings.h
@@ -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);
diff --git a/Source/Fractorium/PaletteEditor/PaletteEditor.cpp b/Source/Fractorium/PaletteEditor/PaletteEditor.cpp
index ca8d642..f410cc0 100644
--- a/Source/Fractorium/PaletteEditor/PaletteEditor.cpp
+++ b/Source/Fractorium/PaletteEditor/PaletteEditor.cpp
@@ -425,6 +425,10 @@ void PaletteEditor::EmitPaletteChanged()
///
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;
}
diff --git a/Source/Fractorium/PaletteEditor/PaletteEditor.h b/Source/Fractorium/PaletteEditor/PaletteEditor.h
index da0fb23..194b832 100644
--- a/Source/Fractorium/PaletteEditor/PaletteEditor.h
+++ b/Source/Fractorium/PaletteEditor/PaletteEditor.h
@@ -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> m_PaletteList;
std::unique_ptr ui;
};
diff --git a/Source/Fractorium/QssDialog.cpp b/Source/Fractorium/QssDialog.cpp
index da2e2a7..aea59ff 100644
--- a/Source/Fractorium/QssDialog.cpp
+++ b/Source/Fractorium/QssDialog.cpp
@@ -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)
///
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
}
///
@@ -646,6 +647,7 @@ void QssDialog::SetupFileDialog()
/// The file selected if any, else empty string.
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
}
///
@@ -666,6 +672,7 @@ QString QssDialog::OpenFile()
/// The file selected for saving if any, else empty string.
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
}
diff --git a/Source/Fractorium/QssDialog.h b/Source/Fractorium/QssDialog.h
index 9c66a27..6a08590 100644
--- a/Source/Fractorium/QssDialog.h
+++ b/Source/Fractorium/QssDialog.h
@@ -53,7 +53,7 @@
namespace Ui
{
- class QssDialog;
+class QssDialog;
}
///
@@ -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 m_StyleMap;
QTimer* m_ApplyTimer;
Fractorium* m_Parent;
- QFileDialog* m_FileDialog;
- Ui::QssDialog *ui;
+#ifndef __APPLE__
+ QFileDialog* m_FileDialog = nullptr;
+#endif
+ Ui::QssDialog* ui;
};