Package at.bestsolution.efxclipse.runtime.workbench.renderers.fx

Source Code of at.bestsolution.efxclipse.runtime.workbench.renderers.fx.DefPerspectiveStackRenderer$PerspectiveStackItemImpl

/*******************************************************************************
* Copyright (c) 2012 BestSolution.at 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:
*     Tom Schindl<tom.schindl@bestsolution.at> - initial API and implementation
*******************************************************************************/
package at.bestsolution.efxclipse.runtime.workbench.renderers.fx;

import java.util.ArrayList;
import java.util.List;

import javafx.scene.Node;
import javafx.scene.layout.BorderPane;

import javax.annotation.PostConstruct;
import javax.inject.Inject;

import org.eclipse.e4.core.di.annotations.Optional;
import org.eclipse.e4.ui.model.application.ui.advanced.MPerspective;
import org.eclipse.e4.ui.model.application.ui.advanced.MPerspectiveStack;

import at.bestsolution.efxclipse.runtime.workbench.renderers.base.BasePerspectiveStackRenderer;
import at.bestsolution.efxclipse.runtime.workbench.renderers.base.services.PerspectiveTransitionService;
import at.bestsolution.efxclipse.runtime.workbench.renderers.base.services.PerspectiveTransitionService.AnimationDelegate;
import at.bestsolution.efxclipse.runtime.workbench.renderers.base.widget.WCallback;
import at.bestsolution.efxclipse.runtime.workbench.renderers.base.widget.WPerspectiveStack;
import at.bestsolution.efxclipse.runtime.workbench.renderers.base.widget.WPerspectiveStack.WStackItem;
import at.bestsolution.efxclipse.runtime.workbench.renderers.fx.widget.PerspectiveStackItem;
import at.bestsolution.efxclipse.runtime.workbench.renderers.fx.widget.WLayoutedWidgetImpl;

@SuppressWarnings("restriction")
public class DefPerspectiveStackRenderer extends BasePerspectiveStackRenderer<BorderPane,PerspectiveStackItem,Node> {

  @Override
  protected Class<? extends WPerspectiveStack<BorderPane,PerspectiveStackItem,Node>> getWidgetClass(MPerspectiveStack stack) {
    return PerspectiveStackImpl.class;
  }
 
  public static class PerspectiveStackItemImpl implements WStackItem<PerspectiveStackItem, Node> {
    private PerspectiveStackItem item;
    private MPerspective domElement;
    private WCallback<WStackItem<PerspectiveStackItem, Node>, Node> initCallback;
   
    @PostConstruct
    void init() {
      getWidget();
    }
   
    protected PerspectiveStackItem getWidget() {
      if( item == null ) {
        item = createWidget();
      }
      return item;
    }
   
    protected PerspectiveStackItem createWidget() {
      final PerspectiveStackItem t = new PerspectiveStackItem();
      t.setInitRunnable(new Runnable() {
       
        @Override
        public void run() {
          if( initCallback != null ) {
            t.setContent(initCallback.call(PerspectiveStackItemImpl.this));
          }
        }
      });
      return t;
    }
   
    @Override
    public PerspectiveStackItem getNativeItem() {
      return item;
    }

    @Override
    public void setDomElement(MPerspective domElement) {
      this.domElement = domElement;
    }

    @Override
    public MPerspective getDomElement() {
      return domElement;
    }

    @Override
    public void setInitCallback(WCallback<WStackItem<PerspectiveStackItem, Node>, Node> callback) {
      this.initCallback = callback;
    }

    @Override
    public void setOnCloseCallback(WCallback<WStackItem<PerspectiveStackItem, Node>, Boolean> callback) {
     
    }
   
  }
 
  public static class PerspectiveStackImpl extends WLayoutedWidgetImpl<BorderPane, BorderPane, MPerspectiveStack> implements WPerspectiveStack<BorderPane, PerspectiveStackItem, Node> {
    private List<WStackItem<PerspectiveStackItem, Node>> items = new ArrayList<WStackItem<PerspectiveStackItem,Node>>();
    private int currentIndex;
   
    @Inject
    @Optional
    private PerspectiveTransitionService<BorderPane, Node> perspectiveSwitch;

    @Override
    public Class<? extends WStackItem<PerspectiveStackItem, Node>> getStackItemClass() {
      return PerspectiveStackItemImpl.class;
    }

    @Override
    public void addItem(WStackItem<PerspectiveStackItem, Node> item) {
      items.add(item);
    }

    @Override
    public void addItems(List<WStackItem<PerspectiveStackItem, Node>> items) {
      this.items.addAll(items);
    }

    @Override
    public void addItems(int index, List<WStackItem<PerspectiveStackItem, Node>> items) {
      this.items.addAll(index, items);
    }

    @Override
    public void selectItem(int idx) {
      WStackItem<PerspectiveStackItem, Node> item = items.get(idx);
      Node node = item.getNativeItem().getContent();
      if( getWidget().getCenter() != null && perspectiveSwitch != null ) {
        AnimationDelegate<BorderPane, Node> a = perspectiveSwitch.getDelegate(items.get(currentIndex).getDomElement(), item.getDomElement());
        if( a == null ) {
          getWidget().setCenter(node);
        } else {
          a.animate(getWidget(), node)
        }
      } else {
        getWidget().setCenter(node)
      }
      currentIndex = idx;
    }

    @Override
    public int indexOf(WStackItem<PerspectiveStackItem, Node> item) {
      return items.indexOf(item);
    }

    @Override
    public List<WStackItem<PerspectiveStackItem, Node>> getItems() {
      return items;
    }

    @Override
    public void removeItems(List<WStackItem<PerspectiveStackItem, Node>> items) {
      this.items.removeAll(items);
    }

    @Override
    public void setMouseSelectedItemCallback(WCallback<WStackItem<PerspectiveStackItem, Node>, Void> selectedItemCallback) {
     
    }

    @Override
    public void setKeySelectedItemCallback(WCallback<WStackItem<PerspectiveStackItem, Node>, Void> selectedItemCallback) {
     
    }

    @Override
    public int getItemCount() {
      return items.size();
    }

    @Override
    protected BorderPane getWidgetNode() {
      return getWidget();
    }

    @Override
    protected BorderPane createWidget() {
      return new BorderPane();
    }
  }
}
TOP

Related Classes of at.bestsolution.efxclipse.runtime.workbench.renderers.fx.DefPerspectiveStackRenderer$PerspectiveStackItemImpl

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.