use of org.eclipse.che.ide.api.action.Presentation in project che by eclipse.
the class DropDownWidgetImpl method updateActions.
/**
* Refresh the list of visible actions.
*/
private void updateActions() {
actions.removeAll();
ActionGroup mainActionGroup = (ActionGroup) actionManager.getAction(actionGroupId);
if (mainActionGroup == null) {
return;
}
Action[] children = mainActionGroup.getChildren(null);
for (Action action : children) {
Presentation presentation = presentationFactory.getPresentation(action);
ActionEvent e = new ActionEvent(presentation, actionManager, managerProvider.get());
action.update(e);
if (presentation.isVisible()) {
actions.add(action);
}
}
}
use of org.eclipse.che.ide.api.action.Presentation in project che by eclipse.
the class PopupMenu method redraw.
/** Render Popup Menu component. */
private void redraw() {
String idPrefix = itemIdPrefix;
if (idPrefix == null) {
idPrefix = "";
} else {
idPrefix += "/";
}
table = new PopupMenuTable();
table.setStyleName(POPUP_RESOURCES.popup().popupMenuTable());
table.setCellPadding(0);
table.setCellSpacing(0);
for (int i = 0; i < list.size(); i++) {
Action menuItem = list.get(i);
if (menuItem instanceof Separator) {
final String separatorText = ((Separator) menuItem).getText();
if (separatorText == null) {
table.getCellFormatter().setStyleName(i, 0, POPUP_RESOURCES.popup().popupMenuDelimiter());
} else {
table.setWidget(i, 0, new Label(separatorText));
table.getCellFormatter().setStyleName(i, 0, POPUP_RESOURCES.popup().popupMenuTextDelimiter());
}
table.getFlexCellFormatter().setColSpan(i, 0, hasCheckedItems ? 5 : 4);
} else {
Presentation presentation = presentationFactory.getPresentation(menuItem);
if (presentation.getImageResource() != null) {
Image image = new Image(presentation.getImageResource());
table.setWidget(i, 0, image);
} else if (presentation.getSVGResource() != null) {
SVGImage image = new SVGImage(presentation.getSVGResource());
table.setWidget(i, 0, image);
} else if (presentation.getHTMLResource() != null) {
table.setHTML(i, 0, presentation.getHTMLResource());
}
table.getCellFormatter().setStyleName(i, 0, presentation.isEnabled() ? POPUP_RESOURCES.popup().popupMenuIconField() : POPUP_RESOURCES.popup().popupMenuIconFieldDisabled());
int work = 1;
if (hasCheckedItems) {
if (menuItem instanceof ToggleAction) {
ToggleAction toggleAction = (ToggleAction) menuItem;
ActionEvent e = new ActionEvent(presentationFactory.getPresentation(toggleAction), actionManager, managerProvider.get());
if (toggleAction.isSelected(e)) {
// Temporary solution
table.setHTML(i, work, "<i class=\"fa fa-check\"></i>");
}
table.getCellFormatter().setStyleName(i, work, presentation.isEnabled() ? POPUP_RESOURCES.popup().popupMenuCheckField() : POPUP_RESOURCES.popup().popupMenuCheckFieldDisabled());
} else {
table.setHTML(i, work, "");
}
work++;
}
table.setHTML(i, work, "<nobr id=\"" + idPrefix + presentation.getText() + "\">" + presentation.getText() + "</nobr>");
table.getCellFormatter().setStyleName(i, work, presentation.isEnabled() ? POPUP_RESOURCES.popup().popupMenuTitleField() : POPUP_RESOURCES.popup().popupMenuTitleFieldDisabled());
if (showTooltips) {
Tooltip.create((elemental.dom.Element) table.getCellFormatter().getElement(i, work), BOTTOM, MIDDLE, presentation.getText());
}
work++;
String hotKey = KeyMapUtil.getShortcutText(keyBindingAgent.getKeyBinding(actionManager.getId(menuItem)));
if (hotKey == null) {
hotKey = " ";
} else {
hotKey = "<nobr> " + hotKey + " </nobr>";
}
table.setHTML(i, work, hotKey);
table.getCellFormatter().setStyleName(i, work, presentation.isEnabled() ? POPUP_RESOURCES.popup().popupMenuHotKeyField() : POPUP_RESOURCES.popup().popupMenuHotKeyFieldDisabled());
work++;
if (menuItem instanceof ActionGroup && !(((ActionGroup) menuItem).canBePerformed() && !Utils.hasVisibleChildren((ActionGroup) menuItem, presentationFactory, actionManager, managerProvider.get()))) {
table.setWidget(i, work, new SVGImage(POPUP_RESOURCES.subMenu()));
table.getCellFormatter().setStyleName(i, work, presentation.isEnabled() ? POPUP_RESOURCES.popup().popupMenuSubMenuField() : POPUP_RESOURCES.popup().popupMenuSubMenuFieldDisabled());
} else {
table.getCellFormatter().setStyleName(i, work, presentation.isEnabled() ? POPUP_RESOURCES.popup().popupMenuSubMenuField() : POPUP_RESOURCES.popup().popupMenuSubMenuFieldDisabled());
}
work++;
table.getRowFormatter().getElement(i).setAttribute("item-index", Integer.toString(i));
table.getRowFormatter().getElement(i).setAttribute("item-enabled", Boolean.toString(presentation.isEnabled()));
String actionId = actionManager.getId(menuItem);
String debugId;
if (actionId == null) {
debugId = idPrefix + menuItem.getTemplatePresentation().getText();
} else {
debugId = idPrefix + actionId;
}
UIObject.ensureDebugId(table.getRowFormatter().getElement(i), debugId);
}
}
popupMenuPanel.add(table);
}
use of org.eclipse.che.ide.api.action.Presentation in project che by eclipse.
the class PresentationFactory method getPresentation.
public final Presentation getPresentation(@NotNull Action action) {
Presentation presentation = myAction2Presentation.get(action);
if (presentation == null) {
presentation = action.getTemplatePresentation().clone();
myAction2Presentation.put(action, presentation);
}
return presentation;
}
use of org.eclipse.che.ide.api.action.Presentation in project che by eclipse.
the class Utils method hasVisibleChildren.
/**
* Returns true if action group has visible children.
*
* @param group
* action group
* @param factory
* presentation factory
* @param actionManager
* action manager
* @param perspectiveManager
* perspective manager
* @return boolean
*/
public static boolean hasVisibleChildren(ActionGroup group, PresentationFactory factory, ActionManager actionManager, PerspectiveManager perspectiveManager) {
ActionEvent event = new ActionEvent(factory.getPresentation(group), actionManager, perspectiveManager);
for (Action anAction : group.getChildren(event)) {
if (anAction == null) {
Log.error(Utils.class, "Null action found in group " + group + ", " + factory.getPresentation(group));
continue;
}
if (anAction instanceof Separator) {
continue;
}
final Presentation presentation = factory.getPresentation(anAction);
anAction.update(new ActionEvent(presentation, actionManager, perspectiveManager));
if (anAction instanceof ActionGroup) {
ActionGroup childGroup = (ActionGroup) anAction;
// popup menu must be visible itself
if (childGroup.isPopup()) {
if (!presentation.isVisible()) {
continue;
}
}
if (hasVisibleChildren(childGroup, factory, actionManager, perspectiveManager)) {
return true;
}
} else if (presentation.isVisible()) {
return true;
}
}
return false;
}
use of org.eclipse.che.ide.api.action.Presentation in project che by eclipse.
the class Utils method renderActionGroup.
/**
* Returns the list of visible action group.
*
* @param group
* action group
* @param presentationFactory
* presentation factory
* @param actionManager
* action manager
* @param perspectiveManager
* perspective manager
* @return list of visible action group
*/
public static List<VisibleActionGroup> renderActionGroup(@NotNull ActionGroup group, PresentationFactory presentationFactory, ActionManager actionManager, PerspectiveManager perspectiveManager) {
Presentation presentation = presentationFactory.getPresentation(group);
ActionEvent event = new ActionEvent(presentation, actionManager, perspectiveManager);
if (!presentation.isVisible()) {
// don't process invisible groups
return null;
}
Action[] children = group.getChildren(event);
List<VisibleActionGroup> currentVisibleActionGroupList = new ArrayList<>();
List<Action> currentActionList = new ArrayList<>();
String currentGroupId = actionManager.getId(group);
for (Action child : children) {
if (child == null) {
Log.error(Utils.class, "action is null: group=" + group + " group id=" + currentGroupId);
continue;
}
presentation = presentationFactory.getPresentation(child);
child.update(new ActionEvent(presentation, actionManager, perspectiveManager));
if (!presentation.isVisible()) {
// don't create invisible items in the menu
continue;
}
if (child instanceof ActionGroup) {
ActionGroup actionGroup = (ActionGroup) child;
if (actionGroup.isPopup()) {
// popup menu has its own presentation
if (actionGroup.disableIfNoVisibleChildren()) {
final boolean visibleChildren = hasVisibleChildren(actionGroup, presentationFactory, actionManager, perspectiveManager);
if (actionGroup.hideIfNoVisibleChildren() && !visibleChildren) {
continue;
}
presentation.setEnabled(actionGroup.canBePerformed() || visibleChildren);
}
currentActionList.add(child);
} else {
List<VisibleActionGroup> newVisibleActionGroupList = renderActionGroup((ActionGroup) child, presentationFactory, actionManager, perspectiveManager);
currentVisibleActionGroupList.addAll(newVisibleActionGroupList);
}
} else if (child instanceof Separator) {
if ((((Separator) child).getText() != null) || (!currentActionList.isEmpty() && !(currentActionList.get(currentActionList.size() - 1) instanceof Separator))) {
currentActionList.add(child);
}
} else {
currentActionList.add(child);
}
}
currentVisibleActionGroupList.add(0, new VisibleActionGroup(currentGroupId, currentActionList));
return currentVisibleActionGroupList;
}
Aggregations