com.archimatetool.editor.preferences.DiagramFiguresPreferenceTab.java Source code

Java tutorial

Introduction

Here is the source code for com.archimatetool.editor.preferences.DiagramFiguresPreferenceTab.java

Source

/**
 * This program and the accompanying materials
 * are made available under the terms of the License
 * which accompanies this distribution in the file LICENSE.txt
 */
package com.archimatetool.editor.preferences;

import java.util.ArrayList;
import java.util.List;

import org.eclipse.emf.ecore.EClass;
import org.eclipse.jface.layout.TableColumnLayout;
import org.eclipse.jface.viewers.ColumnWeightData;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;

import com.archimatetool.editor.ui.FigureChooser;
import com.archimatetool.model.IArchimatePackage;

/**
 * Default Figures Preferences Tab panel
 * 
 * @author Phillip Beauvoir
 */
public class DiagramFiguresPreferenceTab implements IPreferenceConstants {

    private List<ImageChoice> fChoices = new ArrayList<ImageChoice>();

    private TableViewer fTableViewer;

    private class ImageChoice {
        String name;
        String preferenceKey;
        int chosenType = 0;
        Image[] images;

        ImageChoice(String name, String preferenceKey, EClass eClass) {
            this.name = name;
            this.preferenceKey = preferenceKey;
            images = FigureChooser.getFigurePreviewImagesForClass(eClass);
            chosenType = Preferences.STORE.getInt(preferenceKey);
        }

        Image getImage() {
            return images[chosenType];
        }

        void flip() {
            chosenType = (chosenType == 0) ? 1 : 0;
        }
    }

    public Composite createContents(Composite parent) {
        loadFigures();

        Composite client = new Composite(parent, SWT.NULL);
        client.setLayout(new GridLayout());

        GridLayout gridLayout = new GridLayout();
        gridLayout.marginWidth = 0;
        gridLayout.marginHeight = 0;

        Composite tableClient = new Composite(client, SWT.NULL);
        tableClient.setLayout(gridLayout);
        tableClient.setLayoutData(new GridData(GridData.FILL_BOTH));

        Label label = new Label(tableClient, SWT.NULL);
        label.setText(Messages.DiagramFiguresPreferencePage_0);

        Composite client2 = new Composite(tableClient, SWT.NULL);
        client2.setLayout(new TableColumnLayout());

        GridData gd = new GridData(GridData.FILL_BOTH);
        gd.heightHint = 80; // need this to set a smaller height
        gd.widthHint = 80; // need this to stop it getting larger when the splitter is resized in the Prefs dialog
        client2.setLayoutData(gd);

        createTable(client2);

        fTableViewer.setInput(fChoices);

        return client;
    }

    private void loadFigures() {
        fChoices.add(new ImageChoice(Messages.DiagramFiguresPreferencePage_7, BUSINESS_PROCESS_FIGURE,
                IArchimatePackage.eINSTANCE.getBusinessProcess()));

        fChoices.add(new ImageChoice(Messages.DiagramFiguresPreferencePage_1, BUSINESS_INTERFACE_FIGURE,
                IArchimatePackage.eINSTANCE.getBusinessInterface()));

        fChoices.add(new ImageChoice(Messages.DiagramFiguresPreferenceTab_0, BUSINESS_SERVICE_FIGURE,
                IArchimatePackage.eINSTANCE.getBusinessService()));

        fChoices.add(new ImageChoice(Messages.DiagramFiguresPreferencePage_2, APPLICATION_COMPONENT_FIGURE,
                IArchimatePackage.eINSTANCE.getApplicationComponent()));

        fChoices.add(new ImageChoice(Messages.DiagramFiguresPreferencePage_3, APPLICATION_INTERFACE_FIGURE,
                IArchimatePackage.eINSTANCE.getApplicationInterface()));

        fChoices.add(new ImageChoice(Messages.DiagramFiguresPreferenceTab_1, APPLICATION_SERVICE_FIGURE,
                IArchimatePackage.eINSTANCE.getApplicationService()));

        fChoices.add(new ImageChoice(Messages.DiagramFiguresPreferencePage_4, TECHNOLOGY_DEVICE_FIGURE,
                IArchimatePackage.eINSTANCE.getDevice()));

        fChoices.add(new ImageChoice(Messages.DiagramFiguresPreferencePage_5, TECHNOLOGY_NODE_FIGURE,
                IArchimatePackage.eINSTANCE.getNode()));

        fChoices.add(new ImageChoice(Messages.DiagramFiguresPreferencePage_6, TECHNOLOGY_INTERFACE_FIGURE,
                IArchimatePackage.eINSTANCE.getInfrastructureInterface()));

        fChoices.add(new ImageChoice(Messages.DiagramFiguresPreferenceTab_2, TECHNOLOGY_SERVICE_FIGURE,
                IArchimatePackage.eINSTANCE.getInfrastructureService()));
    }

    private void createTable(Composite parent) {
        fTableViewer = new TableViewer(parent, SWT.BORDER);

        TableColumnLayout layout = (TableColumnLayout) parent.getLayout();
        TableViewerColumn column = new TableViewerColumn(fTableViewer, SWT.NONE);
        layout.setColumnData(column.getColumn(), new ColumnWeightData(100, false));

        fTableViewer.setContentProvider(new IStructuredContentProvider() {
            @Override
            public void dispose() {
            }

            @Override
            public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
            }

            @Override
            public Object[] getElements(Object inputElement) {
                return ((List<?>) inputElement).toArray();
            }
        });

        class TableLabelProvider extends LabelProvider {
            @Override
            public Image getImage(Object element) {
                return ((ImageChoice) element).getImage();
            }

            @Override
            public String getText(Object element) {
                return ((ImageChoice) element).name;
            }
        }

        fTableViewer.setLabelProvider(new TableLabelProvider());

        fTableViewer.addSelectionChangedListener(new ISelectionChangedListener() {
            @Override
            public void selectionChanged(SelectionChangedEvent event) {
                ImageChoice ic = (ImageChoice) ((IStructuredSelection) event.getSelection()).getFirstElement();
                if (ic != null) {
                    ic.flip();
                    fTableViewer.update(ic, null);
                }
            }
        });
    }

    protected boolean performOk() {
        for (ImageChoice choice : fChoices) {
            Preferences.STORE.setValue(choice.preferenceKey, choice.chosenType);
        }

        return true;
    }

    protected void performDefaults() {
        for (ImageChoice choice : fChoices) {
            choice.chosenType = 0;
        }

        fTableViewer.refresh();
    }
}