<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-857731092954944611</id><updated>2012-02-15T22:32:39.801-08:00</updated><title type='text'>Sage Runtime / WebTop Apps</title><subtitle type='html'>A blog for the &lt;a href="http://www.sparseware.com/sage/demos/"&gt;Sage runtime&lt;/a&gt;  (http://www.sparseware.com/sage/demos/). Sage is a Real-time Application Rendering Engine (RARE) that downloads/loads application logic (scripts, class files, binaries), wiring instructions (integration, configuration, rendering), generates and then executes the application described by those instructions, all in real-time. 

It is a browser written specifically to render desktop caliber applications.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://sagetop.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/857731092954944611/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://sagetop.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Don D</name><uri>http://www.blogger.com/profile/07674117902508438381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>6</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-857731092954944611.post-3955727382028178587</id><published>2010-07-13T15:48:00.000-07:00</published><updated>2010-07-13T20:59:14.029-07:00</updated><title type='text'></title><content type='html'>&lt;p&gt;&lt;br /&gt; Version 1.0 of &lt;a href="http://www.sparseware.com/sage/"&gt;Sage &lt;/a&gt;is finally out and there are a couple of noteworthy changes.&lt;br /&gt;&lt;/p&gt;&lt;strong&gt;All Non-OSS dependencies removed&lt;/strong&gt;&lt;br /&gt;&lt;ul style="list-style-type: square;"&gt;&lt;li&gt;Prior to v1.0 the commercially licensed &lt;a href="http://www.jidesoft.com/"&gt;JIDE&lt;/a&gt; libraries were needed to launch Sage. This is no longer the case. The only library now needed is the &lt;a href="https://jide-oss.dev.java.net/"&gt;jide-oss&lt;/a&gt;&lt;span style="text-decoration: underline;"&gt; &lt;/span&gt;library. If the basic Swing components plus jide-oss meet your needs, then you are good to go. The Black Majic and Covergirls demo use this configuration. Check them out to see an example of the available functionality. Here is some of what will not be available, all specialized tables (including tree&lt;br /&gt; and property tables), JIDE specific table enhancements like header/footer tables, column/row spanning, all table editing enhancements (Sage and JIDE), specialized combo boxes ( including the date chooser and color chooser ), docking and frames, and the specialized tab panes (outlook, floor, document).&lt;/li&gt;&lt;/ul&gt;&lt;strong&gt;Native Browser Support&lt;/strong&gt;&lt;br /&gt;&lt;ul style="list-style-type: square;"&gt;&lt;li&gt;Thanks to the fine work by the folks at the&lt;a href="http://www.eclipse.org/swt/"&gt; SWT Project&lt;/a&gt; and Christopher Deckers &lt;a href="http://djproject.sourceforge.net/ns/"&gt;Native Swing Project&lt;/a&gt;, you can now embed the native browser in Sage apps (IE on Win32, Safari on OS X, and Firefox on Linux). The JVM property&lt;strong&gt; -DSage.webBrowser=swt&lt;/strong&gt; enables this feature and registers the appropriate mime types and viewers. &lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;strong&gt;New Default LNF&lt;/strong&gt;&lt;br /&gt;&lt;ul style="list-style-type: square;"&gt;&lt;li&gt;There is a new Default Look And Feel (LNF) which is the LNF used when you don't specify one or you use the name "Default". This is basically the System LNF on windows and Mac and the Cross Platform one on Linux with some platform specific enhancements and some standard UI properties and colors set. Using this LNF and setting the &lt;strong&gt;Sage.control&lt;/strong&gt; color property will give you nice gradients (for light colors) derived from the specified color. It will also give you the improved HTML support and nice looking combo boxes, spinners and scroll bars on non-Mac platforms.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Improved HTML Capabilities&lt;/span&gt;&lt;br /&gt; &lt;ul style="list-style-type: square;"&gt;&lt;li&gt;Hyperlinks in Table and List viewers - Table and List viewers now support hyperlinks via the default Label renderer. You can use HTML links in your table/list data and then attach a hyperlink listener the table/list. Sage will invoke the appropriate method (entered, exited, clicked) when the user interacts with a hyperlink. HTML 5 Canvas support - An HTML 5 Canvas widget has been added. This widget supports the&lt;a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html"&gt; HTMLCanvasElement&lt;/a&gt; and&lt;a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#canvasrenderingcontext2d"&gt; CanvasRenderingContext2D&lt;/a&gt;  APIs such that any code written for those APIs will run unmodified in Sage. You can also retrieve a CanvasRenderingContext2D handle that will allow you to draw on the background of any Sage widget via this API. The cool thing about supporting this API is not the functionality it exposes (you already have the full Java2D API at your disposal), but the ability to leverage libraries written to this API. Supposedly Flash CS5 will emit code for the HTML5 Canvas. See the Black Majic demo for a couple&lt;a href="http://www.chromeexperiments.com/"&gt; Chrome Experiments&lt;/a&gt; demos running in Sage.&lt;br /&gt; &lt;/li&gt;&lt;li&gt;HTML Lists Enhancements - The default Swing HTML list painter has been replaced so that now bulleted lists are painted properly and they scale as the font size increase. Also there are new actions for inserting lists into existing HTML text and they should work as expected (i.e. not the default Swing behavior).&lt;br /&gt; &lt;/li&gt;&lt;li&gt;Dynamic color support - You can now use any Sage color name in your HTML and style sheets. If that color is a dynamic color then the color of the rendered HTML will change whenever you update the dynamic color's value.&lt;br /&gt; &lt;/li&gt;&lt;li&gt;Enhanced support in Labels. A new UI property has be introduced (Sage.Label.useCustomEditorKit) that when set to true will allow labels to take advantage of all Sage specific HTML enhancements. This means that all global styles defined in your custom style-sheet will be utilized by labels (including dynamic colors). Labels also support hyperlinks and expose APIs to find the link or text under the mouse pointer. The Black Majic demo makes minimal use of dynamic colors and a custom style sheet. This property is automatically enabled under the default LNF&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;strong&gt;Improved Asynchronous Programming Support.&lt;/strong&gt;&lt;br /&gt;&lt;ul style="list-style-type: square;"&gt;&lt;li&gt;All runnables now support the ability to specify code that gets called when the execution of the runnable has completed, and code that gets called when the runnable is canceled. You can also be notified via the standard Java wait/notify model wen the execution is complete.&lt;/li&gt;&lt;li&gt;New APIs for the delayed retrieval of icons/images with the ability to specify the image to display while the requested image is still being loaded. The ability to isolate background loading of images such that they don't block other background tasks from running.&lt;/li&gt;&lt;li&gt;Support for animated spinners that can be displayed while background tasks are running&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;Check out the&lt;a href="http://www.facebook.com/apps/application.php?id=209315435020"&gt; Boondoggle&lt;/a&gt; Facebook application which showcases all of the new HTML enhancements (except for the Canvas) and the heavy use of the asynchronous capabilities to arbitrarily cancel pending data loads and start new ones. Even if you don't have a Facebook account you can still see some additional screenshots as the Boondoggle's page is public. Below is a screen shot of Boondoggle displaying the Facebook feed for&lt;a href="http://www.facebook.com/Nickelback?v=wall"&gt; Nickelback&lt;/a&gt;. What you are looking at is a TreeTable widget rendering the HTML(the bright white text are hyper links). This particular table also supports text selection and copying (like in a text editor). The text "&lt;span style="font-style: italic;"&gt;They have extended their Dark Horse World Tour. The next leg of the tour, produced by Live Nation, will begin on September 14 in Nashville and will run through October 30 in Las Vegas.&lt;/span&gt;" was copied and pasted into this document. This functionality is implemented in JavaScript using a custom background painter and the ability to find the text at any point in a label-based renderer.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_u1ay0GDXsMQ/TDzu7YN_58I/AAAAAAAAAAc/jjH52i8AvY8/s1600/nickleback.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 314px;" src="http://3.bp.blogspot.com/_u1ay0GDXsMQ/TDzu7YN_58I/AAAAAAAAAAc/jjH52i8AvY8/s320/nickleback.png" alt="" id="BLOGGER_PHOTO_ID_5493528349366020034" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-weight: bold;"&gt;Boondoggle Facebook Application&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/857731092954944611-3955727382028178587?l=sagetop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sagetop.blogspot.com/feeds/3955727382028178587/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=857731092954944611&amp;postID=3955727382028178587' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/857731092954944611/posts/default/3955727382028178587'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/857731092954944611/posts/default/3955727382028178587'/><link rel='alternate' type='text/html' href='http://sagetop.blogspot.com/2010/07/version-1.html' title=''/><author><name>Don D</name><uri>http://www.blogger.com/profile/07674117902508438381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_u1ay0GDXsMQ/TDzu7YN_58I/AAAAAAAAAAc/jjH52i8AvY8/s72-c/nickleback.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-857731092954944611.post-8385945398459559363</id><published>2009-08-19T14:19:00.000-07:00</published><updated>2009-08-20T09:16:42.589-07:00</updated><title type='text'></title><content type='html'>Version 0.98 (&lt;a href="http://www.sparseware.com/sage/demos/"&gt;http://www.sparseware.com/sage/demos/&lt;/a&gt;) is out. I have been busy working on a real world sage application with real requirements in order to help flesh out the sage feature set and smooth out the rough edges. I finally came to a good stopping point and can now put out a new version. There are a couple of significant new features and a couple of nice to haves. The old demos’ have been upgraded to look better/cleaner and to take advantage of some of the new features and a new demo(Black Majic) has been created to show of the flasher side of Sage. Some of the things featured in the new demo are: &lt;ul&gt;&lt;li&gt;a shaped windows using soft clipping, achieved by setting the opaque attribute to false and using a shaped border,&lt;/li&gt; &lt;li&gt;skinning via dynamic color management and combox, slider, and scrollbar customization,&lt;/li&gt; &lt;li&gt;window translucency (Disappearing act slider) ,&lt;/li&gt; &lt;li&gt;support for plugin animations (see the load animation of the Skynard panel) ,&lt;/li&gt; &lt;li&gt;and last but not least JavaFX integration via a JavaFX scene viewer for Sage  &lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Text/Icon Zooming&lt;/h3&gt;Sage now supports text and icon zooming similar to what is found in most other browsers.&lt;br /&gt;Simply call the &lt;span style="font-style: italic;"&gt;setRelativeFontSize &lt;/span&gt;method on the sage object with a value other than 1 and the application will be zoomed accordingly.&lt;br /&gt;The following JavaScript function zooms in by 10% (relative to the normal size) every time the function is called:&lt;br /&gt;&lt;pre&gt;&lt;blockquote&gt;&lt;span style="font-size:85%;"&gt; function increaseFontSize() {&lt;br /&gt;var rsize=sage.relativeFontSize&lt;br /&gt;rsize+=.1&lt;br /&gt;if(rsize&gt;3) {&lt;br /&gt; window.beep()&lt;br /&gt;}&lt;br /&gt;else {&lt;br /&gt; sage.relativeFontSize=rsize&lt;br /&gt;}&lt;br /&gt;}&lt;/span&gt;&lt;/blockquote&gt;&lt;/pre&gt;One of the problems with scaling no-vector based graphics is that you loose fidelity as you scale up. Most of the time scaling a big image down by 50% produces an image that is better looking than scaling a small image up by 100%. Whether or not you want sage to automatically scale icons during zooming is controlled via the &lt;span style="font-style: italic;"&gt;scaleIconsWithFont &lt;/span&gt;property on the application configuration object. It is defined as follows:&lt;br /&gt;&lt;pre&gt;&lt;span style="font-size:85%;"&gt;&lt;blockquote&gt;scaleIconsWithFont Boolean Default false [defaultBaseSize, defaultBaseScaleFactor, scaling="bilinear_cached"]&lt;/blockquote&gt;&lt;/span&gt;&lt;/pre&gt;The &lt;i&gt;defaultBaseSize&lt;/i&gt; and &lt;i&gt;defaultBaseScaleFactor&lt;/i&gt; attributes lets you determine the default size for your icons and the default scaling base for those icons when the relative font size is equal to 1. This allows you to use icons that are larger than the standard 16x16 and have sage scale them down to 16x16. For example, the following configuration will automatically scale all 24x24 images (that don't explicitly have a scaling base defined) down to 16x16 images when the relative font size is equal to 1.&lt;pre&gt;&lt;span style="font-size:85%;"&gt;&lt;blockquote&gt;scaleIconsWithFont: true [defaultBaseScaleFactor="0.666666666", defaultBaseSize="24x24"]&lt;/blockquote&gt;&lt;/span&gt;&lt;/pre&gt;The images will be scaled using bilinear interpolation and the resulting value cached (default value for the scaling attribute).&lt;br /&gt;This functionality can be seen in the Outlook demo using the view menu zooming options or pressing &lt;i&gt;Ctrl+Plus&lt;/i&gt; to zoom in and&lt;br /&gt;&lt;i&gt;Ctrl+Minus&lt;/i&gt; to zoom out. The outlook demo was redesigned to use font sensitive units for layout, component preferred sizes, and table column widths. Sage will automatically layout and resize widgets and columns (if they haven't been resized by the user), as appropriate, when the relative font size changes. The icons in the demo are all 16x16. I was too lazy to create higher fidelity ones.&lt;br /&gt;&lt;h3&gt;Scriptable HTML Forms&lt;/h3&gt;HTML forms are now supported by the document pane.&lt;br /&gt;Sage widgets are created for form elements, allowing them to be skinned, scripted, and controlled like any other Sage widget.&lt;br /&gt;Also supported is a custom input type and the ability to use the class attribute to configure sage properties. For example if you wanted to have a radio button where the text was part of the button you could use the following HTML:&lt;pre&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-size:85%;"&gt;&amp;lt;input type="radio" name="rb_1" value="hello" class="RadioButton{value='Hello World'}"&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;/pre&gt;In a regular browser you would just get the button with no text. In sage you would get a button with the text "Hello World" next to it and the user will be able to click on the text to toggle the button.&lt;br /&gt;&lt;br /&gt;To insert a real table widget (not an HTML table) you could do the following:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;span style="font-size:85%;"&gt;&amp;lt;input type="custom" name="table_1" class="Table{templateName: 'mytable_template' }"&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/blockquote&gt;This would create a table using the information contained in the 'mytable_template' template to configure the table.  You could put the complete table definition in the class attribute but that would be  a very long line and look a little sloppy (which doesn't matter if the HTML is being programmatically generated).&lt;br /&gt;&lt;h3&gt;Dynamic Color Management&lt;/h3&gt;Sage now allows you to dynamically update the color of all widgets/painters by simply changing the value of a named color. Activating this support is simply a matter of setting the &lt;span style="font-style: italic;"&gt;keep_color_keys&lt;/span&gt; attribute on the &lt;span style="font-style: italic;"&gt;lookAndFeelPropertiesURL &lt;/span&gt;property of the application to true. The following definition derives all colors that are part of a color scheme from a single color:&lt;br /&gt;&lt;pre&gt;&lt;blockquote&gt;&lt;span style="color:gray;"&gt;&lt;span style="font-size:85%;"&gt;lookAndFeelPropertiesURL:&amp;lt;&amp;lt;&lt;br /&gt;defaultBackground=MappedColor|#EDE9E3 [os="windows,linux"]&lt;br /&gt;defaultBackground=MappedColor|#E8E8E8 [os="os x"]&lt;br /&gt;tableGrid=MappedColor|defaultBackground@50&lt;br /&gt;tableAlternating=MappedColor|defaultBackground@25&lt;br /&gt;menuBackground=MappedColor|defaultBackground+25&lt;br /&gt;&lt;br /&gt;Sage.controlLtGradient=Color|defaultBackground+5&lt;br /&gt;Sage.controlDkGradient=Color|defaultBackground-5&lt;br /&gt;Sage.control=Color|defaultBackground&lt;br /&gt;Sage.controlShadow=Color|defaultBackground-25&lt;br /&gt;Sage.controlDkShadow=Color|defaultBackground-50&lt;br /&gt;Sage.controlLtShadow=Color|defaultBackground-5&lt;br /&gt;Sage.controlHighlight=Color|defaultBackground-5&lt;br /&gt;Sage.controlLtHighlight=Color|white&lt;br /&gt;&lt;br /&gt;Sage.ScrollBar.thumb=Color|defaultBackground-5  [os="windows,linux"]&lt;br /&gt;Sage.ScrollBar.thumbShadow=Color|Sage.controlShadow [os="windows,linux"]&lt;br /&gt;Sage.ScrollBar.thumbDarkShadow=Color|Sage.controlDkShadow [os="windows,linux"]&lt;br /&gt;Sage.ScrollBar.arrow=Color|Sage.controlDkShadow [os="windows,linux"]&lt;br /&gt;Sage.ScrollBar.background=Color|defaultBackground-5 [os="windows,linux"]&lt;br /&gt;Sage.ScrollBar.shadow=Color|Sage.controlShadow [os="windows,linux"]&lt;br /&gt;Sage.ScrollBar.trackBorder=Color|Sage.controlDkShadow [os="windows,linux"]&lt;br /&gt;&lt;br /&gt;Sage.ComboBox.border=Border|{line_3d [cornerArc="6",padForArc=false]}&lt;br /&gt;Sage.ComboBox.background=BackgroundColor|white|defaultBackground-5 [os="windows,linux"]&lt;br /&gt;PopupMenu.background=Color|menuBackground&lt;br /&gt;PopupMenuSeparator.background=Color|menuBackground&lt;br /&gt;Menu.mouseHoverBorder=Border|{line}&lt;br /&gt;Menu.mouseHoverBackground=Color|menuBackground&lt;br /&gt;Menu.selectionBackground=Color|menuBackground&lt;br /&gt;Menu.background=Color|menuBackground&lt;br /&gt;Menu.selectionBorderColor=Color|Sage.controlShadow&lt;br /&gt;MenuItem.background=Color|menuBackground&lt;br /&gt;MenuItem.selectionBorderColor=Color|Sage.controlShadow&lt;br /&gt;MenuItem.shadowColor==Color|defaultBackground+5&lt;br /&gt;CheckBoxMenuItem.background=Color|menuBackground&lt;br /&gt;CheckBoxMenuItem.selectionBorderColor=Color|Sage.controlShadow&lt;br /&gt;&amp;gt;&amp;gt; [ inline="true", keep_color_keys=true]&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;/pre&gt;The &lt;span style="font-style: italic;"&gt;BackgroundColor &lt;/span&gt;class designates the color is a background color (which means that it can be a gradient). The &lt;span style="font-style: italic;"&gt;MappedColor &lt;/span&gt;class designates that colors derived form this color will all reference the named and not reference the actual color value.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Note&lt;/span&gt;:  &lt;span style="font-style: italic;"&gt;color@50&lt;/span&gt; gives you a 50% transparency; &lt;span style="font-style: italic;"&gt;color-50&lt;/span&gt; gives you a color with 50% less luminance; [os="windows,linux"] means that these values should only be used for windows and Linux&lt;br /&gt;&lt;br /&gt;The configuration produces the following color scheme (on windows and Linux, the scheme is gray for OS X)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_u1ay0GDXsMQ/SoxvQhs5woI/AAAAAAAAAAM/DuJoSPlb3MM/s1600-h/tan.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 260px;" src="http://2.bp.blogspot.com/_u1ay0GDXsMQ/SoxvQhs5woI/AAAAAAAAAAM/DuJoSPlb3MM/s320/tan.png" alt="" id="BLOGGER_PHOTO_ID_5371790785261453954" border="0" /&gt;&lt;/a&gt;Executing the following JavaScript code:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;span style="font-size:85%;"&gt;sage.UIDefaults["defaultBackground"]= window.getColor("#DCE0DC")&lt;br /&gt;window.update()&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/blockquote&gt;Will instantly make the application look like this:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_u1ay0GDXsMQ/Soxv3Vujx6I/AAAAAAAAAAU/H-lUNhqNqxE/s1600-h/sage.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 260px;" src="http://3.bp.blogspot.com/_u1ay0GDXsMQ/Soxv3Vujx6I/AAAAAAAAAAU/H-lUNhqNqxE/s320/sage.png" alt="" id="BLOGGER_PHOTO_ID_5371791452062074786" border="0" /&gt;&lt;/a&gt;&lt;h3&gt;Other Niceties&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Shaped and translucent windows are supported for JRE 1.6u10 and later, or if the JNA library is in   the class path. The &lt;span style="font-style: italic;"&gt;windowPainter &lt;/span&gt;property of the &lt;span style="font-style: italic;"&gt;MainWindow &lt;/span&gt;objects allows you to specify a   background image, background color/gradient and border for the main window (the border is placed on   the root pane). The &lt;span style="font-style: italic;"&gt;contentPanePainter&lt;/span&gt;&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;property allows you to specify a background image, background   color/gradient and border for the content pane. If you set true &lt;span style="font-style: italic;"&gt;useBorderShape &lt;/span&gt;to true then the   window will be shaped to match the specified border and sage will handle the reshaping when the   windows is resized or maximized&lt;/li&gt; &lt;li&gt;     Support for load and transition animations and other custom effects via the print primer/finisher     interface that allows complete control over paint surfaces.&lt;br /&gt;&lt;/li&gt; &lt;li&gt;     Improved slider, scrollbar and combo box skinning&lt;br /&gt;&lt;/li&gt; &lt;li&gt;    Ruby is now a first class scripting language&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/857731092954944611-8385945398459559363?l=sagetop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sagetop.blogspot.com/feeds/8385945398459559363/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=857731092954944611&amp;postID=8385945398459559363' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/857731092954944611/posts/default/8385945398459559363'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/857731092954944611/posts/default/8385945398459559363'/><link rel='alternate' type='text/html' href='http://sagetop.blogspot.com/2009/08/version-0.html' title=''/><author><name>Don D</name><uri>http://www.blogger.com/profile/07674117902508438381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_u1ay0GDXsMQ/SoxvQhs5woI/AAAAAAAAAAM/DuJoSPlb3MM/s72-c/tan.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-857731092954944611.post-7224094755971644055</id><published>2008-10-28T21:54:00.000-07:00</published><updated>2008-10-28T22:01:05.868-07:00</updated><title type='text'></title><content type='html'>Version 0.9.1 is out. It is a minor update with some API cleanup and a few new miscellaneous features. The most noteworthy thing is the inclusion of a sage-extras jar that has some none-core widgets. One is a map viewer and the other is a coverflow viewer. These widgets are not ready for prime time but they are usable and the source is available. The coverflow viewer can be seen in action on the &lt;a href="http://www.sparseware.com/sage/demos/"&gt;iTunes Clone demo&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I also did an interview with Kirill Grouchnikov from &lt;a href="http://www.pushing-pixels.org"&gt;Pushing Pixels&lt;/a&gt;. You can see the interview &lt;a href="http://www.pushing-pixels.org/?p=644"&gt;here&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/857731092954944611-7224094755971644055?l=sagetop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sagetop.blogspot.com/feeds/7224094755971644055/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=857731092954944611&amp;postID=7224094755971644055' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/857731092954944611/posts/default/7224094755971644055'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/857731092954944611/posts/default/7224094755971644055'/><link rel='alternate' type='text/html' href='http://sagetop.blogspot.com/2008/10/version-0.html' title=''/><author><name>Don D</name><uri>http://www.blogger.com/profile/07674117902508438381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-857731092954944611.post-6948916258447513218</id><published>2008-09-20T14:01:00.000-07:00</published><updated>2008-09-20T14:02:51.336-07:00</updated><title type='text'></title><content type='html'>Version 0.9 has been released. This is the code complete version with stable APIs. Notable in this version is better Mac support, as well as automatic support for deploying any Sage application as a Java Applet.  Also available is an alpha version of Guru™, the IDE for sage that includes a WYSIWUG form designer, JavaScript editor, and interactive JavaScript debugger with remote debugging support. What’s cool about Guru™ is that is just another Sage application and a large portion of the code is written in JavaScript.&lt;br /&gt;&lt;br /&gt;The website (&lt;a href="http://www.sparseware.com/sage/"&gt;http://www.sparseware.com/sage/&lt;/a&gt;) has been upgraded and screen casts have been added to show the demo applications as well as demonstrate Guru. The source code for the two main demos can also be browsed online. The source code for all demos as well as the source for Sage itself is available for download on the site.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/857731092954944611-6948916258447513218?l=sagetop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sagetop.blogspot.com/feeds/6948916258447513218/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=857731092954944611&amp;postID=6948916258447513218' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/857731092954944611/posts/default/6948916258447513218'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/857731092954944611/posts/default/6948916258447513218'/><link rel='alternate' type='text/html' href='http://sagetop.blogspot.com/2008/09/version-0.html' title=''/><author><name>Don D</name><uri>http://www.blogger.com/profile/07674117902508438381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-857731092954944611.post-6507212221714080447</id><published>2007-11-12T14:02:00.000-08:00</published><updated>2007-11-13T18:32:59.484-08:00</updated><title type='text'>Version 0.6 Released</title><content type='html'>&lt;p class="MsoNormal"&gt;Version 0.6 has been released (slowly but surely making my way to version 1.0). This version is functionally complete and the APIs are relatively stable. &lt;span style=""&gt; &lt;/span&gt;The developer toolkit now contains a modified version of the &lt;a href="https://abeille.dev.java.net/"&gt;Abeille Forms Designer&lt;/a&gt;. This version has a new file menu option that allows Abeille forms to be saved as SDF.&lt;span style=""&gt;  &lt;/span&gt;Most of the property forms in the Widget Explorer were designed with this tool.&lt;/p&gt;    &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;br /&gt;The &lt;a href="http://www.sparseware.com/sage/demos/widgetexplorer_static.shtml"&gt;Widget Explorer&lt;/a&gt; allows most of the widgets and their associated properties to be visually configured and explored in real-time. You can play around with multi-color gradients, semi-transparent background and overlay images as well as non-rectangular line borders, all of which can be combined to create some interesting visual effects. These features are supported for most widgets.&lt;/p&gt;    &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;br /&gt;You can also check out the &lt;a href="http://www.sparseware.com/sage/demos/outlook_static.shtml"&gt;MS Outlook Demo&lt;/a&gt; again which highlights the support for gradient selection painters with custom borders and having the border (and focus rectangle) around the row instead of the column (when columns are not selectable)&lt;/p&gt;    &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;br /&gt;A note on colors: &lt;/p&gt;  &lt;ul style="margin-top: 0in;" type="disc"&gt;&lt;li class="MsoNormal" style=""&gt;plus      and minus (+- ) are used to adjusts luminance&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;when      using hex, you can specify the alpha value for a color by adding it to the      end of the normal 6 character hex string (e.g. #ffffff80 gives a 50%      transparent white) or if you use a named color then you can say “white@50”      to get 50% transparent white.&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;you      can type any shorthand color value into any of the color fields and it      will resolve to the correct hex color value&lt;/li&gt;&lt;/ul&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/857731092954944611-6507212221714080447?l=sagetop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sagetop.blogspot.com/feeds/6507212221714080447/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=857731092954944611&amp;postID=6507212221714080447' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/857731092954944611/posts/default/6507212221714080447'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/857731092954944611/posts/default/6507212221714080447'/><link rel='alternate' type='text/html' href='http://sagetop.blogspot.com/2007/11/version-06-released.html' title='Version 0.6 Released'/><author><name>Don D</name><uri>http://www.blogger.com/profile/07674117902508438381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-857731092954944611.post-7024543741579055359</id><published>2007-08-12T21:29:00.000-07:00</published><updated>2007-08-27T08:49:32.727-07:00</updated><title type='text'>Introducing Sage</title><content type='html'>&lt;p class="MsoNormal"&gt;&lt;span style=";font-family:Tahoma;font-size:10;color:blue;"   &gt;Sage is the realization of an idea I had about 11 years ago after I had built my first Netscape plug-in to provide a table widget capable of doing things that table widgets do in typical desktop applications. I wanted to be able to build desktop caliber apps that are built the way web applications are built, using a markup language to describe the UI and scripting to control the interactions. I also wanted them to be URL centric, such that all resources and data are accessed via an URL. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:Tahoma;font-size:10;color:blue;"   &gt;&lt;o:p&gt;&lt;/o:p&gt;Except for the quality of tools available for building JavaScript/DHTML (or &lt;st1:city st="on"&gt;&lt;st1:place st="on"&gt;AJAX&lt;/st1:place&gt;&lt;/st1:city&gt;) applications, not a lot has changed. Granted the technology has evolved enough such that the table widget plug-in can now be built using &lt;st1:city st="on"&gt;&lt;st1:place st="on"&gt;AJAX&lt;/st1:place&gt;&lt;/st1:city&gt;.&lt;span style=""&gt;  &lt;/span&gt;However, the level of sophistication of desktop has also significantly increased in that span of time, and to match that level of sophistication using existing approaches requires a lot of effort to just get something that is close enough. Also, while the new Yahoo mail client is fairly impressive, I am not about to ditch my Microsoft Outlook client anytime soon.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:Tahoma;font-size:10;color:blue;"   &gt;MS Outlook happens to be one of the three most used applications on my desktop (the other two being FireFox, and NetBeans). One of the goals I had for Sage was to be able to build a UI that looks and functions just like Outlook by simply using markup and scripting. I also wanted the applications capable of being run standalone without the need for a web browser but to also able to be launched via a web browser. Another key requirement was the data model. While there are a number of existing tools out there that allow you to do some of these things, none that I know of, fully addresses the issue of easily populating widgets with data and providing the widgets with some understanding of how to render the data (fonts, colors, action links, icons, tooltips, drag and drop, etc).&lt;span style=""&gt;  &lt;/span&gt;Basically, to be able to not just markup the UI but also markup data (similar to what you would do if the data was being presented via a web page), yet still able to do typical client-side data manipulations like sorting, filtering, drag and drop etc.&lt;span style=""&gt;  &lt;/span&gt;It is not that some of these things are not possible with the current technologies, it is the effort required to do them is what I had an issue with.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:Tahoma;font-size:10;color:blue;"   &gt;Thus was Sage born, built on Java (because of the proliferation of the runtime and commercial and open source libraries available), and Swing (because it is written in Java so I could fix bugs and make changes as needed). I do hope to have a .Net version someday. Sage is still in its infancy but the functionality is comprehensive enough and it is stable enough to be officially unveiled to the public. As you might expect, documentation is sparse but there are a couple of full fledged examples (including a MS Outlook clone), and the source code for the engine is also available.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:Tahoma;font-size:10;color:blue;"   &gt;&lt;o:p&gt;&lt;/o:p&gt;Sage was born out of my needs, wants, and experiences with other technology. If your wants, needs, or experiences differ from mine, then Sage may be of little interest to you. You can find the demos and downloads at http://www.sparseware.com&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:Tahoma;font-size:10;color:blue;"   &gt;&lt;o:p&gt;&lt;/o:p&gt;Don&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:Tahoma;font-size:10;color:blue;"   &gt;PS. Some of the icons in the MS Outlook clone may be copyright Microsoft.&lt;span style=""&gt;  &lt;/span&gt;So if you feel the urge to take the demo and make it a real mail application, please change the icons. The icons for Outlook were used merely to demonstrate the ability to easily markup a UI that looks and functions like Outlook.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/857731092954944611-7024543741579055359?l=sagetop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sagetop.blogspot.com/feeds/7024543741579055359/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=857731092954944611&amp;postID=7024543741579055359' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/857731092954944611/posts/default/7024543741579055359'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/857731092954944611/posts/default/7024543741579055359'/><link rel='alternate' type='text/html' href='http://sagetop.blogspot.com/2007/08/introducing-sage.html' title='Introducing Sage'/><author><name>Don D</name><uri>http://www.blogger.com/profile/07674117902508438381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry></feed>
