From hendrik.ebbers at me.com Tue Jan 1 14:48:40 2013 From: hendrik.ebbers at me.com (Hendrik Ebbers) Date: Tue, 01 Jan 2013 23:48:40 +0100 Subject: invokeAndWait Message-ID: <86EEC817-FAB6-4BAF-9C56-DE4DF3E1D322@me.com> Hi, I created a "invokeAndWait" method for JavaFX that is a equivalent of SwingUtilities.invokeAndWait(...). It will be part of DataFX. You can read about it in my blog: http://www.guigarage.com/2013/01/invokeandwait-for-javafx/ I ask myself why there is no "invokeAndWait" method in javafx.application.Platform. Is there any good reason? In swing I use "invokeAndWait" often and so I think it is also important for JavaFX. - Hendrik From han.solo at muenster.de Tue Jan 1 20:12:12 2013 From: han.solo at muenster.de (Gerrit Grunwald) Date: Wed, 2 Jan 2013 05:12:12 +0100 Subject: invokeAndWait In-Reply-To: <86EEC817-FAB6-4BAF-9C56-DE4DF3E1D322@me.com> References: <86EEC817-FAB6-4BAF-9C56-DE4DF3E1D322@me.com> Message-ID: <9AA715F3-A9CB-4789-815A-ACDF5E31142A@muenster.de> Hi Hendrik, there is a comment from Richard about it that could be found here: https://forums.oracle.com/forums/thread.jspa?threadID=2370263 Cheers, Gerrit Am 01.01.2013 um 23:48 schrieb Hendrik Ebbers : > Hi, > > I created a "invokeAndWait" method for JavaFX that is a equivalent of SwingUtilities.invokeAndWait(...). It will be part of DataFX. You can read about it in my blog: http://www.guigarage.com/2013/01/invokeandwait-for-javafx/ > > I ask myself why there is no "invokeAndWait" method in javafx.application.Platform. Is there any good reason? In swing I use "invokeAndWait" often and so I think it is also important for JavaFX. > > - Hendrik From hendrik.ebbers at me.com Wed Jan 2 00:23:44 2013 From: hendrik.ebbers at me.com (Hendrik Ebbers) Date: Wed, 02 Jan 2013 08:23:44 +0000 (GMT) Subject: invokeAndWait In-Reply-To: <9AA715F3-A9CB-4789-815A-ACDF5E31142A@muenster.de> Message-ID: <72a3f167-2e74-4db2-9298-2ce426abe73d@me.com> Thanks. Am 02. Januar 2013 um 05:12 schrieb Gerrit Grunwald : Hi Hendrik, there is a comment from Richard about it that could be found here: https://forums.oracle.com/forums/thread.jspa?threadID=2370263 Cheers, Gerrit Am 01.01.2013 um 23:48 schrieb Hendrik Ebbers : Hi, I created a "invokeAndWait" method for JavaFX that is a equivalent of SwingUtilities.invokeAndWait(...). It will be part of DataFX. You can read about it in my blog: http://www.guigarage.com/2013/01/invokeandwait-for-javafx/ I ask myself why there is no "invokeAndWait" method in javafx.application.Platform. Is there any good reason? In swing I use "invokeAndWait" often and so I think it is also important for JavaFX. - Hendrik From tom.schindl at bestsolution.at Wed Jan 2 00:52:14 2013 From: tom.schindl at bestsolution.at (Tom Schindl) Date: Wed, 02 Jan 2013 09:52:14 +0100 Subject: JIRA does not allow to add attachments Message-ID: <50E3F53E.5040007@bestsolution.at> Hi, Something must have changed in JIRAs privilege system because I'm not allowed to attach patches anymore to tickets I filed (e.g. http://javafx-jira.kenai.com/browse/RT-27467) Do other none-oracle-employees also see this, or is it just me? Tom -- B e s t S o l u t i o n . a t EDV Systemhaus GmbH ------------------------------------------------------------------------ tom schindl gesch?ftsf?hrer/CEO ------------------------------------------------------------------------ eduard-bodem-gasse 5-7/1 A-6020 innsbruck fax ++43 512 935833 http://www.BestSolution.at phone ++43 512 935834 From tom.schindl at bestsolution.at Wed Jan 2 01:28:47 2013 From: tom.schindl at bestsolution.at (Tom Schindl) Date: Wed, 02 Jan 2013 10:28:47 +0100 Subject: invokeAndWait In-Reply-To: <72a3f167-2e74-4db2-9298-2ce426abe73d@me.com> References: <72a3f167-2e74-4db2-9298-2ce426abe73d@me.com> Message-ID: <50E3FDCF.3020705@bestsolution.at> I think the reason Richard provides is a weak one. I also have situations where a syncAndWait is needed (I need it because I have to implement an API I don't control). Not providing an utility method because someone could do bad things with it is not a good strategy. Yes concurrent programming is not easy and you'd better know what you are doing else don't do it! Not providing utilities leads to is code duplication you see now all over the place, I have one in my library, Hendrik has one well and most likely many others. Do jfx-extras also holds utilities or is it simply about controls? Could we add such a method there? Tom Am 02.01.13 09:23, schrieb Hendrik Ebbers: > Thanks. > > Am 02. Januar 2013 um 05:12 schrieb Gerrit Grunwald : > > Hi Hendrik, > > there is a comment from Richard about it that could be found here: > > https://forums.oracle.com/forums/thread.jspa?threadID=2370263 > > Cheers, > > Gerrit > > Am 01.01.2013 um 23:48 schrieb Hendrik Ebbers : > > Hi, > > I created a "invokeAndWait" method for JavaFX that is a equivalent of > SwingUtilities.invokeAndWait(...). It will be part of DataFX. You can > read about it in my blog: > http://www.guigarage.com/2013/01/invokeandwait-for-javafx/ > > I ask myself why there is no "invokeAndWait" method in > javafx.application.Platform. Is there any good reason? In swing I use > "invokeAndWait" often and so I think it is also important for JavaFX. > > - Hendrik -- B e s t S o l u t i o n . a t EDV Systemhaus GmbH ------------------------------------------------------------------------ tom schindl gesch?ftsf?hrer/CEO ------------------------------------------------------------------------ eduard-bodem-gasse 5-7/1 A-6020 innsbruck fax ++43 512 935833 http://www.BestSolution.at phone ++43 512 935834 From hendrik.ebbers at me.com Wed Jan 2 02:08:21 2013 From: hendrik.ebbers at me.com (Hendrik Ebbers) Date: Wed, 02 Jan 2013 10:08:21 +0000 (GMT) Subject: invokeAndWait In-Reply-To: <50E3FDCF.3020705@bestsolution.at> Message-ID: <4f3c5a33-6179-415a-8a80-0a57f49c4841@me.com> Hi Tom, in my opinion JFXtras is like SwingX and provides more than only new controls. At the moment there are some color utilities and animation classes next to the controls. I asked myself whats the best place for my method. Because I need it in DataFX I commited it there. This prevented DataFX from a new dependency to jfxtras. But I think it's not wrong to add such a method to JFXtras. Can I see your invokeAndWait code. We can add the best?/ cleanest?implementation to?JFXtras. Maybe JFXtras is splitted (jfxtras-core, jfxtras-controls, etc.) in future. Than DataFX can depend on it and the duplicate code will be deleted. Hendrik Am 02. Januar 2013 um 10:28 schrieb Tom Schindl : I think the reason Richard provides is a weak one. I also have situations where a syncAndWait is needed (I need it because I have to implement an API I don't control). Not providing an utility method because someone could do bad things with it is not a good strategy. Yes concurrent programming is not easy and you'd better know what you are doing else don't do it! Not providing utilities leads to is code duplication you see now all over the place, I have one in my library, Hendrik has one well and most likely many others. Do jfx-extras also holds utilities or is it simply about controls? Could we add such a method there? Tom Am 02.01.13 09:23, schrieb Hendrik Ebbers: > Thanks. > > Am 02. Januar 2013 um 05:12 schrieb Gerrit Grunwald : > > Hi Hendrik, > > there is a comment from Richard about it that could be found here: > > https://forums.oracle.com/forums/thread.jspa?threadID=2370263 > > Cheers, > > Gerrit > > Am 01.01.2013 um 23:48 schrieb Hendrik Ebbers : > > Hi, > > I created a "invokeAndWait" method for JavaFX that is a equivalent of > SwingUtilities.invokeAndWait(...). It will be part of DataFX. You can > read about it in my blog: > http://www.guigarage.com/2013/01/invokeandwait-for-javafx/ > > I ask myself why there is no "invokeAndWait" method in > javafx.application.Platform. Is there any good reason? In swing I use > "invokeAndWait" often and so I think it is also important for JavaFX. > > - Hendrik -- B e s t S o l u t i o n . a t EDV Systemhaus GmbH ------------------------------------------------------------------------ tom schindl gesch?ftsf?hrer/CEO ------------------------------------------------------------------------ eduard-bodem-gasse 5-7/1 A-6020 innsbruck fax ++43 512 935833 http://www.BestSolution.at phone ++43 512 935834 From tbee at tbee.org Wed Jan 2 02:33:18 2013 From: tbee at tbee.org (Tom Eugelink) Date: Wed, 02 Jan 2013 11:33:18 +0100 Subject: invokeAndWait In-Reply-To: <4f3c5a33-6179-415a-8a80-0a57f49c4841@me.com> References: <4f3c5a33-6179-415a-8a80-0a57f49c4841@me.com> Message-ID: <50E40CEE.8050000@tbee.org> In my opinion you are totally right. I see JFXtras as a project for anything that is not part of JavaFX. The labs is a big playground where all code is dumped in a single project, but when matured, controls and core jars can and should be split off. There was this blog some 2 weeks ago that contained some interesting utility class and I asked there too if he like to move that into JFXtras (or allow me to do that). TomE On 2013-01-02 11:08, Hendrik Ebbers wrote: > Hi Tom, > > in my opinion JFXtras is like SwingX and provides more than only new controls. At the moment there are some color utilities and animation classes next to the controls. I asked myself whats the best place for my method. Because I need it in DataFX I commited it there. This prevented DataFX from a new dependency to jfxtras. But I think it's not wrong to add such a method to JFXtras. Can I see your invokeAndWait code. We can add the best / cleanest implementation to JFXtras. Maybe JFXtras is splitted (jfxtras-core, jfxtras-controls, etc.) in future. Than DataFX can depend on it and the duplicate code will be deleted. > > Hendrik > > Am 02. Januar 2013 um 10:28 schrieb Tom Schindl : > > I think the reason Richard provides is a weak one. I also have > situations where a syncAndWait is needed (I need it because I have to > implement an API I don't control). > > Not providing an utility method because someone could do bad things with > it is not a good strategy. Yes concurrent programming is not easy and > you'd better know what you are doing else don't do it! > > Not providing utilities leads to is code duplication you see now all > over the place, I have one in my library, Hendrik has one well and most > likely many others. Do jfx-extras also holds utilities or is it simply > about controls? Could we add such a method there? > > Tom > > Am 02.01.13 09:23, schrieb Hendrik Ebbers: >> Thanks. >> >> Am 02. Januar 2013 um 05:12 schrieb Gerrit Grunwald : >> >> Hi Hendrik, >> >> there is a comment from Richard about it that could be found here: >> >> https://forums.oracle.com/forums/thread.jspa?threadID=2370263 >> >> Cheers, >> >> Gerrit >> >> Am 01.01.2013 um 23:48 schrieb Hendrik Ebbers : >> >> Hi, >> >> I created a "invokeAndWait" method for JavaFX that is a equivalent of >> SwingUtilities.invokeAndWait(...). It will be part of DataFX. You can >> read about it in my blog: >> http://www.guigarage.com/2013/01/invokeandwait-for-javafx/ >> >> I ask myself why there is no "invokeAndWait" method in >> javafx.application.Platform. Is there any good reason? In swing I use >> "invokeAndWait" often and so I think it is also important for JavaFX. >> >> - Hendrik > > From kevin.rushforth at oracle.com Wed Jan 2 07:23:19 2013 From: kevin.rushforth at oracle.com (Kevin Rushforth) Date: Wed, 02 Jan 2013 07:23:19 -0800 Subject: JIRA does not allow to add attachments In-Reply-To: <50E3F53E.5040007@bestsolution.at> References: <50E3F53E.5040007@bestsolution.at> Message-ID: <50E450E7.6000304@oracle.com> [forwarding to Mong and Brian directly in case they didn't see it] I can confirm this behavior. Brian or Mong can reply as to what changed that might have caused this. -- Kevin Tom Schindl wrote: > Hi, > > Something must have changed in JIRAs privilege system because I'm not > allowed to attach patches anymore to tickets I filed (e.g. > http://javafx-jira.kenai.com/browse/RT-27467) > > Do other none-oracle-employees also see this, or is it just me? > > Tom > > From martin.sladecek at oracle.com Wed Jan 2 07:58:26 2013 From: martin.sladecek at oracle.com (Martin Sladecek) Date: Wed, 02 Jan 2013 16:58:26 +0100 Subject: FilteredList/SortedList Message-ID: <50E45922.6070807@oracle.com> Hello, I would like to start discussion about a new API for ObservableLists that are filtered/sorted. This API was already in the repository before 2.0 was released, but was withdrawn ( http://javafx-jira.kenai.com/browse/RT-15302). In the original API, there were 3 new classes: FilteredList, SortedList and TransformationList (parent of the previous two). These 2 lists took a different (Observable)List, acting as a view for that list, firing change notifications when the view changed. Since we have a different situation now, due to new (overlapping) features in JDK 8, I'd like to propose a different API for FilteredList and SortedList. First of all, I don't think we need separate FilteredList and SortedList classes anymore. With defender methods, we can have a similar approach to JDK's stream(), having e.g. transform() method on ObservableList, that would allow filtering & sorting of the list. The original API allowed "batch" mode, but this is now basically covered with List's stream(), although it's more cumbersome as you won't get a List directly of a Stream, not to mention ObservableList, which is what you need to pass as a model to various controls, like TableView. Still, I'm not in favour of having this also in FX, but maybe something like Iterable to ObservableList conversion method would ease the FX development when using JDK 8 steams... I want to keep TransformationList to serve both as a common parent for all current and future "transformation" lists, but also returning TransformationList on transform() call, having methods like filtered() and sorted() directly on the TransformationList. So overall, the new API would look like this: public abstract class TransformationList implements ObservableList { protected TransformationList(ObservableList source); public final ObservableList getDirectSource(); // The first non-transformation list in the chain. public final ObservableList getOriginalSource(); // Called when a change from the source is triggered. protected abstract void onSourceChanged(Change c); // Maps the index of this list's element to an index in the direct source list. public abstract int getSourceIndex(int index); public final int getOriginalSourceIndex(int index); public final TransformationList filtered(Predicate predicate); public final TransformationList sorted(Comparator comparator); } ObservableList interface would get a new defender method: public TransformationList transform(); this would return TransformationList representation of the current list. Another appoach would be to have filtered(), sorted() directly on ObservableList as a defender methods, which would remove the necessity of calling transform() before filtered()/sorted(), but I find the first one more consistent with JDK API. Any comments? Thanks, -Martin From hang.vo at oracle.com Wed Jan 2 08:03:30 2013 From: hang.vo at oracle.com (hang.vo at oracle.com) Date: Wed, 02 Jan 2013 16:03:30 +0000 Subject: hg: openjfx/8/controls/rt: 26 new changesets Message-ID: <20130102160412.2C493474B6@hg.openjdk.java.net> Changeset: d146d333b063 Author: hudson Date: 2012-12-20 16:44 -0800 URL: http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/d146d333b063 Added tag 8.0-b69 for changeset 81dc4ec05f62 ! .hgtags Changeset: 6696e9cea59c Author: leifs Date: 2012-12-18 13:48 -0800 URL: http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/6696e9cea59c RT-27073: 8.0-graphics-scrum-h458: more than 50% regression in Controls.TextField benchmark ! javafx-ui-controls/src/com/sun/javafx/scene/control/behavior/TextInputControlBehavior.java Changeset: a0abd7776105 Author: Richard Bair Date: 2012-12-18 19:14 -0800 URL: http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/a0abd7776105 Removed unnecessary casts. ! javafx-sg-prism/src/com/sun/javafx/sg/prism/NGNode.java Changeset: 90cdf27ba14e Author: Richard Bair Date: 2012-12-18 19:25 -0800 URL: http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/90cdf27ba14e Removed methods that are being unused. Surprised that the "cull" method is no longer in use. ! javafx-sg-prism/src/com/sun/javafx/sg/prism/NGNode.java Changeset: 56ccf661c81e Author: Eva Krejcirova Date: 2012-12-19 15:17 +0100 URL: http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/56ccf661c81e RT-27027: reenable TableColumnBuilder generation Annotation processor now ignores collections which are of wildcard type (e.g. ObservableList> in TableColumnBase) because there is now way to add en element to such collection and so it makes no sense to have it in a builder. ! javafx-annotation-processor/src/javafx/builder/processor/BuilderProcessor.java ! javafx-ui-controls/src/javafx/scene/control/TableColumn.java ! javafx-ui-controls/src/javafx/scene/control/TableColumnBase.java ! javafx-ui-controls/src/javafx/scene/control/TreeTableColumn.java Changeset: e86267c303c0 Author: Eva Krejcirova Date: 2012-12-19 15:52 +0100 URL: http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/e86267c303c0 Fixed project file to contain correct location of jar file. ! javafx-annotation-processor/nbproject/project.xml Changeset: 3f82278a7473 Author: leifs Date: 2012-12-19 08:35 -0800 URL: http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/3f82278a7473 RT-27081: TextArea/TextField, Bidi support, issue with caret position when pressing Home and End keys ! javafx-ui-controls/src/com/sun/javafx/scene/control/behavior/TextAreaBehavior.java ! javafx-ui-controls/src/com/sun/javafx/scene/control/behavior/TextInputControlBehavior.java ! javafx-ui-controls/src/com/sun/javafx/scene/control/skin/TextAreaSkin.java Changeset: c615ed64218d Author: Eva Krejcirova Date: 2012-12-19 17:38 +0100 URL: http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/c615ed64218d RT-27099: Binary compatibility of TableColumnBuilder Some methods of TableColumnBuilder have been moved to TableColumnBaseBuilder. This means that the code compiled with older versions of JavaFX will not run on newer ones. These methods need to be specified in TableColumnBuilder too (via DuplicateInBuilderProperties annotation). ! javafx-ui-controls/src/javafx/scene/control/TableColumn.java Changeset: f1e4d7e882e3 Author: Felipe Heidrich Date: 2012-12-19 13:41 -0800 URL: http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/f1e4d7e882e3 [ECLIPSE ONLY] fix classpath ! .classpath Changeset: e96046ceeeca Author: Richard Bair Date: 2012-12-19 14:49 -0800 URL: http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/e96046ceeeca Fix for RT-25178: Background of controls becomes black after waking from sleep Specifically this is a bug on windows due to images who's backing surface is lost (XP and Vista, or when D3DEx9 is disabled). The RegionImageCache takes care of making sure images are only returned for the right Screen, and that images who's surface is lost are thrown away. I also added PulseLogger instrumentation to know how often that happens, and how often we are creating new images and reusing images. ! javafx-sg-prism/src/com/sun/javafx/sg/prism/NGRegion.java ! javafx-sg-prism/src/com/sun/javafx/sg/prism/RegionImageCache.java Changeset: 298084c407a0 Author: Richard Bair Date: 2012-12-19 19:30 -0800 URL: http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/298084c407a0 Fix for RT-27114: J2D failure when region caching is enabled. ! javafx-sg-prism/src/com/sun/javafx/sg/prism/RegionImageCache.java ! javafx-sg-prism/test/com/sun/javafx/sg/prism/TestGraphics.java Changeset: 56b4b95afb01 Author: Richard Bair Date: 2012-12-19 21:16 -0800 URL: http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/56b4b95afb01 Fix for RT-24458: Remove javafx-logging and replace with direct use of java.util.logging. I did not remove the javafx-logging project in this change set. Will look at that separately. ! common.properties ! javafx-concurrent/src/javafx/concurrent/Service.java - javafx-logging/src/com/sun/javafx/logging/LoggingProxy.java - javafx-logging/src/com/sun/javafx/logging/LoggingSupport.java - javafx-logging/src/com/sun/javafx/logging/PlatformLogger.java - javafx-logging/test/com/sun/javafx/logging/CreateButNotUse.java - javafx-logging/test/com/sun/javafx/logging/ExampleUsage.java - javafx-logging/test/com/sun/javafx/logging/JustImports.java - javafx-logging/test/com/sun/javafx/logging/NoRefs.java - javafx-logging/test/com/sun/javafx/logging/PlatformLoggerTest.java ! javafx-ui-common/src/com/sun/javafx/Logging.java ! javafx-ui-common/src/com/sun/javafx/accessible/AccessibleNode.java ! javafx-ui-common/src/com/sun/javafx/accessible/AccessibleStage.java ! javafx-ui-common/src/com/sun/javafx/css/StyleHelper.java ! javafx-ui-common/src/com/sun/javafx/css/StyleManager.java ! javafx-ui-common/src/com/sun/javafx/css/converters/EffectConverter.java ! javafx-ui-common/src/com/sun/javafx/css/parser/CSSParser.java ! javafx-ui-common/src/com/sun/javafx/scene/traversal/ContainerTabOrder.java ! javafx-ui-common/src/com/sun/javafx/scene/traversal/TraversalEngine.java ! javafx-ui-common/src/com/sun/javafx/scene/traversal/WeightedClosestCorner.java ! javafx-ui-common/src/com/sun/javafx/tk/Toolkit.java ! javafx-ui-common/src/javafx/scene/Node.java ! javafx-ui-common/src/javafx/scene/Parent.java ! javafx-ui-common/src/javafx/scene/Scene.java ! javafx-ui-common/src/javafx/scene/layout/Region.java ! javafx-ui-controls/src/com/sun/javafx/scene/control/Logging.java ! javafx-ui-controls/src/com/sun/javafx/scene/control/accessible/AccessibleCheckBox.java ! javafx-ui-controls/src/com/sun/javafx/scene/control/accessible/AccessibleControl.java ! javafx-ui-controls/src/com/sun/javafx/scene/control/behavior/ListCellBehavior.java ! javafx-ui-controls/src/com/sun/javafx/scene/control/behavior/TreeCellBehavior.java ! javafx-ui-controls/src/javafx/scene/control/Control.java ! javafx-ui-controls/src/javafx/scene/control/PopupControl.java ! javafx-ui-controls/src/javafx/scene/control/cell/PropertyValueFactory.java ! javafx-ui-controls/src/javafx/scene/control/cell/TreeItemPropertyValueFactory.java ! javafx-ui-controls/test/javafx/scene/control/ControlTest.java Changeset: 3d6efc68bef3 Author: jpgodine at JPGODINE-LAP.st-users.us.oracle.com Date: 2012-12-20 08:39 -0800 URL: http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/3d6efc68bef3 Automated merge with ssh://jpgodine at jfxsrc.us.oracle.com//javafx/8.0/MASTER/jfx/rt - javafx-logging/src/com/sun/javafx/logging/LoggingProxy.java - javafx-logging/src/com/sun/javafx/logging/LoggingSupport.java - javafx-logging/src/com/sun/javafx/logging/PlatformLogger.java - javafx-logging/test/com/sun/javafx/logging/CreateButNotUse.java - javafx-logging/test/com/sun/javafx/logging/ExampleUsage.java - javafx-logging/test/com/sun/javafx/logging/JustImports.java - javafx-logging/test/com/sun/javafx/logging/NoRefs.java - javafx-logging/test/com/sun/javafx/logging/PlatformLoggerTest.java ! javafx-ui-common/src/com/sun/javafx/accessible/AccessibleNode.java ! javafx-ui-common/src/com/sun/javafx/accessible/AccessibleStage.java ! javafx-ui-common/src/com/sun/javafx/css/StyleHelper.java ! javafx-ui-common/src/com/sun/javafx/css/StyleManager.java ! javafx-ui-common/src/com/sun/javafx/scene/traversal/TraversalEngine.java ! javafx-ui-common/src/com/sun/javafx/scene/traversal/WeightedClosestCorner.java ! javafx-ui-common/src/javafx/scene/Node.java ! javafx-ui-common/src/javafx/scene/Scene.java ! javafx-ui-common/src/javafx/scene/layout/Region.java ! javafx-ui-controls/src/com/sun/javafx/scene/control/accessible/AccessibleCheckBox.java ! javafx-ui-controls/src/com/sun/javafx/scene/control/accessible/AccessibleControl.java ! javafx-ui-controls/src/com/sun/javafx/scene/control/behavior/TextAreaBehavior.java ! javafx-ui-controls/src/com/sun/javafx/scene/control/skin/TextAreaSkin.java ! javafx-ui-controls/src/javafx/scene/control/Control.java ! javafx-ui-controls/src/javafx/scene/control/PopupControl.java ! javafx-ui-controls/src/javafx/scene/control/TableColumn.java ! javafx-ui-controls/src/javafx/scene/control/TreeTableColumn.java ! javafx-ui-controls/test/javafx/scene/control/ControlTest.java Changeset: 1a2aba8c37d3 Author: Felipe Heidrich Date: 2012-12-20 09:18 -0800 URL: http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/1a2aba8c37d3 RT-26582: Text orientation not always inherit ! javafx-ui-common/src/javafx/scene/text/Text.java Changeset: fe48ecf6b0a3 Author: Richard Bair Date: 2012-12-20 09:31 -0800 URL: http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/fe48ecf6b0a3 Fix for RT-24458. Controls team added additional dependency that this change set cleans up. ! javafx-ui-common/src/com/sun/javafx/scene/traversal/Hueristic2D.java Changeset: cefbdba5ea0f Author: kcr Date: 2012-12-20 09:51 -0800 URL: http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/cefbdba5ea0f Fix build failure due to merge error ! javafx-ui-controls/src/javafx/scene/control/Control.java ! javafx-ui-controls/src/javafx/scene/control/PopupControl.java Changeset: 0f997e621047 Author: kcr Date: 2012-12-20 10:23 -0800 URL: http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/0f997e621047 Fix test failure due to merge error ! javafx-ui-controls/test/javafx/scene/control/ControlTest.java Changeset: 91e5aaa90e87 Author: Richard Bair Date: 2012-12-20 12:35 -0800 URL: http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/91e5aaa90e87 Fix for RT-27143: NPE in RegionImageCache. ! javafx-sg-prism/src/com/sun/javafx/sg/prism/RegionImageCache.java Changeset: de2e89753df4 Author: Felipe Heidrich Date: 2012-12-20 16:03 -0800 URL: http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/de2e89753df4 RT-26624: do not use Simple*Property ! javafx-ui-common/src/javafx/scene/text/Text.java Changeset: 661873d81559 Author: Felipe Heidrich Date: 2012-12-20 16:38 -0800 URL: http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/661873d81559 RT-27145: load font uses hardcode font size of 12 instead of default size ! javafx-ui-common/src/javafx/scene/text/Font.java Changeset: 711c7c6f0862 Author: Richard Bair Date: 2012-12-21 09:33 -0800 URL: http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/711c7c6f0862 Fix for RT-27122. I didn't remove the extraneous check with a previous put-back. ! javafx-sg-prism/src/com/sun/javafx/sg/prism/NGRegion.java Changeset: 804d03c72c05 Author: Richard Bair Date: 2012-12-21 09:48 -0800 URL: http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/804d03c72c05 Fix for RT-26923. We no longer need this TODO in the code. ! javafx-sg-prism/src/com/sun/javafx/sg/prism/NGRegion.java Changeset: f57247ae7d1c Author: skovatch Date: 2012-12-21 14:04 -0800 URL: http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/f57247ae7d1c RT-27161: allow for iOS in deploy builds Reviewed-by: kcr ! deploy/packager/build.xml Changeset: cb178c197204 Author: jgodinez Date: 2012-12-24 12:30 -0800 URL: http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/cb178c197204 Automated merge with ssh://jpgodine at jfxsrc.us.oracle.com//javafx/8.0/MASTER/jfx/rt - javafx-logging/src/com/sun/javafx/logging/LoggingProxy.java - javafx-logging/src/com/sun/javafx/logging/LoggingSupport.java - javafx-logging/src/com/sun/javafx/logging/PlatformLogger.java - javafx-logging/test/com/sun/javafx/logging/CreateButNotUse.java - javafx-logging/test/com/sun/javafx/logging/ExampleUsage.java - javafx-logging/test/com/sun/javafx/logging/JustImports.java - javafx-logging/test/com/sun/javafx/logging/NoRefs.java - javafx-logging/test/com/sun/javafx/logging/PlatformLoggerTest.java Changeset: 0c9420a7d2a5 Author: hudson Date: 2012-12-27 15:10 -0800 URL: http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/0c9420a7d2a5 Added tag 8.0-b70 for changeset cb178c197204 ! .hgtags Changeset: c80842bf169a Author: David Grieve Date: 2013-01-02 10:57 -0500 URL: http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/c80842bf169a branch merge. Had to reslove conflicts in EffectConverter - javafx-logging/src/com/sun/javafx/logging/LoggingProxy.java - javafx-logging/src/com/sun/javafx/logging/LoggingSupport.java - javafx-logging/src/com/sun/javafx/logging/PlatformLogger.java - javafx-logging/test/com/sun/javafx/logging/CreateButNotUse.java - javafx-logging/test/com/sun/javafx/logging/ExampleUsage.java - javafx-logging/test/com/sun/javafx/logging/JustImports.java - javafx-logging/test/com/sun/javafx/logging/NoRefs.java - javafx-logging/test/com/sun/javafx/logging/PlatformLoggerTest.java ! javafx-ui-common/src/com/sun/javafx/css/StyleHelper.java ! javafx-ui-common/src/com/sun/javafx/css/StyleManager.java ! javafx-ui-common/src/com/sun/javafx/css/converters/EffectConverter.java ! javafx-ui-common/src/com/sun/javafx/css/parser/CSSParser.java From swpalmer at gmail.com Wed Jan 2 08:45:38 2013 From: swpalmer at gmail.com (Scott Palmer) Date: Wed, 2 Jan 2013 11:45:38 -0500 Subject: Canvas memory issues and performance In-Reply-To: <411E73D23DEC4C46BA48F2B6D8BF3D22164D36F86C@TUS1XCHEVSPIN34.SYMC.SYMANTEC.COM> References: <50CB519F.9090302@media-interactive.de> <50CEFA07.2090104@oracle.com> <50D466ED.5070404@oracle.com> <776520F2-0BE6-4062-9083-046D7C8C1CD2@gmail.com> <411E73D23DEC4C46BA48F2B6D8BF3D22164D36F86C@TUS1XCHEVSPIN34.SYMC.SYMANTEC.COM> Message-ID: <453CE5DF-646C-411C-9DD8-7FF5F97A9785@gmail.com> Interesting, this made me take another look at my implementation? I discovered I am already using the pre-multiplied BGRA PixelFormat. The GUI in the application slows down quite a bit without an HD video preview running. Just by updating Paths as the user drags a node around (see http://javafx-jira.kenai.com/browse/RT-25166). Add HD-sized video at 60fps and you have a lot of garbage to process as well. Anything that stalls the thread that is processing the Canvas command pipe causes a backup of video frames to fill the heap - that leads to GC issues and it makes the problem worse. I still have doubts over the usability of Canvas for realtime video in a non-trivial sample app. But it gets worse... There is also this issue http://javafx-jira.kenai.com/browse/RT-24903 that I filed some time ago (complete with reproducible test case). Basically Canvas stops processing it's command queue when it is not visible. But it could be as simple as being temporarily scrolled out of view. It is unreasonable to detect this at stop sending it frame buffers. So Canvas is most definitely not usable for my situation. I was thinking of getting access to a native surface (Direct3D, or OpenGL texture?) and rendering directly into it. But I appreciate the complexity that may be involved with such an implementation. Scott On 2012-12-21, at 3:13 PM, John Smith wrote: >> Canvas is sort of close to what is needed, but it fails completely for my use case and simply crashes the app because it runs out of memory. The FX Thread doesn't service the changes to the canvas fast enough for me to paint live video into the canvas. > > I used Canvas (and WritableImage) for doing 1024x1024px animations at 60fps and it did not crash or run out of memory. The FX Thread serviced the changes fast enough for smooth animation. Others have displayed smooth 1920x1080 full screen video using Canvas (see https://forums.oracle.com/forums/thread.jspa?threadID=2434712). The PixelFormat used for the WritableImage can make a huge difference to performance. From joseph.andresen at oracle.com Wed Jan 2 10:19:11 2013 From: joseph.andresen at oracle.com (joe andresen) Date: Wed, 02 Jan 2013 10:19:11 -0800 Subject: Canvas memory issues and performance In-Reply-To: <453CE5DF-646C-411C-9DD8-7FF5F97A9785@gmail.com> References: <50CB519F.9090302@media-interactive.de> <50CEFA07.2090104@oracle.com> <50D466ED.5070404@oracle.com> <776520F2-0BE6-4062-9083-046D7C8C1CD2@gmail.com> <411E73D23DEC4C46BA48F2B6D8BF3D22164D36F86C@TUS1XCHEVSPIN34.SYMC.SYMANTEC.COM> <453CE5DF-646C-411C-9DD8-7FF5F97A9785@gmail.com> Message-ID: <50E47A1F.4040500@oracle.com> The issue with canvas doing non desirable things when not visible is indeed something we have been looking at. It is up to the user to stop sending commands, and this is something that is and isn't an easy thing to do depending on the scenario the user is dealing with. The issue is, we define canvas as persistent, that is, whatever you tell it to do, the results will be processed and the canvas updated. We cannot discard the commands you send to the canvas for obvious reasons, and we certainly do not want to process them when the canvas is not visible. So one of the best things we can do is make sure our commands are not huge in terms of memory, even this is not great because Effects can get big. I do not know much about your app but it seems Canvas' persistent nature VS your apps non persistent video needs (ie all you care about is the latest "frame" command and not any of the previous) sounds like the fundamental issue at hand. There are cases where we can disregard previous commands, for example if you clear the entire canvas or draw a shape the covers the entire canvas. -Joe JavaFX Graphics Team On 1/2/2013 8:45 AM, Scott Palmer wrote: > Interesting, this made me take another look at my implementation? > > I discovered I am already using the pre-multiplied BGRA PixelFormat. The GUI in the application slows down quite a bit without an HD video preview running. Just by updating Paths as the user drags a node around (see http://javafx-jira.kenai.com/browse/RT-25166). Add HD-sized video at 60fps and you have a lot of garbage to process as well. > > Anything that stalls the thread that is processing the Canvas command pipe causes a backup of video frames to fill the heap - that leads to GC issues and it makes the problem worse. I still have doubts over the usability of Canvas for realtime video in a non-trivial sample app. But it gets worse... > > There is also this issue http://javafx-jira.kenai.com/browse/RT-24903 that I filed some time ago (complete with reproducible test case). Basically Canvas stops processing it's command queue when it is not visible. But it could be as simple as being temporarily scrolled out of view. It is unreasonable to detect this at stop sending it frame buffers. So Canvas is most definitely not usable for my situation. > > I was thinking of getting access to a native surface (Direct3D, or OpenGL texture?) and rendering directly into it. But I appreciate the complexity that may be involved with such an implementation. > > Scott > > On 2012-12-21, at 3:13 PM, John Smith wrote: > >>> Canvas is sort of close to what is needed, but it fails completely for my use case and simply crashes the app because it runs out of memory. The FX Thread doesn't service the changes to the canvas fast enough for me to paint live video into the canvas. >> I used Canvas (and WritableImage) for doing 1024x1024px animations at 60fps and it did not crash or run out of memory. The FX Thread serviced the changes fast enough for smooth animation. Others have displayed smooth 1920x1080 full screen video using Canvas (see https://forums.oracle.com/forums/thread.jspa?threadID=2434712). The PixelFormat used for the WritableImage can make a huge difference to performance. From jonathan.giles at oracle.com Wed Jan 2 10:24:34 2013 From: jonathan.giles at oracle.com (Jonathan Giles) Date: Thu, 03 Jan 2013 07:24:34 +1300 Subject: JIRA does not allow to add attachments In-Reply-To: <50E450E7.6000304@oracle.com> References: <50E3F53E.5040007@bestsolution.at> <50E450E7.6000304@oracle.com> Message-ID: <50E47B62.5070309@oracle.com> I wonder if this is related to the Jira failure last week where the server appeared to run out of hard disk space? Perhaps the permissions have been tightened to decrease the speed at which hard drive space is consumed. I thought it was related to the type of the jira issue (tweak, feature, bug, etc), but it seems that this isn't the case as I've changed RT-27467 to all three to no avail (with Tom testing). Finally, I should note that I can still attach to Jira issues as an Oracle employee, so in the case of controls issues (such as RT-27467), I am happy to attach files if people email them to me (until my inbox exceeds its hard disk allowance :-) -- Jonathan On 3/01/2013 4:23 a.m., Kevin Rushforth wrote: > [forwarding to Mong and Brian directly in case they didn't see it] > > I can confirm this behavior. Brian or Mong can reply as to what > changed that might have caused this. > > -- Kevin > > > Tom Schindl wrote: >> Hi, >> >> Something must have changed in JIRAs privilege system because I'm not >> allowed to attach patches anymore to tickets I filed (e.g. >> http://javafx-jira.kenai.com/browse/RT-27467) >> >> Do other none-oracle-employees also see this, or is it just me? >> >> Tom >> From lehmann at media-interactive.de Wed Jan 2 10:25:47 2013 From: lehmann at media-interactive.de (Werner Lehmann) Date: Wed, 2 Jan 2013 19:25:47 +0100 Subject: JFXPanel In-Reply-To: <50D82BEF.3090205@oracle.com> References: <50CB519F.9090302@media-interactive.de> <50CEFA07.2090104@oracle.com> <50D43163.1060308@oracle.com> <3593BB23-A90A-4333-8403-0604B32B8503@gmail.com> <50D45F75.7030602@oracle.com> <854A71FD-AEE4-4AFC-B4CB-5DBFC1A6ACCD@gmail.com> <50D82BEF.3090205@oracle.com> Message-ID: <50E47BAB.8070403@media-interactive.de> Hi Anthony, On 24.12.2012 11:18, Anthony Petrov wrote: > The only way to implement this reliably is to use the handle to the > native Swing window as an owner for the FX dialog, which is not > currently possible unfortunately. that would be a wet dream. Being able to use a dialog owner Stage *or JFrame or JDialog or awt.Window* for modality and z-order. > I understand the need for this completely. However, I doubt this > possibility would be useful for FX in the long run, especially given > that workarounds exist. For example, you could use a Swing modal dialog > to achieve the same result - just put your modal FX content into another > JFXPanel and embed it into the JDialog. Or, as you're suggesting above, This is the only real option here, in my opinion. But the code for this is more convoluted than it should be (e.g. EDT/FX sync code etc). And for a migration path Swing to FX this means to touch all those dialogs twice: 1. replace JDialog content with JFXPanel, and later 2. replace JDialog with Stage The second step can only be started when the whole parent chain is in FX land. This means there will be one point in time where we need to switch the main window from JFrame to Stage and immediately change every other window in the app from JDialog to Stage (because JDialog does not accept a Stage owner). That does not sound like a good option to me, for non-trivial applications. > you could disable the panel manually which wouldn't fix the z-order but > at least would provide some kind of modality. A third approach is to get Nightmarish, and proper z-order is not optional... > rid of the JFXPanel altogether and put your FX content into a real FX > top-level window. With the current "FX embedded in Swing" method this can only be the ultimate step, when everything else is already converted to FX. This is a few years away in our case. Things would be better if there was an option to use the "Swing embedded in FX" model because then we could slowly push out Swing top down. But that's not how it works now. Rgds Werner From phidias51 at gmail.com Wed Jan 2 10:43:13 2013 From: phidias51 at gmail.com (Mark Fortner) Date: Wed, 2 Jan 2013 10:43:13 -0800 Subject: JIRA does not allow to add attachments In-Reply-To: <50E47B62.5070309@oracle.com> References: <50E3F53E.5040007@bestsolution.at> <50E450E7.6000304@oracle.com> <50E47B62.5070309@oracle.com> Message-ID: It also seems to have a problem with taking screenshots. Whenever, I try to take a screenshot and attach it to the issue, the screenshot applet page only shows the Oracle Technet home page. Cheers, Mark On Wed, Jan 2, 2013 at 10:24 AM, Jonathan Giles wrote: > I wonder if this is related to the Jira failure last week where the server > appeared to run out of hard disk space? Perhaps the permissions have been > tightened to decrease the speed at which hard drive space is consumed. > > I thought it was related to the type of the jira issue (tweak, feature, > bug, etc), but it seems that this isn't the case as I've changed RT-27467 > to all three to no avail (with Tom testing). > > Finally, I should note that I can still attach to Jira issues as an Oracle > employee, so in the case of controls issues (such as RT-27467), I am happy > to attach files if people email them to me (until my inbox exceeds its hard > disk allowance :-) > > -- Jonathan > > > On 3/01/2013 4:23 a.m., Kevin Rushforth wrote: > >> [forwarding to Mong and Brian directly in case they didn't see it] >> >> I can confirm this behavior. Brian or Mong can reply as to what changed >> that might have caused this. >> >> -- Kevin >> >> >> Tom Schindl wrote: >> >>> Hi, >>> >>> Something must have changed in JIRAs privilege system because I'm not >>> allowed to attach patches anymore to tickets I filed (e.g. >>> http://javafx-jira.kenai.com/**browse/RT-27467 >>> ) >>> >>> Do other none-oracle-employees also see this, or is it just me? >>> >>> Tom >>> >>> > From jonathan.giles at oracle.com Wed Jan 2 10:56:17 2013 From: jonathan.giles at oracle.com (Jonathan Giles) Date: Thu, 03 Jan 2013 07:56:17 +1300 Subject: FilteredList/SortedList In-Reply-To: <50E45922.6070807@oracle.com> References: <50E45922.6070807@oracle.com> Message-ID: <50E482D1.1010103@oracle.com> Hi Martin, These lists have always been driven by the requirements of TableView, but I'm having a hard time understanding how the newly proposed API will fit in (and what will be required of me and / or end users of the TableView control). It would be great if you could show some examples of how a developer would instantiate a TableView that is: 1) always in a sorted state 2) able to filtered based on a user typing 3) is always sorted and able to be filtered based on user input I'm also particularly interested in knowing how sorting would change. Presently the code simply runs a comparator over the ObservableList, modifying the list in place. This is ok, but not ideal as it loses the original sort order which means it is not possible to go back to an unsorted state. I'm going to presume I would want to add special-case support in TableView so that, where possible, I can return the user back to an unsorted state by grabbing the original source from the transformation list. The alternative is for me to maintain a SortedList internally so that the original ObservableList is not modified, but then that is troublesome as it changes the behavior of the API. Any thoughts here would be much appreciated. Thanks, -- Jonathan On 3/01/2013 4:58 a.m., Martin Sladecek wrote: > Hello, > > I would like to start discussion about a new API for ObservableLists > that are filtered/sorted. This API was already in the repository > before 2.0 was released, but was withdrawn ( > http://javafx-jira.kenai.com/browse/RT-15302). > In the original API, there were 3 new classes: FilteredList, > SortedList and TransformationList (parent of the previous two). These > 2 lists took a different (Observable)List, acting as a view for that > list, firing change notifications when the view changed. > > Since we have a different situation now, due to new (overlapping) > features in JDK 8, I'd like to propose a different API for > FilteredList and SortedList. > > First of all, I don't think we need separate FilteredList and > SortedList classes anymore. With defender methods, we can have a > similar approach to JDK's stream(), having e.g. transform() method on > ObservableList, that would allow filtering & sorting of the list. > The original API allowed "batch" mode, but this is now basically > covered with List's stream(), although it's more cumbersome as you > won't get a List directly of a Stream, not to mention ObservableList, > which is what you need to pass as a model to various controls, like > TableView. > Still, I'm not in favour of having this also in FX, but maybe > something like Iterable to ObservableList conversion method would ease > the FX development when using JDK 8 steams... > > I want to keep TransformationList to serve both as a common parent for > all current and future "transformation" lists, but also returning > TransformationList on transform() call, having methods like filtered() > and sorted() directly on the TransformationList. > > So overall, the new API would look like this: > > public abstract class TransformationList implements > ObservableList { > > protected TransformationList(ObservableList source); > > public final ObservableList getDirectSource(); > > // The first non-transformation list in the chain. > public final ObservableList getOriginalSource(); > > // Called when a change from the source is triggered. > protected abstract void onSourceChanged(Change c); > > // Maps the index of this list's element to an index in the direct > source list. > public abstract int getSourceIndex(int index); > > public final int getOriginalSourceIndex(int index); > > public final TransformationList filtered(Predicate E> predicate); > > public final TransformationList sorted(Comparator > comparator); > > } > > ObservableList interface would get a new defender method: > > public TransformationList transform(); > > this would return TransformationList representation of the current list. > > Another appoach would be to have filtered(), sorted() directly on > ObservableList as a defender methods, which would remove the necessity > of calling transform() before filtered()/sorted(), but I find the > first one more consistent with JDK API. > > Any comments? > > Thanks, > -Martin > From swpalmer at gmail.com Wed Jan 2 11:02:11 2013 From: swpalmer at gmail.com (Scott Palmer) Date: Wed, 2 Jan 2013 14:02:11 -0500 Subject: Canvas memory issues and performance In-Reply-To: <50E47A1F.4040500@oracle.com> References: <50CB519F.9090302@media-interactive.de> <50CEFA07.2090104@oracle.com> <50D466ED.5070404@oracle.com> <776520F2-0BE6-4062-9083-046D7C8C1CD2@gmail.com> <411E73D23DEC4C46BA48F2B6D8BF3D22164D36F86C@TUS1XCHEVSPIN34.SYMC.SYMANTEC.COM> <453CE5DF-646C-411C-9DD8-7FF5F97A9785@gmail.com> <50E47A1F.4040500@oracle.com> Message-ID: The thing I'm not clear on is this: "we certainly do not want to process them when the canvas is not visible" In the suggested case where the app doesn't send commands while the Canvas isn't visible there won't be anything to process anyway. So far the alternative is to consume memory until a crash. So why not process the commands? What is the harm? I understand the persistent nature of Canvas, but is there no way to set a limit on the command queue such that you force a flush (i.e. by processing the commands) if you hit it? Regarding my non-persistent video? True, in my case I will always be drawing an image that covers the entire canvas, though because it is BGRA there is no way for Canvas to know that all of the pixels are 100% opaque without actually looking at the alpha value of each pixel. So it seems some sort of hint is required regardless. I could render to a WriteableImage and place that in an ImageView? but is that any different? I wanted to avoid constructing 1920x1080 image objects at 60fps so as not to stress the GC. In my Swing app I used JAWT to get the window handle of a heavy-weight component and then use DirectDraw to blit the image into it. I'm open to suggestions of how to deal with the same situation in JavaFX. Anticipating this day would come, I filed a request four years ago for improved support in the media playing abilities of JavaFX: http://javafx-jira.kenai.com/browse/RT-2684 Scott On 2013-01-02, at 1:19 PM, joe andresen wrote: > The issue with canvas doing non desirable things when not visible is indeed something we have been looking at. > > It is up to the user to stop sending commands, and this is something that is and isn't an easy thing to do depending on the scenario the user is dealing with. > > The issue is, we define canvas as persistent, that is, whatever you tell it to do, the results will be processed and the canvas updated. We cannot discard the commands you send to the canvas for obvious reasons, and we certainly do not want to process them when the canvas is not visible. So one of the best things we can do is make sure our commands are not huge in terms of memory, even this is not great because Effects can get big. > > I do not know much about your app but it seems Canvas' persistent nature VS your apps non persistent video needs (ie all you care about is the latest "frame" command and not any of the previous) sounds like the fundamental issue at hand. > > There are cases where we can disregard previous commands, for example if you clear the entire canvas or draw a shape the covers the entire canvas. > > -Joe > JavaFX Graphics Team > > On 1/2/2013 8:45 AM, Scott Palmer wrote: >> Interesting, this made me take another look at my implementation? >> >> I discovered I am already using the pre-multiplied BGRA PixelFormat. The GUI in the application slows down quite a bit without an HD video preview running. Just by updating Paths as the user drags a node around (see http://javafx-jira.kenai.com/browse/RT-25166). Add HD-sized video at 60fps and you have a lot of garbage to process as well. >> >> Anything that stalls the thread that is processing the Canvas command pipe causes a backup of video frames to fill the heap - that leads to GC issues and it makes the problem worse. I still have doubts over the usability of Canvas for realtime video in a non-trivial sample app. But it gets worse... >> >> There is also this issue http://javafx-jira.kenai.com/browse/RT-24903 that I filed some time ago (complete with reproducible test case). Basically Canvas stops processing it's command queue when it is not visible. But it could be as simple as being temporarily scrolled out of view. It is unreasonable to detect this at stop sending it frame buffers. So Canvas is most definitely not usable for my situation. >> >> I was thinking of getting access to a native surface (Direct3D, or OpenGL texture?) and rendering directly into it. But I appreciate the complexity that may be involved with such an implementation. >> >> Scott >> >> On 2012-12-21, at 3:13 PM, John Smith wrote: >> >>>> Canvas is sort of close to what is needed, but it fails completely for my use case and simply crashes the app because it runs out of memory. The FX Thread doesn't service the changes to the canvas fast enough for me to paint live video into the canvas. >>> I used Canvas (and WritableImage) for doing 1024x1024px animations at 60fps and it did not crash or run out of memory. The FX Thread serviced the changes fast enough for smooth animation. Others have displayed smooth 1920x1080 full screen video using Canvas (see https://forums.oracle.com/forums/thread.jspa?threadID=2434712). The PixelFormat used for the WritableImage can make a huge difference to performance. > From swpalmer at gmail.com Wed Jan 2 11:06:51 2013 From: swpalmer at gmail.com (Scott Palmer) Date: Wed, 2 Jan 2013 14:06:51 -0500 Subject: JFXPanel In-Reply-To: <50E47BAB.8070403@media-interactive.de> References: <50CB519F.9090302@media-interactive.de> <50CEFA07.2090104@oracle.com> <50D43163.1060308@oracle.com> <3593BB23-A90A-4333-8403-0604B32B8503@gmail.com> <50D45F75.7030602@oracle.com> <854A71FD-AEE4-4AFC-B4CB-5DBFC1A6ACCD@gmail.com> <50D82BEF.3090205@oracle.com> <50E47BAB.8070403@media-interactive.de> Message-ID: <3CA3A1F4-78E4-49DE-B4EC-484A82AE1930@gmail.com> On 2013-01-02, at 1:25 PM, Werner Lehmann wrote: > Hi Anthony, > > On 24.12.2012 11:18, Anthony Petrov wrote: >> The only way to implement this reliably is to use the handle to the >> native Swing window as an owner for the FX dialog, which is not >> currently possible unfortunately. > > that would be a wet dream. Being able to use a dialog owner Stage *or JFrame or JDialog or awt.Window* for modality and z-order. > >> I understand the need for this completely. However, I doubt this >> possibility would be useful for FX in the long run, especially given >> that workarounds exist. For example, you could use a Swing modal dialog >> to achieve the same result - just put your modal FX content into another >> JFXPanel and embed it into the JDialog. Or, as you're suggesting above, > > This is the only real option here, in my opinion. But the code for this is more convoluted than it should be (e.g. EDT/FX sync code etc). And for a migration path Swing to FX this means to touch all those dialogs twice: > > 1. replace JDialog content with JFXPanel, and later > 2. replace JDialog with Stage > > The second step can only be started when the whole parent chain is in FX land. This means there will be one point in time where we need to switch the main window from JFrame to Stage and immediately change every other window in the app from JDialog to Stage (because JDialog does not accept a Stage owner). That does not sound like a good option to me, for non-trivial applications. I intend to pursue this by creating some helper methods to show a dialog containing a single Parent node. Depending on the parent object for the dialog it would automatically wrap the node in a JFXPanel and use a JDialog, or use a Stage. That way I keep the ugly stuff in one place and don't have to revisit all those dialogs. ** Ideally this would be something from JFXtras ** >> you could disable the panel manually which wouldn't fix the z-order but >> at least would provide some kind of modality. A third approach is to get > > Nightmarish, and proper z-order is not optional... > >> rid of the JFXPanel altogether and put your FX content into a real FX >> top-level window. > > With the current "FX embedded in Swing" method this can only be the ultimate step, when everything else is already converted to FX. This is a few years away in our case. Things would be better if there was an option to use the "Swing embedded in FX" model because then we could slowly push out Swing top down. But that's not how it works now. It's nice to know that I am not alone. Scott From hang.vo at oracle.com Wed Jan 2 11:32:07 2013 From: hang.vo at oracle.com (hang.vo at oracle.com) Date: Wed, 02 Jan 2013 19:32:07 +0000 Subject: hg: openjfx/2.2.6/graphics/rt: Added tag 2.2.6-b07 for changeset 9c2427b8c3ab Message-ID: <20130102193210.2F5CE474BB@hg.openjdk.java.net> Changeset: 33c4f3579933 Author: hudson Date: 2012-12-27 12:54 -0800 URL: http://hg.openjdk.java.net/openjfx/2.2.6/graphics/rt/rev/33c4f3579933 Added tag 2.2.6-b07 for changeset 9c2427b8c3ab ! .hgtags From neugens.limasoftware at gmail.com Wed Jan 2 11:51:34 2013 From: neugens.limasoftware at gmail.com (Mario Torre) Date: Wed, 2 Jan 2013 20:51:34 +0100 Subject: invokeAndWait In-Reply-To: <72a3f167-2e74-4db2-9298-2ce426abe73d@me.com> References: <9AA715F3-A9CB-4789-815A-ACDF5E31142A@muenster.de> <72a3f167-2e74-4db2-9298-2ce426abe73d@me.com> Message-ID: Yeah, I fully agree with the rationale given by Richard, invokeAndWait has been (and still is) one of the main sources of troubles for many poorly written Java programs, is really too easy to get this done wrong, so omitting it from the core API was a wise decision imho, people who know what they are doing can leverage the same functionality with little effort. Cheers, Mario 2013/1/2 Hendrik Ebbers : > Thanks. > > Am 02. Januar 2013 um 05:12 schrieb Gerrit Grunwald : > > > Hi Hendrik, > > there is a comment from Richard about it that could be found here: > > https://forums.oracle.com/forums/thread.jspa?threadID=2370263 > > Cheers, > > Gerrit > > Am 01.01.2013 um 23:48 schrieb Hendrik Ebbers : > > Hi, > > I created a "invokeAndWait" method for JavaFX that is a equivalent of > SwingUtilities.invokeAndWait(...). It will be part of DataFX. You can read > about it in my blog: > http://www.guigarage.com/2013/01/invokeandwait-for-javafx/ > > I ask myself why there is no "invokeAndWait" method in > javafx.application.Platform. Is there any good reason? In swing I use > "invokeAndWait" often and so I think it is also important for JavaFX. > > - Hendrik -- pgp key: http://subkeys.pgp.net/ PGP Key ID: 80F240CF Fingerprint: BA39 9666 94EC 8B73 27FA FC7C 4086 63E3 80F2 40CF IcedRobot: www.icedrobot.org Proud GNU Classpath developer: http://www.classpath.org/ Read About us at: http://planet.classpath.org OpenJDK: http://openjdk.java.net/projects/caciocavallo/ Please, support open standards: http://endsoftpatents.org/ From pedro.duquevieira at gmail.com Wed Jan 2 12:50:30 2013 From: pedro.duquevieira at gmail.com (Pedro Duque Vieira) Date: Wed, 2 Jan 2013 20:50:30 +0000 Subject: Metro apps In-Reply-To: <8D05A030-259B-4CC0-8F83-274DC7406274@gmail.com> References: <8D05A030-259B-4CC0-8F83-274DC7406274@gmail.com> Message-ID: Bring back this topic, since it hasn't yet had any response from javafx team. Cheers, On Thu, Dec 27, 2012 at 1:33 AM, Daniel Zwolenski wrote: > All good questions that I'd also like to see answered at some point. > > Regarding jfx apps in the windows store, my initial investigation into > this is it should be legally and technically fine (I am no lawyer, blah, > blah, blah) and potentially quite easy. > > Supporting this via the JFX maven plugin (so you'd do a mvn > jfx:build-win-app-store and potentially a similar deploy version that did > the upload for you) is about 4th or 5th on my todo list, which possibly > means around feb. If anyone wants to help on this front it could be sooner > - just shout out. > > Priority #1 for me though is to get the jfx packaging tools building and > deployed into maven central. From that, everything else flows. > > > On 27/12/2012, at 12:05 PM, Pedro Duque Vieira < > pedro.duquevieira at gmail.com> wrote: > > >> To do an app that has a "metro-style" UI could well just be a case of >> skinning things differently and adding some new controls but this would >> really only work on normal Windows (I think Windows 8 will run Java but >> in compatibility mode). To actually run a "metro-style" app on Windows RT >> (MS's new OS for ultra-portable computers) I think requires a port of the >> JDK and JFX to that platform. > > > Not just run on Windows RT but also on Windows 8. > > If compatibility mode is the only viable option for now we could still > emulate the metro style on that mode, although I haven't thought whether > that would be of value. > > There are a bunch of technical challenges with such a port I believe >> (e.g. RT is heavily sand-boxed from the looks of it). > > I'm not sure but I think RT only allows for AOT like ios devices. So this > falls under the "run javafx on tablets and mobiles" issue which Oracle > doesn't want to disclose any more info about. > But we also still have windows 8. > > One other question I have is whether it is possible to sell java apps on > the windows store. > > So, in conclusion: > > 1. Will java apps ever run through the Start screen of windows 8 / > windows RT (we probably won't get any answer for now on this..) > 2. For now we can run Java on Windows 8 Desktop. Is emulating a metro > style app, on that mode, a good idea? > 1. If it is a good idea how would we go about doing it? Are there > any system calls we can make to bring up things like the app toolbar or do > we hand code that? What about the platforms standard animations and other > stuff? > 3. Is it now possible to sell javafx apps on the windows store? If > not, will it be possible on the future? > > > Thanks, Cheers, > > On Thu, Dec 27, 2012 at 12:00 AM, Daniel Zwolenski wrote: > >> This was also asked somewhat in that massive 'mobile' thread on the OTN >> forum: >> https://forums.oracle.com/forums/message.jspa?messageID=10708891#10708891 >> >> No response but perhaps it got lost in all the noise on that thread. >> >> jsmith gives some good info on the difference between Windows Metro, >> Windows 8 and Windows RT. It's worth getting clear on the terminology since >> it's all very messy thanks to some MS branding issues. >> >> >> It would be great if someone from Oracle could clarify all this, but >> given the xmas break I think things are a little quiet at the moment. >> >> >> >> >> On Thu, Dec 27, 2012 at 8:57 AM, Pedro Duque Vieira < >> pedro.duquevieira at gmail.com> wrote: >> >>> I'm asking this (below) because while doing a metro version of javafx >>> controls in my project JMetro, I wonder how things like the app toolbar >>> will be implemented, if the javafx team is already doing it and if not >>> how >>> should I go about doing it.. >>> >>> >>> On Tue, Dec 25, 2012 at 9:23 PM, Pedro Duque Vieira < >>> pedro.duquevieira at gmail.com> wrote: >>> >>> > Hi, >>> > >>> > Are you going to support Metro apps? That is, with all that implies: >>> > >>> > 1. Different type of interface >>> > 1. full window >>> > 2. app toolbar >>> > 3. charms toolbar >>> > 4. tile API: show images on start screen inside tile, >>> > notifications, etc >>> > 5. metro animations >>> > 6. etc >>> > 2. If so (answer to 1 is yes), than how are you going to implement >>> >>> > that? Will you code javafx versions of things like the app toolbar >>> or are >>> > you going to rely on system calls to make this stuff show up? >>> (don't know >>> > if the later option exists or is possible) >>> > >>> > Thanks, best regards, >>> > >>> > -- >>> > Pedro Duque Vieira >>> > >>> >>> >>> >>> -- >>> Pedro Duque Vieira >>> >> >> > > > -- > Pedro Duque Vieira > > -- Pedro Duque Vieira From knut.arne.vedaa at broadpark.no Wed Jan 2 14:00:40 2013 From: knut.arne.vedaa at broadpark.no (Knut Arne Vedaa) Date: Wed, 02 Jan 2013 23:00:40 +0100 Subject: FilteredList/SortedList In-Reply-To: <50E45922.6070807@oracle.com> References: <50E45922.6070807@oracle.com> Message-ID: <50E4AE08.2040907@broadpark.no> Context: I'm working on an implementation of a FilteredList (in Scala). (It's less trivial than I thought. :)) Some thoughts: > public final ObservableList getDirectSource(); > > // The first non-transformation list in the chain. > public final ObservableList getOriginalSource(); > // Maps the index of this list's element to an index in the direct > source list. > public abstract int getSourceIndex(int index); > > public final int getOriginalSourceIndex(int index); What do you see as the use-cases for having the above methods publicly exposed? > public final TransformationList filtered(Predicate > predicate); > > public final TransformationList sorted(Comparator > comparator); Why do these return TransformationList instead of FilteredList and SortedList? Is it possible (or desired) to be able to swap out the the predicate and comparator dynamically, i.e. having them as properites on FilteredList and SortedList respectively? If not, would you have to call e.g. refilter() manually when you want to change the predicate? > ObservableList interface would get a new defender method: > > public TransformationList transform(); > > this would return TransformationList representation of the current list. > > Another appoach would be to have filtered(), sorted() directly on > ObservableList as a defender methods, which would remove the necessity > of calling transform() before filtered()/sorted(), but I find the first > one more consistent with JDK API. From an API point of view, having filtered and sorted on ObservableList would make most sense IMO. (Then again, that would exclude the possibility of having an alternative implementation of ObservableList that has a filtered() method that returns a "filtered list" that is not necessasarily compatible with JFX's FilteredList. Unless you made the latter an interface, in which case alternative implementations could implement that as well...) Knut Arne Vedaa From knut.arne.vedaa at broadpark.no Wed Jan 2 14:00:51 2013 From: knut.arne.vedaa at broadpark.no (Knut Arne Vedaa) Date: Wed, 02 Jan 2013 23:00:51 +0100 Subject: FilteredList/SortedList In-Reply-To: <50E482D1.1010103@oracle.com> References: <50E45922.6070807@oracle.com> <50E482D1.1010103@oracle.com> Message-ID: <50E4AE13.7050502@broadpark.no> > These lists have always been driven by the requirements of TableView, > but I'm having a hard time understanding how the newly proposed API will > fit in (and what will be required of me and / or end users of the > TableView control). It would be great if you could show some examples of > how a developer would instantiate a TableView that is: Generally, this shouldn't mean any changes to TableView at all. The consumers of FilteredList/SortableList should not see them as such, but simply as implementations of ObservableList. The task of TableView is to observe an ObservableList and update itself according to changes of the list. These changes may be the result of adding, removing, sorting, filtering and on. How the list changes themselves is not something TableView (or other controls that listens to ObservableLists) should care about. > 1) always in a sorted state First, it may not always be desireble to have a TableView that is always in a sorted state, so a way to configure this (autoSortProperty) would be needed. > 2) able to filtered based on a user typing This would be the task of the API user to hook up a FilteredList with a suitable filter (with mutable predicate based on values of other controls) to the TableView. > 3) is always sorted and able to be filtered based on user input For sorting, I think TableView should implement it with an internal SortedList. That is, the user hooks up an ObservableList to the TableView, but internally TableView wraps with in a SortedList and uses the latter as the source for the display. This way you can, as you say, also revert to the unsorted if so desired. An open question here is whether this sortedList should be exposed, which may be desirable if the user *actually* wanted to use the sorted list for something (which is the current behaviour with sort in place...) So in this sense, SortedList might be driven by the needs of TableView, while FilteredList would be completely unrelated. FilteredList might have som uses with ComboBox, though. (E.g. "find" or narrow the possibilities as the user types.) Knut Arne Vedaa From hang.vo at oracle.com Wed Jan 2 14:02:59 2013 From: hang.vo at oracle.com (hang.vo at oracle.com) Date: Wed, 02 Jan 2013 22:02:59 +0000 Subject: hg: openjfx/8/graphics/rt: 5 new changesets Message-ID: <20130102220311.0CCE3474D0@hg.openjdk.java.net> Changeset: 0c9420a7d2a5 Author: hudson Date: 2012-12-27 15:10 -0800 URL: http://hg.openjdk.java.net/openjfx/8/graphics/rt/rev/0c9420a7d2a5 Added tag 8.0-b70 for changeset cb178c197204 ! .hgtags Changeset: 1889ef1d7c4d Author: leifs Date: 2012-12-20 16:37 -0800 URL: http://hg.openjdk.java.net/openjfx/8/graphics/rt/rev/1889ef1d7c4d RT-26912: RTL orientation, resizing TableView column width got opposite result. ! javafx-ui-controls/src/com/sun/javafx/scene/control/skin/NestedTableColumnHeader.java Changeset: 3603e3ee99e2 Author: David Grieve Date: 2012-12-31 11:16 -0500 URL: http://hg.openjdk.java.net/openjfx/8/graphics/rt/rev/3603e3ee99e2 RT-21709 [partial]: Split StyleConverter and ParsedValue into abstract+impl so that CssMetaData can have a StyleConverter without having to drag in too much CSS implementation. ! javafx-ui-common/src/com/sun/javafx/css/CascadingStyle.java ! javafx-ui-common/src/com/sun/javafx/css/Declaration.java ! javafx-ui-common/src/com/sun/javafx/css/ParsedValue.java + javafx-ui-common/src/com/sun/javafx/css/ParsedValueImpl.java ! javafx-ui-common/src/com/sun/javafx/css/StyleConverter.java + javafx-ui-common/src/com/sun/javafx/css/StyleConverterImpl.java ! javafx-ui-common/src/com/sun/javafx/css/StyleHelper.java ! javafx-ui-common/src/com/sun/javafx/css/StyleManager.java ! javafx-ui-common/src/com/sun/javafx/css/converters/BooleanConverter.java ! javafx-ui-common/src/com/sun/javafx/css/converters/ColorConverter.java ! javafx-ui-common/src/com/sun/javafx/css/converters/CursorConverter.java ! javafx-ui-common/src/com/sun/javafx/css/converters/EffectConverter.java ! javafx-ui-common/src/com/sun/javafx/css/converters/EnumConverter.java ! javafx-ui-common/src/com/sun/javafx/css/converters/FontConverter.java ! javafx-ui-common/src/com/sun/javafx/css/converters/InsetsConverter.java ! javafx-ui-common/src/com/sun/javafx/css/converters/PaintConverter.java ! javafx-ui-common/src/com/sun/javafx/css/converters/ShapeConverter.java ! javafx-ui-common/src/com/sun/javafx/css/converters/SizeConverter.java ! javafx-ui-common/src/com/sun/javafx/css/converters/StringConverter.java ! javafx-ui-common/src/com/sun/javafx/css/converters/URLConverter.java ! javafx-ui-common/src/com/sun/javafx/css/parser/CSSParser.java ! javafx-ui-common/src/com/sun/javafx/css/parser/DeriveColorConverter.java ! javafx-ui-common/src/com/sun/javafx/css/parser/DeriveSizeConverter.java ! javafx-ui-common/src/com/sun/javafx/css/parser/LadderConverter.java ! javafx-ui-common/src/com/sun/javafx/css/parser/StopConverter.java ! javafx-ui-common/src/com/sun/javafx/scene/layout/region/BackgroundPositionConverter.java ! javafx-ui-common/src/com/sun/javafx/scene/layout/region/BackgroundSizeConverter.java ! javafx-ui-common/src/com/sun/javafx/scene/layout/region/BorderImageSliceConverter.java ! javafx-ui-common/src/com/sun/javafx/scene/layout/region/BorderImageWidthConverter.java ! javafx-ui-common/src/com/sun/javafx/scene/layout/region/BorderImageWidthsSequenceConverter.java ! javafx-ui-common/src/com/sun/javafx/scene/layout/region/BorderStrokeStyleSequenceConverter.java ! javafx-ui-common/src/com/sun/javafx/scene/layout/region/BorderStyleConverter.java ! javafx-ui-common/src/com/sun/javafx/scene/layout/region/LayeredBackgroundPositionConverter.java ! javafx-ui-common/src/com/sun/javafx/scene/layout/region/LayeredBackgroundSizeConverter.java ! javafx-ui-common/src/com/sun/javafx/scene/layout/region/LayeredBorderPaintConverter.java ! javafx-ui-common/src/com/sun/javafx/scene/layout/region/LayeredBorderStyleConverter.java ! javafx-ui-common/src/com/sun/javafx/scene/layout/region/Margins.java ! javafx-ui-common/src/com/sun/javafx/scene/layout/region/RepeatStructConverter.java ! javafx-ui-common/src/com/sun/javafx/scene/layout/region/SliceSequenceConverter.java ! javafx-ui-common/src/com/sun/javafx/scene/layout/region/StrokeBorderPaintConverter.java ! javafx-ui-common/src/javafx/scene/layout/BackgroundConverter.java ! javafx-ui-common/src/javafx/scene/layout/BorderConverter.java ! javafx-ui-common/test/unit/com/sun/javafx/css/CssMetaDataTest.java ! javafx-ui-common/test/unit/com/sun/javafx/css/DeclarationTest.java ! javafx-ui-common/test/unit/com/sun/javafx/css/Node_cssStyleMap_Test.java ! javafx-ui-common/test/unit/com/sun/javafx/css/ParsedValueTest.java ! javafx-ui-common/test/unit/com/sun/javafx/css/RuleTest.java ! javafx-ui-common/test/unit/com/sun/javafx/css/converters/URLConverterTest.java ! javafx-ui-common/test/unit/com/sun/javafx/scene/layout/region/BackgroundRepeatConverterTest.java ! javafx-ui-common/test/unit/com/sun/javafx/test/CssMethodsTestBase.java Changeset: c80842bf169a Author: David Grieve Date: 2013-01-02 10:57 -0500 URL: http://hg.openjdk.java.net/openjfx/8/graphics/rt/rev/c80842bf169a branch merge. Had to reslove conflicts in EffectConverter - javafx-logging/src/com/sun/javafx/logging/LoggingProxy.java - javafx-logging/src/com/sun/javafx/logging/LoggingSupport.java - javafx-logging/src/com/sun/javafx/logging/PlatformLogger.java - javafx-logging/test/com/sun/javafx/logging/CreateButNotUse.java - javafx-logging/test/com/sun/javafx/logging/ExampleUsage.java - javafx-logging/test/com/sun/javafx/logging/JustImports.java - javafx-logging/test/com/sun/javafx/logging/NoRefs.java - javafx-logging/test/com/sun/javafx/logging/PlatformLoggerTest.java ! javafx-ui-common/src/com/sun/javafx/css/StyleHelper.java ! javafx-ui-common/src/com/sun/javafx/css/StyleManager.java ! javafx-ui-common/src/com/sun/javafx/css/converters/EffectConverter.java ! javafx-ui-common/src/com/sun/javafx/css/parser/CSSParser.java Changeset: f755caad7b6c Author: kcr Date: 2013-01-02 13:49 -0800 URL: http://hg.openjdk.java.net/openjfx/8/graphics/rt/rev/f755caad7b6c Automated merge with ssh://jfxsrc.us.oracle.com//javafx/8.0/MASTER/jfx/rt - deploy/.classpath - deploy/.project From jonathan.giles at oracle.com Wed Jan 2 14:22:33 2013 From: jonathan.giles at oracle.com (Jonathan Giles) Date: Thu, 03 Jan 2013 11:22:33 +1300 Subject: FilteredList/SortedList In-Reply-To: <50E4AE13.7050502@broadpark.no> References: <50E45922.6070807@oracle.com> <50E482D1.1010103@oracle.com> <50E4AE13.7050502@broadpark.no> Message-ID: <50E4B329.2020406@oracle.com> >> These lists have always been driven by the requirements of TableView, >> but I'm having a hard time understanding how the newly proposed API will >> fit in (and what will be required of me and / or end users of the >> TableView control). It would be great if you could show some examples of >> how a developer would instantiate a TableView that is: > > Generally, this shouldn't mean any changes to TableView at all. The > consumers of FilteredList/SortableList should not see them as such, > but simply as implementations of ObservableList. > > The task of TableView is to observe an ObservableList and update > itself according to changes of the list. These changes may be the > result of adding, removing, sorting, filtering and on. How the list > changes themselves is not something TableView (or other controls that > listens to ObservableLists) should care about. In theory this is true, but there are always edge cases. What should happen when a user clicks on a TableColumn header and wants to modify the sort order - do we modify the sorted lists comparator or not? If we do, how do we return to the original state of a sorted list (we'd have to store the comparator and reapply it - but only if the list is a sorted list). If we do need to special case for a sorted list, how do we know that we've got a sorted list? > >> 1) always in a sorted state > > First, it may not always be desireble to have a TableView that is > always in a sorted state, so a way to configure this > (autoSortProperty) would be needed. This was the reason I was hoping to tease out code examples for this and the option below... > >> 2) able to filtered based on a user typing > > This would be the task of the API user to hook up a FilteredList with > a suitable filter (with mutable predicate based on values of other > controls) to the TableView. Yes, I know this is how it would be done in general, but I'm keen to understand how it would be done using the current API that Martin is proposing. It is hard to understand what may be missed (as you note above) without getting a feel for the API. > >> 3) is always sorted and able to be filtered based on user input > > For sorting, I think TableView should implement it with an internal > SortedList. That is, the user hooks up an ObservableList to the > TableView, but internally TableView wraps with in a SortedList and > uses the latter as the source for the display. This way you can, as > you say, also revert to the unsorted if so desired. This is another reason why TableView needs to know what kind of list it is dealing with - wrapping a SortedList (provided by the user) in another SortedList is redundant, and again the edge cases rear their head... > An open question here is whether this sortedList should be exposed, > which may be desirable if the user *actually* wanted to use the sorted > list for something (which is the current behaviour with sort in place...) > > So in this sense, SortedList might be driven by the needs of > TableView, while FilteredList would be completely unrelated. > FilteredList might have som uses with ComboBox, though. (E.g. "find" > or narrow the possibilities as the user types.) -- Jonathan From joseph.andresen at oracle.com Wed Jan 2 14:35:31 2013 From: joseph.andresen at oracle.com (joe andresen) Date: Wed, 02 Jan 2013 14:35:31 -0800 Subject: Canvas memory issues and performance In-Reply-To: References: <50CB519F.9090302@media-interactive.de> <50CEFA07.2090104@oracle.com> <50D466ED.5070404@oracle.com> <776520F2-0BE6-4062-9083-046D7C8C1CD2@gmail.com> <411E73D23DEC4C46BA48F2B6D8BF3D22164D36F86C@TUS1XCHEVSPIN34.SYMC.SYMANTEC.COM> <453CE5DF-646C-411C-9DD8-7FF5F97A9785@gmail.com> <50E47A1F.4040500@oracle.com> Message-ID: <50E4B633.70907@oracle.com> So why not process the commands? I think it would be tough to know when to process them and when to leave them alone. Canvas is different then the other nodes in the scene graph in the sense that it could, not 100% of the time but sometimes, want to be processed when not visible, but generally when a node is not visible you do not want to process(render) it. And yes, we could add hints to help, but that leads to a slippery slope of adding a bunch of API that doesn't pull its own weight (A term Rich often uses). There was a similar request here a couple weeks ago about adding an LCD hint in canvas. Lastly, remember that canvas is a node, if you have a background color in your app, you could put the canvas node in a group and render a rectangle the size of the canvas that is the same color as the background in front of it, and i think that will cause it to keep updating (not tested). you could then fade in and out your rectangle when you want the canvas to be visible again. just a thought. As for the media stuff, maybe a media guy can comment. -Joe From jonathan.giles at oracle.com Wed Jan 2 15:31:10 2013 From: jonathan.giles at oracle.com (Jonathan Giles) Date: Thu, 03 Jan 2013 12:31:10 +1300 Subject: [REVIEW REQUEST] Disabling TableView column reordering Message-ID: <50E4C33E.2050701@oracle.com> Hi all, Just a quick post to discuss RT-24669 [1], which is a request to disable all column reordering functionality in TableView. I would like to support this use case in both TableView and TreeTableView by way of a 'columnReorderingEnabled' property (so, columnReorderingEnabledProperty(), setColumnReorderingEnabled(boolean) and isColumnReorderingEnabled()). Are there any comments or API naming suggestions? I would love to have the naming be shorter, but I can't think of a better name that retains the clarity as to what the API does. [1] http://javafx-jira.kenai.com/browse/RT-24669 Thanks, -- Jonathan From brian.beck at oracle.com Wed Jan 2 15:45:15 2013 From: brian.beck at oracle.com (Brian Beck) Date: Wed, 02 Jan 2013 15:45:15 -0800 Subject: JIRA does not allow to add attachments In-Reply-To: <50E3F53E.5040007@bestsolution.at> References: <50E3F53E.5040007@bestsolution.at> Message-ID: <50E4C68B.5020600@oracle.com> On 1/2/13 12:52 AM, Tom Schindl wrote: > Hi, > > Something must have changed in JIRAs privilege system because I'm not > allowed to attach patches anymore to tickets I filed (e.g. > http://javafx-jira.kenai.com/browse/RT-27467) > > Do other none-oracle-employees also see this, or is it just me? > > Tom > Hi Tom: We had to temporarily disable attachments in JIRA in order to fix an problem we were having. We're looking for a better solution that allows us to turn attachments back on again but I don't have an ETA yet on when it will be available. Will let folks know when we do. Sorry for the inconvenience. Brian. From tom.schindl at bestsolution.at Wed Jan 2 15:50:20 2013 From: tom.schindl at bestsolution.at (Tom Schindl) Date: Thu, 03 Jan 2013 00:50:20 +0100 Subject: [Review] API to disable open/close animations Message-ID: <50E4C7BC.7060003@bestsolution.at> Hi, The JIRA ticket is: http://javafx-jira.kenai.com/browse/RT-27088 The "API" I request a review is not in Java but only available through CSS. The API allows the developer to turn on/off the animation happening when opening/closing Tabs in TabPane. We've intentionally made the API a enum to allow other animation implementations in future (e.g. fade - see http://javafx-jira.kenai.com/browse/RT-27499) Tom -- B e s t S o l u t i o n . a t EDV Systemhaus GmbH ------------------------------------------------------------------------ tom schindl gesch?ftsf?hrer/CEO ------------------------------------------------------------------------ eduard-bodem-gasse 5-7/1 A-6020 innsbruck fax ++43 512 935833 http://www.BestSolution.at phone ++43 512 935834 From jonathan.giles at oracle.com Wed Jan 2 16:03:16 2013 From: jonathan.giles at oracle.com (Jonathan Giles) Date: Thu, 03 Jan 2013 13:03:16 +1300 Subject: [Review] API to disable open/close animations In-Reply-To: <50E4C7BC.7060003@bestsolution.at> References: <50E4C7BC.7060003@bestsolution.at> Message-ID: <50E4CAC4.6050203@oracle.com> +1 To be clear, the new API is -fx-open-tab-animation and -fx-close-tab-animation on .tab-pane. The valid options are none and grow (the only animation we currently support in TabPane). In short, it is now possible to turn off animation for opening and closing tabs. One question is whether to expose an API on TabPane to allow for this to be configured. -- Jonathan On Thursday, 3 January 2013 12:50:20 p.m., Tom Schindl wrote: > Hi, > > The JIRA ticket is: http://javafx-jira.kenai.com/browse/RT-27088 > > The "API" I request a review is not in Java but only available through > CSS. The API allows the developer to turn on/off the animation happening > when opening/closing Tabs in TabPane. > > We've intentionally made the API a enum to allow other animation > implementations in future (e.g. fade - see > http://javafx-jira.kenai.com/browse/RT-27499) > > Tom > From zonski at gmail.com Wed Jan 2 16:13:57 2013 From: zonski at gmail.com (Daniel Zwolenski) Date: Thu, 3 Jan 2013 11:13:57 +1100 Subject: Canvas rendering issues / Text Transition rendering issues Message-ID: One of the goals of Richard's Tower Defender game is to test/showcase rendering performance and smoothness. The game is still very very ugly and basic but we have added some transitions and also included a Canvas background and we are starting to see some serious rendering issues. Richard probably hasn't a chance to look at these much yet so he may have more insight but it would be interesting to hear comments from others on what may be causing these issues (e.g. code in our end or code in the JFX end) and how to deal with them. There is an executable JAR of the (still very ugly game) at: https://bytebucket.org/rbair/fx-games/wiki/release/defender-jfx.jar All the code is at: https://bitbucket.org/rbair/fx-games/src (I can narrow down further to areas of interest if you need it - just ask). When the game first loads we show an animated 'introduction' screen that has some basic Text transitions on it. This has some issues: - The first title text is very jittery as it zooms in - The tag line that fades in does a noticeable, sudden jump at the end from what looks like a bolder font to a thin one (or anti-aliased or something). - The spinning text has a similar combination of the previous two issues We have also added a Canvas as a background for the game in the 'grass' level (the 'brick' level uses a Pane as a background) and it has resulted in all sorts of odd problems. The canvas level has some pretty serious issues: - Towers (nodes) have some z-order issues when being placed before animations start - Bad Guys (nodes) rendering outside of their parents clip bound's and then tend to leave a tail behind them (i.e. the back-buffer is not cleared or something) - Lots of flickering of Bad Guys when they are animating (again looks like z-order issues) - Putting an overlayed light box with a translucent glass pane (click the 'New Game' button) causes all sorts of extreme, weird flickering and clipping problems Note that this could all be related to how we're using regions or something like that but even so it's pretty bad that we can make this happen even if we wanted to. The 'bricks' level uses a pane as it's background and works a treat with pretty much the exact same code. Cheers, Dan From philip.race at oracle.com Wed Jan 2 16:54:53 2013 From: philip.race at oracle.com (Phil Race) Date: Wed, 02 Jan 2013 16:54:53 -0800 Subject: Canvas rendering issues / Text Transition rendering issues In-Reply-To: References: Message-ID: <50E4D6DD.2010402@oracle.com> On 1/2/13 4:13 PM, Daniel Zwolenski wrote: > One of the goals of Richard's Tower Defender game is to test/showcase > rendering performance and smoothness. The game is still very very ugly and > basic but we have added some transitions and also included a Canvas > background and we are starting to see some serious rendering issues. > > Richard probably hasn't a chance to look at these much yet so he may have > more insight but it would be interesting to hear comments from others on > what may be causing these issues (e.g. code in our end or code in the JFX > end) and how to deal with them. > > There is an executable JAR of the (still very ugly game) at: > https://bytebucket.org/rbair/fx-games/wiki/release/defender-jfx.jar > > All the code is at: https://bitbucket.org/rbair/fx-games/src (I can narrow > down further to areas of interest if you need it - just ask). > > When the game first loads we show an animated 'introduction' screen that > has some basic Text transitions on it. This has some issues: > > - The first title text is very jittery as it zooms in > - The tag line that fades in does a noticeable, sudden jump at the end > from what looks like a bolder font to a thin one (or anti-aliased or > something). > - The spinning text has a similar combination of the previous two issues If I understand your sources this part of the app (WelcomePanel.java) isn't using Canvas And it looks as if you are using a Label control, rather than a Text node. The former (any UI control) will default to LCD on Windows and that's not very animation friendly. So set the fontSmoothingType to GRAY for anything you want to animate and see if that helps. -phil. > > We have also added a Canvas as a background for the game in the 'grass' > level (the 'brick' level uses a Pane as a background) and it has resulted > in all sorts of odd problems. The canvas level has some pretty serious > issues: > > - Towers (nodes) have some z-order issues when being placed before > animations start > - Bad Guys (nodes) rendering outside of their parents clip bound's and > then tend to leave a tail behind them (i.e. the back-buffer is not cleared > or something) > - Lots of flickering of Bad Guys when they are animating (again looks > like z-order issues) > - Putting an overlayed light box with a translucent glass pane (click > the 'New Game' button) causes all sorts of extreme, weird flickering and > clipping problems > > Note that this could all be related to how we're using regions or something > like that but even so it's pretty bad that we can make this happen even if > we wanted to. The 'bricks' level uses a pane as it's background and works a > treat with pretty much the exact same code. > > Cheers, > Dan From james.graham at oracle.com Wed Jan 2 17:24:47 2013 From: james.graham at oracle.com (Jim Graham) Date: Wed, 02 Jan 2013 17:24:47 -0800 Subject: Canvas rendering issues / Text Transition rendering issues In-Reply-To: <50E4D6DD.2010402@oracle.com> References: <50E4D6DD.2010402@oracle.com> Message-ID: <50E4DDDF.8080001@oracle.com> On 1/2/2013 4:54 PM, Phil Race wrote: >> When the game first loads we show an animated 'introduction' screen that >> has some basic Text transitions on it. This has some issues: >> >> - The first title text is very jittery as it zooms in >> - The tag line that fades in does a noticeable, sudden jump at the >> end >> from what looks like a bolder font to a thin one (or anti-aliased or >> something). >> - The spinning text has a similar combination of the previous two >> issues > > If I understand your sources this part of the app (WelcomePanel.java) > isn't using Canvas > And it looks as if you are using a Label control, rather than a Text node. > The former (any UI control) will default to LCD on Windows and that's not > very animation friendly. So set the fontSmoothingType to GRAY for anything > you want to animate and see if that helps. Also, if you are using a UI control, are you having it participate in layouts? If so then there may be some integer snapping happening as part of the UI layouts? (Why not use a raw Text node there?) ...jim From swpalmer at gmail.com Wed Jan 2 17:55:08 2013 From: swpalmer at gmail.com (Scott Palmer) Date: Wed, 2 Jan 2013 20:55:08 -0500 Subject: [REVIEW REQUEST] Disabling TableView column reordering In-Reply-To: <50E4C33E.2050701@oracle.com> References: <50E4C33E.2050701@oracle.com> Message-ID: What if I want one column fixed, e.g. column 1, but the remaining columns reorder-able? Could there be a way to specify ordering constraints on the columns? E.g. columns 1-3 can be in any order but must be before columns 4-6, which can also be in any order. Scott On 2013-01-02, at 6:31 PM, Jonathan Giles wrote: > Hi all, > > Just a quick post to discuss RT-24669 [1], which is a request to disable all column reordering functionality in TableView. I would like to support this use case in both TableView and TreeTableView by way of a 'columnReorderingEnabled' property (so, columnReorderingEnabledProperty(), setColumnReorderingEnabled(boolean) and isColumnReorderingEnabled()). > > Are there any comments or API naming suggestions? I would love to have the naming be shorter, but I can't think of a better name that retains the clarity as to what the API does. > > [1] http://javafx-jira.kenai.com/browse/RT-24669 > > Thanks, > -- Jonathan From james.graham at oracle.com Wed Jan 2 18:07:12 2013 From: james.graham at oracle.com (Jim Graham) Date: Wed, 02 Jan 2013 18:07:12 -0800 Subject: Canvas rendering issues / Text Transition rendering issues In-Reply-To: References: Message-ID: <50E4E7D0.4070606@oracle.com> I noticed that the path-based Vector enemies jump around a bit. I'm wondering if this could be due to the bounds of the enemy shifting around as the electric lines are added. Note that you use a stroked Path with its default decorations which I believe means miter joins which can have spikes in their contributions to bounds when you turn tight corners, so as the last triangular segment is randomly generated the angle of that last corner to the end before the path is closed can shoot out a miter of arbitrary length. Try using a round or bevel join instead - both of which will have faster and more stable bounds computations anyway which can avoid some per-frame overhead. Round would be the most stable choice for bounds, but bevel would be the fastest to render. Another technique for making the bounds stable is to include an element that pads the bounds of your group beyond the most outlying "jittery" element. For example, including a transparent rectangle whose bounds exceed the circle by enough to encompass the spiking of the miter joins or the tiny variations in the bevel joins would smooth out the stability of the bounds. The bounds with round joins will always be fairly stable since they always have a constant stroke extension distance from the outermost points of a path... ...jim From jonathan.giles at oracle.com Wed Jan 2 18:12:49 2013 From: jonathan.giles at oracle.com (Jonathan Giles) Date: Thu, 03 Jan 2013 15:12:49 +1300 Subject: [REVIEW REQUEST] Disabling TableView column reordering In-Reply-To: References: <50E4C33E.2050701@oracle.com> Message-ID: <50E4E921.6030504@oracle.com> This is an interesting point, and it actually reminds me of another issue I discussed with people at Devoxx, which is what to do when we eventually support cell spanning (despite being implemented in the 8.0 repos I plan to disable this before we ship 8.0 - unless I can find time to sort all of this out). In the case of column spanning, you want the columns with spanned cells to be locked together, so that they form one unit when moved and can also be reordered within themselves as well (if that makes sense!). What I mean to say is that if cells are spanning columns 2-3 it should be possible to move column 3 before column 2, but you can't put column 4 between columns 2 and 3 as that would separate the spanned cells. So, in short, we have the following use cases that need to be supported: 1) Disabling all column reordering (easy with a boolean property on TableView / TreeTableView) 2) Specifying a column ordering, e.g. that column 1 must always come before column 2. 3) Specifying a column grouping, e.g. that columns 2 and 3 must always be adjacent. 4) Specifying a fixed column, e.g. that column 5 must always be in the fifth position (and therefore can never be moved). This could possibly be done simply by having a boolean property on TableColumn / TreeTableColumn that states whether the column allows for reordering, but I have a feeling we may run into issues with this so it will need some more thought. It is also possible that this use case is a degenerate case of the second use case, but I'd need to think through the API further before that becomes clear. Of course, having written this all out I should end by saying that the only way to properly implement this API would be to not use column indices at all (instead we should be using references to the TableColumn / TreeTableColumn instances). I will need to give this API some thought. It's not immediately clear to me how best to represent these constraints, so if anyone has some suggestions for a lightweight API that captures these requirements, let me know :-) -- Jonathan On 3/01/2013 2:55 p.m., Scott Palmer wrote: > What if I want one column fixed, e.g. column 1, but the remaining columns reorder-able? > Could there be a way to specify ordering constraints on the columns? > E.g. columns 1-3 can be in any order but must be before columns 4-6, which can also be in any order. > > Scott > > On 2013-01-02, at 6:31 PM, Jonathan Giles wrote: > >> Hi all, >> >> Just a quick post to discuss RT-24669 [1], which is a request to disable all column reordering functionality in TableView. I would like to support this use case in both TableView and TreeTableView by way of a 'columnReorderingEnabled' property (so, columnReorderingEnabledProperty(), setColumnReorderingEnabled(boolean) and isColumnReorderingEnabled()). >> >> Are there any comments or API naming suggestions? I would love to have the naming be shorter, but I can't think of a better name that retains the clarity as to what the API does. >> >> [1] http://javafx-jira.kenai.com/browse/RT-24669 >> >> Thanks, >> -- Jonathan From swpalmer at gmail.com Wed Jan 2 18:32:11 2013 From: swpalmer at gmail.com (Scott Palmer) Date: Wed, 2 Jan 2013 21:32:11 -0500 Subject: Canvas memory issues and performance In-Reply-To: <50E4B633.70907@oracle.com> References: <50CB519F.9090302@media-interactive.de> <50CEFA07.2090104@oracle.com> <50D466ED.5070404@oracle.com> <776520F2-0BE6-4062-9083-046D7C8C1CD2@gmail.com> <411E73D23DEC4C46BA48F2B6D8BF3D22164D36F86C@TUS1XCHEVSPIN34.SYMC.SYMANTEC.COM> <453CE5DF-646C-411C-9DD8-7FF5F97A9785@gmail.com> <50E47A1F.4040500@oracle.com> <50E4B633.70907@oracle.com> Message-ID: On 2013-01-02, at 5:35 PM, joe andresen wrote: > So why not process the commands? > > I think it would be tough to know when to process them and when to leave them alone. The simple solution is to process them always and leave the optimization to the app developer like has already been suggested ("you should not send commands to the Canvas if it is not visible") > Canvas is different then the other nodes in the scene graph in the sense that it could, not 100% of the time but sometimes, want to be processed when not visible, but generally when a node is not visible you do not want to process(render) it. I understand, but it is also not like other nodes in the sense that if it does not process it queues commands indefinitely and you can run out of memory. Which is worse? Processing when not visible, or running out of memory? At some point the producer must block and let the consumer catch up. Leaving the Canvas command queue unbounded is a disaster waiting to happen... I know, it already happened to me :-) > And yes, we could add hints to help, but that leads to a slippery slope of adding a bunch of API that doesn't pull its own weight (A term Rich often uses). There was a similar request here a couple weeks ago about adding an LCD hint in canvas. Yes, I agree. I was just using it as an example while pointing out that an optimization in Canvas to "know" when it can discard the unprocessed commands is not simple in my case. But now that I think about it, that was probably a misunderstanding on my part. All I am doing is calling setPixels on the entire Canvas via a PixelWriter. As I understand it, setPixel is not the same as drawing over top of what is on the Canvas already, it's a complete replacement of the pixel data. that means it should be possible to optimize such that all previous drawing commands are discarded, as you suggested. I think that would solve the problem. Then the command queue would only ever have one instruction in it in my case - "replace everything". > Lastly, remember that canvas is a node, if you have a background color in your app, you could put the canvas node in a group and render a rectangle the size of the canvas that is the same color as the background in front of it, and i think that will cause it to keep updating (not tested). you could then fade in and out your rectangle when you want the canvas to be visible again. just a thought. That doesn't fit my use case, but I get the idea. Regards, Scott > As for the media stuff, maybe a media guy can comment. > > -Joe From swpalmer at gmail.com Wed Jan 2 18:36:38 2013 From: swpalmer at gmail.com (Scott Palmer) Date: Wed, 2 Jan 2013 21:36:38 -0500 Subject: Canvas rendering issues / Text Transition rendering issues In-Reply-To: <50E4E7D0.4070606@oracle.com> References: <50E4E7D0.4070606@oracle.com> Message-ID: Are the path-based vector enemies using Paths in a Group? I got hit by the Group using the visual bounds (like I wanted it to, since I was putting transformed stuff in a ScrollPane). I would apply a glow effect (actually a bright Shadow, since I can't yet use CSS to apply a glow) and that would cause the visual bounds to increase in the negative direction and bump the whole Group over to accommodate rendering the negative bits of the effect within the Group's bounds. Scott On 2013-01-02, at 9:07 PM, Jim Graham wrote: > I noticed that the path-based Vector enemies jump around a bit. I'm wondering if this could be due to the bounds of the enemy shifting around as the electric lines are added. Note that you use a stroked Path with its default decorations which I believe means miter joins which can have spikes in their contributions to bounds when you turn tight corners, so as the last triangular segment is randomly generated the angle of that last corner to the end before the path is closed can shoot out a miter of arbitrary length. > > Try using a round or bevel join instead - both of which will have faster and more stable bounds computations anyway which can avoid some per-frame overhead. Round would be the most stable choice for bounds, but bevel would be the fastest to render. Another technique for making the bounds stable is to include an element that pads the bounds of your group beyond the most outlying "jittery" element. For example, including a transparent rectangle whose bounds exceed the circle by enough to encompass the spiking of the miter joins or the tiny variations in the bevel joins would smooth out the stability of the bounds. The bounds with round joins will always be fairly stable since they always have a constant stroke extension distance from the outermost points of a path... > > ...jim From jmartine_1026 at yahoo.com Wed Jan 2 18:42:21 2013 From: jmartine_1026 at yahoo.com (Jose Martinez) Date: Wed, 2 Jan 2013 18:42:21 -0800 (PST) Subject: Canvas rendering issues / Text Transition rendering issues In-Reply-To: <50E4E7D0.4070606@oracle.com> References: <50E4E7D0.4070606@oracle.com> Message-ID: <1357180941.28769.YahooMailNeo@web161501.mail.bf1.yahoo.com> Jim, I suspect that the jittering is the bounds, as you also suggested. ?The jittering started when the electric lines were added. ?I been meaning to fix that and now that the holidays are over I will be working on that. ?My initial fix is also what you suggested... padding the Parent. ? I do not follow when you speak about round or bevel join. ?Can you?elaborate? ?Is this in regards to how the stroke is done or related to the algorithm for creating the electric lines? I agree it is not optimized. ?It was more for testing performance with something over the top. ?For each of those lines multiple random calls are made... very inefficient. ?I imagine having a?predefined?set of points to avoid the random calls might improve perf. thanks jose ________________________________ From: Jim Graham To: Daniel Zwolenski Cc: "openjfx-dev at openjdk.java.net" Sent: Wednesday, January 2, 2013 9:07 PM Subject: Re: Canvas rendering issues / Text Transition rendering issues I noticed that the path-based Vector enemies jump around a bit.? I'm wondering if this could be due to the bounds of the enemy shifting around as the electric lines are added.? Note that you use a stroked Path with its default decorations which I believe means miter joins which can have spikes in their contributions to bounds when you turn tight corners, so as the last triangular segment is randomly generated the angle of that last corner to the end before the path is closed can shoot out a miter of arbitrary length. Try using a round or bevel join instead - both of which will have faster and more stable bounds computations anyway which can avoid some per-frame overhead.? Round would be the most stable choice for bounds, but bevel would be the fastest to render.? Another technique for making the bounds stable is to include an element that pads the bounds of your group beyond the most outlying "jittery" element.? For example, including a transparent rectangle whose bounds exceed the circle by enough to encompass the spiking of the miter joins or the tiny variations in the bevel joins would smooth out the stability of the bounds.? The bounds with round joins will always be fairly stable since they always have a constant stroke extension distance from the outermost points of a path... ??? ??? ??? ...jim From swpalmer at gmail.com Wed Jan 2 18:54:41 2013 From: swpalmer at gmail.com (Scott Palmer) Date: Wed, 2 Jan 2013 21:54:41 -0500 Subject: [REVIEW REQUEST] Disabling TableView column reordering In-Reply-To: <50E4E921.6030504@oracle.com> References: <50E4C33E.2050701@oracle.com> <50E4E921.6030504@oracle.com> Message-ID: <4363682F-4A0E-44F4-B10D-AF8C1C6C8F12@gmail.com> My first instinct is to use a tree of column groups. Each parent node in the tree indicates if the children are reorderable or not. Children of a column group must always remain children of that column group. The leaf nodes in the tree are columns, parents are column groups that each have the boolean reorderable flag. The trivial case #1 of either allowing or disabling all column reordering uses a single column group with all columns in it. Just set the boolean property on that column group. Case #2 of column 1 always coming before column 2 (do you mean that they are adjacent as well? I'm assuming so for this example.) the "root" group contains: group_B, c3, c4, c5, c6... Group_B contains: c1, c2 and its boolean property is set to not allow reordering. The root group is set to allow reordering. The case #3 of columns 2 and 3 being adjacent means that they are in their own column group. The "root" group contains: c1, group_B, c4, c5, c6... Group_B contains: c2, c3 Both groups are set to allow reordering. Case #4 is trickier, unless I further constrain it such that columns 1-4 must come before column 5 and columns 6,7,8... must come after column 5. But if those constraints are acceptable it fits as well. The root group contains group_B, c5, group_C. Group_B contains: c1, c2, c3, c4. Group_C contains: c6, c7, c8... Only group_B and group_C are set to allow reordering. Scott On 2013-01-02, at 9:12 PM, Jonathan Giles wrote: > This is an interesting point, and it actually reminds me of another issue I discussed with people at Devoxx, which is what to do when we eventually support cell spanning (despite being implemented in the 8.0 repos I plan to disable this before we ship 8.0 - unless I can find time to sort all of this out). > > In the case of column spanning, you want the columns with spanned cells to be locked together, so that they form one unit when moved and can also be reordered within themselves as well (if that makes sense!). What I mean to say is that if cells are spanning columns 2-3 it should be possible to move column 3 before column 2, but you can't put column 4 between columns 2 and 3 as that would separate the spanned cells. > > So, in short, we have the following use cases that need to be supported: > > 1) Disabling all column reordering (easy with a boolean property on TableView / TreeTableView) > 2) Specifying a column ordering, e.g. that column 1 must always come before column 2. > 3) Specifying a column grouping, e.g. that columns 2 and 3 must always be adjacent. > 4) Specifying a fixed column, e.g. that column 5 must always be in the fifth position (and therefore can never be moved). This could possibly be done simply by having a boolean property on TableColumn / TreeTableColumn that states whether the column allows for reordering, but I have a feeling we may run into issues with this so it will need some more thought. It is also possible that this use case is a degenerate case of the second use case, but I'd need to think through the API further before that becomes clear. > > Of course, having written this all out I should end by saying that the only way to properly implement this API would be to not use column indices at all (instead we should be using references to the TableColumn / TreeTableColumn instances). I will need to give this API some thought. It's not immediately clear to me how best to represent these constraints, so if anyone has some suggestions for a lightweight API that captures these requirements, let me know :-) > > -- Jonathan > > On 3/01/2013 2:55 p.m., Scott Palmer wrote: >> What if I want one column fixed, e.g. column 1, but the remaining columns reorder-able? >> Could there be a way to specify ordering constraints on the columns? >> E.g. columns 1-3 can be in any order but must be before columns 4-6, which can also be in any order. >> >> Scott >> >> On 2013-01-02, at 6:31 PM, Jonathan Giles wrote: >> >>> Hi all, >>> >>> Just a quick post to discuss RT-24669 [1], which is a request to disable all column reordering functionality in TableView. I would like to support this use case in both TableView and TreeTableView by way of a 'columnReorderingEnabled' property (so, columnReorderingEnabledProperty(), setColumnReorderingEnabled(boolean) and isColumnReorderingEnabled()). >>> >>> Are there any comments or API naming suggestions? I would love to have the naming be shorter, but I can't think of a better name that retains the clarity as to what the API does. >>> >>> [1] http://javafx-jira.kenai.com/browse/RT-24669 >>> >>> Thanks, >>> -- Jonathan > From zonski at gmail.com Wed Jan 2 18:55:47 2013 From: zonski at gmail.com (Daniel Zwolenski) Date: Thu, 3 Jan 2013 13:55:47 +1100 Subject: Canvas rendering issues / Text Transition rendering issues In-Reply-To: <50E4E7D0.4070606@oracle.com> References: <50E4E7D0.4070606@oracle.com> Message-ID: Thanks for the feedback guys. Very helpful! I just did a quick test, changing the Labels to Text nodes and it has fixed the sudden jump at the end for the font transitions. I'm curious as to the fundamental difference between these two classes: why do we have both, what are their strengths and weaknesses and how are we as consumers of the API meant to know when to use what? The JavaDoc doesn't provide any kind of semantic clues to this that I can see. In this simple example we are only animating in some text but eventually I'd like to be able to animate in the whole toolbox and menu's etc. These will be more complicated aggregations of nodes (i.e. Panels containing lots of Labels and buttons etc all part of a layout manager) and I'd like to be able to skew and slide and grow all these. Label would be the normal/logical choice for such controls, and there's no real alternative to things like Buttons' etc (except for rolling my own clickable Text nodes). What's the best strategy for creating animation friendly Panes containing complicated controls? The change to Text hasn't fixed the jitter of the initial scaling-in of the text. It almost looks like a rounding error, like it's trying to find the best font size nearest the scale that it should be at and that's causing it to jump around a bit. Not sure though, just a thought. Layouts are used in all cases. The general approach is to use Layouts to position all the nodes in their 'final position' (so the title text is centered in a VBox for example) and then use Transitions that first offset the node from that position (to off screen, for example) and then gradually reduce the offset until it is zero, meaning the Node moves back to it's natural/preferred position as determined by the layout. I'm open to other suggestions on this. Regarding the Vector based enemies, this code was contributed by Jose and I'm not as familiar with it's internals. Looks like he's just joined the conversation so I'll let him comment on this. I have run into similar changing-bounds problems before though and it does seem a little odd/limiting to not to be able to just set a fixed size on a Group (or have some alternate node to use) and then the children just get clipped to this and their layout and bounds are always relative to a well defined area. To clear up my earlier email, the Canvas problems I mentioned are all only visible in the "grass" level. This is the only Canvas in the entire app currently, and all these other issues are non-canvas related (as most of you worked out :) ). Cheers, Dan On Thu, Jan 3, 2013 at 1:07 PM, Jim Graham wrote: > I noticed that the path-based Vector enemies jump around a bit. I'm > wondering if this could be due to the bounds of the enemy shifting around > as the electric lines are added. Note that you use a stroked Path with its > default decorations which I believe means miter joins which can have spikes > in their contributions to bounds when you turn tight corners, so as the > last triangular segment is randomly generated the angle of that last corner > to the end before the path is closed can shoot out a miter of arbitrary > length. > > Try using a round or bevel join instead - both of which will have faster > and more stable bounds computations anyway which can avoid some per-frame > overhead. Round would be the most stable choice for bounds, but bevel > would be the fastest to render. Another technique for making the bounds > stable is to include an element that pads the bounds of your group beyond > the most outlying "jittery" element. For example, including a transparent > rectangle whose bounds exceed the circle by enough to encompass the spiking > of the miter joins or the tiny variations in the bevel joins would smooth > out the stability of the bounds. The bounds with round joins will always > be fairly stable since they always have a constant stroke extension > distance from the outermost points of a path... > > ...jim > From james.graham at oracle.com Wed Jan 2 19:36:24 2013 From: james.graham at oracle.com (Jim Graham) Date: Wed, 02 Jan 2013 19:36:24 -0800 Subject: Canvas rendering issues / Text Transition rendering issues In-Reply-To: <1357180941.28769.YahooMailNeo@web161501.mail.bf1.yahoo.com> References: <50E4E7D0.4070606@oracle.com> <1357180941.28769.YahooMailNeo@web161501.mail.bf1.yahoo.com> Message-ID: <50E4FCB8.90108@oracle.com> Line joins specify how to draw the corners in a path. See the example images in the documentation for some examples: http://docs.oracle.com/javafx/2/api/javafx/scene/shape/Shape.html#strokeLineJoinProperty Note that the first shape using a miter join has a "point" on it that shoots out further from the main path. If you made the shape sharper and sharper then that point would extend further and further out until the path was turning a 180 angle at that tip and then the miter would shoot out to infinity. To keep the miters from shooting out to infinity there is a limit specified by the miterLimit property, but the default setting of 10 allows it to shoot out to 10 times the line width before it is replaced by a bevel join instead. The bevel join and round join cases are much better behaved... ...jim On 1/2/2013 6:42 PM, Jose Martinez wrote: > Jim, > > I suspect that the jittering is the bounds, as you also suggested. The > jittering started when the electric lines were added. I been meaning to > fix that and now that the holidays are over I will be working on that. > My initial fix is also what you suggested... padding the Parent. > > I do not follow when you speak about round or bevel join. Can you > elaborate? Is this in regards to how the stroke is done or related to > the algorithm for creating the electric lines? > > I agree it is not optimized. It was more for testing performance with > something over the top. For each of those lines multiple random calls > are made... very inefficient. I imagine having a predefined set of > points to avoid the random calls might improve perf. > > thanks > jose > ------------------------------------------------------------------------ > *From:* Jim Graham > *To:* Daniel Zwolenski > *Cc:* "openjfx-dev at openjdk.java.net" > *Sent:* Wednesday, January 2, 2013 9:07 PM > *Subject:* Re: Canvas rendering issues / Text Transition rendering issues > > I noticed that the path-based Vector enemies jump around a bit. I'm > wondering if this could be due to the bounds of the enemy shifting > around as the electric lines are added. Note that you use a stroked > Path with its default decorations which I believe means miter joins > which can have spikes in their contributions to bounds when you turn > tight corners, so as the last triangular segment is randomly generated > the angle of that last corner to the end before the path is closed can > shoot out a miter of arbitrary length. > > Try using a round or bevel join instead - both of which will have faster > and more stable bounds computations anyway which can avoid some > per-frame overhead. Round would be the most stable choice for bounds, > but bevel would be the fastest to render. Another technique for making > the bounds stable is to include an element that pads the bounds of your > group beyond the most outlying "jittery" element. For example, > including a transparent rectangle whose bounds exceed the circle by > enough to encompass the spiking of the miter joins or the tiny > variations in the bevel joins would smooth out the stability of the > bounds. The bounds with round joins will always be fairly stable since > they always have a constant stroke extension distance from the outermost > points of a path... > > ...jim > > From james.graham at oracle.com Wed Jan 2 19:43:40 2013 From: james.graham at oracle.com (Jim Graham) Date: Wed, 02 Jan 2013 19:43:40 -0800 Subject: Canvas rendering issues / Text Transition rendering issues In-Reply-To: References: Message-ID: <50E4FE6C.2090705@oracle.com> On 1/2/2013 4:13 PM, Daniel Zwolenski wrote: > We have also added a Canvas as a background for the game in the 'grass' > level (the 'brick' level uses a Pane as a background) and it has resulted > in all sorts of odd problems. The canvas level has some pretty serious > issues: > > - Bad Guys (nodes) rendering outside of their parents clip bound's and > then tend to leave a tail behind them (i.e. the back-buffer is not cleared > or something) This looks like dirty region optimization problems. It goes away if I specify "-Dprism.dirtyopts=false"... ...jim From jonathan.giles at oracle.com Wed Jan 2 19:56:58 2013 From: jonathan.giles at oracle.com (Jonathan Giles) Date: Thu, 03 Jan 2013 16:56:58 +1300 Subject: [REVIEW REQUEST] Disabling TableView column reordering In-Reply-To: <4363682F-4A0E-44F4-B10D-AF8C1C6C8F12@gmail.com> References: <50E4C33E.2050701@oracle.com> <50E4E921.6030504@oracle.com> <4363682F-4A0E-44F4-B10D-AF8C1C6C8F12@gmail.com> Message-ID: <50E5018A.1010705@oracle.com> Interesting idea. I'll give it some more thought tomorrow, but I thought I'd throw out one more wrinkle / thought quickly. I'm sure you're familiar with TableColumn (and TreeTableColumn is essentially exactly the same). One concept many people are unfamiliar with when talking about TableColumn is the fact that it can itself contain children TableColumn via the getColumns() method. This allows for nesting of TableColumns. For example, given a TableColumn for 'name' with two children TableColumns for 'first' and 'last', the 'first' and 'last' name columns are constrained within the 'name' column, and the 'name' column can be moved to any place at the same point in the hierarchy. So, we're already building up a tree of columns, but this tree is more like the visual model, whereas we now also want to be able to define another model to specify the constraints. I'd love to somehow reuse this concept, but I haven't quite cracked how to do it yet. Perhaps it doesn't make sense to do this, but perhaps it does. -- Jonathan On 3/01/2013 3:54 p.m., Scott Palmer wrote: > My first instinct is to use a tree of column groups. Each parent node in the tree indicates if the children are reorderable or not. Children of a column group must always remain children of that column group. The leaf nodes in the tree are columns, parents are column groups that each have the boolean reorderable flag. > > The trivial case #1 of either allowing or disabling all column reordering uses a single column group with all columns in it. Just set the boolean property on that column group. > > Case #2 of column 1 always coming before column 2 (do you mean that they are adjacent as well? I'm assuming so for this example.) the "root" group contains: group_B, c3, c4, c5, c6... > Group_B contains: c1, c2 and its boolean property is set to not allow reordering. > The root group is set to allow reordering. > > The case #3 of columns 2 and 3 being adjacent means that they are in their own column group. The "root" group contains: c1, group_B, c4, c5, c6... > Group_B contains: c2, c3 > Both groups are set to allow reordering. > > Case #4 is trickier, unless I further constrain it such that columns 1-4 must come before column 5 and columns 6,7,8... must come after column 5. But if those constraints are acceptable it fits as well. The root group contains group_B, c5, group_C. Group_B contains: c1, c2, c3, c4. Group_C contains: c6, c7, c8... Only group_B and group_C are set to allow reordering. > > > Scott > > On 2013-01-02, at 9:12 PM, Jonathan Giles wrote: > >> This is an interesting point, and it actually reminds me of another issue I discussed with people at Devoxx, which is what to do when we eventually support cell spanning (despite being implemented in the 8.0 repos I plan to disable this before we ship 8.0 - unless I can find time to sort all of this out). >> >> In the case of column spanning, you want the columns with spanned cells to be locked together, so that they form one unit when moved and can also be reordered within themselves as well (if that makes sense!). What I mean to say is that if cells are spanning columns 2-3 it should be possible to move column 3 before column 2, but you can't put column 4 between columns 2 and 3 as that would separate the spanned cells. >> >> So, in short, we have the following use cases that need to be supported: >> >> 1) Disabling all column reordering (easy with a boolean property on TableView / TreeTableView) >> 2) Specifying a column ordering, e.g. that column 1 must always come before column 2. >> 3) Specifying a column grouping, e.g. that columns 2 and 3 must always be adjacent. >> 4) Specifying a fixed column, e.g. that column 5 must always be in the fifth position (and therefore can never be moved). This could possibly be done simply by having a boolean property on TableColumn / TreeTableColumn that states whether the column allows for reordering, but I have a feeling we may run into issues with this so it will need some more thought. It is also possible that this use case is a degenerate case of the second use case, but I'd need to think through the API further before that becomes clear. >> >> Of course, having written this all out I should end by saying that the only way to properly implement this API would be to not use column indices at all (instead we should be using references to the TableColumn / TreeTableColumn instances). I will need to give this API some thought. It's not immediately clear to me how best to represent these constraints, so if anyone has some suggestions for a lightweight API that captures these requirements, let me know :-) >> >> -- Jonathan >> >> On 3/01/2013 2:55 p.m., Scott Palmer wrote: >>> What if I want one column fixed, e.g. column 1, but the remaining columns reorder-able? >>> Could there be a way to specify ordering constraints on the columns? >>> E.g. columns 1-3 can be in any order but must be before columns 4-6, which can also be in any order. >>> >>> Scott >>> >>> On 2013-01-02, at 6:31 PM, Jonathan Giles wrote: >>> >>>> Hi all, >>>> >>>> Just a quick post to discuss RT-24669 [1], which is a request to disable all column reordering functionality in TableView. I would like to support this use case in both TableView and TreeTableView by way of a 'columnReorderingEnabled' property (so, columnReorderingEnabledProperty(), setColumnReorderingEnabled(boolean) and isColumnReorderingEnabled()). >>>> >>>> Are there any comments or API naming suggestions? I would love to have the naming be shorter, but I can't think of a better name that retains the clarity as to what the API does. >>>> >>>> [1] http://javafx-jira.kenai.com/browse/RT-24669 >>>> >>>> Thanks, >>>> -- Jonathan From zonski at gmail.com Wed Jan 2 19:59:40 2013 From: zonski at gmail.com (Daniel Zwolenski) Date: Thu, 3 Jan 2013 14:59:40 +1100 Subject: JFX on Chrome OS? Message-ID: Similar to Pedro's query about JFX running on Windows 8 and Windows RT ("Metro Apps"). I'd be interested to know if it's possible to run JFX on Chrome OS, and if not whether there's plans to support this platform? http://hothardware.com/News/Samsung-Chromebook-Now-Top-Selling-Laptop-on-Amazon/ http://hothardware.com/Reviews/Samsung-Series-5-Chromebook-Review/ I realise it's a 'web' OS but it is also a business platform that you can see getting a fair bit of traction, so I'm curious as to whether this would be in or out in terms of Oracle's notion of "desktop". Cheers, Dan From zonski at gmail.com Wed Jan 2 20:12:05 2013 From: zonski at gmail.com (Daniel Zwolenski) Date: Thu, 3 Jan 2013 15:12:05 +1100 Subject: Canvas rendering issues / Text Transition rendering issues In-Reply-To: <50E4FE6C.2090705@oracle.com> References: <50E4FE6C.2090705@oracle.com> Message-ID: Sounds good, does that make it a bug or something else? I assume we're not meant to set that flag ourselves and it's some sort of development option you guys use? On Thu, Jan 3, 2013 at 2:43 PM, Jim Graham wrote: > > On 1/2/2013 4:13 PM, Daniel Zwolenski wrote: > >> We have also added a Canvas as a background for the game in the 'grass' >> level (the 'brick' level uses a Pane as a background) and it has resulted >> in all sorts of odd problems. The canvas level has some pretty serious >> issues: >> >> - Bad Guys (nodes) rendering outside of their parents clip bound's and >> >> then tend to leave a tail behind them (i.e. the back-buffer is not >> cleared >> or something) >> > > This looks like dirty region optimization problems. It goes away if I > specify "-Dprism.dirtyopts=false"... > > ...jim > > From jmartine_1026 at yahoo.com Wed Jan 2 20:26:20 2013 From: jmartine_1026 at yahoo.com (Jose Martinez) Date: Wed, 2 Jan 2013 20:26:20 -0800 (PST) Subject: Canvas rendering issues / Text Transition rendering issues In-Reply-To: References: <50E4E7D0.4070606@oracle.com> Message-ID: <1357187180.73538.YahooMailNeo@web161505.mail.bf1.yahoo.com> The jittery vector enemy has been fixed and pushed to default. ? I had to create two new parents. ?A group that contains the actual circle thing and a Pane that the group goes inside of. ? ? ? ? final int radius = 25; ? ? ? ? int pad = 6; ? ? ? ? Pane stackPane = PaneBuilder.create().prefHeight(radius * 2 + pad).prefWidth(radius * 2 + pad).build(); ? ? ? ? getChildren().add(stackPane); ? ? ? ? Group group = GroupBuilder.create().translateX(pad/2).translateY(pad/2).build(); ? ? ? ? stackPane.getChildren().add(group); Would have preferred to do it in one parent. thanks jose ________________________________ From: Daniel Zwolenski To: Jim Graham ; "fx-games at googlegroups.com" Cc: "openjfx-dev at openjdk.java.net" Sent: Wednesday, January 2, 2013 9:55 PM Subject: Re: Canvas rendering issues / Text Transition rendering issues Thanks for the feedback guys. Very helpful! I just did a quick test, changing the Labels to Text nodes and it has fixed the sudden jump at the end for the font transitions. I'm curious as to the fundamental difference between these two classes: why do we have both, what are their strengths and weaknesses and how are we as consumers of the API meant to know when to use what? The JavaDoc doesn't provide any kind of semantic clues to this that I can see. In this simple example we are only animating in some text but eventually I'd like to be able to animate in the whole toolbox and menu's etc. These will be more complicated aggregations of nodes (i.e. Panels containing lots of Labels and buttons etc all part of a layout manager) and I'd like to be able to skew and slide and grow all these. Label would be the normal/logical choice for such controls, and there's no real alternative to things like Buttons' etc (except for rolling my own clickable Text nodes). What's the best strategy for creating animation friendly Panes containing complicated controls? The change to Text hasn't fixed the jitter of the initial scaling-in of the text. It almost looks like a rounding error, like it's trying to find the best font size nearest the scale that it should be at and that's causing it to jump around a bit. Not sure though, just a thought. Layouts are used in all cases. The general approach is to use Layouts to position all the nodes in their 'final position' (so the title text is centered in a VBox for example) and then use Transitions that first offset the node from that position (to off screen, for example) and then gradually reduce the offset until it is zero, meaning the Node moves back to it's natural/preferred position as determined by the layout. I'm open to other suggestions on this. Regarding the Vector based enemies, this code was contributed by Jose and I'm not as familiar with it's internals. Looks like he's just joined the conversation so I'll let him comment on this. I have run into similar changing-bounds problems before though and it does seem a little odd/limiting to not to be able to just set a fixed size on a Group (or have some alternate node to use) and then the children just get clipped to this and their layout and bounds are always relative to a well defined area. To clear up my earlier email, the Canvas problems I mentioned are all only visible in the "grass" level. This is the only Canvas in the entire app currently, and all these other issues are non-canvas related (as most of you worked out :) ). Cheers, Dan On Thu, Jan 3, 2013 at 1:07 PM, Jim Graham wrote: > I noticed that the path-based Vector enemies jump around a bit.? I'm > wondering if this could be due to the bounds of the enemy shifting around > as the electric lines are added.? Note that you use a stroked Path with its > default decorations which I believe means miter joins which can have spikes > in their contributions to bounds when you turn tight corners, so as the > last triangular segment is randomly generated the angle of that last corner > to the end before the path is closed can shoot out a miter of arbitrary > length. > > Try using a round or bevel join instead - both of which will have faster > and more stable bounds computations anyway which can avoid some per-frame > overhead.? Round would be the most stable choice for bounds, but bevel > would be the fastest to render.? Another technique for making the bounds > stable is to include an element that pads the bounds of your group beyond > the most outlying "jittery" element.? For example, including a transparent > rectangle whose bounds exceed the circle by enough to encompass the spiking > of the miter joins or the tiny variations in the bevel joins would smooth > out the stability of the bounds.? The bounds with round joins will always > be fairly stable since they always have a constant stroke extension > distance from the outermost points of a path... > >? ? ? ? ? ? ? ? ? ? ? ? ...jim > From martin.sladecek at oracle.com Thu Jan 3 01:10:37 2013 From: martin.sladecek at oracle.com (Martin Sladecek) Date: Thu, 03 Jan 2013 10:10:37 +0100 Subject: FilteredList/SortedList In-Reply-To: <50E482D1.1010103@oracle.com> References: <50E45922.6070807@oracle.com> <50E482D1.1010103@oracle.com> Message-ID: <50E54B0D.5020509@oracle.com> Hi Jonathan, thanks for providing some use-cases for TableView, I will try to put down some code examples below. On 01/02/2013 07:56 PM, Jonathan Giles wrote: > Hi Martin, > > These lists have always been driven by the requirements of TableView, > but I'm having a hard time understanding how the newly proposed API > will fit in (and what will be required of me and / or end users of the > TableView control). It would be great if you could show some examples > of how a developer would instantiate a TableView that is: > > 1) always in a sorted state OK, this one should be simple. tableView.setItems(myList.transform().sorted( (o1,o2) -> doSomeComparison(o1, o2) ); Now this is sorting set explicitly by the developer, I understand you might want to do some sorting based on columns. Then you can store "items" internally (for the original order, they won't change) and use some different field for the actual work, doing something like setCurrentItems(items.transform().sorted(currentColumnComparator)); To return back to the original order, this should be enough: setCurrentItems(items); To modify the table (like adding a new item), you would use items directly. The actual position where to put the new item in "items" can be determined by calling getOriginalSourceIndex(int index) on the previous table item from "currentItems". > 2) able to filtered based on a user typing Now this is something that was also problematic in the original API. When the user types, the Predicate/Matcher changes, so originally we had to keep the filteredlist reference and call filteredList.setMatcher(matcher). As filtered list cannot rely on the fact that the set matched by the new matcher is a subset of the previous one, everything is processed again. Trying to create a meaningful ListChangeListener.Change might result is a huge number of sub-changes, so originally, I just fired a "everything was removed & new items were added" change, which means whole table was rebuilt. The same problems are in the new API - * need to keep a reference to change the filter (in this case it's the reference of the underlying list and a filtered() call on it when the predicate changes) * optimize cases where new predicate matches a superset/subset of the previous predicate's set. What about having another method for "mutable" predicates, like this? filtered(ObservableValue> predicate); The filtered list would bind to the ObservableValue (which could be a property, expression, etc...) and refilter on change. As the user types, you just need to update the property with the new Predicate. I didn't have a solution for the second problem in the original API, but with JDK8 I can imagine something like Comparator function (but for partially ordered set, which is what predicates form). > void filtered(ObservableValue predicate, BiFunction comparator) where double works like in the standard Comparator, except it returns NaN when the 2 predicates are incomparable. > 3) is always sorted and able to be filtered based on user input Same as #2, except called on a sorted list. > > I'm also particularly interested in knowing how sorting would change. > Presently the code simply runs a comparator over the ObservableList, > modifying the list in place. This is ok, but not ideal as it loses the > original sort order which means it is not possible to go back to an > unsorted state. I'm going to presume I would want to add special-case > support in TableView so that, where possible, I can return the user > back to an unsorted state by grabbing the original source from the > transformation list. The alternative is for me to maintain a > SortedList internally so that the original ObservableList is not > modified, but then that is troublesome as it changes the behavior of > the API. Any thoughts here would be much appreciated. > > Thanks, > -- Jonathan > > On 3/01/2013 4:58 a.m., Martin Sladecek wrote: >> Hello, >> >> I would like to start discussion about a new API for ObservableLists >> that are filtered/sorted. This API was already in the repository >> before 2.0 was released, but was withdrawn ( >> http://javafx-jira.kenai.com/browse/RT-15302). >> In the original API, there were 3 new classes: FilteredList, >> SortedList and TransformationList (parent of the previous two). These >> 2 lists took a different (Observable)List, acting as a view for that >> list, firing change notifications when the view changed. >> >> Since we have a different situation now, due to new (overlapping) >> features in JDK 8, I'd like to propose a different API for >> FilteredList and SortedList. >> >> First of all, I don't think we need separate FilteredList and >> SortedList classes anymore. With defender methods, we can have a >> similar approach to JDK's stream(), having e.g. transform() method on >> ObservableList, that would allow filtering & sorting of the list. >> The original API allowed "batch" mode, but this is now basically >> covered with List's stream(), although it's more cumbersome as you >> won't get a List directly of a Stream, not to mention ObservableList, >> which is what you need to pass as a model to various controls, like >> TableView. >> Still, I'm not in favour of having this also in FX, but maybe >> something like Iterable to ObservableList conversion method would >> ease the FX development when using JDK 8 steams... >> >> I want to keep TransformationList to serve both as a common parent >> for all current and future "transformation" lists, but also returning >> TransformationList on transform() call, having methods like >> filtered() and sorted() directly on the TransformationList. >> >> So overall, the new API would look like this: >> >> public abstract class TransformationList implements >> ObservableList { >> >> protected TransformationList(ObservableList source); >> >> public final ObservableList getDirectSource(); >> >> // The first non-transformation list in the chain. >> public final ObservableList getOriginalSource(); >> >> // Called when a change from the source is triggered. >> protected abstract void onSourceChanged(Change c); >> >> // Maps the index of this list's element to an index in the >> direct source list. >> public abstract int getSourceIndex(int index); >> >> public final int getOriginalSourceIndex(int index); >> >> public final TransformationList filtered(Predicate> E> predicate); >> >> public final TransformationList sorted(Comparator> E> comparator); >> >> } >> >> ObservableList interface would get a new defender method: >> >> public TransformationList transform(); >> >> this would return TransformationList representation of the current list. >> >> Another appoach would be to have filtered(), sorted() directly on >> ObservableList as a defender methods, which would remove the >> necessity of calling transform() before filtered()/sorted(), but I >> find the first one more consistent with JDK API. >> >> Any comments? >> >> Thanks, >> -Martin >> > -Martin From hang.vo at oracle.com Thu Jan 3 01:32:33 2013 From: hang.vo at oracle.com (hang.vo at oracle.com) Date: Thu, 03 Jan 2013 09:32:33 +0000 Subject: hg: openjfx/8/graphics/rt: 4 new changesets Message-ID: <20130103093240.089FF474E6@hg.openjdk.java.net> Changeset: 5b43baa8b890 Author: Martin Sladecek Date: 2013-01-03 10:26 +0100 URL: http://hg.openjdk.java.net/openjfx/8/graphics/rt/rev/5b43baa8b890 RT-26990 InputMethodEvent not serializable ! javafx-ui-common/src/javafx/scene/input/InputMethodEvent.java Changeset: f74854b6ca23 Author: Martin Sladecek Date: 2013-01-03 10:27 +0100 URL: http://hg.openjdk.java.net/openjfx/8/graphics/rt/rev/f74854b6ca23 merge Changeset: bd243dc94703 Author: tb115823 Date: 2013-01-03 10:27 +0100 URL: http://hg.openjdk.java.net/openjfx/8/graphics/rt/rev/bd243dc94703 RT-23510 ClassNotFoundException in BeanAdapter over WebStart ! javafx-fxml/src/com/sun/javafx/fxml/BeanAdapter.java Changeset: 044e54a48688 Author: tb115823 Date: 2013-01-03 10:30 +0100 URL: http://hg.openjdk.java.net/openjfx/8/graphics/rt/rev/044e54a48688 Automated merge with ssh://jfxsrc.us.oracle.com//javafx/8.0/scrum/graphics/jfx//rt From lehmann at media-interactive.de Thu Jan 3 02:28:34 2013 From: lehmann at media-interactive.de (Werner Lehmann) Date: Thu, 3 Jan 2013 11:28:34 +0100 Subject: JFXPanel In-Reply-To: <3CA3A1F4-78E4-49DE-B4EC-484A82AE1930@gmail.com> References: <50CB519F.9090302@media-interactive.de> <50CEFA07.2090104@oracle.com> <50D43163.1060308@oracle.com> <3593BB23-A90A-4333-8403-0604B32B8503@gmail.com> <50D45F75.7030602@oracle.com> <854A71FD-AEE4-4AFC-B4CB-5DBFC1A6ACCD@gmail.com> <50D82BEF.3090205@oracle.com> <50E47BAB.8070403@media-interactive.de> <3CA3A1F4-78E4-49DE-B4EC-484A82AE1930@gmail.com> Message-ID: <50E55D52.5050703@media-interactive.de> Hi Scott, makes sense. I have to keep that in mind for next time. I guess there also has to be some code for common dialog tasks, e.g. - show dialog centered on app or on parent window - modal or modeless - standard handling of ok/cancel/etc buttons (e.g. know when to close the dialog) - data validation before close - pass a dialog result to the caller This is not rocket science but I very much would like to see some standard API for that. Maybe it even makes sense to have skeleton JDialog/Stage classes which bring their own set of buttons. Otherwise you have this ok button in the JFXPanel node but the JDialog does not know when it was clicked. Werner On 02.01.2013 20:06, Scott Palmer wrote: > I intend to pursue this by creating some helper methods to show a > dialog containing a single Parent node. Depending on the parent > object for the dialog it would automatically wrap the node in a > JFXPanel and use a JDialog, or use a Stage. That way I keep the ugly > stuff in one place and don't have to revisit all those dialogs. From hang.vo at oracle.com Thu Jan 3 02:47:20 2013 From: hang.vo at oracle.com (hang.vo at oracle.com) Date: Thu, 03 Jan 2013 10:47:20 +0000 Subject: hg: openjfx/8/graphics/rt: 2 new changesets Message-ID: <20130103104724.9A2A5474E9@hg.openjdk.java.net> Changeset: 637214644dc8 Author: Milan Kubec Date: 2013-01-03 09:18 +0000 URL: http://hg.openjdk.java.net/openjfx/8/graphics/rt/rev/637214644dc8 fx:id is set as value for Node.id only if Node.id was not previously set during processing of start element attributes; id renamed to fx_id to lessen confusion ! javafx-fxml/src/javafx/fxml/FXMLLoader.java Changeset: 1b7e12459a11 Author: Milan Kubec Date: 2013-01-03 10:39 +0000 URL: http://hg.openjdk.java.net/openjfx/8/graphics/rt/rev/1b7e12459a11 Automated merge with ssh://jfxsrc.us.oracle.com//javafx/8.0/scrum/graphics/jfx////rt From tom.schindl at bestsolution.at Thu Jan 3 03:16:31 2013 From: tom.schindl at bestsolution.at (Tom Schindl) Date: Thu, 03 Jan 2013 12:16:31 +0100 Subject: hg: openjfx/8/graphics/rt: 2 new changesets In-Reply-To: <20130103104724.9A2A5474E9@hg.openjdk.java.net> References: <20130103104724.9A2A5474E9@hg.openjdk.java.net> Message-ID: <50E5688F.6030707@bestsolution.at> Hi, I wonder if translating fx:id to Node.setId() is a good idea (it was this way in 2.x, but changed in 8.x until this commit if i read it get correctly). One could have argued that this is a regression - although I think fx:id has never been speced to set the Node.id-attribute - but I personally liked the change because fx:id should only bring something into the namespace so that it could be injected into the controller. Tom Am 03.01.13 11:47, schrieb hang.vo at oracle.com: > Changeset: 637214644dc8 > Author: Milan Kubec > Date: 2013-01-03 09:18 +0000 > URL: http://hg.openjdk.java.net/openjfx/8/graphics/rt/rev/637214644dc8 > > fx:id is set as value for Node.id only if Node.id was not previously set during processing of start element attributes; id renamed to fx_id to lessen confusion > > ! javafx-fxml/src/javafx/fxml/FXMLLoader.java > > Changeset: 1b7e12459a11 > Author: Milan Kubec > Date: 2013-01-03 10:39 +0000 > URL: http://hg.openjdk.java.net/openjfx/8/graphics/rt/rev/1b7e12459a11 > > Automated merge with ssh://jfxsrc.us.oracle.com//javafx/8.0/scrum/graphics/jfx////rt > > -- B e s t S o l u t i o n . a t EDV Systemhaus GmbH ------------------------------------------------------------------------ tom schindl gesch?ftsf?hrer/CEO ------------------------------------------------------------------------ eduard-bodem-gasse 5-7/1 A-6020 innsbruck fax ++43 512 935833 http://www.BestSolution.at phone ++43 512 935834 From milan.kubec at oracle.com Thu Jan 3 04:02:23 2013 From: milan.kubec at oracle.com (Milan Kubec) Date: Thu, 03 Jan 2013 13:02:23 +0100 Subject: hg: openjfx/8/graphics/rt: 2 new changesets In-Reply-To: <50E5688F.6030707@bestsolution.at> References: <20130103104724.9A2A5474E9@hg.openjdk.java.net> <50E5688F.6030707@bestsolution.at> Message-ID: <50E5734F.1040002@oracle.com> Hello, see following discussion: http://javafx-jira.kenai.com/browse/RT-25795 I personally thought that behavior in 2.x was not correct, but the document mentioned in the issue says it's copied to Node.id and SceneBuilder has already build some fuctionality around it, so it must be treated as a contract. The behavior was restored already by rollback of fix for issue http://javafx-jira.kenai.com/browse/RT-23519 and this fix is about fx:id overriding Node.id. Milan Dne 3.1.2013 12:16, Tom Schindl napsal(a): > Hi, > > I wonder if translating fx:id to Node.setId() is a good idea (it was > this way in 2.x, but changed in 8.x until this commit if i read it get > correctly). > > One could have argued that this is a regression - although I think fx:id > has never been speced to set the Node.id-attribute - but I personally > liked the change because fx:id should only bring something into the > namespace so that it could be injected into the controller. > > Tom > > Am 03.01.13 11:47, schrieb hang.vo at oracle.com: >> Changeset: 637214644dc8 >> Author: Milan Kubec >> Date: 2013-01-03 09:18 +0000 >> URL: http://hg.openjdk.java.net/openjfx/8/graphics/rt/rev/637214644dc8 >> >> fx:id is set as value for Node.id only if Node.id was not previously set during processing of start element attributes; id renamed to fx_id to lessen confusion >> >> ! javafx-fxml/src/javafx/fxml/FXMLLoader.java >> >> Changeset: 1b7e12459a11 >> Author: Milan Kubec >> Date: 2013-01-03 10:39 +0000 >> URL: http://hg.openjdk.java.net/openjfx/8/graphics/rt/rev/1b7e12459a11 >> >> Automated merge with ssh://jfxsrc.us.oracle.com//javafx/8.0/scrum/graphics/jfx////rt >> >> > From tom.schindl at bestsolution.at Thu Jan 3 04:10:28 2013 From: tom.schindl at bestsolution.at (Tom Schindl) Date: Thu, 03 Jan 2013 13:10:28 +0100 Subject: hg: openjfx/8/graphics/rt: 2 new changesets In-Reply-To: <50E5734F.1040002@oracle.com> References: <20130103104724.9A2A5474E9@hg.openjdk.java.net> <50E5688F.6030707@bestsolution.at> <50E5734F.1040002@oracle.com> Message-ID: <50E57534.3070800@bestsolution.at> Hi Milan, Looks like this JIRA is not public - if it was documented that fx:id is copied to id then I guess we have to live with what we both think is wrong. Tom Am 03.01.13 13:02, schrieb Milan Kubec: > Hello, > see following discussion: > http://javafx-jira.kenai.com/browse/RT-25795 > > I personally thought that behavior in 2.x was not correct, but the > document mentioned in the issue says it's copied to Node.id and > SceneBuilder has already build some fuctionality around it, so it must > be treated as a contract. > > The behavior was restored already by rollback of fix for issue > http://javafx-jira.kenai.com/browse/RT-23519 and this fix is about fx:id > overriding Node.id. > > Milan > > > Dne 3.1.2013 12:16, Tom Schindl napsal(a): >> Hi, >> >> I wonder if translating fx:id to Node.setId() is a good idea (it was >> this way in 2.x, but changed in 8.x until this commit if i read it get >> correctly). >> >> One could have argued that this is a regression - although I think fx:id >> has never been speced to set the Node.id-attribute - but I personally >> liked the change because fx:id should only bring something into the >> namespace so that it could be injected into the controller. >> >> Tom >> >> Am 03.01.13 11:47, schrieb hang.vo at oracle.com: >>> Changeset: 637214644dc8 >>> Author: Milan Kubec >>> Date: 2013-01-03 09:18 +0000 >>> URL: http://hg.openjdk.java.net/openjfx/8/graphics/rt/rev/637214644dc8 >>> >>> fx:id is set as value for Node.id only if Node.id was not previously set during processing of start element attributes; id renamed to fx_id to lessen confusion >>> >>> ! javafx-fxml/src/javafx/fxml/FXMLLoader.java >>> >>> Changeset: 1b7e12459a11 >>> Author: Milan Kubec >>> Date: 2013-01-03 10:39 +0000 >>> URL: http://hg.openjdk.java.net/openjfx/8/graphics/rt/rev/1b7e12459a11 >>> >>> Automated merge with ssh://jfxsrc.us.oracle.com//javafx/8.0/scrum/graphics/jfx////rt >>> >>> >> > -- B e s t S o l u t i o n . a t EDV Systemhaus GmbH ------------------------------------------------------------------------ tom schindl gesch?ftsf?hrer/CEO ------------------------------------------------------------------------ eduard-bodem-gasse 5-7/1 A-6020 innsbruck fax ++43 512 935833 http://www.BestSolution.at phone ++43 512 935834 From pedro.duquevieira at gmail.com Thu Jan 3 04:19:44 2013 From: pedro.duquevieira at gmail.com (Pedro Duque Vieira) Date: Thu, 3 Jan 2013 12:19:44 +0000 Subject: Metro apps In-Reply-To: References: <8D05A030-259B-4CC0-8F83-274DC7406274@gmail.com> Message-ID: Lately my messages have been ignored on this mailing list by the javafx team members. Although this is very frustrating I do understand that the answers might not be obvious or that time is not your side. This question is of particular importance to me because I've been creating a metro like look and feel for JavaFX called JMetro and without guidance or knowledge of what the future may hold I might suspend further development till things get more clear. Don't take this as a rant but rather as a logical decision given the state of things (not knowing the plans of javafx on windows 8/ windows rt). Thanks, best regards, On Wed, Jan 2, 2013 at 8:50 PM, Pedro Duque Vieira < pedro.duquevieira at gmail.com> wrote: > Bring back this topic, since it hasn't yet had any response from javafx > team. > > Cheers, > > > On Thu, Dec 27, 2012 at 1:33 AM, Daniel Zwolenski wrote: > >> All good questions that I'd also like to see answered at some point. >> >> Regarding jfx apps in the windows store, my initial investigation into >> this is it should be legally and technically fine (I am no lawyer, blah, >> blah, blah) and potentially quite easy. >> >> Supporting this via the JFX maven plugin (so you'd do a mvn >> jfx:build-win-app-store and potentially a similar deploy version that did >> the upload for you) is about 4th or 5th on my todo list, which possibly >> means around feb. If anyone wants to help on this front it could be sooner >> - just shout out. >> >> Priority #1 for me though is to get the jfx packaging tools building and >> deployed into maven central. From that, everything else flows. >> >> >> On 27/12/2012, at 12:05 PM, Pedro Duque Vieira < >> pedro.duquevieira at gmail.com> wrote: >> >> >>> To do an app that has a "metro-style" UI could well just be a case of >>> skinning things differently and adding some new controls but this would >>> really only work on normal Windows (I think Windows 8 will run Java but >>> in compatibility mode). To actually run a "metro-style" app on Windows RT >>> (MS's new OS for ultra-portable computers) I think requires a port of the >>> JDK and JFX to that platform. >> >> >> Not just run on Windows RT but also on Windows 8. >> >> If compatibility mode is the only viable option for now we could still >> emulate the metro style on that mode, although I haven't thought whether >> that would be of value. >> >> There are a bunch of technical challenges with such a port I believe >>> (e.g. RT is heavily sand-boxed from the looks of it). >> >> I'm not sure but I think RT only allows for AOT like ios devices. So this >> falls under the "run javafx on tablets and mobiles" issue which Oracle >> doesn't want to disclose any more info about. >> But we also still have windows 8. >> >> One other question I have is whether it is possible to sell java apps on >> the windows store. >> >> So, in conclusion: >> >> 1. Will java apps ever run through the Start screen of windows 8 / >> windows RT (we probably won't get any answer for now on this..) >> 2. For now we can run Java on Windows 8 Desktop. Is emulating a metro >> style app, on that mode, a good idea? >> 1. If it is a good idea how would we go about doing it? Are there >> any system calls we can make to bring up things like the app toolbar or do >> we hand code that? What about the platforms standard animations and other >> stuff? >> 3. Is it now possible to sell javafx apps on the windows store? If >> not, will it be possible on the future? >> >> >> Thanks, Cheers, >> >> On Thu, Dec 27, 2012 at 12:00 AM, Daniel Zwolenski wrote: >> >>> This was also asked somewhat in that massive 'mobile' thread on the OTN >>> forum: >>> https://forums.oracle.com/forums/message.jspa?messageID=10708891#10708891 >>> >>> No response but perhaps it got lost in all the noise on that thread. >>> >>> jsmith gives some good info on the difference between Windows Metro, >>> Windows 8 and Windows RT. It's worth getting clear on the terminology since >>> it's all very messy thanks to some MS branding issues. >>> >>> >>> It would be great if someone from Oracle could clarify all this, but >>> given the xmas break I think things are a little quiet at the moment. >>> >>> >>> >>> >>> On Thu, Dec 27, 2012 at 8:57 AM, Pedro Duque Vieira < >>> pedro.duquevieira at gmail.com> wrote: >>> >>>> I'm asking this (below) because while doing a metro version of javafx >>>> controls in my project JMetro, I wonder how things like the app toolbar >>>> will be implemented, if the javafx team is already doing it and if not >>>> how >>>> should I go about doing it.. >>>> >>>> >>>> On Tue, Dec 25, 2012 at 9:23 PM, Pedro Duque Vieira < >>>> pedro.duquevieira at gmail.com> wrote: >>>> >>>> > Hi, >>>> > >>>> > Are you going to support Metro apps? That is, with all that implies: >>>> > >>>> > 1. Different type of interface >>>> > 1. full window >>>> > 2. app toolbar >>>> > 3. charms toolbar >>>> > 4. tile API: show images on start screen inside tile, >>>> > notifications, etc >>>> > 5. metro animations >>>> > 6. etc >>>> > 2. If so (answer to 1 is yes), than how are you going to implement >>>> >>>> > that? Will you code javafx versions of things like the app toolbar >>>> or are >>>> > you going to rely on system calls to make this stuff show up? >>>> (don't know >>>> > if the later option exists or is possible) >>>> > >>>> > Thanks, best regards, >>>> > >>>> > -- >>>> > Pedro Duque Vieira >>>> > >>>> >>>> >>>> >>>> -- >>>> Pedro Duque Vieira >>>> >>> >>> >> >> >> -- >> Pedro Duque Vieira >> >> > > > -- > Pedro Duque Vieira > -- Pedro Duque Vieira From milan.kubec at oracle.com Thu Jan 3 04:41:53 2013 From: milan.kubec at oracle.com (Milan Kubec) Date: Thu, 03 Jan 2013 13:41:53 +0100 Subject: hg: openjfx/8/graphics/rt: 2 new changesets In-Reply-To: <50E57534.3070800@bestsolution.at> References: <20130103104724.9A2A5474E9@hg.openjdk.java.net> <50E5688F.6030707@bestsolution.at> <50E5734F.1040002@oracle.com> <50E57534.3070800@bestsolution.at> Message-ID: <50E57C91.1020801@oracle.com> Aha, so here is the part: copying of fx:id into id is an expected behavior according to actual documentation: http://docs.oracle.com/javafx/2/api/javafx/fxml/doc-files/introduction_to_fxml.html#variable_resolution "Additionally, if the object's type defines an "id" property, this value will also be passed to the objects setId() method" Milan Dne 3.1.2013 13:10, Tom Schindl napsal(a): > Hi Milan, > > Looks like this JIRA is not public - if it was documented that fx:id is > copied to id then I guess we have to live with what we both think is wrong. > > Tom > > Am 03.01.13 13:02, schrieb Milan Kubec: >> Hello, >> see following discussion: >> http://javafx-jira.kenai.com/browse/RT-25795 >> >> I personally thought that behavior in 2.x was not correct, but the >> document mentioned in the issue says it's copied to Node.id and >> SceneBuilder has already build some fuctionality around it, so it must >> be treated as a contract. >> >> The behavior was restored already by rollback of fix for issue >> http://javafx-jira.kenai.com/browse/RT-23519 and this fix is about fx:id >> overriding Node.id. >> >> Milan >> >> >> Dne 3.1.2013 12:16, Tom Schindl napsal(a): >>> Hi, >>> >>> I wonder if translating fx:id to Node.setId() is a good idea (it was >>> this way in 2.x, but changed in 8.x until this commit if i read it get >>> correctly). >>> >>> One could have argued that this is a regression - although I think fx:id >>> has never been speced to set the Node.id-attribute - but I personally >>> liked the change because fx:id should only bring something into the >>> namespace so that it could be injected into the controller. >>> >>> Tom >>> >>> Am 03.01.13 11:47, schrieb hang.vo at oracle.com: >>>> Changeset: 637214644dc8 >>>> Author: Milan Kubec >>>> Date: 2013-01-03 09:18 +0000 >>>> URL: http://hg.openjdk.java.net/openjfx/8/graphics/rt/rev/637214644dc8 >>>> >>>> fx:id is set as value for Node.id only if Node.id was not previously set during processing of start element attributes; id renamed to fx_id to lessen confusion >>>> >>>> ! javafx-fxml/src/javafx/fxml/FXMLLoader.java >>>> >>>> Changeset: 1b7e12459a11 >>>> Author: Milan Kubec >>>> Date: 2013-01-03 10:39 +0000 >>>> URL: http://hg.openjdk.java.net/openjfx/8/graphics/rt/rev/1b7e12459a11 >>>> >>>> Automated merge with ssh://jfxsrc.us.oracle.com//javafx/8.0/scrum/graphics/jfx////rt >>>> >>>> > From james.weaver at oracle.com Thu Jan 3 05:06:27 2013 From: james.weaver at oracle.com (Jim Weaver) Date: Thu, 03 Jan 2013 08:06:27 -0500 Subject: Metro apps In-Reply-To: References: <8D05A030-259B-4CC0-8F83-274DC7406274@gmail.com> Message-ID: <50E58253.4050000@oracle.com> Hi Pedro DV. I've been running JavaFX apps on a Windows 8 (not Windows RT) tablet PC, and one of them is a Metro-styled version of Ensemble developed by David Qiao of JIDE Software (copied). See the following Devoxx JavaFX Bootstrap university session in which I do my portion of the session from the tablet: http://parleys.com/#st=5&id=3654&sl=0 Windows RT is not currently supported. I haven't tried to put any JavaFX apps in the Windows app store. With an increasing number of Windows 8 tablets available, and as a Windows 8 tablet user, I appreciate your efforts in creating Metro styling. Thanks, Jim Weaver On 1/3/13 7:19 AM, Pedro Duque Vieira wrote: > Lately my messages have been ignored on this mailing list by the javafx > team members. Although this is very frustrating I do understand that the > answers might not be obvious or that time is not your side. > > This question is of particular importance to me because I've been creating > a metro like look and feel for JavaFX called JMetro and without guidance or > knowledge of what the future may hold I might suspend further development > till things get more clear. > Don't take this as a rant but rather as a logical decision given the state > of things (not knowing the plans of javafx on windows 8/ windows rt). > > Thanks, best regards, > > On Wed, Jan 2, 2013 at 8:50 PM, Pedro Duque Vieira < > pedro.duquevieira at gmail.com> wrote: > >> Bring back this topic, since it hasn't yet had any response from javafx >> team. >> >> Cheers, >> >> >> On Thu, Dec 27, 2012 at 1:33 AM, Daniel Zwolenski wrote: >> >>> All good questions that I'd also like to see answered at some point. >>> >>> Regarding jfx apps in the windows store, my initial investigation into >>> this is it should be legally and technically fine (I am no lawyer, blah, >>> blah, blah) and potentially quite easy. >>> >>> Supporting this via the JFX maven plugin (so you'd do a mvn >>> jfx:build-win-app-store and potentially a similar deploy version that did >>> the upload for you) is about 4th or 5th on my todo list, which possibly >>> means around feb. If anyone wants to help on this front it could be sooner >>> - just shout out. >>> >>> Priority #1 for me though is to get the jfx packaging tools building and >>> deployed into maven central. From that, everything else flows. >>> >>> >>> On 27/12/2012, at 12:05 PM, Pedro Duque Vieira < >>> pedro.duquevieira at gmail.com> wrote: >>> >>> >>>> To do an app that has a "metro-style" UI could well just be a case of >>>> skinning things differently and adding some new controls but this would >>>> really only work on normal Windows (I think Windows 8 will run Java but >>>> in compatibility mode). To actually run a "metro-style" app on Windows RT >>>> (MS's new OS for ultra-portable computers) I think requires a port of the >>>> JDK and JFX to that platform. >>> >>> Not just run on Windows RT but also on Windows 8. >>> >>> If compatibility mode is the only viable option for now we could still >>> emulate the metro style on that mode, although I haven't thought whether >>> that would be of value. >>> >>> There are a bunch of technical challenges with such a port I believe >>>> (e.g. RT is heavily sand-boxed from the looks of it). >>> I'm not sure but I think RT only allows for AOT like ios devices. So this >>> falls under the "run javafx on tablets and mobiles" issue which Oracle >>> doesn't want to disclose any more info about. >>> But we also still have windows 8. >>> >>> One other question I have is whether it is possible to sell java apps on >>> the windows store. >>> >>> So, in conclusion: >>> >>> 1. Will java apps ever run through the Start screen of windows 8 / >>> windows RT (we probably won't get any answer for now on this..) >>> 2. For now we can run Java on Windows 8 Desktop. Is emulating a metro >>> style app, on that mode, a good idea? >>> 1. If it is a good idea how would we go about doing it? Are there >>> any system calls we can make to bring up things like the app toolbar or do >>> we hand code that? What about the platforms standard animations and other >>> stuff? >>> 3. Is it now possible to sell javafx apps on the windows store? If >>> not, will it be possible on the future? >>> >>> >>> Thanks, Cheers, >>> >>> On Thu, Dec 27, 2012 at 12:00 AM, Daniel Zwolenski wrote: >>> >>>> This was also asked somewhat in that massive 'mobile' thread on the OTN >>>> forum: >>>> https://forums.oracle.com/forums/message.jspa?messageID=10708891#10708891 >>>> >>>> No response but perhaps it got lost in all the noise on that thread. >>>> >>>> jsmith gives some good info on the difference between Windows Metro, >>>> Windows 8 and Windows RT. It's worth getting clear on the terminology since >>>> it's all very messy thanks to some MS branding issues. >>>> >>>> >>>> It would be great if someone from Oracle could clarify all this, but >>>> given the xmas break I think things are a little quiet at the moment. >>>> >>>> >>>> >>>> >>>> On Thu, Dec 27, 2012 at 8:57 AM, Pedro Duque Vieira < >>>> pedro.duquevieira at gmail.com> wrote: >>>> >>>>> I'm asking this (below) because while doing a metro version of javafx >>>>> controls in my project JMetro, I wonder how things like the app toolbar >>>>> will be implemented, if the javafx team is already doing it and if not >>>>> how >>>>> should I go about doing it.. >>>>> >>>>> >>>>> On Tue, Dec 25, 2012 at 9:23 PM, Pedro Duque Vieira < >>>>> pedro.duquevieira at gmail.com> wrote: >>>>> >>>>>> Hi, >>>>>> >>>>>> Are you going to support Metro apps? That is, with all that implies: >>>>>> >>>>>> 1. Different type of interface >>>>>> 1. full window >>>>>> 2. app toolbar >>>>>> 3. charms toolbar >>>>>> 4. tile API: show images on start screen inside tile, >>>>>> notifications, etc >>>>>> 5. metro animations >>>>>> 6. etc >>>>>> 2. If so (answer to 1 is yes), than how are you going to implement >>>>>> that? Will you code javafx versions of things like the app toolbar >>>>> or are >>>>>> you going to rely on system calls to make this stuff show up? >>>>> (don't know >>>>>> if the later option exists or is possible) >>>>>> >>>>>> Thanks, best regards, >>>>>> >>>>>> -- >>>>>> Pedro Duque Vieira >>>>>> >>>>> >>>>> >>>>> -- >>>>> Pedro Duque Vieira >>>>> >>>> >>> >>> -- >>> Pedro Duque Vieira >>> >>> >> >> -- >> Pedro Duque Vieira >> > > -- Regards, Jim Weaver Java Technology Ambassador Oracle Corporation james.weaver at oracle.com From hang.vo at oracle.com Thu Jan 3 06:32:32 2013 From: hang.vo at oracle.com (hang.vo at oracle.com) Date: Thu, 03 Jan 2013 14:32:32 +0000 Subject: hg: openjfx/8/graphics/rt: minor javadoc typo fixed Message-ID: <20130103143237.8CBC8474ED@hg.openjdk.java.net> Changeset: 06bd41a496fb Author: Milan Kubec Date: 2013-01-03 14:19 +0000 URL: http://hg.openjdk.java.net/openjfx/8/graphics/rt/rev/06bd41a496fb minor javadoc typo fixed ! javafx-fxml/src/javafx/fxml/FXMLLoader.java From hang.vo at oracle.com Thu Jan 3 07:32:59 2013 From: hang.vo at oracle.com (hang.vo at oracle.com) Date: Thu, 03 Jan 2013 15:32:59 +0000 Subject: hg: openjfx/8/graphics/rt: 3 new changesets Message-ID: <20130103153303.D5319474EE@hg.openjdk.java.net> Changeset: 933ca049bbb4 Author: Martin Sladecek Date: 2013-01-03 16:24 +0100 URL: http://hg.openjdk.java.net/openjfx/8/graphics/rt/rev/933ca049bbb4 RT-26580 Sequential/Parallel Transitions - negative rates in children don't work ! javafx-ui-common/src/javafx/animation/ParallelTransition.java ! javafx-ui-common/src/javafx/animation/SequentialTransition.java Changeset: deeb4e962f70 Author: Martin Sladecek Date: 2013-01-03 16:24 +0100 URL: http://hg.openjdk.java.net/openjfx/8/graphics/rt/rev/deeb4e962f70 Automated merge with file:///home/martin/work/jfx-80-sync/rt Changeset: 14c0c5871b6e Author: Martin Sladecek Date: 2013-01-03 16:25 +0100 URL: http://hg.openjdk.java.net/openjfx/8/graphics/rt/rev/14c0c5871b6e merge From swpalmer at gmail.com Thu Jan 3 08:58:17 2013 From: swpalmer at gmail.com (Scott Palmer) Date: Thu, 3 Jan 2013 11:58:17 -0500 Subject: JFXPanel In-Reply-To: <50E55D52.5050703@media-interactive.de> References: <50CB519F.9090302@media-interactive.de> <50CEFA07.2090104@oracle.com> <50D43163.1060308@oracle.com> <3593BB23-A90A-4333-8403-0604B32B8503@gmail.com> <50D45F75.7030602@oracle.com> <854A71FD-AEE4-4AFC-B4CB-5DBFC1A6ACCD@gmail.com> <50D82BEF.3090205@oracle.com> <50E47BAB.8070403@media-interactive.de> <3CA3A1F4-78E4-49DE-B4EC-484A82AE1930@gmail.com> <50E55D52.5050703@media-interactive.de> Message-ID: Yes.. I have to look again at JFXtras, to see what they already offer, but I see a need for something like a JavaFX version of JOptionPane. That way you get those default OK/Cancel buttons, the dialog result, etc. So far I'm implementing tiny bits on demand, but I need to revisit the whole problem and refactor the code. Dealing with Swing and JavaFX simultaneously can get messy which is why I'm trying got migrate my entire application as soon as practical. There still isn't a 1:1 match in JavaFX for things we are using in Swing, and JavaFX is young enough that there are still many rough edges. Scott On 2013-01-03, at 5:28 AM, Werner Lehmann wrote: > Hi Scott, > > makes sense. I have to keep that in mind for next time. I guess there also has to be some code for common dialog tasks, e.g. > > - show dialog centered on app or on parent window > - modal or modeless > - standard handling of ok/cancel/etc buttons (e.g. know when to close the dialog) > - data validation before close > - pass a dialog result to the caller > > This is not rocket science but I very much would like to see some standard API for that. Maybe it even makes sense to have skeleton JDialog/Stage classes which bring their own set of buttons. Otherwise you have this ok button in the JFXPanel node but the JDialog does not know when it was clicked. > > Werner > > On 02.01.2013 20:06, Scott Palmer wrote: >> I intend to pursue this by creating some helper methods to show a >> dialog containing a single Parent node. Depending on the parent >> object for the dialog it would automatically wrap the node in a >> JFXPanel and use a JDialog, or use a Stage. That way I keep the ugly >> stuff in one place and don't have to revisit all those dialogs. From hang.vo at oracle.com Thu Jan 3 09:02:56 2013 From: hang.vo at oracle.com (hang.vo at oracle.com) Date: Thu, 03 Jan 2013 17:02:56 +0000 Subject: hg: openjfx/8/graphics/rt: RT-27505: Unit test failures in ServiceWithSecurityManagerTest following change to use java logging Message-ID: <20130103170258.0C599474F9@hg.openjdk.java.net> Changeset: 7edd0c21ee4c Author: kcr Date: 2013-01-03 08:49 -0800 URL: http://hg.openjdk.java.net/openjfx/8/graphics/rt/rev/7edd0c21ee4c RT-27505: Unit test failures in ServiceWithSecurityManagerTest following change to use java logging ! javafx-concurrent/test/javafx/concurrent/ServiceWithSecurityManagerTest.java From pedro.duquevieira at gmail.com Thu Jan 3 09:12:53 2013 From: pedro.duquevieira at gmail.com (Pedro Duque Vieira) Date: Thu, 3 Jan 2013 17:12:53 +0000 Subject: Metro apps Message-ID: Hi Jim, Thanks for the link, unfortunately I'm not able to see the video, just a few minutes of the beginning. I guess you have to be a paid member to see it all the way through. Cheers, -- Pedro Duque Vieira From bilalsoidik at gmail.com Thu Jan 3 09:33:08 2013 From: bilalsoidik at gmail.com (Bilal Soidik) Date: Thu, 3 Jan 2013 17:33:08 +0000 Subject: JavaFX8: functional interface API for Propertys Message-ID: Hi! Just I'm asking about javafx8, it will be there an API for functional interfaces to manipulate propertys in lambda expression , like this package java.util.function that provides typing for lambda expressions or you think that it is not necessary to have it. May you give us clarification. May you also tel us about lambba expressions revolution in JavaFX8. Thank! -- *Bilal Soidiki Mpapandza* *Etudiant en Master Sp?. Qualit? du Logiciel, FS UIT* *Ing?nieur logiciel et D?veloppeur Java, C/C++,.NET et PHP* *T?l. *:*(+212) 602746546* *Blog *:* http://la-lune-1.blogspot.com * *Twitter *:* bilaalsoidik* *Skype *:* bilalsoidik* From jonathan.giles at oracle.com Thu Jan 3 09:51:57 2013 From: jonathan.giles at oracle.com (Jonathan Giles) Date: Fri, 04 Jan 2013 06:51:57 +1300 Subject: JFXPanel In-Reply-To: References: <50CB519F.9090302@media-interactive.de> <50CEFA07.2090104@oracle.com> <50D43163.1060308@oracle.com> <3593BB23-A90A-4333-8403-0604B32B8503@gmail.com> <50D45F75.7030602@oracle.com> <854A71FD-AEE4-4AFC-B4CB-5DBFC1A6ACCD@gmail.com> <50D82BEF.3090205@oracle.com> <50E47BAB.8070403@media-interactive.de> <3CA3A1F4-78E4-49DE-B4EC-484A82AE1930@gmail.com> <50E55D52.5050703@media-interactive.de> Message-ID: <50E5C53D.7000908@oracle.com> I've been wanting to do a JOptionPane-esque feature for JavaFX since at least 2.0 :-) As it happens I tend to include it in developer previews in the hope it'll be accepted, but I never seem to get any traction on it :-) So, for JavaFX 8.0 developer previews, refer to com.preview.javafx.scene.control.Dialogs for your JOptionPane-esque requirements. I must warn that I've not got permission to make this into public API, so it will more than likely be removed from JavaFX 8.0 before it ships, unfortunately. If you're using JavaFX 2.x, then you'll want to use the backport of my Dialogs class that has been done by Marco Jakob here: http://edu.makery.ch/blog/2012/10/30/javafx-2-dialogs/ -- Jonathan On 4/01/2013 5:58 a.m., Scott Palmer wrote: > Yes.. I have to look again at JFXtras, to see what they already offer, but I see a need for something like a JavaFX version of JOptionPane. That way you get those default OK/Cancel buttons, the dialog result, etc. > So far I'm implementing tiny bits on demand, but I need to revisit the whole problem and refactor the code. Dealing with Swing and JavaFX simultaneously can get messy which is why I'm trying got migrate my entire application as soon as practical. There still isn't a 1:1 match in JavaFX for things we are using in Swing, and JavaFX is young enough that there are still many rough edges. > > Scott > > On 2013-01-03, at 5:28 AM, Werner Lehmann wrote: > >> Hi Scott, >> >> makes sense. I have to keep that in mind for next time. I guess there also has to be some code for common dialog tasks, e.g. >> >> - show dialog centered on app or on parent window >> - modal or modeless >> - standard handling of ok/cancel/etc buttons (e.g. know when to close the dialog) >> - data validation before close >> - pass a dialog result to the caller >> >> This is not rocket science but I very much would like to see some standard API for that. Maybe it even makes sense to have skeleton JDialog/Stage classes which bring their own set of buttons. Otherwise you have this ok button in the JFXPanel node but the JDialog does not know when it was clicked. >> >> Werner >> >> On 02.01.2013 20:06, Scott Palmer wrote: >>> I intend to pursue this by creating some helper methods to show a >>> dialog containing a single Parent node. Depending on the parent >>> object for the dialog it would automatically wrap the node in a >>> JFXPanel and use a JDialog, or use a Stage. That way I keep the ugly >>> stuff in one place and don't have to revisit all those dialogs. From java.whoover at gmail.com Thu Jan 3 09:56:00 2013 From: java.whoover at gmail.com (Will Hoover) Date: Thu, 3 Jan 2013 12:56:00 -0500 Subject: Mac JNILIB Self-Contained DMG Message-ID: <50e5c630.07cf640a.19dd.ffff870a@mx.google.com> I would like to get some feedback on best practices for including a JNILIB in a self-contained JavaFX application (with bundled JRE using ). In Windows we can use a drop-in DLL resource by including /package/windows/runtime/jre/bin/some.dll to be included in the bundled JRE, but on a Mac I'm not sure what the correct approach would be. I was thinking of something like: ...but that seems like it would be a bit clunky. Is there a way to do this on an OSX build that is similar to the Windows approach (i.e. in /package/macosx/runtime/jre/bin/some.jnilib)? From swpalmer at gmail.com Thu Jan 3 10:44:16 2013 From: swpalmer at gmail.com (Scott Palmer) Date: Thu, 3 Jan 2013 13:44:16 -0500 Subject: JFXPanel In-Reply-To: <50E5C53D.7000908@oracle.com> References: <50CB519F.9090302@media-interactive.de> <50CEFA07.2090104@oracle.com> <50D43163.1060308@oracle.com> <3593BB23-A90A-4333-8403-0604B32B8503@gmail.com> <50D45F75.7030602@oracle.com> <854A71FD-AEE4-4AFC-B4CB-5DBFC1A6ACCD@gmail.com> <50D82BEF.3090205@oracle.com> <50E47BAB.8070403@media-interactive.de> <3CA3A1F4-78E4-49DE-B4EC-484A82AE1930@gmail.com> <50E55D52.5050703@media-interactive.de> <50E5C53D.7000908@oracle.com> Message-ID: <57EFCC39-193D-41D8-83AB-5C2C2EAF8CC2@gmail.com> Interesting, I'm not ready to try 8.0 yet, but I looked over the web page of the 2.x port. One thing that is needed and would be simple but important improvement over JOptionPane is a custom dialog with standard chic buttons (yes/no/ok/cancel) where the custom code can easily get access to the choice buttons in order to disable them, add tooltips etc. There are many cases where you want a standard Ok/Cancel dialog but you want to disable the OK button until the user has made some valid input in your custom content. You may also wish to place a tooltip on the disabled OK button to explain why it is disabled. I think a dialog that takes a Parent instead of Strings is important. Or perhaps a dialog that takes a URL to the fxml for the main content and returns an instance of the controller after the selection has been made so that the controller can be queried for information from the form. Rather than placing this stuff in an unsupported, likely-to-be-removed, package of Java 8, why not add it to JFXtras? Scott On 2013-01-03, at 12:51 PM, Jonathan Giles wrote: > I've been wanting to do a JOptionPane-esque feature for JavaFX since at least 2.0 :-) As it happens I tend to include it in developer previews in the hope it'll be accepted, but I never seem to get any traction on it :-) So, for JavaFX 8.0 developer previews, refer to com.preview.javafx.scene.control.Dialogs for your JOptionPane-esque requirements. I must warn that I've not got permission to make this into public API, so it will more than likely be removed from JavaFX 8.0 before it ships, unfortunately. > > If you're using JavaFX 2.x, then you'll want to use the backport of my Dialogs class that has been done by Marco Jakob here: > http://edu.makery.ch/blog/2012/10/30/javafx-2-dialogs/ > > -- Jonathan > > On 4/01/2013 5:58 a.m., Scott Palmer wrote: >> Yes.. I have to look again at JFXtras, to see what they already offer, but I see a need for something like a JavaFX version of JOptionPane. That way you get those default OK/Cancel buttons, the dialog result, etc. >> So far I'm implementing tiny bits on demand, but I need to revisit the whole problem and refactor the code. Dealing with Swing and JavaFX simultaneously can get messy which is why I'm trying got migrate my entire application as soon as practical. There still isn't a 1:1 match in JavaFX for things we are using in Swing, and JavaFX is young enough that there are still many rough edges. >> >> Scott >> >> On 2013-01-03, at 5:28 AM, Werner Lehmann wrote: >> >>> Hi Scott, >>> >>> makes sense. I have to keep that in mind for next time. I guess there also has to be some code for common dialog tasks, e.g. >>> >>> - show dialog centered on app or on parent window >>> - modal or modeless >>> - standard handling of ok/cancel/etc buttons (e.g. know when to close the dialog) >>> - data validation before close >>> - pass a dialog result to the caller >>> >>> This is not rocket science but I very much would like to see some standard API for that. Maybe it even makes sense to have skeleton JDialog/Stage classes which bring their own set of buttons. Otherwise you have this ok button in the JFXPanel node but the JDialog does not know when it was clicked. >>> >>> Werner >>> >>> On 02.01.2013 20:06, Scott Palmer wrote: >>>> I intend to pursue this by creating some helper methods to show a >>>> dialog containing a single Parent node. Depending on the parent >>>> object for the dialog it would automatically wrap the node in a >>>> JFXPanel and use a JDialog, or use a Stage. That way I keep the ugly >>>> stuff in one place and don't have to revisit all those dialogs. > From knut.arne.vedaa at broadpark.no Thu Jan 3 11:39:49 2013 From: knut.arne.vedaa at broadpark.no (Knut Arne Vedaa) Date: Thu, 03 Jan 2013 20:39:49 +0100 Subject: FilteredList/SortedList In-Reply-To: <50E4B329.2020406@oracle.com> References: <50E45922.6070807@oracle.com> <50E482D1.1010103@oracle.com> <50E4AE13.7050502@broadpark.no> <50E4B329.2020406@oracle.com> Message-ID: <50E5DE85.2080704@broadpark.no> > In theory this is true, but there are always edge cases. What should > happen when a user clicks on a TableColumn header and wants to modify > the sort order - do we modify the sorted lists comparator or not? If we > do, how do we return to the original state of a sorted list (we'd have > to store the comparator and reapply it - but only if the list is a > sorted list). If we do need to special case for a sorted list, how do we > know that we've got a sorted list? >> > This is another reason why TableView needs to know what kind of list it > is dealing with - wrapping a SortedList (provided by the user) in > another SortedList is redundant, and again the edge cases rear their > head... I'd say: don't special case, don't treat the items list as anything else than an ObservableList, don't try to know what you're dealing with, don't guess with the API user wants. If they provide a SortedList and you wrap it with a new SortedList there will be redundancy - but that's the user's responsibility. You provide the API, the user may use it or abuse as they wish. Let's look at a use case: Say you (as API user) have three TableViews beside each other. They are all backed by the same list, which happens to be a SortedList (for reasons unknown). You want to view them as independently sorted. If now the TableView says "aha! we already have a sorted list, so we can just use that for sorting!", obviously all views will be effected by the sorting, which is not what you want. The main problem is, of course, that the current behaviour is sort-in-place, i.e. mutation of the backing list. I think it's unavoidable to change this behaviour, and I also think that is actually a good thing, since with the current behaviour you are having a "view" mutating the user's data without the API user explicitly asking for it. If you actually *want* the TableView to be able to be a "sorter-of-data" and not just a "displayer-of-data" (optionally sorted), you could have a getSortedList() method that returns a reference to the internally sorted list. Knut Arne Vedaa From knut.arne.vedaa at broadpark.no Thu Jan 3 11:39:59 2013 From: knut.arne.vedaa at broadpark.no (Knut Arne Vedaa) Date: Thu, 03 Jan 2013 20:39:59 +0100 Subject: FilteredList/SortedList In-Reply-To: <50E54B0D.5020509@oracle.com> References: <50E45922.6070807@oracle.com> <50E482D1.1010103@oracle.com> <50E54B0D.5020509@oracle.com> Message-ID: <50E5DE8F.5030101@broadpark.no> > What about having another method for "mutable" predicates, like this? > > filtered(ObservableValue> predicate); I think this is a good solution. Knut Arne Vedaa From hang.vo at oracle.com Thu Jan 3 14:24:29 2013 From: hang.vo at oracle.com (hang.vo at oracle.com) Date: Thu, 03 Jan 2013 22:24:29 +0000 Subject: hg: openjfx/2.2.6/master/rt: Added tag 2.2.6-b08 for changeset 33c4f3579933 Message-ID: <20130103222432.E33BA47513@hg.openjdk.java.net> Changeset: 69afe259d0fe Author: hudson Date: 2013-01-03 12:29 -0800 URL: http://hg.openjdk.java.net/openjfx/2.2.6/master/rt/rev/69afe259d0fe Added tag 2.2.6-b08 for changeset 33c4f3579933 ! .hgtags From hang.vo at oracle.com Thu Jan 3 14:43:04 2013 From: hang.vo at oracle.com (hang.vo at oracle.com) Date: Thu, 03 Jan 2013 22:43:04 +0000 Subject: hg: openjfx/8/master/rt: 4 new changesets Message-ID: <20130103224311.2022C47515@hg.openjdk.java.net> Changeset: 1889ef1d7c4d Author: leifs Date: 2012-12-20 16:37 -0800 URL: http://hg.openjdk.java.net/openjfx/8/master/rt/rev/1889ef1d7c4d RT-26912: RTL orientation, resizing TableView column width got opposite result. ! javafx-ui-controls/src/com/sun/javafx/scene/control/skin/NestedTableColumnHeader.java Changeset: 3603e3ee99e2 Author: David Grieve Date: 2012-12-31 11:16 -0500 URL: http://hg.openjdk.java.net/openjfx/8/master/rt/rev/3603e3ee99e2 RT-21709 [partial]: Split StyleConverter and ParsedValue into abstract+impl so that CssMetaData can have a StyleConverter without having to drag in too much CSS implementation. ! javafx-ui-common/src/com/sun/javafx/css/CascadingStyle.java ! javafx-ui-common/src/com/sun/javafx/css/Declaration.java ! javafx-ui-common/src/com/sun/javafx/css/ParsedValue.java + javafx-ui-common/src/com/sun/javafx/css/ParsedValueImpl.java ! javafx-ui-common/src/com/sun/javafx/css/StyleConverter.java + javafx-ui-common/src/com/sun/javafx/css/StyleConverterImpl.java ! javafx-ui-common/src/com/sun/javafx/css/StyleHelper.java ! javafx-ui-common/src/com/sun/javafx/css/StyleManager.java ! javafx-ui-common/src/com/sun/javafx/css/converters/BooleanConverter.java ! javafx-ui-common/src/com/sun/javafx/css/converters/ColorConverter.java ! javafx-ui-common/src/com/sun/javafx/css/converters/CursorConverter.java ! javafx-ui-common/src/com/sun/javafx/css/converters/EffectConverter.java ! javafx-ui-common/src/com/sun/javafx/css/converters/EnumConverter.java ! javafx-ui-common/src/com/sun/javafx/css/converters/FontConverter.java ! javafx-ui-common/src/com/sun/javafx/css/converters/InsetsConverter.java ! javafx-ui-common/src/com/sun/javafx/css/converters/PaintConverter.java ! javafx-ui-common/src/com/sun/javafx/css/converters/ShapeConverter.java ! javafx-ui-common/src/com/sun/javafx/css/converters/SizeConverter.java ! javafx-ui-common/src/com/sun/javafx/css/converters/StringConverter.java ! javafx-ui-common/src/com/sun/javafx/css/converters/URLConverter.java ! javafx-ui-common/src/com/sun/javafx/css/parser/CSSParser.java ! javafx-ui-common/src/com/sun/javafx/css/parser/DeriveColorConverter.java ! javafx-ui-common/src/com/sun/javafx/css/parser/DeriveSizeConverter.java ! javafx-ui-common/src/com/sun/javafx/css/parser/LadderConverter.java ! javafx-ui-common/src/com/sun/javafx/css/parser/StopConverter.java ! javafx-ui-common/src/com/sun/javafx/scene/layout/region/BackgroundPositionConverter.java ! javafx-ui-common/src/com/sun/javafx/scene/layout/region/BackgroundSizeConverter.java ! javafx-ui-common/src/com/sun/javafx/scene/layout/region/BorderImageSliceConverter.java ! javafx-ui-common/src/com/sun/javafx/scene/layout/region/BorderImageWidthConverter.java ! javafx-ui-common/src/com/sun/javafx/scene/layout/region/BorderImageWidthsSequenceConverter.java ! javafx-ui-common/src/com/sun/javafx/scene/layout/region/BorderStrokeStyleSequenceConverter.java ! javafx-ui-common/src/com/sun/javafx/scene/layout/region/BorderStyleConverter.java ! javafx-ui-common/src/com/sun/javafx/scene/layout/region/LayeredBackgroundPositionConverter.java ! javafx-ui-common/src/com/sun/javafx/scene/layout/region/LayeredBackgroundSizeConverter.java ! javafx-ui-common/src/com/sun/javafx/scene/layout/region/LayeredBorderPaintConverter.java ! javafx-ui-common/src/com/sun/javafx/scene/layout/region/LayeredBorderStyleConverter.java ! javafx-ui-common/src/com/sun/javafx/scene/layout/region/Margins.java ! javafx-ui-common/src/com/sun/javafx/scene/layout/region/RepeatStructConverter.java ! javafx-ui-common/src/com/sun/javafx/scene/layout/region/SliceSequenceConverter.java ! javafx-ui-common/src/com/sun/javafx/scene/layout/region/StrokeBorderPaintConverter.java ! javafx-ui-common/src/javafx/scene/layout/BackgroundConverter.java ! javafx-ui-common/src/javafx/scene/layout/BorderConverter.java ! javafx-ui-common/test/unit/com/sun/javafx/css/CssMetaDataTest.java ! javafx-ui-common/test/unit/com/sun/javafx/css/DeclarationTest.java ! javafx-ui-common/test/unit/com/sun/javafx/css/Node_cssStyleMap_Test.java ! javafx-ui-common/test/unit/com/sun/javafx/css/ParsedValueTest.java ! javafx-ui-common/test/unit/com/sun/javafx/css/RuleTest.java ! javafx-ui-common/test/unit/com/sun/javafx/css/converters/URLConverterTest.java ! javafx-ui-common/test/unit/com/sun/javafx/scene/layout/region/BackgroundRepeatConverterTest.java ! javafx-ui-common/test/unit/com/sun/javafx/test/CssMethodsTestBase.java Changeset: c80842bf169a Author: David Grieve Date: 2013-01-02 10:57 -0500 URL: http://hg.openjdk.java.net/openjfx/8/master/rt/rev/c80842bf169a branch merge. Had to reslove conflicts in EffectConverter - javafx-logging/src/com/sun/javafx/logging/LoggingProxy.java - javafx-logging/src/com/sun/javafx/logging/LoggingSupport.java - javafx-logging/src/com/sun/javafx/logging/PlatformLogger.java - javafx-logging/test/com/sun/javafx/logging/CreateButNotUse.java - javafx-logging/test/com/sun/javafx/logging/ExampleUsage.java - javafx-logging/test/com/sun/javafx/logging/JustImports.java - javafx-logging/test/com/sun/javafx/logging/NoRefs.java - javafx-logging/test/com/sun/javafx/logging/PlatformLoggerTest.java ! javafx-ui-common/src/com/sun/javafx/css/StyleHelper.java ! javafx-ui-common/src/com/sun/javafx/css/StyleManager.java ! javafx-ui-common/src/com/sun/javafx/css/converters/EffectConverter.java ! javafx-ui-common/src/com/sun/javafx/css/parser/CSSParser.java Changeset: e25ee61a987d Author: hudson Date: 2013-01-03 14:35 -0800 URL: http://hg.openjdk.java.net/openjfx/8/master/rt/rev/e25ee61a987d Added tag 8.0-b71 for changeset c80842bf169a ! .hgtags From hang.vo at oracle.com Thu Jan 3 15:17:52 2013 From: hang.vo at oracle.com (hang.vo at oracle.com) Date: Thu, 03 Jan 2013 23:17:52 +0000 Subject: hg: openjfx/8/controls/rt: 11 new changesets Message-ID: <20130103231809.B328747516@hg.openjdk.java.net> Changeset: 5a8bfca33b50 Author: jgiles Date: 2013-01-03 09:45 +1300 URL: http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/5a8bfca33b50 [TEST ONLY] adding a test for TreeView getRow() ! javafx-ui-controls/test/javafx/scene/control/TreeViewTest.java Changeset: e250d9838c53 Author: jgiles Date: 2013-01-03 10:20 +1300 URL: http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/e250d9838c53 RT-26505: Allow for configurable treeColumn property on TreeTableView ! javafx-ui-controls/src/com/sun/javafx/scene/control/skin/TableRowSkinBase.java ! javafx-ui-controls/src/com/sun/javafx/scene/control/skin/TreeTableRowSkin.java ! javafx-ui-controls/src/javafx/scene/control/TreeTableView.java Changeset: d59e349b4963 Author: jgiles Date: 2013-01-03 14:13 +1300 URL: http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/d59e349b4963 RT-26743: TreeTableView (and TableView): Vertical Line looks unfinished ! javafx-ui-controls/src/com/sun/javafx/scene/control/skin/TableRowSkinBase.java Changeset: 30898a2b4367 Author: jgiles Date: 2013-01-03 14:37 +1300 URL: http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/30898a2b4367 RT-26505: Allow for configurable treeColumn property on TreeTableView (update display when tree column is changed at runtime). ! javafx-ui-controls/src/com/sun/javafx/scene/control/skin/TreeTableRowSkin.java Changeset: 4323ceace542 Author: jgiles Date: 2013-01-03 14:47 +1300 URL: http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/4323ceace542 RT-23486: TableView does not respect CONSTRAINED_RESIZE_POLICY where columns are reordered ! javafx-ui-controls/src/com/sun/javafx/scene/control/skin/TableViewSkin.java ! javafx-ui-controls/src/com/sun/javafx/scene/control/skin/TreeTableViewSkin.java Changeset: 30925f13810e Author: jgiles Date: 2013-01-04 09:06 +1300 URL: http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/30925f13810e RT-26625: [TreeView, TreeTableView] can lose arrows while scrolling ! javafx-ui-controls/src/com/sun/javafx/scene/control/skin/TableRowSkinBase.java ! javafx-ui-controls/src/com/sun/javafx/scene/control/skin/TreeCellSkin.java ! javafx-ui-controls/src/com/sun/javafx/scene/control/skin/TreeTableRowSkin.java Changeset: 3ec92a21ff66 Author: jgiles Date: 2013-01-04 09:17 +1300 URL: http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/3ec92a21ff66 RT-27043: [TreeTableView, TreeView] When showRoot is set to false, text in the child items is not aligned correctly. ! javafx-ui-controls/src/com/sun/javafx/scene/control/skin/TreeTableViewSkin.java ! javafx-ui-controls/src/com/sun/javafx/scene/control/skin/TreeViewSkin.java Changeset: bdd65f2577e8 Author: jgiles Date: 2013-01-04 09:31 +1300 URL: http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/bdd65f2577e8 RT-27166: [TreeTableView] scrollbar and header is badly aligned ! javafx-ui-controls/src/com/sun/javafx/scene/control/skin/caspian/caspian.css Changeset: a2611f14ede8 Author: jgiles Date: 2013-01-04 10:07 +1300 URL: http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/a2611f14ede8 RT-27167: [TreeTableView] autosizing for the first column is applied incorrectly: root arrows are not taken into account. ! javafx-ui-controls/src/com/sun/javafx/scene/control/skin/TableCellSkinBase.java ! javafx-ui-controls/src/com/sun/javafx/scene/control/skin/TableRowSkinBase.java ! javafx-ui-controls/src/com/sun/javafx/scene/control/skin/TreeTableCellSkin.java ! javafx-ui-controls/src/com/sun/javafx/scene/control/skin/TreeTableViewSkin.java Changeset: 39aa29468f43 Author: jgiles Date: 2013-01-04 10:55 +1300 URL: http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/39aa29468f43 RT-27169: [TreeTableView] tree structure (arrows) are not hiden, when column is too narrow. ! javafx-ui-controls/src/com/sun/javafx/scene/control/skin/TableRowSkinBase.java Changeset: 955b583b0ce5 Author: jgiles Date: 2013-01-04 11:51 +1300 URL: http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/955b583b0ce5 Automated merge with ssh://jfxsrc.us.oracle.com//javafx/8.0/scrum/controls/jfx/rt ! javafx-ui-controls/src/javafx/scene/control/TreeTableView.java From hang.vo at oracle.com Thu Jan 3 16:03:49 2013 From: hang.vo at oracle.com (hang.vo at oracle.com) Date: Fri, 04 Jan 2013 00:03:49 +0000 Subject: hg: openjfx/8/controls/rt: fix RT-27192 NullPointer in menuButton on menuItem accelerator key handler Message-ID: <20130104000351.A0CB14751A@hg.openjdk.java.net> Changeset: 02985c07385e Author: Paru Somashekar Date: 2013-01-03 15:56 -0800 URL: http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/02985c07385e fix RT-27192 NullPointer in menuButton on menuItem accelerator key handler ! javafx-ui-controls/src/com/sun/javafx/scene/control/skin/MenuButtonSkinBase.java From hang.vo at oracle.com Thu Jan 3 18:32:12 2013 From: hang.vo at oracle.com (hang.vo at oracle.com) Date: Fri, 04 Jan 2013 02:32:12 +0000 Subject: hg: openjfx/8/controls/rt: 4 new changesets Message-ID: <20130104023219.B29114751E@hg.openjdk.java.net> Changeset: faf337dd0958 Author: jgiles Date: 2013-01-04 14:16 +1300 URL: http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/faf337dd0958 RT-27077: Regression: HelloTooltip tooltip is shown in plain text. - javafx-ui-controls/src/com/sun/javafx/scene/control/skin/PopupControlSkin.java ! javafx-ui-controls/src/javafx/scene/control/PopupControl.java Changeset: 51f27cb7e5da Author: jgiles Date: 2013-01-04 14:28 +1300 URL: http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/51f27cb7e5da RT-16061: Tooltip - Remove "folded corner" Effect ! javafx-ui-controls/src/com/sun/javafx/scene/control/skin/TooltipSkin.java ! javafx-ui-controls/src/com/sun/javafx/scene/control/skin/caspian/caspian.css Changeset: 0eb2889dede0 Author: jgiles Date: 2013-01-04 15:03 +1300 URL: http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/0eb2889dede0 RT-27004: [TableView, TreeTableView] After sort node becomes invisible the header text remaines shifted. ! javafx-ui-controls/src/com/sun/javafx/scene/control/skin/TableColumnHeader.java Changeset: b0a03ab44363 Author: jgiles Date: 2013-01-04 15:21 +1300 URL: http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/b0a03ab44363 Automated merge with ssh://jfxsrc.us.oracle.com//javafx/8.0/scrum/controls/jfx/rt - javafx-ui-controls/src/com/sun/javafx/scene/control/skin/PopupControlSkin.java From hang.vo at oracle.com Thu Jan 3 19:02:59 2013 From: hang.vo at oracle.com (hang.vo at oracle.com) Date: Fri, 04 Jan 2013 03:02:59 +0000 Subject: hg: openjfx/8/controls/rt: Modena theme and test app updates Message-ID: <20130104030301.B3E2947520@hg.openjdk.java.net> Changeset: 42eb515e4bfb Author: "Jasper Potts" Date: 2013-01-03 18:59 -0800 URL: http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/42eb515e4bfb Modena theme and test app updates ! apps/experiments/Modena/nbproject/configs/Run_as_WebStart.properties ! apps/experiments/Modena/nbproject/configs/Run_in_Browser.properties ! apps/experiments/Modena/src/modena/Modena.css ! apps/experiments/Modena/src/modena/Modena.java ! apps/experiments/Modena/src/modena/SamplePage.java ! apps/experiments/Modena/src/modena/TestApp.css From jonathan.giles at oracle.com Thu Jan 3 20:08:39 2013 From: jonathan.giles at oracle.com (Jonathan Giles) Date: Fri, 04 Jan 2013 17:08:39 +1300 Subject: FilteredList/SortedList In-Reply-To: <50E54B0D.5020509@oracle.com> References: <50E45922.6070807@oracle.com> <50E482D1.1010103@oracle.com> <50E54B0D.5020509@oracle.com> Message-ID: <50E655C7.6020006@oracle.com> On 3/01/2013 10:10 p.m., Martin Sladecek wrote: >> 1) always in a sorted state > OK, this one should be simple. > > tableView.setItems(myList.transform().sorted( (o1,o2) -> > doSomeComparison(o1, o2) ); Seems reasonable. > > Now this is sorting set explicitly by the developer, I understand you > might want to do some sorting based on columns. Then you can store > "items" internally (for the original order, they won't change) and use > some different field for the actual work, doing something like > > setCurrentItems(items.transform().sorted(currentColumnComparator)); From a TableView perspective, I'm dealing in ObservableLists (not TransformationLists). I'm just wanting to clarify how you foresee things changing when this API is available. Presently when a sort occurs, I essentially create a Comparator (based on the Comparators of the sort columns), and then run FXCollections.sort(list, comparator) (or whatever the API is). This sorts the list in place. When we have transform() on all ObservableLists, is the recommended approach to always run a new list.transform().sorted(comparator) call every time the sort order changes, and then set the new result in the tableview items property? Also, I guess I can internally know that I can return to the original sort order when the tableview items list is an instance of a TransformationList, as then I can do something along the lines of tableView.setItems(tableView.getItems().getOriginalSource()). If the list is not a TransformationList, I will have to not support returning to the original sort order (as is the case now). > > To return back to the original order, this should be enough: > > setCurrentItems(items); > > To modify the table (like adding a new item), you would use items > directly. The actual position where to put the new item in "items" can > be determined by calling getOriginalSourceIndex(int index) on the > previous table item from "currentItems". > >> 2) able to filtered based on a user typing > Now this is something that was also problematic in the original API. > When the user types, the Predicate/Matcher changes, so originally we > had to keep the filteredlist reference and call > filteredList.setMatcher(matcher). As filtered list cannot rely on the > fact that the set matched by the new matcher is a subset of the > previous one, everything is processed again. Trying to create a > meaningful ListChangeListener.Change might result is a huge number of > sub-changes, so originally, I just fired a "everything was removed & > new items were added" change, which means whole table was rebuilt. If your concern is simply around the cost of rebuilding the table (rather than running the filter over all items), then I wouldn't worry about that. The TableView frequently rebuilds everything, and so that is a relatively cheap operation to perform. > > The same problems are in the new API - > * need to keep a reference to change the filter (in this case it's > the reference of the underlying list and a filtered() call on it when > the predicate changes) > * optimize cases where new predicate matches a superset/subset of the > previous predicate's set. > > What about having another method for "mutable" predicates, like this? > > filtered(ObservableValue> predicate); > > The filtered list would bind to the ObservableValue (which could be a > property, expression, etc...) and refilter on change. As the user > types, you just need to update the property with the new Predicate. Sounds reasonable, but I'm really keen to test out these ideas in a simple UI app. -- Jonathan From jonathan.giles at oracle.com Thu Jan 3 20:08:40 2013 From: jonathan.giles at oracle.com (Jonathan Giles) Date: Fri, 04 Jan 2013 17:08:40 +1300 Subject: FilteredList/SortedList In-Reply-To: <50E5DE85.2080704@broadpark.no> References: <50E45922.6070807@oracle.com> <50E482D1.1010103@oracle.com> <50E4AE13.7050502@broadpark.no> <50E4B329.2020406@oracle.com> <50E5DE85.2080704@broadpark.no> Message-ID: <50E655C8.5070807@oracle.com> On 4/01/2013 8:39 a.m., Knut Arne Vedaa wrote: > I'd say: don't special case, don't treat the items list as anything > else than an ObservableList, don't try to know what you're dealing > with, don't guess with the API user wants. If they provide a > SortedList and you wrap it with a new SortedList there will be > redundancy - but that's the user's responsibility. You provide the > API, the user may use it or abuse as they wish. When designing API it is my goal to try to give the most useful API I can. I think that, in the case of SortedList, if I can special case it to, for example, allow for returning back to an unsorted state (which is something I get asked for a lot), it is worth having it in there (rather than requiring a developer to manually watch for the tableview sortOrder list to become empty and then set the tableview items list based on the sortedList.getOriginalSource(), or, even worse in the case of ObservableList, maintain a copy of their original unsorted items list). Returning to an unsorted state when there are no columns being sorted is what a user expects, so it seems like a reasonable thing to support by default if I can? > > Let's look at a use case: > > Say you (as API user) have three TableViews beside each other. They > are all backed by the same list, which happens to be a SortedList (for > reasons unknown). You want to view them as independently sorted. If > now the TableView says "aha! we already have a sorted list, so we can > just use that for sorting!", obviously all views will be effected by > the sorting, which is not what you want. I'm not entirely clear here with what you're saying. Using the same SortedList for three TableViews (based on the current impl in 2.x) will result in the display of all three tables being synchronized when sorting happens in any one of them. I have a feeling we're saying the same thing, but I just wanted to be clear. Also, I'm not entirely sure this isn't what you'd expect. The flip side of your argument is the people who put one list into multiple tableviews and are confused when their state is not modified across all three. Personally I would probably fall into this camp. One rule we try to have in JavaFX is to not do any magic if we can help it - so wrapping a list (and presumably returning that wrapped list on getItems() calls) would be at least a little confusing (i.e. when getItems() does not necessarily equal setItems(items)). > > The main problem is, of course, that the current behaviour is > sort-in-place, i.e. mutation of the backing list. I think it's > unavoidable to change this behaviour, and I also think that is > actually a good thing, since with the current behaviour you are having > a "view" mutating the user's data without the API user explicitly > asking for it. > > If you actually *want* the TableView to be able to be a > "sorter-of-data" and not just a "displayer-of-data" (optionally > sorted), you could have a getSortedList() method that returns a > reference to the internally sorted list. Once you start having view models and data models you end up with all kinds of ugliness. For a long time TableView actually did this (before being released in 2.0). You inevitably end up with API to convert between view and data indices, and it all becomes quite painful and confusing really quickly. This was why we decided to simplify the approach, by 1) saying that, by default, the view model is the data model, and 2) moving to an approach where the separation of data and view is handled at the data structure level (e.g. ObservableList/TransformationList/SortedList/FilteredList/etc), rather than the UI control level. It was unfortunate we couldn't get the special collections into 2.0, but I'm pleased they're on their way into 8.0. Of course, my preference is to special case as little as possible - I'm just trying to work out where the edge cases may be that would require, or benefit from, special cases. -- Jonathan From hang.vo at oracle.com Thu Jan 3 21:17:15 2013 From: hang.vo at oracle.com (hang.vo at oracle.com) Date: Fri, 04 Jan 2013 05:17:15 +0000 Subject: hg: openjfx/8/controls/rt: 9 new changesets Message-ID: <20130104051731.DFD8947531@hg.openjdk.java.net> Changeset: 8d529aa163ac Author: jgiles Date: 2013-01-04 17:22 +1300 URL: http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/8d529aa163ac [Findbugs] Dead store to colorPicker in com.sun.javafx.scene.control.behavior.ColorPickerBehavior.callAction(String) ! javafx-ui-controls/src/com/sun/javafx/scene/control/behavior/ColorPickerBehavior.java Changeset: 294e7d3302ec Author: jgiles Date: 2013-01-04 17:30 +1300 URL: http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/294e7d3302ec [Findbugs] Switch statement found in com.sun.javafx.scene.control.behavior.TextAreaBehavior.mousePressed(MouseEvent) where default case is missing ! javafx-ui-controls/src/com/sun/javafx/scene/control/behavior/TextAreaBehavior.java Changeset: 8eaa6d17d913 Author: jgiles Date: 2013-01-04 17:30 +1300 URL: http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/8eaa6d17d913 [Findbugs] Switch statement found in com.sun.javafx.scene.control.behavior.TextFieldBehavior.mousePressed(MouseEvent) where default case is missing ! javafx-ui-controls/src/com/sun/javafx/scene/control/behavior/TextFieldBehavior.java Changeset: 36814b27de0e Author: jgiles Date: 2013-01-04 17:30 +1300 URL: http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/36814b27de0e [Findbugs] Field only ever set to null: com.sun.javafx.scene.control.behavior.TextFieldBehavior.scrollDirection ! javafx-ui-controls/src/com/sun/javafx/scene/control/behavior/TextFieldBehavior.java Changeset: f550745ae62f Author: jgiles Date: 2013-01-04 17:34 +1300 URL: http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/f550745ae62f [Findbugs] box isn't initialized in com.sun.javafx.scene.control.skin.CheckBoxSkin.updateChildren() when invoked from constructor for superclass ! javafx-ui-controls/src/com/sun/javafx/scene/control/skin/CheckBoxSkin.java Changeset: d951ced300ac Author: jgiles Date: 2013-01-04 17:34 +1300 URL: http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/d951ced300ac [Findbugs] Dead store to oldDefault in com.sun.javafx.scene.control.skin.ButtonSkin.setCancelButton(boolean) Dead store to oldDefault in com.sun.javafx.scene.control.skin.ButtonSkin.setDefaultButton(boolean) ! javafx-ui-controls/src/com/sun/javafx/scene/control/skin/ButtonSkin.java Changeset: 91fb933bb1d2 Author: jgiles Date: 2013-01-04 17:35 +1300 URL: http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/91fb933bb1d2 [Findbugs] Switch statement found in com.sun.javafx.scene.control.skin.ColorPalette$5.handle(KeyEvent) where default case is missing ! javafx-ui-controls/src/com/sun/javafx/scene/control/skin/ColorPalette.java Changeset: 84c256cf9366 Author: jgiles Date: 2013-01-04 17:35 +1300 URL: http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/84c256cf9366 [Findbugs] Unused field: com.sun.javafx.scene.control.skin.ColorPalette$ColorPickerGrid.owner ! javafx-ui-controls/src/com/sun/javafx/scene/control/skin/ColorPalette.java Changeset: 7eb6ab4e1510 Author: jgiles Date: 2013-01-04 18:15 +1300 URL: http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/7eb6ab4e1510 Fix build failure due to unit test failures. ! javafx-ui-controls/test/javafx/scene/control/PopupControlTest.java From hang.vo at oracle.com Thu Jan 3 21:47:01 2013 From: hang.vo at oracle.com (hang.vo at oracle.com) Date: Fri, 04 Jan 2013 05:47:01 +0000 Subject: hg: openjfx/8/controls/rt: 2 new changesets Message-ID: <20130104054704.D3F9D4753D@hg.openjdk.java.net> Changeset: e026e37b8c0b Author: jgiles Date: 2013-01-04 18:24 +1300 URL: http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/e026e37b8c0b [Findbugs] javafx.util.converter.BooleanStringConverter.fromString(String) has Boolean return type and returns explicit null ! javafx-util-converter/src/javafx/util/converter/BooleanStringConverter.java Changeset: 1c7f920c9725 Author: jgiles Date: 2013-01-04 18:24 +1300 URL: http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/1c7f920c9725 [Findbugs] javafx.util.converter.CharacterStringConverter.fromString(String) invokes inefficient new Character(char) constructor; use Character.valueOf(char) instead ! javafx-util-converter/src/javafx/util/converter/CharacterStringConverter.java From jmartine_1026 at yahoo.com Thu Jan 3 23:12:05 2013 From: jmartine_1026 at yahoo.com (Jose Martinez) Date: Thu, 3 Jan 2013 23:12:05 -0800 (PST) Subject: problems with packaging Message-ID: <1357283525.69636.YahooMailNeo@web161501.mail.bf1.yahoo.com> Hello, Tonight I attempted to repackage a new version of an old application and ran into some problems. ?First is that ANT can't detect ISCC.exe. ?It spits out the following msg: ?"Detected [iscc.exe] version 0.0 but version 5.0 is required." here is the whole msg..... Detected JavaFX Ant API version 1.2 Launching task from C:\Program Files (x86)\Java\jdk1.7.0_09\lib\ant-javafx.jar Launching task from C:\Program Files (x86)\Java\jdk1.7.0_09\lib\ant-javafx.jar Using base JDK at: C:\Program Files (x86)\Java\jdk1.7.0_09\jre ? Skip [MSI Bundler (WiX based)] due to [Can not find WiX tools (light.exe, candle.exe).] Detected [iscc.exe] version 0.0 but version 5.0 is required. ? Skip [Exe Bundler (based on Inno Setup)] due to [Can not find Inno Setup Compiler (iscc.exe).] I put the dir "C:\Program Files (x86)\Inno Setup 5" in my Path system variable. ?Hopefully I am doing something stupid on my part. Second problem: A while ago I did not like that every time I compiled it would build the Inno Setup package, so I disabled it by removing it from the Path. ?I would then just compile the .iss file that was created manually when ever I wanted to.... subsequently bypassing the first problem detailed in this email. ?The last time I compiled I was using an older version JDK_7u10-32bit. ?But I have recently gone down to JDK_7u9-32bit due to problems with u10. ?The move to u9 was a few months ago. ?But I have not tried to create a package on u9 till tonight. ?Anyways when i create the package using Inno Setup and click on the executable it creates I get the following error "This program does not support the version of Windows running on your computer." ?The installer never runs. ?Has anyone ever ran into this problem? ?I was using version 5.5.0 of Inno Setup and experienced the problem with 5.5.2 also. thank you! jose From tom.schindl at bestsolution.at Thu Jan 3 23:26:20 2013 From: tom.schindl at bestsolution.at (Tom Schindl) Date: Fri, 04 Jan 2013 08:26:20 +0100 Subject: FilteredList/SortedList In-Reply-To: <50E655C8.5070807@oracle.com> References: <50E45922.6070807@oracle.com> <50E482D1.1010103@oracle.com> <50E4AE13.7050502@broadpark.no> <50E4B329.2020406@oracle.com> <50E5DE85.2080704@broadpark.no> <50E655C8.5070807@oracle.com> Message-ID: <50E6841C.8010202@bestsolution.at> Am 04.01.13 05:08, schrieb Jonathan Giles: > On 4/01/2013 8:39 a.m., Knut Arne Vedaa wrote: >> I'd say: don't special case, don't treat the items list as anything >> else than an ObservableList, don't try to know what you're dealing >> with, don't guess with the API user wants. If they provide a >> SortedList and you wrap it with a new SortedList there will be >> redundancy - but that's the user's responsibility. You provide the >> API, the user may use it or abuse as they wish. > When designing API it is my goal to try to give the most useful API I > can. I think that, in the case of SortedList, if I can special case it > to, for example, allow for returning back to an unsorted state (which is > something I get asked for a lot), it is worth having it in there (rather > than requiring a developer to manually watch for the tableview sortOrder > list to become empty and then set the tableview items list based on the > sortedList.getOriginalSource(), or, even worse in the case of > ObservableList, maintain a copy of their original unsorted items list). > Returning to an unsorted state when there are no columns being sorted is > what a user expects, so it seems like a reasonable thing to support by > default if I can? >> >> Let's look at a use case: >> >> Say you (as API user) have three TableViews beside each other. They >> are all backed by the same list, which happens to be a SortedList (for >> reasons unknown). You want to view them as independently sorted. If >> now the TableView says "aha! we already have a sorted list, so we can >> just use that for sorting!", obviously all views will be effected by >> the sorting, which is not what you want. > I'm not entirely clear here with what you're saying. Using the same > SortedList for three TableViews (based on the current impl in 2.x) will > result in the display of all three tables being synchronized when > sorting happens in any one of them. I have a feeling we're saying the > same thing, but I just wanted to be clear. > > Also, I'm not entirely sure this isn't what you'd expect. The flip side > of your argument is the people who put one list into multiple tableviews > and are confused when their state is not modified across all three. > Personally I would probably fall into this camp. One rule we try to have > in JavaFX is to not do any magic if we can help it - so wrapping a list > (and presumably returning that wrapped list on getItems() calls) would > be at least a little confusing (i.e. when getItems() does not > necessarily equal setItems(items)). I find it really strange that TableView modifies the list I put into it when I sort it. Say I have an Domain model like this: Person { private ObservableList
addresses; } Address { private String street; .... } and I put the a persons address list into a table view, I would not expect you to modify it when the table gets sorted. I think you need to keep a sorted/filtered copy internally but leave the original list in place. BTW what would happen if I pushed an immutable-list into it, it would fail on sorting right? Tom -- B e s t S o l u t i o n . a t EDV Systemhaus GmbH ------------------------------------------------------------------------ tom schindl gesch?ftsf?hrer/CEO ------------------------------------------------------------------------ eduard-bodem-gasse 5-7/1 A-6020 innsbruck fax ++43 512 935833 http://www.BestSolution.at phone ++43 512 935834 From jonathan.giles at oracle.com Thu Jan 3 23:41:24 2013 From: jonathan.giles at oracle.com (Jonathan Giles) Date: Fri, 04 Jan 2013 20:41:24 +1300 Subject: FilteredList/SortedList In-Reply-To: <50E6841C.8010202@bestsolution.at> References: <50E45922.6070807@oracle.com> <50E482D1.1010103@oracle.com> <50E4AE13.7050502@broadpark.no> <50E4B329.2020406@oracle.com> <50E5DE85.2080704@broadpark.no> <50E655C8.5070807@oracle.com> <50E6841C.8010202@bestsolution.at> Message-ID: <50E687A4.7040304@oracle.com> > I find it really strange that TableView modifies the list I put into it > when I sort it. > > Say I have an Domain model like this: > > Person { > private ObservableList
addresses; > } > > Address { > private String street; > .... > } > > and I put the a persons address list into a table view, I would not > expect you to modify it when the table gets sorted. I think you need to > keep a sorted/filtered copy internally but leave the original list in > place. BTW what would happen if I pushed an immutable-list into it, it > would fail on sorting right? > > Tom > Yes, it was never really intended that this be the case, but unfortunately in the build-up to JavaFX 2.0 we had to remove the SortedList implementation, so the fallback was to modify in place. As with every API decision it has its pluses and minuses, and supporters and detractors. Now that it is cast in stone we can only look forward to how best to support the SortedList and FilteredList concepts in JavaFX 8.0. -- Jonathan From jmartine_1026 at yahoo.com Thu Jan 3 23:51:30 2013 From: jmartine_1026 at yahoo.com (Jose Martinez) Date: Thu, 3 Jan 2013 23:51:30 -0800 (PST) Subject: problems with packaging In-Reply-To: <1357283525.69636.YahooMailNeo@web161501.mail.bf1.yahoo.com> References: <1357283525.69636.YahooMailNeo@web161501.mail.bf1.yahoo.com> Message-ID: <1357285890.94786.YahooMailNeo@web161503.mail.bf1.yahoo.com> Both problems have been fixed by upgrading to latest JDK and Netbeans. ?I guess I should have tried that first. thanks jose ________________________________ From: Jose Martinez To: openjfx mailing list Sent: Friday, January 4, 2013 2:12 AM Subject: problems with packaging Hello, Tonight I attempted to repackage a new version of an old application and ran into some problems. ?First is that ANT can't detect ISCC.exe. ?It spits out the following msg: ?"Detected [iscc.exe] version 0.0 but version 5.0 is required." here is the whole msg..... Detected JavaFX Ant API version 1.2 Launching task from C:\Program Files (x86)\Java\jdk1.7.0_09\lib\ant-javafx.jar Launching task from C:\Program Files (x86)\Java\jdk1.7.0_09\lib\ant-javafx.jar Using base JDK at: C:\Program Files (x86)\Java\jdk1.7.0_09\jre ? Skip [MSI Bundler (WiX based)] due to [Can not find WiX tools (light.exe, candle.exe).] Detected [iscc.exe] version 0.0 but version 5.0 is required. ? Skip [Exe Bundler (based on Inno Setup)] due to [Can not find Inno Setup Compiler (iscc.exe).] I put the dir "C:\Program Files (x86)\Inno Setup 5" in my Path system variable. ?Hopefully I am doing something stupid on my part. Second problem: A while ago I did not like that every time I compiled it would build the Inno Setup package, so I disabled it by removing it from the Path. ?I would then just compile the .iss file that was created manually when ever I wanted to.... subsequently bypassing the first problem detailed in this email. ?The last time I compiled I was using an older version JDK_7u10-32bit. ?But I have recently gone down to JDK_7u9-32bit due to problems with u10. ?The move to u9 was a few months ago. ?But I have not tried to create a package on u9 till tonight. ?Anyways when i create the package using Inno Setup and click on the executable it creates I get the following error "This program does not support the version of Windows running on your computer." ?The installer never runs. ?Has anyone ever ran into this problem? ?I was using version 5.5.0 of Inno Setup and experienced the problem with 5.5.2 also. thank you! jose From martin.sladecek at oracle.com Fri Jan 4 00:30:17 2013 From: martin.sladecek at oracle.com (Martin Sladecek) Date: Fri, 04 Jan 2013 09:30:17 +0100 Subject: FilteredList/SortedList In-Reply-To: <50E655C7.6020006@oracle.com> References: <50E45922.6070807@oracle.com> <50E482D1.1010103@oracle.com> <50E54B0D.5020509@oracle.com> <50E655C7.6020006@oracle.com> Message-ID: <50E69319.8040905@oracle.com> On 01/04/2013 05:08 AM, Jonathan Giles wrote: > On 3/01/2013 10:10 p.m., Martin Sladecek wrote: >>> 1) always in a sorted state >> OK, this one should be simple. >> >> tableView.setItems(myList.transform().sorted( (o1,o2) -> >> doSomeComparison(o1, o2) ); > Seems reasonable. >> >> Now this is sorting set explicitly by the developer, I understand you >> might want to do some sorting based on columns. Then you can store >> "items" internally (for the original order, they won't change) and >> use some different field for the actual work, doing something like >> >> setCurrentItems(items.transform().sorted(currentColumnComparator)); > From a TableView perspective, I'm dealing in ObservableLists (not > TransformationLists). I'm just wanting to clarify how you foresee > things changing when this API is available. > > Presently when a sort occurs, I essentially create a Comparator (based > on the Comparators of the sort columns), and then run > FXCollections.sort(list, comparator) (or whatever the API is). This > sorts the list in place. > > When we have transform() on all ObservableLists, is the recommended > approach to always run a new list.transform().sorted(comparator) call > every time the sort order changes, and then set the new result in the > tableview items property? Yes, but that would mean you'd have to create a filtered list on top of it (again). Maybe we should also have sorted(ObservableValue> comparator) to avoid recreation of the chain when comparator/predicate changes. > > Also, I guess I can internally know that I can return to the original > sort order when the tableview items list is an instance of a > TransformationList, as then I can do something along the lines of > tableView.setItems(tableView.getItems().getOriginalSource()). If the > list is not a TransformationList, I will have to not support returning > to the original sort order (as is the case now). I think you should return to the original sort by using the list that was passed to you as "items" if it's TransformationList or not. If the developer uses a transformation list sorted by his own comparator, I don't think we should change the order to some list underneath. So thread items as ObservableList and do your transforms on top of it. If you need to undo the transform, you can get back to "items" reference to get the original sort order. Now as I think of it, getOriginalSource() and getOriginalSourceIndex(int index) might provide unexpected results in case when you called transform on some TransformationList, thinking it's just a plain ObservableList. Both can be implemented using getSourceIndex() and getDirectSource() if somebody needs it. Instead, I'd like to have something like: boolean isInTransformationChain(ObservableList list); int getSourceIndexFor(ObservableList list, int index); >> >> To return back to the original order, this should be enough: >> >> setCurrentItems(items); >> >> To modify the table (like adding a new item), you would use items >> directly. The actual position where to put the new item in "items" >> can be determined by calling getOriginalSourceIndex(int index) on the >> previous table item from "currentItems". >> >>> 2) able to filtered based on a user typing >> Now this is something that was also problematic in the original API. >> When the user types, the Predicate/Matcher changes, so originally we >> had to keep the filteredlist reference and call >> filteredList.setMatcher(matcher). As filtered list cannot rely on the >> fact that the set matched by the new matcher is a subset of the >> previous one, everything is processed again. Trying to create a >> meaningful ListChangeListener.Change might result is a huge number of >> sub-changes, so originally, I just fired a "everything was removed & >> new items were added" change, which means whole table was rebuilt. > If your concern is simply around the cost of rebuilding the table > (rather than running the filter over all items), then I wouldn't worry > about that. The TableView frequently rebuilds everything, and so that > is a relatively cheap operation to perform. >> >> The same problems are in the new API - >> * need to keep a reference to change the filter (in this case it's >> the reference of the underlying list and a filtered() call on it when >> the predicate changes) >> * optimize cases where new predicate matches a superset/subset of >> the previous predicate's set. >> >> What about having another method for "mutable" predicates, like this? >> >> filtered(ObservableValue> predicate); >> >> The filtered list would bind to the ObservableValue (which could be a >> property, expression, etc...) and refilter on change. As the user >> types, you just need to update the property with the new Predicate. > Sounds reasonable, but I'm really keen to test out these ideas in a > simple UI app. I will try to create some prototype. > > -- Jonathan > -Martin From martin.sladecek at oracle.com Fri Jan 4 01:16:26 2013 From: martin.sladecek at oracle.com (Martin Sladecek) Date: Fri, 04 Jan 2013 10:16:26 +0100 Subject: FilteredList/SortedList In-Reply-To: <50E655C8.5070807@oracle.com> References: <50E45922.6070807@oracle.com> <50E482D1.1010103@oracle.com> <50E4AE13.7050502@broadpark.no> <50E4B329.2020406@oracle.com> <50E5DE85.2080704@broadpark.no> <50E655C8.5070807@oracle.com> Message-ID: <50E69DEA.2010404@oracle.com> On 01/04/2013 05:08 AM, Jonathan Giles wrote: > > Once you start having view models and data models you end up with all > kinds of ugliness. For a long time TableView actually did this (before > being released in 2.0). You inevitably end up with API to convert > between view and data indices, and it all becomes quite painful and > confusing really quickly. This was why we decided to simplify the > approach, by 1) saying that, by default, the view model is the data > model, and 2) moving to an approach where the separation of data and > view is handled at the data structure level (e.g. > ObservableList/TransformationList/SortedList/FilteredList/etc), rather > than the UI control level. It was unfortunate we couldn't get the > special collections into 2.0, but I'm pleased they're on their way > into 8.0. I'm afraid having view and data model is inevitable for column sorting, otherwise you'd have to modify user data directly. Filtering and different kinds of sort can be done on data structure level, but for column sorting, which is a feature of TableView, you'd have to expose something like view (a TransformationList?) or and API to convert from view index to model (items) index (which would internally just call getSourceIndexFor(items, index). I understand that if you want to be backward-compatible, you have to modify "items" in place (sigh), so deprecating items and introducing set/getModel() and getView() (or index querying or whatnot...) might be necessary to get the things right. -Martin From hang.vo at oracle.com Fri Jan 4 01:47:53 2013 From: hang.vo at oracle.com (hang.vo at oracle.com) Date: Fri, 04 Jan 2013 09:47:53 +0000 Subject: hg: openjfx/8/controls/rt: Backed out changeset: e026e37b8c0b Message-ID: <20130104094757.591F04754B@hg.openjdk.java.net> Changeset: 81b9d4acd03e Author: jgiles Date: 2013-01-04 22:41 +1300 URL: http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/81b9d4acd03e Backed out changeset: e026e37b8c0b ! javafx-util-converter/src/javafx/util/converter/BooleanStringConverter.java From swpalmer at gmail.com Fri Jan 4 06:51:07 2013 From: swpalmer at gmail.com (Scott Palmer) Date: Fri, 4 Jan 2013 09:51:07 -0500 Subject: Release names Message-ID: Where do I find the secret decoder ring for the release names? "Presidio", "Lombard", "Van Ness", etc. Code names are cool and all, but only if you are in on the meaning. The best I found via Google was this http://fxexperience.com/2011/06/javafx-code-names/ which calls "Lombard" the next major release" after 2.0. But that apparently doesn't mean 2.1 or 2.2. I'm *guessing* Lombard is JavaFX 8.0? (When syncing up with JRE version numbers please don't' make the same mistake as the JRE and set the internal version number to something like 2.8.0.. Clearly 1.8.0 for JavaFX version isn't going to work :-).) The code names make browsing JIRA issues awkward for "outsiders". Even the tooltip when I hover over the "Lombard" link in JIRA issues says "Lombard Lombard feature release". Some numbers would be helpful. Scott From hang.vo at oracle.com Fri Jan 4 07:17:01 2013 From: hang.vo at oracle.com (hang.vo at oracle.com) Date: Fri, 04 Jan 2013 15:17:01 +0000 Subject: hg: openjfx/8/graphics/rt: 2 new changesets Message-ID: <20130104151705.F1A2347559@hg.openjdk.java.net> Changeset: ca40e4f085bf Author: Pavel Safrata Date: 2013-01-04 15:01 +0000 URL: http://hg.openjdk.java.net/openjfx/8/graphics/rt/rev/ca40e4f085bf RT-26629: Minor javadoc fix. ! javafx-ui-common/src/javafx/scene/Node.java Changeset: 3832fc55d108 Author: Martin Soch Date: 2013-01-04 16:04 +0100 URL: http://hg.openjdk.java.net/openjfx/8/graphics/rt/rev/3832fc55d108 - IntArgbPre from com.sun.javafx.image used wrong getter and setter - most likely typo mistake - IntArgb.ToByteBgraSameConv refactored into new file/class IntTo4ByteSameConverter - fixing tests ! javafx-ui-common/src/com/sun/javafx/image/impl/IntArgb.java ! javafx-ui-common/src/com/sun/javafx/image/impl/IntArgbPre.java + javafx-ui-common/src/com/sun/javafx/image/impl/IntTo4ByteSameConverter.java ! javafx-ui-common/test/unit/com/sun/javafx/image/ConverterTest.java From kevin.rushforth at oracle.com Fri Jan 4 07:28:14 2013 From: kevin.rushforth at oracle.com (Kevin Rushforth) Date: Fri, 04 Jan 2013 07:28:14 -0800 Subject: Release names In-Reply-To: References: Message-ID: <50E6F50E.4050408@oracle.com> I think we've posted the secret decoder ring before, but yes, Presidio==2.0 and Lombard==8 I'll leave it to Brian to answer whether we could have JIRA show additional information about a release name (we don't want to change it in JIRA since it would break all of our queries). -- Kevin Scott Palmer wrote: > Where do I find the secret decoder ring for the release names? "Presidio", "Lombard", "Van Ness", etc. Code names are cool and all, but only if you are in on the meaning. > The best I found via Google was this http://fxexperience.com/2011/06/javafx-code-names/ which calls "Lombard" the next major release" after 2.0. But that apparently doesn't mean 2.1 or 2.2. I'm *guessing* Lombard is JavaFX 8.0? (When syncing up with JRE version numbers please don't' make the same mistake as the JRE and set the internal version number to something like 2.8.0.. Clearly 1.8.0 for JavaFX version isn't going to work :-).) > > > The code names make browsing JIRA issues awkward for "outsiders". Even the tooltip when I hover over the "Lombard" link in JIRA issues says "Lombard Lombard feature release". Some numbers would be helpful. > > Scott From kevin.rushforth at oracle.com Fri Jan 4 07:53:03 2013 From: kevin.rushforth at oracle.com (Kevin Rushforth) Date: Fri, 04 Jan 2013 07:53:03 -0800 Subject: invokeAndWait In-Reply-To: References: <9AA715F3-A9CB-4789-815A-ACDF5E31142A@muenster.de> <72a3f167-2e74-4db2-9298-2ce426abe73d@me.com> Message-ID: <50E6FADF.2020901@oracle.com> Btw, if you want to implement your own, you can take a look at the runAndWait() method in PlatformImpl.java if you like. We use it internally but for the reasons Richard gave, decided not to make it public API. Here is a method based on the one in PlatformImpl if anyone is interested. -- Kevin ----------------------------------------------------------------------------------------------------- public static void runAndWait(final Runnable r) { if (Platform.isFxApplicationThread()) { try { r.run(); } catch (Throwable t) { System.err.println("Exception in runnable"); t.printStackTrace(); } } else { final CountDownLatch doneLatch = new CountDownLatch(1); Platform.runLater(new Runnable() { @Override public void run() { try { r.run(); } catch (Throwable t) { System.err.println("Exception in runnable"); t.printStackTrace(); } finally { doneLatch.countDown(); } } }); try { doneLatch.await(); } catch (InterruptedException ex) { ex.printStackTrace(); } } } ----------------------------------------------------------------------------------------------------- Mario Torre wrote: > Yeah, I fully agree with the rationale given by Richard, invokeAndWait > has been (and still is) one of the main sources of troubles for many > poorly written Java programs, is really too easy to get this done > wrong, so omitting it from the core API was a wise decision imho, > people who know what they are doing can leverage the same > functionality with little effort. > > Cheers, > Mario > > 2013/1/2 Hendrik Ebbers : >> Thanks. >> >> Am 02. Januar 2013 um 05:12 schrieb Gerrit Grunwald >> : >> >> >> Hi Hendrik, >> >> there is a comment from Richard about it that could be found here: >> >> https://forums.oracle.com/forums/thread.jspa?threadID=2370263 >> >> Cheers, >> >> Gerrit >> >> Am 01.01.2013 um 23:48 schrieb Hendrik Ebbers : >> >> Hi, >> >> I created a "invokeAndWait" method for JavaFX that is a equivalent of >> SwingUtilities.invokeAndWait(...). It will be part of DataFX. You can >> read >> about it in my blog: >> http://www.guigarage.com/2013/01/invokeandwait-for-javafx/ >> >> I ask myself why there is no "invokeAndWait" method in >> javafx.application.Platform. Is there any good reason? In swing I use >> "invokeAndWait" often and so I think it is also important for JavaFX. >> >> - Hendrik > > > From lehmann at media-interactive.de Fri Jan 4 08:51:21 2013 From: lehmann at media-interactive.de (Werner Lehmann) Date: Fri, 4 Jan 2013 17:51:21 +0100 Subject: invokeAndWait In-Reply-To: <50E6FADF.2020901@oracle.com> References: <9AA715F3-A9CB-4789-815A-ACDF5E31142A@muenster.de> <72a3f167-2e74-4db2-9298-2ce426abe73d@me.com> <50E6FADF.2020901@oracle.com> Message-ID: <50E70889.5010606@media-interactive.de> Here's another one. Similar code, with exception propagation (wrapped into a runtime exception). And yes, I have deadlocked myself already with it :-) > /** > * Runs code on the FX thread and waits for completion. This is similar to > * {@link SwingUtilities#invokeAndWait(Runnable)} which is not provided > * by the JavaFX {@link Platform}. If the runnable throws any exception it > * will be wrapped into a {@code RuntimeException} thrown by this method. > * > * @param runnable the runnable to execute on the FX thread > * @see #runAndWait(Callable) > */ > public static void runAndWait(final Runnable runnable) > { > if (Platform.isFxApplicationThread()) > try { runnable.run(); } > catch (RuntimeException e) { throw new RuntimeException("Exception in runnable: " + e.getMessage(), e); } // need to wrap a runtime exception, too, so that the actual exception is always the cause of the thrown exception > else > { > final CountDownLatch latch = new CountDownLatch(1); > final MintObjectHolder exception = new MintObjectHolder(); > Platform.runLater(new Runnable() { > @Override > public void run() > { > try { runnable.run(); } > catch (RuntimeException e) { exception.set(e); } > latch.countDown(); > } > }); > > try { latch.await(); } > catch (InterruptedException e) { throw new RuntimeException(e); } > > if (exception.get() != null) > throw new RuntimeException("Exception in runnable: " + exception.get().getMessage(), exception.get()); > } > } Same approach to support a callable instead of a runnable: > /** > * Runs code on the FX thread and waits for completion, returning the callable > * result. If the runnable throws any exception it will be wrapped into a > * {@code RuntimeException} thrown by this method. > * > * @param callable the callable to execute on the FX thread > * @see #runAndWait(Runnable) > */ > public static T runAndWait(final Callable callable) > { > if (Platform.isFxApplicationThread()) > try { return callable.call(); } > catch (Exception e) { throw new RuntimeException("Exception in callable: " + e.getMessage(), e); } > > final CountDownLatch latch = new CountDownLatch(1); > final MintObjectHolder result = new MintObjectHolder(); > final MintObjectHolder exception = new MintObjectHolder(); > Platform.runLater(new Runnable() { > @Override > public void run() > { > try { result.set(callable.call()); } > catch (Exception e) { exception.set(e); } > latch.countDown(); > } > }); > > try { latch.await(); } > catch (InterruptedException e) { throw new RuntimeException(e); } > > if (exception.get() != null) > throw new RuntimeException("Exception in callable: " + exception.get().getMessage(), exception.get()); > > return result.get(); > } And another one to have the runnable called after some delay: > /** > * Runs the provided runnable after the specified delay. The runnable > * will be executed on the FX thread. This method can be called on > * any thread. > * > * @param delay the duration to wait until starting the runnable > * @param runnable the runnable to start after a delay > */ > public static void runLater(Duration delay, final Runnable runnable) > { > final Timeline timeline = TimelineBuilder.create() > .keyFrames(new KeyFrame(delay)) > .onFinished(new EventHandler() { > @Override public void handle(ActionEvent event) { runnable.run(); } > }) > .build(); > > if (Platform.isFxApplicationThread()) > timeline.play(); > else > Platform.runLater(new Runnable() { > @Override public void run() { timeline.play(); } > }); > } The code needs the following holder class: > /** > * Holds a mutable reference. In this way the holder instance itself can be > * stored in a final variable and thus used in anonymous classes. > */ > private static final class MintObjectHolder > { > private T object; > public T get() { return object; } > public void set(T object) { this.object = object; } > } Rgds Werner From nicolas.lorain at oracle.com Fri Jan 4 12:02:44 2013 From: nicolas.lorain at oracle.com (Nicolas Lorain) Date: Fri, 04 Jan 2013 12:02:44 -0800 Subject: Metro apps In-Reply-To: References: <8D05A030-259B-4CC0-8F83-274DC7406274@gmail.com> Message-ID: <50E73564.2070509@oracle.com> As mentioned previously, JDK 7 (including JavaFX) is supported in Windows 8 Classic. Our next goal will be to add support for the Windows 8 "modern UI" (aka Metro), most likely in a JDK 8 update release (adoption of Windows 8 in the enterprise is expected to be slow). To my knowledge, you can only submit an app to the Windows store if it uses the Windows 8 modern UI API, so mimicking the modern UI for an app running on Windows 8 Classic will not make the cut. As for Windows RT support, based on the recent survey we have run and some common sense (most developers are not going to target Windows RT until it gets traction in the market place or unless they have secured a customer who has committed to Windows RT), this would have a lower level of priority than support for iOS and Android. Nicolas On 1/3/13 4:19 AM, Pedro Duque Vieira wrote: > Lately my messages have been ignored on this mailing list by the javafx > team members. Although this is very frustrating I do understand that the > answers might not be obvious or that time is not your side. > > This question is of particular importance to me because I've been creating > a metro like look and feel for JavaFX called JMetro and without guidance or > knowledge of what the future may hold I might suspend further development > till things get more clear. > Don't take this as a rant but rather as a logical decision given the state > of things (not knowing the plans of javafx on windows 8/ windows rt). > > Thanks, best regards, > > On Wed, Jan 2, 2013 at 8:50 PM, Pedro Duque Vieira < > pedro.duquevieira at gmail.com> wrote: > >> Bring back this topic, since it hasn't yet had any response from javafx >> team. >> >> Cheers, >> >> >> On Thu, Dec 27, 2012 at 1:33 AM, Daniel Zwolenski wrote: >> >>> All good questions that I'd also like to see answered at some point. >>> >>> Regarding jfx apps in the windows store, my initial investigation into >>> this is it should be legally and technically fine (I am no lawyer, blah, >>> blah, blah) and potentially quite easy. >>> >>> Supporting this via the JFX maven plugin (so you'd do a mvn >>> jfx:build-win-app-store and potentially a similar deploy version that did >>> the upload for you) is about 4th or 5th on my todo list, which possibly >>> means around feb. If anyone wants to help on this front it could be sooner >>> - just shout out. >>> >>> Priority #1 for me though is to get the jfx packaging tools building and >>> deployed into maven central. From that, everything else flows. >>> >>> >>> On 27/12/2012, at 12:05 PM, Pedro Duque Vieira < >>> pedro.duquevieira at gmail.com> wrote: >>> >>> >>>> To do an app that has a "metro-style" UI could well just be a case of >>>> skinning things differently and adding some new controls but this would >>>> really only work on normal Windows (I think Windows 8 will run Java but >>>> in compatibility mode). To actually run a "metro-style" app on Windows RT >>>> (MS's new OS for ultra-portable computers) I think requires a port of the >>>> JDK and JFX to that platform. >>> >>> Not just run on Windows RT but also on Windows 8. >>> >>> If compatibility mode is the only viable option for now we could still >>> emulate the metro style on that mode, although I haven't thought whether >>> that would be of value. >>> >>> There are a bunch of technical challenges with such a port I believe >>>> (e.g. RT is heavily sand-boxed from the looks of it). >>> I'm not sure but I think RT only allows for AOT like ios devices. So this >>> falls under the "run javafx on tablets and mobiles" issue which Oracle >>> doesn't want to disclose any more info about. >>> But we also still have windows 8. >>> >>> One other question I have is whether it is possible to sell java apps on >>> the windows store. >>> >>> So, in conclusion: >>> >>> 1. Will java apps ever run through the Start screen of windows 8 / >>> windows RT (we probably won't get any answer for now on this..) >>> 2. For now we can run Java on Windows 8 Desktop. Is emulating a metro >>> style app, on that mode, a good idea? >>> 1. If it is a good idea how would we go about doing it? Are there >>> any system calls we can make to bring up things like the app toolbar or do >>> we hand code that? What about the platforms standard animations and other >>> stuff? >>> 3. Is it now possible to sell javafx apps on the windows store? If >>> not, will it be possible on the future? >>> >>> >>> Thanks, Cheers, >>> >>> On Thu, Dec 27, 2012 at 12:00 AM, Daniel Zwolenski wrote: >>> >>>> This was also asked somewhat in that massive 'mobile' thread on the OTN >>>> forum: >>>> https://forums.oracle.com/forums/message.jspa?messageID=10708891#10708891 >>>> >>>> No response but perhaps it got lost in all the noise on that thread. >>>> >>>> jsmith gives some good info on the difference between Windows Metro, >>>> Windows 8 and Windows RT. It's worth getting clear on the terminology since >>>> it's all very messy thanks to some MS branding issues. >>>> >>>> >>>> It would be great if someone from Oracle could clarify all this, but >>>> given the xmas break I think things are a little quiet at the moment. >>>> >>>> >>>> >>>> >>>> On Thu, Dec 27, 2012 at 8:57 AM, Pedro Duque Vieira < >>>> pedro.duquevieira at gmail.com> wrote: >>>> >>>>> I'm asking this (below) because while doing a metro version of javafx >>>>> controls in my project JMetro, I wonder how things like the app toolbar >>>>> will be implemented, if the javafx team is already doing it and if not >>>>> how >>>>> should I go about doing it.. >>>>> >>>>> >>>>> On Tue, Dec 25, 2012 at 9:23 PM, Pedro Duque Vieira < >>>>> pedro.duquevieira at gmail.com> wrote: >>>>> >>>>>> Hi, >>>>>> >>>>>> Are you going to support Metro apps? That is, with all that implies: >>>>>> >>>>>> 1. Different type of interface >>>>>> 1. full window >>>>>> 2. app toolbar >>>>>> 3. charms toolbar >>>>>> 4. tile API: show images on start screen inside tile, >>>>>> notifications, etc >>>>>> 5. metro animations >>>>>> 6. etc >>>>>> 2. If so (answer to 1 is yes), than how are you going to implement >>>>>> that? Will you code javafx versions of things like the app toolbar >>>>> or are >>>>>> you going to rely on system calls to make this stuff show up? >>>>> (don't know >>>>>> if the later option exists or is possible) >>>>>> >>>>>> Thanks, best regards, >>>>>> >>>>>> -- >>>>>> Pedro Duque Vieira >>>>>> >>>>> >>>>> >>>>> -- >>>>> Pedro Duque Vieira >>>>> >>>> >>> >>> -- >>> Pedro Duque Vieira >>> >>> >> >> -- >> Pedro Duque Vieira >> > > From hang.vo at oracle.com Fri Jan 4 12:02:50 2013 From: hang.vo at oracle.com (hang.vo at oracle.com) Date: Fri, 04 Jan 2013 20:02:50 +0000 Subject: hg: openjfx/8/controls/rt: Modena theme, added page to demo app, another go at scroll bars Message-ID: <20130104200255.968C74755E@hg.openjdk.java.net> Changeset: da1162caf687 Author: "Jasper Potts" Date: 2013-01-04 12:00 -0800 URL: http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/da1162caf687 Modena theme, added page to demo app, another go at scroll bars ! apps/experiments/Modena/src/modena/Modena.css ! apps/experiments/Modena/src/modena/Modena.java ! apps/experiments/Modena/src/modena/SamplePage.java + apps/experiments/Modena/src/modena/ui-mosaic.fxml From hang.vo at oracle.com Fri Jan 4 12:17:20 2013 From: hang.vo at oracle.com (hang.vo at oracle.com) Date: Fri, 04 Jan 2013 20:17:20 +0000 Subject: hg: openjfx/8/controls/rt: Modena theme, updated sample page. Message-ID: <20130104201721.DCAA54755F@hg.openjdk.java.net> Changeset: 8af4e0ded501 Author: "Jasper Potts" Date: 2013-01-04 12:04 -0800 URL: http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/8af4e0ded501 Modena theme, updated sample page. ! apps/experiments/Modena/src/modena/Modena.css ! apps/experiments/Modena/src/modena/SamplePage.java From swpalmer at gmail.com Fri Jan 4 12:29:34 2013 From: swpalmer at gmail.com (Scott Palmer) Date: Fri, 4 Jan 2013 15:29:34 -0500 Subject: Menu Accelerators Message-ID: On a JMenuItem I can set an accelerator to be KeyEvent.VK_PLUS with a KeyEvent.CTRL_DOWN_MASK modifier. When I press CTRL+SHIFT+EQUALS, since the plus sign on a standard US keyboard is obtained by holding SHIFT while pressing the equals key. It works. If in JavaFX I use an accelerator of new KeyCodeCombination(KeyCode.PLUS, KeyCombination.CTRL_DOWN), then pressing CTRL+SHIFT+EQUALS does not activate the accelerator. Nor does pressing CTRL+The_Numeric_Keypad_PLUS. Note that there is no KeyCode specifically for the numeric keypad plus sign as far as I can tell. Bug? If I code the accelerator as CTRL+SHIFT+EQUALS it doesn't convey the same meaning (I'm using this to zoom in) and I worry that it won't make sense on non-US keyboards because the plus sign may be somewhere else. Interestingly I see KeyCode.KP_UP, KeyCode.KP_DOWN, KeyCode.KP_LEFT, KeyCode.KP_RIGHT in addition to just KeyCode.UP, KeyCode.DOWN, KeyCode.LEFT, KeyCode.RIGHT. The KP_ versions refer to "key pad" arrow keys (for when some weirdo turns off numlock). So the omission of the / * - + keys that surround the numeric keypad on a standard US keyboard seems to be an oversight. Is there an issue for this already? Scott From hang.vo at oracle.com Fri Jan 4 12:47:33 2013 From: hang.vo at oracle.com (hang.vo at oracle.com) Date: Fri, 04 Jan 2013 20:47:33 +0000 Subject: hg: openjfx/8/controls/rt: Modena theme, fixed retina switch and theme switch Message-ID: <20130104204735.261C647562@hg.openjdk.java.net> Changeset: 1664eb23626f Author: "Jasper Potts" Date: 2013-01-04 12:31 -0800 URL: http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/1664eb23626f Modena theme, fixed retina switch and theme switch ! apps/experiments/Modena/src/modena/Modena.css ! apps/experiments/Modena/src/modena/Modena.java From knut.arne.vedaa at broadpark.no Fri Jan 4 13:53:38 2013 From: knut.arne.vedaa at broadpark.no (Knut Arne Vedaa) Date: Fri, 04 Jan 2013 22:53:38 +0100 Subject: FilteredList/SortedList In-Reply-To: <50E655C8.5070807@oracle.com> References: <50E45922.6070807@oracle.com> <50E482D1.1010103@oracle.com> <50E4AE13.7050502@broadpark.no> <50E4B329.2020406@oracle.com> <50E5DE85.2080704@broadpark.no> <50E655C8.5070807@oracle.com> Message-ID: <50E74F62.5060204@broadpark.no> Jonathan Giles wrote: > When designing API it is my goal to try to give the most useful API I > can. I think that, in the case of SortedList, if I can special case it > to, for example, allow for returning back to an unsorted state (which is > something I get asked for a lot), it is worth having it in there (rather > than requiring a developer to manually watch for the tableview sortOrder > list to become empty and then set the tableview items list based on the > sortedList.getOriginalSource(), or, even worse in the case of > ObservableList, maintain a copy of their original unsorted items list). > Returning to an unsorted state when there are no columns being sorted is > what a user expects, so it seems like a reasonable thing to support by > default if I can? Yes. With the design I'd consider ideal, you'll get this (revert to unsorted state) for free, without any special casing. I'd suggest that TableView has (in kind of pseudo-code): // the original as in the current impl public ObservableList itemsList // actually a SortedList, but the API user doesn't need to know that public ObservableList sortedList // not sure if there's a reason to have this public private ObservableList displayList (Now I'm not sure if there is API for enabling/disabling sorting, couldn't find it, but I think there should be.) So: // create your observable comparator and mutate it on demand ObservableValue[Comparator] observableComparator = new ObjectBinding[Comparator] { ... // create your comparator in here } // update this whenever itemsList is set by the user sortedList = itemsList.transform.sorted(observableComparator) if (sortEnabled) displayList = sortedList else displayList = itemsList // when you want to revert to original if (revertToOriginalSort) displayList = itemsList Then the user can also user the TableView as a sort "function" with itemsList as the input and sortedList as the output. > I'm not entirely clear here with what you're saying. Using the same > SortedList for three TableViews (based on the current impl in 2.x) will > result in the display of all three tables being synchronized when > sorting happens in any one of them. I have a feeling we're saying the > same thing, but I just wanted to be clear. Yes, I was talking about a possible future API, not the current behaviour with which you wouldn't be able to achieve the use case. > Also, I'm not entirely sure this isn't what you'd expect. The flip side > of your argument is the people who put one list into multiple tableviews > and are confused when their state is not modified across all three. > Personally I would probably fall into this camp. One rule we try to have > in JavaFX is to not do any magic if we can help it - so wrapping a list > (and presumably returning that wrapped list on getItems() calls) would > be at least a little confusing (i.e. when getItems() does not > necessarily equal setItems(items)). I agree with the less magic philosophy, but I think sort-in-place is actually _more_ magic. As I sketched above, don't return the wrapped list on getItem(), return the original list there, and return the wrapped list on getSortedList() or something similarly named. > Once you start having view models and data models you end up with all > kinds of ugliness. For a long time TableView actually did this (before > being released in 2.0). You inevitably end up with API to convert > between view and data indices, and it all becomes quite painful and > confusing really quickly. This was why we decided to simplify the > approach, by 1) saying that, by default, the view model is the data > model, and 2) moving to an approach where the separation of data and > view is handled at the data structure level (e.g. > ObservableList/TransformationList/SortedList/FilteredList/etc), rather > than the UI control level. It was unfortunate we couldn't get the > special collections into 2.0, but I'm pleased they're on their way into > 8.0. > > Of course, my preference is to special case as little as possible - I'm > just trying to work out where the edge cases may be that would require, > or benefit from, special cases. I agree, and I think using SortedList the way I've sketched will get you to 2). I *think* it would be SortedList's responsibility to convert indices (i.e. if you at an item to a SortedList at a specific index, it should you where to add it (and do that) on it's source), but I'll admit I haven't thought it all the way through yet. Knut Arne Vedaa From knut.arne.vedaa at broadpark.no Fri Jan 4 13:59:54 2013 From: knut.arne.vedaa at broadpark.no (Knut Arne Vedaa) Date: Fri, 04 Jan 2013 22:59:54 +0100 Subject: FilteredList/SortedList In-Reply-To: <50E69DEA.2010404@oracle.com> References: <50E45922.6070807@oracle.com> <50E482D1.1010103@oracle.com> <50E4AE13.7050502@broadpark.no> <50E4B329.2020406@oracle.com> <50E5DE85.2080704@broadpark.no> <50E655C8.5070807@oracle.com> <50E69DEA.2010404@oracle.com> Message-ID: <50E750DA.5000203@broadpark.no> > I understand that if you want to be backward-compatible, you have to > modify "items" in place (sigh), so deprecating items and introducing > set/getModel() and getView() (or index querying or whatnot...) might be > necessary to get the things right. Please drop backwards-compatible behaviour on this one. JavaFX is new. You can break backwards-compatibility now and annoy some tens of developers, or break forwards-compatibility and annoy tens of thousands of developers for a decade. A.k.a. java.util.Date. :) Knut Arne Vedaa From hang.vo at oracle.com Fri Jan 4 17:47:23 2013 From: hang.vo at oracle.com (hang.vo at oracle.com) Date: Sat, 05 Jan 2013 01:47:23 +0000 Subject: hg: openjfx/8/graphics/rt: Fix RT-27531: Fix LauncherImpl to allow passing jar files without JavaFX-* manifest attributes Message-ID: <20130105014727.880604756B@hg.openjdk.java.net> Changeset: ff0f4ffc5735 Author: ddehaven Date: 2013-01-04 17:27 -0800 URL: http://hg.openjdk.java.net/openjfx/8/graphics/rt/rev/ff0f4ffc5735 Fix RT-27531: Fix LauncherImpl to allow passing jar files without JavaFX-* manifest attributes ! javafx-ui-common/src/com/sun/javafx/application/LauncherImpl.java From hang.vo at oracle.com Fri Jan 4 22:17:35 2013 From: hang.vo at oracle.com (hang.vo at oracle.com) Date: Sat, 05 Jan 2013 06:17:35 +0000 Subject: hg: openjfx/8/controls/rt: 2 new changesets Message-ID: <20130105061740.E6A0147574@hg.openjdk.java.net> Changeset: 263bf0a65815 Author: "Jasper Potts" Date: 2013-01-04 22:06 -0800 URL: http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/263bf0a65815 Fixed RT-27538: ProgressIndicator is not properly styleable from CSS ! javafx-ui-controls/src/com/sun/javafx/scene/control/skin/ProgressIndicatorSkin.java ! javafx-ui-controls/src/com/sun/javafx/scene/control/skin/caspian/caspian.css Changeset: 3f1a87f8b460 Author: "Jasper Potts" Date: 2013-01-04 22:06 -0800 URL: http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/3f1a87f8b460 Modena, styling for progress indicators ! apps/experiments/Modena/src/modena/Modena.css ! apps/experiments/Modena/src/modena/SamplePage.java From hang.vo at oracle.com Sun Jan 6 13:33:19 2013 From: hang.vo at oracle.com (hang.vo at oracle.com) Date: Sun, 06 Jan 2013 21:33:19 +0000 Subject: hg: openjfx/8/controls/rt: 2 new changesets Message-ID: <20130106213324.7A1D44758C@hg.openjdk.java.net> Changeset: 907061acb223 Author: "Jasper Potts" Date: 2013-01-06 13:25 -0800 URL: http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/907061acb223 Modena test app added section. ! apps/experiments/Modena/src/modena/SamplePage.java Changeset: f9854bbcd1cb Author: "Jasper Potts" Date: 2013-01-06 13:26 -0800 URL: http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/f9854bbcd1cb Fixed RT-27545: Slider Track start and end are not snapped to pixel positions ! javafx-ui-controls/src/com/sun/javafx/scene/control/skin/SliderSkin.java From tobi at ultramixer.com Mon Jan 7 00:52:50 2013 From: tobi at ultramixer.com (Tobias Bley) Date: Mon, 7 Jan 2013 09:52:50 +0100 Subject: AppBundler - support for CFBundleVersion Message-ID: <9A3399F7-FF35-4D01-A7F1-EF6411D3B1A9@ultramixer.com> Hi, the current AppBundler version doesn't support setting the CFBundleVersion. When I look at the source code (AppBundleTask) I see that the CFBundleVersion is set to "1" writeProperty(xout, "CFBundleVersion", "1"); If you like to submit an app to the MacAppStore you'll have to set the correct app version (CFBundleVersion) Best regards, Tobi From sebastian.rheinnecker at yworks.com Mon Jan 7 03:41:33 2013 From: sebastian.rheinnecker at yworks.com (Sebastian Rheinnecker) Date: Mon, 07 Jan 2013 12:41:33 +0100 Subject: JavaFX 8 and FXML DataBinding Message-ID: <50EAB46D.1090305@yworks.com> Hello, in JavaFX 2.x versions it was possible to bind data in FXML declarations like this: