Short: T1Manager New Design Mock-Up Author: sisk637 cyberonic com (Robert A. Sisk) Uploader: sisk637 cyberonic com Type: util/libs Version: 1.9 Requires: util/libs/mui38usr.lha util/rexx/rxmui.lha util/rexx/royalbridge11.lha Architecture: generic T1ManagerM is a mock-up of a new GUI design for T1Manager from util/libs/Type1Engine. It is a MUI application written in ARexx, developed on an A4000/040 with AmigaOS 3.9, MUI 3.8, RxMUI 42.6, and RoyalBridge 1.1. I have some criticisms of T1Manager, and although the source code is available, my programming experience is more with ARexx than with C. As this package apparently has been out of development for many years, I appeal to the Amiga community for an interested developer to consider my input. I offer this mock-up and the accompanying suggestions in the spirit of improving software on the Amiga. My mock-up script illustrates many of my suggestions. It reads the installed font files but doesn't change them, so you can play with it all you want. To open the modify window you must have installed at least one Type 1 font using the real T1Manager. Bugs The drawer cycle shows only 10 drawers from the Fonts: assign. It should show all of them, no matter how many. Better yet, use a PopASL to specify any drawer, not just assigned Fonts: targets (see Feature Requests below). Fonts often fail to install and the error messages I've seen are cryptic and unhelpful. One says "Error 4, Can't build SpaceWidth & YSizeFactor for type1 file:" followed by the file name. Why can't T1Manager install the font? A programming error? Is the font file broken? If so, how? The user needs to know. Update: This problem seems to be a program error; some fonts fail to install on one occasion, and then succeed on another. Renaming a font fails when the changes are only letter case. Changing the encoding sometimes fails: e.g. unchecking Internal on Adobe's ZapfDingbats 1.4 complains "Error reading font - perhaps it needs to be modified or removed and reinstalled?". When a file can't be processed during any action, the program should give the DOS error message: e.g. "object not found", "file is read protected". About type1.library rather than T1Manager: When ObtainInfoA() OT_GlyphMap fails because the Type 1 file can't be read, the result code is the undocumented value -4. According to the diskfont/oterrors.h include file, the value should be 6. Processing Errors Installing, modifying, renaming, and deleting fonts unnecessarily reload the font list. These actions should just insert and/or remove entries as necessary. Renaming fonts should sleep the application so the busy pointer appears, as it does for installing fonts. Closing/canceling the Install file requester unnecessarily reloads the list. I've found that renaming a font that has no sizes drawer unnecessarily creates one. GUI Cosmetic Errors An input listview should have an input (raised) frame rather than a read-only (recessed) frame, e.g. the font listview. An empty input listview should be disabled. An action button that opens a window or requester should have a label that ends with an ellipsis, e.g. "Install...". Boolean values should be shown as checkboxes instead of cycle gadgets, e.g. Serifs. GUI Visual Improvements In my judgment the main window looks better with the drawer gadget under the listview and the buttons at the bottom. The Install file requester's OK button label should be "Install" and the title should include that word. I reordered the attribute cycle gadgets to match the usual order in font names. I relabeled some gadgets with more user-friendly names, e.g. "YSizeFactor" to "Height Factor", and with more specific and accurate names, e.g. "Delete Size" to "Remove Sizes". In my view "remove" is more appropriate for taking entries and values off a list; "delete" is normally used for erasing an object from existence. In my redesign I prevent the cycles and numeric strings from uselessly expanding horizontally. Processing Improvements My mock-up sets the SingleTask attribute: A tool that manages fonts, which are global resources, probably shouldn't run as multiple copies. Load the font list initially before opening the main window. I've found that when loading a list, inserting list entries at the bottom and then sorting is faster than inserting sorted. Loading and multiple changes to lists should use quiet mode for better speed and less visual activity. Input listviews should have a control character and indicate it in a label. The multiple-selection listviews Fonts and Sizes should have pop-up selection menus containing All, Toggle, and None items. Of course, each item should be disabled when it has nothing to do. The fonts listview should be the main window's default object so it can be controlled from the keyboard when no object is active. For the modify window it should be the sizes listview. Installing fonts shouldn't show the totals requester; instead, because the process can be slow, show a progress window with a gauge. (To see my example, simulate installing multiple files - and stopping - with the mock-up.) Insert the font entries individually as they are installed, perhaps using quiet mode. When installing a font that already exists in the drawer, it seems rude to refuse to install it. It would be more helpful to present a string requester for entering a new name and provide the options Rename, Replace, Replace All, Skip, Skip All, and Stop. When installing a font that already exists in another drawer, it seems presumptuous to arbitrarily rename the font. Present a string requester with the options Rename, Skip, Skip All, and Stop. If you implement my request to support drawers not in the Fonts: path (see below under Feature Requests), this situation wouldn't apply - unless you decide to determine whether the drawer is in the path and if it is, to test for cross-drawer duplicates. Removing fonts shouldn't show a total requester; removing the entries from the list is enough confirmation. I've reordered the buttons so the positive ones are at the left. I've renamed Cancel to Stop because stopping the process doesn't reverse the removals already done. As for install use quiet mode. I reorganized the Modify window using register pages to facilitate adding new values to modify and to alleviate the shortage of control characters. The window is resizable in both directions. Whichever of the members or sizes listview is exposed is the window's default object. The gadgets for maintaining font sizes behave strangely: for example, activating a listview entry loads the string; it shouldn't. When I enter a new font size, press Add Size, and activate the size I just added, Delete Size disables; it shouldn't. The string accepts values as small as 2; this doesn't seem useful. I changed the lower limit to 4, as this appears to be the value used by the ASL font requester. When sizes without bitmaps are selected, setting the string to a non-existing value disables Add Bitmaps; it shouldn't. Entering a new size greater than 124 disables Add Size. Unless there are reasons I don't know about to reject large sizes, T1Manager should be able to create large (e.g. 400-pixel-high) bitmaps. Adding and removing bitmaps changes the select states of the list entries; it shouldn't. Creating bitmaps can take time. It should show a progress window similar to that for installing fonts, but saying "Creating bitmap" and e.g. "30". (This is done during the saving of changes, which my script doesn't implement or simulate.) Feature Requests The history log has a 3/27/94 note about a desire to save the install source drawer. My mock-up does this by adding a text gadget at the bottom of the window's root group with a ShowMe value of false. I update the requester's drawer when I drop an icon and at quit time set the text and save it. Support maintaining fonts in any drawer, not just in drawers already in the assigned Fonts: path. TTFLib does this. Include Full Name in the modify window for display and updating. My script gets it from the Type 1 file at modify time, but T1Manager would add it to the .otag file at install time. As shown on the Styles page, the Family name should be modifiable to fix bad names and to reorganize families. Also, please support the use of style variants in preference to algorithmic styles. I assume the variants would come from the same drawer as the font being modified. The member list shows the family's member fonts that were read when loading the Fonts listview. Variants can be loaded by dragging members into them. Renaming a font, and installing and removing fonts would update the family lists. Changing the font's family would remove the font from the current family and add it to the new. Canceling the modify would remove the font from the new family and restore it to family it had when it was loaded. My mock-up doesn't implement the renaming of fonts, and my simulation of installing them doesn't update the family lists, but removing fonts, changing the family, and canceling modify demonstrate the processing I describe. Finally, I'd like to specify algorithmically generated styles to be inhibited. These values would apply when a variant wasn't specified or found. History 1.9 Fixed bug: Install file requester processes selected files even if file string is empty. 1.8 Redesigned Styles page to replace multiple variant pop-up lists with a single list of family members for dragging into variants. Fixed bugs: Sets members or sizes listview as default object. 1.7 Updated Processing Errors section of criticisms. Changing family is faster. Fixed bug: Rejects null family. 1.6 Last history was wrong. 1.5 Updated Bugs section of criticisms. Reordered attribute cycles. 1.4 Added some criticisms and reorganized them. Reworked Remove Fonts requester and changed that and Install Rename requesters to use Stop rather than Cancel. Fixed bug: Loads style variants and inhibited styles from .otag file. Fixed bug: Showed wrong Slant setting. Fixed bug: Fixed width fonts disabled AFM file string but not pop-up button. Fixed bug: Potential problems with tag retrieval. 1.3 Fixed bug: Last fix was broken. 1.2 Fixed bug: Mishandled 32-bit memory address values. 1.1 Fixed bug: Style variant pop-up list used family string contents when value hadn't been finalized by pressing return. Fixed bug: Font list didn't respond to cursor keys in font string. 1.0 First Aminet release. If you find errors or problems in this mock-up, please let me know, but preferably I hope you'll improve T1Manager by incorporating corrections in your new release of this important tool for the Amiga.