1 /*******************************************************************************
2 * Copyright (c) 2012, 2013 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 Tassé
39 public class MultiLineInputDialog
extends InputDialog
{
41 private final String dialogMessage
;
43 /* flag to indicate if CR can be used to submit the dialog */
44 private boolean submitOnCR
= true;
47 * Creates a multi line input dialog.
50 * the parent shell, or <code>null</code> to create a top-level shell
52 * the dialog title, or <code>null</code> if none
53 * @param dialogMessage
54 * the dialog message, or <code>null</code> if none
56 * the initial input value, or <code>null</code> if none (equivalent to the empty string)
58 * an input validator, or <code>null</code> if none
60 public MultiLineInputDialog(Shell parentShell
, String dialogTitle
,
61 String dialogMessage
, String initialValue
, IInputValidator validator
) {
62 super(parentShell
, dialogTitle
, null, initialValue
, validator
);
63 this.dialogMessage
= dialogMessage
;
67 * Creates a multi line input dialog with a not-empty text validator.
70 * the parent shell, or <code>null</code> to create a top-level shell
72 * the dialog title, or <code>null</code> if none
73 * @param dialogMessage
74 * the dialog message, or <code>null</code> if none
76 * the initial input value, or <code>null</code> if none (equivalent to the empty string)
78 public MultiLineInputDialog(Shell parentShell
, String dialogTitle
,
79 String dialogMessage
, String initialValue
) {
80 super(parentShell
, dialogTitle
, null, initialValue
, new NotEmptyValidator());
81 this.dialogMessage
= dialogMessage
;
85 protected Control
createDialogArea(Composite parent
) {
86 Composite composite
= (Composite
) super.createDialogArea(parent
);
87 final Text text
= getText();
89 /* create dialog message label here instead because default implementation uses GRAB_VERTICAL */
90 if (dialogMessage
!= null) {
91 Label label
= new Label(composite
, SWT
.WRAP
);
92 label
.setText(dialogMessage
);
93 GridData data
= new GridData(GridData
.GRAB_HORIZONTAL
| GridData
.HORIZONTAL_ALIGN_FILL
94 | GridData
.VERTICAL_ALIGN_CENTER
);
95 data
.widthHint
= convertHorizontalDLUsToPixels(IDialogConstants
.MINIMUM_MESSAGE_AREA_WIDTH
);
96 label
.setLayoutData(data
);
97 label
.setFont(parent
.getFont());
98 label
.moveAbove(text
);
101 /* modify text layout data here because default implementation doesn't fill vertically */
102 GridData gridData
= new GridData(GridData
.FILL_BOTH
);
103 gridData
.widthHint
= convertHorizontalDLUsToPixels(250);
104 gridData
.heightHint
= convertHeightInCharsToPixels(3);
105 text
.setLayoutData(gridData
);
107 text
.addKeyListener(new KeyAdapter() {
109 public void keyPressed(KeyEvent e
) {
110 if (e
.character
== SWT
.CR
) {
112 /* submit the dialog */
117 } else if (e
.character
== SWT
.TAB
) {
118 /* don't insert a tab character in the text */
120 text
.traverse(SWT
.TRAVERSE_TAB_NEXT
);
122 /* don't allow CR to submit anymore */
127 text
.addMouseListener(new MouseAdapter() {
129 public void mouseDown(MouseEvent e
) {
130 /* don't allow CR to submit anymore */
139 protected Control
createContents(Composite parent
) {
140 Control control
= super.createContents(parent
);
142 /* set the shell minimum size */
143 Point clientArea
= control
.computeSize(SWT
.DEFAULT
, SWT
.DEFAULT
);
144 Rectangle trim
= getShell().computeTrim(0, 0, clientArea
.x
, clientArea
.y
);
145 getShell().setMinimumSize(trim
.width
, trim
.height
);
151 protected int getInputTextStyle() {
152 return SWT
.MULTI
| SWT
.WRAP
| SWT
.V_SCROLL
| SWT
.BORDER
;
156 protected boolean isResizable() {
160 private static class NotEmptyValidator
implements IInputValidator
{
162 public String
isValid(String newText
) {
163 return (newText
== null || newText
.trim().length() == 0) ?
" " : null; //$NON-NLS-1$