org.eclipse.thym.ui.config.internal.IconsPage.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.thym.ui.config.internal.IconsPage.java

Source

/*******************************************************************************
 * Copyright (c) 2013, 2014 Red Hat, Inc. 
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 *    Contributors:
 *        Red Hat Inc. - initial API and implementation and/or initial documentation
 *******************************************************************************/
package org.eclipse.thym.ui.config.internal;

import java.util.Arrays;

import org.eclipse.core.databinding.DataBindingContext;
import org.eclipse.core.databinding.beans.BeanProperties;
import org.eclipse.core.databinding.beans.BeansObservables;
import org.eclipse.core.databinding.observable.list.IObservableList;
import org.eclipse.core.databinding.observable.map.IObservableMap;
import org.eclipse.core.databinding.observable.value.IObservableValue;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.databinding.swt.WidgetProperties;
import org.eclipse.jface.databinding.viewers.ObservableListContentProvider;
import org.eclipse.jface.databinding.viewers.ObservableMapLabelProvider;
import org.eclipse.jface.databinding.viewers.ViewerProperties;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.Text;
import org.eclipse.thym.core.config.Icon;
import org.eclipse.thym.core.config.Splash;
import org.eclipse.thym.core.config.Widget;
import org.eclipse.thym.core.config.WidgetModel;
import org.eclipse.thym.ui.HybridUI;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IFileEditorInput;
import org.eclipse.ui.dialogs.ElementTreeSelectionDialog;
import org.eclipse.ui.dialogs.ISelectionStatusValidator;
import org.eclipse.ui.forms.IManagedForm;
import org.eclipse.ui.forms.editor.FormEditor;
import org.eclipse.ui.forms.editor.FormPage;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.ScrolledForm;
import org.eclipse.ui.forms.widgets.Section;
import org.eclipse.ui.forms.widgets.TableWrapData;
import org.eclipse.ui.forms.widgets.TableWrapLayout;
import org.eclipse.ui.model.WorkbenchContentProvider;
import org.eclipse.ui.model.WorkbenchLabelProvider;

public class IconsPage extends FormPage {
    private DataBindingContext m_bindingContext;

    private FormToolkit formToolkit;
    private Table iconsTable;
    private Table splashTable;
    private Text txtWidth;
    private Text txtHeight;
    private Text txtPlatform;
    private Text txtDensity;
    private TableViewer iconsTableViewer;
    private TableViewer splashTableViewer;
    private Text txtSplshWidth;
    private Text txtSplshHeight;
    private Text txtSplshPlatform;
    private Text txtSplshDensity;

    public IconsPage(FormEditor editor) {
        super(editor, "icons", "Icons && Splash Screen");
        formToolkit = editor.getToolkit();
    }

    @Override
    protected void createFormContent(IManagedForm managedForm) {
        final ScrolledForm form = managedForm.getForm();
        formToolkit.decorateFormHeading(form.getForm());
        managedForm.getForm().setText(getTitle());
        {
            TableWrapLayout tableWrapLayout = new TableWrapLayout();
            tableWrapLayout.makeColumnsEqualWidth = true;
            tableWrapLayout.numColumns = 1;
            managedForm.getForm().getBody().setLayout(tableWrapLayout);
        }

        Section sctnIcons = managedForm.getToolkit().createSection(managedForm.getForm().getBody(),
                Section.TITLE_BAR);
        TableWrapData twd_sctnIcons = new TableWrapData(TableWrapData.FILL, TableWrapData.TOP, 1, 1);
        twd_sctnIcons.grabHorizontal = true;
        sctnIcons.setLayoutData(twd_sctnIcons);
        managedForm.getToolkit().paintBordersFor(sctnIcons);
        sctnIcons.setText("Icons");

        Composite composite = managedForm.getToolkit().createComposite(sctnIcons, SWT.NONE);
        managedForm.getToolkit().paintBordersFor(composite);
        sctnIcons.setClient(composite);
        composite.setLayout(new GridLayout(3, false));

        iconsTableViewer = new TableViewer(composite, SWT.BORDER | SWT.FULL_SELECTION);

        iconsTable = iconsTableViewer.getTable();

        iconsTable.setHeaderVisible(true);
        GridData gd_iconsTable = new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1);
        gd_iconsTable.heightHint = 125;
        iconsTable.setLayoutData(gd_iconsTable);
        managedForm.getToolkit().paintBordersFor(iconsTable);

        Composite composite_3 = managedForm.getToolkit().createComposite(composite, SWT.NONE);
        composite_3.setLayoutData(new GridData(SWT.LEFT, SWT.BOTTOM, false, false, 1, 1));
        managedForm.getToolkit().paintBordersFor(composite_3);
        composite_3.setLayout(new FillLayout(SWT.VERTICAL));

        Button btnIconAdd = managedForm.getToolkit().createButton(composite_3, "Add...", SWT.NONE);
        btnIconAdd.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                String src = getImageSrc();
                ConfigEditor editor = (ConfigEditor) getEditor();
                Icon icon = editor.getWidgetModel().createIcon(getWidget());
                icon.setSrc(src);
                getWidget().addIcon(icon);
            }
        });

        Button btnIconRemove = managedForm.getToolkit().createButton(composite_3, "Remove", SWT.NONE);

        Group iconDetailGrp = new Group(composite, SWT.NONE);
        iconDetailGrp.setText("Icon Image Details");
        iconDetailGrp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false, 1, 1));
        managedForm.getToolkit().adapt(iconDetailGrp);
        managedForm.getToolkit().paintBordersFor(iconDetailGrp);
        iconDetailGrp.setLayout(new GridLayout(1, false));

        Composite imageDetailComposite = managedForm.getToolkit().createComposite(iconDetailGrp, SWT.NONE);
        managedForm.getToolkit().paintBordersFor(imageDetailComposite);
        imageDetailComposite.setLayout(new GridLayout(2, false));

        Label lblWidth = managedForm.getToolkit().createLabel(imageDetailComposite, "Width:", SWT.NONE);

        txtWidth = managedForm.getToolkit().createText(imageDetailComposite, "New Text", SWT.NONE);
        txtWidth.setText("");
        txtWidth.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false, 1, 1));

        Label lblHeight = managedForm.getToolkit().createLabel(imageDetailComposite, "Height:", SWT.NONE);

        txtHeight = managedForm.getToolkit().createText(imageDetailComposite, "New Text", SWT.NONE);
        txtHeight.setText("");
        txtHeight.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));

        Label lblPlatform = managedForm.getToolkit().createLabel(imageDetailComposite, "Platform:", SWT.NONE);

        txtPlatform = managedForm.getToolkit().createText(imageDetailComposite, "New Text", SWT.NONE);
        txtPlatform.setText("");
        txtPlatform.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));

        Label lblDensity = managedForm.getToolkit().createLabel(imageDetailComposite, "Density:", SWT.NONE);

        txtDensity = managedForm.getToolkit().createText(imageDetailComposite, "New Text", SWT.NONE);
        txtDensity.setText("");
        txtDensity.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
        btnIconRemove.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                IStructuredSelection selection = (IStructuredSelection) iconsTableViewer.getSelection();
                if (selection.isEmpty())
                    return;
                Icon icon = (Icon) selection.getFirstElement();
                getWidget().removeIcon(icon);
            }
        });

        Section sctnSplashes = managedForm.getToolkit().createSection(managedForm.getForm().getBody(),
                Section.TITLE_BAR);
        sctnSplashes.setLayoutData(new TableWrapData(TableWrapData.FILL, TableWrapData.TOP, 1, 1));
        managedForm.getToolkit().paintBordersFor(sctnSplashes);
        sctnSplashes.setText("Splash Screens");

        Composite composite_1 = managedForm.getToolkit().createComposite(sctnSplashes, SWT.NONE);
        managedForm.getToolkit().paintBordersFor(composite_1);
        sctnSplashes.setClient(composite_1);
        composite_1.setLayout(new GridLayout(3, false));

        splashTableViewer = new TableViewer(composite_1, SWT.BORDER | SWT.FULL_SELECTION);
        splashTable = splashTableViewer.getTable();

        splashTable.setHeaderVisible(true);
        GridData gd_splashTable = new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1);
        gd_splashTable.heightHint = 125;
        splashTable.setLayoutData(gd_splashTable);
        managedForm.getToolkit().paintBordersFor(splashTable);

        Composite composite_4 = managedForm.getToolkit().createComposite(composite_1, SWT.NONE);
        composite_4.setLayoutData(new GridData(SWT.LEFT, SWT.BOTTOM, false, false, 1, 1));
        managedForm.getToolkit().paintBordersFor(composite_4);
        composite_4.setLayout(new FillLayout(SWT.VERTICAL));

        Button btnSplashAdd = managedForm.getToolkit().createButton(composite_4, "Add...", SWT.NONE);
        btnSplashAdd.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                String src = getImageSrc();
                Splash splash = ((ConfigEditor) getEditor()).getWidgetModel().createSplash(getWidget());
                splash.setSrc(src);
                getWidget().addSplash(splash);
            }
        });

        Button btnSplashRemove = managedForm.getToolkit().createButton(composite_4, "Remove", SWT.NONE);
        Group splashDetailGrp = new Group(composite_1, SWT.NONE);
        splashDetailGrp.setText("Splash Image Details");
        managedForm.getToolkit().adapt(splashDetailGrp);
        managedForm.getToolkit().paintBordersFor(splashDetailGrp);
        splashDetailGrp.setLayout(new GridLayout(1, false));

        Composite splashDetailComposite = managedForm.getToolkit().createComposite(splashDetailGrp, SWT.NONE);
        managedForm.getToolkit().paintBordersFor(splashDetailComposite);
        splashDetailComposite.setLayout(new GridLayout(2, false));

        Label lblSplshWidth = managedForm.getToolkit().createLabel(splashDetailComposite, "Width:", SWT.NONE);

        txtSplshWidth = managedForm.getToolkit().createText(splashDetailComposite, "New Text", SWT.NONE);

        txtSplshWidth.setText("");
        txtSplshWidth.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false, 1, 1));

        Label lblSplshHeight = managedForm.getToolkit().createLabel(splashDetailComposite, "Height:", SWT.NONE);

        txtSplshHeight = managedForm.getToolkit().createText(splashDetailComposite, "New Text", SWT.NONE);
        txtSplshHeight.setText("");
        txtSplshHeight.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));

        Label lblSplshPlatform = managedForm.getToolkit().createLabel(splashDetailComposite, "Platform:", SWT.NONE);

        txtSplshPlatform = managedForm.getToolkit().createText(splashDetailComposite, "New Text", SWT.NONE);
        txtSplshPlatform.setText("");
        txtSplshPlatform.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));

        Label lblSplshDensity = managedForm.getToolkit().createLabel(splashDetailComposite, "Density:", SWT.NONE);

        txtSplshDensity = managedForm.getToolkit().createText(splashDetailComposite, "New Text", SWT.NONE);
        txtSplshDensity.setText("");
        txtSplshDensity.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
        btnSplashRemove.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                IStructuredSelection selection = (IStructuredSelection) splashTableViewer.getSelection();
                if (selection.isEmpty())
                    return;
                Splash splash = (Splash) selection.getFirstElement();
                getWidget().removeSplash(splash);
            }
        });

        m_bindingContext = initDataBindings();
    }

    private String getImageSrc() {
        ElementTreeSelectionDialog dialog = new ElementTreeSelectionDialog(getSite().getShell(),
                new WorkbenchLabelProvider(), new WorkbenchContentProvider());
        dialog.setTitle("Choose image");
        IProject currentProject = getProject();
        dialog.setInput(currentProject.getFolder("www"));
        dialog.addFilter(new ViewerFilter() {

            @Override
            public boolean select(Viewer viewer, Object parentElement, Object element) {
                IResource resource = (IResource) element;
                return resource.getType() == IResource.FOLDER
                        || Arrays.binarySearch(WidgetModel.ICON_EXTENSIONS, resource.getFileExtension()) >= 0;
            }
        });

        dialog.setValidator(new ISelectionStatusValidator() {

            @Override
            public IStatus validate(Object[] selection) {

                if (selection.length == 0 || selection.length > 1) {
                    return new Status(IStatus.ERROR, HybridUI.PLUGIN_ID, "Must have selection");
                }
                IResource resource = (IResource) selection[0];
                if (resource.getType() == IResource.FOLDER) {
                    return new Status(IStatus.ERROR, HybridUI.PLUGIN_ID, "Can not select folder");
                }
                return Status.OK_STATUS;
            }
        });

        if (dialog.open() == Window.OK) {
            IResource resource = (IResource) dialog.getFirstResult();
            String src = resource.getProjectRelativePath().toString().substring("www".length() + 1);
            return src;

        }
        return null;

    }

    private IProject getProject() {
        IEditorPart editorPart = HybridUI.getDefault().getWorkbench().getActiveWorkbenchWindow().getActivePage()
                .getActiveEditor();
        if (editorPart.getEditorInput() instanceof IFileEditorInput) {
            IFileEditorInput input = (IFileEditorInput) editorPart.getEditorInput();
            IProject activeProject = input.getFile().getProject();
            return activeProject;
        } else {
            return null;
        }
    }

    private Widget getWidget() {
        return ((ConfigEditor) getEditor()).getWidget();
    }

    protected DataBindingContext initDataBindings() {
        DataBindingContext bindingContext = new DataBindingContext();
        //
        ObservableListContentProvider listContentProvider = new ObservableListContentProvider();
        IObservableMap observeMap = BeansObservables.observeMap(listContentProvider.getKnownElements(), Icon.class,
                "src");
        iconsTableViewer.setLabelProvider(new ObservableMapLabelProvider(observeMap));
        iconsTableViewer.setContentProvider(listContentProvider);
        //
        IObservableList iconsGetWidgetObserveList = BeanProperties.list("icons").observe(getWidget());
        iconsTableViewer.setInput(iconsGetWidgetObserveList);
        //
        ObservableListContentProvider listContentProvider_1 = new ObservableListContentProvider();
        IObservableMap observeMap_1 = BeansObservables.observeMap(listContentProvider_1.getKnownElements(),
                Splash.class, "src");
        splashTableViewer.setLabelProvider(new ObservableMapLabelProvider(observeMap_1));
        splashTableViewer.setContentProvider(listContentProvider_1);
        //
        IObservableList splashesGetWidgetObserveList = BeanProperties.list("splashes").observe(getWidget());
        splashTableViewer.setInput(splashesGetWidgetObserveList);
        //
        IObservableValue observeSingleSelectionIconsTableViewer = ViewerProperties.singleSelection()
                .observe(iconsTableViewer);
        IObservableValue iconsTableViewerWidthObserveDetailValue = BeanProperties
                .value(Icon.class, "width", int.class).observeDetail(observeSingleSelectionIconsTableViewer);
        IObservableValue observeTextTxtWidthObserveWidget = WidgetProperties.text(SWT.Modify).observe(txtWidth);
        bindingContext.bindValue(iconsTableViewerWidthObserveDetailValue, observeTextTxtWidthObserveWidget, null,
                null);
        //
        IObservableValue observeSingleSelectionIconsTableViewer_1 = ViewerProperties.singleSelection()
                .observe(iconsTableViewer);
        IObservableValue iconsTableViewerHeightObserveDetailValue = BeanProperties
                .value(Icon.class, "height", int.class).observeDetail(observeSingleSelectionIconsTableViewer_1);
        IObservableValue observeTextTxtHeightObserveWidget = WidgetProperties.text(SWT.Modify).observe(txtHeight);
        bindingContext.bindValue(iconsTableViewerHeightObserveDetailValue, observeTextTxtHeightObserveWidget, null,
                null);
        //
        IObservableValue observeSingleSelectionIconsTableViewer_2 = ViewerProperties.singleSelection()
                .observe(iconsTableViewer);
        IObservableValue iconsTableViewerPlatformObserveDetailValue = BeanProperties
                .value(Icon.class, "platform", String.class)
                .observeDetail(observeSingleSelectionIconsTableViewer_2);
        IObservableValue observeTextTxtPlatformObserveWidget = WidgetProperties.text(SWT.Modify)
                .observe(txtPlatform);
        bindingContext.bindValue(iconsTableViewerPlatformObserveDetailValue, observeTextTxtPlatformObserveWidget,
                null, null);
        //
        IObservableValue observeSingleSelectionIconsTableViewer_3 = ViewerProperties.singleSelection()
                .observe(iconsTableViewer);
        IObservableValue iconsTableViewerDensityObserveDetailValue = BeanProperties
                .value(Icon.class, "density", String.class).observeDetail(observeSingleSelectionIconsTableViewer_3);
        IObservableValue observeTextTxtDensityObserveWidget = WidgetProperties.text(SWT.Modify).observe(txtDensity);
        bindingContext.bindValue(iconsTableViewerDensityObserveDetailValue, observeTextTxtDensityObserveWidget,
                null, null);
        //
        IObservableValue observeSingleSelectionSplashTableViewer = ViewerProperties.singleSelection()
                .observe(splashTableViewer);
        IObservableValue splashTableViewerWidthObserveDetailValue = BeanProperties
                .value(Splash.class, "width", int.class).observeDetail(observeSingleSelectionSplashTableViewer);
        IObservableValue observeTextTxtSplshWidthObserveWidget = WidgetProperties.text(SWT.Modify)
                .observe(txtSplshWidth);
        bindingContext.bindValue(splashTableViewerWidthObserveDetailValue, observeTextTxtSplshWidthObserveWidget,
                null, null);
        //
        IObservableValue observeSingleSelectionSplashTableViewer_1 = ViewerProperties.singleSelection()
                .observe(splashTableViewer);
        IObservableValue splashTableViewerHeightObserveDetailValue = BeanProperties
                .value(Splash.class, "height", int.class).observeDetail(observeSingleSelectionSplashTableViewer_1);
        IObservableValue observeTextTxtSplshHeightObserveWidget = WidgetProperties.text(SWT.Modify)
                .observe(txtSplshHeight);
        bindingContext.bindValue(splashTableViewerHeightObserveDetailValue, observeTextTxtSplshHeightObserveWidget,
                null, null);
        //
        IObservableValue observeSingleSelectionSplashTableViewer_2 = ViewerProperties.singleSelection()
                .observe(splashTableViewer);
        IObservableValue splashTableViewerPlatformObserveDetailValue = BeanProperties
                .value(Splash.class, "platform", String.class)
                .observeDetail(observeSingleSelectionSplashTableViewer_2);
        IObservableValue observeTextTxtSplshPlatformObserveWidget = WidgetProperties.text(SWT.Modify)
                .observe(txtSplshPlatform);
        bindingContext.bindValue(splashTableViewerPlatformObserveDetailValue,
                observeTextTxtSplshPlatformObserveWidget, null, null);
        //
        IObservableValue observeSingleSelectionSplashTableViewer_3 = ViewerProperties.singleSelection()
                .observe(splashTableViewer);
        IObservableValue splashTableViewerDensityObserveDetailValue = BeanProperties
                .value(Splash.class, "density", String.class)
                .observeDetail(observeSingleSelectionSplashTableViewer_3);
        IObservableValue observeTextTxtSplshDensityObserveWidget = WidgetProperties.text(SWT.Modify)
                .observe(txtSplshDensity);
        bindingContext.bindValue(splashTableViewerDensityObserveDetailValue,
                observeTextTxtSplshDensityObserveWidget, null, null);
        //
        return bindingContext;
    }
}