1. General considerations
=========================
* VPTK is a tool for Perl/Tk widget-level scripts development
* It can be used for user interface sketching
* Code is instantly generated and could be re-used in standalone app
2. User interface
=================
* All generated code stored as Perl/Tk ready-to-run program
* Project displayed both visually and as widgets tree
* Most functions accessible both from pull-down menu,
toolbar panel and by keyboard shortcuts
3. Restrictions
===============
* Commas and brackets prohibited inside of text fields
* Due to known bugs in Tk some balloons not dispayed
* No undo/redo for file properties changes
4. Implemented features
================
* Undo for all artwork modifications
* Unlimited undo/redo
* Object editing using selection bars
File: Open, New, Save, Save as, Setup, Quit
Edit: Undo, Redo, Delete, Rename, Properties
Create: Before, After, Subwidget
View: Repaint, Code, Options
* Object selection by click on view window
* Right-button context menu on tree and view window
* Full-functional program generation
(use ...; mw=...; {body} MainLoop;)
* Help & HTML documentation
* Full menus support
* Code generation with 'strict syntax'
* Conflicts in geometry managers resolved automatically
* Balloon diaplaying code for each widget
* X/Y mouse pointer coordinates displayed
* Default values for most widgets apon creation
* Default entries for lists and other arrays (display only)
* View options: Balloons on/off, blink on/off, coord on/off
* User-defined widget names on creation + rename option
* Callback functions support
* User-defined code support
* Widget state variables
* Automatic declaration of widget-dependent variables
* Code portions cut-n-paste
* Syntax highlight in code preview window
* NumEntry used for numeric data input
* Debugging mode for generated app
* Syntax check for generated code (perl -c)
* All edited widgets defined as abstract objects
* New widgets could be plugged-in without main routine modification
* User code before main loop - full support
* Balloon assigned from 'edit menu' (one-to-one)
* Bindings list in File->Setup (one-to-many)
* Clipboard paste after/under selection
5. To be implemented
====================
* Cursor changes on selection/object
* Full widgets set
* Portions save/retrieve
* External templates for most basic windows:
Dialog, Configuration, Editor
* Subroutines/variables/pictures management windows
* Tiler as geometry manager
* Tix->form as geometry manager (?)
6. Known bugs
=============
* Double-click on HList works diffently in Unix and M$ Win
* Bug in LabFrame and BrowseEntry not fixed - detour ;-)
* No syntax control for callbacks, user code and variables
7. Data structures
==================
All data represented as following objects:
- Array of all widgets descriptors
- Widgets hierarchy tree (array):
w_Frame_001
w_Frame_001.w_Frame_002
w_Frame_001.w_Frame_002.w_Button_001
w_Frame_001.w_Frame_002.w_Label_001
w_Frame_001.w_Frame_003
w_Frame_001.w_Frame_004
w_Frame_005
w_Frame_006
- Hash (Widget id) -> descriptor
Default widget identificator: w_<WidgetType>_<0padNumber>
Widget descriptor:
* ID
* Type
* Parameters
* Geometry info (pack/grid/place) + parameters
* Final output ID
* Display widget (?)
External data representation:
$<widget ID> = $<Parent ID> -> <Type> ( <Parameters> ) -> <Geometry>;
Menu items (and others that don't require placement):
$<widget ID> = $<Parent ID> -> <Type> ( <Parameters> );
8. Geometry conflicts and bugs in generated code
================================================
What is geometry conflict? First of all it's mix of different
geometry managers under same parent widget. Additional restriction
(possible deviated from first one) Tk geometry manager gets
mad if user tryes to use 'grid' geometry under frame with label.
Solution is to detect and fix such cases in 3 potential situations:
- widget creation
- widget editing
- widget move
1st case is most trivial - newly created widget simply inherits
geometry manager from it's 'brothers'
In two rest cases we can detect conflict by comparison with any
of 'brothers'. Possible solutions (we'll let user to decide):
- Propagate conflicting geometry manager to 'brothers'
- Adopt conflicting geometry manager according to environment
- Cancel operation
Yet another geometry conflict source: when some widget use
packAdjust 'sub-widget' while 'brothers' use non-pack
geometry managers. No solution till now (simply avoid such
situations - otherwise your application became stuck).
Generated program can fail on following known bugs:
- Missed menu for Menubutton/cascade (simply don't forget it!)
- Empty menu & -tearoff=>0 (nothing to dispay - avoid such cases!)
- Balloon assigned to BrowseEntry/LabFrame cause error messagess
on double-click (in older PerlTk versions)
...and now documented bugs can be referred as 'feature' ;-)
9. Menus handling
=================
We have two types of Menu: Menu and Menubutton
Menubutton is the root of one Menu
Under Menu user can create following objects:
- Command
- Checkbutton
- Radiobutton
- Separator
- Cascade
Under Cascade can be created any of listed objects too.
Module Install Instructions
To install vptk_w::Project, copy and paste the appropriate command in to your terminal.