diff --git a/data/pref.xml b/data/pref.xml
index bc9f500bf..66332f569 100644
--- a/data/pref.xml
+++ b/data/pref.xml
@@ -121,6 +121,11 @@
+
+
+
+
+
@@ -313,6 +318,9 @@
+
diff --git a/data/strings/en.ini b/data/strings/en.ini
index 24207e5ca..63f08ea45 100644
--- a/data/strings/en.ini
+++ b/data/strings/en.ini
@@ -1,5 +1,5 @@
# Aseprite
-# Copyright (C) 2018-2020 Igara Studio S.A.
+# Copyright (C) 2018-2021 Igara Studio S.A.
# Copyright (C) 2016-2018 David Capello
[advanced_mode]
@@ -1228,6 +1228,10 @@ the current frame & layer will be modified
to focus the undid/redid change.
END
undo_allow_nonlinear_history = Allow non-linear history
+open_sequence_alert = Open a sequence of static files as an animation
+open_sequence_alert_ask = Ask
+open_sequence_alert_no = No
+open_sequence_alert_yes = Yes
file_format_doesnt_support_alert = Show warning when saving a file with unsupported features
export_animation_in_sequence_alert = Show warning when saving an animation as a sequence of static images
overwrite_files_on_export_alert = Show warning when overwriting files on File > Export
diff --git a/data/widgets/open_sequence.xml b/data/widgets/open_sequence.xml
index 857f25ee8..be47668f0 100644
--- a/data/widgets/open_sequence.xml
+++ b/data/widgets/open_sequence.xml
@@ -1,4 +1,5 @@
+
@@ -9,6 +10,7 @@
+
diff --git a/data/widgets/options.xml b/data/widgets/options.xml
index b810f59fd..6a2dc27be 100644
--- a/data/widgets/options.xml
+++ b/data/widgets/options.xml
@@ -426,6 +426,14 @@
+
+
+
+
+
+
+
+
("oneframe");
std::string sequence = params.get("sequence");
- if (m_oneFrame || sequence == "skip")
- m_seqDecision = SequenceDecision::Skip;
- else if (sequence == "agree")
- m_seqDecision = SequenceDecision::Agree;
- else
- m_seqDecision = SequenceDecision::Ask;
+ if (m_oneFrame ||
+ sequence == "skip" ||
+ sequence == "no") {
+ m_seqDecision = gen::SequenceDecision::NO;
+ }
+ else if (sequence == "agree" ||
+ sequence == "yes") {
+ m_seqDecision = gen::SequenceDecision::YES;
+ }
+ else {
+ m_seqDecision = gen::SequenceDecision::ASK;
+ }
}
void OpenFileCommand::onExecute(Context* context)
@@ -143,14 +149,25 @@ void OpenFileCommand::onExecute(Context* context)
FILE_LOAD_CREATE_PALETTE |
(m_repeatCheckbox ? FILE_LOAD_SEQUENCE_ASK_CHECKBOX: 0);
+ if (context->isUIAvailable() &&
+ m_seqDecision == gen::SequenceDecision::ASK) {
+ if (Preferences::instance().openFile.openSequence() == gen::SequenceDecision::ASK) {
+ // Do nothing (ask by default, or whatever the command params
+ // specified)
+ }
+ else {
+ m_seqDecision = Preferences::instance().openFile.openSequence();
+ }
+ }
+
switch (m_seqDecision) {
- case SequenceDecision::Ask:
+ case gen::SequenceDecision::ASK:
flags |= FILE_LOAD_SEQUENCE_ASK;
break;
- case SequenceDecision::Agree:
+ case gen::SequenceDecision::YES:
flags |= FILE_LOAD_SEQUENCE_YES;
break;
- case SequenceDecision::Skip:
+ case gen::SequenceDecision::NO:
flags |= FILE_LOAD_SEQUENCE_NONE;
break;
}
@@ -179,12 +196,12 @@ void OpenFileCommand::onExecute(Context* context)
else {
if (fop->isSequence()) {
if (fop->sequenceFlags() & FILE_LOAD_SEQUENCE_YES) {
- m_seqDecision = SequenceDecision::Agree;
+ m_seqDecision = gen::SequenceDecision::YES;
flags &= ~FILE_LOAD_SEQUENCE_ASK;
flags |= FILE_LOAD_SEQUENCE_YES;
}
else if (fop->sequenceFlags() & FILE_LOAD_SEQUENCE_NONE) {
- m_seqDecision = SequenceDecision::Skip;
+ m_seqDecision = gen::SequenceDecision::NO;
flags &= ~FILE_LOAD_SEQUENCE_ASK;
flags |= FILE_LOAD_SEQUENCE_NONE;
}
diff --git a/src/app/commands/cmd_open_file.h b/src/app/commands/cmd_open_file.h
index cae919200..5437611f4 100644
--- a/src/app/commands/cmd_open_file.h
+++ b/src/app/commands/cmd_open_file.h
@@ -1,5 +1,5 @@
// Aseprite
-// Copyright (C) 2020 Igara Studio S.A.
+// Copyright (C) 2020-2021 Igara Studio S.A.
// Copyright (C) 2016-2018 David Capello
//
// This program is distributed under the terms of
@@ -10,6 +10,7 @@
#pragma once
#include "app/commands/command.h"
+#include "app/pref/preferences.h"
#include "base/paths.h"
#include
@@ -18,17 +19,13 @@ namespace app {
class OpenFileCommand : public Command {
public:
- enum class SequenceDecision {
- Ask, Agree, Skip,
- };
-
OpenFileCommand();
const base::paths& usedFiles() const {
return m_usedFiles;
}
- SequenceDecision seqDecision() const {
+ gen::SequenceDecision seqDecision() const {
return m_seqDecision;
}
@@ -42,7 +39,7 @@ namespace app {
bool m_repeatCheckbox;
bool m_oneFrame;
base::paths m_usedFiles;
- SequenceDecision m_seqDecision;
+ gen::SequenceDecision m_seqDecision;
};
} // namespace app
diff --git a/src/app/commands/cmd_options.cpp b/src/app/commands/cmd_options.cpp
index e84a3c1c5..a1d0cd664 100644
--- a/src/app/commands/cmd_options.cpp
+++ b/src/app/commands/cmd_options.cpp
@@ -1,5 +1,5 @@
// Aseprite
-// Copyright (C) 2018-2020 Igara Studio S.A.
+// Copyright (C) 2018-2021 Igara Studio S.A.
// Copyright (C) 2001-2018 David Capello
//
// This program is distributed under the terms of
@@ -235,6 +235,7 @@ public:
}
// Alerts
+ openSequence()->setSelectedItemIndex(int(m_pref.openFile.openSequence()));
resetAlerts()->Click.connect([this]{ onResetAlerts(); });
// Cursor
@@ -681,6 +682,9 @@ public:
m_curPref->bg.color1(checkedBgColor1()->getColor());
m_curPref->bg.color2(checkedBgColor2()->getColor());
+ // Alerts preferences
+ m_pref.openFile.openSequence(gen::SequenceDecision(openSequence()->getSelectedItemIndex()));
+
int undo_size_limit_value;
undo_size_limit_value = undoSizeLimit()->textInt();
undo_size_limit_value = base::clamp(undo_size_limit_value, 0, 999999);
diff --git a/src/app/file/file.cpp b/src/app/file/file.cpp
index bb4444e22..39f2ffc75 100644
--- a/src/app/file/file.cpp
+++ b/src/app/file/file.cpp
@@ -1,5 +1,5 @@
// Aseprite
-// Copyright (C) 2018-2020 Igara Studio S.A.
+// Copyright (C) 2018-2021 Igara Studio S.A.
// Copyright (C) 2001-2018 David Capello
//
// This program is distributed under the terms of
@@ -261,10 +261,19 @@ FileOp* FileOp::createLoadDocumentOperation(Context* context,
window.openWindowInForeground();
+ // Don't show this alert again.
+ if (window.dontShow()->isSelected()) {
+ Preferences::instance().openFile.openSequence(
+ window.closer() == window.agree() ?
+ gen::SequenceDecision::YES:
+ gen::SequenceDecision::NO);
+ }
+
// If the user selected the "do the same for other files"
// checkbox, we've to save what the user want to do for the
// following files.
- if (window.repeat()->isSelected()) {
+ if (window.repeat()->isSelected() ||
+ window.dontShow()->isSelected()) {
if (window.closer() == window.agree())
fop->m_seq.flags = FILE_LOAD_SEQUENCE_YES;
else
diff --git a/src/app/script/values.cpp b/src/app/script/values.cpp
index 311356834..ddf14855a 100644
--- a/src/app/script/values.cpp
+++ b/src/app/script/values.cpp
@@ -1,5 +1,5 @@
// Aseprite
-// Copyright (C) 2019-2020 Igara Studio S.A.
+// Copyright (C) 2019-2021 Igara Studio S.A.
//
// This program is distributed under the terms of
// the End-User License Agreement for Aseprite.
@@ -174,11 +174,12 @@ FOR_ENUM(app::gen::PivotPosition)
FOR_ENUM(app::gen::PixelConnectivity)
FOR_ENUM(app::gen::RightClickMode)
FOR_ENUM(app::gen::SelectionMode)
+FOR_ENUM(app::gen::SequenceDecision)
FOR_ENUM(app::gen::StopAtGrid)
FOR_ENUM(app::gen::SymmetryMode)
FOR_ENUM(app::gen::TimelinePosition)
-FOR_ENUM(app::gen::WindowColorProfile)
FOR_ENUM(app::gen::ToGrayAlgorithm)
+FOR_ENUM(app::gen::WindowColorProfile)
FOR_ENUM(app::tools::FreehandAlgorithm)
FOR_ENUM(app::tools::RotationAlgorithm)
FOR_ENUM(doc::AniDir)
diff --git a/src/app/util/open_batch.h b/src/app/util/open_batch.h
index 39b43bc25..c2e611348 100644
--- a/src/app/util/open_batch.h
+++ b/src/app/util/open_batch.h
@@ -1,5 +1,5 @@
// Aseprite
-// Copyright (C) 2020 Igara Studio S.A.
+// Copyright (C) 2020-2021 Igara Studio S.A.
//
// This program is distributed under the terms of
// the End-User License Agreement for Aseprite.
@@ -29,14 +29,14 @@ namespace app {
params.set("oneframe", "true");
else {
switch (m_lastDecision) {
- case OpenFileCommand::SequenceDecision::Ask:
+ case gen::SequenceDecision::ASK:
params.set("sequence", "ask");
params.set("repeat_checkbox", "true");
break;
- case OpenFileCommand::SequenceDecision::Skip:
+ case gen::SequenceDecision::NO:
params.set("sequence", "skip");
break;
- case OpenFileCommand::SequenceDecision::Agree:
+ case gen::SequenceDecision::YES:
params.set("sequence", "agree");
break;
}
@@ -49,7 +49,7 @@ namespace app {
// Future decision for other files in the CLI
auto d = m_cmd.seqDecision();
- if (d != OpenFileCommand::SequenceDecision::Ask)
+ if (d != gen::SequenceDecision::ASK)
m_lastDecision = d;
}
@@ -59,7 +59,7 @@ namespace app {
private:
OpenFileCommand m_cmd;
- OpenFileCommand::SequenceDecision m_lastDecision = OpenFileCommand::SequenceDecision::Ask;
+ gen::SequenceDecision m_lastDecision = gen::SequenceDecision::ASK;
};
} // namespace app