1765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye/*******************************************************************************
2765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * Copyright (c) 2011 Google, Inc.
3765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * All rights reserved. This program and the accompanying materials
4765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * are made available under the terms of the Eclipse Public License v1.0
5765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * which accompanies this distribution, and is available at
6765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * http://www.eclipse.org/legal/epl-v10.html
7765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye *
8765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * Contributors:
9765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye *    Google, Inc. - initial API and implementation
10765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye *******************************************************************************/
11765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyepackage org.eclipse.wb.internal.core.model.property.editor.string;
12765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye
13765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyeimport org.eclipse.jface.dialogs.Dialog;
14765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyeimport org.eclipse.swt.SWT;
15765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyeimport org.eclipse.swt.events.KeyAdapter;
16765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyeimport org.eclipse.swt.events.KeyEvent;
17765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyeimport org.eclipse.swt.widgets.Composite;
18765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyeimport org.eclipse.swt.widgets.Control;
19765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyeimport org.eclipse.swt.widgets.Shell;
20765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyeimport org.eclipse.swt.widgets.Text;
21765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyeimport org.eclipse.wb.internal.core.DesignerPlugin;
22765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyeimport org.eclipse.wb.internal.core.model.ModelMessages;
23765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyeimport org.eclipse.wb.internal.core.model.property.Property;
24765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyeimport org.eclipse.wb.internal.core.utils.execution.ExecutionUtils;
25765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyeimport org.eclipse.wb.internal.core.utils.execution.RunnableEx;
26765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyeimport org.eclipse.wb.internal.core.utils.ui.GridDataFactory;
27765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyeimport org.eclipse.wb.internal.core.utils.ui.dialogs.ResizableDialog;
28765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye
29765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye/**
30765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * {@link Dialog} for editing value in {@link StringPropertyEditor}.
31765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye *
32765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * @author scheglov_ke
33765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * @coverage core.model.property.editor
34765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye */
35765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyepublic class StringPropertyDialog extends ResizableDialog {
36765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    // NOTE: In WindowBuilder this class had a lot of support for
37765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    // editing Java strings, dealing with automatic localization
38765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    // etc. This will need to be done differently in ADT (and had hooks
39765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    // into a bunch of other parts of WindowBuilder we're not including)
40765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    // so this was all stripped down to a plain String editor.
41765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye
42765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  ////////////////////////////////////////////////////////////////////////////
43765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  //
44765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  // Final fields
45765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  //
46765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  ////////////////////////////////////////////////////////////////////////////
47765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  private final Property m_property;
48765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye
49765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  ////////////////////////////////////////////////////////////////////////////
50765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  //
51765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  // Constructor
52765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  //
53765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  ////////////////////////////////////////////////////////////////////////////
54765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  public StringPropertyDialog(Shell parentShell, Property property) throws Exception {
55765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    super(parentShell, DesignerPlugin.getDefault());
56765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    m_property = property;
57765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  }
58765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye
59765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  ////////////////////////////////////////////////////////////////////////////
60765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  //
61765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  // GUI
62765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  //
63765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  ////////////////////////////////////////////////////////////////////////////
64765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  private Text m_valueText;
65765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye
66765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  @Override
67765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  public void create() {
68765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    super.create();
69765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    m_valueText.selectAll();
70765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  }
71765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye
72765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  @Override
73765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  protected Control createDialogArea(Composite parent) {
74765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    Composite area = (Composite) super.createDialogArea(parent);
75765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    // value
76765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    {
77765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye      // BEGIN ADT MODIFICATIONS
78765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye      if (isMultiLine()) {
79765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye      // END ADT MODIFICATIONS
80765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye        m_valueText = new Text(area, SWT.BORDER | SWT.MULTI | SWT.WRAP);
81765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye        GridDataFactory.create(m_valueText).grab().hintC(80, 8).fill();
82765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye      // BEGIN ADT MODIFICATIONS
83765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye      } else {
84765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye        m_valueText = new Text(area, SWT.BORDER | SWT.SINGLE);
85765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye        GridDataFactory.create(m_valueText).grab().hintC(50, 1).fill();
86765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye      }
87765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye      // END ADT MODIFICATIONS
88765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye      // initial value
89765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye      ExecutionUtils.runLog(new RunnableEx() {
90765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye        @Override
91765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye        public void run() throws Exception {
92765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye          Object value = m_property.getValue();
93765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye          if (value instanceof String) {
94765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye            m_valueText.setText((String) value);
95765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye          }
96765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye        }
97765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye      });
98765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye      // handle Ctrl+Enter as OK
99765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye      m_valueText.addKeyListener(new KeyAdapter() {
100765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye        @Override
101765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye        public void keyPressed(KeyEvent e) {
102765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye          if (e.stateMask == SWT.CTRL && e.keyCode == SWT.CR) {
103765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye            okPressed();
104765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye          }
105765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye        }
106765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye      });
107765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    }
108765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye
109765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    return area;
110765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  }
111765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye
112765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  // BEGIN ADT MODIFICATIONS
113765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  protected boolean isMultiLine() {
114765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye      return true;
115765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  }
116765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  // END ADT MODIFICATIONS
117765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye
118765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  ////////////////////////////////////////////////////////////////////////////
119765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  //
120765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  // Shell
121765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  //
122765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  ////////////////////////////////////////////////////////////////////////////
123765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  @Override
124765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  protected void configureShell(Shell newShell) {
125765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    super.configureShell(newShell);
126765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    newShell.setText(ModelMessages.StringPropertyDialog_title);
127765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  }
128765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye
129765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  @Override
130765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  protected void okPressed() {
131765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    final String value = m_valueText.getText();
132765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    ExecutionUtils.runLog(new RunnableEx() {
133765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye        @Override
134765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye        public void run() throws Exception {
135765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye          m_property.setValue(value);
136765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye        }
137765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    });
138765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    // close dialog
139765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    super.okPressed();
140765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  }
141765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye}
142