import {LatLngBoundsExpression,Rectangle} from "leaflet"; import { LeafletArgs, PlayBackEvent } from "../EventInterface"; export namespace RectangleEvents { const prefix:string = 'RECTANGLE_' export interface CreateEventArgs { id:string; bounds:Array<[number,number]>; color?:string; } export class CreateRectangle implements PlayBackEvent { name: string = prefix + "CREATE"; do(leafletArgs: LeafletArgs, args: CreateEventArgs): void { const rectangle = new Rectangle(args.bounds,{ fillColor:args.color, color:args.color }); leafletArgs.playback.createGenericLayer(rectangle,args.id); } undo(leafletArgs: LeafletArgs, args: CreateEventArgs): void { leafletArgs.playback.removeGenericLayer(args.id); } } export class RemoveRectangle extends CreateRectangle { name = prefix + "REMOVE" do(leafletArgs:LeafletArgs,args:CreateEventArgs) : void { super.undo(leafletArgs,args); } undo(leafletArgs:LeafletArgs,args:CreateEventArgs) : void { super.do(leafletArgs,args); } } export interface ColorChangeEventArgs { id:string; from:string; to:string; } export class ChangeRectangleColor implements PlayBackEvent { name: string = prefix + "CHANGE_COLOR"; do(leafletArgs: LeafletArgs, args: ColorChangeEventArgs): void { leafletArgs.playback.getLayerById(args.id)?.setStyle({fillColor:args.to,color:args.to}); } undo(leafletArgs: LeafletArgs, args: ColorChangeEventArgs): void { leafletArgs.playback.getLayerById(args.id)?.setStyle({fillColor:args.from,color:args.from}); } } export interface BoundChangeEventArgs { id:string; from:Array<[number,number]>; to:Array<[number,number]>; } export class ChangeRectangleBounds implements PlayBackEvent { do(leafletArgs: LeafletArgs, args: BoundChangeEventArgs): void { leafletArgs.playback.getLayerById(args.id)?.setBounds(args.to); } undo(leafletArgs: LeafletArgs, args: BoundChangeEventArgs): void { leafletArgs.playback.getLayerById(args.id)?.setBounds(args.from); } name:string = prefix + "CHANGE_BOUNDS"; } }