{"id":50,"date":"2009-09-17T13:00:28","date_gmt":"2009-09-17T12:00:28","guid":{"rendered":"http:\/\/www.jroller.com\/peter_pilgrim\/entry\/xenondatagrid_m3_0_nelson_framework"},"modified":"2009-09-17T13:00:28","modified_gmt":"2009-09-17T12:00:28","slug":"xenondatagrid-m3-0-nelson-framework-wip","status":"publish","type":"post","link":"https:\/\/www.xenonique.co.uk\/blog\/2009\/09\/17\/xenondatagrid-m3-0-nelson-framework-wip\/","title":{"rendered":"XenonDataGrid M3.0, Nelson Framework *WIP*"},"content":{"rendered":"<h1>XenonDataGrid M3.0, Nelson Framework *WIP*<br \/>\n<\/h1>\n<p><\/p>\n<p>\nHi All \n<\/p>\n<p>\n<\/p>\n<p>For those you who listened to the <a title=\"JavaPosse\" href=\"https:\/\/javaposse.com\/\" id=\"xvaz\">JavaPosse<\/a> Podcast, <a title=\"Episode 278: &quot;What do we want from JavaFX?&quot;\" href=\"https:\/\/www.javaposse.com\/index.php?post_id=524963\" id=\"p_c3\">Episode 278: &#8220;What do we want from JavaFX?&#8221;<\/a>, thanks for all your kind comments. That episode was taken from the Posse Round Up in Crested Butte, March 2009. A lot of that discussion in the podcast is relevant to the reason why I created Nelson.\n<\/p>\n<p>\n<\/p>\n<p>I am very happy make the release <b>Milestone 3.0<\/b> release of the <a title=\"Nelson Framework JavaFX Data Grid Component\" href=\"https:\/\/kenai.com\/projects\/nelson\/pages\/Home\" id=\"y3wr\">Nelson Core JavaFX Framework and the Xenon Data Grid Component<\/a>. <br \/>\nYou can find the download nelson-core-1.0-M3.jar on Xenonique. <\/p>\n<p>You might find it easier to digest the release information by following these two <i>Camtasia<\/i> videos, a basic component feature demonstration&nbsp; and a trading records example (8 minutes and 12 minutes long respectively). I strongly recommend this, especially if you have never programmed with JavaFX before. I also recommend it if you have some experience.<\/p>\n<p>\n<object width=\"400\" height=\"300\"><param name=\"allowfullscreen\" value=\"true\" \/><param name=\"allowscriptaccess\" value=\"always\" \/><param name=\"movie\" value=\"https:\/\/vimeo.com\/moogaloop.swf?clip_id=6623152&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00adef&amp;fullscreen=1\" \/><embed src=\"https:\/\/vimeo.com\/moogaloop.swf?clip_id=6623152&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00adef&amp;fullscreen=1\" type=\"application\/x-shockwave-flash\" allowfullscreen=\"true\" allowscriptaccess=\"always\" width=\"400\" height=\"300\"><\/embed><\/object><\/p>\n<p><a href=\"https:\/\/vimeo.com\/6623152\">Nelson Framework 1.0-SNAPSHOT M3 XenonDataGrid Demo<\/a> from <a href=\"https:\/\/vimeo.com\/user405945\">peter_pilgrim<\/a> on <a href=\"https:\/\/vimeo.com\">Vimeo<\/a>.<\/p>\n<p>\n<object width=\"400\" height=\"300\"><param name=\"allowfullscreen\" value=\"true\" \/><param name=\"allowscriptaccess\" value=\"always\" \/><param name=\"movie\" value=\"https:\/\/vimeo.com\/moogaloop.swf?clip_id=6623265&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00adef&amp;fullscreen=1\" \/><embed src=\"https:\/\/vimeo.com\/moogaloop.swf?clip_id=6623265&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00adef&amp;fullscreen=1\" type=\"application\/x-shockwave-flash\" allowfullscreen=\"true\" allowscriptaccess=\"always\" width=\"400\" height=\"300\"><\/embed><\/object><\/p>\n<p><a href=\"https:\/\/vimeo.com\/6623265\">Nelson Framework 1.0-SNAPSHOT M3 XenonDataGrid Trading Records Demo<\/a> from <a href=\"https:\/\/vimeo.com\/user405945\">peter_pilgrim<\/a> on <a href=\"https:\/\/vimeo.com\">Vimeo<\/a>.<\/p>\n<h2>JNLP Examples<\/h2>\n<p><\/p>\n<h3>XenonDataGrid Application<\/h3>\n<p><a title=\"http:\/\/www.xenonsoft.com\/jws\/XDG-Example-01-1.0-M3.jnlp\" href=\"http:\/\/www.xenonsoft.com\/jws\/XDG-Example-01-1.0-M3.jnlp\" id=\"al.4\">http:\/\/www.xenonsoft.com\/jws\/XDG-Example-01-1.0-M3.jnlp<\/a><\/p>\n<div id=\"gh21\" style=\"text-align: left;\"><img style=\"width: 500px; height: 309px;\" src=\"https:\/\/docs.google.com\/File?id=df5jk3g7_308fbbvxsdz_b\"><\/div>\n<p>\nHere are some instructions on the first example.<\/p>\n<p>Using the mouse primary button, click to select a body cell, use the cursor keys to move the lead selection left, right, up or down. You will be running rudimentary keyboard navigation. Click on the corner cell, you will see the LightBox dialog component. Hover the cursor using the mouse over the header row or columns cells. You will see that you change the size of the header cell and thereby affect the layout of the body cells. Double click on the a body cell, to edit the data in that cell. Please ENTER in the editor renderer cell to complete the action. <br \/>\nFinally hold down the ALT key and then double click to select <i>all<\/i> data model cells. <\/p>\n<p><\/p>\n<h3>Big Table XenonDataGrid Application<\/h3>\n<p>http:\/\/www.xenonsoft.com\/jws\/XDG-Example-02-1.0-M3.jnlp<\/p>\n<h3>Big Table XDG Drag Cell To Scroll<\/h3>\n<p>http:\/\/www.xenonsoft.com\/jws\/XDG-Example-03-1.0-M3.jnlp<\/p>\n<h3>Big Table XDG Display Only Column Headers<\/h3>\n<p>http:\/\/www.xenonsoft.com\/jws\/XDG-Example-04-1.0-M3.jnlp<\/p>\n<h3>Big Table XDG Display Only Row Records<\/h3>\n<p>http:\/\/www.xenonsoft.com\/jws\/XDG-Example-05-1.0-M3.jnlp<\/p>\n<h3>Trading Record Example<\/h3>\n<p>Unfortunately the trading record example has a dependency on an external resource CSV file, which prevented its inclusion in this edition of this blog.<\/p>\n<div id=\"pf7q\" style=\"text-align: left;\"><img style=\"width: 500px; height: 322px;\" src=\"https:\/\/docs.google.com\/File?id=df5jk3g7_309drrr54fz_b\"><\/div>\n<p><\/p>\n<table align=\"right\" border=\"1\" cellpadding=\"5\" width=\"300\">\n<tbody>\n<tr>\n<td bgcolor=\"#e0e0ff\">\n<div id=\"x0-b\" style=\"text-align: center;\">\n<a title=\"Subscribe to my AudioBoo with iTunes\" href=\"itpc:\/\/audioboo.fm\/users\/8648\/boos.atom\"><br \/>\n<img style=\"width: 128px; height: 128px;\" src=\"https:\/\/docs.google.com\/File?id=df5jk3g7_310dc22msd9_b\"><\/a><\/div>\n<p>\n<a title=\"Subscribe to my AudioBoo with iTunes\" href=\"itpc:\/\/audioboo.fm\/users\/8648\/boos.atom\"><br \/>\nSubscribe to my AudioBoo with iTunes<\/a> on JavaFX, Java EE, Java and running a Java User Group.<\/p>\n<p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><\/p>\n<h2>About The Release<\/h2>\n<h3>\nSalient Notes<\/h3>\n<p>The <b><a title=\"XenonDataGrid\" href=\"https:\/\/www.xenonique.co.uk\/hudson\/job\/Nelson_Framework_Core_1.2\/javadoc\/com.xenonsoft.nelson.scene.layout\/com.xenonsoft.nelson.scene.layout.XenonDataGrid.html\" id=\"jvn7\">XenonDataGrid<\/a><\/b> data grid UI component is the fundamental and paramount change in this release. <\/p>\n<p>Editing is now supported. The <a title=\"DefaultSelectionStrategy\" href=\"https:\/\/www.xenonique.co.uk\/hudson\/job\/Nelson_Framework_Core_1.2\/javadoc\/com.xenonsoft.nelson.scene.layout.grid.selection\/com.xenonsoft.nelson.scene.layout.grid.selection.DefaultSelectionStrategy.html\" id=\"gp:1\">DefaultSelectionStrategy<\/a> type, which is the basic selection mechanism, has changed since Milestone 2. Now doubl-clicking on a data cell invokes editing of the user table cell,&nbsp; if it can be edited. To select all cells in the model, hold down the <i>ALT<\/i> key and then double-click on the cell. The old behaviour triple click is no longer possible, because the editor cell renderer appears on the double click in front of the renderer cell <\/p>\n<p>Component properties to control the operation of data grid component. Application programmers now have properties to control the behaviour of the data grid. <\/p>\n<ul>\n<li>&nbsp;&nbsp;&nbsp; editable<\/li>\n<li>&nbsp;&nbsp;&nbsp; enableRowResize<\/li>\n<li>&nbsp;&nbsp;&nbsp; enableColumnResize<\/li>\n<li>&nbsp;&nbsp;&nbsp; enableReorderRows<\/li>\n<li>&nbsp;&nbsp;&nbsp; enableReorderColumns<\/li>\n<\/ul>\n<p>A new type <b>XenonEditorRenderer <\/b>is a text renderer for data grid UI. This renderer is invisible when the data cell is being edited. It is the only renderer available in M3. We expect more editor renderer to appears in the next release, so that users will be change data according to the type, Boolean, Short, Integer, Long, Float, Double, BigDecimal etc..<\/p>\n<p>A new type <b>SafeTableModel <\/b>enables data cell requests to be out-of-bounds without throwing exceptions. That is if the row and column are out of bound, then this TableModelBase type does not raise IIlegalArgumentExceptions or OutOfBoundsException. <\/p>\n<p>A new type <b>TableCellModelBase <\/b>for capturing additional layout information for each data cell. This is type was proven in the Trading Records demo. So instead of storing arbitary objects in a TableModel, if the type of the cell in the user table, is type of TableCellModelBase, or mixin derived of, then the LayoutStrategyBase can use that extra information to retrieve preferred layout bounds information. (It can also put the new layout information back in, for example during a resize of a row \/ column operation).<\/p>\n<p>A new type <b>ExtendedTableCellModelBase <\/b>for capturing additional font, foreground and background fill and stroke colour information for each data cell. This is type was also proven in the Trading Records demo. This type is a sub type of TableCellModelBase provides more composite attribute information on a data cell.<\/p>\n<p>Row header and column header cells now support resizing and therefore header rows and header columns can be resized, causing the data grid to resized. This is functionality was proven in the Trading Records demo. The renderer XenonGridCellHeaderRenderer particularly now supports this functionality.<\/p>\n<p>There is a brand new cell selection range solution, which works in both user table model and render layer coordinate space. This is type was proven in the Trading Records demo. <br \/>\nThe SelectionRange relies on JavaFX Sequences, which are already optimised for memory space efficiency and language specific features such as ranges.<br \/>\nThe selection range in both spaces, solve the immediate problem, of managing discontiguous spaces when the rows and columns are reordered. <\/p>\n<p>\nA new type <b>LightBox <\/b>component enables a single child to be overlay over an existing component. The background component under the light box appear to be dimmed. This is type was proven in the Trading Records demo. <\/p>\n<p>A new type <b>LightBoxDialog <\/b>component for convenience of raising an alert. <\/p>\n<p>A new type <b>FlowLayoutStrategy<\/b> for left to right, top to bottom unrestraint layout in the Western world conventions. This strategy allows the cells to be &#8220;clipped&#8221; outside the data grid UI dimensions. This is type was proven in the Trading Records demo. <\/p>\n<p>The type <b>ProportionalResizeLayoutStrategy <\/b>supports resizable proportional layout. The layout strategy always lays out the grid cells to fit the current dimensions of the data grid UI dimensions. Bug in the lay out algorithm was fixed.<\/p>\n<p>Rudimentary keyboard navigation has been implemented in the DefaultLayoutStrategy and AbstractLayoutStrategy classes. The user can now use the cursor key to move the lead selection around the renderer cell space.<\/p>\n<p><\/p>\n<h3>Issue Tracking List<\/h3>\n<p>See JIRA on Project Kenai for a list of tracked issues <br \/>\n(<a title=\"https:\/\/kenai.com\/jira\/browse\/NELSON\" href=\"https:\/\/kenai.com\/jira\/browse\/NELSON\" id=\"nijn\">https:\/\/kenai.com\/jira\/browse\/NELSON<\/a>)<\/p>\n<p>The following task were resolved:<\/p>\n<p>\nNELSON-9&nbsp;&nbsp; &nbsp;Add Hudson Build Server<br \/>\nNELSON-8&nbsp;&nbsp; &nbsp;DataGrid should have optional header row and\/or columns<br \/>\nNELSON-6&nbsp;&nbsp; &nbsp;Selection Model during scrolling needs to perserved or destroyed<br \/>\nNELSON-3&nbsp;&nbsp; &nbsp;Allow developers to use Proportional Resize Layout Strategy<br \/>\nNELSON-2&nbsp;&nbsp; &nbsp;Allow user to edit the data inside the DataGrid<br \/>\nNELSON-1&nbsp;&nbsp; &nbsp;DataGrid component needs to be able to scroll large table models<\/p>\n<p><\/p>\n<p>\n<\/p>\n<p>\nThis is Peter Pilgrim. Out.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>XenonDataGrid M3.0, Nelson Framework *WIP* Hi All For those you who listened to the JavaPosse Podcast, Episode 278: &#8220;What do we want from JavaFX?&#8221;, thanks for all your kind comments. That episode was taken from the Posse Round Up in Crested Butte, March 2009. A lot of that discussion in the podcast is relevant to [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[4],"tags":[],"_links":{"self":[{"href":"https:\/\/www.xenonique.co.uk\/blog\/wp-json\/wp\/v2\/posts\/50"}],"collection":[{"href":"https:\/\/www.xenonique.co.uk\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.xenonique.co.uk\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.xenonique.co.uk\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.xenonique.co.uk\/blog\/wp-json\/wp\/v2\/comments?post=50"}],"version-history":[{"count":0,"href":"https:\/\/www.xenonique.co.uk\/blog\/wp-json\/wp\/v2\/posts\/50\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.xenonique.co.uk\/blog\/wp-json\/wp\/v2\/media?parent=50"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.xenonique.co.uk\/blog\/wp-json\/wp\/v2\/categories?post=50"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.xenonique.co.uk\/blog\/wp-json\/wp\/v2\/tags?post=50"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}