Copyright © 1998-2006,2011 Dipl.-Inform. Kai Hofmann. All rights reserved!

MUI Custom Classes Wish List


This list is only a wish list, so do not expect that Classes mentioned here will be available in the forseeable future. Also, do not ask when a Class from this list will be available. Send only mail if you are interested in implementing one of the below mentioned Classes. For a list of already existing classes take a look at the TUMULT page.


Custom Class wish list

Animation.mcc Class that can display animations in various formats (Amiga IFF based, animated GIF, MPEG etc.). It should be possible to control the animation (stoping it, starting it, playing it backward etc.). Martin Hunt,
ARexx.mcc ARexx port for applications. Kai Hofmann,
Card.mcc Displays one of 52 game-cards. It should be possible to display the whole card, or only the top or left, so that cards can be overlayed.
Usefull for various card-games.
Kai Hofmann,
CDE-style magnification wheel

The Common Desktop Environment (CDE) on Solaris features a filemanager based entirely on vector graphics. The icon view in a directory window can be zoomed in and out. It is zoomed by adjusting a wheel that is located to the left of the directory window. You see the wheel's narrow side, not the disc side.

Adjusting the wheel should "feel" like a wheel in thus far that moving the mouse up and down should be visualized and interpreted in a non-linear way.

Attributes to be considered:

  • width, height of the wheel's visible area
  • total virtual radius or diameter of the wheel - an internal parameter which is vital for a realistic wheel-like behavior

Contact me for detailed graphical sketches if you plan to implement it, or if you like, I will program the visual part of this class using vector graphics and/or guigfx.library. Your share would be the class framework and the config panel (if required).

Timm S. Müller,
Charset.mcc Displays all characters (as rel-verify buttons) and let the user input characters, so that he/she has no longer to search for key combinations like "alt e" for © (German keyboard layout).
Keep in mind that there are now new charsets that are NOT ISO8859-1 (standard Amiga charset).
Kai Hofmann,
Clipboard.mcc The clipboard should become a visual element with which the user can drag&drop text as like as other objects. Toolmanager 3 has something like this. It might become very usefull with a TextEditor that supports dropping of text objects (emails, urls etc.) to the cursor position. So the Clipboard.mcc must interact with the Amigas clipboard system. Keep clipbord units and different object types (graphics etc.) in mind. Kai Hofmann,
ColorRange.mcc Setting of single colors is already possible with Poppen.mui, but what is about color ranges? It should be possible to adjust a color range from one color to another with an unlimited number of nodes between, e.g. a color bar beginning at yellow turning to green in the first third and reaching blue within the next two thirds.

I imagine two presentations of this class.

  1. One listview connected to a poppen and a numeric slider as well as to two buttons for adding and removing entries. The listview entries show the color and the number of pens which shall fill the space between every entry and its successor. Although this presentation looks a bit too scientific, it has the advantage that users that are low on pens can exactly define how much pens are used for the color range and they can re-arrange the order of colors quickly by drag&drop.
  2. The color range is drawn from left to right and has markers where the nodes are placed. Clicking on a node activates it (e.g. for removing), double-clicking pops up the color requester, pressing and moving the mouse moves the node, clicking in an area without a node creates a new one.

Apart from processing user input the class should also support obtaining a good choice of pens for displaying the color range. The suggested method is to obtain the colors of the nodes first, setting up a priority queue at the same time with the intervals' length as priority. Then it should halve successively the largest interval until a specific color resolution or number of pens is reached or the palette runs out of pens (which is obviously the case if pens doesn't differ from their neighbours).

Henning Thielemann,
Container.mcc A container class contains other objects. It should be possible to limit the number of objects that can be within the container class.
Drag&Drop is a must be for a container class, because the user must be able to drop objects into the container and drag objects out of it.
A drag can be a copy or a move drag! A drop can be an insert or a replace drop! It should also possible to select objects that are within the container and to delete them or drag the whole group.
It would be usefull when the container class a minimum of three modes:
  • Source container -> drag only
  • Target container -> drop only
  • Source/Target container -> drag&drop
Also it should be possible to allow/disallow selection of single or multiple objects.
Another thing that must be mentioned is that possible only special types of objects might be droppable into the container.
Kai Hofmann,
Demonstration.mcc As applications become more and more complex from day to day it is not always possible to simplify the introduction into a new program by a well-styled user interface. A good GUI let the user see what steps are possible but does not tell the user how the steps must be combined to achieve what he want. Normally you write an amiga guide which explains all these connections. And it's also normally that no one reads the guide and either kick's off your program immediately or asks you how he can to this or that. But how can you show the user important steps anyway?

Right, with a demonstration! When started the Amiga takes over control over mouse pointer and keyboard input and operates with itself. Ok, you will know such tools from former time, which simply recorded mouse moving and keyboard events, but this is no longer possible with font sensitive GUIs.

The solution: A MCC which processes a script telling when to hit what GUI element and what explanation text should be printed during the action. A tape deck for skipping, replaying, stopping and continuation would be great.

The application must serve such an demonstration object and has to tell it which objects are associated with which names that are used in the script. The demonstration object knows that area objects has to be clicked with left mouse button, that menu objects has to be pulled down with right mouse button (hoping that no MagicMenu changes the expected coordinates), that string gadgets expect keyboard input and that scrollers want to be moved. You see that it wouldn't be a bad thing if the basic MUI classes had the facility to control itself or to help to navigate the mouse pointer.

Conclusion: I don't know if this is possible or senseful without extending the basic MUI classes, that means I don't know if this can be really done as external class or if this should be a point of further MUI development.

Note that this is also an interesting topic in conjunction with a new MUIBuilder since such a tool can help a lot to write such scripts. Hopefully there will be someone who will pick up development of MUIBuilder again, or do you want to switch to StormWizard in future?

Henning Thielemann,
Dice.mcc A dice is very usefull for games, especially when it is possible to set the number of sides (defaults to 6). Kai Hofmann,
Diagram.mcc Diagrams can show information which can be easy understood. There are different types of diagrams like: Beam-Diagram, Cake-Diagram etc. Kai Hofmann,
Envoy.mcc This class allows access to the Envoy 2.0 network. Kai Hofmann,
GammaColor.mcc With this class everyone can define the Gamma correction for color-pictures. Usefull for graphic applications. An example for this class can be found within TurboPrint. Kai Hofmann,
Graph.mcc,p A real graph class will be very important, but difficult to do! A graph class should display different graphs like a tree, acyclic graphs and cyclic graphs.
It should be possible that the user interact via the graph with an application (direct manipulation). Examples that might be helpful are:
The GraphWin part of the LEDA
Kai Hofmann,
HotkeyString.mcc This class allows an easier input for hotkey strings. As an example within the MUI preferences there are various places where to use hotkeys (iconification or the large list within the Navigtion page).
To simplify the usage for the user HotkeyString allows it to press the hotkey combination when the string gadget is active and then displays it as the well know string names. So users don't need to worry any longer about these string names:
shift lshift rshift caps capslock alt lalt ralt control lcommand rcommand lamiga ramiga numericpad space enter return esc tab bs del help up down right left f1 f2 f3 f4 f5 f6 f7 f8 f9 f10
Kai Hofmann,
Keyboard.mcc Works in the same way as the standard tool "KeyShow". So it displays the keyboard to let the user find out which key combination he/she has to press to display a character.
Keep in mind that there are different keyboard layouts for different countries as well as for different Amigas (A600 vs A2000).
Kai Hofmann,
Map.mcc Displays grafiks and allows it to define regions that can be selected. Drag&Drop support might also be interesting. This class is usefull to displays a map of the earth to select time zones like in the Amiga Locale-Preference-Manager. It will also be usefull for WWW Browsers. Kai Hofmann,
MathFunction.mcc This class should display mathematical functions like f(x) = x^2 etc. within a restrictable range. It would be very interesting if the drawn functions can be interactively manipulated by the user. Another interesting thing would be three dimensional drawings. Kai Hofmann,
MousePointer.mcc This should help application programmers to customize their mouse pointers. This is meant for applications where the mouse pointer changes when moved over specific areas (e.g. a text processor where the mouse pointer changes if you are over a selected area or turns into a pipette to show that it holds format settings now).

The class is sub-class of area class and shows the image of the mouse pointer. If pressed a file requester pops up and let the user select another image file which is loaded via datatypes then. If an object of this class has an ObjectId it imports/exports its image when requested. Further the class supplies a method which sets its image as the window's mouse pointer.

Henning Thielemann,
Network.mcc Abstract base-class to Envoy.mcc, AmiTCP.mcc etc. Kai Hofmann,
Notebook.mcc,p A notebook can be found within IBMs Presentation Manager and works like a page group. Kai Hofmann,
Paintbox.mcc Paintbox object that allowed standard loading/saving of pic-formats (probably with Datatypes) and gave the user the ability to scribble all over them. Maybe a built in drawingtoolbox? Offering standard shapes, brush size etc. This could be used as a simple icon editor for adding into applications to allow the user to easily configure the look of icons on his toolbar? But that would mean a change in the way the Toolbar.mcc works - using individual images rather than strips. Michael Carter,
Panel.mcc Allow the user to add a number of panels (no limits) which would be seperated by a divider like known from Windows, where you will see most status panels along the bottom edge of a MS application. Each panel should have the ability to add an image in it. It should also be capable of responding to a user clicking in it etc. Michael Carter,
PopupArrow.mcc,p Popup arrows can be found within PageStream3. They are similar to PopupMenu objects but they only show a popup arrow and not their selection state. Kai Hofmann,
PopupList.mcc,p PopupLists can be found within PageStream3 and WordWorth5. There they are used to select one of a whole list of fonts.
PopupList objects are like PopupMenu objects that include scrollers.
Kai Hofmann,
PopupMenu.mcc,p Popup menus are found in PageStream3 and WordWorth5. They are similar to cycle gadgets but they pop up always at selection time and the arrow points to the actual selection. Kai Hofmann,
ProjectSupervisor.mcc, ProjectWindow.mcc Classes that should help handling of multiple project windows. One goal is to simplify some steps by supplying methods that allow usage of notification (e.g. activating window -> setting current window + change the window title, selecting menu items -> do an action on the current project window, close last project -> quit application) the other goal is to introduce new features that are missed in most multi-project applications up to now (window arranging, switching between single project windows and one window with a listview connected with a project group).

A conception in AutoDoc format is already available.

Henning Thielemann,
RangeSlider.mcc A slider with two handles - one on each end - allowing to select a range, as well as move the range.
Should look and work like a combination of two NumericButtons and a Slider.
Useful for example to select the start/end track number for disk utilities.
Oleg Sergeev,
Reqtools.mcc You might also want to call requesters without pop up objects (Popasl.mui). Problem: ASL requesters are synchronous, that means the application is blocked while the requester is open. This is bad in (in terms of GUI) multi-threaded applications what MUI apps normally are. Blocking the application does also mean that simple refresh windows cannot be refreshed! You may use the IntuiMsgFunc - I never get this working. You may create an extra Dos process for the requester like Popasl do - it is still impossible to close the requester by the application (necessary when the application should quit while the requester is open).

The solution: Reqtools requesters offer asynchronous startup of requesters. Using application input handlers you can interleave requester and MUI actions. The only restriction is that every requester needs an own signal. I succeeded with it, but it is not easy. So the next goal would be to create a common MCC which supplies a simple MUI interface for reqtools requesters, including the asynchronous variants.

Henning Thielemann,
Ruler.mcc,p Rulers are found within PageStream3 and WordWorth5. They are restrictable to a range and the user can choose the measurement system for scaling them.
Work in progress by Jacek Rzeuski,
Kai Hofmann,
Speed.mcc,p Speed should have a maximum speed and it should be possible for the user to change between different systems like km/h, miles, seamiles, lightspeed etc. Kai Hofmann,
SpellCheck.mcc Provide facility to use exisiting dictionaries from Wordworth, FinalWriter etc. and their custom dictonary. Maybe provide some standard dialog boxes, that are customizable by developers.
Would work by passing spellcheck.mcc a pointer to the text buffer (say from texteditor.mcc) and it would go through and provide cursor positions of words that are either mis-spelt or not present in dictionary. The cursor position returned could be used to highlight the word in whatever text editor is used.
Maybe ASpell could be used as basis if the author was contacted?
Michael Carter,
TCPIP.mcc This class allows access to the AmiTCP/MIAMI/.. networks. Kai Hofmann,
Thermometer.mcc,p The range of temperature should be restrictable and it should be possible for the user to switch between different measurement systems like:
Celsius, Kelvin, Fahrenheit, Réaumur
Kai Hofmann,
Toolbar.mcc,p Toolbar like it cn be found in WordWorth, PageStream3 or MS-Windows programs. Should be completly and simply user editable with drag&drop. Salvador Fandiño,
Toolbox.mcc,p Toolbox like it can be found in PageStream3 that can simply be customized by the user. Kai Hofmann,
VertRegister.mcc,p Vertical register/tabs as seen in Microsoft Access and probably other applications.

As for how it would operate - I guess just like the original Register class. Maybe add more config for it so that the tabs could be vertical or horizontal. Also the ability to have them going along the bottom of a page as an Excel spreadsheet does.

Michael Carter,
Weight.mcc,p This class should display weights in different measurement systems like kg etc. Maybe a pair of scales would be a good choice to display a weight. Kai Hofmann,

Other wishes

More informative feedback
I wanted to start this wish with a citation from the following book:

Designing the User Interface
Strategies for Effective Human-Computer Interaction
Ben Shneiderman
Second Edition
Addison Wesley, 1992

"Eight Golden Rules of Dialog Design

3. Offer informative feedback. For every operator action, there should be some system feedback.

I also wish to have special feedbacks (maybe special (animated) pointer images) during the following actions:

Printing, (Hard-)Disk access, Sending/Receiving Fax, Scanning, Sorting, Searching, Network access, (De-)Compressing, Tape access, CD access, Calculating something

As an example I would like it to see a book where the pages turn over as long as a search is in progress. Maybe an mcp where the user can change the pointers is a good idea.

Also special pointer images should be applieable to Areas, this is used in WWW Browsers where the pointer changes when it is over a link - another example is TurboCalc where the pointer changes to let the user know about things he can do.

Kai Hofmann,

We need Drag&Drop between applications - this will be very handy for things that are used everywhere - like an address database which will be used with many other programs.

Introduce a new "help"-mode which allows user to see all objects that are draggable within an application (by highlighting in some way). This will increase the learning speed of the user!

Also it would be usefull to have another "help"-mode that allows the user to see all possible destinations for a draggable object - maybe as an extra "learn" mode that could be switched off later when the users knows the application well enough.
Such a mode might also be helpfull for developers to find out if all possibilities are possible ;-)

Kai Hofmann,

Allow it for keyboard useres to display the Bubble help for the actual object - maybe with SHIFT-HELP ?

Kai Hofmann,

Citation from Theo Mandels "The Elements of User Interface Design":

Another real-world metaphor that is extremly usefull in an object-oriented user interface is the template. Template is the term for what you know as Post-it notes or the yellow sticky pads that everyone uses at home and at the office. The concept is the same on the computer; just drag fram a template object and drop it anywhere, and a new object is created. The template is a powerful tool in the object-oriented interface. Any object of any type (data, container, or device) can potentially be made into a template object.
The power of templates is that the original object may contain any type of data, including time-dependent or variable data. For example, inovoices, a standard memo, and a form letter all may have variable data that creates in a new object from a template. An inovice template might contain an inovice number and the time and date of creation. As users drag an inovice from the template inovice, a new inovice is created containing a new inovice number and the current time and date.

The best example for the usage of such templates would be MUIBuilder I think.

Kai Hofmann,

The String class should accept the string via [SHIFT-] TAB -another good feature would be to allow the user marking of the string via the mouse.

MUIA_String_ErrStatus -- (V??) [..G], ULONG

This attribute reflects the status of a string gadget. For normal string gadgets this is always FALSE (0) - for special string gadgets like DateString, TimeString, MathString, etc. TRUE (>0) indicates an inacceptable string content. Where the error is class dependent. The status can be used to notify a LED and for testing before accepting a dialog window.

MUIA_String_ErrBehaviour -- (V??) [ISG], ULONG

This attribute defines the actions that should happen when an illegal state/string is detected (maybe an unparsable date etc.).
Activates the string gadget
Sets the Cursor onto the error, works only with MUIV_String_Activate

Defaults to: 0 (Maybe user definable via preferences?)

Kai Hofmann,

Dipl.-Inform. Kai Hofmann, <> - Bremen, Saturday, 27-Jul-2013 09:51:16 MEST