Package net.sf.latexdraw.mapping

Source Code of net.sf.latexdraw.mapping.ShapeList2ViewListMapping

package net.sf.latexdraw.mapping;

import java.util.List;

import net.sf.latexdraw.glib.models.interfaces.shape.IShape;
import net.sf.latexdraw.glib.models.interfaces.shape.IText;
import net.sf.latexdraw.glib.views.Java2D.interfaces.IViewShape;
import net.sf.latexdraw.glib.views.Java2D.interfaces.IViewText;
import net.sf.latexdraw.glib.views.Java2D.interfaces.View2DTK;
import net.sf.latexdraw.glib.views.latex.LaTeXGenerator;
import net.sf.latexdraw.instruments.Border;

import org.malai.mapping.MappingRegistry;
import org.malai.mapping.SynchroSymmetricList2ListMapping;

/**
* Defines a mapping that link a list of IShape to a list of IShapeView.<br>
*<br>
* This file is part of LaTeXDraw<br>
* Copyright (c) 2005-2014 Arnaud BLOUIN<br>
*<br>
*  LaTeXDraw is free software; you can redistribute it and/or modify
*  it under the terms of the GNU General Public License as published by
*  the Free Software Foundation; either version 2 of the License, or
*  (at your option) any later version.<br>
*<br>
*  LaTeXDraw is distributed without any warranty; without even the
*  implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
*  PURPOSE. See the GNU General Public License for more details.<br>
*<br>
* 05/15/10<br>
* @author Arnaud BLOUIN
* @since 3.0
* @version 3.0
*/
public class ShapeList2ViewListMapping extends SynchroSymmetricList2ListMapping<IShape, IViewShape> {
  /** The border that must be updated. */
  protected Border border;

  /**
   * Creates the mapping.
   * @param source The shape list.
   * @param target The view list.
   * @param border The instrument Border
   */
  public ShapeList2ViewListMapping(final List<IShape> source, final List<IViewShape> target, final Border border) {
    super(source, target);
    this.border = border;
  }



  @Override
  protected IViewShape createTargetObject(final Object sourceObject) {
    return sourceObject instanceof IShape ? View2DTK.getFactory().createView((IShape)sourceObject) : null;
  }



  @Override
  public void onObjectAdded(final Object list, final Object object, final int index) {
    super.onObjectAdded(list, object, index);

    if(object instanceof IShape) {
      final IViewShape view = index==-1 ? target.get(target.size()-1) : target.get(index);
      MappingRegistry.REGISTRY.addMapping(new Shape2ViewMapping((IShape)object, view));

      // If the shape is a text, a special mapping must be added.
      if(view instanceof IViewText)
        MappingRegistry.REGISTRY.addMapping(new Package2TextViewMapping(LaTeXGenerator.getPackagesUnary(), (IViewText)view));
    }
  }



  @Override
  public void onObjectRemoved(final Object list, final Object object, final int index) {
    final IViewShape view = index==-1 ? target.get(target.size()-1) : target.get(index);

    view.flush();
    super.onObjectRemoved(list, object, index);
    border.remove(view);
    MappingRegistry.REGISTRY.removeMappingsUsingSource(object, Shape2ViewMapping.class);

    // If the shape is a text, the special mapping previously added must be removed.
    if(object instanceof IText)
      MappingRegistry.REGISTRY.removeMappingsUsingTarget(view, Package2TextViewMapping.class);
  }


  @Override
  public void onListCleaned(final Object list) {
    super.onListCleaned(list);

    for(final IShape shape : source)
      MappingRegistry.REGISTRY.removeMappingsUsingSource(shape, Shape2ViewMapping.class);
  }
}
TOP

Related Classes of net.sf.latexdraw.mapping.ShapeList2ViewListMapping

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.