/******************************************************************************* * Copyright (C) 2003-2008, 2013, Guillaume Brocker * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Guillaume Brocker - Initial API and implementation * ******************************************************************************/ package eclox.ui.editor.editors; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.forms.widgets.FormToolkit; /** * Implements a simple setting editor. * * @author gbrocker */ public class TextEditor extends SettingEditor { /** * Defines a modify listener class. */ private class TextModifyListener implements ModifyListener { /** * Tells if the listener should sleep (ignore notifications). */ public boolean sleeping = true; public void modifyText(ModifyEvent e) { if(sleeping == false) { hasChanged = true; fireEditorChanged(); commit(); } } }; /** * The text widget. */ protected Text text; /** * The current modification listener of the text control */ private TextModifyListener textModifyListener = new TextModifyListener(); /** * Remerbers if the text has changed. */ private boolean hasChanged = false; /** * @see eclox.ui.editor.editors.IEditor#commit() */ public void commit() { if( hasInput() ) { getInput().setValue( text.getText() ); hasChanged = false; fireEditorChanged(); } } /** * @see eclox.ui.editor.editors.IEditor#createContent(org.eclipse.swt.widgets.Composite, org.eclipse.ui.forms.widgets.FormToolkit) */ public void createContent( Composite parent, FormToolkit formToolkit ) { // Activates border painting. formToolkit.paintBordersFor( parent ); // Prepere the parent's layout. GridLayout layout = new GridLayout(); layout.marginTop = 0; layout.marginLeft = 0; layout.marginBottom = 0; layout.marginRight = 0; layout.marginHeight = 2; layout.marginWidth = 1; layout.horizontalSpacing = 5; parent.setLayout( layout ); // Creates the text widget. text = formToolkit.createText(parent, new String()); text.setLayoutData( new GridData(GridData.FILL_HORIZONTAL|GridData.VERTICAL_ALIGN_CENTER) ); text.addModifyListener( textModifyListener ); } /** * @see eclox.ui.editor.editors.IEditor#grabVerticalSpace() */ public boolean grabVerticalSpace() { return false; } /** * @see eclox.ui.editor.editors.IEditor#dispose() */ public void dispose() { text.dispose(); } /** * @see eclox.ui.editor.editors.IEditor#isDirty() */ public boolean isDirty() { return hasChanged; } /** * @see eclox.ui.editor.editors.IEditor#isStale() */ public boolean isStale() { boolean result = false; if( hasInput() ) { result = text.getText().equals( getInput().getValue() ) == false; } return result; } /** * @see eclox.ui.editor.editors.IEditor#refresh() */ public void refresh() { if( hasInput() ) { textModifyListener.sleeping = true; text.setText( getInput().getValue() ); hasChanged = false; textModifyListener.sleeping = false; fireEditorChanged(); } } /** * @see eclox.ui.editor.editors.IEditor#setEnabled(boolean) */ public void setEnabled(boolean enabled) { // pre-condition assert text != null; text.setEnabled(enabled); } /** * @see eclox.ui.editor.editors.IEditor#setFocus() */ public void setFocus() { text.selectAll(); text.setFocus(); } /** * @see eclox.ui.editor.editors.SettingEditor#setInput(eclox.core.doxyfiles.Setting) */ // public void setInput(Setting input) { // super.setInput(input); // // if( hasInput() ) { // textModifyListener.sleeping = true; // text.setText(input.getValue()); // textModifyListener.sleeping = false; // hasChanged = false; // } // } }