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