/*******************************************************************************
* Copyright (c) 2016 Weasis Team and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Nicolas Roduit - initial API and implementation
*******************************************************************************/
package org.weasis.core.ui.model;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.geom.AffineTransform;
import java.awt.geom.Rectangle2D;
import java.beans.PropertyChangeListener;
import java.util.List;
import java.util.Optional;
import org.weasis.core.api.image.util.MeasurableLayer;
import org.weasis.core.api.media.data.ImageElement;
import org.weasis.core.ui.editor.image.Canvas;
import org.weasis.core.ui.editor.image.ViewCanvas;
import org.weasis.core.ui.model.graphic.DragGraphic;
import org.weasis.core.ui.model.graphic.Graphic;
import org.weasis.core.ui.model.graphic.GraphicSelectionListener;
import org.weasis.core.ui.model.graphic.imp.area.SelectGraphic;
import org.weasis.core.ui.model.layer.GraphicLayer;
import org.weasis.core.ui.model.layer.GraphicModelChangeListener;
import org.weasis.core.ui.model.layer.LayerType;
import org.weasis.core.ui.model.utils.UUIDable;
import org.weasis.core.ui.util.MouseEventDouble;
public interface GraphicModel extends UUIDable {
List<Graphic> getModels();
void setModels(List<Graphic> models);
void updateLabels(Object source, ViewCanvas<? extends ImageElement> view);
void addGraphic(Graphic graphic);
Optional<GraphicLayer> findLayerByType(LayerType layer);
void deleteByLayerType(LayerType type);
List<Graphic> getAllGraphics();
List<Graphic> getSelectedAllGraphicsIntersecting(Rectangle rectangle, AffineTransform transform);
List<Graphic> getSelectedAllGraphicsIntersecting(Rectangle rectangle, AffineTransform transform,
boolean onlyFrontGraphic);
Optional<Graphic> getFirstGraphicIntersecting(MouseEventDouble mouseevent);
List<DragGraphic> getSelectedDragableGraphics();
List<Graphic> getSelectedGraphics();
Optional<SelectGraphic> getSelectGraphic();
void deleteSelectedGraphics(Canvas canvas, Boolean warningMessage);
void setSelectedGraphic(List<Graphic> graphics);
void clear();
void setSelectedAllGraphics();
void fireGraphicsSelectionChanged(MeasurableLayer layer);
/**
* Draws all visible layers of this model.
*
* @param g2d
* the 2D graphics context
* @param transform
* @param clip
*/
void draw(Graphics2D g2d, AffineTransform transform, AffineTransform inverseTransform, Rectangle2D viewClip);
List<GraphicSelectionListener> getGraphicSelectionListeners();
void addGraphicSelectionListener(GraphicSelectionListener listener);
void removeGraphicSelectionListener(GraphicSelectionListener listener);
/**
* Releases all resources held by this model. Method calls to this model after <code>dispose</code> has been called,
* are undefined.
*/
void dispose();
/**
* Gets all layer manager listeners of this layer.
*/
List<GraphicModelChangeListener> getChangeListeners();
/**
* Adds a layer manager listener to this layer.
*/
void addChangeListener(GraphicModelChangeListener listener);
/**
* Removes a layer manager listener from this layer.
*/
void removeChangeListener(GraphicModelChangeListener listener);
void fireChanged();
Boolean isChangeFireingSuspended();
void setChangeFireingSuspended(Boolean change);
int getLayerCount();
void removeGraphic(Graphic graphic);
void addGraphicChangeHandler(PropertyChangeListener graphicsChangeHandler);
void removeGraphicChangeHandler(PropertyChangeListener graphicsChangeHandler);
List<GraphicLayer> getLayers();
void setReferencedSeries(List<ReferencedSeries> referencedSeries);
List<ReferencedSeries> getReferencedSeries();
List<GraphicLayer> groupLayerByType();
void deleteByLayer(GraphicLayer layer);
void deleteNonSerializableGraphics();
boolean hasSerializableGraphics();
List<PropertyChangeListener> getGraphicsListeners();
}