com.appnativa.studio.composite.SequenceArrayEditorComposite.java Source code

Java tutorial

Introduction

Here is the source code for com.appnativa.studio.composite.SequenceArrayEditorComposite.java

Source

/*
 * @(#)SequenceArrayEditorComposite.java
 *
 * Copyright (c) appNativa. All rights reserved.
 *
 * Use is subject to license terms.
 */

package com.appnativa.studio.composite;

import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Point;
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.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.wb.swt.SWTResourceManager;

import com.appnativa.studio.dialogs.SequenceArrayEditor;
import com.appnativa.spot.iSPOTElement;

public class SequenceArrayEditorComposite extends BaseEditorComposite {

    /**
     * Create the composite.
     * @param parent
     * @param style
     */
    public SequenceArrayEditorComposite(Composite parent, int style) {
        super(parent, style);
        setLayout(new GridLayout(1, false));

        Composite composite = new Composite(this, SWT.NONE);

        composite.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false, 1, 1));
        composite.setLayout(new FillLayout(SWT.HORIZONTAL));

        Button btnEditItems = new Button(composite, SWT.NONE);

        btnEditItems.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                showsequenceEditor(false);
            }
        });
        btnEditItems.setText("Edit Items");

        Button btnAddItem = new Button(composite, SWT.NONE);

        btnAddItem.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                showsequenceEditor(true);
            }
        });
        btnAddItem.setText("Add Item");

        Label label = new Label(this, SWT.SEPARATOR | SWT.HORIZONTAL);

        label.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
        textWidget = new Text(this, SWT.BORDER);
        textWidget.setEditable(false);
        textWidget.setBackground(SWTResourceManager.getColor(SWT.COLOR_WIDGET_BACKGROUND));
        textWidget.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
        createAttributesEditor(this, 1);
    }

    public void setSelectedItem(iSPOTElement element) {
        this.element = (iSPOTElement) element.clone();
        textWidget.setText(element.toString());
        calculatePreferredTextHeight();
        resetAttributes();
    }

    protected int calculatePreferredTextHeight() {
        Point p = textWidget.computeSize(SWT.DEFAULT, SWT.DEFAULT, true);

        p.y = Math.min(p.y, 300);
        p.y = Math.max(p.y, 100);
        ((GridData) textWidget.getLayoutData()).heightHint = p.y;

        return p.y;
    }

    protected void showsequenceEditor(boolean addNew) {
        final SequenceArrayEditor se = new SequenceArrayEditor(getShell(), element, null, false);

        if (addNew) {
            Display.getDefault().asyncExec(new Runnable() {
                @Override
                public void run() {
                    se.addElement();
                }
            });
        }

        int ret = se.open();

        if ((ret == IDialogConstants.OK_ID) || (ret == IDialogConstants.CLIENT_ID)) {
            this.element = se.getSPOTElement();
            textWidget.setText(element.toString());

            int y = textWidget.getSize().y;

            if (y != calculatePreferredTextHeight()) {
                this.getParent().getParent().layout();
            }

            if (propertyChangeListener != null) {
                notifyPropertyChangeListener(element);
            }
        }
    }
}