-
-
Notifications
You must be signed in to change notification settings - Fork 2.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Complete refactor of LibraryProperties to mvvm #6107
Conversation
…old FieldFormatterCleanupsPanel
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks already good so far
src/main/java/org/jabref/gui/commonfxcontrols/FieldFormatterCleanupsPanelViewModel.java
Show resolved
Hide resolved
Codecov Report
@@ Coverage Diff @@
## master #6107 +/- ##
=========================================
Coverage ? 41.69%
Complexity ? 6909
=========================================
Files ? 1093
Lines ? 46395
Branches ? 5552
=========================================
Hits ? 19344
Misses ? 25616
Partials ? 1435
Continue to review full report at Codecov.
|
There seems to be something wrong with the tests... |
The localization files read all fxml files, and apparently there is a problem with |
So should i get rid of the DI? This would mean, the inclusion of FieldFormattersCleanupsPanel has to be hardcoded again... |
@FXML private ComboBox<Field> addableFields; | ||
@FXML private ComboBox<Formatter> addableFormatters; | ||
|
||
@Inject private StateManager stateManager; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think it should work if you pass the stateManager as ctor parameter instead of using the injection
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The FieldFormatterCleanupsPanel is instantiated by the fxml file. I could theoretically pass an argument here using the @NamedArg
-annotation. But passing a StateManager seems to me not possible that way. So the alternative would be to hardcode this in the view.
I think it's a good idea to include the statemanager via |
According to the stack trace java can't initialize the
java.lang.ExceptionInInitializerError
at org.jabref/org.jabref.gui.DefaultInjector.createDependency(DefaultInjector.java:42)
at afterburner.fx/com.airhacks.afterburner.injection.Injector.instantiateModelOrService(Injector.java:115)
at afterburner.fx/com.airhacks.afterburner.injection.Injector.injectMembers(Injector.java:160)
at afterburner.fx/com.airhacks.afterburner.injection.Injector.injectMembers(Injector.java:137)
at org.jabref/org.jabref.gui.DefaultInjector.injectMembers(DefaultInjector.java:78)
at afterburner.fx/com.airhacks.afterburner.views.ViewLoader.lambda$controller$4(ViewLoader.java:116)
at javafx.fxml/javafx.fxml.FXMLLoader$ValueElement.processAttribute(FXMLLoader.java:938)
at javafx.fxml/javafx.fxml.FXMLLoader$RootElement.processAttribute(FXMLLoader.java:1301)
at javafx.fxml/javafx.fxml.FXMLLoader$Element.processStartElement(FXMLLoader.java:227)
at javafx.fxml/javafx.fxml.FXMLLoader$ValueElement.processStartElement(FXMLLoader.java:752)
at javafx.fxml/javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.java:2722)
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2552)
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2466)
at javafx.fxml/javafx.fxml.FXMLLoader.load(FXMLLoader.java:2435)
at afterburner.fx/com.airhacks.afterburner.views.ViewLoader.load(ViewLoader.java:172)
at org.jabref/org.jabref.gui.commonfxcontrols.FieldFormatterCleanupsPanel.(FieldFormatterCleanupsPanel.java:45)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500)
at java.base/java.lang.reflect.ReflectAccess.newInstance(ReflectAccess.java:166)
at java.base/jdk.internal.reflect.ReflectionFactory.newInstance(ReflectionFactory.java:404)
at java.base/java.lang.Class.newInstance(Class.java:591)
at javafx.fxml/javafx.fxml.FXMLLoader$InstanceDeclarationElement.constructValue(FXMLLoader.java:1019)
at javafx.fxml/javafx.fxml.FXMLLoader$ValueElement.processStartElement(FXMLLoader.java:754)
at javafx.fxml/javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.java:2722)
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2552)
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2466)
at javafx.fxml/javafx.fxml.FXMLLoader.load(FXMLLoader.java:2435)
at org.jabref/org.jabref.logic.l10n.LocalizationParser.getLanguageKeysInFxmlFile(LocalizationParser.java:218)
at org.jabref/org.jabref.logic.l10n.LocalizationParser.lambda$findLocalizationEntriesInFxmlFiles$3(LocalizationParser.java:111)
at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:271)
at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:177)
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)
at java.base/java.util.Iterator.forEachRemaining(Iterator.java:133)
at java.base/java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578)
at org.jabref/org.jabref.logic.l10n.LocalizationParser.findLocalizationEntriesInFxmlFiles(LocalizationParser.java:112)
at org.jabref/org.jabref.logic.l10n.LocalizationParser.findLocalizationEntriesInFiles(LocalizationParser.java:77)
at org.jabref/org.jabref.logic.l10n.LocalizationParser.findObsolete(LocalizationParser.java:56)
at org.jabref/org.jabref.logic.l10n.LocalizationConsistencyTest.findObsoleteLocalizationKeys(LocalizationConsistencyTest.java:125)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:567)
at org.junit.platform.commons@1.6.0/org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:686)
at org.junit.jupiter.engine@5.6.0/org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)
at org.junit.jupiter.engine@5.6.0/org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131)
at org.junit.jupiter.engine@5.6.0/org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149)
at org.junit.jupiter.engine@5.6.0/org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:140)
at org.junit.jupiter.engine@5.6.0/org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:84)
at org.junit.jupiter.engine@5.6.0/org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115)
at org.junit.jupiter.engine@5.6.0/org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105)
at org.junit.jupiter.engine@5.6.0/org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106)
at org.junit.jupiter.engine@5.6.0/org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64)
at org.junit.jupiter.engine@5.6.0/org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45)
at org.junit.jupiter.engine@5.6.0/org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37)
at org.junit.jupiter.engine@5.6.0/org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104)
at org.junit.jupiter.engine@5.6.0/org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98)
at org.junit.jupiter.engine@5.6.0/org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$6(TestMethodTestDescriptor.java:205)
at org.junit.platform.engine@1.6.0/org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.jupiter.engine@5.6.0/org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:201)
at org.junit.jupiter.engine@5.6.0/org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:137)
at org.junit.jupiter.engine@5.6.0/org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:71)
at org.junit.platform.engine@1.6.0/org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:135)
at org.junit.platform.engine@1.6.0/org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine@1.6.0/org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125)
at org.junit.platform.engine@1.6.0/org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135)
at org.junit.platform.engine@1.6.0/org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123)
at org.junit.platform.engine@1.6.0/org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine@1.6.0/org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122)
at org.junit.platform.engine@1.6.0/org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1507)
at org.junit.platform.engine@1.6.0/org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38)
at org.junit.platform.engine@1.6.0/org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139)
at org.junit.platform.engine@1.6.0/org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine@1.6.0/org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125)
at org.junit.platform.engine@1.6.0/org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135)
at org.junit.platform.engine@1.6.0/org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123)
at org.junit.platform.engine@1.6.0/org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine@1.6.0/org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122)
at org.junit.platform.engine@1.6.0/org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1507)
at org.junit.platform.engine@1.6.0/org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38)
at org.junit.platform.engine@1.6.0/org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139)
at org.junit.platform.engine@1.6.0/org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine@1.6.0/org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125)
at org.junit.platform.engine@1.6.0/org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135)
at org.junit.platform.engine@1.6.0/org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123)
at org.junit.platform.engine@1.6.0/org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine@1.6.0/org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122)
at org.junit.platform.engine@1.6.0/org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80)
at org.junit.platform.engine@1.6.0/org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32)
at org.junit.platform.engine@1.6.0/org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)
at org.junit.platform.engine@1.6.0/org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:51)
at org.junit.platform.launcher@1.6.0/org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:248)
at org.junit.platform.launcher@1.6.0/org.junit.platform.launcher.core.DefaultLauncher.lambda$execute$5(DefaultLauncher.java:211)
at org.junit.platform.launcher@1.6.0/org.junit.platform.launcher.core.DefaultLauncher.withInterceptedStreams(DefaultLauncher.java:226)
at org.junit.platform.launcher@1.6.0/org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:199)
at org.junit.platform.launcher@1.6.0/org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:132)
at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:99)
at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:79)
at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:75)
at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:61)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:567)
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)
at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94)
at com.sun.proxy.$Proxy32.stop(Unknown Source)
at org.gradle.api.internal.tasks.testing.worker.TestWorker.stop(TestWorker.java:132)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:567)
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:182)
at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:164)
at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:412)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
at java.base/java.lang.Thread.run(Thread.java:830)
Caused by: java.lang.IllegalStateException: This operation is permitted on the event thread only; currentThread = Test worker
at javafx.graphics/com.sun.glass.ui.Application.checkEventThread(Application.java:441)
at javafx.graphics/com.sun.glass.ui.ClipboardAssistance.(ClipboardAssistance.java:40)
at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.getSystemClipboard(QuantumToolkit.java:1262)
at javafx.graphics/javafx.scene.input.Clipboard.getSystemClipboardImpl(Clipboard.java:432)
at javafx.graphics/javafx.scene.input.Clipboard.getSystemClipboard(Clipboard.java:200)
at org.jabref/org.jabref.gui.ClipBoardManager.(ClipBoardManager.java:51)
at org.jabref/org.jabref.Globals.(Globals.java:75)
... 133 more
Could not initialize class org.jabref.Globals �[0K�[1morg.jabref.logic.l10n.LocalizationConsistencyTest�[m |
|
I changed the failing injection to a call on Globals as a temporary fix, so this PR is mergable, or at least ready for review. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nice work! LGTM
# Conflicts: # src/main/resources/l10n/JabRef_en.properties
# Conflicts: # src/main/resources/l10n/JabRef_en.properties
* upstream/master: Fix image path Check for secrets being present at GitHub workflows (#5973) Add "JabRef and Software Engineering" Make Java code acceptable for GitBook - and fix link to JUnit antipatterns Let "Contributing" be displayed Merge the reviewing steops of "Code Quality" to "Development Strategy" Try to include CONTRIBUTING.md in devdocs.jabref.org Minor improvments in CONTRIBUTING.md Update Codecov yaml with proper indentation (#6156) Complete refactor of LibraryProperties to mvvm (#6107) Try comment:false Remove duplicated line Fix: Only if `.sav` file has changes a recovery dialog is shown (#6116) Fix formatting for GitBook Add hint to scroll down
I'm afraid #6107 is already merged in the master branch. Since there were some changes in the architecture of the code (we try to refactor the whole code base to the mvvm pattern), undoing this PR is something we do not really want to undo, since already other PRs were merged. Why don't you upload your code as a draft (just like adding a PR, except in the before clicking the green button, choose "create a draft") and we can discuss it on GitHub. Maybe merging the latest master branch into yours is easier than you think. Free Software is all about collaboration. |
@calixtus |
I think I misunderstood you. Sorry. The problem in #6107 is some something different und should be indepentend of your work about issue #6091. But if you like, you could give this one a shot too. The remaining issue in #6107 is the about fxml and dependency injection, as @tobiasdiez pointed out. I put in this PR a workaround to move forward. But the right implementation would be to inject the stateManager. |
you can push your changes to your origin repo and create a pull request at the jabref github page. |
3d3573c Update centre-de-recherche-sur-les-civilisations-de-l-asie-orientale.csl (#5988) 5de0fbe Update society-of-biblical-literature-fullnote-bibliography.csl (#5913) 04b6c7a Create revue-internationale-durbanisme.csl (#5974) 4a5bfe2 Update biological-reviews.csl (#6116) 957b2bc Update harvard-cite-them-right-no-et-al.csl (#6115) e836a6c Update harvard-university-of-bath.csl (#6011) b4a8dd7 Update and rename harvard-cite-them-right.csl to harvard-cite-them-ri… (#6113) a198884 Update twentieth-century-music.csl (#6110) 81c1619 Update archaeonautica.csl (#5928) fc46f1d Bump actions/cache from 2 to 3 (#6112) fab57ed Bump actions/checkout from 2 to 3 (#6111) 519d594 [don't merge] chore: Included githubactions in the dependabot config (#6109) a8aa898 Update universidade-estadual-de-alagoas-uneal-abnt.csl (#5915) 6191640 Update isnad-dipnotlu.csl (#5909) d65a6ac Update isnad-metinici.csl (#5910) 830d337 Update technische-universitat-dresden-linguistik.csl (#6097) 81adc43 Update american-society-for-horticultural-science.csl (#6089) b767623 Create south-african-law-journal.csl (#6092) 215e1e9 Create journal-of-lithic-studies.csl (#6080) 0740f8c Create eunomia-revista-en-cultura-de-la-legalidad.csl (#6095) f93c809 Create endocrine-journal.csl (#6086) 3fdeb51 Revert "chore: Set permissions for GitHub actions (#6096)" (#6108) 35ebd1e chore: Set permissions for GitHub actions (#6096) 1cb8758 Create journal-fur-medienlinguistik (#6100) f4b5f7f Update unified-style-sheet-for-linguistics.csl (#6098) c3f856a Update advanced-materials.csl (#6103) d1e7576 Bump diffy from 3.4.0 to 3.4.2 (#6107) 9e5e7ab Fix Dev Dynamics (#6099) 7234520 Add CSL style for the journal Developmental Dynamics (#6093) ba8db05 Create independent style for vox-sanguinis.csl (#6085) 845dee0 Create meta.csl (#6088) 684bc3a Update universite-du-quebec-a-montreal.csl (#6087) 3602c18 Up-date & re-title pour-reussir/dionne (#6043) 0cc6e82 Fix Mainz Geography cfc4cec Add DOI and fix printing author names in Population and Économie et statistique (#6079) 14e8b1d Update journal-of-neuroimaging.csl (#6084) 2c0e1f1 Update isnad-dipnotlu.csl (#6081) 02fdb9b Merge pull request #6082 from denismaier/patch-ube-muwi-note 9309378 removes default-locale git-subtree-dir: buildres/csl/csl-styles git-subtree-split: 3d3573c
This PR aims to refactor the LibraryPreferencesDialog to comply with the mvvm pattern.
Again, this PR is not so lightweight, as the pattern panels had to be reworked too, FieldFormattersCleanupsPanel had to be converted to mvvm-pattern, so the storeSettings-method could be placed into the ViewModel.
The package commonfxcontrols is introduced and should collect all panels used by several dialogs.
when it's done, it should also fix #6091
refs #6106
Reworked FieldFormatterCleanupsPanel (works in LibraryProperties as well as in CleanupDialog: