/*
* ARX: Powerful Data Anonymization
* Copyright 2012 - 2017 Fabian Prasser, Florian Kohlmayer and contributors
*
* 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.deidentifier.arx.gui.view.impl.wizard;
import org.deidentifier.arx.gui.resources.Resources;
import org.deidentifier.arx.gui.view.impl.wizard.HierarchyWizardModelGrouping.HierarchyWizardGroupingGroup;
import org.deidentifier.arx.gui.view.impl.wizard.HierarchyWizardModelGrouping.HierarchyWizardGroupingInterval;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
/**
* The editor's menu.
*
* @author Fabian Prasser
* @param <T>
*/
public class HierarchyWizardEditorMenu<T> {
/** Var. */
private final Composite composite;
/** Var. */
private final Menu menu;
/** Var. */
private final MenuItem addBefore;
/** Var. */
private final MenuItem addAfter;
/** Var. */
private final MenuItem mergeUp;
/** Var. */
private final MenuItem mergeDown;
/** Var. */
private final MenuItem remove;
/** Var. */
private final MenuItem addRight;
/** Var. */
private final HierarchyWizardModelGrouping<T> model;
/**
* Creates a new instance.
*
* @param composite
* @param model
*/
public HierarchyWizardEditorMenu(final Composite composite,
final HierarchyWizardModelGrouping<T> model) {
this.model = model;
this.composite = composite;
this.menu = new Menu(composite);
this.remove = new MenuItem(menu, SWT.NONE);
this.remove.setText(Resources.getMessage("HierarchyWizardEditorMenu.0")); //$NON-NLS-1$
this.remove.addSelectionListener(new SelectionAdapter(){
@Override public void widgetSelected(SelectionEvent arg0) {
model.remove(model.getSelectedElement());
}
});
new MenuItem(menu, SWT.SEPARATOR);
this.addBefore = new MenuItem(menu, SWT.NONE);
this.addBefore.setText(Resources.getMessage("HierarchyWizardEditorMenu.1")); //$NON-NLS-1$
this.addBefore.addSelectionListener(new SelectionAdapter(){
@Override public void widgetSelected(SelectionEvent arg0) {
model.addBefore(model.getSelectedElement());
}
});
this.addAfter = new MenuItem(menu, SWT.NONE);
this.addAfter.setText(Resources.getMessage("HierarchyWizardEditorMenu.2")); //$NON-NLS-1$
this.addAfter.addSelectionListener(new SelectionAdapter(){
@Override public void widgetSelected(SelectionEvent arg0) {
model.addAfter(model.getSelectedElement());
}
});
new MenuItem(menu, SWT.SEPARATOR);
this.mergeDown = new MenuItem(menu, SWT.NONE);
this.mergeDown.setText(Resources.getMessage("HierarchyWizardEditorMenu.3")); //$NON-NLS-1$
this.mergeDown.addSelectionListener(new SelectionAdapter(){
@Override public void widgetSelected(SelectionEvent arg0) {
model.mergeDown(model.getSelectedElement());
}
});
this.mergeUp = new MenuItem(menu, SWT.NONE);
this.mergeUp.setText(Resources.getMessage("HierarchyWizardEditorMenu.4")); //$NON-NLS-1$
this.mergeUp.addSelectionListener(new SelectionAdapter(){
@Override public void widgetSelected(SelectionEvent arg0) {
model.mergeUp(model.getSelectedElement());
}
});
new MenuItem(menu, SWT.SEPARATOR);
this.addRight = new MenuItem(menu, SWT.NONE);
this.addRight.setText(Resources.getMessage("HierarchyWizardEditorMenu.5")); //$NON-NLS-1$
this.addRight.addSelectionListener(new SelectionAdapter(){
@Override public void widgetSelected(SelectionEvent arg0) {
model.addRight(model.getSelectedElement());
}
});
}
/**
*
*
* @param x
* @param y
*/
@SuppressWarnings("unchecked")
public void show(int x, int y){
if (model.getSelectedElement() == null){
return;
}
if (model.getSelectedElement() instanceof HierarchyWizardGroupingInterval){
HierarchyWizardGroupingInterval<T> interval =
(HierarchyWizardGroupingInterval<T>)model.getSelectedElement();
if (model.getIntervals().size()==1) {
this.remove.setEnabled(false);
} else if (model.isFirst(interval) || model.isLast(interval)){
this.remove.setEnabled(true);
} else {
this.remove.setEnabled(false);
}
if (model.isFirst(interval)) {
this.addBefore.setEnabled(true);
this.mergeDown.setEnabled(false);
} else {
this.addBefore.setEnabled(false);
this.mergeDown.setEnabled(true);
}
if (model.isLast(interval)) {
this.addAfter.setEnabled(true);
this.mergeUp.setEnabled(false);
} else {
this.addAfter.setEnabled(false);
this.mergeUp.setEnabled(true);
}
this.addRight.setEnabled(true);
} else if (model.getSelectedElement() instanceof HierarchyWizardGroupingGroup){
if (model.isShowIntervals()){
this.remove.setEnabled(true);
} else {
if (model.getModelGroups().size() == 1 &&
model.getModelGroups().get(0).size() == 1) {
this.remove.setEnabled(false);
} else {
this.remove.setEnabled(true);
}
}
this.addBefore.setEnabled(true);
this.addAfter.setEnabled(true);
this.addRight.setEnabled(true);
this.mergeUp.setEnabled(false);
this.mergeDown.setEnabled(false);
}
menu.setLocation(composite.toDisplay(x, y));
menu.setVisible(true);
}
}