Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephan Leicht2012-02-20 16:11:07 +0000
committerStephan Leicht2012-02-20 16:11:07 +0000
commitbf07d9f61e2ca2d17ad36dcfaee868a687c2201a (patch)
treea42486c8d039c201675c0e8fe9a1254c5950c36e
parentf9411e64c79ade2634a32137899bb1efe7b22e29 (diff)
downloadorg.eclipse.scout.rt-bf07d9f61e2ca2d17ad36dcfaee868a687c2201a.tar.gz
org.eclipse.scout.rt-bf07d9f61e2ca2d17ad36dcfaee868a687c2201a.tar.xz
org.eclipse.scout.rt-bf07d9f61e2ca2d17ad36dcfaee868a687c2201a.zip
In Datefield ArrowKeys do not work if Datepicker is open
-rw-r--r--org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/ext/TextEx.java2
-rw-r--r--org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/form/fields/datefield/RwtScoutDateField.java105
-rw-r--r--org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/form/fields/datefield/chooser/DateChooserDialog.java19
3 files changed, 86 insertions, 40 deletions
diff --git a/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/ext/TextEx.java b/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/ext/TextEx.java
index 3c92c90ce8..f704e08164 100644
--- a/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/ext/TextEx.java
+++ b/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/ext/TextEx.java
@@ -40,7 +40,7 @@ public class TextEx extends Text {
public boolean setFocus() {
boolean editable = getEditable();
if (editable) {
- super.setFocus();
+ editable = super.setFocus();
}
return editable;
}
diff --git a/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/form/fields/datefield/RwtScoutDateField.java b/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/form/fields/datefield/RwtScoutDateField.java
index f417e348e9..03b1085cd0 100644
--- a/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/form/fields/datefield/RwtScoutDateField.java
+++ b/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/form/fields/datefield/RwtScoutDateField.java
@@ -33,8 +33,12 @@ import org.eclipse.scout.rt.ui.rap.form.fields.datefield.chooser.DateChooserDial
import org.eclipse.scout.rt.ui.rap.internal.TextFieldEditableSupport;
import org.eclipse.scout.rt.ui.rap.keystroke.RwtKeyStroke;
import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.FocusAdapter;
+import org.eclipse.swt.events.FocusEvent;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.events.ShellAdapter;
+import org.eclipse.swt.events.ShellEvent;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.layout.FormData;
@@ -57,6 +61,8 @@ public class RwtScoutDateField extends RwtScoutValueFieldComposite<IDateField> i
private Composite m_dateContainer;
private boolean m_dateTimeCompositeMember;
private String m_displayTextToVerify;
+ private DateChooserDialog m_dialog;
+ private FocusAdapter m_textFieldFocusAdapter = null;
public void setIgnoreLabel(boolean ignoreLabel) {
m_ignoreLabel = ignoreLabel;
@@ -100,11 +106,6 @@ public class RwtScoutDateField extends RwtScoutValueFieldComposite<IDateField> i
getDropDownButton().setBackground(color);
}
}
-
- @Override
- public void setText(String text) {
- super.setText(text);
- }
};
getUiEnvironment().getFormToolkit().adapt(textField, false, false);
textField.setData(WidgetUtil.CUSTOM_VARIANT, VARIANT_DATEFIELD);
@@ -172,6 +173,36 @@ public class RwtScoutDateField extends RwtScoutValueFieldComposite<IDateField> i
return (StyledTextEx) super.getUiField();
}
+ private void installFocusListenerOnTextField() {
+ if (!getUiField().isDisposed()) {
+ getUiField().setFocus();
+ if (m_textFieldFocusAdapter == null) {
+ m_textFieldFocusAdapter = new FocusAdapter() {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public void focusLost(FocusEvent e) {
+ getUiEnvironment().getDisplay().asyncExec(new Runnable() {
+
+ @Override
+ public void run() {
+ makeSureDateChooserIsClosed();
+ uninstallFocusListenerOnTextField();
+ }
+ });
+ }
+ };
+ }
+ getUiField().addFocusListener(m_textFieldFocusAdapter);
+ }
+ }
+
+ private void uninstallFocusListenerOnTextField() {
+ if (!getUiField().isDisposed() && m_textFieldFocusAdapter != null) {
+ getUiField().removeFocusListener(m_textFieldFocusAdapter);
+ }
+ }
+
@Override
protected void setEnabledFromScout(boolean b) {
super.setEnabledFromScout(b);
@@ -260,7 +291,6 @@ public class RwtScoutDateField extends RwtScoutValueFieldComposite<IDateField> i
@Override
protected void handleUiFocusGained() {
- super.handleUiFocusGained();
getUiField().setSelection(0, getUiField().getText().length());
}
@@ -293,6 +323,14 @@ public class RwtScoutDateField extends RwtScoutValueFieldComposite<IDateField> i
}
}
+ private void makeSureDateChooserIsClosed() {
+ if (m_dialog != null
+ && m_dialog.getShell() != null
+ && !m_dialog.getShell().isDisposed()) {
+ m_dialog.getShell().close();
+ }
+ }
+
private void handleUiDateChooserAction() {
if (getDropDownButton().isVisible() && getDropDownButton().isEnabled()) {
Date oldDate = getScoutObject().getValue();
@@ -301,28 +339,43 @@ public class RwtScoutDateField extends RwtScoutValueFieldComposite<IDateField> i
}
notifyPopupEventListeners(IPopupSupportListener.TYPE_OPENING);
- try {
- DateChooserDialog dialog = new DateChooserDialog(getUiField().getShell(), oldDate);
- final Date newDate = dialog.openDateChooser(getUiField());
- if (newDate != null) {
- // notify Scout
- Runnable t = new Runnable() {
- @Override
- public void run() {
- getScoutObject().getUIFacade().setDateFromUI(newDate);
- }
- };
- getUiEnvironment().invokeScoutLater(t, 0);
- // end notify
- }
- }
- finally {
- notifyPopupEventListeners(IPopupSupportListener.TYPE_CLOSED);
- if (!getUiField().isDisposed()) {
- getUiField().setFocus();
+ makeSureDateChooserIsClosed();
+ m_dialog = new DateChooserDialog(getUiField().getShell(), oldDate);
+
+ m_dialog.getShell().addShellListener(new ShellAdapter() {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public void shellClosed(ShellEvent e) {
+ boolean setFocusToUiField = false;
+ try {
+ final Date newDate = m_dialog.getReturnDate();
+ if (newDate != null) {
+ setFocusToUiField = true;
+ // notify Scout
+ Runnable t = new Runnable() {
+ @Override
+ public void run() {
+ getScoutObject().getUIFacade().setDateFromUI(newDate);
+ }
+ };
+ getUiEnvironment().invokeScoutLater(t, 0);
+ // end notify
+ }
+ }
+ finally {
+ notifyPopupEventListeners(IPopupSupportListener.TYPE_CLOSED);
+ if (setFocusToUiField
+ && !getUiField().isDisposed()) {
+ getUiField().setFocus();
+ }
+ }
}
- }
+ });
+
+ m_dialog.openDateChooser(getUiField());
+ installFocusListenerOnTextField();
}
}
diff --git a/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/form/fields/datefield/chooser/DateChooserDialog.java b/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/form/fields/datefield/chooser/DateChooserDialog.java
index e2fb333055..59390b8e6f 100644
--- a/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/form/fields/datefield/chooser/DateChooserDialog.java
+++ b/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/form/fields/datefield/chooser/DateChooserDialog.java
@@ -25,8 +25,6 @@ import org.eclipse.scout.rt.ui.rap.util.RwtUtility;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.ShellAdapter;
-import org.eclipse.swt.events.ShellEvent;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.FormAttachment;
@@ -75,7 +73,8 @@ public class DateChooserDialog extends Dialog {
super(parentShell);
m_model = new DatefieldTableModel();
setDisplayDate(date);
- setBlockOnOpen(true);
+ setBlockOnOpen(false);
+ create();
}
public IRwtEnvironment getUiEnvironment(Display display) {
@@ -87,21 +86,15 @@ public class DateChooserDialog extends Dialog {
m_model.setNavigationDate(date);
}
- public Date openDateChooser(Control c) {
+ public void openDateChooser(Control c) {
showDialogFor(c);
+ }
+
+ public Date getReturnDate() {
return m_returnDate;
}
public int showDialogFor(Control field) {
- create();
- getShell().addShellListener(new ShellAdapter() {
- private static final long serialVersionUID = 1L;
-
- @Override
- public void shellDeactivated(ShellEvent e) {
- close();
- }
- });
// make sure that the popup fit into the application window.
Rectangle appBounds = field.getDisplay().getBounds();
Point absPrefPos = field.toDisplay(0, field.getSize().y);

Back to the top