com.nokia.s60tools.ui.dialogs.S60ToolsListBoxDialog.java Source code

Java tutorial

Introduction

Here is the source code for com.nokia.s60tools.ui.dialogs.S60ToolsListBoxDialog.java

Source

/*
* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies). 
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "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.s60tools.ui.dialogs;

import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.swt.SWT;
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.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.PlatformUI;

import com.nokia.s60tools.ui.S60ToolsUIConstants;

/**
 * Implements a list box dialog with read-only text content.
 * The dialog can be parameterized with title, resizable property,
 * scroll bar owning property, and with size attributes. 
 * Dialog has just OK button which closes the dialog.<br>
 *
 * Usage example:
 *
 * <code>
 * <pre>
 * 
 * // Parent shell
 * Shell sh = Display.getCurrent().getActiveShell()
 * 
 * String dialogTitle = "Product Name";
 * String listBoxContent = "My List Box Content String";
 * 
 * S60ToolsListBoxDialog dlg = new S60ToolsListBoxDialog(sh, 
 *                                                       dialogTitle, 
 *                                                       listBoxContent, 
 *                                                       false, // not resizable
 *                                                       true, // no vertical scroll bar
 *                                                       true,  // has horizontal scroll bar
 *                                                       300,    // default width
 *                                                       250    // default height
 *                                                       );
 * dlg.create();
 * dlg.open();         
 *  
 * </pre> 
 * </code>
 * 
 * It is also possible to enhance the dialog with Cancel button and
 * with optional message for the contents shown in the list box.
 * 
 * <code>
 * <pre>
 *       
 * // Parent shell
 * Shell sh = Display.getCurrent().getActiveShell()
 * 
 * String dialogTitle = "Product Name";
 * String listBoxContent = "My List Box Content String";
 * String confirmMsg = "Do you want to really perform this operation?";
 * 
 * S60ToolsListBoxDialog dlg = new S60ToolsListBoxDialog(sh, 
 *                                                       dialogTitle, 
 *                                                       listBoxContent, 
 *                                                       false, // not resizable
 *                                                       true,  // no vertical scroll bar
 *                                                       true,  // has horizontal scroll bar
 *                                                       300,   // default width
 *                                                       250    // default height
 *                                              true,    //Creating Cancel button
 *                                                       confirmMsg // message show above text box
 *                );       
 *      dlg.create();
 *      int userAnswer = dlg.open();
 *      if(userAnswer == Dialog.OK){
 *         // Performing queried operation only, if user selected OK
 *          ...
 *         }               
 *      }
 *
 * </pre> 
 * </code>
 * 
 * @see org.eclipse.jface.dialogs.Dialog
 */
public class S60ToolsListBoxDialog extends Dialog {

    /**
     * List box dialog title.
     */
    private final String dialogTitle;

    /**
     * List box dialog content.
     */
    private final String listBoxContentString;

    /**
     * List box dialog text control for showing the content.
     */
    private Text listBoxContentTextControl;

    /**
     * Owning of vertical scroll bar.
     */
    private final boolean hasVerticalScrollBar;

    /**
     * Owning of horizontal scroll bar.
     */
    private final boolean hasHorizontalScrollBar;

    /**
     * Preferred width.
     */
    private final int widthHint;

    /**
     * Preferred height.
     */
    private final int heightHint;

    /**
     * Default style for the list box dialog 
     */
    private static final int DEFAULT_STYLE = SWT.MULTI | SWT.READ_ONLY | SWT.BORDER;

    /**
     * This is set to <code>true</code> if the dialog has a Cancel button, 
     * otherwise set to <code>false</code>.
     */
    private final boolean hasCancelButton;

    /**
     * This stores optional text that can be shown 
     * on top of the text box control.
     */
    private final String optionalTextAboveListBox;

    /**
     * This is the UI control for showing <code>optionalTextAboveListBox</code>.
     */
    private Label labelControlAboveListBox;

    /**
     * ID for context sensitive-help, <code>null</code> means not used/supported by default.
     */
    private String contextHelpID = null;

    /**
     * Constructor, with OK button only and with no extra Label.
     * @param parentShell Parent shell.
     * @param dialogTitle Dialog title.
     * @param listBoxContent Content to be showed in the dialog.
     * @param isResizable If <code>true</code>, dialog will be resizable.
     * @param hasVerticalScrollBar If <code>true</code>, dialog will have vertical scroll bar.
     * @param hasHorizontalScrollBar If <code>true</code>, dialog will have horizontal scroll bar.
     * @param widthHint   Preferred width for the dialog.
     * @param heightHint Preferred height for the dialog.
     */
    public S60ToolsListBoxDialog(Shell parentShell, String dialogTitle, String listBoxContent, boolean isResizable,
            boolean hasVerticalScrollBar, boolean hasHorizontalScrollBar, int widthHint, int heightHint) {

        this(parentShell, dialogTitle, listBoxContent, isResizable, hasVerticalScrollBar, hasHorizontalScrollBar,
                widthHint, heightHint, false, null);
    }

    /**
     * Constructor, with support for Cancel button, extra label 
     * but not context-sensitive help ID.
     * @param parentShell Parent shell.
     * @param dialogTitle Dialog title.
     * @param listBoxContent Content to be showed in the dialog.
     * @param isResizable If <code>true</code>, dialog will be resizable.
     * @param hasVerticalScrollBar If <code>true</code>, dialog will have vertical scroll bar.
     * @param hasHorizontalScrollBar If <code>true</code>, dialog will have horizontal scroll bar.
     * @param widthHint   Preferred width for the dialog.
     * @param heightHint Preferred height for the dialog.
     * @param hasCancelButton If <code>true</code>, dialog will have also Cancel button.
     * @param optionalTextAboveListBox If not <code>null</code>, dialog will have also a label above the list box.
     */
    public S60ToolsListBoxDialog(Shell parentShell, String dialogTitle, String listBoxContent, boolean isResizable,
            boolean hasVerticalScrollBar, boolean hasHorizontalScrollBar, int widthHint, int heightHint,
            boolean hasCancelButton, String optionalTextAboveListBox) {

        this(parentShell, dialogTitle, listBoxContent, isResizable, hasVerticalScrollBar, hasHorizontalScrollBar,
                widthHint, heightHint, hasCancelButton, optionalTextAboveListBox, null);
    }

    /**
     * Constructor, with support for Cancel button, extra label 
     * and context-sensitive help ID.
     * @param parentShell Parent shell.
     * @param dialogTitle Dialog title.
     * @param listBoxContent Content to be showed in the dialog.
     * @param isResizable If <code>true</code>, dialog will be resizable.
     * @param hasVerticalScrollBar If <code>true</code>, dialog will have vertical scroll bar.
     * @param hasHorizontalScrollBar If <code>true</code>, dialog will have horizontal scroll bar.
     * @param widthHint   Preferred width for the dialog.
     * @param heightHint Preferred height for the dialog.
     * @param hasCancelButton If <code>true</code>, dialog will have also Cancel button.
     * @param optionalTextAboveListBox If not <code>null</code>, dialog will have also a label above the list box.
     * @param contextHelpID ID for context sensitive-help, <code>null</code> means not used.
     */
    public S60ToolsListBoxDialog(Shell parentShell, String dialogTitle, String listBoxContent, boolean isResizable,
            boolean hasVerticalScrollBar, boolean hasHorizontalScrollBar, int widthHint, int heightHint,
            boolean hasCancelButton, String optionalTextAboveListBox, String contextHelpID) {

        super(parentShell);
        if (isResizable) {
            setShellStyle(getShellStyle() | SWT.RESIZE);
        }
        this.dialogTitle = dialogTitle;
        this.listBoxContentString = listBoxContent;
        this.hasVerticalScrollBar = hasVerticalScrollBar;
        this.hasHorizontalScrollBar = hasHorizontalScrollBar;
        this.widthHint = widthHint;
        this.heightHint = heightHint;

        this.hasCancelButton = hasCancelButton;
        this.optionalTextAboveListBox = optionalTextAboveListBox;
        this.contextHelpID = contextHelpID;
    }

    /* (non-Javadoc)
     * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
     */
    protected Control createDialogArea(Composite parent) {

        //If label is set, showing it
        if (optionalTextAboveListBox != null) {
            Composite container = new Composite(parent, SWT.NO_FOCUS);
            labelControlAboveListBox = new Label(container, SWT.LEFT);
            container.setLayout(new GridLayout(1, false));
            labelControlAboveListBox.setText(optionalTextAboveListBox);
        }

        Composite dialogAreaComposite = (Composite) super.createDialogArea(parent);

        //
        //Adding custom controls
        //
        final int cols = 1;
        GridLayout gdl = new GridLayout(cols, false);
        GridData gd = new GridData(GridData.FILL_BOTH);
        gd.widthHint = widthHint;
        gd.heightHint = heightHint;
        dialogAreaComposite.setLayout(gdl);
        dialogAreaComposite.setLayoutData(gd);

        int style = DEFAULT_STYLE;

        if (hasHorizontalScrollBar) {
            style = style | SWT.H_SCROLL;
        }

        if (hasVerticalScrollBar) {
            style = style | SWT.V_SCROLL;
        }

        GridLayout gdl2 = new GridLayout(cols, false);
        GridData gd2 = new GridData(GridData.FILL_BOTH);
        final int margins = 2 * S60ToolsUIConstants.MARGIN_BTW_FRAME_AND_CONTENTS;
        gd2.widthHint = widthHint - margins;
        gd2.heightHint = heightHint - margins;

        dialogAreaComposite.setLayoutData(gd2);

        listBoxContentTextControl = new Text(dialogAreaComposite, style);
        listBoxContentTextControl.setText(listBoxContentString);
        dialogAreaComposite.setLayout(gdl2);
        listBoxContentTextControl.setLayoutData(gd2);

        // Optionally adding context-sensitive help support
        if (contextHelpID != null) {
            PlatformUI.getWorkbench().getHelpSystem().setHelp(listBoxContentTextControl, contextHelpID);
        }

        return dialogAreaComposite;
    }

    /* (non-Javadoc)
     * @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell)
     */
    protected void configureShell(Shell shell) {
        super.configureShell(shell);
        if (dialogTitle != null)
            shell.setText(dialogTitle);
    }

    /* (non-Javadoc)
     * @see org.eclipse.jface.dialogs.Dialog#createButtonsForButtonBar(org.eclipse.swt.widgets.Composite)
     */
    protected void createButtonsForButtonBar(Composite parent) {
        // Creating OK button
        Button okButton = createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true);
        // Optionally adding context-sensitive help support
        if (contextHelpID != null) {
            PlatformUI.getWorkbench().getHelpSystem().setHelp(okButton, contextHelpID);
        }
        //if cancel button also required
        if (hasCancelButton) {
            Button cancelButton = createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL,
                    true);
            // Optionally adding context-sensitive help support
            if (contextHelpID != null) {
                PlatformUI.getWorkbench().getHelpSystem().setHelp(cancelButton, contextHelpID);
            }
        }
    }

}