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; };