JEWL (John English's Window Library) is a set of Ada packages aimed at novices which enables reasonably sophisticated GUI applications to be built with a minimum of effort. JEWL is distributed under the terms of the GNU General Public License.
- See the download page for instructions on how to download and install JEWL.
- See the documentation for more detailed information about JEWL.
The rationale behind the development of this library is that beginners are often frustrated with the text-only interface that the standard Ada library provides and complain that they would prefer to learn Visual Basic or Java instead, largely because they can produce modern-looking programs with minimal effort. The intention of JEWL is to provide a development kit for GUI-based programming in Ada which is sufficiently simple that it can be used from the "Hello world" stage onwards. For this reason the emphasis is on ease of use rather than completeness. Existing GUI packages are often bewildering to novices with the range of facilities they provide, and they achieve flexibility at the price of complexity. As a result, hand-coding a GUI can be extremely difficult. Languages like Visual Basic use a GUI builder to avoid the need for hand-coding, but the code that a GUI builder generates is often difficult to understand (and easy to avoid having to understand). For developing production code this is not an important issue, but in education it can cloud the student's understanding of what is really going on. It is also easy for students to get sidetracked into perfecting the appearance of the user interface at the expense of perfecting the desired functionality.
JEWL is relatively inflexible by comparison with systems intended for developing production code and only provides access to a limited subset range of the underlying facilities, but it is still sufficient for a wide range of novice programs. It is designed so that a program using a graphical interface can be developed by hand-coding, such that the resulting program structure will be similar to an equivalent program with a traditional text-based interface.
The library source code is also potentially interesting as a case study, as it uses facilities such as tasks, protected types, private packages, tagged types, reference counting and controlled types to hide the complexity of the underlying system.
I hope that you find this library useful, and I welcome any comments or suggestions you might have to help improve it.
John English, April 2000
Email: je@brighton.ac.uk