aseprite/src/app/file_selector.cpp
David Capello c42c5e1453 Backport new laf API to main branch of aseprite
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)
2021-07-05 17:51:29 -03:00

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