com.nokia.carbide.cpp.internal.pi.wizards.ui.util.SdkChooserBase.java Source code

Java tutorial

Introduction

Here is the source code for com.nokia.carbide.cpp.internal.pi.wizards.ui.util.SdkChooserBase.java

Source

/*
 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
 * which accompanies this distribution, and is available
 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
 *
 * Initial Contributors:
 * Nokia Corporation - initial contribution.
 *
 * Contributors:
 *
 * Description: 
 *
 */

package com.nokia.carbide.cpp.internal.pi.wizards.ui.util;

import java.util.List;

import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
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.TableItem;

import com.nokia.carbide.cpp.sdk.core.ISDKManager;
import com.nokia.carbide.cpp.sdk.core.ISymbianSDK;
import com.nokia.carbide.cpp.sdk.core.SDKCorePlugin;
import com.nokia.carbide.cpp.sdk.ui.shared.AddSDKDialog;

// just gather all composite layout stuff here, so both Dialog
// and Wizard can be the same layout, they should call layout
// in their layout code
// Wizard would setControl(layout(parent)) in createControl
// Dialog would return layout(parent); in layout code e.g. createDialogArea()
public class SdkChooserBase {
    // control
    public Composite composite = null;
    public Label label = null;
    public Composite epocrootComposite = null;
    public Table sdkTable = null;
    public Composite buttonComposite = null;
    public Button addSdkButton = null;
    public Button removeSdkButton = null;
    public Group sdkGroup = null;
    public Label directoryDataLabel = null;
    public Label epocrootLabel = null;
    public Label osVersionDataLabel = null;
    public Label osVersionLabel = null;
    public Label platformDataLabel = null;
    public Label platformLabel = null;

    public Composite layout(Composite parent) {
        SDKCorePlugin.getSDKManager();
        GridLayout gridLayout1 = new GridLayout();
        gridLayout1.numColumns = 1;
        composite = new Composite(parent, SWT.NONE);
        composite.setLayout(gridLayout1);
        composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
        label = new Label(composite, SWT.NONE);
        label.setText(Messages.getString("SdkChooserBase.label")); //$NON-NLS-1$
        createEpocrootComposite();
        createSDKGroup();

        return composite;
    }

    /**
     * This method initializes epocrootComposite   
     *
     */
    private void createEpocrootComposite() {
        GridLayout gridLayout2 = new GridLayout();
        gridLayout2.numColumns = 2;
        epocrootComposite = new Composite(composite, SWT.NONE);
        epocrootComposite.setLayout(gridLayout2);
        GridData gridData1 = new GridData();
        gridData1.horizontalAlignment = GridData.FILL;
        gridData1.grabExcessHorizontalSpace = true;
        epocrootComposite.setLayoutData(gridData1);
        sdkTable = new Table(epocrootComposite, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL | SWT.SINGLE);
        sdkTable.setHeaderVisible(false);
        GridData gridData2 = new GridData();
        gridData2.horizontalAlignment = GridData.FILL;
        gridData2.grabExcessHorizontalSpace = true;
        sdkTable.setLayoutData(gridData2);
        sdkTable.setLinesVisible(false);

        createButtonComposite();

        sdkTable.addSelectionListener(new SelectionListener() {

            public void widgetDefaultSelected(SelectionEvent arg0) {
            }

            public void widgetSelected(SelectionEvent arg0) {
                propagateSdkDetail();
            }

        });
    }

    private void createButtonComposite() {
        GridLayout gridLayout = new GridLayout();
        gridLayout.numColumns = 1;
        buttonComposite = new Composite(epocrootComposite, SWT.NONE);
        buttonComposite.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false));
        buttonComposite.setLayout(gridLayout);
        addSdkButton = new Button(buttonComposite, SWT.NONE);
        addSdkButton.setText(Messages.getString("SdkChooserBase.addsdk.button")); //$NON-NLS-1$
        removeSdkButton = new Button(buttonComposite, SWT.NONE);
        removeSdkButton.setText(Messages.getString("SdkChooserBase.removesdk.button")); //$NON-NLS-1$

        GridData buttonWidthGridData = new GridData();
        buttonWidthGridData.widthHint = Math.max(addSdkButton.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).x,
                removeSdkButton.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).x);
        addSdkButton.setLayoutData(buttonWidthGridData);
        removeSdkButton.setLayoutData(buttonWidthGridData);

        addSdkButton.addSelectionListener(new SelectionListener() {

            public void widgetDefaultSelected(SelectionEvent arg0) {
            }

            public void widgetSelected(SelectionEvent arg0) {
                handleAddSdk();
            }

        });
        removeSdkButton.addSelectionListener(new SelectionListener() {

            public void widgetDefaultSelected(SelectionEvent arg0) {
            }

            public void widgetSelected(SelectionEvent arg0) {
                handleRemoveSdk();
            }

        });
        propagateSdkFromManager();
    }

    private void createSDKGroup() {
        GridLayout gridLayout = new GridLayout();
        gridLayout.numColumns = 2;
        sdkGroup = new Group(composite, SWT.NONE);
        sdkGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
        sdkGroup.setLayout(gridLayout);
        sdkGroup.setText(Messages.getString("SdkChooserBase.sdk.group")); //$NON-NLS-1$

        epocrootLabel = new Label(sdkGroup, SWT.NONE);
        epocrootLabel.setText(Messages.getString("SdkChooserBase.epocroot.label")); //$NON-NLS-1$
        directoryDataLabel = new Label(sdkGroup, SWT.WRAP);
        directoryDataLabel.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
        directoryDataLabel.setText(Messages.getString("SdkChooserBase.directorydata.label")); //$NON-NLS-1$
        osVersionLabel = new Label(sdkGroup, SWT.NONE);
        osVersionLabel.setText(Messages.getString("SdkChooserBase.osversion.label")); //$NON-NLS-1$
        osVersionDataLabel = new Label(sdkGroup, SWT.WRAP);
        osVersionDataLabel.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
        osVersionDataLabel.setText(Messages.getString("SdkChooserBase.osversiondata.label")); //$NON-NLS-1$
        platformLabel = new Label(sdkGroup, SWT.NONE);
        platformLabel.setText(Messages.getString("SdkChooserBase.platform.label")); //$NON-NLS-1$
        platformDataLabel = new Label(sdkGroup, SWT.WRAP);
        platformDataLabel.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
        platformDataLabel.setText(Messages.getString("SdkChooserBase.platformdata.label")); //$NON-NLS-1$

    }

    public void propagateSdkFromManager() {
        List<ISymbianSDK> sdkList = getSDKList();
        sdkTable.removeAll();
        for (ISymbianSDK sdk : sdkList) {
            TableItem item = new TableItem(sdkTable, SWT.NONE);
            item.setText(sdk.getUniqueId());
            item.setData(sdk);
        }
        if (sdkList.size() == 1) {
            sdkTable.select(0);
        }
    }

    public void propagateSdkDetail() {
        TableItem[] items = sdkTable.getSelection();
        if (items.length > 0) {
            ISymbianSDK sdk = (ISymbianSDK) items[0].getData();
            if (sdk != null) {
                directoryDataLabel.setText(sdk.getEPOCROOT());
                osVersionDataLabel.setText(sdk.getOSVersion().toString());

                // separate too long lines 
                String platforms = ""; //$NON-NLS-1$
                final int maxLineLength = 80;
                int count = 1;
                for (String platform : sdk.getAvailablePlatforms()) {
                    platforms += platform;
                    platforms += ", "; //$NON-NLS-1$
                    if ((platforms.length() / maxLineLength) == count) {
                        platforms += "\n"; //$NON-NLS-1$
                        count++;
                    }
                }
                int index = platforms.lastIndexOf(","); //$NON-NLS-1$
                if (index != -1) {
                    platforms = platforms.substring(0, index);
                } else {
                    platforms = "-";
                }
                platformDataLabel.setText(platforms);
            }
        } else {
            directoryDataLabel.setText(Messages.getString("SdkChooserBase.directorydata.label")); //$NON-NLS-1$
            osVersionDataLabel.setText(Messages.getString("SdkChooserBase.osversiondata.label")); //$NON-NLS-1$
            platformDataLabel.setText(Messages.getString("SdkChooserBase.platformdata.label2")); //$NON-NLS-1$
        }
    }

    private void handleAddSdk() {
        AddSDKDialog dialog = new AddSDKDialog(composite.getShell());
        if (dialog.open() == AddSDKDialog.OK) {
            getSDKManager().updateCarbideSDKCache();
            propagateSdkFromManager();
        }
    }

    private void handleRemoveSdk() {
        TableItem[] items = sdkTable.getSelection();
        if (items.length > 0) {
            ISymbianSDK sdk = (ISymbianSDK) items[0].getData();
            if (sdk != null) {
                if (MessageDialog.openConfirm(composite.getShell(),
                        Messages.getString("SdkChooserBase.confirm.delete") + sdk.getUniqueId(), //$NON-NLS-1$
                        Messages.getString("SdkChooserBase.confirm.message"))) { //$NON-NLS-1$
                    if (getSDKManager().removeSDK(sdk.getUniqueId())) {
                        getSDKList().remove(sdk);
                        getSDKManager().updateCarbideSDKCache();
                        propagateSdkFromManager();
                    }
                }
            }
        }
    }

    public List<ISymbianSDK> getSDKList() {
        return SDKCorePlugin.getSDKManager().getSDKList();
    }

    public ISDKManager getSDKManager() {
        return SDKCorePlugin.getSDKManager();
    }

    public ISymbianSDK getSelectedSdk() {
        TableItem[] items = sdkTable.getSelection();
        if (items.length > 0) {
            return ((ISymbianSDK) items[0].getData());
        }
        return null;
    }

    public void setSelectedSdk(ISymbianSDK romSdk) {
        TableItem[] items = sdkTable.getItems();
        sdkTable.deselectAll();
        for (int i = 0; i < items.length; i++) {
            if ((ISymbianSDK) items[i].getData() == romSdk) {
                sdkTable.select(i);
            }
        }
        propagateSdkDetail();
    }
}