home *** CD-ROM | disk | FTP | other *** search
- interface manager vsn 2.00
- ----------------------------------------------
- (c) 1990-1992, software interrupt developments
- simon huntington
- all rights reserved
- copyright belongs to software interrupt at all times.
-
- You are free to use interface in any commercial products free of charge.
- If you feel the need to send any money to me (thanks in advance).
-
- --------------------------------------------------------------------------------
-
- Changes from version 1.32
-
- This version has been fully re-written using the acorn aof assembler.
-
- Border type has changed to z to avoid conflicts with risc-os 3
-
- Interface_Plot3dIcon has been changed so the first parameter is a window
- state block instead of a window handle
-
- Names have changed to interface_...., old names are still supported
-
- Better redraw code to correct problems with multi-sync modes where the icons
- were not alligned correctly.
-
- Interface_BoundingBox now returns the state of the button
-
- New border types
-
- *command to allow changes in the slabbing colours.
-
- --------------------------------------------------------------------------------
- This manual and software is public domain. It may be copied and distributed
- freely as long as:
-
- It is not separated from the documentation (except for commercial use)
- The module is not tampered with
- You do not claim that you have written the module
- Do not use any of the code contained in this module in your own code
-
- If you wish to use this in a commercial product please contact me so that I
- can make sure you have the latest release, please send a disk.
-
- In no circumstances shall the author be liable for any damage, loss of
- profits, time or data or any indirect or consequential loss rising out of
- the use of this software or inability to use this software.
-
- Contacts:
- Arcade BBS (081 654 2212)
-
- All mail on the above Bulletin Bords should be mailed to JICK
-
- **************** Introduction ***********************************************
-
- Interface is a small module that allows application programmers to implement
- a colourful and pleasant graphical user interface. Interface provides many
- more functions that allows you to change the pointer shape easily and to
- interface with the !Help or !Spy application.
-
- The Interface module provides functions to improve the friendliness and
- appearance of the application. The application should still operate as
- stated in the Acorn guidelines in the Programmers Reference Manuals.
-
- The module implements a number of SWIs which are described further in this
- manual, these SWI calls can be called from any language. Most of the
- functions provided are specified in the icons validation string, and so no
- complex programming is needed to make the application look good.
-
- This guide tells you how to fully implement the features of Interface. It is
- split into the follow sections:
-
- The first section explains the validation strings options provided
- by Interface.
-
- The next section gives details of the SWI calls provided.
-
- The remaining section covers hints and tips on programming.
-
-
-
-
-
-
- **************** Technical details ***********************************************
-
- An indirected text icon can have a validation string which is used to pass
- further information to the WIMP, such as what border type the icon has and
- also what pointer, if any should be displayed whilst over this icon. The
- syntax of a validation string is:
-
- validation string ::- command {;command}*
- command ::- (b | z) border-type {border-spec} |
- r on/off-type {,icon-number}* |
- u on/off-type {,icon-number}* |
- p text-string {,x} {,y} |
- i text-string |
- k key-code
- border-spec ::- {,button-slabbing-mask} {,slabbing-time} {,colour}*
-
- The parameters above are described under the relevant validation command. In
- simple terms, a validation string consists of a series of 'commands', each
- starting with a single letter and seperated from the following command by a
- semi-colon. {}* means zero or more of the thing inside the {}. The
- following commands are available with the Interface module.
-
- These commands are provided in addition to the standard Wimp validation
- strings. I suggest that you edit the !FormEd program to allow you to enter
- larger validation strings, otherwise when entering a help command you will
- only be allowed a maximum of 80 characters.
-
- The (B)order command tells Interface which border to use when rendering an
- icon. The border types available at present are :
-
- Type 0 This is a single border used mainly for headings and action
- icons. The icon will slab inwards if the user clicks a button
- whilst the pointer is over the icon providing it is not set to
- ignore mouse clicks.
-
- Type 1 This is a double border and should be used to group together
- icons that perform an operation.
-
- Type 2 This is a triple border and should be used on the default action
- button. The icon will slab inwards when the user clicks a button
- whilst the pointer is over this icon, providing it is not set to
- ignore mouse clicks.
-
- Type 3 This is a wide inverted border and should be used on writable
- icons. This border type is usually used in conjunction with the
- writable pointer.
-
- Type 4 This is an inverted version of border type 0
-
- Type 5 This is a double wide border as used by Acorn in RISC OS 3
-
- Type 6 Etched in border
-
- Type 7 Similar to border type 0, thinner in mode 20
-
- The second optional parameter is the button slabbing mask. This states
- whether the icon should be slabbed until the button is released. The values
- contained in this parameter can be from 0 to 7. The button slabbing mask can
- be calculated in the following way:
-
- Value Button Meaning
-
- 1 Adjust slab icon until adjust is released
- 2 Menu slab icon until menu is released
- 4 Select slab icon until select is released
-
- The button slabbing mask can then be calculated by adding together the
- required button values.
-
- The button slabbing time is the minimum time that the icon will be slabbed
- for, the default time is for 15cs. This value is a decimal number in
- centi-seconds. The colours are specified in the following order:
-
- {,border colour1} {,border colour2} {,slabbing out colour}
- {,slabbing in colour} {,inner channel colour}
-
- These colours can be any valid WIMP colour in the range of 0 to 15. The
- default selection is 4, 0, 1, 14, 12.
-
- The (R)adio command specified in the validation string is used to set the
- state of other radio button type icons. The R command is followed by a
- decimal number in the range 0 to 2, the action that these perform is:
-
- Radio type Operation
-
- 0 Has the effect of switching off the specified icon(s).
- 1 Has the effect of switching on the specified icon(s).
- 2 Has the effect of toggling the icons current state.
-
- This command is followed by the numbers of the icons you wish to alter,
- these should be separated by commas. This command may be specified more than
- once in a validation string. For example to switch icons 1 and 2 off, 3 and
- 4 on and toggle the state of icons 5 and 6 you could use the following
- validation string
-
- R0,1,2;R1,3,4;R2,5,6
-
- The (U)nselectable command in the validation string has the effect of
- shading the icon grey so that it cannot be selected by the user. It is
- followed by a decimal number in the range 0 to 2, the action that these is
- described above in the radio command.
-
- This command is then followed by the numbers of the icons you wish to alter,
- these should be separated by commas. This command may be specified more
- than once in a validation string. For example to shade icons 1 and 2,
- un-shade 3 and 4 and toggle the state of icons 5 and 6 you could use the
- following validation string
-
- U0,1,2;U1,3,4;U2,5,6
-
- The (P)ointer command is used to define a pointer to be displayed when the
- pointer is over that icon. The first parameter is a sprite name to use for
- the pointer. This should be no longer than 12 characters and should be
- present in the WIMP sprite pool. The optional parameters specify the x and
- y offsets to the active point in the sprite. These should be specified in
- pixels.
-
- The (I)nformation command is used to define a message to be sent to the
- interactive help application when the pointer is over the icon. If you wish
- to use a semi-colon then you must place two next to each other. The maximum
- length of the help message is 235 characters.
-
- The Interface module will change to the specified pointer when the mouse
- pointer is over the icon/workarea. If no pointer is specified then the
- pointer will default to Shape One (the default arrow shape). There are 5
- pointer shapes designed in the sprite file in the !Interface directory,
- these are:
-
- ptr_write - This pointer should be used on writable icons. The
- suggested active point is at coordinates x = 4, y = 4.
-
- ptr_menu - This pointer is used where a menu can be activated by
- pressing the menu button over the icon. This stops the user
- having to search all over the window to find where the menu
- is. The suggested active point is x = 6, y = 5.
-
- ptr_direct - This pointer is used where an object may be re-sized. The
- suggested active point is at x = 13, y = 7.
-
- ptr_hand - This pointer is used where and icon may be dragged. It is
- usually set on the workarea, but it can be used on any icon
- (the save file icon looks great when using it). Its
- suggested active point is at x = 12, y = 8.
-
- ptr_cross - This pointer is used as a crosshair. It is the same as the
- one used in the Draw application. This icon gives the user a
- precise point when working with line drawings. Its suggested
- active point is at x = 13, y = 7.
-
- You may also design your own pointers, which should be loaded into the WIMP
- sprite pool. There are a few points that you should note when designing
- pointers, these are :
-
- Pointer sprite names should have the form ptr_XXXXX, although this
- is not compulsory it helps so that you do not get confused with
- pointers and normal sprites.
-
- Do not use logical colour 2 in the pointer sprites, as this is
- unavailable in very high resolution modes.
-
- The pointers used should only be valid in your application, so you must not
- mask out Pointer_Leaving_Window in your application. You should claim
- Null_Reason_Code when passed to your application, otherwise the pointer will
- not change when the pointer is over the icon/workarea. See the examples for
- more.
-
- You should support the !Help application to help new users using your
- application, this is why I implemented a feature in Interface to make this
- easier. The following was for some reason not published in the Programmers
- Reference Manuals, but was in the pre-release disc version of the manuals.
-
- For an application to use interactive help, two WIMP messages are employed.
- One is used by the Help to request help, and the other is used by the
- application to return the help message.
-
- To request help, the Help application sends a message of the following form:
-
- block +16 &502 - indicates request for help
- +20 mouse x co-ordinate
- +24 mouse y co-ordinate
- +28 mouse button state
- +32 window handle (-1 if not over a window)
- +36 icon handle (-1 if not over an icon)
-
- The WIMP system will pass this message automatically to the task in charge
- of the appropriate window/icon. If the application receiving the message
- wishes to produce some help it should respond with the following message:
-
- block +16 &503
- +20 help message terminated by 0
-
- This message can be sent to the Help application by using Wimp_SendHelp,
- which is provided by the Interface module (SWI &81687).
-
- The help text may contain any printable character codes. If the sequence |M
- is encountered then this will be treated as a line break and subsequent
- text will be printed on the next line in the window. If the text is too long
- for one line then it will be split at a word boundary (space character).
-
- The text should consist of simple complete English sentences, each starting
- on a new line and ending with a full stop. The sentences should usually be
- simple imperatives or information such as:
-
- Click SELECT to set the alarm.
-
- You are in Select mode.
-
- Click ADJUST to change to path edit mode.
-
- This is the icon for Edit.
-
- You need not mention menu entries, except when specific ones interact with
- pointer operations. As a general rule present information of interest to the
- beginner near the top, and expert tips or information lower down.
-
- You must use the terminology defined. For mouse operations you must use
- initial capitals (for example Click). The mouse buttons must be in capitals
- (for example SELECT), as must key names (for example ESC, RETURN, SHIFT,
- CONTROL, A, B, F1, COPY). Miss out speedups and shortcuts - just provide
- enough to help a beginner without drowning them with information.
-
- Provide interactive help thoroughly - include the icon bar, and the workarea
- of all your windows. If no actions are possible in a window, just
-
- This window shows....
-
- if better than nothing.
-
- You should assume a user knows:
-
- what a MENU key is
- how to navigate menu trees and choose entries
- what the icon bar is
- how to move/size/toggle/close windows, and so on
- what 'dragging an icon' means
- what 'filling in a field' (writable icon) means
-
- The keycode command should be placed in the icon that is activated by the
- keycode. It should be a decimal integer specifying the key. The up/down
- arrows, tab etc.. are dealt with.
-
-
- **************************** The SWI Calls *********************************
-
- Wimp_BorderIcon (Interface_SlabButton) (SWI &81680)
-
- R1 = pointer to block
- R1 preserved
-
- Interrupts are not defined
- Fast interrupts are enabled
-
- Processor is in SVC mode
-
- SWI is not re-entrant
-
- The block contains the following on entry:
-
- R1+0 mouse x (screen coordinates - not window relative)
- R1+4 mouse y
- R1+8 buttons (depending on icon button type)
- R1+12 window handle
- R1+16 icon handle
-
- This call is used to update an icons border. It is typically called as a
- result of a Mouse_Click event. If the icon has a border type of 0 or 2 then
- the icon will slab inwards. The format of the validation string is
- described n the previous section.
-
- The application should the perform the task and then force the icon to
- normal status by calling Wimp_BorderIcon (SWI &81680) with R1+8 set to 0.
-
- The code to border icons and windows is outlined in the section Programming
- Interface.
-
- Note that the mouse coordinates specified in R1+0 and R1+4 are not used by
- the SWI and are only present to make the block compatible with a Mouse_Click
- event block.
-
- Wimp_BorderWindow (SWI &81681)
-
- None
-
-
-
-
-
- Wimp_BorderWindow (Interface_Render3dWindow) (SWI &81681)
-
- R1 = pointer to block
- R1 preserved
-
- Interrupts are not defined
- Fast interrupts are enabled
-
- Processor is in SVC mode
-
- SWI is not re-entrant
-
- The block contains the following on entry:
-
- R1+0 window handle
- R1+4 visible area minimum x coordinate
- R1+8 visible area minimum y coordinate
- R1+12 visible area maximum x coordinate
- R1+16 visible area maximum y coordinate
- R1+20 scroll x offset relative to work area origin
- R1+24 scroll y offset relative to work area origin
- R1+28 current graphics window minimum x coordinate
- R1+32 current graphics window minimum y coordinate
- R1+36 current graphics window maximum x coordinate
- R1+40 current graphics window maximum y coordinate
-
- This call is used to redraw the borders of icons in the window that are not
- up-to-date. This SWI is typically called during the redraw loop of a window.
- The SWI will update the window, drawing borders around any icons which have
- the b command specified in the validation string and are within the
- specified graphics window.
-
- The code to border icons and windows is outlined in the section Programming
- Interface.
-
- Wimp_BorderIcon (SWI &81680)
-
- None
-
-
-
-
- Wimp_ClaimInterface (Interface_Initialise) (SWI &81682)
-
- R0 = task handle
- R0 preserved
-
- Interrupts are not defined
- Fast interrupts are enabled
-
- Processor is in SVC mode
-
- SWI is not re-entrant
-
- This SWI allows your application to use pointers via the Interface module,
- is should be called at the beginning of your program. If you don't use
- Wimp_ClaimInterface then your pointers will not be displayed.
-
- Wimp_ReleaseInterface (SWI &81683)
-
- None
-
-
-
-
- Wimp_ReleaseInterface (Interface_CloseDown) (SWI &81683)
-
- R0 = task handle
- R0 preserved
-
- Interrupts are not defined
- Fast interrupts are enabled
-
- Processor is in SVC mode
-
- SWI is not re-entrant
-
- This SWI stops your application from using pointers. When this SWI is called
- Interface Manager will erase any workarea pointers assigned to your
- application and free the memory. This should be called in your exit
- handler, also if an error occurs you should also call this SWI to stop other
- applications from gaining your pointers.
-
- Wimp_ClaimInterface (SWI &81682)
-
- None
-
-
-
-
- Wimp_SetWorkareaPointer (Interface_SetWorkareaPointer) (SWI &81684)
-
- R1 = pointer to block
- R1 preserved
-
- Interrupt status is undefined
- Fast interrupts are enabled
-
- Processor is in SVC mode
-
- SWI is not re-entrant
-
- The block contains the following on entry:
-
- R1+0 window handle
- R1+4 minimum x coordinate of bounding box
- R1+8 minimum y coordinate of bounding box
- R1+12 maximum x coordinate of bounding box
- R1+16 maximum y coordinate of bounding box
- R1+20 24 bytes of pointer data
-
- This specifies the pointer for an area of the window. The bounding box
- coordinates are given relative to the window's work area origin. R1+4 to
- R1+16 can be set to -1 to specify the whole of the window's work area. The
- pointer data at +20 to +44 contains the sprite name and any x, y offset. See
- validation strings for more information.
-
- Wimp_RemoveWorkareaPointer (SWI &81685)
- Wimp_PollPointer (SWI &81686)
-
- None
-
-
-
-
-
- Wimp_RemoveWorkareaPointer (Interface_RemoveWorkareaPointer) (SWI &81685)
-
- R0 = task handle
- R1 = pointer to block
-
- R0 preserved
- R1 preserved
-
- Interrupt status is undefined
- Fast interrupts are enabled
-
- Processor is in SVC mode
-
- SWI is not re-entrant
-
- The block contains the following on entry:
-
- R1+0 window handle
- R1+4 minimum x coordinate of bounding box
- R1+8 minimum y coordinate of bounding box
- R1+12 maximum x coordinate of bounding box
- R1+16 maximum y coordinate of bounding box
-
- This call removes a previously installed pointer from the list of active
- pointer areas for the specified window. When a window is deleted you should
- remove any pointers that were related to the window, otherwise these
- pointers may become active on any window which gains the same window handle
- in the future.
-
- The bounding box coordinates are given relative to the window's work area
- origin. R1+4 to R1+16 can be set to -1 to specify the whole of the window's
- work area. R1+4 to R1+16 may be set to 0 to remove all work area pointers
- assigned to the window.
-
- Wimp_SetWorkareaPointer (SWI &81684)
- Wimp_PollPointer (SWI &81686)
-
- None
-
-
-
-
-
- Wimp_PollPointer (Interface_Poll) (SWI &81686)
-
- R0 = Wimp_Poll reason code
- R2 = task handle
-
- R0 preserved
- R@ preserved
-
- Interrupt status is undefined
- Fast interrupts are enabled
-
- Processor is in SVC mode
-
- SWI not re-entrant
-
- This call checks to see if the pointer is up-to-date. If the pointer is not
- up-to-date it will change to the pointer specified in the icons validation
- string. If the pointer is not over an icon then the pointer will change
- according to the position on the window background.
-
- Note that wimp_poll reason codes 0 and 4 should not be masked out, otherwise
- the pointer will be out-of-date and will not function correctly.
-
- Wimp_SetWorkareaPointer (SWI &81684)
- Wimp_RemoveWorkareaPointer (SWI &81685)
-
- None
-
-
-
-
-
- Wimp_SendInformation (Interface_SendHelp) (SWI &81687)
-
- R1 = message block as returned from help application
- R1 preserved
-
- Interrupt status is undefined
- Fast interrupts are enabled
-
- Processor is in SVC mode
-
- SWI not re-entrant
-
- This call returns a help text message to the interactive help application.
- It should be called when a message with the number &502 is received and the
- pointer is over an icon. If there is a message in the icons validation
- string that the pointer is currently over this will be sent to the help
- application. It is up to the applications programmer to take care of the
- help message when the pointer is over the icon on the icon bar or is over
- the window workarea.
-
- None
-
- None
-
-
- Wimp_PreProcessKey (Interface_PreProcessKey) (SWI &81688)
-
- R0 = event type
- R1 = event block
- R2 = task handle
-
- R0 = updated to new event type
- R1 = updated event block
- R2 = 0 if event was not dealt intercepted
-
- This call pre-processes the up, down, tab, shift-tab keys and any specified
- in a specific icons validation string using the command k<keycode>. The SWI
- will move icon, if neccessary or activate a button. his call sould be
- called after the wimp_poll command, it will match the key to an icon and if
- neccessary modify your wimp poll block and event type.
-
-
- Wimp_BorderPlotIcon (Interface_Plot3dIcon) (SWI &81689)
-
- R0 = window state (either from wimp_update/redraw or from a wimp_getwindowstate)
- R1 = icon block as for Wimp_PlotIcon
-
- Plots a border on a window like Wimp_PlotIcon. The icon block passed in R1
- should contain a block as described for Wimp_PlotIcon in the PRMs.
-
- Wimp_BorderBoundingBox (Interface_BoundingBox) (SWI &8168A)
-
- R1 = icon block as for Wimp_PlotIcon
-
- R1 = updates icon block
-
- offset
- 0 min x
- 4 min y
- 8 max x
- 12 max y
- 16 border width
- 20 button slab state (1 = out, 0 = in)
-
- This call returns information about the icon block passed to it. If you wish
- to get the size of an icons box use Wimp_GetIconState and then pass the icon
- block returned to this function.
-
-