Package org.freeplane.core.ui.ribbon

Source Code of org.freeplane.core.ui.ribbon.RibbonMenuPrimaryContributorFactory

package org.freeplane.core.ui.ribbon;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Properties;

import javax.swing.KeyStroke;

import org.freeplane.core.ui.AFreeplaneAction;
import org.freeplane.core.util.ActionUtils;
import org.freeplane.core.util.Compat;
import org.pushingpixels.flamingo.api.common.RichTooltip;
import org.pushingpixels.flamingo.api.common.JCommandButton.CommandButtonKind;
import org.pushingpixels.flamingo.api.common.icon.ResizableIcon;
import org.pushingpixels.flamingo.api.ribbon.RibbonApplicationMenuEntryPrimary;
import org.pushingpixels.flamingo.api.ribbon.RibbonApplicationMenuEntrySecondary;

public class RibbonMenuPrimaryContributorFactory implements IRibbonContributorFactory {
  final private RibbonBuilder builder;

  /***********************************************************************************
   * CONSTRUCTORS
   **********************************************************************************/
  public RibbonMenuPrimaryContributorFactory(RibbonBuilder builder) {
    this.builder = builder;
  }

  /***********************************************************************************
   * METHODS
   **********************************************************************************/

  public static RibbonApplicationMenuEntryPrimary createMenuEntry(final AFreeplaneAction action, CommandButtonKind kind) {
    String title = ActionUtils.getActionTitle(action);
    ResizableIcon icon = ActionUtils.getActionIcon(action);

    RibbonApplicationMenuEntryPrimary entry = new RibbonApplicationMenuEntryPrimary(icon, title, new RibbonActionContributorFactory.RibbonActionListener(action), kind);
    return entry;
  }
 
  /***********************************************************************************
   * REQUIRED METHODS FOR INTERFACES
   **********************************************************************************/
 
  public ARibbonContributor getContributor(final Properties attributes) {
    String accel = attributes.getProperty("accelerator", null);
    final String actionKey = attributes.getProperty("action");   
   
    if (actionKey != null) {
        if (accel != null) {
          if (Compat.isMacOsX()) {
            accel = accel.replaceFirst("CONTROL", "META").replaceFirst("control", "meta");
          }     
          builder.getAcceleratorManager().setDefaultAccelerator(actionKey, accel);
        }
    }
   
    return new ARibbonContributor() {
      RibbonApplicationMenuEntryPrimary entry;     
     
      public String getKey() {
        String key = attributes.getProperty("action", null);
        if(key == null) {
          key = attributes.getProperty("name", null);
        }
        return key;
      }
     
      public void contribute(RibbonBuildContext context, ARibbonContributor parent) {
        entry = null;
        if(context.hasChildren(context.getCurrentPath())) {         
          if(attributes.get("action") == null) {
            AFreeplaneAction action = ActionUtils.getDummyAction(getKey());
            entry = createMenuEntry(action, CommandButtonKind.POPUP_ONLY);
          }
          else {
            AFreeplaneAction action = context.getBuilder().getMode().getAction(getKey());
            if(action == null) {
              action = ActionUtils.getDummyAction(getKey());
            }
            entry = createMenuEntry(action, CommandButtonKind.ACTION_AND_POPUP_MAIN_ACTION);
          }
         
          context.processChildren(context.getCurrentPath(), this);
        }
        else {
          if(attributes.get("action") == null) {
            return;
          }
          AFreeplaneAction action = context.getBuilder().getMode().getAction(getKey());
          if(action == null) {
            return;
          }
         
          entry = createMenuEntry(action, CommandButtonKind.ACTION_ONLY);
        }
        KeyStroke ks = context.getBuilder().getAcceleratorManager().getAccelerator(getKey());
        if(ks != null) {
          AFreeplaneAction action = context.getBuilder().getMode().getAction(getKey());
          if(action != null) {
            RichTooltip tip = RibbonActionContributorFactory.getRichTooltip(action, ks);
            if(tip != null) {
              entry.setActionRichTooltip(tip);
            }
          }
        }
        parent.addChild(entry, new ChildProperties(parseOrderSettings(attributes.getProperty("orderPriority", ""))));
      }

      public void addChild(Object child, ChildProperties properties) {
        if(child instanceof SecondaryEntryGroup) {
          SecondaryEntryGroup group = (SecondaryEntryGroup) child;
          entry.addSecondaryMenuGroup(group.getTitle(), group.getEntries().toArray(new RibbonApplicationMenuEntrySecondary[0]));
        }
      }
    };
  }
 
  /***********************************************************************************
   * NESTED TYPE DECLARATIONS
   **********************************************************************************/
 
  public static class SecondaryEntryGroup {
    private final String groupTitle;
    private List<RibbonApplicationMenuEntrySecondary> entries = new ArrayList<RibbonApplicationMenuEntrySecondary>();
   
    public SecondaryEntryGroup(String title) {
      this.groupTitle = title;
    }
   
    public void addEntry(RibbonApplicationMenuEntrySecondary entry) {
      entries.add(entry);
    }
   
    public List<RibbonApplicationMenuEntrySecondary> getEntries() {
      return Collections.unmodifiableList(entries);
    }
   
    public String getTitle() {
      return groupTitle;
    }
  }
}
TOP

Related Classes of org.freeplane.core.ui.ribbon.RibbonMenuPrimaryContributorFactory

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.
m.parentNode.insertBefore(a,m) })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); ga('create', 'UA-20639858-1', 'auto'); ga('send', 'pageview');