Package org.xtext.tortoiseshell.lib.view

Source Code of org.xtext.tortoiseshell.lib.view.TortoiseView

/**
* Copyright (c) 2012 itemis AG (http://www.itemis.eu) 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
*/
package org.xtext.tortoiseshell.lib.view;

import com.google.common.base.Objects;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import java.util.Iterator;
import org.apache.log4j.Logger;
import org.eclipse.draw2d.ColorConstants;
import org.eclipse.draw2d.FigureCanvas;
import org.eclipse.draw2d.FreeformLayeredPane;
import org.eclipse.draw2d.FreeformViewport;
import org.eclipse.draw2d.Polyline;
import org.eclipse.draw2d.geometry.Point;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.text.source.Annotation;
import org.eclipse.jface.text.source.IAnnotationModel;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IViewSite;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchPartSite;
import org.eclipse.ui.part.ViewPart;
import org.eclipse.ui.texteditor.IDocumentProvider;
import org.eclipse.xtend2.lib.StringConcatenation;
import org.eclipse.xtext.resource.IResourceServiceProvider;
import org.eclipse.xtext.resource.XtextResource;
import org.eclipse.xtext.ui.editor.XtextEditor;
import org.eclipse.xtext.ui.editor.model.IXtextDocument;
import org.eclipse.xtext.ui.util.DisplayRunHelper;
import org.eclipse.xtext.util.concurrent.IUnitOfWork;
import org.eclipse.xtext.xbase.lib.Exceptions;
import org.xtext.tortoiseshell.lib.ITortoiseEvent;
import org.xtext.tortoiseshell.lib.ITortoiseInterpreter;
import org.xtext.tortoiseshell.lib.MoveEvent;
import org.xtext.tortoiseshell.lib.Tortoise;
import org.xtext.tortoiseshell.lib.TurnEvent;
import org.xtext.tortoiseshell.lib.view.Animation;
import org.xtext.tortoiseshell.lib.view.Animator;
import org.xtext.tortoiseshell.lib.view.RootLayer;
import org.xtext.tortoiseshell.lib.view.ToggleStopModeAction;
import org.xtext.tortoiseshell.lib.view.TortoiseFigure;
import org.xtext.tortoiseshell.lib.view.TortoisePartListener;

@Singleton
@SuppressWarnings("all")
public class TortoiseView extends ViewPart implements ITortoiseEvent.Listener {
  private final static Logger LOGGER = Logger.getLogger(TortoiseView.class);
 
  private FigureCanvas canvas;
 
  @Inject
  private ToggleStopModeAction action;
 
  @Inject
  private RootLayer rootFigure;
 
  @Inject
  private TortoiseFigure tortoiseFigure;
 
  @Inject
  private TortoisePartListener listener;
 
  @Inject
  private Animator animator;
 
  public void createPartControl(final Composite parent) {
    FigureCanvas _figureCanvas = new FigureCanvas(parent, SWT.DOUBLE_BUFFERED);
    this.canvas = _figureCanvas;
    FreeformViewport _freeformViewport = new FreeformViewport();
    this.canvas.setViewport(_freeformViewport);
    this.canvas.setBackground(ColorConstants.white);
    final FreeformLayeredPane pane = new FreeformLayeredPane();
    Font _font = parent.getFont();
    pane.setFont(_font);
    this.canvas.setContents(pane);
    pane.add(this.rootFigure, "primary");
    this.reset();
    IWorkbenchPartSite _site = this.getSite();
    IWorkbenchPage _page = _site.getPage();
    _page.addPartListener(this.listener);
    IWorkbenchPartSite _site_1 = this.getSite();
    IActionBars _actionBars = ((IViewSite) _site_1).getActionBars();
    IToolBarManager _toolBarManager = _actionBars.getToolBarManager();
    _toolBarManager.add(this.action);
  }
 
  public void setFocus() {
    this.canvas.setFocus();
  }
 
  public TortoiseFigure getTortoiseFigure() {
    return this.tortoiseFigure;
  }
 
  public TortoisePartListener getTortoisePartListener() {
    return this.listener;
  }
 
  public void reset() {
    this.rootFigure.removeAll();
    this.rootFigure.add(this.tortoiseFigure);
    Point _point = new Point(0, 0);
    this.tortoiseFigure.setTortoiseLocation(_point);
    this.tortoiseFigure.setAngle(0);
    final org.eclipse.swt.graphics.Point viewportSize = this.canvas.getSize();
    this.canvas.scrollTo(((-viewportSize.x) / 2), ((-viewportSize.y) / 2));
  }
 
  public Boolean show(final XtextEditor tortoiseEditor, final int stopAtLine) {
    Boolean _xblockexpression = null;
    {
      this.animator.setAnimated((stopAtLine < 0));
      final Runnable _function = new Runnable() {
        public void run() {
          TortoiseView.this.reset();
        }
      };
      DisplayRunHelper.runSyncInDisplayThread(_function);
      IXtextDocument _document = tortoiseEditor.getDocument();
      final IUnitOfWork<Boolean, XtextResource> _function_1 = new IUnitOfWork<Boolean, XtextResource>() {
        public Boolean exec(final XtextResource it) throws Exception {
          boolean _xifexpression = false;
          boolean _and = false;
          boolean _notEquals = (!Objects.equal(it, null));
          if (!_notEquals) {
            _and = false;
          } else {
            boolean _hasError = TortoiseView.this.hasError(tortoiseEditor);
            boolean _not = (!_hasError);
            _and = _not;
          }
          if (_and) {
            boolean _xblockexpression = false;
            {
              final Tortoise tortoise = new Tortoise();
              tortoise.addListener(TortoiseView.this);
              IResourceServiceProvider _resourceServiceProvider = it.getResourceServiceProvider();
              final ITortoiseInterpreter interpreter = _resourceServiceProvider.<ITortoiseInterpreter>get(ITortoiseInterpreter.class);
              boolean _and_1 = false;
              boolean _notEquals_1 = (!Objects.equal(interpreter, null));
              if (!_notEquals_1) {
                _and_1 = false;
              } else {
                EList<EObject> _contents = it.getContents();
                boolean _isEmpty = _contents.isEmpty();
                boolean _not_1 = (!_isEmpty);
                _and_1 = _not_1;
              }
              if (_and_1) {
                try {
                  EList<EObject> _contents_1 = it.getContents();
                  EObject _get = _contents_1.get(0);
                  interpreter.run(tortoise, _get, stopAtLine);
                } catch (final Throwable _t) {
                  if (_t instanceof Exception) {
                    final Exception e = (Exception)_t;
                    IWorkbenchPartSite _site = TortoiseView.this.getSite();
                    Shell _shell = _site.getShell();
                    StringConcatenation _builder = new StringConcatenation();
                    _builder.append("Error during execution:");
                    _builder.newLine();
                    _builder.append("  ");
                    String _message = e.getMessage();
                    _builder.append(_message, "  ");
                    _builder.newLineIfNotEmpty();
                    _builder.append("See log for details");
                    MessageDialog.openError(_shell, "Error during Execution", _builder.toString());
                    TortoiseView.LOGGER.error("Error executing TortoiseScript", e);
                  } else {
                    throw Exceptions.sneakyThrow(_t);
                  }
                }
              }
              _xblockexpression = tortoise.removeListener(TortoiseView.this);
            }
            _xifexpression = _xblockexpression;
          }
          return Boolean.valueOf(_xifexpression);
        }
      };
      _xblockexpression = _document.<Boolean>readOnly(_function_1);
    }
    return _xblockexpression;
  }
 
  public boolean hasError(final XtextEditor tortoiseEditor) {
    boolean _xblockexpression = false;
    {
      IDocumentProvider _documentProvider = tortoiseEditor.getDocumentProvider();
      IAnnotationModel _annotationModel = null;
      if (_documentProvider!=null) {
        IEditorInput _editorInput = tortoiseEditor.getEditorInput();
        _annotationModel=_documentProvider.getAnnotationModel(_editorInput);
      }
      Iterator _annotationIterator = null;
      if (_annotationModel!=null) {
        _annotationIterator=_annotationModel.getAnnotationIterator();
      }
      final Iterator annotations = _annotationIterator;
      while (((!Objects.equal(annotations, null)) && annotations.hasNext())) {
        {
          final Object annotation = annotations.next();
          boolean _and = false;
          if (!(annotation instanceof Annotation)) {
            _and = false;
          } else {
            String _type = ((Annotation) annotation).getType();
            boolean _equals = Objects.equal(_type, XtextEditor.ERROR_ANNOTATION_TYPE);
            _and = _equals;
          }
          if (_and) {
            return true;
          }
        }
      }
      _xblockexpression = false;
    }
    return _xblockexpression;
  }
 
  public void handleTortoiseEvent(final ITortoiseEvent event) {
    boolean _matched = false;
    if (!_matched) {
      if (event instanceof MoveEvent) {
        _matched=true;
        Tortoise _tortoise = ((MoveEvent)event).getTortoise();
        boolean _isPaint = _tortoise.isPaint();
        if (_isPaint) {
          final Polyline line = new Polyline();
          Tortoise _tortoise_1 = ((MoveEvent)event).getTortoise();
          Color _lineColor = _tortoise_1.getLineColor();
          line.setForegroundColor(_lineColor);
          Tortoise _tortoise_2 = ((MoveEvent)event).getTortoise();
          int _lineWidth = _tortoise_2.getLineWidth();
          line.setLineWidth(_lineWidth);
          Point _oldPosition = ((MoveEvent)event).getOldPosition();
          Point _oldPosition_1 = ((MoveEvent)event).getOldPosition();
          line.setEndpoints(_oldPosition, _oldPosition_1);
          Point _oldPosition_2 = ((MoveEvent)event).getOldPosition();
          Tortoise _tortoise_3 = ((MoveEvent)event).getTortoise();
          Point _position = _tortoise_3.getPosition();
          Tortoise _tortoise_4 = ((MoveEvent)event).getTortoise();
          int _delay = _tortoise_4.getDelay();
          Animation _animation = new Animation(_oldPosition_2, _position, line, _delay);
          this.animator.addAnimation(_animation);
        } else {
          Point _oldPosition_3 = ((MoveEvent)event).getOldPosition();
          Tortoise _tortoise_5 = ((MoveEvent)event).getTortoise();
          Point _position_1 = _tortoise_5.getPosition();
          Tortoise _tortoise_6 = ((MoveEvent)event).getTortoise();
          int _delay_1 = _tortoise_6.getDelay();
          Animation _animation_1 = new Animation(_oldPosition_3, _position_1, _delay_1);
          this.animator.addAnimation(_animation_1);
        }
      }
    }
    if (!_matched) {
      if (event instanceof TurnEvent) {
        _matched=true;
        double _oldAngle = ((TurnEvent)event).getOldAngle();
        Tortoise _tortoise = ((TurnEvent)event).getTortoise();
        double _angleInRadians = _tortoise.getAngleInRadians();
        Tortoise _tortoise_1 = ((TurnEvent)event).getTortoise();
        int _delay = _tortoise_1.getDelay();
        Animation _animation = new Animation(_oldAngle, _angleInRadians, _delay);
        this.animator.addAnimation(_animation);
      }
    }
  }
}
TOP

Related Classes of org.xtext.tortoiseshell.lib.view.TortoiseView

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.