Package org.freeplane.core.ui.ribbon.special

Source Code of org.freeplane.core.ui.ribbon.special.ZoomContributorFactory

package org.freeplane.core.ui.ribbon.special;

import java.awt.Component;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;

import javax.swing.JComboBox;
import javax.swing.event.TreeSelectionEvent;

import org.freeplane.core.ui.AFreeplaneAction;
import org.freeplane.core.ui.ribbon.ARibbonContributor;
import org.freeplane.core.ui.ribbon.CurrentState;
import org.freeplane.core.ui.ribbon.IChangeObserver;
import org.freeplane.core.ui.ribbon.IRibbonContributorFactory;
import org.freeplane.core.ui.ribbon.RibbonActionContributorFactory;
import org.freeplane.core.ui.ribbon.RibbonActionContributorFactory.ActionAcceleratorChangeListener;
import org.freeplane.core.ui.ribbon.RibbonActionContributorFactory.ActionChangeListener;
import org.freeplane.core.ui.ribbon.RibbonBuildContext;
import org.freeplane.core.ui.ribbon.RibbonBuilder;
import org.freeplane.core.util.TextUtils;
import org.freeplane.features.mode.Controller;
import org.freeplane.view.swing.map.MapViewController;
import org.pushingpixels.flamingo.api.common.AbstractCommandButton;
import org.pushingpixels.flamingo.api.common.CommandButtonDisplayState;
import org.pushingpixels.flamingo.api.common.JCommandButton;
import org.pushingpixels.flamingo.api.common.JCommandButtonStrip;
import org.pushingpixels.flamingo.api.ribbon.JFlowRibbonBand;
import org.pushingpixels.flamingo.api.ribbon.resize.CoreRibbonResizePolicies;
import org.pushingpixels.flamingo.api.ribbon.resize.IconRibbonBandResizePolicy;
import org.pushingpixels.flamingo.api.ribbon.resize.RibbonBandResizePolicy;

public class ZoomContributorFactory implements IRibbonContributorFactory {
 
  private ActionAcceleratorChangeListener changeListener;

  public ZoomContributorFactory(RibbonBuilder builder) {
    builder.getAcceleratorManager().addAcceleratorChangeListener(getAccelChangeListener());
  }
 

  protected ActionAcceleratorChangeListener getAccelChangeListener() {
    if(changeListener == null) {
      changeListener = new ActionAcceleratorChangeListener();
    }
    return changeListener;
  }

  public ARibbonContributor getContributor(final Properties attributes) {
    return new ARibbonContributor() {

      public String getKey() {
        return attributes.getProperty("name");
      }

      public void contribute(final RibbonBuildContext context, ARibbonContributor parent) {
        if (parent == null) {
          return;
        }       
        JFlowRibbonBand band = new JFlowRibbonBand(TextUtils.removeTranslateComment(TextUtils.getText("ribbon.band.zoom")), null, null);
       
        JComboBox zoomBox = ((MapViewController) Controller.getCurrentController().getMapViewManager()).createZoomBox();
        addDefaultToggleHandler(context,zoomBox);
        band.addFlowComponent(zoomBox);
       
        JCommandButtonStrip strip = new JCommandButtonStrip();
               
        AFreeplaneAction action = context.getBuilder().getMode().getAction("ZoomInAction");       
        JCommandButton button = RibbonActionContributorFactory.createCommandButton(action);       
        button.setDisplayState(CommandButtonDisplayState.SMALL);
        getAccelChangeListener().addAction(action.getKey(), button);
        addDefaultToggleHandler(context, action, button);
        strip.add(button);
       
        action = context.getBuilder().getMode().getAction("ZoomOutAction");       
        button = RibbonActionContributorFactory.createCommandButton(action);       
        button.setDisplayState(CommandButtonDisplayState.SMALL);
        getAccelChangeListener().addAction(action.getKey(), button);
        addDefaultToggleHandler(context, action, button);
        strip.add(button);
       
        action = context.getBuilder().getMode().getAction("FitToPage");       
        button = RibbonActionContributorFactory.createCommandButton(action);       
        button.setDisplayState(CommandButtonDisplayState.MEDIUM);
        getAccelChangeListener().addAction(action.getKey(), button);
        addDefaultToggleHandler(context, action, button);
        strip.add(button);
       
        band.addFlowComponent(strip);
       
        List<RibbonBandResizePolicy> policies = new ArrayList<RibbonBandResizePolicy>();       
        policies.add(new CoreRibbonResizePolicies.FlowTwoRows(band.getControlPanel()));
        policies.add(new IconRibbonBandResizePolicy(band.getControlPanel()));
        band.setResizePolicies(policies);     
       
        parent.addChild(band, new ChildProperties(parseOrderSettings(attributes.getProperty("orderPriority", ""))));         
      }

      public void addChild(Object child, ChildProperties properties) {
      }
    };
  }
 
  private void addDefaultToggleHandler(final RibbonBuildContext context, final Component component) {
    context.getBuilder().getMapChangeAdapter().addListener(new IChangeObserver() {
      public void updateState(CurrentState state) {
        if(state.isNodeChangeEvent()) {         
        }
        else if(state.allMapsClosed()) {         
          component.setEnabled(false);
        }
        else if (state.get(TreeSelectionEvent.class) == null) {
          component.setEnabled(true);
        }
      }
    });
  }
 
  private void addDefaultToggleHandler(final RibbonBuildContext context, final AFreeplaneAction action, final AbstractCommandButton button) {   
    context.getBuilder().getMapChangeAdapter().addListener(new ActionChangeListener(action, button));
 
}
TOP

Related Classes of org.freeplane.core.ui.ribbon.special.ZoomContributorFactory

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.