Skip to content

Commit ef851f0

Browse files
committed
Bei Änderungen des Inhalts eines Textfeldes werden diese zwischengespeichert und über
einen Timer ausgelesen und weiter verarbeitet. So wird verhindert, dass jeder einzelne Buchstabe zu einer Berechnung des Gruppensichtbarkeiten führt, sondern erst bei möglichst langen Texten, im Idealfall wenn der Text fertiggestellt wurde.
1 parent 14ca4fa commit ef851f0

File tree

1 file changed

+47
-1
lines changed

1 file changed

+47
-1
lines changed

Diff for: core/src/main/java/de/muenchen/allg/itd51/wollmux/form/sidebar/FormSidebarController.java

+47-1
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@
2929
import java.util.Map;
3030
import java.util.concurrent.ConcurrentHashMap;
3131

32+
import javax.swing.Timer;
33+
34+
import org.apache.commons.lang3.tuple.Pair;
3235
import org.slf4j.Logger;
3336
import org.slf4j.LoggerFactory;
3437

@@ -140,7 +143,11 @@ public void focusGained(FocusEvent event)
140143
processUIElementEvents = true;
141144
}
142145
};
146+
147+
private Timer setValueTimer;
148+
private boolean isInSetValueTimer = false;
143149

150+
private List<Pair<String,String>> setValueList = new ArrayList<>();
144151
/**
145152
* Create a new controller and the gui of the form.
146153
*
@@ -170,6 +177,9 @@ public FormSidebarController(String resourceUrl, XComponentContext context, XWin
170177
isUnregistered = false;
171178
WollMuxEventHandler.getInstance().registerListener(this);
172179
}
180+
setValueTimer = new Timer(50, e -> setValue());
181+
setValueTimer.setCoalesce(true);
182+
setValueTimer.setRepeats(false);
173183

174184
}
175185

@@ -202,8 +212,10 @@ public void onTextDocumentControllerInitialized(OnTextDocumentControllerInitiali
202212
initController(docController);
203213
}
204214

215+
private boolean initDone = false;
205216
private void initController(TextDocumentController documentController)
206217
{
218+
initDone = false;
207219
if (documentController == null)
208220
{
209221
LOGGER.trace("{} notify(): documentController is NULL.", this.getClass().getSimpleName());
@@ -242,6 +254,7 @@ private void initController(TextDocumentController documentController)
242254
}
243255

244256
unregisterListener();
257+
initDone = true;
245258
}
246259

247260
private void scanExecCommands()
@@ -346,13 +359,46 @@ public void textChanged(TextEvent event)
346359
XControl txtField = UNO.XControl(event.Source);
347360
String id = (String) UnoProperty.getProperty(txtField.getModel(), UnoProperty.DEFAULT_CONTROL);
348361
String text = (String) UnoProperty.getProperty(txtField.getModel(), UnoProperty.TEXT);
349-
setDocFormModelValue(id, text);
362+
if(initDone)
363+
{
364+
setValueList.add(Pair.of(id,text));
365+
setValueTimer.restart();
366+
}
367+
else
368+
{
369+
setDocFormModelValue(id, text);
370+
}
350371
} catch (UnoHelperException e)
351372
{
352373
LOGGER.error("", e);
353374
}
354375
}
376+
private void setValue()
377+
{
378+
isInSetValueTimer = true;
379+
List<Pair<String,String>> setValueListH = new ArrayList<>();
380+
setValueListH.addAll(setValueList);
381+
setValueList.clear();
355382

383+
String id="", value="", idH = "", valueH;
384+
for (int i = 0; i < setValueListH.size(); i++)
385+
{
386+
valueH = setValueListH.get(i).getValue();
387+
idH = setValueListH.get(i).getKey();
388+
if(!id.equals(idH))
389+
{
390+
if(!id.equals(""))
391+
setDocFormModelValue(id, value);
392+
id = idH;
393+
}
394+
value = valueH;
395+
}
396+
if(!id.equals(""))
397+
setDocFormModelValue(id, value);
398+
isInSetValueTimer = false;
399+
if(setValueList.size()>0)
400+
setValueTimer.restart();
401+
}
356402
/**
357403
* Update the form model with a new value. Don't handle value changes on the control which
358404
* triggered this action.

0 commit comments

Comments
 (0)