Slicer3GUIworkingDoc - NA-MIC

advertisement
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)…
Download