/*
* 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.define;
import org.deidentifier.arx.gui.Controller;
import org.deidentifier.arx.gui.model.ModelCriterion;
import org.deidentifier.arx.gui.model.ModelExplicitCriterion;
import org.deidentifier.arx.gui.resources.Resources;
import org.deidentifier.arx.gui.view.SWTUtil;
import org.deidentifier.arx.gui.view.def.ILayout;
import org.deidentifier.arx.gui.view.impl.common.ComponentTitledFolder;
import org.deidentifier.arx.gui.view.impl.common.ComponentTitledFolderButtonBar;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.ToolItem;
/**
* This layout manages views for criteria and the population model
*
* @author Fabian Prasser
*/
public class LayoutCriteria implements ILayout {
/** View */
private final ViewCriteriaList criteriaView;
/** View */
private final ToolItem buttonAdd;
/** View */
private final ToolItem buttonCross;
/** View */
private final ToolItem buttonConfigure;
/** View */
private final ToolItem buttonUp;
/** View */
private final ToolItem buttonDown;
/** View */
private final ComponentTitledFolder folder;
/**
* Creates a new instance.
*
* @param parent
* @param controller
*/
public LayoutCriteria(final Composite parent,
final Controller controller) {
ComponentTitledFolderButtonBar bar = new ComponentTitledFolderButtonBar("id-80"); //$NON-NLS-1$
bar.add(Resources.getMessage("CriterionDefinitionView.80"), //$NON-NLS-1$
controller.getResources().getManagedImage("add.png"), //$NON-NLS-1$
new Runnable() {
@Override
public void run() {
criteriaView.actionAdd();
}
});
bar.add(Resources.getMessage("CriterionDefinitionView.59"), //$NON-NLS-1$
controller.getResources().getManagedImage("remove.png"), //$NON-NLS-1$
new Runnable() {
@Override
public void run() {
criteriaView.actionRemove();
}
});
bar.add(Resources.getMessage("CriterionDefinitionView.82"), //$NON-NLS-1$
controller.getResources().getManagedImage("edit.png"), //$NON-NLS-1$
new Runnable() {
@Override
public void run() {
criteriaView.actionConfigure();
}
});
bar.add(Resources.getMessage("CriterionDefinitionView.57"), //$NON-NLS-1$
controller.getResources().getManagedImage("bullet_arrow_up.png"), //$NON-NLS-1$
new Runnable() {
@Override
public void run() {
criteriaView.actionPush();
}
});
bar.add(Resources.getMessage("CriterionDefinitionView.58"), //$NON-NLS-1$
controller.getResources().getManagedImage("bullet_arrow_down.png"), //$NON-NLS-1$
new Runnable() {
@Override
public void run() {
criteriaView.actionPull();
}
});
// Add view
folder = new ComponentTitledFolder(parent, controller, bar, null);
buttonCross = folder.getButtonItem(Resources.getMessage("CriterionDefinitionView.59")); //$NON-NLS-1$
buttonUp = folder.getButtonItem(Resources.getMessage("CriterionDefinitionView.57")); //$NON-NLS-1$
buttonDown = folder.getButtonItem(Resources.getMessage("CriterionDefinitionView.58")); //$NON-NLS-1$
buttonAdd = folder.getButtonItem(Resources.getMessage("CriterionDefinitionView.80")); //$NON-NLS-1$
buttonConfigure = folder.getButtonItem(Resources.getMessage("CriterionDefinitionView.82")); //$NON-NLS-1$
Composite composite1 = folder.createItem(Resources.getMessage("CriterionSelectionDialog.4"), null); //$NON-NLS-1$
composite1.setLayout(SWTUtil.createGridLayout(1));
this.criteriaView = new ViewCriteriaList(composite1, controller, this);
Composite composite2 = folder.createItem(Resources.getMessage("CriterionSelectionDialog.5"), null); //$NON-NLS-1$
composite2.setLayout(new FillLayout());
new ViewPopulationModel(composite2, controller);
Composite composite3 = folder.createItem(Resources.getMessage("CriterionSelectionDialog.10"), null); //$NON-NLS-1$
composite3.setLayout(new FillLayout());
new ViewCostBenefitModel(composite3, controller);
// Update buttons
folder.addSelectionListener(new SelectionAdapter(){
public void widgetSelected(SelectionEvent arg0) {
updateButtons();
}
});
// Select
folder.setSelection(0);
}
/**
* May be triggered by several views and events
*/
public void updateButtons() {
if (criteriaView == null || folder.getSelectionIndex() == 1) {
buttonCross.setEnabled(false);
buttonDown.setEnabled(false);
buttonUp.setEnabled(false);
buttonAdd.setEnabled(false);
buttonConfigure.setEnabled(false);
return;
}
ModelCriterion criterion = criteriaView.getSelectedCriterion();
boolean enabled = criterion != null;
buttonCross.setEnabled(enabled);
buttonConfigure.setEnabled(enabled);
if (enabled) {
buttonUp.setEnabled(criterion instanceof ModelExplicitCriterion);
buttonDown.setEnabled(criterion instanceof ModelExplicitCriterion);
} else {
buttonUp.setEnabled(enabled);
buttonDown.setEnabled(enabled);
}
buttonAdd.setEnabled(criteriaView.isAddEnabled());
}
}