/* * 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.HashMap; import java.util.List; import java.util.Map; import javax.annotation.PostConstruct; import javax.enterprise.context.Dependent; import javax.enterprise.event.Observes; import javax.inject.Inject; import com.google.gwt.user.client.ui.IsWidget; import com.google.gwt.user.client.ui.Widget; import org.drools.workbench.screens.guided.dtable.client.editor.clipboard.Clipboard; import org.drools.workbench.screens.guided.dtable.client.widget.table.events.cdi.DecisionTableSelectedEvent; import org.drools.workbench.screens.guided.dtable.client.widget.table.events.cdi.DecisionTableSelectionsChangedEvent; import org.uberfire.ext.wires.core.grids.client.model.GridData; @Dependent public class RowContextMenu extends BaseMenu implements IsWidget, RowContextMenuView.Presenter { private RowContextMenuView view; private Clipboard clipboard; @Inject public RowContextMenu( final RowContextMenuView view, final Clipboard clipboard ) { this.view = view; this.clipboard = clipboard; } @PostConstruct void setup() { view.init( this ); } @Override public void onDecisionTableSelectedEvent( final @Observes DecisionTableSelectedEvent event ) { super.onDecisionTableSelectedEvent( event ); } @Override public void onDecisionTableSelectionsChangedEvent( final @Observes DecisionTableSelectionsChangedEvent event ) { super.onDecisionTableSelectionsChangedEvent( event ); } @Override public Widget asWidget() { return view.asWidget(); } @Override public void show( final int mx, final int my ) { view.show( mx, my ); } @Override public void hide() { view.hide(); } @Override public void initialise() { if ( activeDecisionTable == null || !activeDecisionTable.getAccess().isEditable() ) { disableMenuItems(); return; } final List<GridData.SelectedCell> selections = activeDecisionTable.getView().getModel().getSelectedCells(); if ( selections == null || selections.isEmpty() ) { disableMenuItems(); return; } final Map<Integer, Boolean> rowUsage = new HashMap<>(); for ( GridData.SelectedCell sc : selections ) { rowUsage.put( sc.getRowIndex(), true ); } enableMenuItemsForClipboard(); enableMenuItemsForRowOperations( rowUsage.keySet().size() == 1 ); } @Override public void onCut() { if ( activeDecisionTable != null ) { activeDecisionTable.onCut(); } hide(); } @Override public void onCopy() { if ( activeDecisionTable != null ) { activeDecisionTable.onCopy(); } hide(); } @Override public void onPaste() { if ( activeDecisionTable != null ) { activeDecisionTable.onPaste(); } hide(); } @Override public void onInsertRowAbove() { if ( activeDecisionTable != null ) { activeDecisionTable.onInsertRowAbove(); } hide(); } @Override public void onInsertRowBelow() { if ( activeDecisionTable != null ) { activeDecisionTable.onInsertRowBelow(); } hide(); } @Override public void onDeleteSelectedRows() { if ( activeDecisionTable != null ) { activeDecisionTable.onDeleteSelectedRows(); } hide(); } private void disableMenuItems() { view.enableCutMenuItem( false ); view.enableCopyMenuItem( false ); view.enablePasteMenuItem( false ); view.enableInsertRowAboveMenuItem( false ); view.enableInsertRowBelowMenuItem( false ); view.enableDeleteRowMenuItem( false ); } private void enableMenuItemsForClipboard() { view.enableCutMenuItem( true ); view.enableCopyMenuItem( true ); view.enablePasteMenuItem( clipboard.hasData() ); } private void enableMenuItemsForRowOperations( final boolean isSingleRow ) { view.enableInsertRowAboveMenuItem( isSingleRow ); view.enableInsertRowBelowMenuItem( isSingleRow ); view.enableDeleteRowMenuItem( true ); } }