1 /*******************************************************************************
2 * Copyright (c) 2012 Ericsson
4 * All rights reserved. This program and the accompanying materials are
5 * made available under the terms of the Eclipse Public License v1.0 which
6 * accompanies this distribution, and is available at
7 * http://www.eclipse.org/legal/epl-v10.html
10 * Patrick Tasse - Initial API and implementation
11 *******************************************************************************/
13 package org
.eclipse
.linuxtools
.internal
.tmf
.ui
.dialogs
;
15 import org
.eclipse
.jface
.dialogs
.IDialogConstants
;
16 import org
.eclipse
.jface
.dialogs
.IInputValidator
;
17 import org
.eclipse
.jface
.dialogs
.InputDialog
;
18 import org
.eclipse
.swt
.SWT
;
19 import org
.eclipse
.swt
.events
.KeyAdapter
;
20 import org
.eclipse
.swt
.events
.KeyEvent
;
21 import org
.eclipse
.swt
.events
.MouseAdapter
;
22 import org
.eclipse
.swt
.events
.MouseEvent
;
23 import org
.eclipse
.swt
.graphics
.Point
;
24 import org
.eclipse
.swt
.graphics
.Rectangle
;
25 import org
.eclipse
.swt
.layout
.GridData
;
26 import org
.eclipse
.swt
.widgets
.Composite
;
27 import org
.eclipse
.swt
.widgets
.Control
;
28 import org
.eclipse
.swt
.widgets
.Label
;
29 import org
.eclipse
.swt
.widgets
.Shell
;
30 import org
.eclipse
.swt
.widgets
.Text
;
33 * A simple input dialog for soliciting an input string from the user.
35 * Overrides InputDialog to support multiple line text input.
37 * @author Patrick Tasse
40 public class MultiLineInputDialog
extends InputDialog
{
42 private final String dialogMessage
;
44 /* flag to indicate if CR can be used to submit the dialog */
45 private boolean submitOnCR
= true;
48 * Creates a multi line input dialog.
51 * the parent shell, or <code>null</code> to create a top-level shell
53 * the dialog title, or <code>null</code> if none
54 * @param dialogMessage
55 * the dialog message, or <code>null</code> if none
57 * the initial input value, or <code>null</code> if none (equivalent to the empty string)
59 * an input validator, or <code>null</code> if none
61 public MultiLineInputDialog(Shell parentShell
, String dialogTitle
,
62 String dialogMessage
, String initialValue
, IInputValidator validator
) {
63 super(parentShell
, dialogTitle
, null, initialValue
, validator
);
64 this.dialogMessage
= dialogMessage
;
68 * Creates a multi line input dialog with a not-empty text validator.
71 * the parent shell, or <code>null</code> to create a top-level shell
73 * the dialog title, or <code>null</code> if none
74 * @param dialogMessage
75 * the dialog message, or <code>null</code> if none
77 * the initial input value, or <code>null</code> if none (equivalent to the empty string)
79 public MultiLineInputDialog(Shell parentShell
, String dialogTitle
,
80 String dialogMessage
, String initialValue
) {
81 super(parentShell
, dialogTitle
, null, initialValue
, new NotEmptyValidator());
82 this.dialogMessage
= dialogMessage
;
86 * @see org.eclipse.jface.dialogs.InputDialog#createDialogArea(org.eclipse.swt.widgets.Composite)
89 protected Control
createDialogArea(Composite parent
) {
90 Composite composite
= (Composite
) super.createDialogArea(parent
);
91 final Text text
= getText();
93 /* create dialog message label here instead because default implementation uses GRAB_VERTICAL */
94 if (dialogMessage
!= null) {
95 Label label
= new Label(composite
, SWT
.WRAP
);
96 label
.setText(dialogMessage
);
97 GridData data
= new GridData(GridData
.GRAB_HORIZONTAL
| GridData
.HORIZONTAL_ALIGN_FILL
98 | GridData
.VERTICAL_ALIGN_CENTER
);
99 data
.widthHint
= convertHorizontalDLUsToPixels(IDialogConstants
.MINIMUM_MESSAGE_AREA_WIDTH
);
100 label
.setLayoutData(data
);
101 label
.setFont(parent
.getFont());
102 label
.moveAbove(text
);
105 /* modify text layout data here because default implementation doesn't fill vertically */
106 GridData gridData
= new GridData(GridData
.FILL_BOTH
);
107 gridData
.widthHint
= convertHorizontalDLUsToPixels(250);
108 gridData
.heightHint
= convertHeightInCharsToPixels(3);
109 text
.setLayoutData(gridData
);
111 text
.addKeyListener(new KeyAdapter() {
113 public void keyPressed(KeyEvent e
) {
114 if (e
.character
== SWT
.CR
) {
116 /* submit the dialog */
121 } else if (e
.character
== SWT
.TAB
) {
122 /* don't insert a tab character in the text */
124 text
.traverse(SWT
.TRAVERSE_TAB_NEXT
);
126 /* don't allow CR to submit anymore */
131 text
.addMouseListener(new MouseAdapter() {
133 public void mouseDown(MouseEvent e
) {
134 /* don't allow CR to submit anymore */
143 * @see org.eclipse.jface.dialogs.Dialog#createContents(org.eclipse.swt.widgets.Composite)
146 protected Control
createContents(Composite parent
) {
147 Control control
= super.createContents(parent
);
149 /* set the shell minimum size */
150 Point clientArea
= control
.computeSize(SWT
.DEFAULT
, SWT
.DEFAULT
);
151 Rectangle trim
= getShell().computeTrim(0, 0, clientArea
.x
, clientArea
.y
);
152 getShell().setMinimumSize(trim
.width
, trim
.height
);
158 * @see org.eclipse.jface.dialogs.InputDialog#getInputTextStyle()
161 protected int getInputTextStyle() {
162 return SWT
.MULTI
| SWT
.WRAP
| SWT
.V_SCROLL
| SWT
.BORDER
;
166 * @see org.eclipse.jface.dialogs.Dialog#isResizable()
169 protected boolean isResizable() {
173 private static class NotEmptyValidator
implements IInputValidator
{
175 public String
isValid(String newText
) {
176 return (newText
== null || newText
.trim().length() == 0) ?
" " : null; //$NON-NLS-1$