Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Change default animation export path to same directory as project fil… #1657

Merged
merged 12 commits into from
Oct 30, 2022
54 changes: 40 additions & 14 deletions app/src/filedialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ GNU General Public License for more details.
#include "fileformat.h"
#include "pencildef.h"


QString FileDialog::getOpenFileName(QWidget* parent, FileType fileType, const QString& caption)
{
QString strInitialFilePath = getLastOpenPath(fileType);
Expand All @@ -38,6 +39,12 @@ QString FileDialog::getOpenFileName(QWidget* parent, FileType fileType, const QS
if (!filePath.isEmpty())
{
setLastOpenPath(fileType, filePath);

if (fileType == FileType::ANIMATION)
{
// When we open a project, change default export path for all filetypes
setLastSavePaths(filePath);
}
}

return filePath;
Expand All @@ -62,6 +69,18 @@ QStringList FileDialog::getOpenFileNames(QWidget* parent, FileType fileType, con
return filePaths;
}

void FileDialog::setLastSavePaths(const QString& filePath)
{
QFileInfo filePathInfo(filePath);
QDir projectPath = filePathInfo.absoluteDir();
QString baseName = filePathInfo.baseName();
QList<FileType> fileTypes = { FileType::IMAGE, FileType::IMAGE_SEQUENCE, FileType::GIF, FileType::MOVIE, FileType::SOUND, FileType::PALETTE };
for (FileType& fileType : fileTypes)
{
setLastSavePath(fileType, projectPath.absoluteFilePath(defaultFileName(fileType, baseName)));
}
}

QString FileDialog::getSaveFileName(QWidget* parent, FileType fileType, const QString& caption)
{
QString strInitialFilePath = getLastSavePath(fileType);
Expand All @@ -76,18 +95,24 @@ QString FileDialog::getSaveFileName(QWidget* parent, FileType fileType, const QS

if (filePath.isEmpty()) { return QString(); }

if (fileType == FileType::ANIMATION)
{
// When we save a new project, change default path for all other filetypes
setLastSavePaths(filePath);
}

setLastSavePath(fileType, filePath);

QFileInfo info(filePath);
if (info.suffix().isEmpty() && strSelectedFilter.isEmpty())
{
filePath += addDefaultExtensionSuffix(fileType);
filePath += getDefaultExtensionByFileType(fileType);
}

return filePath;
}

QString FileDialog::addDefaultExtensionSuffix(const FileType fileType)
QString FileDialog::getDefaultExtensionByFileType(const FileType fileType)
{
switch (fileType)
{
Expand All @@ -96,16 +121,17 @@ QString FileDialog::addDefaultExtensionSuffix(const FileType fileType)
case FileType::IMAGE_SEQUENCE: return PFF_DEFAULT_IMAGE_SEQ_EXT;
case FileType::GIF: return PFF_DEFAULT_ANIMATED_EXT;
case FileType::PALETTE: return PFF_DEFAULT_PALETTE_EXT;
case FileType::MOVIE: return PFF_DEFAULT_MOVIE_EXT;
case FileType::SOUND: return PFF_DEFAULT_SOUND_EXT;
default:
return "";
Q_UNREACHABLE();
}
}

QString FileDialog::getLastOpenPath(FileType fileType)
{
QSettings setting(PENCIL2D, PENCIL2D);
setting.beginGroup("LastOpenPath");

return setting.value(toSettingKey(fileType), QDir::homePath()).toString();
}

Expand Down Expand Up @@ -222,19 +248,19 @@ QString FileDialog::getFilterForFile(const QString& filters, QString filePath)
return QString();
}

QString FileDialog::defaultFileName(FileType fileType)
QString FileDialog::defaultFileName(FileType fileType, QString baseName)
{
switch (fileType)
QString defaultName = tr("untitled");
if (!baseName.isEmpty())
{
case FileType::ANIMATION: return tr("MyAnimation.pclx");
case FileType::IMAGE:
case FileType::IMAGE_SEQUENCE: return tr("untitled.png");
case FileType::GIF: return tr("untitled.gif");
case FileType::MOVIE: return tr("untitled.mp4");
case FileType::SOUND: return tr("untitled.wav");
case FileType::PALETTE: return tr("untitled.xml");
defaultName = baseName;
}
return "";
else if (fileType == FileType::ANIMATION)
{
defaultName = tr("MyAnimation");
}

return defaultName.append(getDefaultExtensionByFileType(fileType));
}

QString FileDialog::toSettingKey(FileType fileType)
Expand Down
5 changes: 3 additions & 2 deletions app/src/filedialog.h
Original file line number Diff line number Diff line change
Expand Up @@ -105,11 +105,12 @@ class FileDialog : public QObject
static QString openFileFilters( FileType fileType );
static QString saveFileFilters( FileType fileType );
static QString getFilterForFile( const QString& fileType, QString filePath );
static QString defaultFileName( FileType fileType );
static QString defaultFileName(FileType fileType , QString baseName = QString());

static QString addDefaultExtensionSuffix(FileType fileType);
static QString getDefaultExtensionByFileType(FileType fileType);

static QString toSettingKey( FileType fileType );
static void setLastSavePaths(const QString& filePath);
};

#endif // FILEDIALOG_H
1 change: 0 additions & 1 deletion app/src/importexportdialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,6 @@ QDialogButtonBox* ImportExportDialog::getDialogButtonBox()
return ui->buttonBox;
}


QString ImportExportDialog::getFilePath() const
{
return m_filePaths.isEmpty() ? QString() : m_filePaths.first();
Expand Down
6 changes: 6 additions & 0 deletions core_lib/src/util/fileformat.h
Original file line number Diff line number Diff line change
Expand Up @@ -67,9 +67,15 @@ GNU General Public License for more details.
#define PFF_DEFAULT_ANIMATED_EXT \
QString(".gif")

#define PFF_DEFAULT_MOVIE_EXT \
QString(".mp4")

#define PFF_DEFAULT_PALETTE_EXT \
QString(".xml")

#define PFF_DEFAULT_SOUND_EXT \
QString(".wav")

#define PFF_OLD_DATA_DIR "data"
#define PFF_DATA_DIR "data"
#define PFF_XML_FILE_NAME "main.xml"
Expand Down