mirror of
https://github.com/aseprite/aseprite.git
synced 2024-10-06 14:59:50 +00:00
c42c5e1453
Some features from the beta branch of aseprite & laf were backported to the main branch of aseprite. Related commits: - New memory handling (db4504e816
) - New get event with timeout (e6ec13cc31
) - Convert os::NativeCursor to an enum (06a5b4f3ae
) - Adapt code to the new os::Display -> os::Window refactor (5d31314cdb
) - Save/load main window layout correctly and limit to current workarea (d6acb9e20f
) - Redraw window immediately on "live resizing" (d0b39ebade
)
82 lines
2.2 KiB
C++
82 lines
2.2 KiB
C++
// Aseprite
|
|
// Copyright (C) 2020-2021 Igara Studio S.A.
|
|
// Copyright (C) 2001-2018 David Capello
|
|
//
|
|
// This program is distributed under the terms of
|
|
// the End-User License Agreement for Aseprite.
|
|
|
|
#ifdef HAVE_CONFIG_H
|
|
#include "config.h"
|
|
#endif
|
|
|
|
#include "app/file_selector.h"
|
|
|
|
#include "app/app.h"
|
|
#include "app/pref/preferences.h"
|
|
#include "app/ui/file_selector.h"
|
|
#include "os/native_dialogs.h"
|
|
#include "os/system.h"
|
|
#include "os/window.h"
|
|
|
|
namespace app {
|
|
|
|
bool show_file_selector(
|
|
const std::string& title,
|
|
const std::string& initialPath,
|
|
const base::paths& extensions,
|
|
FileSelectorType type,
|
|
base::paths& output)
|
|
{
|
|
const std::string defExtension =
|
|
Preferences::instance().saveFile.defaultExtension();
|
|
|
|
if (Preferences::instance().experimental.useNativeFileDialog() &&
|
|
os::instance()->nativeDialogs()) {
|
|
os::FileDialogRef dlg =
|
|
os::instance()->nativeDialogs()->makeFileDialog();
|
|
|
|
if (dlg) {
|
|
dlg->setTitle(title);
|
|
dlg->setFileName(initialPath);
|
|
|
|
os::FileDialog::Type nativeType = os::FileDialog::Type::OpenFile;
|
|
switch (type) {
|
|
case FileSelectorType::Open:
|
|
nativeType = os::FileDialog::Type::OpenFile;
|
|
break;
|
|
case FileSelectorType::OpenMultiple:
|
|
nativeType = os::FileDialog::Type::OpenFiles;
|
|
break;
|
|
case FileSelectorType::Save:
|
|
nativeType = os::FileDialog::Type::SaveFile;
|
|
break;
|
|
}
|
|
dlg->setType(nativeType);
|
|
|
|
for (const auto& ext : extensions)
|
|
dlg->addFilter(ext, ext + " files (*." + ext + ")");
|
|
|
|
if (!defExtension.empty())
|
|
dlg->setDefaultExtension(defExtension);
|
|
|
|
bool res = dlg->show(os::instance()->defaultWindow());
|
|
if (res) {
|
|
if (type == FileSelectorType::OpenMultiple)
|
|
dlg->getMultipleFileNames(output);
|
|
else
|
|
output.push_back(dlg->fileName());
|
|
}
|
|
return res;
|
|
}
|
|
}
|
|
|
|
FileSelector fileSelector(type);
|
|
|
|
if (!defExtension.empty())
|
|
fileSelector.setDefaultExtension(defExtension);
|
|
|
|
return fileSelector.show(title, initialPath, extensions, output);
|
|
}
|
|
|
|
} // namespace app
|