/* * 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.risk; import org.deidentifier.arx.gui.Controller; import org.deidentifier.arx.gui.model.ModelEvent; import org.deidentifier.arx.gui.model.ModelEvent.ModelPart; import org.deidentifier.arx.gui.view.SWTUtil; import org.deidentifier.arx.gui.view.def.ILayout; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.SashForm; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.widgets.Composite; /** * This class layouts the risk analysis view. * * @author Fabian Prasser */ public class LayoutRisks implements ILayout { /** Constant */ private static final int WEIGHT_TOP = 75; /** Constant */ private static final int WEIGHT_BOTTOM = 25; /** Constant */ private static final int WEIGHT_LEFT = 50; /** Constant */ private static final int WEIGHT_RIGHT = 50; /** View */ private final Composite centerLeft; /** View */ private final Composite centerRight; /** View */ private final Composite bottomLeft; /** View */ private final Composite bottomRight; /** View */ private final SashForm centerSash; /** View */ private final LayoutRisksAbstract layoutBottomLeft; /** View */ private final LayoutRisksAbstract layoutBottomRight; /** View */ private final LayoutRisksTop layoutTopLeft; /** View */ private final LayoutRisksTop layoutTopRight; /** * Creates a new instance. * * @param parent * @param controller */ public LayoutRisks(final Composite parent, final Controller controller) { // Create the SashForm with HORIZONTAL centerSash = new SashForm(parent, SWT.VERTICAL); centerSash.setLayoutData(SWTUtil.createFillGridData()); // Create center composite SashForm center = new SashForm(centerSash, SWT.HORIZONTAL | SWT.SMOOTH); center.setLayoutData(SWTUtil.createFillGridData()); // Create left composite centerLeft = new Composite(center, SWT.NONE); centerLeft.setLayoutData(SWTUtil.createFillGridData()); centerLeft.setLayout(new FillLayout()); // Create right composite centerRight = new Composite(center, SWT.NONE); centerRight.setLayoutData(SWTUtil.createFillGridData()); centerRight.setLayout(new FillLayout()); // Create views layoutTopLeft = new LayoutRisksTop(centerLeft, controller, ModelPart.INPUT, null); layoutTopRight = new LayoutRisksTop(centerRight, controller, ModelPart.OUTPUT, ModelPart.INPUT); // Create bottom composite final Composite compositeBottom = new Composite(centerSash, SWT.NONE); compositeBottom.setLayout(new FillLayout()); final SashForm bottomSash = new SashForm(compositeBottom, SWT.HORIZONTAL | SWT.SMOOTH); bottomLeft = new Composite(bottomSash, SWT.NONE); bottomLeft.setLayout(new FillLayout()); bottomRight = new Composite(bottomSash, SWT.NONE); bottomRight.setLayout(new FillLayout()); // Create views layoutBottomLeft = new LayoutRisksBottom(bottomLeft, controller, ModelPart.INPUT, null); layoutBottomRight = new LayoutRisksBottom(bottomRight, controller, ModelPart.OUTPUT, ModelPart.INPUT); // Sync folders layoutBottomLeft.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(final SelectionEvent arg0) { // Synchronize left and right side layoutBottomRight.setSelectionIdex(layoutBottomLeft.getSelectionIndex()); // Synchronize "Quasi-identifiers" if (layoutBottomLeft.getSelectionIndex() == 2) { layoutTopLeft.setSelectionIdex(2); layoutTopRight.setSelectionIdex(2); // Synchronize "Re-identification risks" } else if (layoutBottomLeft.getSelectionIndex() == 0) { layoutTopLeft.setSelectionIdex(3); layoutTopRight.setSelectionIdex(3); } controller.update(new ModelEvent(this, ModelPart.SELECTED_RISK_VISUALIZATION, null)); } }); layoutBottomRight.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(final SelectionEvent arg0) { // Synchronize left and right side layoutBottomLeft.setSelectionIdex(layoutBottomRight.getSelectionIndex()); // Synchronize "Re-identification risks" if (layoutBottomRight.getSelectionIndex() == 0) { layoutTopLeft.setSelectionIdex(3); layoutTopRight.setSelectionIdex(3); } controller.update(new ModelEvent(this, ModelPart.SELECTED_RISK_VISUALIZATION, null)); } }); layoutTopLeft.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(final SelectionEvent arg0) { // Synchronize left and right layoutTopRight.setSelectionIdex(layoutTopLeft.getSelectionIndex()); // Synchronize "Quasi-identifiers" if (layoutTopLeft.getSelectionIndex() == 2) { layoutBottomLeft.setSelectionIdex(2); // Synchronize "Re-identification risks" } else if (layoutTopLeft.getSelectionIndex() == 3) { layoutBottomLeft.setSelectionIdex(0); layoutBottomRight.setSelectionIdex(0); } controller.update(new ModelEvent(this, ModelPart.SELECTED_RISK_VISUALIZATION, null)); } }); layoutTopRight.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(final SelectionEvent arg0) { // Synchronize left and right layoutTopLeft.setSelectionIdex(layoutTopRight.getSelectionIndex()); // Synchronize "Quasi-identifiers" if (layoutTopRight.getSelectionIndex() == 2) { layoutBottomLeft.setSelectionIdex(2); // Synchronize "Re-identification risks" } else if (layoutTopRight.getSelectionIndex() == 3) { layoutBottomLeft.setSelectionIdex(0); layoutBottomRight.setSelectionIdex(0); } controller.update(new ModelEvent(this, ModelPart.SELECTED_RISK_VISUALIZATION, null)); } }); // Set sash weights centerSash.setWeights(new int[] { WEIGHT_TOP, WEIGHT_BOTTOM }); bottomSash.setWeights(new int[] { WEIGHT_LEFT, WEIGHT_RIGHT }); center.setWeights(new int[] { WEIGHT_LEFT, WEIGHT_RIGHT }); // Fix resize bug SWTUtil.fixOSXSashBug(centerSash); SWTUtil.fixOSXSashBug(bottomSash); SWTUtil.fixOSXSashBug(center); } }