You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
75 lines
1.8 KiB
75 lines
1.8 KiB
4 years ago
|
package com.jotuntech.sketcher.client.command;
|
||
|
|
||
|
import java.awt.image.ImageObserver;
|
||
|
import java.nio.ByteBuffer;
|
||
|
import java.util.HashSet;
|
||
|
import java.util.Set;
|
||
|
|
||
|
import com.jotuntech.sketcher.client.Client;
|
||
|
import com.jotuntech.sketcher.client.Command;
|
||
|
import com.jotuntech.sketcher.client.Connection;
|
||
|
import com.jotuntech.sketcher.common.Canvas;
|
||
|
import com.jotuntech.sketcher.common.Layer;
|
||
|
import com.jotuntech.sketcher.common.UndoEntry;
|
||
|
import com.jotuntech.sketcher.common.User;
|
||
|
|
||
|
public class DeleteLayerCommand implements Command {
|
||
|
int layerKey;
|
||
|
|
||
|
public DeleteLayerCommand() {
|
||
|
|
||
|
}
|
||
|
|
||
|
public DeleteLayerCommand(int layerKey) {
|
||
|
this.layerKey = layerKey;
|
||
|
}
|
||
|
|
||
|
public int perform(Client client, User user) {
|
||
|
if(user == null) {
|
||
|
return Connection.SEND_NONE;
|
||
|
}
|
||
|
|
||
|
if(user.isViewer()) {
|
||
|
return Connection.SEND_NONE;
|
||
|
}
|
||
|
|
||
|
Canvas canvas = client.getCanvas();
|
||
|
Layer layer = canvas.getLayerMap().remove(layerKey);
|
||
|
|
||
|
if(layer == null) {
|
||
|
return Connection.SEND_NONE;
|
||
|
}
|
||
|
|
||
|
// Remove references to layer from undo deque
|
||
|
for(User u: client.getUserMap().values()) {
|
||
|
Set<UndoEntry> uers = new HashSet<UndoEntry>();
|
||
|
for(UndoEntry ue : u.getUndoDeque()) {
|
||
|
if(ue.getLayer() == layer) {
|
||
|
uers.add(ue);
|
||
|
}
|
||
|
}
|
||
|
for(UndoEntry ue : uers) {
|
||
|
u.getUndoDeque().remove(ue);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if(canvas.getImageObserver() != null) {
|
||
|
canvas.getImageObserver().imageUpdate(null, ImageObserver.ALLBITS, 0, 0, canvas.getWidth(), canvas.getHeight());
|
||
|
}
|
||
|
|
||
|
/** Notify the user */
|
||
|
client.getUserInterface().println(user.getName() + " deleted layer " + layer.getName());
|
||
|
|
||
|
/** Return and broadcast. */
|
||
|
return Connection.SEND_ALL;
|
||
|
}
|
||
|
|
||
|
public void decode(ByteBuffer in) {
|
||
|
layerKey = in.getInt();
|
||
|
}
|
||
|
|
||
|
public void encode(ByteBuffer out) {
|
||
|
out.putInt(layerKey);
|
||
|
}
|
||
|
}
|