aseprite/src/app/commands/cmd_layer_lock.cpp

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

91 lines
2.0 KiB
C++
Raw Normal View History

2017-10-04 02:34:07 +08:00
// Aseprite
2025-01-07 04:07:22 +08:00
// Copyright (C) 2023-2024 Igara Studio S.A.
2017-10-04 02:34:07 +08:00
// 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/commands/command.h"
#include "app/context_access.h"
#include "app/modules/gui.h"
#include "doc/layer.h"
namespace app {
using namespace ui;
class LayerLockCommand : public Command {
public:
LayerLockCommand();
protected:
bool onEnabled(Context* context) override;
bool onChecked(Context* context) override;
void onExecute(Context* context) override;
};
LayerLockCommand::LayerLockCommand() : Command(CommandId::LayerLock())
2017-10-04 02:34:07 +08:00
{
}
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;
const view::RealRange& range = context->range();
2017-10-04 02:34:07 +08:00
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);
Doc* doc = writer.document();
2017-10-04 02:34:07 +08:00
SelectedLayers selLayers;
auto range = context->range();
2017-10-04 02:34:07 +08:00
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)
doc->setLayerEditableWithNotifications(layer, anyLock);
2017-10-04 02:34:07 +08:00
update_screen_for_document(writer.document());
}
Command* CommandFactory::createLayerLockCommand()
{
return new LayerLockCommand;
}
} // namespace app