void SetCelFrame::onFireNotifications() { Cel* cel = this->cel(); Doc* doc = static_cast<Doc*>(cel->sprite()->document()); DocEvent ev(doc); ev.sprite(cel->layer()->sprite()); ev.layer(cel->layer()); ev.cel(cel); ev.frame(cel->frame()); doc->notify_observers<DocEvent&>(&DocObserver::onCelFrameChanged, ev); }
void UnlinkCelCommand::onExecute(Context* context) { ContextWriter writer(context); Document* document(writer.document()); bool nonEditableLayers = false; { Transaction transaction(writer.context(), "Unlink Cel"); // TODO the range of selected frames should be in doc::Site. auto range = App::instance()->timeline()->range(); if (range.enabled()) { Sprite* sprite = writer.sprite(); for (LayerIndex layerIdx = range.layerBegin(); layerIdx <= range.layerEnd(); ++layerIdx) { Layer* layer = sprite->indexToLayer(layerIdx); if (!layer->isImage()) continue; LayerImage* layerImage = static_cast<LayerImage*>(layer); for (frame_t frame = range.frameEnd(), begin = range.frameBegin()-1; frame != begin; --frame) { Cel* cel = layerImage->cel(frame); if (cel && cel->links()) { if (layerImage->isEditable()) transaction.execute(new cmd::UnlinkCel(cel)); else nonEditableLayers = true; } } } } else { Cel* cel = writer.cel(); if (cel && cel->links()) { if (cel->layer()->isEditable()) transaction.execute(new cmd::UnlinkCel(writer.cel())); else nonEditableLayers = true; } } transaction.commit(); } if (nonEditableLayers) StatusBar::instance()->showTip(1000, "There are locked layers"); update_screen_for_document(document); }
void UnlinkCelCommand::onExecute(Context* context) { ContextWriter writer(context); Document* document(writer.document()); bool nonEditableLayers = false; { Transaction transaction(writer.context(), "Unlink Cel"); const Site* site = writer.site(); if (site->inTimeline() && !site->selectedLayers().empty()) { for (Layer* layer : site->selectedLayers()) { if (!layer->isImage()) continue; if (!layer->isEditableHierarchy()) { nonEditableLayers = true; continue; } LayerImage* layerImage = static_cast<LayerImage*>(layer); for (frame_t frame : site->selectedFrames().reversed()) { Cel* cel = layerImage->cel(frame); if (cel && cel->links()) transaction.execute(new cmd::UnlinkCel(cel)); } } } else { Cel* cel = writer.cel(); if (cel && cel->links()) { if (cel->layer()->isEditableHierarchy()) transaction.execute(new cmd::UnlinkCel(writer.cel())); else nonEditableLayers = true; } } transaction.commit(); } if (nonEditableLayers) StatusBar::instance()->showTip(1000, "There are locked layers"); update_screen_for_document(document); }
void SetCelFrame::onUndo() { Cel* cel = this->cel(); cel->layer()->moveCel(cel, m_oldFrame); cel->incrementVersion(); }
void SetCelFrame::onExecute() { Cel* cel = this->cel(); cel->layer()->moveCel(cel, m_newFrame); cel->incrementVersion(); }