GUI TOOLKIT INFORMATION (here’s a start): http://en.wikipedia.org/wiki/Graphical_user_interface_toolkit http://www.geocities.com/SiliconValley/Vista/7184/guitool.html http://www.free-soft.org/guitool/ http://www.efalk.org/Widgets/ http://freshmeat.net/articles/view/928 POPULAR PLATFORM-SPECIFIC GUI TOOLKITS LOW LEVEL HIGH LEVEL integrated in the OS: Mac: Mac OS toolbox or Macintosh APIs: Interface Builder / Cocoa: (native OO AP environment for OS X); evolved from the NeXTSTEP development software, closely mirrored in Gorm, interface builder for GNUstep. Carbon: (Mac) improved version of Mac APIs for OS X; Carbon is the lower level APIs and Cocoa is a higher level application framework. Access Carbon using C, C++, Pascal, Ada, and Cocoa uses Objective C and java; is comprised of “Managers” (HIView, HITheme…), each defining a set of functionally-related data structures and functions to manipulate them. So much more… Windows API: (Windows) set of APIs for use by C/C++ programs. So many versions… Win16, Win32, Win32s, Win64, WinFX (object oriented API – the GUI API set for WinFX called Windows Presentation Foundation, requires high-end graphics cards to properly render some fx.) so much more… MacApp: (Macintosh framework, most of 1980s) MacZoop: (Macintosh C++ framework) based on Carbon, smaller, more manageable alternative to now defunct Think Class Library (TCL) from Symantec, and later Powerplant framework from Metrowerks. Developed 1994-2003, but then discontinued. Powerplant: (from Metrowerks) Windows: A layer on top of the OS: Microsoft Foundation Classes (MFC): (wrapper for Win32API – not independent toolkit) X windows: provides basic building blocks (accessed by Motif, GTK+, Qt) Object Windows Library: (Borlands alternative to MFC) (wrapper for Win32API – not independent toolkit) Amiga OS Intutition: Since Amiga OS 2.0, the intuition library is disk (not ROM) based and object oriented. Invokes Workbench (which is the native graphical shell) library and Icon library, which comprise the native GUI. Windows Forms: (.NET’s classes for GUI controls) Unix: Xaw: (Project Athena widgets for X Windows) simple user interfaces only… Motif: (used in Common Desktop Environment (CDE) and created by Open Software Foundation as OSF/Motif, now owned by The Open Group) Sun Microsystems (major Motif user, will switch to GTK+ and GNOME… Lesstif: (open, LGPL Motif version, developed by the Hungry Programmers) POPULAR CROSS-PLATFORM GUI TOOLKITS Based on SVG: airWRX: application framework, runs from USB flash drive (flash drive becomes server, PC host and other PCs nearby turn into multi-screen web-like digital workspace Based on Java programming language: Abstract Windowing Toolkit (AWT): platform independent windowing, gfx and gui widget toolkit. Part of Java Foundation Classes (JFC). In JDK version 1, widgets have been superseded by those of Swing Toolkit. Swing: (Sun’s replacement for AWT in newer Java versions), part of JFC. Support pluggable look and feel; slower execution, but identical look/feel on all platforms. Standard Widget Toolkit (SWT): an alternative to AWT and Swing from Eclipse project; will use the running platform’s widget tookit underneath (GTK+ or Windows API) Open source framework for GUI development in Java. Licensed under the Eclipse Public License. Written in standard Java, accesses platform-specific libs thru the Java Native Interface. Based on C/C++ with bindings for other: wxWidgets: (formerly wxWindows), (relaxed LGPL); abstracts toolkits across several platfoms (Windows, Apple Macintosh, Linux/Unix for X11, Motif and GTK+, OpenVMS and OS/2. for C++, Python and Perl, Java, Smalltalk…provides thin abstraction to native widgets. Also has ODBC based database library, interprocess communication layer, socket networking etc. (other functionality besides GUI). FOX toolkit: (LGPL) has a currently hard-wired Win95style theme (bleh); uses platform specific graphical primitives to display GUI elements (like Swing) as opposed to using native widgets (like Java AWT); has modern widgets, unlike Tk and GTK+; Written in C++ with bindings for Python, Ruby and Eiffel. FLTK (LGPL): (Fast Light Toolkit) “fulltick” C++, Windows, GNU/Linux, Mac OS X, Solaris, Unix, UI builder called FLUID KWwidgets: C++ open, has set of core widgets, composite widgets (and VTK widgets). Testable. Tcl wrapping Presenter: Tcl/Tk: accessed from Tcl, Python XVT: C, C++, development tools and libraries for GUI; Windows, Linux, Mac, Solaris (oops, purchase only) GTK+: (LGPL), mostly for X Windows; used in GNOME DE JUCE: C++ class library for developing cross-platform apps. Qt: (GPL), for Unix/Linux (X Windows), MS Windows, MacOS X and embedded systems; also commercial; used in KDE V: Common C++ wrapper; native look and feel (LGPL) CLX (Component library for Cross-Platform): used with Borland’s Delphi, C++Builder, Kylix for building crossplatform applications. Based on Qt, wrapped so its interface is similar to VCL toolkit. Zoolib: seems inactive for a long time… GLOW GLUI OPTIONS language & bindings Tcl/Tk Tkinter testable C; Tcl, python, java Python bindings for Tcl license full widget set BSD n n|native n n|native Python allows custom vtly/poplry% widgets | style (freshmeat) docs comments Efficient for prototyping; slicer developers have most experience with this set of tools.. Missing many modern GUI widgets. 0.19 / 9.92 great 0.00 / 0.36 brief 0.59 / 24.45 ok Gimp ToolKit; library for creating GUIs. Designed to be small and efficient. Used by GNOME desktop project Check: ported to windows, or cross-platform? brief TkZinc is a widget – like the canvas widget in Tk, but with transparency, supports item hierarchies, scaling, rotation, etc. Not a GUI toolkit! Looks great tho. Portable GUI toolkit for Python; basically python bindings for Tk. BSD+Python licenses are GPL compatible. GTK+ C; perl python Java, Tcl, etc. LGPL y y (hard)| Motif-y++ TkZinc Tcl; perl/Tk, python/Tkinter LGPL NA y|y GPL y y|native 0.28 / 20.97 good y y|win95-y 100 / 10.43 good 0.05 / 6.38 good Small, supports rapid prototyping, has limited widget set. Direct OpenGL support; portable GLUT header file… good Native widgets if possible; fallbacks if not. Not themable. Integrated OpenGL, HTML, Networking… large set of GUI widgets. Qt C++; python, java FOX toolkit C++: Python LGPL FLTK C++; Tcl, Python LGPL y y|? wxWidgets C++: Python, java, perl… LGPL y y|native 0.1 / 6.17 y|native 0.0 / .43 KWwidgets C++ Zoolib C++ MIT C++ GPL ? y|y GLOW C++ ANSI/ISO LGPL ? y|same GLUI C++ LGPL ? y|same 0.0 / .41 V C++ LGPL ? ?|native 0.0 / .08 JUCE O-O, supposedly simplifies writing and maintenance of GUIs. In addition to GUI toolkit, has provision for file handling, networking, XML,… takes long to compile. All fox objects can send messages to each other and receive events; auto updating of GUI elements according to specified conditions in the app. OpenGL support. Objects not referred by namespace, but by prefix. y y ? 0.07 /1.07 not much. not much. ok ok not much. Seems pretty dead. Good for creating highly-specialized GUIs and handling gfx and sound. Not sure how extensive the widget set is; static library; C++ wrapper around GLUT; o-o UI framework; extensive widget lib; custom look and feel across platforms; can define and integrate new widgets. Old. GLUT-based. Can’t define own widgets or customize existing ones much; without o-o framework for writing more complex programs… Doesn’t seem viable anymore.. OPTIONS Linux Tcl/Tk TkInter Unix/X11 y Unix/Motif y Win95/98 NT/2000 y y Win3.1 OS/2 y MacOS OSX y y (python) GTK+ y y TkZinc y y y y y Qt y y y y(98) y y y y (GTK-OSX alpha) y y y FOX toolkit y y y y y (with Xserver) FLTK y y y ? y y y y y y wxWidgets y KWwidgets ? Zoolib y JUCE y GLOW y y y y y GLUI y y y y y V ? y y y some POSIX variants with X 98/ME 95/98/ME y (in prog) y 2000/XP y y y y y y ? y y y y y? ? y TARGET SLICER 3 GUI FEATURES WORKSPACE (DESKTOP) LAYOUT Collapsible component windows (like gui, viewer, console, etc.) Configurable arrangement for component windows Ability to save/load preferences (i.e. workspace configuration, preferred viewing mode) Additional viewing modes (lightbox for instance) GUI PANEL APPEARANCE AND BEHAVIOR Ability for programmer to customize the style of widgets rather than relying on platform-specific look, or some default ugly look. WIDGET SET Basic modern widgets Composite widgets Ability to define custom widgets PROGRAMMING INTERFACE C++ (speed) with bindings for scripting language good, but not required. (Tradeoff ease of prototyping with interaction speed) COMMUNITY PROVISIONS Detailed set of design guidelines for developers (see GNOME human interface guidelines 2.0) SLICER 3 GUI WIDGET WISH LIST BASIC WIDGETS: Top-level widgets, frames, tabs (or other structural dividers), dialogs, messagebox, button, radio button, slider, scrollbar, thumbwheel, colorwheel, file browser, listbox, entry, canvas, label, bitmap widget, rich text or html widget, checkbox, menu (pulldown, cascaded) and menu button, graph/chart, histogram, table, tree, (continue)…. COMPOSITE WIDGETS: Slice viewer (for single and multi-volume / time-series), Multi-slice viewer (for single and multi-volume / time-series), 3D Viewer, Single pane info viz viewer (for data not to be seen in spatial context of 3D viewer.) lightbox viewer (for single and multi-volume / time-series), layers editor for compositing/viewing (behavior for multi-modal data?), Transfer function editor, Material editor (surface properties, etc.) Volume selector, Model selector, MRML node properties dialog box, Data model viewer (hierarchy editor) Task viewer, Console or log widget, (continue)…