Hi Matthias, Another option is to throttle the selection. Databinding has support for that. Try this snippet:
import org.eclipse.core.databinding.observable.Realm; import org.eclipse.core.databinding.observable.sideeffect.ISideEffect; import org.eclipse.core.databinding.observable.sideeffect.ISideEffectFactory; import org.eclipse.core.databinding.observable.value.IObservableValue; import org.eclipse.jface.databinding.swt.DisplayRealm; import org.eclipse.jface.databinding.swt.WidgetSideEffects; import org.eclipse.jface.databinding.swt.typed.WidgetProperties; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.layout.GridLayoutFactory; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; /** * This snippet shows how to use the {@link ISideEffect} class together with a * delayed IObservable with a {@link Text} widget. If text is entered the side * effect is triggered with a delay * * @since 3.2 * */ public class SnippetSideEffect50_DelayedUpdate { /** * @wbp.parser.entryPoint */ public static void main(String[] args) { Display display = new Display(); Realm.runWithDefault(DisplayRealm.getRealm(display), () -> { // create the Task model object final Shell shell = new View().createShell(); Display display1 = Display.getCurrent(); while (!shell.isDisposed()) { if (!display1.readAndDispatch()) { display1.sleep(); } } }); } static class View { private Text summaryText; private Label resultLabel; public Shell createShell() { Display display = Display.getDefault(); Shell shell = new Shell(display); GridLayoutFactory.fillDefaults().applyTo(shell); GridDataFactory gridDataFactory = GridDataFactory.fillDefaults().grab(true, false); Label label = new Label(shell, SWT.NONE); label.setLayoutData( new GridData(SWT.BEGINNING, SWT.CENTER, false, false)); label.setText("Wait for it...."); resultLabel = new Label(shell, SWT.NONE); resultLabel.setText(""); gridDataFactory.applyTo(resultLabel); // create a Text widget, which will be bound to the Task summary summaryText = new Text(shell, SWT.BORDER); gridDataFactory.applyTo(summaryText); bindData(); // Open and return the Shell shell.pack(); shell.open(); return shell; } private void bindData() { ISideEffectFactory sideEffectFactory = WidgetSideEffects.createFactory(summaryText); // create the observables, which should be bound by the SideEffect IObservableValue<String> textModifyObservable = WidgetProperties.text(SWT.Modify).observeDelayed(1000, summaryText); sideEffectFactory.create(textModifyObservable::getValue, e -> { resultLabel.setText(summaryText.getText()); }); } } } On Mon, Mar 15, 2021 at 12:17 PM Matthias Paul Scholz < matthias.paul.sch...@gmail.com> wrote: > Hi Wim, > > I'm aware that the concept of an edit transction makes sense for the > graphical mode only where the user has some sort of "edit session". > But at least in that case I think there should be such a concept and the > API should provide a possibility to hook into it. > > By the way, I wonder whether both a programmer and the user actually > expects that the value of the widget gets changed already before she > presses Enter or clicks the green hook. > > Best, > MP > > > Am Mo., 15. März 2021 um 11:28 Uhr schrieb Wim Jongman < > wim.jong...@gmail.com>: > >> Hi Matthias, >> >> It depends on how you use the widget. CDateTime has many faces. When >> using the widget in its simplest form, there is no concept of Enter or OK. >> So it means that databinding has to be different based on the style of the >> widget. >> >> [image: image.png] >> >> Cheers, >> >> Wim >> >> >> >> >> On Mon, Mar 15, 2021 at 10:08 AM Matthias Paul Scholz < >> matthias.paul.sch...@gmail.com> wrote: >> >>> Hi all, >>> >>> For some years we have used the CDateTime widget in our RCP application >>> which works quite good. :) >>> >>> However, we ran in some troubles lately: to get notion about changes the >>> user made in the widget, we use the databinding proposed by Henno >>> Vermeulen (see https://www.eclipse.org/forums/index.php/t/172877) that >>> binds our application to a selection event in the widget. >>> >>> There's an issue with that approach, however: it seems that such a >>> selection event is triggered always on each selection inside of the widget. >>> For instance, when the user cycles through the months in the calendar drop >>> down or selects another day, each time a separate selection event is fired. >>> This is inconvenient for us, since we need an event only when the user >>> explicitely commits her changes by selecting the ok button (or pressing >>> enter). >>> >>> This has become crucial for us lately since we have a new use case now >>> where a change in the widget triggers an expensive backend operation - and >>> it is a no go when this happens each time the user changes the month in the >>> calendar drop down ... >>> >>> Is there a possibility to listen for or to bind to ok/enter events on >>> the CDateTime widget only? >>> >>> Thanks, >>> MP >>> >>> _______________________________________________ >>> nebula-dev mailing list >>> nebula-dev@eclipse.org >>> To unsubscribe from this list, visit >>> https://www.eclipse.org/mailman/listinfo/nebula-dev >>> >> _______________________________________________ >> nebula-dev mailing list >> nebula-dev@eclipse.org >> To unsubscribe from this list, visit >> https://www.eclipse.org/mailman/listinfo/nebula-dev >> > _______________________________________________ > nebula-dev mailing list > nebula-dev@eclipse.org > To unsubscribe from this list, visit > https://www.eclipse.org/mailman/listinfo/nebula-dev >
_______________________________________________ nebula-dev mailing list nebula-dev@eclipse.org To unsubscribe from this list, visit https://www.eclipse.org/mailman/listinfo/nebula-dev