Log file of changes to !ResEd 05-Apr-94 Take over version 0.01 from Steve Hunt. 06-Apr-94 Makefiles All Makefiles and MakeProtos simplified. common.c.wimp: Remove reference to macro NOBACKLINKS. shell.c.main: Remove reference to macro TESTTESTTEST. 07-Apr-94 common.c.version, common.h.version: New files containing code to construct a version string which includes the date when this source was last compiled. common.h.resed: VERSION_NUMBER #define, and #include "version.h" added. shell.MakeProto: Now recompiles common.c.version whenever a new shell !RunImage is to be made, and then explicitly links it in. !Menu.MakeProto: Now recompiles common.c.version whenever a new !Menu !RunImage is to be made, and then explicitly links it in. Templates: Version icon in Info box given a name. shell.c.main: load_prototypes() now stores the version string in the Info box. ******** SrcFiler version 002 made from version 0.02 (07-Apr-94) ******** 12-Apr-94 CSE.!Menu.!Boot deleted. 15-Apr-94 CSE.!Menu.doc.notes and .strategy combined to a single file called .implnotes. shell.doc.notes and .strategy combined to single file .implnotes. shell.doc.IanQuestio deleted. doc.bugs deleted (after redistributing bugs to other files!). doc.notes deleted. Systematic changes made to the source files for !Menu to make the structure definitions for menu templates (both inside a resource file and in memory) a straightforward mapping from the typedefs and #defines in the ToolBox source. New header file CSE.!Menu.h.resformat introduced which holds just those definitions related to the structure of menu templates as held in a resource file. 18-Apr-94 Systematic changes made to all source files to make the structure definitions for object templates and resource files a simple mapping from the typedefs and #defines in the Toolbox source. The "wordtoreloctae" field inside a relocation record is now declared as int rather than int*. Changes have been made to CSE.!Menu.c.menuedit, CSE.!Menu.c.relocate, shell.c.genmsgs and common.h.resformat to reflect this. 19-Apr-94 * Changes made to accept/create menu objects in new resource file format which no longer includes an options field. At the same time, a bug was fixed: absent string/message/relocation tables are now correctly represented by -1, rather than 0: common.h.resed: VERSION_NUMBER updated to 0.03 !menu.h.main: MENU_OBJECT_VERSION updated to 101 shell.h.shell: DEFAULT_VERSION updated to 101 common.h.resformat: options field removed from typedef for ObjectTemplateHeaderRec. !menu.c.menuedit: Comments about options field removed from comments preceding menuedit_object_size(..) and menuedit_save_object_to_memory(..) menuedit_save_object_to_memory(..): string/message table offsets are set to -1 if absent, instead of being zeroed. Options field initialisation is removed. !Palette and Palette: Initially replaced by "hand-built" resource file, and then edited using new !ResEd to desired form. * Checks for corrupt menu template structure added: !menu.c.relocate: relocate_object(..) now returns NULL if the internal structure of the object is not as expected. At present, the only check is that the relocation table contains only string and/or message relocations. !menu.c.menuedit: menuedit_load(..) checks the value returned by relocate_object(.) and returns error "CorruptMenu" if NULL. Messages: includes new message "CorruptMenu". * Code added to process version 100 objects correctly: !menu.c.protocol: received_resed_object_load(..) now accepts version 100 objects, removing the options field and updating affected pointers before passing them to menuedit_load(..). shell.c.document: document_load(..) now accepts version 100 documents as well as version 101; no pre-processing is necessary. * Redundant messages removed from Messages files. ******** SrcFiler version 003 made from version 0.03 (19-Apr-94) ******** 20-Apr-94 Create !Window structure inside CSE, and update main Makefile, ready to go. 22-Apr-94 Header files describing the format of window object templates (as inside a resource file) and of window objects themselves (as being edited by !Window) completed. 25-Apr-94 Two protocol buglets fixed in !Menu.c.protocol: received_resed_object_loaded(..): menu->modified = FALSE only if no error is reported; previously this flag was reset regardless, and so the occurrence of an error which was later corrected (eg out of memory) could lead to loss of data. menu->pendingclose = FALSE always; previously, this was reset only if no error was reported. A consequence was that an editing window might mysteriously disappear when copying an object from one shell window to another following an earlier transient error. bounced_resed_object_sending(..): menu->pendingclose is set FALSE at the same time as freeing any object data. Shell <-> !Window message protocols working. 26-Apr-94 common.c.debug: dprintf(..) now flushes file after each write. display(..) added. Displays window when window object loaded - although this window has no connection with the window object! The menus attached to the editing window can be displayed, including associated dialogue boxes. Skeleton align, coords and grid modules constructed. 28-Apr-94 Design scheme for generic handling of gadget types, and construct header files, the generic gadget module, and skeleton action button and display field modules. Gadget class registration, and generic template loading seems to be working. 29-Apr-94 Current source backed-up to SrcFiler tree (no new version made). 05-May-94 Generic code to load, size and save window templates completed and working. Specific code for display field and label gadgets written. Main routines coded are: windowedit: load, close_window, object_size, save_object_to_memory gadget: header_size, header_load, header_save, header_free display, label: body_size, body_load, body_save, body_free, template_size relocate: make_ref Current source backed-up to SrcFiler tree (no new version made). !Menu.!Palette file replaced by one which does not have bit 1 of the menu flags word set - and whose menu entry has componentID 0. I don't know how the original file was created - but Matt's check program showed that it was no longer conformant! 06-May-94 Replaced Templates and !Menu.Templates by Matt's revised template files. Reverted to old template files because of "address exceptions" when quitting with the new ones! 09-May-94 common.c.wimp: wimp_load_template_returning_size(..): Now zaps any sprite area pointers found to +1. This ensures that problems do not arise when templates whose indirected sprite icons include a nonsense sprite area pointer are loaded. This cures one of the problems with the new templates from Matt, but another one still seems to be lurking! An untraceable overwriting bug remains hidden; changes made to try to track it down include: Makefile for the shell: LDFLAGS=-d - to include debugging tables for DDT. common.h.dbmalloc: Set DBMALLOC = 1 - so that every call of malloc, calloc, realloc and free goes through intensive checking code. shell.c.main: Call to debug_file(..) added to main(..) so that dprintf(..) stts send their output to a logfile inside !ResEd - this is because dbmalloc notes problems using dprintf. Various files in common and the shell: Comment out all dprintf calls except the dbmalloc ones - thus making the output less confusing! common.c.error: error_exit(..) - now calls checkheap(TRUE) to do a thorough check of the heap before exiting. shell.c.class: investigate_cse(..) now calls Wimp_SpriteOp directly instead of using system(..) to call *iconsprites; it seems that the debugger prefers this. common.c.dbox: dbox_setstring(..), dbox_getstring(..): Both will now display an error message if the icon is not both text and indirect. common.c.menu: menu_entry(..), menu_get_entry(..), menu_alter_entry(..): Each of these now checks that the item number specified is in range for the menu being operated upon. The bug manifests itself as data abort, address exception, frozen desktop, data transfer error, etc. - and apparently is a result of incorporating Matt's new templates - hence I've retained the original ones as Templorig in both !ResEd and !Menu. However, the present state is that I am unable to recreate the problem. 12-May-94 At last I believe I know what the problem is - it's a bug in the Wimp which results in bizarre (and often fatal) behaviour when a mouse click on a slabbed icon causes the application to quit. The solution is well-known(!) - load the BorderUtil module. However, I shall keep the malloc, dbox_[s/g]etstring and menu creation checking that I added during debugging - to be included only if DEBUG = 1. Also added call to debug_file(..) to main(..) in !Menu.c.main so that debug output is automatically produced for !Menu as well. Commented out all dprintf(..) statements present in both !Menu and !Window files. Added "2> <..$Dir>.pm" to the "Run" commands in the !Run files for !Menu and !Window - to send any backtrace information to a file. Created new directory modules containing the single file BorderUtil, and amended !Run to RMensure the BorderUtils module. The !Run file also ensures that we are running RISC OS 3.10 or later. The MakeProto files have all been modified to remove the squeeze step and the "settype Absolute" command. Wimp slot size increased to 128k for each of the CSEs. Matt's new templates have been installed again! Terminating newlines removed from all !Run files - this solves yet another quitting problem, whereby the Quit? box remains on screen after the Discard button is clicked until ESC is pressed. common.h.resformat: WIMP_SPRITEAREA now defined as -1, instead of +1. All templates now available added to !Window.Templates. common.h.wimp: - added definitions for FilerOpenDir messages. All occurences of calls to system(..) have now been replaced by direct SWI calls; code affected is as follows: common.c.saveas: settype(..) - *settype delete(..) - *delete shell.c.document: document_close_window(..) - *Filer_OpenDir shell.c.main: iconsprites(..) - *iconsprites dataload_message(..) - *delete Value for WIMP_SPRITEAREA changed from +1 to -1 following decision from Ian. Replaced !Sprites by new files from Matt Hammond - !Sprites and !Sprites22 - and also Sprites, and !Menu.!Icons and !Window.!Icons similarly. 13-May-94 Checks in dbox_[s/g]etstring(..) relaxed a little, to allow setting the sprite name in a SaveAs dbox - now checks only that the icon has the indirect bit set. shell.c.class: investigate_cse(..): Code added to load, eg, !Icons22 if it exists and is appropriate to the current mode - instead of blindly loading !Icons. 16-May-94 !Window.Templates: field naming rationalised, and WimpIcon template removed, since this is being removed from the spec. !Run - now loads Toolbox and Window modules from the Toolbox to provide access to Window_PlotGadget; this is used to display gadgets. main.c, windowedit.c: code added to redraw windows properly, by calling Window_PlotGadget. 20-May-94 New version made on SrcFiler - this corresponds to the 05-May-94 state. Then current state saved to SrcFilr - but no new version created. New source and header files created for !Window: c/h.props, c/h.colours, c/h.extent; MakeProto and h.main amended accordingly. !Window.main.c: load_prototypes(..) now calls xxx_load_prototypes; mouse_click(..) now calls xxx_mouse_click(..); key_pressed(..) now calls xxx_key_pressed(..); open_window_request(..) now calls xxx_reopen_dbox(..); close_window_request(..) now calls xxx_close_dbox(..); for xxx = props, colours and extent. common.h.wimp, common.c.menu: Definitions for the MenusDeleted message added and used. !Window.c.windowedit: windowedit_open_palette(..) - should now work windowmenu_cb(..): Calls props_open_dbox(..) for Properties... hit Calls colours_open_dbox(..) for Colours... hit Calls extent_open_dbox(..) for Extent... hit Calls windowedit_open_palette(..) for Palette... hit Calls windowedit_close_wind(..) for Close hit Hits in the Edit submenu, and Key shortcuts hits continue to be ignored. windowedit_mouse_click(..): Double-click on background calls props_open_dbox(..). windowedit_key_pressed(..): As for windowmenu_cb(..). windowedit_rename_window(..): Calls props_update_dbox(..) to update the window properties dialogue box title. 23-May-94 common.c.dbox, common.h.dbox: dbox_set_caret_to(..) - new function, abstracted from !Menu.c.props. !Window.c.windowedit: windowedit_load(..): Temporary fudge for window title - forces length = 256. windowedit_save_object_to_memory(..): Sets title buffer length to length of title + 1, and sets the title validation string to -1. !Window.c.props: First attempt to code routines to deal with the Window properties dialogue. 31-May-94 props, extent and colours: Window properties dbox, extent dbox and colours dbox fully coded. common.h.resed: VERSION_NUMBER updated to 0.04 Integrate Matt Cloke's changes to implement solid dragging: !ResEd.Sprites, !ResEd.Sprites22: Added the "package" sprite from RISC OS 3.5. common.h.dragdrop: New parameters spritename and numselected added to dragdrop_start(..). common.c.dragdrop: dragdrop_start(..): Two extra parameters spritename and numselected added. do_dragbox(..): New code to use DragASprite added. All calls to do_dragbox(..) amended to include extra parameters sprite_area, sprite_name and flags. Only one of these calls - the one from dragdrop_start(..) - actually sets non-NULL values for these; all the others set NULL values (because they are not yet understood!). shell.c.document: start_drag(..): Two extra parameters passed in call to dragdrop_start(..), being the name of the sprite, and the number of objects selected. Includes test on number of items selected: if greater than one, do_dragbox(..) is called with spritename = "package". ******** SrcFiler version 005 made from version 0.04 (31-May-94) ******** 01-Jun-94 Set DEBUG = 0 in common.h.debug, DBMALLOC = 0 in common.h.dbmalloc and comment out CFLAGS = -DDEBUG=1 in MakeFile in shell, common, !Menu and !Window - and recompile for release. Remove 2> <ResEd$Dir>.pm from !ResEd.!Run Remove 2> <ResEd$Menu$Dir>.pm from !Menu.!Run Remove 2> <ResEd$Window$Dir>.pm from !Window.!Run ******** Version 0.04 (01-Jun-94) released on aquarius.$.latest ******** Reset all the above, set version = 0L05, and recompile for continued development. !Windows.Templates: keyboard shortcut templates adjusted ready for implementing the Key shortcuts ... menu option. common.h.swicall: #include's for kernel.h and swis.h removed, since these are included by resed.h. 02-Jun-94 Every source file now explicitly #include's just those header files that it requires. The header files have also been altered so that no header file includes any other header file with just one exception: common.h.resed #include's the system header files and error.h, messages.h, debug.h and dbmalloc.h. common.h.swicall now includes all of the SWI #define's - and so there is no need to include C: on the #include path; all MakeProto files have been adjusted accordingly. Net result is that a full rebuild now takes just over 9 minutes instead of almost 15 minutes. ******** SrcFiler version 006 made from version 0L05 (02-Jun-94) ******** dragdrop_accept(..) is now declared in common.h.dragdrop, although it is client-supplied. Consequent changes made to common.c.dragdrop, shell.c.dragdrop and menu.h.drag. Start implementation of Keyboard Shortcuts dialogue box; new files !Window.c.keycuts and !Window.h.keycuts created, and skeleton functions declared and called from main and windowedit; MakeProto altered to include this new source module. New fields added to WindowObjRec structure for keycuts dbox and pane window handles. 06-Jun-94 The "Keyboard Shortcuts" dialogue box - complete with its pane - can now be created and moved around the screen; it also appears to cope fine with mode changes and changes to "off-screen" controls. !Window.c.props: apply_dbox(..) - now correctly sets window->windowflags according to the presence or absence of a title bar. This makes it possible to create windows without title bars. 07-Jun-94 Can now write keyboard shortcuts to the pane, and select/deselect them; but it's still a bit "clunky". Code to take/reinstate local copy of keyboard shortcuts for editing has been written. 08-Jun-94 No longer "clunky" - I now invalidate just those lines that need to be redrawn. ******** SrcFiler version 007 made from version 0L05 (08-Jun-94) ******** 09-Jun-94 Creation, deletion and editing of keyboard shortcuts completed. It may not be the "best" UI, but it'll probably do for the time being. 10-Jun-94 Code tidied up (better use made of gui_..(..) routines etc.). common.h.resed: - version number updated to 0.05. ******** SrcFiler version 008 made from version 0.05 (10-Jun-94) ******** ******** Version 0.05 (10-Jun-94) released on aquarius.$.latest ******** common.h.resed: - version number updated to 0L06. !Window.Templates: - removed "adjust size" icon from the keycuts pane template (KeyPane)! 13-Jun-94 !Window.c.main: message(..) now calls focus_message_claim_entity(..) upon receipt of such a message - thus being ready for "deemphasised" display of selections. !Window.c.windowedit: focus_cb(..) body brought into use, and windowedit_get_selection_bbox(..) implemented. windowedit_load(..) now claims input focus only if the loaded window is not the palette. common.h.filetypes: Now uses allocated filetype FAE; !Boot files, !Run files and sprite names all changed to conform, and types of Palette files adjusted accordingly. common.h.newmsgs: Message numbers are now properly registered! !Window.c.windowedit: Implement set_or_clear_selection(..), select_gadget(..) and start implementing selection model: CLICK/SEL on background and gadget and CLICK/ADJ on gadget. common.c.interactor: Prefix declarations for eventmask and timeout by static to ensure they remain hidden. fix_eventmask() - initial value of timeout now 100000, thus making it possible for the final value to be greater than zero! 14-Jun-94 !Menu.c.drag, !Menu.c.lassoo: Time out for lassooing and dragging tracking now set to 5 instead of 2. !Menu.c.lassoo: select_bounded_entries(..) - no longer checks for selected entries outside the lasso - since these will either have been cleared when the drag started, or should be untouched. !Window.c.windowedit: Activate code to define selections by lasso. !Window.c.lassoo, !Window.h.lassoo: New module added - suitably adjusted copy of !Menu.c.lassoo. Lasso selection/adjustment now operational. 15-Jun-94 common.c.dragdrop: dragdrop_start(..) now sets timeout = 5 (not 25); this 'error' was concealed before because of bug in fix_eventmask(..). !Menu.c.main, !Window.c.main: message(..) no longer checks for Message_Dragging messages, since neither Menu nor Window CSE participates in drag'n'drop. !Window.c.windowedit: Activate code inside windowedit_mouse_click(..) to drag gadgets by calling drag_start(..). !Window.c.drag, !Window.h.drag: New module added - suitably adjusted copy of !Window.c.drag. Currently, dragging (selections of) gadgets works, but dropping them has no effect! !Window.c.windowedit: post_windowmenu(..) - now implements "weak" selections. !Window.Templates, !Menu.Templates: Matt's latest version installed - these have various minor changes to reflect Neil's new gadget specs and the null/empty issue. 16-Jun-94 Generic gadget handling extended to include "copy gadget" function; changes to gadget, action, display and label were required. Full drag'n'drop functionality completed for dragging selections of gadgets - both within one window, and across windows, and for "copy" and "move" semantics. However, invalidation rectangles are still not quite correct. ******** SrcFiler version 009 made from version 0L06 (17-Jun-94) ******** 17-Jun-94 New functions (and macro) added to common.c.wimp to ensure that coordinates in boxes and points are multiples of 4. !Window.c.gadget: gadget_header_load(..) now forces gadget extents to be multiples of 4. !Window.c.drop: finalise_drag(..) now forces drag distance to be a multiple of 4. !Window.c.windowedit: windowedit_load(..) - now forces visarea, scrolloffset and workarea coordinates to be multiples of four. windowedit_reopen_window(..) - forces visarea, scrolloffset to be multiples of 4. !Window.c.extent: apply_dbox(..) - now forces extent and minimum size coordinates to be multiples of 4. extent_dbox_mouse_click(..) - now adjusts coordinates in steps of 4 when adjuster icons are clicked. 29-Jun-94 !Window.c.windowedit, !Window.c.lassoo, !Window.c.drag: Changes made to window redraw code to display "resize ears" around selected gadgets when the window has input focus. 30-Jun-94 !Window.c.windowedit: windowedit_mouse_click(..), click_in_gadget(..) - now recognise a click on a resize ear of a selected gadget. 01-Jul-94 New modules !Window.c.move and !Window.c.resize created to handle drags on resize handles - constrained moves and resizing respectively. These features now work. !Window.c.windowedit: The "Delete" menu option and ^X keypress implemented. !Window.c.coords: Code for the Coordinates dialogue is now complete. common.h.resed: - version number updated to 0.06. ******** SrcFiler version 010 made from version 0.06 (01-Jul-94) ******** ******** Version 0.06 (01-Jul-94) released on aquarius.$.release ******** common.h.resed: - version number updated to 0L07. 04-Jul-94 Start work on generic gadget definitions and processing. 06-Jul-94 !Window.Templates: removed length field (and corresponding adjuster icons) from the Label template, and extended the Text writable to fill up the space. 07-Jul-94 New source and header file gadgdefs - contains the static structures that define the gadget types. Details of individual gadget types removed from h.windowedit. Remove action, label and display source and header files. h.gadget - now defines the structures for gadget definitions. c.main: load_prototypes(..) now loads gadget property dboxes directly by scanning the gadgetdefs array. register_gadgets(..) - and its call - removed. c.windowedit: windowedit_load(..) now calls gadget_load(..) to load each gadget in the window template. windowedit_save_object_to_memory(..) now calls gadget_save(..) to reassemble each gadget into its window template. windowedit_object_size(..) now calls gadget_size(..) to find out how much space is needed to store the gadget. free_gadget(..) removed; gadget_free(..) is called directly instead. c.gadget: Remove gadget_register(..), gadget_locate(..), gadget_enumerate(..) and gadget_header_load(..). Add gadget_load(..) to create a gadget record from a template. Remove gadget_header_save(..), add gadget_save(..). gadget_header_size(..) replaced by gadget_size(..). Replace gadget_header_copy(..) by gadget_copy(..). Replace gadget_header_free(..) by gadget_free(..). c.drag: copy_to_tmp(..) now calls gadget_copy(..) to copy a gadget record and gadget_free(..) to free one. New generic code for loading, copying, freeing and saving gadgets seems to work with label gadgets - but not a very thorough test so far ... ******** SrcFiler version 011 made from version 0L07 (01-Jul-94) ******** 08-Jul-94 !Windows.Templates - "Deliver value changed event" option icon removed from Display field template. 11-Jul-94 !Windows.c.relocate: relocate_make_ref(..) - remove 'emptyisnull' parameter, since in future the NULL/empty dichotomy will be resolved on loading and maintained during editing. c.gadget, c.windowedit: gadget_save(..), windowedit_save_object_to_memory(..) - calls to relocate_make_ref(..) amended accordingly. clone_string(..) now has an extra parameter 'emptyisnull' which is set TRUE when loading a mandatory string field inside gadget_load(..). 12-Jul-94 h.main: All gadget property box #defines replaced by the single value GadgetDbox. c.main: key_pressed(..) calls gadget_dbox_key_pressed(..) if a key is pressed while a gadget properties dbox has input focus. mouse_click(..) calls gadget_dbox_mouse_click(..) if the mouse is clicked over a gadget properties dbox. open_window_request(..) calls gadget_reopen_dbox(..) if an OPEN event is received for a gadget properties dbox. close_window_request(..) calls gadget_close_dbox(..) if a CLOSE event is received for a gadget properties dbox. c.windowedit: windowmenu_cb(..) calls gadget_open_dbox(..) if the user chooses the Edit=>Properties.. entry. windowedit_mouse_click(..) calls gadget_open_dbox(..) if the user double-select-clicks on a gadget. windowedit_key_pressed(..) calls gadget_open_dbox(..) if the user presses ^P. windowedit_rename_window(..) calls gadget_dbox_update_window_name(..) when a window object's name changes, and the gadget's properties dbox is open. c.gadget: gadget_free(..) calls gadget_close_dbox(..) if the gadget has a properties dbox open. c.drag: disambiguate(..) calls gadget_dbox_update_componentid(..) when a new componentID is allocated to a gadget whose properties dbox is open. finalise_drag(..) calls gadget_dbox_update_window_name(..) for each gadget that is moved from one window to another and whose properties dbox is open. c.gadget, h.gadget: New functions gadget_open_dbox(..), gadget_init_dbox(..), gadget_apply_dbox(..), gadget_close_dbox(..), gadget_dbox_update_componentid(..), gadget_dbox_update_window_name(..), gadget_dbox_mouse_click(..), gadget_reopen_dbox(..), gadget_dbox_key_pressed(..) added. c.gui: New functions gui_put_len_str(..), gui_get_len_str(..), gui_get_str(..), gui_put_str(..) added. 14-Jul-94 c.gadget, c.gadgdefs, h.windowedit: Various changes to treat icons common to *all* gadget property dboxes specially - this avoids duplication in gadgdefs. c.props, h.format: Add definition and code for setting the "generate an event after the window has been hidden" flag bit. Templates: "Properties" template updated accordingly. h.main: Update WINDOW_OBJECT_VERSION to 101. c.protocol: received_resed_object_load(..) - accepts version 100 as well as version 101 window objects. The extra field for window objects of version 101 - defaultfocus - is inserted into version 100 objects. h.format: Add new field 'defaultfocus' to WindowTemplateRec. h.windowedit: Add new field 'defaultfocus' to WindowObjRec. c.windowedit: windowedit_load(..) - copies defaultfocus field from template to object. windowedit_save_object_to_memory(..) - copies defaultfocus field from object to template. 15-Jul-94 c.protocol: received_resed_object_load(..) - now updates version 100 objects to version 101 correctly (adjusting offsets and relocations as appropriate). h.format, h.windowedit: 'type' field in gadget headers replaced by 'type' and 'size' fields - each a half-word (short). c.gadget: gadget_load(..) - now checks that the size field is either zero or is correct; error message if not. gadget_save(..) - sets the size field to zero, but will set it to the "correct" value as soon as Matt's checker accepts this ... !Palette and Palette: upgraded to version 101 resource files. c.gui, h.gui: New functions gui_put_opt_event(..), gui_get_opt_event, gui_put_mand_event(..), gui_get_mand_event(..). h.windowedit: New gadget field types FLD_OPT_EVENT and FLD_MAND_EVENT. c.gadgdefs: Added definition for action button gadgets. h.windowedit,c.gadget,c.gadgdefs: Added new field 'special' to allow special processing after applying a properties dbox to a gadget (eg to check that at most one action button is default). h.format: GENERATEEVENT and SELECTED flags added to option buttons. c.gadgdefs: Added definition for option button gadgets. Templates: Added 'none' button for event delivery to option button template. 18-Jul-94 c.gadgedefs, h.windowedit, c.gadget: Add new actions ACT_FADE, ACT_UNFADE, and rename previous FADE as ACT_TOGGLEFADE. c.gadgedefs, h.windowedit, c.gadget: Add new field type FLD_SPECIAL_SAVE which is used to specify a special action to be taken when applying that dbox field. This is used for the "default button" and "cancel button" icons for action buttons to make sure that there is always at most one of each of these in a window. c.drag: finalise_drag(..) now calls gadget_note_new_default_button(..) and gadget_note_new_cancel_button(..) whenever necessary to make sure that copies/moves do not create multiple default or multiple cancel buttons within the same window. c.gadgdefs, h.windowedit, c.gadget: New fLD_SPECIAL_SAVE removed - use the "special" field in the GadgetDefRec itself instead. ******** SrcFiler version 012 made from version 0L07 (01-Jul-94) ******** c.gadgdefs, h.windowedit, c.gadget: Add new field for GadgetDefRec - specialinit - and rename the special field specialapply. Add definitions for Labelled Box gadgets - which need specialinit and specialapply functions for the "label" field itself - which may be text or sprite. c.gadgdefs, h.windowedit, c.gadget: Writable fields implemented: needed new field types FLD_ALLOWABLE and FLD_LINK, and new action ACT_ALLOW. Templates: The "Writable" template altered to include a length field and corresponding adjuster arrows for the "allowable" string. c.gui, h.gui: New functions gui_get/put_allowable/link(..) for writable fields. 19-Jul-94 c.gadget: gadget_dbox_mouse_click(..) - now ignores any mouse events with buttons >= 16. Writable field gadget property dialogues implemented. h.windowedit: RADIOBUTTON_ON flag bit is now bit 2 instead of bit 1. c.gadgdefs, h.gadget, c.gadget: Prototype function gadget_rb_apply(..) added, ready to ensure that at most one radio button in any group is marked as 'on' when created ... Radio button gadget property dialogues implemented. h.format: Revised definition of slider gadget template to reflect latest specification. c.colours, h.colours: Re-organised code, so that colours_choose(..) can be an exported function to choose a colour for a display field using a colour menu. c.gadget, h.gadget, Messages: New function gadget_sl_apply(..) checks slider limit values and complains as necessary. h.windowedit, c.gadget: New field type FLD_COLOUR and action type ACT_COLOUR added to support colour field processing. c.gadgdefs: Slider gadget property dialogue boxes implemented. 20-Jul-94 h.format: Revised definition of draggable gadget template to reflect latest specificaton. Templates - removed redundant icons from Draggable template. c.gadgdefs: Draggable gadget property dialogue boxes implemented. Templates - removed opticon for "show menu" from Popup template. c.gadgdefs: Popup menu gadget property dialogue boxes implemented. c.gadgdefs: Adjuster arrow gadget property dialogue boxes implemented. h.format: Revised definition of number range gadget template to reflect latest specification. Templates - grouped radio buttons properly in NumberRange, and set validation strings for limits appropriately. h.windowedit, c.gadget: New action ACT_SPECIAL which calls a given function when the specified icon is select or adjust-clicked. h.gadget, c.gadget, Messages: Special functions gadget_nr_init, apply, slider, numerical, display and writable added. c.gadgdefs: Number range gadget property dialogue boxes implemented. h.format: Revised definition of string set gadget template to reflect latest specification. Templates - add length field and adjusters to "specify allowable characters" for StringSet template. h.gadget, c.gadget: Special functions gadget_ss_init, numerical, display and writable added. c.gadgdefs: String set gadget property dialogue boxes implemented. 21-Jul-94 c.gadget: gadget_load(..) - now forces bit 30 = 1 for labelled boxes; this is a temporary measure to make sure that they are plotted first. c.gadget, h.windowedit: New field types FLD_XFLAG, FLD_XPACKED and FLD_XCOLOUR added; new action type ACT_BUTTON added. c.props, h.props: Code in props_dbox_mouse_click(..) altered to call a new function props_button_choose(..) to choose a button type. This function is now also called to implement ACT_BUTTON actions. Templates - new template WimpIcon added. h.format: Added details of wimp icon template format. c.gadgdefs: Wimp Icon gadget property dialogue boxes implemented. 22-Jul-94 c.gadget, gadget_close_dbox(..): c.props, props_close_dbox(..): c.colours, colours_close_dbox(..): c.extent, extent_close_dbox(..): c.keycuts, keycuts_close_dbox(..): Code added to ensure that neither Cancel nor OK action buttons are selected when the window is deleted; this is a workaround for a Wimp bug that results in arbitrary overwrites (and hence subsequent unexpected address exceptions and aborts). c.windowedit: plot_gadget(..) - now plots selected gadget in focus window normally (instead of setting the "selected" bit). !ResEd.!Run: Now loads BorderUtils module only if the Wimp < 3.17. There are one or more bugs which seem to manifest themselves only on 3.11 - not on 3.5 - so I'm going ahead to release anyway. The fix above does not appear to have worked, and I've removed the code from c.gadget (but not from the other positions). common.h.resed: - version number updated to 0.07. ******** SrcFiler version 013 made from version 0.07 (22-Jul-94) ******** Set DEBUG = 0 in common.h.debug, DBMALLOC = 0 in common.h.dbmalloc and comment out CFLAGS = -DDEBUG=1 in MakeFile in shell, common, !Menu and !Window - and recompile for release. Remove 2> <ResEd$Dir>.pm from !ResEd.!Run Remove 2> <ResEd$Menu$Dir>.pm from !Menu.!Run Remove 2> <ResEd$Window$Dir>.pm from !Window.!Run ******** Version 0.07 (22-Jul-94) released on aquarius.$.release ******** common.h.resed: - version number updated to 0L08. Set DEBUG = 1 in common.h.debug, DBMALLOC = 0 in common.h.dbmalloc and uncomment in CFLAGS = -DDEBUG=1 in MakeFile in shell, common, !Menu and !Window; recompile. 25-Jul-94 Start constructing the skeletal Misc CSE application. shell.h.shell: Change SPRITENAMELEN from 12 to 13 to allow space for a 12 char sprite name plus terminator. Add !Icons22, !Sprites22 and Sprites22 as files to install to all MakeProto files (where appropriate). window.h.main: menu.h.main: Change SPRITENAMELEN from 12 to 13; as there are no references to this name in the code, this change cannot have any effect! !Window.Templates: The "validation" writable icon in WimpIcon template now has a buffer of size 256 instead of 12! 27-Jul-94 All "Wimp_DeleteWindow" calls replaced by "Wimp_CloseWindow" where a dialogue box is being deleted; this is a temporary (and very unsatisfactory!) workaround for the "slabbed icon" bug. Functions affected are: colours_close_dbox(..) extent_close_dbox(..) gadget_close_dbox(..) keycuts_close_dbox(..) props_close_dbox(..) !Menu.c.protocol, !Window.c.protocol: received_resed_object_loaded(..): Correct a bug - after an object has been successfully returned to the shell and its representation in the CSE has been freed, the 'pendingclose' field was reset; this no longer happens. Clear signs that almost everything is working in the Misc CSE! shell.c.protocol: received_resed_object_sending(..) - now calls document_modified(..) to note that the document has been modified whenever data is reloaded from a CSE; this didn't matter with "dynamic" CSEs, but does with "dbox-like" ones, since these latter never send "modified" messages. 28-Jul-94 !ResEd.!Run: added rmensure for FilterMgr. common.h.resed: - version number updated to 0.08. ******** SrcFiler version 014 made from version 0.08 (28-Jul-94) ******** Set DEBUG = 0 in common.h.debug, DBMALLOC = 0 in common.h.dbmalloc and remove line CFLAGS = -DDEBUG=1 in MakeFile and MakeProto in shell, common, !Menu, !Window and !Misc - and recompile for release. Remove 2> <ResEd$Dir>.pm from !ResEd.!Run Remove 2> <ResEd$Menu$Dir>.pm from !Menu.!Run Remove 2> <ResEd$Window$Dir>.pm from !Window.!Run Remove 2> <ResEd$Misc$Dir>.pm from !Misc.!Run ******** Version 0.08 (28-Jul-94) released on aquarius.$.release ******** common.h.resed: - version number updated to 0L09. Set DEBUG = 1 in common.h.debug, DBMALLOC = 1 in common.h.dbmalloc; recompile. !Windows.Templates: LabelledBox - add "Filled" option icon. c.gadgdefs: Add field and actions for "Filled" flag for labelled box gadgets. c.gadget: gadget_bx_init(..) - shades "Filled" icon unless "Issprite" flag is set. !Windows.Templates: Display, Writable, NumberRange, StringSet - add "Justify" area. c.gadgdefs: Add fields and actions for processing the "Justify" area for the display, writable, numberrange and stringset gadgets. c.gadget: gadget_ss_init(..), gadget_ss_numerical(..), gadget_ss_display(..), gadget_ss_writable(..): Fade/unfade justify icons as necessary. gadget_nr_init(..), gadget_nr_numerical(..), gadget_nr_display(..), gadget_nr_writable(..): Fade/unfade justify icons as necessary. h.format: Added #define's for new justification flags. !Windows.Templates: New icons added to Draggable for specifying draggable type, and the flag to request Toolbox IDs at end of drag. c.gadgdefs: Add fields and actions for new draggable icons. h.format: #define new draggable flags. !Misc.Templates: ColourMenu, FontMenu - added option button for delivery of event when window is hidden. c.objdefs: Added appropriate flag field to ColourMenu and FontMenu. h.format: Added #define's for above flag fields. c.windowedit: click_in_gadget(..) - modified to examine gadgets at the top first of all. redraw_window_and_lassoo_or_resize_boxes(..) - modified to plot gadgets at the back before those at the front. 29-Jul-94 !Menu.h.format: Rename MENU_GENERATEEVENT as MENU_GENERATESHOWEVENT, and add new flag MENU_GENERATEHIDEEVENT. Add MENU_ENTRY_SUBMENUEVENT. !Menu.c.props: Replace all occurrences of MENU_GENERATEEVENT by MENU_GENERATESHOWEVENT, and all occurrences of I_MENUDBOX_EVENT by I_MENUDBOX_EVENT_BEFORE. !Menu.Templates: Added radio icon to specify "no submenu event" to the menu entry template, and opticon to specify "deliver event after hiding" to the menu template. Add new module c.gui, h.gui - initially copied from !Window. !Menu.c.props: Modify menu dbox processing to use gui functions, and also to take account of "event_when_hidden" flag. !Menu.c.menuedit: plot_titlebar(..), menuedit_calculate_menu_size(..) - minor changes to cope with plotting a menu whose title is empty (and so whose menu->title value is NULL). !Menu.c.props: Modify menu entry dbox processing to use gui functions, and to take account of "deliver no submenu event" flag. !Menu.h.menuedit: Change menu entry record structure: clickshow and submenushow are now char* fields (to be malloc'd as necessary) instead of char [MAX_OBJECT_NAME] fields. This allows ResEd to distinguish between NULL and empty string values here. !Menu.c.menuedit: menuedit_load(..), menuedit_object_size(..), menuedit_save_object_to_memory(..): Minor changes to cope with new format of clickshow and submenushow fields. entry_width(..), plot_entry(..), menuedit_justify_keycuts(..): Changes made to cope with NULL entry->text values. !Misc.c.objdefs, !Misc.c/h.object: Change to definition of Saveas object, and new function object_sa_init(..) to fade "support ram transfers" option unless "client participates" option is selected. common.h.resed: - version number updated to 0.09. ******** SrcFiler version 015 made from version 0.09 (29-Jul-94) ******** Set DEBUG = 0 in common.h.debug and DBMALLOC = 0 in common.h.dbmalloc - and recompile for release. ******** Version 0.09 (29-Jul-94) released on aquarius.$.release ******** common.h.resed: - version number updated to 0L09. Set DEBUG = 1 in common.h.debug, DBMALLOC = 1 in common.h.dbmalloc; recompile. 08-Aug-94 !ResEd.!Run: RMEnsure FilterManager rather than FilterMgr! !Window.c.windowedit: windowedit_load(..) - no longer assumes a satsifactory window structure exists if 0->internal happens to be non-zero (thanks to Neil Kelleher for finding and fixing this bug!). shell.c.document: document_disambiguate_name(..): replace '.' by '_' here, so that disambiguated names are no longer invalid obect names! !ResEd.!Run: RMEnsure BorderUtils 0.04 - to make sure that the modified module is loaded which processes a new service call which can be made when a window is deleted. !ResEd.modules - now contains 0.04 of BorderUtils. !Window.c.gadget, gadget_close_dbox(..): !Window.c.colours, colours_close_dbox(..): !Window.c.extent, extent_close_dbox(..): !Window.c.keycuts, keycuts_close_dbox(..): !Window.c.props, props_close_dbox(..): !Misc.c.object, object_close_dbox(..): Remove conditional code which closes rather than deletes a window and add code to make Neil's new service call which is fielded by his new BorderUtils module to fix the slabbed icon bug. !Menu.c.props, props_close_menu_dbox(..): props_close_entry_dbox(..): These routines now delete the window instead of just closing it; this brings their behaviour into line with that of !Window and !Misc. !Menu.h.menuedit: Remove the 'dboxopen' field from MenuEntryRec and MenuObjRec structures, since it is no longer required. !Menu.c.drag: copy_to_tmp(..) - remove 'new->dboxopen = FALSE'. finalise_drag(..) - remove test for entry->dboxopen when deciding whether to call props_update_entry_dbox(..) or not. !Menu.c.menuedit: menuedit_load(..) - always updates dbox title bar if a dbox exists (no longer tests dboxopen). menuedit_rename_menu(..) - as above. menuedit_justify_keycuts(..) - no longer checks dboxopen before updating any dbox. !Menu.c.props: props_open_menu_dbox(..) - no longer sets dboxopen field, and no longer reopens a previously-closed dbox - since no such thing can exist. props_close_menu_dbox(..) - no longer checks dboxopen, and does not reset this field. props_open_entry_dbox(..), props_close_entry_dbox(..) - as above. !Window.Templates: all moved to middle of screen. !Window.c.gadget: gadget_ss_init(..), gadget_ss_numerical(..): gadget_ss_display(..), gadget_ss_writable(..): gadget_nr_init(..), gadget_nr_numerical(..): gadget_nr_display(..), gadget_nr_writable(..): The "justify" radio buttons for number ranges and stringsets are now faded only if the gadget has no display field. !Menu.h.format: New menu entry flag bit MENU_ENTRY_CLICKSHOWTRANSIENT added. !Menu.Templates: "Show as transient" option icon added to entrydbox. !Menu.c.props: props_update_entry_dbox(..): Added code to initialise this icon properly. apply_entry_dbox(..) - sets the corresponding flag from the icon. props_entry_dbox_mouse_click(..) - toggles shadedness of the new icon as appropriate. 09-Aug-94 !Window.Templates: ActionButt modified to include new "Shaow as transient" option icon. h.format: New flag bit ACTIONBUTTON_CLICKSHOWTRANSIENT defined. c.gadgdefs: Definition of action button modified to process the new option icon and its associated flag bit. c.gadget, h.gadget: gadget_ab_init(..) - new function added to fade the option icon if no object is to be shown. c.windowedit: Remove plot_gadget(..) function, replacing it by in-line calls from redraw_window_and_lassoo_or_resize_boxes(..). redraw_window_and_lassoo_or_resize_boxes(..): Always scans gadget list a third time to highlight any selected gadgets; calls plot_highlight(..) to do this. plot_resize_ears(..) renamed as plot_highlight(..), and altered to plot a dotted rectangle about any selected gadget, and to plot hollow resize ears only if the window has input focus. Didn't like the dotted rectangle - either just inside or just outside the gadget's bbox - so reverted to a solid rectangle. Finally moved the ears in a pixel so that their inner edges sit over the rectangle; doesn't look too bad now. !Window.Messages: Replace Palette... by Gadgets... !Menu.Messages: Replace Menu properties... by Properties... Replace Palette... by Menu entries... !ResEd.Messages: Replace Palette... by Prototypes... Remove FM_Test:Test... shell.c.document: remove all references to FM_Test and FILEMENU_TEST. !Windows.Templates: palwin title changed to "Gadgets". !Menu.Templates: palwin title changed to "Menu entries". !ResEd.Templates: PalProto title changed to "Object prototypes". !Windows.c.windowedit: remove all references to palwin - since this template is not used. !Windows.Templates: delete palwin. 10-Aug-94 !Menu.c.menuedit: plot_entry(..): this routine now looks up appropriate foreground and background colours, and filled/selected/shaded flags for plotting the various components of each menu entry according to its state (hasfocus, shaded, selected). Two tables - textflags[] and spriteflags[] - added so that it's easy to change appearances in the light of feedback. common.h.resed: - version number updated to 0.10. ******** SrcFiler version 016 made from version 0.10 (10-Aug-94) ******** Set DEBUG = 0 in common.h.debug and DBMALLOC = 0 in common.h.dbmalloc - and recompile for release. ******** Version 0.10 (10-Aug-94) released on aquarius.$.release ******** common.h.resed: - version number updated to 0L11. Set DEBUG = 1 in common.h.debug, DBMALLOC = 1 in common.h.dbmalloc; recompile. !Window.Templates: Add icons to set default focus for the window to the Properties template. c.props: apply_dbox(..), props_update_dbox(..), props_dbox_mouse_click(..) Code added to handle default focus icons. h.format: #define's for special 'defaultfocus' values. !Windows.Palette - replaced by Matt Hammond's new palette. !Menu.c.menuedit: plot_entry(..) - fix bug which caused menu entries in the palette to be displayed incorrectly. menuedit_calculate_menu_size(..): The extra space between menu entries for palette positioning is now forced to be a multiple of 4 OS units - thus avoiding the nasty appearance of the palette in rectangular pixel modes. 11-Aug-94 !Window.c.windowedit: prepare_menu(..) - now greys out the "Make radio group" option unless the entire selection is radio buttons. !Menu.c.menuedit: plot_entry(..): if the menu item includes a keyboard shortcut, it is now plotted in two separate but adjoining pieces; this cures a bug introduced with the last release. !Window.!Palette - the "Allow offscreen" bit is now off. !Window.Messages: Added "EM_Slrg:Select radio group". !Window.c.windowedit: Added new #define EDITMENU_SELRADIOGROUP. create_menu(..): menu_create(..) call for EditMenu now specifies 10 entries. Line to add the "Select radio group" entry inserted. prepare_menu(..): Code added to grey out "Select radio group" unless only gadgets in the same group are selected. windowmenu_cb(..): Calls gadget_rb_select_radio_group(..) if this item is chosen, and gadget_rb_make_radio_group(..) if "Make radio group" is chosen. c.gadget, h.gadget: New functions gadget_rb_make/select_radio_group(..) defined. gadget_rb_apply(..) - now ensures that no more than one radio button in any one group is marked as "selected". c.drag: finalise_drag(..): Any radio buttons copied within the same window are marked as not selected. Any radio groups copied or moved to another window are renumbered in such a way that they do not clash with any pre-exisiting groups in the destination window. c.windowedit: redraw_window_and_lassoo_or_resize_boxes(..) now calls a new function plot_numberrange_special_ear(..) to plot the internal resize ear for numberranges which have a numerical display. windowedit_mouse_click(..), click_in_gadget(..): Code to check for SEL/DRAG on a numberrange's internal resize ear added; an extra parameter (gadget) is passed to resize_start(..). A single "closure" parameter is now passed through the redraw routines instead of an {offset, earnum} pair. c.resize, h.resize: New field "gadget" added to ResizeClosureRec to identify the numberrange gadget whose display field is being resized. resize_plot_boxes(..) now takes a resize closure parameter instead of separate earnum and offset parameters. update_resize_boxes(..) now takes a resize closure parameter instead of separate window, earnum and offset parameters. update_resize_boxes(..), resize_interactor(..), resize_start(..): Calls to resize_plot_boxes(..) and update_resize_boxes(..) modified accordingly. resize_selected_gadgets(..) now takes a resize closure parameter instead of separate window, offset and earnum parameters, and its call from resize_interactor(..) is modified accordingly. calc_new_box_width(..) - new function. resize_plot_boxes(..), resize_selected_gadgets(..): Code added for numberrange case, including constraining the mouse pointer when a "boundary" is hit. resize_interactor(..): "Cancel" code now explicitly resets mouse bounding box to be infinite, since sometimes this didn't happen normally. !ResEd.!Run: Now loads modules from System:modules or System:modules.Toolbox if required. !ResEd.modules: Deleted. 15-Aug-94 !Window.c.windowedit: windowedit_mouse_click(..): Recognizes CTRL/SHFT drags, and calls winddrag_move_start(..) (for CTRL/SHFT/SEL/DRAG) and winddrag_resize_start(..) (for CTRL/SHFT/ADJ/DRAG). !Window.c.winddrag, h.winddrag: New source module: MakeFile and MakeProto modified accordingly. This module handles moving and resizing the editing window as a result of a CTRL/SHFT/SEL-ADJ/DRAG. common.c.wimp, h.wimp: New variables screenx and screeny are set to the screen size in OS units by wimp_examine_mode(..). !Window.c.windowedit: windowmenu_cb(..): Calls gadget_link_writables(window) when "Link writables" is chosen. prepare_menu(..) - shades "Link writables" entry if the selection does not include any writable gadgets. !Window.c.gadget, h.gadget: New function gadget_link_writables(..) added. !Window.Palette - number range gadget now has its display field wide enough to show four digits. 16-Aug-94 !Window.c.gadget: compare_writables(..): algorithm changed to Steve's !WinEdit version which produces better results when icons are not exactly in alignment. shell.c.objflags: objflags_interactor(..): Looks for clicks on all the radio buttons icons, and makes sure that adjust clicks do not turn the buttons off. update(..): Added call to document_modified(..) to ensure that * appears in title bar after object flags have been modified. !Menu.Templates: menuwin template title bar changed to "Menu: %.12s" to bring it in line with the specification. entrydbox template title maximum length increased to allow full 11-char object names. !Menu.c.menuedit: menuedit_load_prototypes(..): Calls create_menu(..). post_menumenu(..): No longer creates menu if necessary; this allows keyboard shortcuts to work in a menu editing window before any menu has been shown! !Window.c.windowedit: windowedit_load_prototypes(..): Calls create_menu(..). post_windowmenu(..): No longer creates menu if necessary; this allows keyboard shortcuts to work in a window editing window before any menu has been shown! !Menu.c.menuedit: menuedit_rename_menu(..): Now only calls props_update_menu_dbox(..) if the menu dbox exists. !Menu.c.props: props_open_entry_dbox(..): Now sets caret in the entry text field, instead of the component id field, when first opened. !Window.c.windinfo: windinfo_open(..): Code to add "*" for modified window is now compiled only if the DEBUG flag is set. All templates checked for sensible writable icon lengths, and some minor adjustments made. !ResEd.Makefile no longer installs the module directory. common.h.resed: - version number updated to 0.11. Set DEBUG = 0 in common.h.debug and DBMALLOC = 0 in common.h.dbmalloc - and recompile for release. ******** Make the first alpha release ******** ******** Version 0.11 (16-Aug-94) released on aquarius.$.release ******** ******** SrcFiler version 017 made from version 0.11 (16-Aug-94) ******** common.h.resed: - version number updated to 0L12. Set DEBUG = 1 in common.h.debug, DBMALLOC = 1 in common.h.dbmalloc; recompile. !Window.Templates, !ResEd.Templates: Used !TemplEd to "unfill" all display fields, so that they look "marbled" on new style desktops. 17-Aug-94 All Palette and !Palette files checked and edited to a form deemed suitable for the alpha release. !Window.c.gadget: gadget_link_writables(..) - now calls protocol_.._modified(..). !Window.h.windowedit: Add new field "workBG" to hold the true colour for a window's background - this is because a "transparent" background must be displayed by ResEd as solid (eg white). !Window.c.windowedit: windowedit_load(..): Copies window's work area background colour to workBG field, and resets window's true workBG colour to white if transparent was specified. windowedit_save_object_to_memory(..): Saves window's work area background colour from the new workBG field. !Window.c.colours: apply_dbox(..): Updates both workBG and window->window->colours.workBG fields as appropriate. colours_update_dbox(..): Sets icon in colours dbox from the workBG field. !Window.c.windowedit: windowedit_load(..): New position of window forced on-screen by the wimp was not correctly noted - bug fixed. common.c.interactor, common.h.interactor: New function interactor_active() added which returns TRUE iff an interactor is currently on the stack. !Window.c.main: !Menu.c.main: !Misc.c.main: key_pressed(..): Only uses ESC to cancel interactors if one is present! !Window.c.gadget: gadget_dbox_key_pressed(..): !Window.c.props: props_dbox_key_pressed(..): !Window.c.colours: colours_dbox_key_pressed(..): !Window.c.extent: extent_dbox_key_pressed(..): !Window.c.keycuts: keycuts_dbox_key_pressed(..): !Menu.c.props: props_menu_dbox_key_pressed(..): props_entry_dbox_key_pressed(..): !Misc.c.object: object_dbox_key_pressed(..): Accept ESC as well as RETURN. 18-Aug-94 !ResEd.Templates: Copy, Rename and SaveAs templates now have correct yellow colour when given the input focus. shell.c.objflags: objflags_open(..): Now gives input focus (invisible caret) to the Object flags dbox when it is opened. objflags_interactor(..): Returns input focus to parent document viewer window when cancelled. !Window.c.align: align_open(..): Gives input focus to Align dbox when opened. align_interactor(..): Returns input focus to parent window when cancelled. !Window.c.gadget: gadget_dbox_mouse_click(..): !Window.c.props: props_dbox_mouse_click(..): !Window.c.colours: colours_dbox_mouse_click(..): !Window.c.extent: extent_dbox_mouse_click(..): !Window.c.keycuts: keycuts_dbox_mouse_click(..): !Menu.c.props: props_menu_dbox_mouse_click(..): props_entry_dbox_mouse_click(..): !Misc.c.object: object_dbox_mouse_click(..): Gives input focus to dbox regardless. !Window.Templates: !Misc.Templates: !Menu.Templates: Change button type of all gadget property and window property dboxes - other than transients - to "click", so that clicking anywhere in a dbox gives it the input focus. Ensure "sort" order (for TAB/cursor key movement between writable icons) is correct. Ensure all writables have KAT in their validation string. !Window.Templates: !ResEd.Templates: Ensure that the "input focus" colour is the same as the "normal" title bar colour for all dialogue boxes that are displayed transiently (eg saveas, copy, objflags etc.). Try and find that rule in the Style Guide ... !Window.Templates: WimpIcon - remove writables outside window's extent - this fixes a bug whereby TAB stopped stepping through fields in the correct way! common.h.resed: - version number updated to 0.12. Set DEBUG = 0 in common.h.debug and DBMALLOC = 0 in common.h.dbmalloc - and recompile for release. ******** Make the second alpha release ******** ******** Version 0.12 (18-Aug-94) released on aquarius.$.release ******** ******** SrcFiler version 018 made from version 0.12 (18-Aug-94) ******** common.h.resed: - version number updated to 0L13. Set DEBUG = 1 in common.h.debug, DBMALLOC = 1 in common.h.dbmalloc; recompile. 19-Aug-94 !Misc.!Palette: "Deliver event before showing" and "Deliver event when hidden" flags set on for the prototype FontMenu and ColourMenu objects. (This is because of a bug in the corresponding Toolbox modules). 22-Aug-94 !Misc.!Palette: FontMenu and ColourMenu flags mentioned above now switched off again, since the Toolbox module bugs have been fixed. !Window.h.format: The "drag-type" #defines have been corrected; previously "Drag only" set "Click/drag", "Click/drag" set "Doubleclick/drag", and "Doubleclick/drag" generated an error. !Window.Palette: The draggable gadget's type is set to "Drag" again. 24-Aug-94 !Misc.h.objedit: Added new structures to define the effect of dropping an object onto an object's dialogue box. !Window.h.windowedit: Added new structures to define the effect of dropping an object or a gadget onto a gadget's properties dialogue box. !Misc.c.objdefs: Added dummy "DropDefRecs" for all object classes. !Window.c.gadgdefs: Added dummy "DropDefRecs" for all gadget types. !Misc.c.protocol: New function locate_drop_action(..) added. protocol_send_resed_object_name_request(..) and received_resed_object_name(..) now operational: when an object is dropped in an interesting place, object_object_drop(..) is called to execute the appropriate drop action. !Misc.h.object, !Misc.c.object: New function object_object_drop(..) deals with dropped objects. !Misc.h.main: Added #define's for WINDOW_OBJECT_CLASS and MENU_OBJECT_CLASS. !Misc.c.objdefs: Modified to include "drop defs" for all object classes. !Window.c.gadgdefs: Added DropDef's for object drops into popups and action buttons. !Window.c.gadget, !Window.h.gadget: New function gadget_object_drop(..) added to process object drops into gadget property dialogue boxes. !Window.c.protocol: New function locate_drop_action(..) added. protocol_send_resed_object_name_request(..) modified as for Misc. received_resed_object_name(..) modified as for !Misc. Further changes to the above functions to process object drops on window property dboxes. !Menu.c.props: props_fill_in_object_name(..): Updated to take account of new icons in the menu entry dbox, and to accept a more limited area for drops (in line with the other CSEs). New function props_drop_icon(..). !Menu.c.protocol: protocol_send_resed_object_name_request(..): Calls props_drop_icon(..) to determine whether the drop is an acceptable one. !Window.c.drag: Changes to drag_interactor(..) to call either props_gadget_drop(..) or gadget_gadget_drop(..) if a drag of a single gadget finishes on a window properties dbox or a gadget properties dbox. !Window.c.props, !Window.h.props: New function props_gadget_drop(..) processes gadget drops on a window properties dbox. !Window.c.gadget, !Window.h.gadget: New function gadget_gadget_drop(..) process gadget drops on a gadget properties dbox. !Window.c.gadgdefs: Added DropDef's for the "Before" and "After" gadget id fields in writables, numberranges and stringsets. 26-Aug-94 !Misc.Templates: ProgInfo - Licence type field made into a (larger) display field and a popup menu icon added to its right. !Misc.c.objdefs: ProgInfo - HASLICENCE toggle-fades LICENCE_POPUP. - LICENCE and LICENCE_POPUP marked as ACT_SPECIAL, and call object_pi_licence_popup(..). - New "apply" function object_pi_apply(..). - LICENCE icon no longer defined as an integer field. !Misc.c.object, !Misc.h.object: Define new functions object_pi_licence_popup(..), object_pi_create_menu(..) and object_pi_apply(..). !Misc.c.main: Call object_pi_create_menu(..) from load_prototypes_and_create_menus(..). !Misc.Messages: Entries added to describe the licence type popup menu contents. common.c.menu: menu_get_entry(..): This function now works even if the entry contains a string that is 12 or fewer characters in size! !Misc.Templates: Iconbar - Position field reduced in size, priority field made wider, and a popup menu icon added to the right of Position. !Misc.c.objdefs: Iconbar - POSITION and POSITION_POPUP marked as ACT_SPECIAL, and call object_ib_position_popup. !Misc.c.object, !Misc.h.object: Define new functions object_ib_position_popup(..), object_ib_create_menu(..). !Misc.Messages: Entries added to describe the position popup menu contents. !Misc.c.main: Call object_ib_create_menu(..) from load_prototypes_and_create_menus(..). !Misc.Templates: FileInfo, SaveAs: Added popup menu icon to right of Filetype icon, and made the latter a display field. Filetype - a new dialogue box. !Misc.Messages: Entries added to describe the filetype popup menu contents. !Misc.c.objdefs: FileInfo, SaveAs: FILETYPE and FILETYPE_POPUP marked as ACT_SPECIAL, and call object_fi/sa_filetype_popup. FILETYPE changed to a FiletypeFieldRec. !Misc.c.object, !Misc.h.object: Define new functions object_fi/sa_filetype_popup(..), object_fisa_create_menu(..). !Misc.c.main: Call object_fisa_create_menu(..) from load_prototypes_and_create_menus(..). !Misc.h.objedit, !Misc.c.object: Add definitions and processing for new field type FLD_FILETYPE. !Misc.c.gui, !Misc.h.gui: New functions gui_put/get_filetype(..). New functions gui_put/get_filetype_string(..). 30-Aug-94 !Misc.c.main: load_prototypes_and_create_menus(..): Doesn't close template file until the end, so that those functions which create menus can also load further templates if they wish. !Misc.c.gui, !Misc.h.gui, !Misc.c.object: gui_put_filetype_string(..) and filetypemenu_cb(..) altered so that any error from OS_FSControl 31 is correctly propagated back. 31-Aug-94 New functions filetype_interactor(..), show_filetypewin(..) and gui_put_filetype_from_user(..) added to implement the "Other filetype" dialogue. !Misc.Templates: FontMenu, FontDbox: new pop-up menu icon added to right of writable for initial font. !Misc.c.objdefs: FontMenu, FontDbox: HASINITIAL toggles INITIAL_POPUP faded status. Initial functions defined. INITIAL_POPUP and INITIAL defined as ACT_SPECIAL, calling: object_fm_ticked_popup(..), object_fd_initial_popup(..) respectively. !Misc.c.object, !Misc.h.object: New functions object_fd_init(..) and object_fm_init(..) defined. New functions object_fm_ticked_popup(..) and object_fd_initial_popup(..) defined. !Misc.c.object: Functions object_fmfd_font_popup(..) and fontmenu_cb(..) added to generate, display and process choices from the font selection menu. !Misc.c.object: object_dbox_key_pressed(..): !Window.c.gadget: gadget_dbox_key_pressed(..): !Window.c.props: props_dbox_key_pressed(..): !Window.c.colours: colours_dbox_key_pressed(..): Calls interactor_cancel(..) to remove any pop-up menus still on display if RET or SHFT/RET is received; no need to do this for ESC or SHFT/ESC since ESC cancels any foreground interaction in precedence to the dialogue box in any case. !Misc.Templates: ColourDbox: COLOUR field made a display field, and a pop-up menu icon COLOUR_POPUP added to its right. !Misc.c.objdefs: ColourDbox: COLOUR and COLOUR_POPUP defined as ACT_SPECIAL, calling object_cd_colour_popup(..). COLOUR removed from field list. !Misc.c.object: object_cd_init(..) - now initialises the COLOUR display field to an 8-digit hexadecimal value using gui_put_rgb_colour(..). 01-Sep-94 !Misc.c.gui, !Misc.h.gui: New function gui_put_rgb_colour(..) added. !Misc.c.object, !Misc.h.object: New function object_cd_colour_popup(..) added. !ResEd.!Run: RMEnsure's version 0.16 of the Colour Picker. !Misc.c.objdefs, c.object, h.object, c.gui, h.gui: New function gui_get_rgb_colour(..) used by object_cd_apply(..) to retrieve value from COLOUR field in ColourDbox dbox. !Misc.h.objedit, c.objdefs: New field "specialstartup" added to ObjectDefRec's; this contains (NULL or) the address of a function to call during start-up. All menu creation functions now defined as startup functions. !Misc.c.main: load_prototypes_and_create_menus(..) now calls the start-up functions generically instead of explicitly. common.h.resed: - version number updated to 0.13. Set DEBUG = 0 in common.h.debug and DBMALLOC = 0 in common.h.dbmalloc - and recompile for release. ******** Version 0.13 (01-Sep-94) released on aquarius.$.release ******** ******** SrcFiler version 019 made from version 0.13 (01-Sep-94) ******** common.h.resed: - version number updated to 0L14. Set DEBUG = 1 in common.h.debug, DBMALLOC = 1 in common.h.dbmalloc; recompile. 02-Sep-94 !Window.Templates: Remove "Align" template. !Window.c.main, c.align, h.align: Remove align_load_prototypes(..). !Window.Messages: New entries to describe the align menu. !Window.c.windowedit: create_menu(..) - now creates the align sub-menu. show_align(..) - is no longer needed, so has been removed. windowmenu_cb(..) - now processes align sub-menu hits by calling align_selection_to (gadget, how), where 'gadget' is the gadget over which the menu button was clicked, and 'how' indicates which alignment option was chosen. Other functions affected are post_windowmenu(..) and prepare_menu(..). !Window.c.align, h.align: New function align_selection_to(..) defined. common.h.wimp: WIMP_ALIGN_COORD(x) now rounds rather than truncates. 05-Sep-94 !Window.Templates: Small changes to Grid template (length of spacing writables). Remove icons connected with colour selection. !Window.h.windowedit: Remove 'colour' field from GridRecs. !Window.c.grid: Major changes to implement grid dbox functionality. !Window.c.windowedit: redraw_window_and_lassoo_or_resize_boxes(..) now displays the grid - by calling grid_show(..) - as well. !Window.c.windowedit: windowmenu_cb(..) - calls grid_snap(..) when this item chosen. !Window.c.grid, h.grid: New function grid_snap(..) defined. !Window.h.windowedit: !Window.c.gadgdefs: New fields to define a gadget's "alignment point" added to the GadgetDefRec; and gadget definitions updated to set them as appropriate. !Window.c.gadget, h.gadget: New function gadget_lb_alignpos(..) added, which returns the alignment position of the given label gadget. !Window.c.windowedit: windowedit_key_pressed(..) - now deals with ^R (make radio group) and ^S properly. 06-Sep-94 !Window.c.drag: finalise_drag(..): If the drag is a move or copy within one window, the distance moved is rounded to the nearest multiple of grid spacing. !Window.c.resize: calculate_new_bbox(..): Round new size to nearest multiple of grid-spacing. !Window.c.drag, c.grid, h.grid, c.resize: New function grid_snap_point(..) added, and used to simplify all the grid-snapping coding. !Window.c.drag: drag_interactor(..): Code added to take note of cursor key presses during a drag, which will "nudge" the pointer by 4 OS units in the desired direction. common.c.dragdrop, h.dragdrop: dragdrop_nudge(..): New utility function added, to make it easy to add "nudging" wherever we want it. !Window.c.move, !Window.c.resize: "Nudging" added to move_interactor(..) and resize_interactor(..). common.h.resed: - version number updated to 0.14. Set DEBUG = 0 in common.h.debug and DBMALLOC = 0 in common.h.dbmalloc - and recompile for release. ******** Version 0.14 (06-Sep-94) released on aquarius.$.release ******** ******** SrcFiler version 020 made from version 0.14 (06-Sep-94) ******** common.h.resed: - version number updated to 0L15. Set DEBUG = 1 in common.h.debug, DBMALLOC = 1 in common.h.dbmalloc; recompile. !Window.c.move: move_selected_gadgets(..): Now uses grid_snap_point(..) to make sure that gadgets moved by ADJ/dragging resize ears are also forced to grid spacing when grid lock is on. 07-Sep-94 !Window.Messages: "Gadgets..." menu entry text now includes keyboard shortcut ^G. KWM_Gadg defined to be 7 ( = ^G). !Window.c.windowedit: Added definition for key_gadgets, which is initialised in create_menu(..) and actioned in windowedit_key_pressed(..). 13-Sep-94 !Misc.!Palette: Default "Try string" in FontDbox now reads "... jumps ..." in place of "... jumped ...". Default length for titles all set to zero, since the Toolbox modules can now cope with this. shell.c.document: document_save_to_memory(..): Now sets versionnumber and objectoffset fields to the "latest" value; that is, to the values required by the version that the shell creates. document_load(..): No longer initialises a document's versionnumber from the first resource file that is loaded. shell.c.document, h.shell DEFAULT_VERSION replaced by RESF_VERSION. 14-Sep-94 !Misc.c.object: object_load(..): Scans the fields array, and sets the lengths of any fields which are exactly the right size to -1. object_save(..): Scans the fields array, replacing any "-1" length values by the correct explicit value. !Misc.c.gui: gui_put_len_str(..), gui_put_len_opt_str(..), gui_get_len_str(..), gui_get_len_opt_str(..): Modified to take account of -1/* as possible value. !Misc.c.gui, h.gui: gui_load_len_field(..), gui_save_len_field(..): New functions called from object_load(..) and object_save(..). gui_adjust_len(..): Modified to take account of "*" possibility - needs extra parameter. !Misc.h.objedit, !Misc.c.objdefs: ACT_ADJUST records now have to include the "valicon" corresponding to the "lenicon" to be adjusted. !Misc.c.object: object_dbox_mouse_click(..): Extra parameter added to calls of gui_adjust_len(..). !Misc.Templates: All "Length" icons now allow "*". !Misc.!Palette: Default length for messages in DCS and Quit is now zero (*). !Menu.c.menuedit: menuedit_load(..): Sets menu title and help text lengths to -1 if they are exact. Sets menu entry text and help text lengths to -1 if they are exact. menuedit_save_object_to_memory(..): Restores explicit lengths where necessary. !Menu.c.gui: gui_put_len_str(..), gui_put_len_opt_str(..), gui_get_len_str(..), gui_get_len_opt_str(..): Modified to take account of -1/* as possible value. !Menu.c.gui, h.gui: gui_adjust_len(..): Modified to take account of "*" possibility - needs extra parameter. gui_load_len_field(..), gui_save_len_field(..) - new functions called from menuedit_load/save_object_to_memory(..). !Menu.c.props: props_menu_dbox_mouse_click(..): props_entry_dbox_mouse_click(..): Calls to gui_adjust_len(..) modified by adding extra parameter. !Menu.Templates: All "Length" icons allow "*". !Window.Templates: All "length" icons allow "*". !Window.c.gui, h.gui: New functions gui_load_len_field(..), gui_save_len_field(..). gui_put_len_str(..), gui_put_len_opt_str(..), gui_get_len_str(..), gui_get_len_opt_str(..): Modified to take account of -1/* as possible value. gui_adjust_len(..): Modified to take account of "*" possibility - needs extra parameter. !Window.c.windowedit: windowedit_load(..): Checks title, help and pointer shape fields, setting the length to -1 if it is exactly what is required. windowedit_save_object_to_memory(..): Replaces any -1 lengths by the correct value. !Window.c.gadget: gadget_load(..), gadget_save(..): Replace any -1 lengths by the correct value. !Window.h.windowedit, c.gadgdefs: ACT_ADJUST records now have to include the "valicon" corresponding to the "lenicon" to be adjusted. !Window.c.gadget: gadget_dbox_mouse_click(..): !Window.c.props: props_dbox_mouse_click(..): !Window.c.grid: grid_interactor(..): Appropriate extra parameters added to calls of gui_adjust_len(..). 19-Sep-94 !Window.h.windowedit: New fields extension, extensionsize and localmaxhelp added to GadgetRec's. Remove�"pendingsnap" field - doesn't seem to be required. !Window.c.gadget: gadget_load(..) - creates and initialises extension record if required. gadget_save(..) - no longer needs to deal with "-1" lengths. gadget_free(..) - frees any extension record. gadget_copy(..) - clones any extension record. gadget_init_dbox(..) - uses "local" copies of length fields. gadget_apply_dbox(..) - updates both original and local copies of length fields. !Window.c.gui, h.gui: gui_load_len_field(..) - now returns length value instead of filling it in. gui_save_len_field(..) - modified in a similar way for consistency. !Window.c.windowedit: windowedit_load(..): Calls to gui_save_len_field(..) modified. windowedit_save_object_to_memory(..): Calls to gui_save_len_field(..) modified. !Window.c.gui: gui_get/put_allowable(..) - now deals with -1/* length values. !Help files created for !ResEd and the three CSEs. !Menu.Templates: Changed to allow user-specified events before showing and when hidden. !Menu.h.menuedit: New fields showevent and hideevent for MenuObjRec. !Menu.h.format: New fields showevent and hideevent for MenuTemplateRec. !Menu.h.main: MENU_OBJECT_VERSION = 102 now. !Menu.c.props: props_update_menu_dbox(..): props_apply_menu_dbox(..): props_menu_dbox_mouse_click(..): Add code to process new menu dbox icons properly. !Menu.c.protocol: received_resed_object_load(..): Add code to convert 101 version menu objects to 102 objects; remove code that converted 100 to 101 objects. !Menu.c.menuedit: menuedit_load(..): menuedit_save_object_to_memory: Add code to load/save new fields showevent and hideevent. !Window.c.gui, !Misc.c.gui: gui_get/put_opt/mand_event(..) - now use -1 as default event value instead of zero! !Window.h.windowedit: Add definition for WRITABLEFIELD_PASSWORD flag. !Window.Templates: Add option icon for Password-type behaviour in writable. !Window.c.gadgdefs: Add FLD definition for Password flag/icon. !Window.h.format: !Window.h.windowedit: Added new fields showevent, hideevent, toolbaribl/itl/ebl/etl and new flag WINDOW_ISTOOLBAR to WindowObjRec's and to WindowTemplateRec's. !Window.h.main: Update WINDOW_OBJECT_VERSION to 102. !Window.c.protocol: received_resed_object_load(..): No longer accepts version 100 window templates, but instead will accept version 101 and upgrade them to version 102. !Window.c.windowedit: windowedit_load(..): windowedit_object_size(..): windowedit_save_object_to_memory(..): Updated to load/save the new fields. 20-Sep-94 !Menu.Palette, !Menu.!Palette: Both converted to version 102 format. !Window.Palette, !Window.!Palette: Both converted to version 102 format. !Window.Templates: Changed to allow user-specified events before showing and when hidden. !Window.c.props: apply_dbox(..): props_update_dbox(..): props_dbox_mouse_click(..): Modified to process new showevent/hideevent fields/icons. shell.c.document: sort_by_name(..): This function is now case-insensitive. !Window.!Palette: Added a new prototype window template called Toolbar - which has the Toolbar flag bit set. !Window.c.windowedit, !Window.Messages: Add new main menu entry "Toolbars...". !Window.Templates: Add new template Toolbars. !Window.c.toolbars, h.toolbars, MakeProto, MakeFile: New source module to handle the Toolbars dbox - modelled on the extent module. !Window.c.windowedit: windowmenu_cb(..): Calls toolbars_open_dbox(..) when User chooses "Toolbars...". windowedit_rename_window(..): Calls toolbars_update_dbox(..). windowedit_close_window(..): Calls toolbars_close_dbox(..). !Window.c.main: load_prototypes(..): Calls toolbars_load_prototypes(..). mouse_click(..): Calls toolbars_dbox_mouse_click(..). open_window_request(..): Calls toolbars_reopen_dbox(..). close_window_request(..): Calls toolbars_close_dbox(..). key_pressed(..): Calls toolbars_dbox_key_pressed(..). !Window.h.windowedit: Add new field "toolbarsdbox" to WindowObjRec. !Window.h.main: New registry type ToolbarsDbox. !Window.c.protocol: protocol_send_resed_object_name_request(..): Calls toolbars_drop_icon(..) to check if the destination is an interesting one. received_resed_object_name(..): Calls toolbars_object_drop(..) when object name received. !Window.c.toolbars, h.toolbars: New functions toolbars_object_drop(..) and toolbars_drop_icon(..) 21-Sep-94 !Window.Templates: New templates "MainProps" and "OtherProps" added. !Window.c.windowedit, !Window.Messages: Add new main menu entries "Main properties...", "Other properties..."; remove "Properties...". !Window.c.windowedit: windowmenu_cb(..): Calls props_open_main/otherdbox(..) when User chooses "Main/Other properties...". windowedit_rename_window(..): Calls props_update_main/other_dbox(..). windowedit_close_window(..): Calls props_close_main/other_dbox(..). !Window.c.main: mouse_click(..): Calls props_main/other_dbox_mouse_click(..). open_window_request(..): Calls props_reopen_main/other_dbox(..). close_window_request(..): Calls props_close_main/other_dbox(..). key_pressed(..): Calls props_main/other_dbox_key_pressed(..). !Window.h.windowedit: Replace "propsdbox" field in WindowObjRec by "mainpropsdbox" and "otherpropsdbox" fields. !Window.h.main: New registry types MainpropsDbox and OtherpropsDbox replace PropsDbox. !Window.c.protocol: protocol_send_resed_object_name_request(..): Calls props_main_drop_icon(..) to check if the destination is an interesting one. received_resed_object_name(..): Calls props_main_object_drop(..) when object name received. !Window.c.drag: drag_interactor(..): Calls props_main_gadget_drop(..) if a gadget is dropped into the main properties dbox. !Window.c.props, h.props: Split old functions into pairs of new ones as appropriate. !Window.c.props: props_update_main/other_dbox(..): If the window being edited is a toolbar, then only appropriate icons are unfaded. !Menu.c.drag: copy_to_tmp(..): Now clones "clickshow" and "submenushow" fields as well as the "text" and "helpmessage" fields! !ResEd.Templates, !Menu.Templates, !Misc.Templates, !Window.Templates: Checked Matt's tweaked templates and added these in instead. 22-Sep-94 !Window.c.resize: calculate_new_box_width(..): Now takes grid lock into account, so that a numberrange gadget whose display is being resized with Grid Lock on will only take sizes which are multiples of the grid spacing. resize_plot_boxes(..): Now calls calculate_new_bbox(..) with usegridlock = TRUE, so that the dotted rectangle locks to the grid as the user drags the mouse when grid lock is on. !Window.c.windowedit: plot_numberrange_special_ear(..): Only does so if the numberrnage has both a numerical display *and* a slider. !Window.c.gadget: gadget_nr_init(..): Initialises numberrange display width icon. gadget_nr_apply(..): Interprets numberrange display width icon. gadget_nr_numerical(..): gadget_nr_slider(..): Fade/unfade numberrange display width icon as appropriate. !Window.Messages: New error NrDispWidth. !Window.c.resize: resize_selected_gadgets(..): Updates numberrange properties dbox when width changes by calling gadget_nr_update_display_width(..). !Window.c.gadget, h.gadget: gadget_nr_update_display_width(..): New function which updates display width field. !Window.c.gadgdefs: Add DISPLAY_WIDTH field to numberrange definition, so that the field inside the icon is always set/retrieved, even if the icon is shaded. !Window.c.gadgdefs: Add GROUP field to radio button definition. !Window.c.gadget, h.gadget: gadget_rb_update_group(..): New function to update group number in dbox. gadget_rb_make_radio_group(..): Calls gadget_rb_update_group(..). !Window.c.drag: finalise_drag(..): Calls gadget_rb_update_group(..) instead of changing a radio button's group number directly. !Window.Templates: Added Matt's new "extent" template. Range values for numberrange and slider templates now have icons which allow values up to 11 characters long. !Window.c.gadget: gadget_sl_apply(..): If the slider's orientation has changed, it is also rotated through 90 degrees. !Window.c.move: move_interactor(..): Updates dotted box in grid steps if grid is locked. !Window.c.gadget: gadget_note_new_default_action_button(..): Now reduces the size of any previous default action button, and increases the size of the any new one. gadget_ab_default(..): Reduces the size of any action button which is made non-default. !Window.Messages: New message tags defined for the Select sub-menu, and for new error messages. !Window.c.windowedit: create_menu(..): Creates the "select" submenu. prepare_menu(..): Shades/unshades entries in the select menu as appropriate. 23-Sep-94 windowmenu_cb(..): Calls appropriate routine according to entry chosen from select sub-menu. select_linked_writable(..): Implements "Next/Previous writable". select_default_focus(..): Implements "Default writable". select_special_action(..): Implements "Default/Cancel action". !Window/!Menu/!Misc/shell.MakeFile/MakeProto !Help added to list of files to install, and install rule amended accordingly. common.h.resed: - version number updated to 0.15. !Help files updated for ResEd and the three CSEs. Set DEBUG = 0 in common.h.debug and DBMALLOC = 0 in common.h.dbmalloc - and recompile for release. ******** Version 0.15 (23-Sep-94) released on aquarius.$.release ******** ******** SrcFiler version 021 made from version 0.15 (23-Sep-94) ******** common.h.resed: - version number updated to 0L16. Set DEBUG = 1 in common.h.debug, DBMALLOC = 1 in common.h.dbmalloc; recompile. !Menu.Templates: menudbox - "Deliver event before showing" rather than "Deliver event when showing". (This change was rather cheekily retrofitted to the 0.15 release by replacing the Templates file, although it is not yet on the SrcFiler.) 26-Sep-94 !Window.h.main: Remove registry code KeyDbox - not needed. !Window.Templates: Replace KeyParent and KeyPane by the new templates, and delete KeyEdit. !Window.c.keycuts: Restructure and rewrite to work with new (single) dbox. !Window.c.protocol: protocol_send_resed_object_name_request(..): Calls keycuts_drop_icon(..). received_resed_object_name(..): Calls keycuts_object_drop(..). !Window.c.keycuts, h.keycuts: New functions keycuts_drop_icon(..) and keycuts_object_drop(..) to handle drag'n'drop of objects onto the "Show object" fields. !Window.Templates: KeyParent - all writable icons changed to write/click/drag icons so that mouse-clicks get sent to the application; this makes it possible to de-activate the special "Key" icon whenever the user clicks elsewhere on the dbox. 27-Sep-94 !Window.Templates: KeyParent - Key icon made wider. !Window.c.keycuts: update_keycuts(..): Resets the KEY field from the CODE field. plot_keycut(..) replaced by get_keycut(..). keycuts_redraw_pane(..): Will use Wimp_TextOp when appropriate. keycuts_load_prototypes(..): Initialises 'usetextop' according to Wimp version, and chooses an appropriate line height. common.h.swicall: Added #define for Wimp_TextOp. common.h.resed: - version number updated to 0.16. !Help files updated for ResEd and the three CSEs. Set DEBUG = 0 in common.h.debug and DBMALLOC = 0 in common.h.dbmalloc - and recompile for release. ******** Version 0.16 (27-Sep-94) released on aquarius.$.release ******** ******** SrcFiler version 022 made from version 0.16 (27-Sep-94) ******** common.h.resed: - version number updated to 0L17. Set DEBUG = 1 in common.h.debug, DBMALLOC = 1 in common.h.dbmalloc; recompile. 30-Sep-94 common.c.wimp: wimp_toggle_pattern(..): New function which inverts the dot-dash pattern used to draw the drag box. wimp_plot_eor_box(..): Uses the predefined dot-dash pattern which can be inverted by calling the function above. !Window.c.move: move_interactor(..): Calls wimp_toggle_pattern(..) between removing one drag box and plotting the next. Repeatedly replots the drag box when NULL events arrive, even if it has not moved, so that it appears to circulate. !Window.c.resize: resize_interactor(..): Repeatedly replots the drag boxes when NULL events arrive, calling wimp_toggle_pattern() to give illusion of circulation. !Window.c.drag: drag_start(..): drag_interactor(..): Substantial modifications made so that a type 5 (normal) drag is used only when the mouse is outside a WindowEdit window, and that within such windows the box is plotted explicitly as in a move. common.c.wimp: wimp_toggle_pattern(..): Now cycles around 8 patterns like the Wimp does. 03-Oct-94 common.c.wimp, h.wimp: Rename wimp_toggle_pattern as wimp_cycle_pattern. New function wimp_cycle_eor_box(..) to "rotate" a static dragbox. !Window.c.move: move_interactor(..) calls wimp_cycle_eor_box(..) when the box has not moved. !Window.c.move, c.resize, c.drag: Replace calls to wimp_toggle_pattern(..) by calls to wimp_cycle_pattern(..). move_start(..) - timeout set to 2 centiseconds, so that the drag box looks just like the one the Wimp generates. common.c.wimp, h.wimp: Functions wimp_start_rotate_box(..) and wimp_end_rotate_box(..) replace wimp_cycle_eor_box(..), thus making it possible for more than one box to be rotated at once. !Window.c.move: Corresponding changes made to move_interactor(..). !Window.c.resize: And to resize_interactor(..). resize_start(..): Time out set to 2. !Window.c.lassoo: lassoo_start(..): Time out set to 2. lassoo_interactor(..): Includes code to rotate a stationary lassoo. !Window.c.drag: drag_start(..): Time out set to 2. drag_interactor(..): Includes code to rotate a stationary drag box. !Window.c.gui, !Misc.c.gui, !Menu.c.gui: gui_get/put_opt/mand_event(..) - now use 0 as default event value instead of -1! !Menu.c.protocol: received_resed_object_load(..): Initialises showevent and hideevent fields to 0, not -1, when converting version 101 to 102 menus. !Window.c.protocol: received_resed_object_load(..): Initialises showevent and hideevent fields to 0, not -1, when converting version 101 to 102 windows. !Window.Templates, !ResEd.Templates, !Misc.Templates: All display icons are now marked as "Filled" again, following Style Council decision. 04-Oct-94 !Window.c.move: move_interactor(..): Action when autoscrolling changed to give smoother appearance. !Window.c.lassoo: lassoo_interactor(..): Improved action when auto-scrolling. !Window.c.resize: resize_interactor(..): Improved action when autoscrolling. !Window.c.drag: drag_interactor(..): Improved action when auto-scrolling. !Menu.c.lassoo: lassoo_interactor(..): Drag box rotates, and improved action when auto-scrolling. shell.c.document: lassoo_interactor(..): Rotates, and improved action when auto-scrolling. common.c.dragdrop: perhaps_scroll(..): Scroll offsets are checked to make sure that scrolling will actually occur: that is, that the OPEN_WINDOW_REQUEST which causes Wimp_OpenWindow to be called will then actually generate a REDRAW_REQUEST. The distance moved is also forced to be a multiple of 4 OS units. !Window.c.windowedit, h.windowedit: !Menu.c.menuedit, h.menuedit: shell.c.doument: Remove unwanted redraw routines. !Window.c.keycuts: Removed references to IF_FILLED bit for the KEY icon. !Window.c.lassoo: !Menu.c.lassoo: !Menu.c.drag: shell.c.document: Cursor-key nudge code added to interactor. !Window.Palette: Checked again and minor adjustments made. !Window.c.windowedit: windowedit_redraw_window(..): Errors from Window_PlotGadget are ignored unless the code is compiled with DEBUG set. !ResEd.!Run, !ResEd.!Boot: Now correctly set up aliases. shell.c.document: rename_interactor(..): Leaves name available for re-edit after an error. shell.c.document, h.document: document_create(..): No longer allows empty document windows to be opened over the icon bar. 05-Oct-94 document_add_resource(..): Now has a new parameter - Bool isnew - which, if set, causes the function to make sure that the window does not obscure the icon bar as it gets larger. static int lasty - is now declared at the top of the file, since it is used both by document_create(..) and by document_add_resource(..). document_load(..): document_load_file(..): Also have extra parameter 'isnew'. All calls of changed procedures now have extra parameter. shell.c.main: All calls of changed procedures now have extra parameter. !Window.c.windowedit: windowedit_open_palette(..): !Menu.c.menuedit: menuedit_open_palette(..): Forces component ids of gadgets in the palette to be -1, not 0. !Window.c.drag: disambiguate(..): !Menu.c.drag: disambiguate(..): Always assigns a new componentID to gadgets with -1. !Window.h.windowedit: New field 'usecount' for BodyDefRec's. !Window.c.gadgdefs, h.gadgdefs: New 'usecount' field initialised in all gadget definitions. New prototype definition 'unkgadgetdef' added for unknown gadget types. !Window.h.format: Added GADGET_UNKNOWN_TYPE = -1. !Window.c.gadget: gadget_copy(..): Increments usecount for unknown gadgets. gadget_free(..): Decrements usecount for unknown gadgets, and frees the refdef array and GadgetDefRec when the count reaches zero. gadget_load(..): Assigns unkgadgetdef as the definition of an unknown gadget type and calls a new function create_body_description(..) to allocate a refdef's array and fill in the BodyDefRec. Two new parameters - offset and reloctable - added. !Window.c.windowedit: windowedit_load(..): Passes the offset of the gadget, and the address of its window object template's relocation table, to gadget_load(..). !Window.Messages: New message token "BadUnkGadReloc". !Window.c.main: load_prototypes(..): now loads unkgadgetdef prototype as well. !Window.c.windowedit: windowedit_redraw_window(..): The *first* error that occurs during a redraw loop is remembered and returned at the end - if DEBUG is on. Some tidying of template and palette positioning. !Window.c.windowedit: windowedit_key_pressed(..): Allows only ^A and ^Z on palette windows. !Menu.c.windowedit: menuedit_key_pressed(..): Allows only ^A and ^Z on palette windows. shell.c.document: document_key_pressed(..): Allows only ^A and ^Z on palette windows. 06-Oct-94 !Window.c.grid: grid_interactor(..): Responds correctly to SHFT/RETURN (but still can't get SHFT/CANCEL - I think the Wimp prevents this). !Menu.!Run, !Misc.!Run, !Window.!Run, !ResEd.!Run: Reasonable wimpslot sizes set. common.h.resed: - version number updated to 0.17. !Help files updated for ResEd and the three CSEs. Set DEBUG = 0 in common.h.debug and DBMALLOC = 0 in common.h.dbmalloc - and recompile for release. ******** Version 0.17 (06-Oct-94) released on aquarius.$.release ******** ******** BETA Release ******** ******** SrcFiler version 023 made from version 0.17 (06-Oct-94) ******** common.h.resed: - version number updated to 0L18. Set DEBUG = 1 in common.h.debug, DBMALLOC = 1 in common.h.dbmalloc; recompile. !Window.c.coords: coords_interactor(..): Responds correctly to SHFT/RETURN. shell.c.rename: rename_interactor(..): shell.c.copy: copy_interactor(..): shell.c.objflags: objflags_interactor(..): common.c.saveas: saveas_interactor(..): Responds to ADJ/CANCEL and SHFT/RET correctly. No longer takes two clicks to remove error box after ADJ/OK with incomplete path-name. !Misc.c.object: colourpicker_interactor(..): Remove call to ColourPicker_CloseDialogue when cancelling the interactor. Remove code to handle Message_ColourPickerCloseDialogueRequests since these should never arise from transient colour pickers. object_cd_colour_popup(..): Use interactor_install(..) instead of interactor_push(..) to install the colour picker interactor. 07-Oct-94 common.h.resed: - version number updated to 0.18. !Help files updated for ResEd and the three CSEs. Set DEBUG = 0 in common.h.debug and DBMALLOC = 0 in common.h.dbmalloc - and recompile for release. ******** Version 0.18 (07-Oct-94) released on aquarius.$.release ******** ******** BETA Release (really!) ******** ******** SrcFiler version 024 made from version 0.18 (07-Oct-94) ******** common.h.resed: - version number updated to 0L19. Set DEBUG = 1 in common.h.debug, DBMALLOC = 1 in common.h.dbmalloc; recompile. !Window.c.help, h.help, c.main, MakeFile, MakeProto: help_message(..): Moved from c.main to a module of its own, and recoded to provide the skeleton of the new help system. !Window.c.main: start_wimp(..): Requires version 310, and currently asks for all messages. !Misc.c.objdefs: ACT_RADIO click definitions added for the Iconbar dbox radio buttons, so that ADJ can no longer be used to switch *all* buttons in a group off. !Window.c.windowedit, h.windowedit: windowedit_help_text(..): Prototype function added. 10-Oct-94 common.c.wimp, h.wimp: New version of wimp_read_icon_name(..) written, which copes with the "multi-icon" items labelled boxes and adjuster arrow pairs. This version also takes different parameters. !Misc.c.main: !Menu.c.main: shell.c.main: help_message(..): Call to wimp_read_icon_name(..) changed appropriately. !Window.c.coords: coords_load_prototypes(..): !Window.c.grid: grid_load_prototypes(..): Now register the grid and coords dboxes. !Window.h.main: Removed #define for AlignDbox. common.c.menu, h.menu: New functions menu_register(..) and menu_lookup_type(..) added. !Window.Messages: New token "TooManyMenus" added. !Window.c.windowedit: create_menu(..): !Window.c.colours: colours_load_prototypes(..): !Window.c.props: props_load_prototypes(..): Registers the new menus as well. 11-Oct-94 !Window.c.windowedit(..): windowedit_help_text(..) - completed. !Window.Messages: Tokens and messages added for editing and palette windows. !Misc.c.help, h.help, c.main, MakeFile, MakeProto: help_message(..): Copied from !Window.c.help, amended as necessary for Misc use. !Misc.c.main: start_wimp(..): Requires version 310, and currently asks for all messages. !Misc.c.object: object_fisa_create_menu(..): Registers the transient filetypewin window. !Misc.h.main: Add #define for FileTypeDbox, and for menu types. !Misc.Messages: New token "TooManyMenus" added. !Misc.c.object: object_fisa_create_menu(..): object_ib_create_menu(..): object_pi_create_menu(..): !Misc.c.colours: colours_create_menus(..): Code added to register menus after creation. common.c.menu, h.menu: menu_deregister(..): New function to deregister a menu. !Misc.c.object: object_fmfd_font_popup(..): De-registers any preceding font menu, and registers the new one. !Menu.c.help, h.help, c.main, MakeFile, MakeProto: help_message(..): Copied from !Window.c.help, amended as necessary for Menu use. !Menu.c.main: start_wimp(..): Requires version 310, and currently asks for all messages. !Menu.c.menuedit, h.menuedit: menuedit_help_text(..): Copied from !Window.c.windowedit, and amended as appropriate for !Menu use. !Menu.h.main: Added #define for menu type. !Menu.Messages: New token "TooManyMenus" added. !Menu.c.menuedit: create_menu(..): Registers the main menu after creation. !Menu.Messages: Tokens and messages added for editing and palette windows. 12-Oct-94 shell.c.help, h.help, c.main, MakeFile, MakeProto: help_message(..): Copied from !Menu.c.help, amended as necessary for shell use. shell.c.main: start_wimp(..): Requires version 310, and currently asks for all messages. shell.c.document, h.document: document_help_text(..): Copied from !Window.c.windowedit, and amended as appropriate for shell use. shell.h.shell: Added #define's for menu types, and for all dbox types. !ResEd.Messages: New token "TooManyMenus" added. shell.c.document: document_close_window(..): shell.c.main: warn_exit(..): shell.c.copy: copy_load_prototypes(..): shell.c.rename: rename_load_prototypes(..): Registers each dbox after creation. common.c.saveas, h.saveas: saveas_load_prototypes(..): Now has extra parameter to which, if not null, the created window's handle is assigned. shell.c.main: load_prototypes(..): Registers the SaveAs dbox after creation. shell.c.document: document_load_prototypes(..): shell.c.main: create_icon_menu(..): Registers the various menus after creation. !ResEd.Messages: Tokens and messages added for document and palette windows. shell... Rename h.shell as h.main for consistency with other modules. !ResEd.Templates: Names given to the icons in the SaveAs template. shell.c.help, h.help, c.document: !Menu.c.help, h.help, c.menuedit: !Window.c.help, h.help, c.windowedit: !Misc.c.help, h.help: New function help_lookup_token(..) added and used (to simplify and shorten the code). New #define MAX_HELP_TEXT defined. 13-Oct-94 !Window.Templates: Removed scroll bar from Extent template. !ResEd.Messages: shell.c.document: document_load_prototypes(..): Add ^O as shortcut for Object flags menu entry. document_key_pressed(..): Calls objflags_open(..) for ^O if a selection is present. shell.c.objflags: objflags_open(..): Opens dbox in previous position if position given as NULL. objflags_interactor(..): Explicitly closes dbox if it was opened as a menu (rather than as a submenu). 14-Oct-94 !Window.Messages: Add keyboard shortcuts ^T, ^L, �G, �C, �R. !Window.c.windowedit: create_menu(..): Define new keyboard shortcuts. windowedit_key_pressed(..): Processes new keyboard shortcuts. !Window.c.gadget: gadget_link_writables(..): Now works even if there is no selection when called. !Window.Templates: Position Coords and Grid templates centrally. !Window.c.grid: Systematic modifications to allow the grid dbox to be displayed directly by keyboard shortcut as well as indirectly by menu choice. !Window.c.coords: Systematic modifications to allow the coordinates dbox to be displayed directly by keyboard shortcut as well as indirectly by menu choice. !Window.h.windowedit: Add new field 'menuicon' to ColourClickRecs and ButtonClickRecs. !Window.c.gadgdefs: Appropriate values added to ColourClick and ButtonClick Recs. !Window.c.gadget: gadget_dbox_mouse_click(..): 'menuicon' passed instead of 'position' to colours_choose(..) and props_button_choose(..). !Window.c.colours: colours_dbox_mouse_click(..): 'menuicon' passed instead of 'position' to colours_choose(..). !Window.c.props: props_other_dbox_mouse_click(..): Passes an icon instead of a position to props_button_choose(..). !Windows.c.colours, h.colours: colours_choose(..): Positions menu relative to 'menuicon' instead of at specific location. !Windows.c.props, h.props: props_button_choose(..): Positions menu relative to 'menuicon' instead of at specific location. !Misc.c.colours, h.colours: New version of colours_choose(..) as above. !Misc.c.object: object_cm_colour(..): Amend call to colours_choose(..) appropriately. where_to_popup(..): New function that calculates where to pop up a menu. object_fisa_filetype_popup(..): object_fmfd_font_popup(..): Extra parameter 'menuicon', used to determine where to place the menu. object_ib_position_popup(..): object_pi_licence_popup(..): Use where_to_popup(..) to determine where to display the menu. object_fi_filetype_popup(..): object_sa_filetype_popup(..): object_fd_initial_popup(..): object_fm_ticked_popup(..): Now pass extra parameter to the relevant menu-popup function. object_cd_colour_popup(..): Now positions Colour Picker as transient popped-up object. common.h.resed: - version number updated to 0.19. !Help files updated for ResEd and the three CSEs. Set DEBUG = 0 in common.h.debug and DBMALLOC = 0 in common.h.dbmalloc - and recompile for release. ******** Version 0.19 (14-Oct-94) released on aquarius.$.release ******** ******** SrcFiler version 025 made from version 0.19 (14-Oct-94) ******** common.h.resed: - version number updated to 0L20. Set DEBUG = 1 in common.h.debug, DBMALLOC = 1 in common.h.dbmalloc; recompile. !Window.c.windowedit: windowedit_save_object_to_memory(..): Sets "behind" = -2 if the window has the "backdrop" bit set. !Window.c.windowedit: click_in_gadget(..): No longer erroneously detects clicks on internal resize ears that are not present. 17-Oct-94 !Window.c.windowedit: prepare_menu(..): "Toolbars..." entry shaded iff window is a toolbar. windowedit_key_pressed(..): ^T only raises Toolbars dialogue if the window is not a toolbar. Cancels any foreground interaction in progress (eg menu on display). Gives error message when: ^R - and selection is not entirely of radio buttons ^L - and selection does not include a writable SHFT/R works only if exactly one radio button is selected. prepare_menu(..): "Select radio group" only unfaded if exactly one radio button is selected. !Window.c.gadget: gadget_link_writables(..): Returns error if current selection is empty or does not include a writable. !Window.Messages: New error messages Rbsonly, Needwritable, Onerb. !Window.c.drag: drag_interactor(..): !Window.c.lassoo: lassoo_interactor(..): !Window.c.move: move_interactor(..): !Window.c.resize: resize_interactor(..): !Window.c.winddrag: winddrag_interactor(..): KEY_PRESSED events are always 'consumed' - unless it's the ESC key; this means that they have higher priority than arbitrary keyboard shortcuts. !Menu.c.menuedit: menuedit_key_pressed(..): shell.c.document: document_key_pressed(..): Call interactor_cancel(..) to cancel any foreground interaction in progress. !Menu.c.drag: drag_interactor(..): !Menu.c.lassoo: lassoo_interactor(..): shell.c.document: lassoo_interactor(..): common.c.dragdrop: dd_interactor(..): All KEY_PRESSED events - other than ESC - are now consumed. !Window.c.gadgdefs: Special function defined for applying a WimpIcon dbox. !Window.c.gadget, h.gadget: gadget_wi_apply(..): New function - checks ESG < 32. !Window.Messages: New message ESGRange. 18-Oct-94 common.c.dbox, h.dbox: dbox_set_caret_to(..): Now ensures that the caret is never placed/left in a faded icon; the next unfaded writable - if any - is used instead. dbox_place_caret(..): New function which places the caret as requested. !Window.c.gadget: gadget_dbox_mouse_click(..): Calls dbox_place_caret(..) as appropriate when user clicks on option buttons which unfade writable icons. The call to dbox_set_caret_to(..) is now upon exit instead of entry, so that the caret is never left in a faded icon. gadget_dbox_key_pressed(..): Small changes to handle caret properly. gadget_nr_slider(..): gadget_nr_numerical(..): gadget_nr_writable(..): gadget_ss_numerical(..): gadget_ss_writable(..): Make appropriate calls to ensure caret is sensibly positioned. !Window.c.gui: gui_put_allowable(..): Now gets caret position correct. !Window.c.coords: coords_interactor(..): !Window.c.toolbars: toolbars_dbox_key_pressed(..): toolbars_dbox_mouse_click(..): !Window.c.props: props_main_dbox_key_pressed(..): props_other_dbox_key_pressed(..): props_main_dbox_mouse_click(..): props_other_dbox_mouse_click(..): Places caret when option switched on. Ensures caret is not left in faded icon. !Misc.c.object: object_dbox_mouse_click(..): object_dbox_key_pressed(..): Changes analogous to those for gadget_..(..). object_pd_pagerange(..): Places caret in "First" field when this is unfaded. !Misc.c.objdefs: Arrange for caret to go into "first" icon when "range" selected in a PrintDbox. Make "Sprite name" the first writable for Iconbar objects. !Menu.c.props: set_caret_to(..): This local function removed - use dbox_set_caret_to(..) instead. props_menu_dbox_key_pressed(..): props_entry_dbox_key_pressed(..): props_menu_dbox_mouse_click(..): props_entry_dbox_mouse_click(..): Places caret when option switched on. Ensures caret is not left in faded icon. !Window.c.extent: apply_dbox(..): Now forces minimum width/height to be at most the extent size. !Window.h.windowedit: New field minsize in GadgetDefRec. !Window.c.gadgdefs: Values put in for minsize. !Window.c.resize: calculate_new_bbox(..): Takes account of minimum size constraints. 19-Oct-94 !Window.c.coords: execute_coords(..): Checks gadget minimum size constraints. !Window.Messages: New errors for minimum size violations. !Window.c.drag: finalise_drag(..): Code changed to minimise gadget re-ordering: Move within a window treated specially. Gadgets added to a window are added at the end. !Misc.c.gui: !Menu.c.gui: Ensures that length fields are always long enough for the corresponding string. !Window.c.gui, h.gui: gui_load_len_field(..): Updates any length value that is not large enough. !Window.c.gadget, c.windowedit: gadget_load(..): windowedit_load(..): Calls to gui_load_len_field(..) amended accordingly. shell.h.document: New fields for ResourceRec's: importing, original. These are to make it possible to send an object with modified messages to its CSE, and then immediately retrieve it - in order to update any length fields associated with changed messages. 'importing' is TRUE whilst this is happening, and 'original' contains the previous version of the object in case something goes wrong. shell.c.genmsgs: genmsgs_import_file (..): shell.c.protocol: New protocol sequence implemented so that objects into which new messages have been imported are sent to their CSEs to be validated, and then grabbed back if necessary. !Misc.c.protocol: protocol_incoming_message(..): Now handles requests from the shell to send data. received_resed_object_send(..): New function to handle shell request for data - only used after messages have been changed. !Window.c.windowedit: windowedit_load(..): Does not open any window created as a result of a force-load of a window not previously known about. This avoids the "flicker" when messages are imported. !Misc.c.object, h.object: object_open_dbox(..): Extra parameter added to determine whether the window is opened or not. !Misc.c.protocol: received_resed_object_load(..): !Misc.c.objedit: objedit_load(..): Extra parameter added to calls of above function. !Menu.c.menuedit: menuedit_load(..): Does not open any window created as a result of a force-load of a menu not previously known about. This avoids the "flicker" when messages are imported. 20-Oct-94 !Misc.c.protocol: !Window.c.protocol: !Menu.c.protocol: received_resed_object_send(..): If flag bit 0 is set, the shell is asking that the object be deleted after it has been sent - so set 'pendingclose' TRUE. shell.c.protocol: received_resed_object_loaded(..): Sets this flag when requesting data for an object that has just been sent out with new messages - and is not currently being edited. received_resed_object_sending(..): No longer needs to send RESED_OBJECT_DELETED message after retrieving data from the CSE. !Misc.c.objedit: objedit_load(..): Preserves position of dbox when closing prior to reopening. !Misc.c.object: object_open_dbox(..): No longer explicitly sets "behind" to -1 when opening a newly created dbox. !ResEd.Messages: New message for export header. shell.c.genmsgs: write_messages(..): Outputs header for messages file. genmsgs_import_file(..): Checks header before processing file. Does not rebuild a resource if no messages have altered. shell.h.main: New window registry code ImpWarnWin. shell.c.genmsgs, h.genmsgs: genmsgs_load_prototypes(..): New function to load ImpWarn template. importwarn_interactor(..): New function to handle interaction with the ImpWarn dbox. genmsgs_import_file(..): Checks the file, and then raises the import warning dbox. import_messages(..): New function to complete import processing. shell.c.main: load_prototypes(..): Calls genmsgs_load_prototypes(..). !ResEd.Templates: New template ImpWarn. !Window.c.windowedit: windowedit_load(..): Now preserves grid settings when reloading a window. shell.c.document: select_bounded_icons(..): New parameter 'entirely' added, which determines whether icons partly inside the given bounding box are selected or not. Calls to this function have been approriately updated. shell.c.document: document_free_all(..): Now just closes the palette, instead of destroying it: this makes it possible to recreate it if a shut-down sequence accepted by ResEd is refused by some other application. shell.c.document: document_close_window(..): Now responds correctly to SHFT/ADJ click on close icon - that is, it no longer tries to close the document window as well as opening the parent directory. shell.c.main: iconsprites(..): Now returns boolean to say whether sprites were loaded or not. load_any_sprites(..): New function to load any Sprites[<nn>] file inside a given directory. dataload_message(..): dataopen_message(..): main(..): Calls load_any_sprites(..) after loading a resource file. shell.c.main, h.main: main(..): New flag 'privateflag' set TRUE iff the application is called with "-private" as its final argument. !ResEd.Templates: Copy and Rename writables given validation strings to restrict entry to alphanumerics and underlines; also the writable in DocProto used for icon names. shell.c.document: document_rename_resource(..): document_copy_resource(..): Takes account of "private" flag. !ResEd.Messages: New message "BadName". 21-Oct-94 shell.c.document: document_mouse_click(..): ADJ-drag now adds the clicked icon to any current selection and then drags as usual. document_close_window(..): issue_close_warning(..): The latter part of the first function is separated out to make the second function. start_drag(..): drag_callback(..): datasave_interactor(..): Detailed changes made so that information about whether the source document window is to be closed or not at the end of a drag is passed through. ADJ-drag now works as it should. !Window.Templates: Toolbars template - validation string corrected for ETL toolbars so that it include A-Z, rather than A-A! !Window.c.gui, h.gui: gui_put_colour(..): Now has an extra parameter 'realcolours' which is set TRUE if the value supplied is in the range 0-255 instead of 0-15,255. !Window.c.colours: colours_update_dbox(..): Shades out pop-up menu icons if realcolours are specified. coloursmenu_cb(..): Add realcolours = FALSE to gui_put_colour(..) calls. !Window.c.gadget: gadget_init_dbox(..): Add realcolours = FALSE to gui_put_colour(..) calls. !Window.c.colours: colours_load_prototypes(..): colours_open_dbox(..): Further changes to alter appearance and behaviour of ColoursDbox according to its use. !Window.Templates: Colours - updated appropriately. !Window.c.props: apply_other_dbox(..): If the value of the "realcolours" flag changes, any open Colours dbox is closed and reopened. !Window.c.colours, h.colours: colours_redesign_dbox(..): New function to close and then reopen the colours dbox. !Window.c.props: props_update_main_dbox(..): Greys out inappropriate title and flag options. props_main_dbox_mouse_click(..): Maintains greyedness of inappropriate title and flag options. !ResEd.!Run: RMEnsure's BorderUtil 0.05. !Menu.c.props: props_close_menu_dbox(..): props_close_entry_dbox(..): !Misc.c.object: object_close_dbox(..): !Window.c.colours: colours_close_dbox(..): !Window.c.extent: extent_close_dbox(..): !Window.c.gadget: gadget_close_dbox(..): !Window.c.keycuts: keycuts_close_dbox(..): !Window.c.props: props_close_main_dbox(..): props_close_other_dbox(..): !Window.c.toolbars: toolbars_close_dbox(..): New BorderUtils servicecall included. !Menu.c.props: props_close_menu_dbox(..): props_close_entry_dbox(..): Now deregister the window as well. !Window.c.keycuts: update_keycuts(..): Ensures key codes are less than &200. code_to_keyid(..): No longer incorrectly translates, eg, &1ff to &1cf. !Window.Messages: New message "Badkeycode". 24-Oct-94 common.c.dbox: dbox_setstring(..): dbox_setbutton(..): dbox_iconflag(..): These functions now call Wimp_SetIconState only if the state or content of the icon has changed. !Window.c.gui: gui_put_allowable(..): No longer uses icon buffer as workspace - thus removing irritating "flicker". common.c.wimp, h.wimp: New structure WindowOutlineRec. wimp_read_window_constraints(..): New function to determine in which directions windows may be dragged off screen. !Window.c.winddrag: Re-organised so that move and resize drags have separate starts and interactors. winddrag_move_start(..): Constrains mouse position so that there is no need to check during the drag. winddrag_move_interactor(..): Simplified as a result of the above change. No more "pointer bounce". winddrag_resize_start(..): winddrag_resize_interactor(..): Similar changes ensure mouse pointer does not leave screen or window during resize, and does not "bounce". winddrag_resize/move_interactor(..): Recombined into a single interactor. !Window.Templates: Draggable: Labels for draggable type made more comprehensible. New option buttons for drop shadow and dithered. !Window.h.format: New flags DRAGGABLE_HASDROPSHADOW, DRAGGABLE_NOTDITHERED added. !Window.c.gadgdefs: Extend definition of Draggables to include the two new flags. !ResEd.!Run: RMEnsure's Window 0.19. shell.c.document: datasave_interactor(..): DATA_LOAD_ACK case no longer runs into RAM_FETCH case - fixes buglet introduced above ... !Misc.c.object: tick_font_menu_path(..): New function to re-tick a font menu. fontmenu_cb(..): Calls above function when necessary. !Misc.c.object: object_fisa_filetype_popup(..): Now ticks "Other" if the filetype is not in the list. shell.c.genmsgs: write_messages(..): genmsgs_import_file(..): Header line for export file now includes proper version number. !Window.Palette: Draggable prototype has drop shadow and dithering on. Radio button prototype is selected. 25-Oct-94 !Window.c.gadget: gadget_nr_apply(..): Checks to see that the numberrange has at least one of a slider, display or adjusters. !Window.Messages: New error message "EmptyNR". shell.MakeFile, MakeProto: !Menu.MakeFile, MakeProto: !Window.MakeFile, MakeProto: !Misc.MakeFile, MakeProto: Now squeeze's !RunImage. !Window.Templates: Stringset and Numberrange templates "squeezed" so that they now just fit onto a mode 27 screen. !Misc.Templates: SaveAs, FileInfo "filetype" fields extended so as to be able to hold "directory" and "application" filetypes. !Misc.c.gui: gui_put_filetype(..): gui_get_filetype(..): gui_put_filetype_string(..): gui_get_filetype_string(..): Various changes to cope with &1000 and &2000 pseudo-types. !Misc.c.object: redisplay_filetype_stuff(..): show_filetypewin(..): object_fisa_filetype_popup(..): char type[12] instead of char type[9] to allow for new special filetypes. !Misc.Templates: Filetype name field increased in length to 12. common.h.resed: - version number updated to 0.20. !Help files updated for ResEd and the three CSEs. Set DEBUG = 0 in common.h.debug and DBMALLOC = 0 in common.h.dbmalloc - and recompile for release. ******** Version 0.20 (25-Oct-94) released on aquarius.$.release ******** ******** SrcFiler version 026 made from version 0.20 (25-Oct-94) ******** common.h.resed: - version number updated to 0L21. Set DEBUG = 1 in common.h.debug, DBMALLOC = 1 in common.h.dbmalloc; recompile. !Menu.c.menuedit: Add #include "interactor.h". 10-Nov-94 common.h.newmsgs: Add description of RESED_KEYCUT_DETAILS message. !Window.c.keycuts: keycuts_pane_mouse_click(..): Code added for drag-select and improved for double-click; now sends KEYCUT_DETAILS message if user drags a keycut and drops it onto a window. !Menu.c.protocol: protocol_incoming_message(..): Calls received_resed_keycut_details(..) if a KEYCUT_DETAILS message arrives. received_resed_keycut_details(..): New function to process KEYCUT_DETAILS messages. !Menu.c.props, h.props: props_enter_keycut_details(..): New function to insert keyboard shortcut details into a menu entry dbox. !Misc.c.object: Various changes to the "licence type" handling functions for the ProgInfo dbox to allow a new licence type "public domain" = 0. !ResEd.!Run, !Menu.!Run, !Window.!Run, !Misc.!Run: Tidy up, and check modules required have been loaded. 11-Nov-94 !ResEd.Templates: DocProto: horizontal work area size increased; this allows the user to extend a document display beyond its "default" maximum width. common.c.wimp: ensure_null_terminator(..): New function. check_null_terminator(..): Now replaces validation string terminators where necessary, as well as icon text terminators. !Misc.!Palette: ProgInfo object now has no licence type initially. !Window.c.windowedit: windowedit_key_pressed(..): !Menu.c.menudedit: menuedit_key_pressed(..): shell.c.document: document_key_pressed(..): Only cancels foreground interaction if key was consumed. common.h.resed: - version number updated to 0.21. !Help files updated for ResEd and the three CSEs. !ResEd.!Run - module version numbers updated as necessary. Set DEBUG = 0 in common.h.debug and DBMALLOC = 0 in common.h.dbmalloc - and recompile for release. ******** Version 0.21 (11-Nov-94) released on aquarius.$.release ******** ******** SrcFiler version 027 made from version 0.21 (11-Nov-94) ******** common.h.resed: - version number updated to 0L22. Set DEBUG = 1 in common.h.debug, DBMALLOC = 1 in common.h.dbmalloc; recompile. !Misc.c.object: compare_bodies(..): copy_body(..): New functions. object_apply_dbox(..): Takes a copy of object data before applying the dbox, and then compares afterwards to see if any change has been made. object_dbox_mouse_click(..): object_dbox_key_pressed(..): Now only send object details back to shell if the object has been modified. !Window.c.gadget: compare_gadgets(..): New function. gadget_apply_dbox(..): Takes a copy of a gadget before applying the dbox, and then compares afterwards to see if any change has been made. 14-Nov-94 Only redraw gadget and mark as "modified" if a change has been made. !Window.c.gadget: gadget_nr_init(..): gadget_nr_slider(..): gadget_nr_numerical(..): gadget_nr_display(..): gadget_nr_writable(..): Changes to ensure that the "display" and "writable" radio buttons are only greyed-out when there is neither a numerical display nor a slider; and when there is just a slider, these buttons are available, but "before" and "after" etc. are not. 15-Nov-94 !Window.c.windowedit: windowedit_reopen_window(..): Only notes modification if the visarea or scrolloffset is actually changed. windowedit_raise_window(..): Notes modification if the window moves. !Window.c.winddrag: winddrag_interactor(..): winddrag_move_start(..): winddrag_resize_start(..): The original position of the window is recorded in the closure before starting the drag, and is compared with the final position at the end of the drag; only if they are different is the window marked as modified. !Window.c.colours: apply_dbox(..): Only redraws window and marks as modified if a colour has been changed. !Window.c.drag: finalise_drag(..): Takes no action if no movement has occurred. !Window.c.windowedit: windowedit_mouse_click(..): Now only accepts DRAG-SEL for move/copy. !Window.c.extent: apply_dbox(..): Only redraws window and marks as modified if extent has changed. !Window.c.gadget: gadget_rb_make_radio_group(..): Does nothing if the selected radio buttons already constitute a single group. gadget_link_writables(..): Does nothing if the selected writables are already correctly linked. !Window.c.keycuts: keycuts_apply_dbox(..): Only marks window as modified if the keyboard shortcuts have changed in any way. !Window.c.toolbars: apply_dbox(..): Only marks window as modified if toolbar information has changed. !Window.c.windowedit, h.windowedit: equalstrings(..): New function which returns TRUE iff its two arguments are either both NULL, or both non-NULL and the same string. !Window.c.move: move_selected_gadgets(..): Takes no action if no movement occurred. !Window.c.resize: resize_selected_gadgets(..): Takes no action if no movement has occurred. 16-Nov-94 !Window.c.drag: drag_interactor(..): !Window.c.move: move_interactor(..): !Window.c.resize: resize_interactor(..): Notes modification whenever auto-scrolling takes place. !Window.c.props: apply_main_dbox(..): apply_other_dbox(..): Changed to note modification only if changes have occurred. clonestring(..): main_props_copy(..): other_props_copy(..): compare_main_props(..): compare_other_props(..): New functions to assist above changes. !Window.c.props: props_main_dbox_mouse_click(..): props_other_dbox_mouse_click(..): !Menu.c.props: props_menu_dbox_mouse_click(..): props_entry_dbox_mouse_click(..): ADJ/click/OK now repositions caret properly. !Menu.c.drag: finalise_drag(..): Now notes modification only if the src/dst menu(s) have been altered. menu_entry_order_copy(..): compare_menu_entry_order(..): Auxiliary functions used by finalise_drag(..). 17-Nov-94 !Menu.c.props: apply_menu_dbox(..): apply_entry_dbox(..): Changed to note modification only if changes have occurred. clonestring(..): equalstrings(..): menu_props_copy(..): entry_props_copy(..): compare_menu_props(..): compare_entry_props(..): New functions to assist above changes. shell.c.document: document_key_pressed(..): ^X only calls document_delete_selection(..) if there is at least one icon selected. shell.c.objflags: update(..): Only notes modification if the flags are actually changed. shell.c.main: !Menu.c.main: !Window.c.main: !Misc.c.main: start_wimp(..): The Wimp_Initialise call now includes an explicit list of those messages which are processed. !Window.h.windowedit, c.windowedit, c.props, c.colours: Those properties that can be edited by property dialogue boxes are grouped together in a sub-record of the WindowObjRec: this makes it easier to save and compare to detect changes when applying a dbox, and enhances maintainability. !Window.c.windowedit, h.windowedit: New function clonestring(..) which replaces a non-null string pointer by a pointer to a copy of the string. !Window.c.gadget: clone_string(..): Deleted. gadget_load(..): gadget_copy(..): Now call clonestring(..) instead of clone_string(..). compare_gadget(..): Now uses equalstrings(..) instead of strcmp(..). !Window.c.props: MainPropsRec, OtherPropsRec definitions deleted. clonestring(..): Deleted. main_props_copy(..): other_props_copy(..): Replaced by props_copy(..). compare_main_props(..): compare_other_props(..): Replaced by compare_props(..). apply_main_dbox(..): apply_other_dbox(..): Calls to the above appropriately amended. !Menu.c.menuedit, h.menuedit: clonestring(..): equalstrings(..): New functions. !Menu.c.props: clonestring(..): equalstrings(..): Deleted. menu_props_copy(..): entry_props_copy(..): Use new version of clonestring(..). !Menu.h.menuedit: Fields in menu records and menu entry records which can be edited by the menu (entry) dbox are now grouped as subrecords. !Menu.c.menuedit, c.props, c.drag: Changed to reflect new structures. free_entry(..): Now frees clickshow and submenushow strings as well! !Menu.c.props: menu_props_copy(..): entry_props_copy(..): compare_menu_props(..): compare_entry_props(..): Improved code. !Misc.c.objedit, h.objedit: clonestring(..): equalstrings(..): New functions. !Misc.c.object: clone_string(..): Deleted. object_load(..): copy_body(..): Use clonestring(..) instead of clone_string(..). compare_bodies(..): Improved code. !Misc.c.object, common.h.swicall, common.h.wimp: #defines for ColourPicker SWIs moved from c.object to h.swicall. Structures and messages for ColourPicker moved from c.object to h.wimp. 18-Nov-94 !Resed.Messages, !Menu.Messages, !Window.Messages, !Misc.Messages: Checked for completeness and all error and explanatory messages revised. !ResEd.Messages: Help messages added for the shell. !ResEd.Templates, shell.c.copy, c.rename: Copy: COPY icon renamed OK. Rename: RENAME icon renamed OK. !Menu.Messages: Help messages added for menu editor - other than detailed items for property dboxes. !Window.Templates, c.grid, c.coords: Grid, Coords: CANCEL renamed CANCELT. !Window.c.help: help_text_for_gadget_dbox(..): help_text_for_other_dbox(..): !Misc.c.help: help_text_for_object_dbox(..): help_text_for_other_dbox(..): !Menu.c.help: help_text_for_dbox(..): Special treatment for ADJ_UP/ADJ_DOWN icons. !Window.Messages: Help messages added for window editor - other than detailed items for property dboxes. !Misc.Templates, c.object: FileType: CANCEL renamed CANCELT. !Window.!Run: Default slot-size increased to 256k. common.h.resed: - version number updated to 0.22. !Help files updated for ResEd and the three CSEs. !ResEd.!Run - module version numbers updated as necessary. Set DEBUG = 0 in common.h.debug and DBMALLOC = 0 in common.h.dbmalloc - and recompile for release. ******** Version 0.22 (18-Nov-94) released on aquarius.$.release ******** ******** SrcFiler version 028 made from version 0.22 (18-Nov-94) ******** common.h.resed: - version number updated to 0L23. Set DEBUG = 1 in common.h.debug, DBMALLOC = 1 in common.h.dbmalloc; recompile. !Window.Messages: Experiment with alternative tokens, and with shorthand. 21-Nov-94 common.c.saveas: saveas_interactor(..): shell.c.document: document_load_prototypes(..): document_open_window(..): drag_interactor(..): shell.c.main: mouse_click(..): open_window_request(..): close_window_request(..): redraw_window_request(..): !Menu.c.lassoo: select_bounded_entries(..): !Window.c.gadget: gadget_save(..): !Window.c.main: message(..): !Window.c.windowedit: windowedit_font_changed(..): !Misc.c.main: message(..): !Misc.c.objedit: windowedit_font_changed(..): Remove conditional code no longer required. !Window.c.gadget: gadget_load(..): Remove code to force bit 30 in labelled boxes - since they can only be created from a prototype with this bit set. common.c.saveas: saveas_interactor(..): Minor recoding to avoid compiler warning messages. shell.c.document: document_save_to_memory(..): document_load(..): 'FSER' -> 'F' << 24 | ... | 'R' - to avoid compiler warning. document_load_prototypes(..): document_claim_drag(..): Minor recoding to avoid compiler warnings. document_help_text(..): Remove declaration for 'text' - not used. !Menu.c.menuedit: menuedit_open_palette(..): 'FSER' -> 'F' << 24 | ... | 'R' - to avoid compiler warning. menuedit_help_text(..): Remove declaration for 'text' - not used. !Window.c.windowedit: windowedit_rename_window(..): Remove declaration for 'buf' - not used. windowedit_open_palette(..): 'FSER' -> 'F' << 24 | ... | 'R' - to avoid compiler warning. windowedit_help_text(..): Remove declaration for 'text' - not used. !Misc.c.protocol: received_resed_object_load(..): Comment out label 'versionerror' since it is not currently used. !Misc.c.objedit: objedit_rename_object(..): Remove declaration for 'buf' - not used. !Misc.c.object: object_fmfd_font_popup(..): Macro now occupies less lines to avoid compiler warning. shell.c.document: document_load_prototypes(..): !Window.c.windowedit: create_menu(..): !Misc.c.object: object_fisa_create_menu(..): Double-cast - (void *) (int) f - when calling menu_entry with a sub-menu callback function to avoid compiler warnings. common.h.wimp: Type of the 'submenu' field in a MenuWarning message record is now void (*) (void); this makes it possible to avoid compiler warning messages. !Window.c.gadgdefs: Double-cast for alignment function to avoid compiler warning. !Window.c.grid: snap_gadget(..): Uses a union variable to call a special alignment function without a compiler warning. !ResEd.Messages: !Menu.Messages: !Window.Messages: !Misc.Messages: Now use pre-defined "Help" tokens to save space. !Menu.c.props: props_menu_dbox_mouse_click(..): props_entry_dbox_mouse_click(..): Now deals correctly with ADJ clicks on adjuster arrows. !Menu.c.menuedit: menuedit_mouse_click(..): Drag-ADJUST no longer works on a menu entry. 22-Nov-94 shell.c.class, !ResEd.Messages: class_launch_CSE(..): Include test on returned taskid to check that CSE has, indeed, successfully started. New error message. !Misc.c.help: help_text_for_object_dbox(..): help_text_for_other_dbox(..): Now treat icon-names ending in "MAX" specially. help_expand(..): New function to allow one help message to reference others. help_message(..): Calls help_expand(..) when necessary. !Window.Templates: After field in Writable now allows &. !Misc.Messages: Updated to include full Help support for all dialogue boxes. 23-Nov-94 !Menu.c.help: help_text_for_dbox(..): Now treats icon-names ending in "MAX" specially. help_expand(..): New function to allow one help message to reference others. help_message(..): Calls help_expand(..) when necessary. !Misc.c.help, !Menu.c.help: check_for_icons(..): New auxiliary function to tidy up the code. !Menu.Messages: Updated to include full Help support. !Window.c.help: help_text_for_gadget_dbox(..): help_text_for_other_dbox(..): Now treat icon-names ending in "MAX" specially. help_expand(..): New function to allow one help message to reference others. check_for_icons(..): New auxiliary function to tidy up the code. help_message(..): Calls help_expand(..) when necessary. !Window.Messages: Updated to include full Help support. 24-Nov-94 !Window.Messages, !Menu.Messages, !Misc.Messages, !ResEd.Messages: Further minor improvements. !Menu.c.props: compare_menu_props(..): Removed some redundant (and confusing) code whose effect was to free the menu title when it should not do so. shell.c.genmsgs: genmsgs_import_file(..): No longer frees the file buffer before reading it! genmsgs_saveas_cb(..): Now allocates enough bytes for write_messages(..), instead of just one too few. !Window.c.keycuts: keycuts_dbox_mouse_click(..): Now puts caret in EVENT/OBJECT field when the associated option icon is switched on, and ensures caret is not left in a faded field when the function is complete. !ResEd.Messages, !Menu.Messages, !Window.Messages: Keyboard shortcuts changed: ^X -> ^K (Delete) ^K -> SHFT/K (Key shortcuts) 25-Nov-94 common.c.dbox(..): dbox_set_caret_to(..): Now recognises button type = 14 as potential writables as well as type = 15. shell.c.genmsgs: Extra field added to import closure so that the import interactor will either call import_messages or free the buffer - never both. !ResEd.Sprites, .Sprites22: New sprites for the ColourPicker pop-up icon. !Misc.Templates: ColourDbox - the Colour Picker pop-up iocn uses the new sprites. !Window.c.colours: colours_dbox_mouse_click(..): !Window.c.gadget: gadget_dbox_mouse_click(..): !Window.c.props: props_other_dbox_mouse_click(..): !Window.c.gadgdefs: !Misc.c.objdefs: !Misc.c.object: object_cd_colour_popup(..): object_cm_colour(..): object_fi_filetype_popup(..): object_fd_initial_popup(..): object_fm_ticked_popup(..): object_ib_position_popup(..): object_pi_licence_popup(..): object_sa_filetype_popup(..): Menu clicks on the associated field no longer pop-up the menu. common.h.resed: - version number updated to 0.23. !Help files updated for ResEd and the three CSEs. !ResEd.!Run - module version numbers updated as necessary. Set DEBUG = 0 in common.h.debug and DBMALLOC = 0 in common.h.dbmalloc - and recompile for release. ******** Version 0.23 (25-Nov-94) released on aquarius.$.release ******** ******** SrcFiler version 029 made from version 0.23 (25-Nov-94) ******** common.h.resed: - version number updated to 0L24. Set DEBUG = 1 in common.h.debug, DBMALLOC = 1 in common.h.dbmalloc; recompile. common.c.dbmalloc: Now calls display(..) to pop-up a message whenever some allocation problem is discovered! common.c.dbox: dbox_set_caret_to(..): dbox_place_caret(..): DEBUG check now allows type = 14 icons through! !Window.c.gadget: gadget_link_writables(..): Now frees space malloc'd for the sort! !Window.c.windowedit: windowedit_close_window(..): Now frees space occupied by any toolbar ids. !Menu.c.props: props_close_menu_dbox(..): props_close_entry_dbox(..): Now free the dialogue box after deleting it! shell.c.document: _document_close_window(..): Now frees the doc->mapping structure before freeing the document itself. 28-Nov-94 common.c.dbox, h.dbox: dbox_changeint(..): Removed - not used. !Window.h.main: Split BUTTON_MENU registry type into ICON_BUTTON_MENU and WINDOW_BUTTON_MENU to allow separate interactive help messages. !Window.c.props, h.props, c.gadget: props_load_prototypes(..): Registers button menu as ICON_BUTTON_MENU initially. props_button_choose(..): Has extra parameter to define which type of button menu is to be registered. The button menu is then de- and re-registered as required. props_other_dbox_mouse_click(..): gadget_dbox_mouse_click(..): Include extra parameter to call. !Window.c.windowedit: windowmenu_cb(..): Cause any weak selection to persist when "Select all" chosen. prepare_menu(..): Does not grey out "Select all" if the only selected item is a weak selection. post_windowmenu(..): Now sets weakselection field before calling prepare_menu(..). !Menu.c.menuedit: menumenu_cb(..): Cause any weak selection to persist when "Select all" chosen. post_menumenu(..): Now sets weakselection field before calling prepare_menu(..). shell.c.document: docmenu_cb(..): Cause any weak selection to persist when "Select all" chosen. post_docmenu(..): Now sets weakselection field before calling prepare_menu(..). !ResEd.MakeFile: Can now pass CFLAGS through to the individual components. common.h.resed: - version number updated to 0.24. !Help files updated for ResEd and the three CSEs. !ResEd.!Run - module version numbers updated as necessary. Set DEBUG = 0 in common.h.debug and DBMALLOC = 0 in common.h.dbmalloc - and recompile for release: amu CFLAGS=-ff amu install INSTDIR=$.aquarius.releases.ResEd.024 ******** Version 0.24 (28-Nov-94) released on aquarius.$.release ******** ******** SrcFiler version 030 made from version 0.24 (28-Nov-94) ******** common.h.resed: - version number updated to 0L25. Set DEBUG = 1 in common.h.debug, DBMALLOC = 1 in common.h.dbmalloc; recompile. 29-Nov-94 !ResEd.MakeFile: CFLAGS passed through with "install" rule, too. This change has also been checked in to the source tree, although no new version was made. 30-Nov-94 !Window.Templates: STRINGS field in stringset: length increased to 999 bytes. 01-Dec-94 !Window.h.windowedit: New field type FLD_LENGTH defined. This is to cope with "length" fields whose minimum values are not simply the length of some specified single string. !Window.c.gadget, h.gadget: gadget_load(..): Creates extension record entry for FLD_LENGTH fields, and initialises it correctly. gadget_init_dbox(..): Sets a FLD_LENGTH icon properly. gadget_apply_dbox(..): Updates the associated field for a FLD_LENGTH icon properly. gadget_ss_min_maxselectedstringlen(..): New function calculates minimum value for the maxselectedstringlen field of a string set gadget. !Window.c.gadgdefs: Defines the stringset field maxselectedstringlen as a FLD_LENGTH field. !Window.Messages: Revised help message for the Length field in the StringSet dbox. 07-Dec-94 common.h.resed: - version number updated to 0.25. !Help files updated for ResEd and the three CSEs. !ResEd.!Run - module version numbers updated as necessary. Set DEBUG = 0 in common.h.debug and DBMALLOC = 0 in common.h.dbmalloc - and recompile for release: amu CFLAGS=-ff amu install INSTDIR=$.aquarius.releases.ResEd.025 ******** Version 0.25 (07-Dec-94) released on aquarius.$.release ******** ******** SrcFiler version 032 made from version 0.25 (07-Dec-94) ******** common.h.resed: - version number updated to 0L26. Set DEBUG = 1 in common.h.debug, DBMALLOC = 1 in common.h.dbmalloc; recompile. 19-Dec-94 !Window.c.winddrag: winddrag_resize_start(..): Window is now raised to top of stack before starting resize. !Window.c.grid: grid_set_defaults(..): Default grid spacings are now read from the Messages file. !Window.Messages: Initial grid spacings set to 32. 20-Dec-94 !ResEd.Templates, !Window.Templates, !Misc.Templates, !Menu.Templates: Bottom left-hand corners of all icons are now guaranteed to be on 4-pixel boundaries. Horizontal alignment of all text checked in mode 39. Size of all gadgets checked to conform to style-guide criteria. ******** Templates updated in release 0.25. ******** !Window.c.grid: grid_set_defaults(..): Default "Show grid" and "Lock grid" options are now read from the Messages file. !Window.Messages: "Show grid" and "Lock grid" options initially off. 22-Dec-94 !Misc.Messages: "receiveed" replaced by "received". !Misc.!Run: Sets the "Filetype" menu filetype variables if not already set. common.h.resed: - version number updated to 0.26. !Help files updated for ResEd and the three CSEs. !ResEd.!Run - module version numbers updated as necessary. Set DEBUG = 0 in common.h.debug and DBMALLOC = 0 in common.h.dbmalloc - and recompile for release: amu CFLAGS=-ff amu install INSTDIR=$.aquarius.releases.ResEd.026 ******** Version 0.26 (22-Dec-94) released on aquarius.$.release ******** ******** SrcFiler version 033 made from version 0.26 (22-Dec-94) ******** common.h.resed: - version number updated to 0L27. Set DEBUG = 1 in common.h.debug, DBMALLOC = 1 in common.h.dbmalloc; recompile. 04-Jan-95 !Window.c.align: align_selection_to(..): Notes modification if any gadget is moved. align_gadget(..): Returns TRUE only if the gadget has to be moved. !Window.c.coords: execute_coords(..): Notes modification if any gadget has moved/changed in size. !Window.c.grid: grid_snap(..): Notes modification if any gadget has moved. !Misc.c.object: fontmenu_cb(..): object_fmfd_font_popup(..): Use message_lookup(.. "SysFont") in place of "System Font". !Misc.Messages: New token SysFont. !Misc.c.objdefs: New special functions object_fm/fd_allowsystem(..) are specified to be called when the user clicks on the "Allow system font" option button in a FontDbox or FontMenu properties dbox. !Misc.c.object, h.object: New functions object_fm/fd_allowsystem(..) now ensure that the corresponding ticked/initial font field is *not* set to the system font if the button is off. !Window.c.keycuts: keycuts_dbox_key_pressed(..): Now marks any keypress directed to the KEY icon as "consumed". 06-Jan-95 !Window.c.props: props_update_main_dbox(..): Fades all icons to do with event delivery before/after showing if the window is a toolbar. common.h.resed: - version number updated to 0.27. !Help files updated for ResEd and the three CSEs. !ResEd.!Run - module version numbers updated as necessary. Set DEBUG = 0 in common.h.debug and DBMALLOC = 0 in common.h.dbmalloc - and recompile for release: amu CFLAGS=-ff amu install INSTDIR=$.aquarius.releases.ResEd.027 ******** Version 0.27 (06-Jan-95) released on aquarius.$.release ******** ******** SrcFiler version 034 made from version 0.27 (06-Jan-95) ******** common.h.resed: - version number updated to 0L28. Set DEBUG = 1 in common.h.debug, DBMALLOC = 1 in common.h.dbmalloc; recompile. 11-Jan-95 !Misc.Templates: The size of the 'Message' label for the labelled boxes in the DCS and Quit templates has been increased to avoid truncation when used with the Homerton DeskTop font. common.h.resed: - version number updated to 0.28. !Help files updated for ResEd and the three CSEs. !ResEd.!Run - module version numbers updated as necessary. Set DEBUG = 0 in common.h.debug and DBMALLOC = 0 in common.h.dbmalloc - and recompile for release: amu CFLAGS=-ff amu install INSTDIR=$.aquarius.releases.ResEd.028 ******** Version 0.28 (11-Jan-95) released on aquarius.$.release ******** ******** SrcFiler version 035 made from version 0.28 (11-Jan-95) ******** common.h.resed: - version number updated to 0L29. Set DEBUG = 1 in common.h.debug, DBMALLOC = 1 in common.h.dbmalloc; recompile. 13-Jan-95 !Misc.Messages SysFont tag value changed to "SystemFont"; this is now recognised by the FontMenu and FontDbox modules. ******** Version 0.28 (11-Jan-95) updated on aquarius.$.release ******** !Misc.Messages checked in to the SrcFiler tree. ******** SrcFiler version 036 made. ******** ***************************************************************************** *********************** FREEZE AND RELEASE VERSION *********************** ***************************************************************************** 24-Jan-95 !Misc.c.protocol, !Window.c.protocol, !Menu.c.protocol: received_resed_object_load(..): If an error arises while the object is being loaded, flag bit 0 (as opposed to flag bit 1) is now set when sending the RESED_OBJECT_LOADED message back to the Shell. 30-Jan-95 !Misc.Templates: FontDbox: The "Use alternative window" and "Deliver event" sections have been swapped around so that this dialogue box is now consistent with the others. 02-Feb-95 !Misc.Templates: FontDbox: "Use alternative window" writable moved by 2 OS units so that its vertical position is a multiple of 4 OS units. 08-Feb-95 shell.c.protocol: cse_died(..): Now resets 'importing' flag as well as 'modified' and 'editing' flags for any objects which 'belonged' to the CSE that has just died. 15-Feb-95 !Window.Templates: Extent and Coords templates altered to allow larger window sizes: the previous limit was 5 chars (ie -9999 to 99999); the new limit is 7 chars (ie writable icon with length 8). 20-Feb-95 !Window.Templates: Title of string set properties dbox changed from "String Set" to "String set". ******** Sources copied to SrcFiler tree, but no new version made ******** 03-Mar-95 common.h.resed: - version number updated to 0.29. !Help files updated for ResEd and the three CSEs. !ResEd.!Run - module version numbers updated as necessary. Set DEBUG = 0 in common.h.debug and DBMALLOC = 0 in common.h.dbmalloc - and recompile for release: amu CFLAGS=-ff amu install INSTDIR=$.aquarius.releases.ResEd.029 ******** Version 0.29 (03-Mar-95) released on aquarius.$.release ******** ******** SrcFiler version 037 made from version 0.29 (03-Mar-95) ******** common.h.resed: - version number updated to 0L30. Set DEBUG = 1 in common.h.debug, DBMALLOC = 1 in common.h.dbmalloc; recompile. 10-Mar-95 common.h.resed: Version number changed to "0E30" to indicate special version. This version will be compiled with CFLAGS=-DNOBBLE, and special code will be included to scramble resource files and prevent saving other than to !ResTest. shell.c.document: document_save_to_memory(..): NOBBLE code added to xor every word of a resource file other than the first with the first. prepare_menu(..): File=>Save=> entry shaded if NOBBLEd. document_load_prototypes(..): key_save is not defined if NOBBLEd. drag_callback(..): A drop outside the current application is accepted only if it is to the !ResTest application icon on the icon bar, if NOBBLEd. SHIFT-drag's within the same window (to create copies of objects) are ignored if NOBBLEd. 13-Mar-95 shell.c.main: warn_exit(..): Never offers a save opportunity if NOBBLEd. shell.c.document: document_close_window(..): datasave_interactor(..) (twice): drag_callback(..): Code to call issue_close_warning(..) is not compiled for the NOBBLEd version, thus not giving the user an opportunity to save a modified document when he closes it. !ResEd.MakeFile: Replace amu CFLAGS=$(CFLAGS) by amu CFLAGS="$(CFLAGS)" to make sure that multiple cc arguments are passed down. 15-Mar-95 shell.c.document: drag_callback(..): NOBBLEd code modified to accept drops onto any CSE window as well; this is necessary to allow object name insertion by drag and drop. ******** Special "nobbled" version made: ******** DEBUG = 0, DBMALLOC = 0, amu CFLAGS="-ff -DNOBBLE" VERSION_NUMBER = "0E30" Saved in aquarius.releases.E30: amu install INSTDIR=$.aquarius.releases.ResEd.E30 Version number updated to 0L31, DEBUG = 1, DBMALLOC = 1, and system rebuilt. 31-Mar-95 !Window.c.move: move_selected_gadgets(..): The code now correctly determines the original position of the moved gadgets by subtracting the *unaligned* offset from the new bounding box. This cures a redraw bug. common.h.resed: - version number updated to 0.31. !Help files updated for ResEd and the three CSEs. !ResEd.!Run - module version numbers updated as necessary. Set DEBUG = 0 in common.h.debug and DBMALLOC = 0 in common.h.dbmalloc - and recompile for release: amu CFLAGS=-ff amu install INSTDIR=$.aquarius.releases.ResEd.031 ******** SrcFiler version 038 made from version 0.31 (31-Mar-95) ******** common.h.resed: - version number updated to 0L32. Set DEBUG = 1 in common.h.debug, DBMALLOC = 1 in common.h.dbmalloc; recompile. 18-Apr-95 shell.c.document: find_grid_width(..): The width of a document window is now never allowed to exceed the width of the screen. This fixes a "toggle-size" bug. 09-May-95 !Misc.Messages: CorruptWindow message: replace "object object" by "object". !Window.h.main: Removed definition of READY (no longer needed). Added definition of DEBUGREDRAW. !Window.c.windowedit: windowedit_redraw_window(..): Reports error during redraw only if DEBUGREDRAW is non-zero (used to depend only on DEBUG). shell.c.main: ramtransmit_message(..): Now replies with a RAM_FETCH message if there is more data to be transferred (previously it replied with a RAM_TARNSMIT message). Discovered while using the SaveAs module from the Toolbox which doesn't make its buffers quite big enough ... 15-May-95 !Window.c.windowedit: windowedit_redraw_window(..): Issues Service Call &44ec6 with R0 containing window handle just before redraw starts; this is intercepted by the window module so that PlotGadget can know where the window is if it needs to. *** Start of changes for Aquarius Update 1 *** 17-May-95 !Window.Templates: 'Unknown' template updated to include fields for more general editing. !Window.h.windowedit: New reference type REF_SPRITE added. !Window.c.gadget: create_body_description(..): Process SpriteAreaReferences properly. gadget_load(..), gadget_save(..), gadget_size(..), gadget_copy(..), gadget_free(..), compare_gadgets(..): Processes REF_SPRITE fields correctly. !Window.c.gadgdefs, !Window.h.gadget, !Window.c.gadget: Update "unknown gadget type definition" to call gadget_uk_init, gadget_uk_apply, gadget_uk_offset_up and gadget_uk_offset_down at appropriate moments. !Window.c.gadget: gadget_uk_init(..), gadget_uk_apply(..): Write/read "other flags" field as hexadecimal number. gadget_open_dbox(..): If this call creates a dbox for an unknown gadget, then it now also creates an empty extension record. gadget_close_dbox(..): This frees the extension record belonging to an unknown gadget. 18-May-95 gadget_copy(..): Does not copy the extension record of an unknown gadget. compare_gadgets(..): Does not compare extension records of unknown gadgets. gadget_uk_init(..), gadget_uk_apply(..), gadget_uk_offset_up(..), gadget_uk_offset_down(..), gadget_uk_offset(..), uk_field_is_string(..), load_uk_field(..), save_uk_field(..): Code to process "Other fields" section of the unknown gadgets dialogue added: values are temporarily stored in the extension record, and consolidated into the gadget body proper only when the dbox is applied. !Window.c.gadget, c.gadgdefs, h.windowedit, h.gadget: gadget_dbox_mouse_click(..), gadget_uk_offset(..): New action ACT_SPECIALX; this is like ACT_SPECIAL, but passes extra parameters for the icon and mouse state. This is now used by gadget_uk_offset(..), and the two subsidiary functions _offset_up and _offset_down are no longer required. !Window.Templates, c.gadgdefs: "Unknown" template has added option buttons to select a NULL value for a string or message reference. !Window.c.gadget: load_uk_field(..), save_uk_field(..): Now allows a NULL value to be specified for a string or a message value. gadget_open_dbox(..): Sets the dbox' title to include the type for an unknown gadget. 19-May-95 !Misc.c.objdefs, h.objdefs: Added prototype unknown object definition: unkobjectdef. !Misc.Templates: Added new template 'Unknown' for unknown object editing. !Misc.c.object, h.object: Dummy functions object_uk_init(..), object_uk_apply(..) and object_uk_offset(..) declared. !Misc.c.protocol: received_resed_object_load(..): Accepts unknown objects, calling object_create_def(..) to create an appropriate definition. Also treats unknown versions of known objects in the same way. !Misc.Messages: "BadVersion" message amended to reflect new processing. !Misc.c.object: object_create_def(..): New function creates an object definition for an unknown object by filling in a copy of unkobjectdef. !Misc.h.objedit: Add new ref-types REF_SPRITE and REF_OFFSET. !Misc.c.object: object_load(..), object_save(..), object_size(..), object_free(..), compare_bodies(..), copy_body(..): Modified to allow for new reference types. !Misc.c.object: object_free(..): Releases space occupied by the definition for unknown objects. object_init_dbox(..): Fills in title for unknown dialogue properly. !Misc.!Config: Add "Unknown" so that the shell will forward unknown objects. !Misc.!Icons, !Misc.!Icons22: Add obj_unknown icons. shell.c.class: class_lookup (..): Returns the value of a new static 'unkclassptr' if the class is not specifically registered. investigate_cse(..): If "Unknown" is encountered as a class number, the resulting ClassPtr is assigned to unkclassptr. !Misc.c.main: load_prototypes_and_create_menus(..): Loads template for unknown object class properties dialogue. !Misc.h.objedit: Add new field 'bodycopy' to ObjectRec's; this will contain the address of a copy of the object's body which is maintained while the object is being edited. !Misc.c.object: object_open_dbox(..): Creates and clears the bodycopy record. object_close_dbox(..): Frees space occupied by the bodycopy record, and by any strings inside it. 22-May-95 !Misc.c.object: object_uk_init(..), object_uk_apply(..), object_uk_offset(..), uk_field_type(..), save_uk_field(..), load_uk_field(..), object_uk_offset_change(..): Code derived from the corresponding routines in !Window. The main change is the addition of code to handle object offset values. !Misc.c.protocol: relocate(..), relocate_make_ref(..): Object offsets are represented "as-is" inside !Misc; they are not relocated in any way. !Misc.!Icons, !Icons22: obj_unknown includes a question mark. !Misc.Messages, !Window.Messages: Updated to add !Help messages for the new features. common.h.resed: - version number updated to 0.32. !Help files updated for ResEd and the three CSEs. !ResEd.!Run - module version numbers updated as necessary. Set DEBUG = 0 in common.h.debug and DBMALLOC = 0 in common.h.dbmalloc - and recompile for release: amu CFLAGS=-ff amu install INSTDIR=$.aquarius.releases.ResEd.032 ******** SrcFiler version 039 made from version 0.32 (22-May-95) ******** common.h.resed: - version number updated to 0L33. Set DEBUG = 1 in common.h.debug, DBMALLOC = 1 in common.h.dbmalloc; recompile. 24-May-95 !Window.c.gadget: gadget_open_dbox(..), gadget_uk_init(..), gadget_uk_apply(..): Adjusted to cope with gadgets with zero body size. object_open_dbox(..), object_uk_init(..), object_uk_apply(..): Adjusted to cope with objects with zero body size. !Misc.c.object: object_free(..), object_init_dbox(..), object_open_dbox(..), object_close_dbox(..): The test for whether a definition is a "dynamic" one or not is changed from 'def->version < 0' to 'def->templatename == unkobjectdef->templatename', since the version field needs to contain the unknown object's version number! !Misc.c.protocol: received_resed_object_load(..): Copies version from message into dynamically created definition for unknown objects (or unknown versions of known objects). 25-May-95 !Window.c.gadgdefs: Minimum size for unknown gadgets set to 16,16. !Misc.c.objedit: objedit_load(..): Now preserves value of "Offset" field when an unknown object is reloaded as a result of message import. !Misc.c.object: object_dbox_update_window_name(..): Now deals correctly with unknown object properties dboxes. shell.c.genmsgs: import_messages(..): Now correctly deals with the case of a resource which includes only NULL messages. !Window.h.main, c.main: !Misc.h.main, c.main: New global 'wimpversion' defined and initialised in main(..). !Window.c.keycuts: keycuts_load_prototypes(..): Uses the global 'wimpversion'. !Window.c.gadget: gadget_uk_init(..), load_uk_field(..): !Misc.c.object: object_uk_init(..), load_uk_field(..): Only shade labels if wimpversion >= 350. shell.c.genmsgs: importwarn_interactor(..): Now handles "RETURN" in the same way as clicking on "Import" action button. common.h.resed: - version number updated to 0.33. !Help files updated for ResEd and the three CSEs. !ResEd.!Run - module version numbers updated as necessary. Set DEBUG = 0 in common.h.debug and DBMALLOC = 0 in common.h.dbmalloc - and recompile for release: amu CFLAGS=-ff amu install INSTDIR=$.aquarius.releases.ResEd.033 ******** SrcFiler version 040 made from version 0.33 (25-May-95) ******** common.h.resed: - version number updated to 0L34. Set DEBUG = 1 in common.h.debug, DBMALLOC = 1 in common.h.dbmalloc; recompile. 20-Jun-95 !Window.h.main: New compile-time flag KEYNUDGE which determines whether code to allow "nudging" of the current selection of gadgets is compiled or not. !Window.c.windowedit: windowedit_key_pressed(..): Calls windowedit_nudge_selection(..) if there is a current selection, and the user has pressed a cursor key. windowedit_nudge_selection(..): This new function will move or resize each gadget in the current selection. This version given to Dean Murphy to trial; version number updated to 0L35. 10-Jul-95 !Window.c.resize: resize_plot_boxes(..): When the internal resize ear of a numberrange gadget is being dragged, and the boundary is hit, then the mouse pointer is constrained by a call of OS_Word 21, 1: previously, this allowed the mouse to move off screen vertically; now it is constrained to remain within the window. resize_interactor(..): At the end of a resize drag of any kind, the mouse pointer is constrained explicitly by a call of OS_Word 21, 1: previously, this allowed the mouse pointer to move off-screen in all directions; now it is constrained to remain on the screen (thus fixing a reported fault). 05-Oct-95 common.c.dragdrop: dragdrop_scroll(..): Returns FALSE (no scroll) if ALT key is down at the time of the call. common.h.resed: - version number updated to 0.35. !Help files updated for ResEd and the three CSEs. !ResEd.!Run - module version numbers updated as necessary. Set DEBUG = 0 in common.h.debug and DBMALLOC = 0 in common.h.dbmalloc - and recompile for release: amu CFLAGS=-ff amu install INSTDIR=$.aquarius.releases.ResEd.035 ******** SrcFiler version 041 made from version 0.35 (05-Oct-95) ******** common.h.resed: - version number updated to 0L36. Set DEBUG = 1 in common.h.debug, DBMALLOC = 1 in common.h.dbmalloc; recompile. 22 Jun 2009 - R Griffin Fixed a bunch of compiler warnings due to 'old style' function definitions. Added support for TreeView and Tabs gadgets. Queries about these gadgets should be addressed to rik.griffin@denbridgemarine.com. Fixed data abort on adjust drag in document window. Merged in files required for support of "Date" object.