Add LayerLock command

This commit is contained in:
David Capello 2017-10-03 15:34:07 -03:00
parent 0f1868dee9
commit 9c6f6f3114
4 changed files with 101 additions and 0 deletions

View File

@ -708,6 +708,7 @@
<menu text="&amp;Layer">
<item command="LayerProperties" text="&amp;Properties..." />
<item command="LayerVisibility" text="&amp;Visible" />
<item command="LayerLock" text="Loc&amp;k Layers" />
<item command="OpenGroup" text="&amp;Open Group" />
<separator />
<item command="NewLayer" text="&amp;New Layer" />

View File

@ -280,6 +280,7 @@ add_library(app-lib
commands/cmd_keyboard_shortcuts.cpp
commands/cmd_launch.cpp
commands/cmd_layer_from_background.cpp
commands/cmd_layer_lock.cpp
commands/cmd_layer_opacity.cpp
commands/cmd_layer_properties.cpp
commands/cmd_layer_visibility.cpp

View File

@ -0,0 +1,98 @@
// Aseprite
// Copyright (C) 2017 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/app.h"
#include "app/commands/command.h"
#include "app/context_access.h"
#include "app/modules/gui.h"
#include "app/ui/timeline/timeline.h"
#include "doc/image.h"
#include "doc/layer.h"
namespace app {
using namespace ui;
class LayerLockCommand : public Command {
public:
LayerLockCommand();
Command* clone() const override { return new LayerLockCommand(*this); }
protected:
bool onEnabled(Context* context) override;
bool onChecked(Context* context) override;
void onExecute(Context* context) override;
};
LayerLockCommand::LayerLockCommand()
: Command("LayerLock",
"Lock Layers",
CmdRecordableFlag)
{
}
bool LayerLockCommand::onEnabled(Context* context)
{
return context->checkFlags(ContextFlags::ActiveDocumentIsWritable |
ContextFlags::HasActiveLayer);
}
bool LayerLockCommand::onChecked(Context* context)
{
const ContextReader reader(context);
if (!reader.document() ||
!reader.layer())
return false;
SelectedLayers selLayers;
auto range = App::instance()->timeline()->range();
if (range.enabled()) {
selLayers = range.selectedLayers();
}
else {
selLayers.insert(const_cast<Layer*>(reader.layer()));
}
bool lock = false;
for (auto layer : selLayers) {
if (layer && !layer->isEditable())
lock = true;
}
return lock;
}
void LayerLockCommand::onExecute(Context* context)
{
ContextWriter writer(context);
SelectedLayers selLayers;
auto range = App::instance()->timeline()->range();
if (range.enabled()) {
selLayers = range.selectedLayers();
}
else {
selLayers.insert(writer.layer());
}
bool anyLock = false;
for (auto layer : selLayers) {
if (!layer->isEditable())
anyLock = true;
}
for (auto layer : selLayers) {
layer->setEditable(anyLock);
}
update_screen_for_document(writer.document());
}
Command* CommandFactory::createLayerLockCommand()
{
return new LayerLockCommand;
}
} // namespace app

View File

@ -63,6 +63,7 @@ FOR_EACH_COMMAND(InvertMask)
FOR_EACH_COMMAND(KeyboardShortcuts)
FOR_EACH_COMMAND(Launch)
FOR_EACH_COMMAND(LayerFromBackground)
FOR_EACH_COMMAND(LayerLock)
FOR_EACH_COMMAND(LayerOpacity)
FOR_EACH_COMMAND(LayerProperties)
FOR_EACH_COMMAND(LayerVisibility)