Paned Window Tk WidgetEric Melski$Revision: 1.13 $widget tk panedwindow
This TIP proposes a C-based paned window widget for inclusion in the Tk core. A paned window consists of one or more vertical or horizontal "panes", each pair separated by a movable "sash" and each containing one widget, called a "slave". Paned windows are common in modern graphical user interfaces and should therefore be provided directly by the Tk core. Examples of the widget can be found in Windows Explorer; Netscape Messenger; many email clients; and virtually every graphical World Wide Web browser.
Tk has long lagged other graphical toolkits in terms of the selection of widgets provided by the toolkit. In order to keep Tk vibrant, useful, and relevant, it is imperative that the widget set be enhanced with widgets which have become commonplace in modern graphical user interfaces. One such widget is the paned window widget. A widget that makes it easy to create robust paned windows should be included with Tk.
This paned window widget could be implemented in C or in Tcl; in fact, several Tcl-based paned window widgets already exist. However, these each have quirks, mostly caused by the inability to completely manage the geometry of Tk windows from Tcl (i.e. there is no way to make calls to things like Tk_MaintainGeometry or Tk_ManageGeometry). This issue could possibly be addressed by the creation of a proper megawidget system for Tk, but that goal seems very far from reality right now. If we wait for that system before creating new widgets, it may be too late. In addition, megawidget implementations suffer from "widget bloat" - each paned window widget corresponds to, typically two widgets, plus two or more widgets for each pane after the first. For a Motif-style paned window with two panes, this means five widgets are created (one frame for the paned window container widget; one frame for each pane; one frame for the sash; one frame for the sash handle). Even assuming the existence of a proper megawidget system, we may not be able to address the widget bloat issue with a megawidget.
A C-based paned window implementation will be able to address both of these issues, and should be more robust, reliable, and lightweight. A C implementation will be able to access Tk's geometry management functions. Also, it will require only one widget for each paned window, regardless of how many panes are in the window.
One obvious argument is that this widget could easily be distributed as an extension, and need not be included directly in the Tk core. However, extension widget libraries have been largely unsuccessful in winning over users. Developers are reluctant to use those extension widgets because they cannot rely on their presence in an end-user's system, and because of concerns of version incompatibilities between the extension and the core. Users are reluctant to take on the responsibility of maintaining the extension in addition to the core. If this widget is to be truly useful to the Tk community and not just a programming exercise for the author, it must be included in the Tk core.
In addition, Tk should be a full-featured widget toolkit on its own. Other popular GUI toolkits are ready out-of-the-box to create sophisticated, modern applications. Tk should be as well, and should not require the procurement of additional extensions to provide what are truly fundamental widgets in a modern GUI toolkit. By all means, esoteric widgets should be left to the extensions, but core widgets belong in the core. This question could be made irrelevant with the introduction of a proper "Batteries Included" distribution, but like the proper megawidget system, this seems like a goal far from reality at this time.
Another possibility is to distribute the widget with the core, but have it placed in a separate package and namespace. This provides the same level of availability as direct inclusion in the core, but does not actually make the widget part of Tk directly. There are two possible arguments in favor of this approach. First, since this widget will be in its own namespace, future panedwindow widgets could be included without name conflicts. However, if each widget is put in its own namespace, the name conflict has not actually been resolved. The point of contention has simply been moved from the global command space to the global namespace space. Namespaces make sense when grouping blocks of related functions and data, but widgets have only one command. It's just as easy to pick a unique command name as a unique namespace name. The second possible advantage is that the widget could be loaded on demand, rather than automatically being pulled in with Tk. However, most machines that Tk runs on use a virtual memory system. Thus, only those pages/widgets that are actually used will be resident in memory. The benefit of incorporating this widget into the Tk distribution in this manner seem marginal.
The manual entry for the paned window widget is included here:
TkFNRQ==ICAgICAgIHBhbmVkd2luZG93IC0gQ3JlYXRlIGFuZCBtYW5pcHVsYXRlIHBhbmVkd2luZG93IHdpZGdldHM=U1lOT1BTSVM=ICAgICAgIHBhbmVkd2luZG93IHBhdGhOYW1lID9vcHRpb25zPw==U1RBTkRBUkQgT1BUSU9OUw==ICAgICAgIC1iYWNrZ3JvdW5kICAgICAgICAgICAtaGVpZ2h0ICAgICAgICAgICAgICAtd2lkdGg=ICAgICAgIC1ib3JkZXJ3aWR0aCAgICAgICAgICAtb3JpZW50ICAgICAgIC1jdXJzb3IgICAgICAgICAgICAgICAtcmVsaWVmICAgICAgIFNlZSAgdGhlICBvcHRpb25zIG1hbnVhbCBlbnRyeSBmb3IgZGV0YWlscyBvbiB0aGUgc3RhbmRhcmQ=ICAgICAgIG9wdGlvbnMuV0lER0VULVNQRUNJRklDIE9QVElPTlM=ICAgICAgIENvbW1hbmQtTGluZSBOYW1lOi1oYW5kbGVwYWQ=ICAgICAgIERhdGFiYXNlIE5hbWU6ICBoYW5kbGVQYWQ=ICAgICAgIERhdGFiYXNlIENsYXNzOiBIYW5kbGVQYWQ=ICAgICAgICAgICAgICBXaGVuIHNhc2ggaGFuZGxlcyBhcmUgZHJhd24sIHNwZWNpZmllcyB0aGUgZGlzdGFuY2U=ICAgICAgICAgICAgICBmcm9tICB0aGUgdG9wIG9yIGxlZnQgZW5kIG9mIHRoZSBzYXNoIChkZXBlbmRpbmcgb24=ICAgICAgICAgICAgICB0aGUgb3JpZW50YXRpb24gb2YgdGhlIHdpZGdldCkgYXQgd2hpY2ggdG8gZHJhdyB0aGU=ICAgICAgICAgICAgICBoYW5kbGUuICBNYXkgYmUgYW55IHZhbHVlIGFjY2VwdGVkIGJ5IFRrX0dldFBpeGVscy4=ICAgICAgIENvbW1hbmQtTGluZSBOYW1lOi1oYW5kbGVzaXplICAgICAgIERhdGFiYXNlIE5hbWU6ICBoYW5kbGVTaXplICAgICAgIERhdGFiYXNlIENsYXNzOiBIYW5kbGVTaXplICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIHNpZGUgbGVuZ3RoIG9mIGEgc2FzaCAgaGFuZGxlLiAgIEhhbi0=ICAgICAgICAgICAgICBkbGVzIGFyZSBhbHdheXMgZHJhd24gYXMgc3F1YXJlcy4gIE1heSBiZSBhbnkgdmFsdWU=ICAgICAgICAgICAgICBhY2NlcHRlZCBieSBUa19HZXRQaXhlbHMuICAgICAgIENvbW1hbmQtTGluZSBOYW1lOi1vcGFxdWVyZXNpemU=ICAgICAgIERhdGFiYXNlIE5hbWU6ICBvcGFxdWVSZXNpemU=ICAgICAgIERhdGFiYXNlIENsYXNzOiBPcGFxdWVSZXNpemU=ICAgICAgICAgICAgICBTcGVjaWZpZXMgd2hldGhlciBwYW5lcyBzaG91bGQgYmUgcmVzaXplZCBhcyBhIHNhc2g=ICAgICAgICAgICAgICBpcyAgbW92ZWQgKHRydWUpLCBvciBpZiByZXNpemluZyBzaG91bGQgYmUgZGVmZXJyZWQ=ICAgICAgICAgICAgICB1bnRpbCB0aGUgc2FzaCBpcyBwbGFjZWQgKGZhbHNlKS4=ICAgICAgIENvbW1hbmQtTGluZSBOYW1lOi1zYXNoY3Vyc29yICAgICAgIERhdGFiYXNlIE5hbWU6ICBzYXNoQ3Vyc29yICAgICAgIERhdGFiYXNlIENsYXNzOiBTYXNoQ3Vyc29yICAgICAgICAgICAgICBNb3VzZSBjdXJzb3IgdG8gdXNlIHdoZW4gb3ZlciAgYSAgc2FzaC4gICBJZiAgbnVsbCw=ICAgICAgICAgICAgICBzYl9oX2RvdWJsZV9hcnJvdyAgIHdpbGwgIGJlICB1c2VkICBmb3IgIGhvcml6b250YWw=ICAgICAgICAgICAgICBwYW5lZHdpbmRvd3MsIGFuZCBzYl92X2RvdWJsZV9hcnJvdyAgd2lsbCAgYmUgIHVzZWQ=ICAgICAgICAgICAgICBmb3IgdmVydGljYWwgcGFuZWR3aW5kb3dzLg==ICAgICAgIENvbW1hbmQtTGluZSBOYW1lOi1zYXNocGFkICAgICAgIERhdGFiYXNlIE5hbWU6ICBzYXNoUGFkICAgICAgIERhdGFiYXNlIENsYXNzOiBTYXNoUGFkICAgICAgICAgICAgICBTcGVjaWZpZXMgIHRoZSAgYW1vdW50ICBvZiBwYWRkaW5nIHRvIGxlYXZlIG9mIGVhY2g=ICAgICAgICAgICAgICBzaWRlIG9mIGEgc2FzaC4gICBNYXkgIGJlICBhbnkgIHZhbHVlICBhY2NlcHRlZCAgYnk=ICAgICAgICAgICAgICBUa19HZXRQaXhlbHMuICAgICAgIENvbW1hbmQtTGluZSBOYW1lOi1zYXNocmVsaWVmICAgICAgIERhdGFiYXNlIE5hbWU6ICBzYXNoUmVsaWVmICAgICAgIERhdGFiYXNlIENsYXNzOiBTYXNoUmVsaWVmICAgICAgICAgICAgICBSZWxpZWYgIHRvICB1c2Ugd2hlbiBkcmF3aW5nIGEgc2FzaC4gIE1heSBiZSBhbnkgb2Y=ICAgICAgICAgICAgICB0aGUgc3RhbmRhcmQgVGsgcmVsaWVmIHZhbHVlcy4=ICAgICAgIENvbW1hbmQtTGluZSBOYW1lOi1zYXNod2lkdGg=ICAgICAgIERhdGFiYXNlIE5hbWU6ICBzYXNoV2lkdGg=ICAgICAgIERhdGFiYXNlIENsYXNzOiBTYXNoV2lkdGg=ICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIHdpZHRoIG9mIGVhY2ggc2FzaC4gIE1heSBiZSBhbnkgdmFsdWU=ICAgICAgICAgICAgICBhY2NlcHRlZCBieSBUa19HZXRQaXhlbHMuICAgICAgIENvbW1hbmQtTGluZSBOYW1lOi1zaG93aGFuZGxlICAgICAgIERhdGFiYXNlIE5hbWU6ICBzaG93SGFuZGxlICAgICAgIERhdGFiYXNlIENsYXNzOiBTaG93SGFuZGxlICAgICAgICAgICAgICBTcGVjaWZpZXMgd2hldGhlciBvciBub3Qgc2FzaCBoYW5kbGVzIHNob3VsZCBiZSBzaG93bi4=ICAgICAgICAgICAgICBNYXkgYmUgYW55IHZhbGlkIFRjbCBib29sZWFuIHZhbHVlLg==REVTQ1JJUFRJT04=ICAgICAgIFRoZSBwYW5lZHdpbmRvdyBjb21tYW5kIGNyZWF0ZXMgYSBuZXcgd2luZG93IChnaXZlbiBieSB0aGU=ICAgICAgIHBhdGhOYW1lIGFyZ3VtZW50KSBhbmQgbWFrZXMgaXQgaW50byBhIHBhbmVkd2luZG93IHdpZGdldC4=ICAgICAgIEFkZGl0aW9uYWwgIG9wdGlvbnMsICBkZXNjcmliZWQgYWJvdmUsIG1heSBiZSBzcGVjaWZpZWQgb24=ICAgICAgIHRoZSBjb21tYW5kIGxpbmUgb3IgaW4gdGhlIG9wdGlvbiAgZGF0YWJhc2UgIHRvICBjb25maWd1cmU=ICAgICAgIGFzcGVjdHMgIG9mIHRoZSBwYW5lZHdpbmRvdyBzdWNoIGFzIGl0cyBkZWZhdWx0IGJhY2tncm91bmQ=ICAgICAgIGNvbG9yIGFuZCByZWxpZWYuICBUaGUgIHBhbmVkd2luZG93ICBjb21tYW5kICByZXR1cm5zICB0aGU=ICAgICAgIHBhdGggbmFtZSBvZiB0aGUgbmV3IHdpbmRvdy4=ICAgICAgIEEgICBwYW5lZHdpbmRvdyAgd2lkZ2V0ICBjb250YWlucyAgYW55ICBudW1iZXIgIG9mICBwYW5lcyw=ICAgICAgIGFycmFuZ2VkIGhvcml6b250YWxseSAgb3IgIHZlcnRpY2FsbHksICBhY2NvcmRpbmcgIHRvICB0aGU=ICAgICAgIHZhbHVlICBvZiB0aGUgLW9yaWVudCBvcHRpb24uICBFYWNoIHBhbmUgY29udGFpbnMgb25lIHdpZC0=ICAgICAgIGdldCwgYW5kIGVhY2ggcGFpciBvZiBwYW5lcyBpcyAgc2VwYXJhdGVkICBieSAgYSAgbW92ZWFibGU=ICAgICAgICh2aWEgbW91c2UgbW92ZW1lbnRzKSBzYXNoLiAgTW92aW5nIGEgc2FzaCBjYXVzZXMgdGhlIHdpZC0=ICAgICAgIGdldHMgb24gZWl0aGVyIHNpZGUgb2YgdGhlIHNhc2ggdG8gYmUgcmVzaXplZC4=V0lER0VUIENPTU1BTkQ=ICAgICAgIFRoZSBwYW5lZHdpbmRvdyBjb21tYW5kIGNyZWF0ZXMgYSBuZXcgIFRjbCAgY29tbWFuZCAgd2hvc2U=ICAgICAgIG5hbWUgIGlzICB0aGUgIHNhbWUgIGFzIHRoZSBwYXRoIG5hbWUgb2YgdGhlIHBhbmVkd2luZG93J3M=ICAgICAgIHdpbmRvdy4gIFRoaXMgY29tbWFuZCBtYXkgYmUgdXNlZCB0byBpbnZva2UgdmFyaW91cyBvcGVyYS0=ICAgICAgIHRpb25zIG9uIHRoZSB3aWRnZXQuICBJdCBoYXMgdGhlIGZvbGxvd2luZyBnZW5lcmFsIGZvcm06ICAgICAgICAgICAgICBwYXRoTmFtZSBvcHRpb24gP2FyZyBhcmcgLi4uPw==ICAgICAgIFBhdGhOYW1lICBpcyB0aGUgbmFtZSBvZiB0aGUgY29tbWFuZCwgd2hpY2ggaXMgdGhlIHNhbWUgYXM=ICAgICAgIHRoZSBwYW5lZHdpbmRvdyB3aWRnZXQncyBwYXRoIG5hbWUuICBPcHRpb24gYW5kICB0aGUgIGFyZ3M=ICAgICAgIGRldGVybWluZSAgdGhlIGV4YWN0IGJlaGF2aW9yIG9mIHRoZSBjb21tYW5kLiAgVGhlIGZvbGxvdy0=ICAgICAgIGluZyBjb21tYW5kcyBhcmUgcG9zc2libGUgZm9yIHBhbmVkd2luZG93IHdpZGdldHM6ICAgICAgIHBhdGhOYW1lIGFkZCBzbGF2ZSA/c2xhdmUgLi4uPyA/b3B0aW9uIHZhbHVlIC4uLj8=ICAgICAgICAgICAgICBBZGQgb25lIG9yIG1vcmUgc2xhdmVzIHRvIHRoZSBwYW5lZHdpbmRvdywgZWFjaCAgaW4=ICAgICAgICAgICAgICBhICBzZXBhcmF0ZSAgcGFuZS4gICBUaGUgIGFyZ3VtZW50cyAgY29uc2lzdCBvZiB0aGU=ICAgICAgICAgICAgICBuYW1lcyBvZiBvbmUgb3IgIG1vcmUgIHNsYXZlICB3aW5kb3dzICBmb2xsb3dlZCAgYnk=ICAgICAgICAgICAgICBwYWlycyAgb2YgIGFyZ3VtZW50cyB0aGF0IHNwZWNpZnkgaG93IHRvIG1hbmFnZSB0aGU=ICAgICAgICAgICAgICBzbGF2ZXMuICBPcHRpb24gbWF5IGhhdmUgYW55IG9mIHRoZSB2YWx1ZXMgYWNjZXB0ZWQ=ICAgICAgICAgICAgICBieSB0aGUgY29uZmlndXJlIHN1YmNvbW1hbmQuICAgICAgIHBhdGhOYW1lIGNnZXQgb3B0aW9uICAgICAgICAgICAgICBSZXR1cm5zICB0aGUgIGN1cnJlbnQgIHZhbHVlICBvZiAgdGhlIGNvbmZpZ3VyYXRpb24=ICAgICAgICAgICAgICBvcHRpb24gZ2l2ZW4gYnkgb3B0aW9uLiAgT3B0aW9uIG1heSBoYXZlIGFueSBvZiB0aGU=ICAgICAgICAgICAgICB2YWx1ZXMgYWNjZXB0ZWQgYnkgdGhlIHBhbmVkd2luZG93IGNvbW1hbmQuICAgICAgIHBhdGhOYW1lIGNvbmZpZ3VyZSA/b3B0aW9uPyA/dmFsdWUgb3B0aW9uIHZhbHVlIC4uLj8=ICAgICAgICAgICAgICBRdWVyeSAgb3IgIG1vZGlmeSAgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBvZiB0aGU=ICAgICAgICAgICAgICB3aWRnZXQuICBJZiBubyBvcHRpb24gaXMgc3BlY2lmaWVkLCByZXR1cm5zIGEgIGxpc3Q=ICAgICAgICAgICAgICBkZXNjcmliaW5nICBhbGwgIG9mIHRoZSBhdmFpbGFibGUgb3B0aW9ucyBmb3IgcGF0aC0=ICAgICAgICAgICAgICBOYW1lIChzZWUgVGtfQ29uZmlndXJlSW5mbyBmb3IgaW5mb3JtYXRpb24gIG9uICB0aGU=ICAgICAgICAgICAgICBmb3JtYXQgIG9mIHRoaXMgbGlzdCkuICBJZiBvcHRpb24gaXMgc3BlY2lmaWVkIHdpdGg=ICAgICAgICAgICAgICBubyB2YWx1ZSwgdGhlbiB0aGUgY29tbWFuZCByZXR1cm5zIGEgbGlzdCAgZGVzY3JpYi0=ICAgICAgICAgICAgICBpbmcgdGhlIG9uZSBuYW1lZCBvcHRpb24gKHRoaXMgbGlzdCB3aWxsIGJlIGlkZW50aS0=ICAgICAgICAgICAgICBjYWwgdG8gIHRoZSAgY29ycmVzcG9uZGluZyAgc3VibGlzdCAgb2YgIHRoZSAgdmFsdWU=ICAgICAgICAgICAgICByZXR1cm5lZCAgaWYgIG5vICBvcHRpb24gIGlzIHNwZWNpZmllZCkuICBJZiBvbmUgb3I=ICAgICAgICAgICAgICBtb3JlIG9wdGlvbi12YWx1ZSBwYWlycyAgYXJlICBzcGVjaWZpZWQsICB0aGVuICB0aGU=ICAgICAgICAgICAgICBjb21tYW5kIG1vZGlmaWVzIHRoZSBnaXZlbiB3aWRnZXQgb3B0aW9uKHMpIHRvIGhhdmU=ICAgICAgICAgICAgICB0aGUgZ2l2ZW4gIHZhbHVlKHMpOyAgIGluICB0aGlzICBjYXNlICB0aGUgIGNvbW1hbmQ=ICAgICAgICAgICAgICByZXR1cm5zIGFuIGVtcHR5IHN0cmluZy4gT3B0aW9uIG1heSBoYXZlIGFueSBvZiB0aGU=ICAgICAgICAgICAgICB2YWx1ZXMgYWNjZXB0ZWQgYnkgdGhlIHBhbmVkd2luZG93IGNvbW1hbmQuICAgICAgIHBhdGhOYW1lIGZvcmdldCBzbGF2ZSA/c2xhdmUgLi4uPw==ICAgICAgICAgICAgICBSZW1vdmUgdGhlIHBhbmUgY29udGFpbmluZyBzbGF2ZSBmcm9tIHRoZSBwYW5lZHdpbi0=ICAgICAgICAgICAgICBkb3cuICAgQWxsICBnZW9tZXRyeSAgbWFuYWdlbWVudCAgb3B0aW9ucyBmb3Igc2xhdmU=ICAgICAgICAgICAgICB3aWxsIGJlIGZvcmdvdHRlbi4=ICAgICAgIHBhdGhOYW1lIGlkZW50aWZ5IHggeQ==ICAgICAgICAgICAgICBJZGVudGlmeSB0aGUgcGFuZWR3aW5kb3cgY29tcG9uZW50ICB1bmRlcm5lYXRoICB0aGU=ICAgICAgICAgICAgICBwb2ludCAgZ2l2ZW4gYnkgeCBhbmQgeSwgaW4gd2luZG93IGNvb3JkaW5hdGVzLiAgSWY=ICAgICAgICAgICAgICB0aGUgcG9pbnQgaXMgb3ZlciBhIHNhc2ggIG9yICBhICBzYXNoICBoYW5kbGUsICB0aGU=ICAgICAgICAgICAgICByZXN1bHQgIGlzICBhIHR3byBlbGVtZW50IGxpc3QgY29udGFpbmluZyB0aGUgaW5kZXg=ICAgICAgICAgICAgICBvZiB0aGUgIHNhc2ggIG9yICBoYW5kbGUsICBhbmQgIGEgIHdvcmQgIGluZGljYXRpbmc=ICAgICAgICAgICAgICB3aGV0aGVyICBpdCAgaXMgb3ZlciBhIHNhc2ggb3IgYSBoYW5kbGUsIHN1Y2ggYXMgezA=ICAgICAgICAgICAgICBzYXNofSBvciB7MiBoYW5kbGV9LiAgSWYgIHRoZSAgcG9pbnQgIGlzICBvdmVyICBhbnk=ICAgICAgICAgICAgICBvdGhlciAgcGFydCAgb2YgIHRoZSAgcGFuZWR3aW5kb3csIHRoZSByZXN1bHQgaXMgYW4=ICAgICAgICAgICAgICBlbXB0eSBsaXN0Lg==ICAgICAgIHBhdGhOYW1lIHByb3h5ID9hcmdzPw==ICAgICAgICAgICAgICBUaGlzIGNvbW1hbmQgaXMgdXNlZCB0byBxdWVyeSBhbmQgY2hhbmdlIHRoZSAgcG9zaS0=ICAgICAgICAgICAgICB0aW9uICBvZiAgdGhlIHNhc2ggcHJveHksIHVzZWQgZm9yIHJ1YmJlcmJhbmQtc3R5bGU=ICAgICAgICAgICAgICBwYW5lIHJlc2l6aW5nLiBJdCBjYW4gdGFrZSAgYW55ICBvZiAgdGhlICBmb2xsb3dpbmc=ICAgICAgICAgICAgICBmb3Jtczo=ICAgICAgICAgICAgICBwYXRoTmFtZSBwcm94eSBjb29yZA==ICAgICAgICAgICAgICAgICAgICAgUmV0dXJuIGEgbGlzdCBjb250YWluaW5nIHRoZSB4IGFuZCB5IGNvb3JkaS0=ICAgICAgICAgICAgICAgICAgICAgbmF0ZXMgb2YgdGhlIG1vc3QgcmVjZW50IHByb3h5IGxvY2F0aW9uLg==ICAgICAgICAgICAgICBwYXRobmFtZSBwcm94eSBmb3JnZXQ=ICAgICAgICAgICAgICAgICAgICAgUmVtb3ZlIHRoZSBwcm94eSBmcm9tIHRoZSBkaXNwbGF5Lg==ICAgICAgICAgICAgICBwYXRoTmFtZSBwcm94eSBwbGFjZSB4IHk=ICAgICAgICAgICAgICAgICAgICAgUGxhY2UgIHRoZSAgcHJveHkgIGF0ICB0aGUgIGdpdmVuICB4ICBhbmQgIHk=ICAgICAgICAgICAgICAgICAgICAgY29vcmRpbmF0ZXMuICAgICAgIHBhdGhOYW1lIHNhc2ggP2FyZ3M/ICAgICAgICAgICAgICBUaGlzICBjb21tYW5kIGlzIHVzZWQgdG8gcXVlcnkgYW5kIGNoYW5nZSB0aGUgcG9zaS0=ICAgICAgICAgICAgICB0aW9uIG9mIHNhc2hlcyBpbiB0aGUgcGFuZWR3aW5kb3cuICBJdCBjYW4gdGFrZSBhbnk=ICAgICAgICAgICAgICBvZiB0aGUgZm9sbG93aW5nIGZvcm1zOg==ICAgICAgICAgICAgICBwYXRoTmFtZSBzYXNoIGNvb3JkIGluZGV4ICAgICAgICAgICAgICAgICAgICAgUmV0dXJuICB0aGUgIGN1cnJlbnQgeCBhbmQgeSBjb29yZGluYXRlIHBhaXI=ICAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBzYXNoIGdpdmVuIGJ5IGluZGV4LiAgSW5kZXggbXVzdCAgYmU=ICAgICAgICAgICAgICAgICAgICAgYW4gIGludGVnZXIgIGJldHdlZW4gIDAgIGFuZCAxIGxlc3MgdGhhbiB0aGU=ICAgICAgICAgICAgICAgICAgICAgbnVtYmVyIG9mIHNsYXZlcyBpbiAgdGhlICBwYW5lZHdpbmRvdy4gICBUaGU=ICAgICAgICAgICAgICAgICAgICAgY29vcmRpbmF0ZXMgIGdpdmVuIGFyZSB0aG9zZSBvZiB0aGUgdG9wIGxlZnQ=ICAgICAgICAgICAgICAgICAgICAgY29ybmVyIG9mIHRoZSByZWdpb24gIGNvbnRhaW5pbmcgIHRoZSAgc2FzaC4=ICAgICAgICAgICAgICAgICAgICAgcGF0aE5hbWUgIHNhc2ggZHJhZ3RvIGluZGV4IHggeSBUaGlzIGNvbW1hbmQ=ICAgICAgICAgICAgICAgICAgICAgY29tcHV0ZXMgdGhlIGRpZmZlcmVuY2UgIGJldHdlZW4gIHRoZSAgZ2l2ZW4=ICAgICAgICAgICAgICAgICAgICAgY29vcmRpbmF0ZXMgYW5kIHRoZSBjb29yZGluYXRlcyBnaXZlbiB0byB0aGU=ICAgICAgICAgICAgICAgICAgICAgbGFzdCBzYXNoIGNvb3JkIGNvbW1hbmQgZm9yIHRoZSBnaXZlbiAgc2FzaC4=ICAgICAgICAgICAgICAgICAgICAgSXQgdGhlbiBtb3ZlcyB0aGF0IHNhc2ggdGhlIGNvbXB1dGVkIGRpZmZlci0=ICAgICAgICAgICAgICAgICAgICAgZW5jZS4gIFRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIGVtcHR5IHN0cmluZy4=ICAgICAgICAgICAgICBwYXRoTmFtZSBzYXNoIG1hcmsgaW5kZXggeCB5ICAgICAgICAgICAgICAgICAgICAgUmVjb3JkcyB4IGFuZCB5IGZvciB0aGUgc2FzaCBnaXZlbiBieSBpbmRleDs=ICAgICAgICAgICAgICAgICAgICAgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGxhdGVyICBkcmFndG8gIGNvbS0=ICAgICAgICAgICAgICAgICAgICAgbWFuZHMgdG8gbW92ZSB0aGUgc2FzaC4=ICAgICAgICAgICAgICBwYXRoTmFtZSBzYXNoIHBsYWNlIGluZGV4IHggeQ==ICAgICAgICAgICAgICAgICAgICAgUGxhY2UgIHRoZSAgc2FzaCBnaXZlbiBieSBpbmRleCBhdCB0aGUgZ2l2ZW4=ICAgICAgICAgICAgICAgICAgICAgY29vcmRpbmF0ZXMuICAgICAgIHBhdGhOYW1lIHNsYXZlY2dldCBzbGF2ZSBvcHRpb24=ICAgICAgICAgICAgICBRdWVyeSBhIG1hbmFnZW1lbnQgb3B0aW9uIGZvciBzbGF2ZS4gIE9wdGlvbiBtYXkgYmU=ICAgICAgICAgICAgICBhbnkgdmFsdWUgYWxsb3dlZCBieSB0aGUgc2xhdmVjb25maWd1cmUgc3ViY29tbWFuZC4=ICAgICAgIHBhdGhOYW1lIHNsYXZlY29uZmlndXJlIHNsYXZlID9vcHRpb24/ID92YWx1ZSBvcHRpb24gdmFsdWU=ICAgICAgIC4uLj8=ICAgICAgICAgICAgICBRdWVyeSAgb3IgIG1vZGlmeSB0aGUgbWFuYWdlbWVudCBvcHRpb25zIGZvciBzbGF2ZS4=ICAgICAgICAgICAgICBJZiBubyBvcHRpb24gaXMgc3BlY2lmaWVkLCByZXR1cm5zIGEgbGlzdCAgZGVzY3JpYi0=ICAgICAgICAgICAgICBpbmcgIGFsbCBvZiB0aGUgYXZhaWxhYmxlIG9wdGlvbnMgZm9yIHBhdGhOYW1lIChzZWU=ICAgICAgICAgICAgICBUa19Db25maWd1cmVJbmZvIGZvciBpbmZvcm1hdGlvbiBvbiB0aGUgIGZvcm1hdCAgb2Y=ICAgICAgICAgICAgICB0aGlzICBsaXN0KS4gIElmIG9wdGlvbiBpcyBzcGVjaWZpZWQgd2l0aCBubyB2YWx1ZSw=ICAgICAgICAgICAgICB0aGVuIHRoZSBjb21tYW5kIHJldHVybnMgYSBsaXN0IGRlc2NyaWJpbmcgdGhlICBvbmU=ICAgICAgICAgICAgICBuYW1lZCAgb3B0aW9uICAodGhpcyAgbGlzdCB3aWxsIGJlIGlkZW50aWNhbCB0byB0aGU=ICAgICAgICAgICAgICBjb3JyZXNwb25kaW5nIHN1Ymxpc3Qgb2YgdGhlIHZhbHVlIHJldHVybmVkICBpZiAgbm8=ICAgICAgICAgICAgICBvcHRpb24gIGlzIHNwZWNpZmllZCkuICBJZiBvbmUgb3IgbW9yZSBvcHRpb24tdmFsdWU=ICAgICAgICAgICAgICBwYWlycyBhcmUgc3BlY2lmaWVkLCB0aGVuIHRoZSBjb21tYW5kIG1vZGlmaWVzICB0aGU=ICAgICAgICAgICAgICBnaXZlbiAgd2lkZ2V0IG9wdGlvbihzKSB0byBoYXZlIHRoZSBnaXZlbiB2YWx1ZShzKTs=ICAgICAgICAgICAgICBpbiB0aGlzIGNhc2UgdGhlIGNvbW1hbmQgcmV0dXJucyBhbiAgZW1wdHkgIHN0cmluZy4=ICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIHN1cHBvcnRlZDo=ICAgICAgICAgICAgICAtYWZ0ZXIgc2xhdmU=ICAgICAgICAgICAgICAgICAgICAgSW5zZXJ0ICB0aGUgc2xhdmUgYWZ0ZXIgdGhlIHNsYXZlIHNwZWNpZmllZC4=ICAgICAgICAgICAgICAgICAgICAgc2xhdmUgc2hvdWxkIGJlIHRoZSBuYW1lIG9mIGEgd2luZG93IGFscmVhZHk=ICAgICAgICAgICAgICAgICAgICAgbWFuYWdlZCBieSBwYXRoTmFtZS4=ICAgICAgICAgICAgICAtYmVmb3JlIHNsYXZlICAgICAgICAgICAgICAgICAgICAgSW5zZXJ0IHRoZSBzbGF2ZSBiZWZvcmUgdGhlIHNsYXZlIHNwZWNpZmllZC4=ICAgICAgICAgICAgICAgICAgICAgc2xhdmUgc2hvdWxkIGJlIHRoZSBuYW1lIG9mIGEgd2luZG93IGFscmVhZHk=ICAgICAgICAgICAgICAgICAgICAgbWFuYWdlZCBieSBwYXRoTmFtZS4=ICAgICAgICAgICAgICAtaGVpZ2h0IHNpemU=ICAgICAgICAgICAgICAgICAgICAgU3BlY2lmeSAgYSBoZWlnaHQgZm9yIHRoZSBzbGF2ZS4gIFRoZSBoZWlnaHQ=ICAgICAgICAgICAgICAgICAgICAgd2lsbCBiZSB0aGUgb3V0ZXIgIGRpbWVuc2lvbiAgb2YgIHRoZSAgc2xhdmU=ICAgICAgICAgICAgICAgICAgICAgaW5jbHVkaW5nIGl0cyBib3JkZXIsIGlmIGFueS4gIElmIHNpemUgaXMgYW4=ICAgICAgICAgICAgICAgICAgICAgZW1wdHkgc3RyaW5nLCBvciBpZiAtaGVpZ2h0ICBpcyAgbm90ICBzcGVjaS0=ICAgICAgICAgICAgICAgICAgICAgZmllZCwgIHRoZW4gIHRoZSBoZWlnaHQgcmVxdWVzdGVkIGludGVybmFsbHk=ICAgICAgICAgICAgICAgICAgICAgYnkgdGhlIHNsYXZlIHdpbGwgIGJlICB1c2VkICBpbml0aWFsbHk7ICB0aGU=ICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0IG1heSBsYXRlciBiZSBhZGp1c3RlZCBieSB0aGUgbW92ZW1lbnQ=ICAgICAgICAgICAgICAgICAgICAgb2Ygc2FzaGVzIGluIHRoZSBwYW5lZHdpbmRvdy4gIFNpemUgIG1heSAgYmU=ICAgICAgICAgICAgICAgICAgICAgYW55IHZhbHVlIGFjY2VwdGVkIGJ5IFRrX0dldFBpeGVscy4=ICAgICAgICAgICAgICAtbWluc2l6ZSBuICAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzICB0aGF0IHRoZSBzaXplIG9mIHRoZSBzbGF2ZSBjYW5ub3Q=ICAgICAgICAgICAgICAgICAgICAgYmUgbWFkZSBsZXNzIHRoYW4gbi4gIFRoaXMgIGNvbnN0cmFpbnQgIG9ubHk=ICAgICAgICAgICAgICAgICAgICAgYWZmZWN0cyAgdGhlIHNpemUgb2YgdGhlIHdpZGdldCBpbiB0aGUgcGFuZWQ=ICAgICAgICAgICAgICAgICAgICAgZGltZW5zaW9uIC0tIHRoZSB4IGRpbWVuc2lvbiBmb3IgIGhvcml6b250YWw=ICAgICAgICAgICAgICAgICAgICAgcGFuZWR3aW5kb3dzLCAgdGhlICB5IGRpbWVuc2lvbiBmb3IgdmVydGljYWw=ICAgICAgICAgICAgICAgICAgICAgcGFuZWR3aW5kb3dzLiAgTWF5IGJlIGFueSB2YWx1ZSBhY2NlcHRlZCAgYnk=ICAgICAgICAgICAgICAgICAgICAgVGtfR2V0UGl4ZWxzLg==ICAgICAgICAgICAgICAtcGFkeCBuICAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzICBhICBub24tbmVnYXRpdmUgIHZhbHVlIGluZGljYXRpbmc=ICAgICAgICAgICAgICAgICAgICAgaG93IG11Y2ggZXh0cmEgc3BhY2UgdG8gbGVhdmUgb24gIGVhY2ggIHNpZGU=ICAgICAgICAgICAgICAgICAgICAgb2YgIHRoZSBzbGF2ZSBpbiB0aGUgWC1kaXJlY3Rpb24uICBUaGUgdmFsdWU=ICAgICAgICAgICAgICAgICAgICAgbWF5ICBoYXZlICBhbnkgIG9mICB0aGUgIGZvcm1zICBhY2NlcHRlZCAgYnk=ICAgICAgICAgICAgICAgICAgICAgVGtfR2V0UGl4ZWxzLg==ICAgICAgICAgICAgICAtcGFkeSBuICAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzICBhICBub24tbmVnYXRpdmUgIHZhbHVlIGluZGljYXRpbmc=ICAgICAgICAgICAgICAgICAgICAgaG93IG11Y2ggZXh0cmEgc3BhY2UgdG8gbGVhdmUgb24gIGVhY2ggIHNpZGU=ICAgICAgICAgICAgICAgICAgICAgb2YgIHRoZSBzbGF2ZSBpbiB0aGUgWS1kaXJlY3Rpb24uICBUaGUgdmFsdWU=ICAgICAgICAgICAgICAgICAgICAgbWF5ICBoYXZlICBhbnkgIG9mICB0aGUgIGZvcm1zICBhY2NlcHRlZCAgYnk=ICAgICAgICAgICAgICAgICAgICAgVGtfR2V0UGl4ZWxzLg==ICAgICAgICAgICAgICAtc3RpY2t5IHN0eWxlICAgICAgICAgICAgICAgICAgICAgSWYgICBhICBzbGF2ZSdzICBwYW5lICBpcyAgbGFyZ2VyICB0aGFuICB0aGU=ICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdGVkICBkaW1lbnNpb25zICBvZiAgdGhlICBzbGF2ZSwgIHRoaXM=ICAgICAgICAgICAgICAgICAgICAgb3B0aW9uICBtYXkgYmUgdXNlZCB0byBwb3NpdGlvbiAob3Igc3RyZXRjaCk=ICAgICAgICAgICAgICAgICAgICAgdGhlIHNsYXZlIHdpdGhpbiAgaXRzICBwYW5lLiAgIFN0eWxlICAgaXMgIGE=ICAgICAgICAgICAgICAgICAgICAgc3RyaW5nICB0aGF0ICBjb250YWlucyAgemVybyAgb3IgbW9yZSBvZiB0aGU=ICAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVycyBuLCBzLCBlIG9yICB3LiAgIFRoZSAgc3RyaW5nICBjYW4=ICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWxseSAgY29udGFpbnMgIHNwYWNlcyAgb3IgY29tbWFzLCBidXQ=ICAgICAgICAgICAgICAgICAgICAgdGhleSBhcmUgaWdub3JlZC4gIEVhY2ggbGV0dGVyIHJlZmVycyAgdG8gIGE=ICAgICAgICAgICAgICAgICAgICAgc2lkZSAgKG5vcnRoLCBzb3V0aCwgZWFzdCwgb3Igd2VzdCkgdGhhdCB0aGU=ICAgICAgICAgICAgICAgICAgICAgc2xhdmUgd2lsbCAic3RpY2siIHRvLiAgSWYgYm90aCBuIGFuZCBzICAob3I=ICAgICAgICAgICAgICAgICAgICAgZSAgYW5kICB3KSAgYXJlIHNwZWNpZmllZCwgdGhlIHNsYXZlIHdpbGwgYmU=ICAgICAgICAgICAgICAgICAgICAgc3RyZXRjaGVkIHRvICBmaWxsICB0aGUgIGVudGlyZSAgaGVpZ2h0ICAob3I=ICAgICAgICAgICAgICAgICAgICAgd2lkdGgpIG9mIGl0cyBjYXZpdHkuICAgICAgICAgICAgICAtd2lkdGggc2l6ZQ==ICAgICAgICAgICAgICAgICAgICAgU3BlY2lmeSAgYSAgd2lkdGggIGZvciB0aGUgc2xhdmUuICBUaGUgd2lkdGg=ICAgICAgICAgICAgICAgICAgICAgd2lsbCBiZSB0aGUgb3V0ZXIgIGRpbWVuc2lvbiAgb2YgIHRoZSAgc2xhdmU=ICAgICAgICAgICAgICAgICAgICAgaW5jbHVkaW5nIGl0cyBib3JkZXIsIGlmIGFueS4gIElmIHNpemUgaXMgYW4=ICAgICAgICAgICAgICAgICAgICAgZW1wdHkgc3RyaW5nLCBvciBpZiAtd2lkdGggaXMgbm90IHNwZWNpZmllZCw=ICAgICAgICAgICAgICAgICAgICAgdGhlbiAgdGhlICB3aWR0aCByZXF1ZXN0ZWQgaW50ZXJuYWxseSBieSB0aGU=ICAgICAgICAgICAgICAgICAgICAgc2xhdmUgd2lsbCBiZSB1c2VkIGluaXRpYWxseTsgdGhlIHdpZHRoICBtYXk=ICAgICAgICAgICAgICAgICAgICAgbGF0ZXIgIGJlIGFkanVzdGVkIGJ5IHRoZSBtb3ZlbWVudCBvZiBzYXNoZXM=ICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIHBhbmVkd2luZG93LiAgU2l6ZSBtYXkgYmUgIGFueSAgdmFsdWU=ICAgICAgICAgICAgICAgICAgICAgYWNjZXB0ZWQgYnkgVGtfR2V0UGl4ZWxzLg==ICAgICAgIHBhdGhOYW1lIHNsYXZlcw==ICAgICAgICAgICAgICBSZXR1cm5zICBhbiAgb3JkZXJlZCBsaXN0IG9mIHRoZSB3aWRnZXRzIG1hbmFnZWQgYnk=ICAgICAgICAgICAgICBwYXRoTmFtZS4=UkVTSVpJTkcgUEFORVM=ICAgICAgIEEgcGFuZSBpcyByZXNpemVkIGJ5IGdyYWJiaW5nIHRoZSBzYXNoIChvciBzYXNoIGhhbmRsZSAgaWY=ICAgICAgIHByZXNlbnQpICBhbmQgIGRyYWdnaW5nICB3aXRoICB0aGUgIG1vdXNlLiAgVGhpcyBpcyBhY2NvbS0=ICAgICAgIHBsaXNoZWQgdmlhIG1vdXNlIG1vdGlvbiBiaW5kaW5ncyBvbiB0aGUgd2lkZ2V0LiAgIFdoZW4gIGE=ICAgICAgIHNhc2ggIGlzIG1vdmVkLCB0aGUgc2l6ZXMgb2YgdGhlIHBhbmVzIG9uIGVhY2ggc2lkZSBvZiB0aGU=ICAgICAgIHNhc2gsIGFuZCB0aHVzIHRoZSB3aWRnZXRzIGluIHRob3NlIHBhbmVzLCBhcmUgYWRqdXN0ZWQuICAgICAgIFdoZW4gYSBwYW5lIGlzIHJlc2l6ZWQgZnJvbSBvdXRzaWRlIChlZywgaXQgaXMgIHBhY2tlZCAgdG8=ICAgICAgIGV4cGFuZCAgYW5kIGZpbGwsIGFuZCB0aGUgY29udGFpbmluZyB0b3BsZXZlbCBpcyByZXNpemVkKSw=ICAgICAgIHNwYWNlIGlzIGFkZGVkIHRvIHRoZSBmaW5hbCAocmlnaHRtb3N0IG9yIGJvdHRvbW1vc3QpIHBhbmU=ICAgICAgIGluIHRoZSB3aW5kb3cu
The widget described here has already been implemented, with documentation and a full test suite. The widget is included with the Vu widget extension, part of the tktable SourceForge project at
Suggestions for possible future enhancements:
Allow specification of a weight for each pane, similar to the -weight option supported by grid, to be used when allocating space from a resize to panes in the widget.Allow a bindable image to be placed on the window sash, a la Netscape's Messenger, or Java Swing, to allow one-click expand and collapse of the pane.Integrate with the -setgrid option such that if a pane contains a -setgrided widget, the sash can only be moved in grid size steps.
None of these are prohibited by the current design, and could be implemented at a later date as enhancements to the widget.
This document has been placed in the public domain.