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

Source Code of at.bestsolution.efxclipse.runtime.workbench.renderers.fx.DefToolItemRenderer

/*******************************************************************************
* 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.List;

import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Node;
import javafx.scene.control.Button;
import javafx.scene.control.ButtonBase;
import javafx.scene.control.CheckBox;
import javafx.scene.control.RadioButton;
import javafx.scene.control.SplitMenuButton;
import javafx.scene.control.ToggleButton;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;

import javax.inject.Inject;
import javax.inject.Named;

import org.eclipse.e4.ui.model.application.ui.menu.ItemType;
import org.eclipse.e4.ui.model.application.ui.menu.MToolItem;
import org.eclipse.e4.ui.workbench.IResourceUtilities;
import org.eclipse.e4.ui.workbench.UIEvents;
import org.eclipse.emf.common.util.URI;

import at.bestsolution.efxclipse.runtime.workbench.renderers.base.BaseRenderer;
import at.bestsolution.efxclipse.runtime.workbench.renderers.base.BaseToolItemRenderer;
import at.bestsolution.efxclipse.runtime.workbench.renderers.base.widget.WToolItem;
import at.bestsolution.efxclipse.runtime.workbench.renderers.fx.widget.WWidgetImpl;

@SuppressWarnings("restriction")
public class DefToolItemRenderer extends BaseToolItemRenderer<Node> {

  @Override
  protected Class<? extends WToolItem<Node>> getWidgetClass(MToolItem item) {
    return ToolItemImpl.class;
  }

 
  public static class ToolItemImpl extends WWidgetImpl<ButtonBase,  MToolItem> implements WToolItem<Node> {
    private ItemType type;
    private boolean menuButton;
    private Runnable onActionCallback;
   
    private boolean handled = true;
    private boolean enabled = true;
   
    @Inject
    IResourceUtilities<Image> resourceUtilities;
   
    @Inject
    public ToolItemImpl(@Named(BaseRenderer.CONTEXT_DOM_ELEMENT) MToolItem domElement) {
      type = domElement.getType();
      menuButton = domElement.getMenu() != null;
    }
   
    @Override
    protected void bindProperties(ButtonBase widget) {
      super.bindProperties(widget);
      if( widget instanceof CheckBox ) {
        bindProperty(UIEvents.Item.SELECTED, ((CheckBox) widget).selectedProperty());
      } else if( widget instanceof ToggleButton ) {
        bindProperty(UIEvents.Item.SELECTED, ((ToggleButton) widget).selectedProperty());
      }
    }
   
    @Override
    public void setHandled(boolean handled) {
      if( this.handled != handled ) {
        this.handled = handled;
        updateEnabledState()
      }
    }
   
    private void updateEnabledState() {
      getWidget().setDisable(!(handled && enabled));
    }
   
    @Inject
    public void setLabel(@Named(ATTRIBUTE_localizedLabel)String label) {
      getWidget().setText(label);
    }
   
    @Inject
    public void setEnabled(@Named(UIEvents.Item.ENABLED) boolean enabled) {
      this.enabled = enabled;
      updateEnabledState();
    }
   
    @Inject
    public void setIconURI(@Named(UIEvents.UILabel.ICONURI) String uri) {
      if( uri == null ) {
        getWidget().setGraphic(null);
      } else {
        Image img = resourceUtilities.imageDescriptorFromURI(URI.createURI(uri));
        if( img != null ) {
          getWidget().setGraphic(new ImageView(img));
        } else {
          getWidget().setGraphic(null);
        }
      }
    }
   
    @Inject
    public void setSelected(@Named(UIEvents.Item.SELECTED) boolean selected) {
      if( getWidget() instanceof CheckBox ) {
        CheckBox b = (CheckBox) getWidget();
        if( b.isSelected() != selected ) {
          b.setSelected(selected);
        }
       
      } else if( getWidget() instanceof ToggleButton ) {
        RadioButton b = (RadioButton) getWidget();
        if( b.isSelected() != selected ) {
          b.setSelected(selected);
        }
      }
    }
   
    public void setOnActionCallback(Runnable onActionCallback) {
      this.onActionCallback = onActionCallback;
    }
   
    @Override
    protected void doCleanup() {
      super.doCleanup();
      onActionCallback = null;
    }
   
    @Override
    protected ButtonBase createWidget() {
      ButtonBase b = internalCreateWidget();
      if( b != null ) {
        b.setOnAction(new EventHandler<ActionEvent>() {
         
          @Override
          public void handle(ActionEvent event) {
            if( onActionCallback != null ) {
              onActionCallback.run();
            }
          }
        });
      }
      return b;
    }
   
    private ButtonBase internalCreateWidget() {
      switch (type) {
      case CHECK:
        return new CheckBox("CheckBox");
      case PUSH:
        if( menuButton ) {
          SplitMenuButton b = new SplitMenuButton();
          b.setText("Push/Menu Button");
          return b;
        } else {
          return new Button("Push Button")
        }
      case RADIO:
        return new RadioButton("RadioButton");
      default:
        break;
      }
      return null;
    }

    @Override
    public void addStyleClasses(List<String> classnames) {
      getWidget().getStyleClass().addAll(classnames);
    }

    @Override
    public void addStyleClasses(String... classnames) {
      getWidget().getStyleClass().addAll(classnames);
    }

    @Override
    public void setStyleId(String id) {
      getWidget().setId(id);
    }

    @Override
    protected void setUserData(WWidgetImpl<ButtonBase, MToolItem> widget) {
      getWidget().setUserData(widget);
    }   
  }
}
TOP

Related Classes of at.bestsolution.efxclipse.runtime.workbench.renderers.fx.DefToolItemRenderer

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.