/* * Copyright 2016 Red Hat, Inc. and/or its affiliates. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.drools.workbench.screens.guided.dtable.client.editor.menu; import java.util.ArrayList; import java.util.List; import javax.annotation.PostConstruct; import javax.enterprise.context.Dependent; import javax.enterprise.event.Observes; import javax.inject.Inject; import org.drools.workbench.screens.guided.dtable.client.resources.i18n.GuidedDecisionTableErraiConstants; import org.drools.workbench.screens.guided.dtable.client.widget.table.GuidedDecisionTableModellerView; import org.drools.workbench.screens.guided.dtable.client.widget.table.events.cdi.DecisionTablePinnedEvent; import org.drools.workbench.screens.guided.dtable.client.widget.table.events.cdi.DecisionTableSelectedEvent; import org.gwtbootstrap3.client.ui.constants.IconType; import org.jboss.errai.ui.client.local.spi.TranslationService; import org.uberfire.ext.widgets.common.client.menu.MenuItemDividerView; import org.uberfire.ext.widgets.common.client.menu.MenuItemFactory; import org.uberfire.ext.widgets.common.client.menu.MenuItemFactory.MenuItemViewHolder; import org.uberfire.ext.widgets.common.client.menu.MenuItemHeaderView; import org.uberfire.ext.widgets.common.client.menu.MenuItemWithIconView; import org.uberfire.workbench.model.menu.MenuFactory; import org.uberfire.workbench.model.menu.MenuItem; @Dependent public class ViewMenuBuilder extends BaseMenu implements MenuFactory.CustomMenuBuilder { public interface SupportsZoom { void setZoom(final int zoomLevel); } public interface HasMergedView { void setMerged(final boolean merged); boolean isMerged(); } public interface HasAuditLog { void showAuditLog(); } private TranslationService ts; private MenuItemFactory menuItemFactory; private GuidedDecisionTableModellerView.Presenter modeller; MenuItemViewHolder<MenuItemHeaderView> miHeader; MenuItemViewHolder<MenuItemWithIconView> miZoom125pct; MenuItemViewHolder<MenuItemWithIconView> miZoom100pct; MenuItemViewHolder<MenuItemWithIconView> miZoom75pct; MenuItemViewHolder<MenuItemWithIconView> miZoom50pct; MenuItemViewHolder<MenuItemDividerView> miSeparator; MenuItemViewHolder<MenuItemWithIconView> miToggleMergeState; MenuItemViewHolder<MenuItemWithIconView> miViewAuditLog; @Inject public ViewMenuBuilder(final TranslationService ts, final MenuItemFactory menuItemFactory) { this.ts = ts; this.menuItemFactory = menuItemFactory; } @PostConstruct public void setup() { miHeader = menuItemFactory.makeMenuItemHeader(ts.getTranslation(GuidedDecisionTableErraiConstants.ViewMenu_zoom)); miZoom125pct = menuItemFactory.makeMenuItemWithIcon("125%", () -> onZoom(125)); miZoom100pct = menuItemFactory.makeMenuItemWithIcon("100%", () -> onZoom(100)); miZoom75pct = menuItemFactory.makeMenuItemWithIcon("75%", () -> onZoom(75)); miZoom50pct = menuItemFactory.makeMenuItemWithIcon("50%", () -> onZoom(50)); miSeparator = menuItemFactory.makeMenuItemDivider(); miToggleMergeState = menuItemFactory.makeMenuItemWithIcon(ts.getTranslation(GuidedDecisionTableErraiConstants.ViewMenu_merged), this::onToggleMergeState); miViewAuditLog = menuItemFactory.makeMenuItemWithIcon(ts.getTranslation(GuidedDecisionTableErraiConstants.ViewMenu_auditLog), this::onViewAuditLog); miZoom125pct.getMenuItemView().setIconType(null); miZoom100pct.getMenuItemView().setIconType(IconType.CHECK); miZoom75pct.getMenuItemView().setIconType(null); miZoom50pct.getMenuItemView().setIconType(null); miToggleMergeState.getMenuItem().setEnabled(false); miViewAuditLog.getMenuItem().setEnabled(false); } public void setModeller(final GuidedDecisionTableModellerView.Presenter modeller) { this.modeller = modeller; } @Override public void push(final MenuFactory.CustomMenuBuilder element) { } @Override public MenuItem build() { return MenuFactory.newTopLevelMenu(ts.getTranslation(GuidedDecisionTableErraiConstants.ViewMenu_title)) .withItems(getEditMenuItems()) .endMenu() .build() .getItems() .get(0); } List<MenuItem> getEditMenuItems() { final ArrayList<MenuItem> menuItems = new ArrayList<>(); menuItems.add(miHeader.getMenuItem()); menuItems.add(miZoom125pct.getMenuItem()); menuItems.add(miZoom100pct.getMenuItem()); menuItems.add(miZoom75pct.getMenuItem()); menuItems.add(miZoom50pct.getMenuItem()); menuItems.add(miSeparator.getMenuItem()); menuItems.add(miToggleMergeState.getMenuItem()); menuItems.add(miViewAuditLog.getMenuItem()); return menuItems; } @Override public void onDecisionTableSelectedEvent(final @Observes DecisionTableSelectedEvent event) { super.onDecisionTableSelectedEvent(event); enableZoomMenu(true); } @Override public void initialise() { if (activeDecisionTable == null || !activeDecisionTable.getAccess().isEditable()) { miToggleMergeState.getMenuItem().setEnabled(false); miToggleMergeState.getMenuItemView().setIconType(null); miViewAuditLog.getMenuItem().setEnabled(false); } else { miToggleMergeState.getMenuItem().setEnabled(true); miToggleMergeState.getMenuItemView().setIconType(activeDecisionTable.isMerged() ? IconType.CHECK : null); miViewAuditLog.getMenuItem().setEnabled(true); } } public void onDecisionTablePinnedEvent(final @Observes DecisionTablePinnedEvent event) { final GuidedDecisionTableModellerView.Presenter modeller = event.getPresenter(); if (modeller == null) { return; } if (!modeller.equals(this.modeller)) { return; } enableZoomMenu(!event.isPinned()); } private void enableZoomMenu(final boolean enabled) { miZoom125pct.getMenuItem().setEnabled(enabled); miZoom100pct.getMenuItem().setEnabled(enabled); miZoom75pct.getMenuItem().setEnabled(enabled); miZoom50pct.getMenuItem().setEnabled(enabled); } void onZoom(final int zoom) { modeller.setZoom(zoom); miZoom125pct.getMenuItemView().setIconType(null); miZoom100pct.getMenuItemView().setIconType(null); miZoom75pct.getMenuItemView().setIconType(null); miZoom50pct.getMenuItemView().setIconType(null); switch (zoom) { case 125: miZoom125pct.getMenuItemView().setIconType(IconType.CHECK); break; case 100: miZoom100pct.getMenuItemView().setIconType(IconType.CHECK); break; case 75: miZoom75pct.getMenuItemView().setIconType(IconType.CHECK); break; case 50: miZoom50pct.getMenuItemView().setIconType(IconType.CHECK); break; } } void onToggleMergeState() { if (activeDecisionTable != null) { final boolean newMergeState = !activeDecisionTable.isMerged(); miToggleMergeState.getMenuItemView().setIconType(newMergeState ? IconType.CHECK : null); activeDecisionTable.setMerged(newMergeState); } } void onViewAuditLog() { if (activeDecisionTable != null) { activeDecisionTable.showAuditLog(); } } }