You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by pa...@apache.org on 2012/10/12 10:00:24 UTC
svn commit: r1397462 -
/directory/studio/trunk/plugins/valueeditors/src/main/java/org/apache/directory/studio/valueeditors/integer/IntegerDialog.java
Author: pamarcelot
Date: Fri Oct 12 08:00:23 2012
New Revision: 1397462
URL: http://svn.apache.org/viewvc?rev=1397462&view=rev
Log:
Fix for DIRSTUDIO-823 (Integer Value Editor only selects values of Java Integer magnitude).
Modified:
directory/studio/trunk/plugins/valueeditors/src/main/java/org/apache/directory/studio/valueeditors/integer/IntegerDialog.java
Modified: directory/studio/trunk/plugins/valueeditors/src/main/java/org/apache/directory/studio/valueeditors/integer/IntegerDialog.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/plugins/valueeditors/src/main/java/org/apache/directory/studio/valueeditors/integer/IntegerDialog.java?rev=1397462&r1=1397461&r2=1397462&view=diff
==============================================================================
--- directory/studio/trunk/plugins/valueeditors/src/main/java/org/apache/directory/studio/valueeditors/integer/IntegerDialog.java (original)
+++ directory/studio/trunk/plugins/valueeditors/src/main/java/org/apache/directory/studio/valueeditors/integer/IntegerDialog.java Fri Oct 12 08:00:23 2012
@@ -21,17 +21,29 @@
package org.apache.directory.studio.valueeditors.integer;
+import java.math.BigDecimal;
+
import org.apache.directory.studio.valueeditors.ValueEditorsActivator;
import org.apache.directory.studio.valueeditors.ValueEditorsConstants;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.KeyAdapter;
+import org.eclipse.swt.events.KeyEvent;
+import org.eclipse.swt.events.KeyListener;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.VerifyEvent;
+import org.eclipse.swt.events.VerifyListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Spinner;
+import org.eclipse.swt.widgets.Text;
/**
@@ -41,15 +53,14 @@ import org.eclipse.swt.widgets.Spinner;
*/
public class IntegerDialog extends Dialog
{
+ /** The initial value */
+ private BigDecimal initialValue;
- /** The initial value. */
- private int initialValue;
-
- /** The return value. */
- private int returnValue;
+ /** The value */
+ private BigDecimal value;
- /** The spinner to select an integer */
- private Spinner spinner = null;
+ /** The text */
+ private Text text;
/**
@@ -58,12 +69,12 @@ public class IntegerDialog extends Dialo
* @param parentShell the parent shell
* @param initialValue the initial value
*/
- public IntegerDialog( Shell parentShell, int initialValue )
+ public IntegerDialog( Shell parentShell, BigDecimal initialValue )
{
super( parentShell );
super.setShellStyle( super.getShellStyle() | SWT.RESIZE );
this.initialValue = initialValue;
- this.returnValue = -1;
+ this.value = new BigDecimal( initialValue.toString() );
}
@@ -93,7 +104,7 @@ public class IntegerDialog extends Dialo
*/
protected void okPressed()
{
- returnValue = spinner.getSelection();
+ // returnValue = spinner.getSelection();
super.okPressed();
}
@@ -103,20 +114,89 @@ public class IntegerDialog extends Dialo
*/
protected Control createDialogArea( Composite parent )
{
- // create composite
+ // Composite
Composite composite = ( Composite ) super.createDialogArea( parent );
- composite.setLayout( new GridLayout() );
+ composite.setLayout( new GridLayout( 3, false ) );
GridData gd = new GridData( GridData.FILL_BOTH );
composite.setLayoutData( gd );
- spinner = new Spinner( composite, SWT.BORDER );
- spinner.setMinimum( Integer.MIN_VALUE );
- spinner.setMaximum( Integer.MAX_VALUE );
- spinner.setDigits( 0 );
- spinner.setIncrement( 1 );
- spinner.setPageIncrement( 100 );
- spinner.setSelection( initialValue );
- spinner.setLayoutData( new GridData( GridData.FILL_HORIZONTAL ) );
+ // - Button
+ Button minusButton = new Button( composite, SWT.PUSH );
+ minusButton.setText( "-" );
+ minusButton.addSelectionListener( new SelectionAdapter()
+ {
+ public void widgetSelected( SelectionEvent e )
+ {
+ addToValue( -1 );
+ text.selectAll();
+ }
+ } );
+
+ // Text
+ text = new Text( composite, SWT.BORDER );
+ text.setLayoutData( new GridData( GridData.FILL_HORIZONTAL ) );
+ text.addModifyListener( new ModifyListener()
+ {
+ public void modifyText( ModifyEvent e )
+ {
+ updateValueFromText();
+ }
+ } );
+ text.addVerifyListener( new VerifyListener()
+ {
+ public void verifyText( VerifyEvent e )
+ {
+ // Prevent the user from entering anything but an integer
+ if ( !e.text.matches( "(-)?([0-9])*" ) ) //$NON-NLS-1$
+ {
+ e.doit = false;
+ }
+ }
+ } );
+ text.addKeyListener( new KeyAdapter()
+ {
+ public void keyPressed( KeyEvent e )
+ {
+ if ( e.keyCode == SWT.ARROW_UP )
+ {
+ addToValue( 1 );
+ e.doit = false;
+ text.selectAll();
+ }
+ else if ( e.keyCode == SWT.ARROW_DOWN )
+ {
+ addToValue( -1 );
+ e.doit = false;
+ text.selectAll();
+ }
+ else if ( e.keyCode == SWT.PAGE_UP )
+ {
+ addToValue( 100 );
+ e.doit = false;
+ text.selectAll();
+ }
+ else if ( e.keyCode == SWT.PAGE_DOWN )
+ {
+ addToValue( -100 );
+ e.doit = false;
+ text.selectAll();
+ }
+ }
+ } );
+
+ // + Button
+ Button plusButton = new Button( composite, SWT.PUSH );
+ plusButton.setText( "+" );
+ plusButton.addSelectionListener( new SelectionAdapter()
+ {
+ public void widgetSelected( SelectionEvent e )
+ {
+ addToValue( 1 );
+ text.selectAll();
+ }
+ } );
+
+ updateTextValue();
applyDialogFont( composite );
return composite;
@@ -124,13 +204,52 @@ public class IntegerDialog extends Dialo
/**
+ * Updates the text value.
+ */
+ private void updateTextValue()
+ {
+ text.setText( value.toString() );
+ }
+
+
+ /**
+ * Adds the given integer to the value.
+ *
+ * @param i the integer
+ */
+ private void addToValue( int i )
+ {
+ value = value.add( new BigDecimal( i ) );
+
+ updateTextValue();
+ }
+
+
+ /**
+ * Updates the value from the text's value.
+ */
+ private void updateValueFromText()
+ {
+ try
+ {
+ BigDecimal newValue = new BigDecimal( text.getText() );
+ value = newValue;
+ }
+ catch ( NumberFormatException e )
+ {
+ // Nothing to do
+ }
+ }
+
+
+ /**
* Gets the integer.
*
* @return the integer
*/
- public int getInteger()
+ public BigDecimal getInteger()
{
- return returnValue;
+ return value;
}
@@ -143,6 +262,6 @@ public class IntegerDialog extends Dialo
*/
public boolean isDirty()
{
- return initialValue != returnValue;
+ return !initialValue.equals( value );
}
}