Welcome!

PowerBuilder Authors: Chris Pollach, Avi Rosenthal, Yakov Fain, RealWire News Distribution, Al Soucy

Related Topics: PowerBuilder, .NET

PowerBuilder: Article

After PowerBuilder 12.5 Classic – Sneak Preview

Your 10-year-old applications may get a free facelift!

By the time you are reading this, PB12.5 will have been released and work on PB15 well under way. A lot of exciting things have gone into the .NET version of PB but we still get requests for features to go into the Classic version of the product. Even though there was a lull in activity in PB12 Classic, we are back again in 12.5 - and we are not stopping. You will probably have seen Dave Fish's webcasts on plans for PB15 (his disclaimers apply here as well) and are hungry for details - I hope to address that in this article.

PB has been around a long time and has accumulated many quirks and inconsistencies. We also have feature requests that are almost as old as the product itself. Our recent releases have done a lot to address these issues, but there are still many features that either need to be updated or simply completed. It would be amazing if you can still get away with a new application today that used "traditional" MDI. I'll let you in on a secret - the toolbar in the IDE has the same implementation as the one in your application at runtime - the difference is that the one in the IDE has comboboxes. And there is no reason why only WPF should have the grid layout.

Docking, Tabbed and Floating Windows
We are adding two new WindowType values - mdidock! and mdidockhelp! -to the window object. Like the values - mdi! and mdihelp! - respectively, they allow child windows (sheets) to be opened with the OpenSheet functions. But these sheets will behave differently: they can dock, float and be tabbed like the windows you see in our PB.NET IDE (see Figure 1).

Figure 1

The OpenSheet function will be overloaded to allow you to specify how the sheet will be opened, whether tabbed, docked or floating. As in the PB.NET IDE, you can use the mouse to move and change the state (docked/tabbed/floating) of the sheets. You
can also pin the state of the sheet. We will also be providing functions to allow programmatically changing and pinning the state. Menus and toolbars work as they do in classic MDI. The active sheet menu and toolbars are displayed.

If you are using the "Custom MDI" technique of using a userobject in the MDI frame as a toolbar and explicitly positioning the MDI client area, the sheets will stay within the client area.

This means you can use this feature on existing MDI applications by changing the WindowType and very little else (see Figure 2).

Figure 2

Grid Layout
You have seen the grid layout for the window and userobject in PB.NET. There will be an equivalent feature in Classic. The window and userobject objects will get two new properties: gridrows and gridcolumns. These properties allow you to divide your window or userobject into rows and columns of cells. The rows and columns are resizeable with the splitters. Each cell hosts one control (which can be a userobject). The control always fills the cell (see Figures 3 and 4).

Figure 3

Figure 4

The openuserobject function will continue to work - its x and y arguments will be used to locate the cell to position the userobject. There will also be overloaded openuserobject versions to allow you to explicitly specify the cell. The userobject objects that you place in cells can themselves be multi-row and multi-column. And the number of rows and columns can be changed at runtime.

PB Controls in Toolbars
The original request was for specific controls - comboboxes, edits - to be allowed in toolbars. We decided to make the solution more general and as similar to windows and userobjects as possible (see Figures 5, 6 and 7). Why limit the toolbar? Instead
of comboboxes, why not a DataWindow with a single DDDW column? Why not a datepicker?

Figure 5

Figure 6

Figure 7

WPF DW - Keeping Up with the Pretty Sister
The Classic DW has been behind the curve with regards to what the WPF DW has accomplished. Be we are catching up. The WPF DW has native support for PDF - we are porting it to Classic. Like the new graph styles - that's in the works too for a later release. What we are aiming for eventually is being able to import a *.srd defined in PB.NET into Classic with almost complete functionality.

Moving Forward with the OS
We will be tracking what Microsoft does in Windows 8. Signs are that this is their designated OS for slates and tablets. Your 10-year-old applications may get a free facelift! 64-bit PB.NET is almost a done deal, but we get requests for support for Classic applications too so stay tuned.

Conclusion
I have to admit that when the "old" IDE was renamed "Classic," I wasn't too happy. But "Classic" has connotations of reliability and predictability - you know your old programs will continue working unchanged, and new features will always be available for use in these programs out-of-the-box. "Just add water" - I like to say. Not a bad proposition at all!

More Stories By Frederick Koh

Frederick Koh is a Staff Engineer at Sybase, Inc., and has been a member of the PowerBuilder and DataWindow.NET development team since 2005. Frederick has over 14 years of IT industry experience.

Comments (1) View Comments

Share your thoughts on this story.

Add your comment
You must be signed in to add a comment. Sign-in | Register

In accordance with our Comment Policy, we encourage comments that are on topic, relevant and to-the-point. We will remove comments that include profanity, personal attacks, racial slurs, threats of violence, or other inappropriate material that violates our Terms and Conditions, and will block users who make repeated violations. We ask all readers to expect diversity of opinion and to treat one another with dignity and respect.


Most Recent Comments
topwiz 11/23/11 12:50:00 PM EST

As part of adding controls to the menu toolbar, you should look into adding controls to the mdihelp area. I have added controls to it using API functions but it would be better to have native support.