GB2387754A - Representing information as 3D image - Google Patents

Representing information as 3D image Download PDF

Info

Publication number
GB2387754A
GB2387754A GB0208727A GB0208727A GB2387754A GB 2387754 A GB2387754 A GB 2387754A GB 0208727 A GB0208727 A GB 0208727A GB 0208727 A GB0208727 A GB 0208727A GB 2387754 A GB2387754 A GB 2387754A
Authority
GB
United Kingdom
Prior art keywords
space
virtual
image
folder
file
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
GB0208727A
Other versions
GB0208727D0 (en
GB2387754B (en
Inventor
John Morrison
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Individual
Original Assignee
Individual
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Individual filed Critical Individual
Priority to GB0208727A priority Critical patent/GB2387754B/en
Publication of GB0208727D0 publication Critical patent/GB0208727D0/en
Publication of GB2387754A publication Critical patent/GB2387754A/en
Application granted granted Critical
Publication of GB2387754B publication Critical patent/GB2387754B/en
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T19/00Manipulating 3D models or images for computer graphics
    • G06T19/20Editing of 3D images, e.g. changing shapes or colours, aligning objects or positioning parts
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2219/00Indexing scheme for manipulating 3D models or images for computer graphics
    • G06T2219/20Indexing scheme for editing of 3D models
    • G06T2219/2016Rotation, translation, scaling

Landscapes

  • Engineering & Computer Science (AREA)
  • Architecture (AREA)
  • Computer Graphics (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • User Interface Of Digital Computer (AREA)

Abstract

Digitally stored information is displayed by creating a virtual 3D space which is rotatable in response to user interaction. Items of information are represented as labelled nodes within the 3D space which appear attached to their respective nodes. The user receives the impression of a set of 2D images suspended within the 3D space, so that the 2D images always face the user whatever the orientation of the 3D space. Information arranged as a hierarchical tree of files and folders can be displayed using a root 3D space to display images of the files and folders listed in the root of the tree, with further folders and associated files displayed using a further 3D space. Links between the files can be shown as associative lines (see fig. 10).

Description

1 2387754
ELECTRONIC FILID DISPLAY
The present invention relates to the electronic display of digitally stored files, and in 5 particular to the simultaneous display of a plurality of discrete items of digitally stored information. The invention further relates to the display of hierarchical folders (or directories) and files on a computer display.
It is common for individuals and organizations to store information on digital storage 0 media. So that the information can be accessed by a user, it must be displayed electronically in a human readable manner. Stored information is commonly displayed by apparatus that includes means of differentiating between individual items of information, allowing the selection of any single item. The content of a selected item can then be displayed by the apparatus. Such apparatus ranges from personal computer 15 systems to advertising or presentation apparatus purpose built to display one or more digitally stored visual images.
It is common, particularly with personal computer systems, to store digital information as a list of items, known as files, each differentiable from the others by a unique name.
20 The apparatus can display the list of names on request, Mom which a particular file may be selected by reference to its name.
Where the number of files is large, a single list becomes impractical for visual interaction by the user. order to get round this problem, files are arranged into folders 5 or directories, each folder containing a list of files. Each folder may also contain other folders, so that a hierarchical tree structure can be created. Personal computer systems have almost universally adopted this hierarchical tree system as the primary system by which users may store and retrieve data.
30 Generally speaking, a first folder which contains a second folder among its list of files and folders is said to be the 'parent' of the second folder, and the second folder is said to be the 'child' or 'sub- folder' of the first folder. A first folder which contains a second
M&C P51841GB
folder within the part of the file system it represents is said to be an 'ancestor' of the second folder, and the second folder is said to be a 'descendant' of the first folder. At the highest level there will be a single folder which ultimately contains all the files and folders of the hierarchical tree, and this is known as the 'root folder'.
Although the technical field of the invention is not limited to personal computer
systems, for the sake of brevity the terminology of personal computer systems as commonly used and described above will be used throughout this document.
lo Where a hierarchical tree system is used it is common for apparatus to display on request a list of the files and folders within any one folder, the root folder being displayed in the first instance and display of other folders being requested by selection from a display representing the folders containing them, thus providing a means of navigating the hierarchical tree assisted by its hierarchical categories to gain access to Is any file or folder within it.
A limitation of such apparatus is that the files and folders within any single displayed list are only distinguishable from each other by the name they have been given, that is there is no indication of what each contains. In general such apparatus may indicate the go contents of a file or folder once it has been selected, but recognition of content can play no part in making that selection. This limitation can lead to a number of problems.
A user may have difficulty giving unique and memorable names to all the files that he wishes to store, or cannot associate anything meaningful with files named by somebody 25 else. Files may contain images or documents whose quality is difficult to express with a filename; under these circumstances the user has to resort to opening or selecting files one by one to find out what is inside them.
The same problem of recognition of filenames applies to folders, since a folder may 30 contain further files and sub-folders whose existence is not indicated in any way until that folder has been opened or selected. This leads many users to avoid the use of hierarchical arrangements of sub-folders because once a file is stored in a sub-folder
M&C P51841GB
there is no further visual reminder of its existence until that subfolder is selected or opened, and the user may forget that it exists.
A further limitation of such apparatus is that the display of a list provides no visual context in which to represent associative relational or referential links between files.
5 Typical examples of such links are hypertext links between hypertext mark-up language (HTML) files, which are now commonly found within hierarchically organised information. While much useful functionality has been developed and has seen widespread use lo within the above limitations, the limitations are now being more intensely felt with a number of developments in the use of computer systems. Ever greater numbers of files are now stored in hierarchies of ever greater complexity. Access is required to information structures created by others and delivered by removable storage media or across the Internet. Much use is made of visual imagery within files. The widespread 5 adoption for internet use of HTML and other hyperlinked files has led to an enormous explosion in their use.
There is therefore a need for a system for displaying the contents of a large number of files within a single display area so that the contents of each file can be identified. This 20 can be done if the contents of each file is represented as an image, each image being large enough to view, as long as all the images representing files are visible or can be made to be visible.
Many operating systems use arrangements of 'windows' to display images and file 25 contents. Such systems generally use one or both of two systems for displaying multiple images on a single display area. These are 'tiling', in which images are placed side by side without overlapping, and 'overlapping' in which images are displayed overlapping each other, the sequence of overlapping being recorded and the display being maintained in accordance with that sequence, any image being brought to the top of the 30 sequence by the action of a pointing device (such as a mouse cursor) over any portion of that image that is displayed.
M&C P51841GB
Tiling has the limitation that to fit a large number of images into the display area, the size of each image will have to be very small. Conversely, large images would permit very few to be held within the display area, this limitation being further aggravated by the fact that it is not possible to resize individual images without violating the tiled 5 arrangement of the display area.
When overlapping is used, the small portions of partially obscured images which are visible often do not show enough information for visible recognition. In addition, once an image has been completely overlapped by other images it is unlikely to be seen again lo and it is difficult to avoid this with more than four or five windows. Furthermore, the user has to spend time positioning and sizing windows to achieve a usable arrangement.
The dynamic response at any one time is limited to the manner of displaying a single window. For these reasons existing overlapping mechanisms lose their ease of use if the number of images is too large, and are therefore unsuitable as a method to display a 5 many images. As set against this, overlapping windows do demonstrate by their widespread use how successfully a dynamic response to user interaction can effectively compensate for the obscuring of images caused by overlapping.
Some windows operating systems also use scrolling thumbnail views that allow the no contents of files (but not folders) to be seen before they are selected, once they have been scrolled into view.
There are occasions, for example when designing an Internet website, when it is useful to be able to identify links (for example hyperlinks) between documents. It would be 25 useful to be able to display a large number of documents and all the links between them at the same time. However, this is not possible using many existing file management systems without visual confusion resulting.
The representation of files as nodes and links between them as lines is well established.
30 Nodes in 21:) space only give a limited environment for expressing links between them before visual confusion results, but positioning nodes in a virtual 3D Space largely overcomes this problem. Systems of positioning nodes on a hyperbolic surface, as
M&C P51841GB
described for example in EP0702330, give very good results for navigating links away from a specific focus. However none of these represent links within a display that also represents the hierarchy in which the information is organised.
5 This problem is exacerbated if files having links between them are located in different folders. There is therefore a need for displaying a hierarchy of items in such a way that links between items that do not reside in the same folder can be seen or followed.
It may be possible to develop the Cone Tree system as developed by the Xerox PARC lo institute at Palo Alto USA. and described in US5295243 to express links between items residing in different parts of the hierarchy. The Cone Tree has some capacity to simultaneously represent items in different parts of the hierarchy between which lines can be drawn.
5 In accordance with a first aspect of the present invention there is provided a method of displaying digitally stored information, comprising creating a virtual 3D space which is rotatable in response to user interaction, representing items of the stored information as labelled nodes within the virtual 3D space, and displaying the virtual 3D space to the user. The virtual 3D space is preferably a Euclidean space.
Each item of information is preferably represented as an image associated with a corresponding node, and which moves with it as the virtual 3D space is rotated.
This allows as many items as the user can reasonably compare to be presented on a 25 single display in an automatically ordered and coherent manner. An image of each item can be displayed at an acceptable size for the user to discern useful aspects of its contents. Images can be large enough to see the detail within them and as result there is a degree 30 of overlapping of images. In order that the image nearest to the user in the virtual 3D space is not obscured by any of the other images, a first image preferably obscures parts of other images with which it overlaps when the node of the first image is closer to the
M8cC P5 1841 GB user than the nodes of the other images in the virtual 3D space. In other words, each image is preferably displayed so that it always appears as a 2D image facing the user, so that the user receives the impression of a plurality of 2D images suspended in 3D space.
The obscuring of information caused by overlapping of images, even if quite 5 considerable, is offset by the intuitive way in which the manner in which they overlap each other can be controlled by rotating the virtual space.
Thus a dynamic response to user interaction is provided which allows the user powerful, intuitive and rapid control over the manner in which images obscure each other whilst lo enhancing the user's grasp of the ordered and coherent manner in which they are displayed. The method described above is effective both for the simultaneous display of a small number of images, each image being displayed large enough to view fully, and for the simultaneous display of a large number of images, each image being displayed just large enough to discern its contents, allowing the user to locate a chosen item to be displayed fully by some other means.
The virtual space is preferably rotatable about a single axis, which may be tillable 20 towards or away from the user in response to instructions from the user. This provides a particularly straightforward and intuitive method for the user to interact with the virtual space to bring required images to the front. It will be understood that other methods for rotating the virtual space may be possible, as long as a simple interface for the user is provided. Rotation of the virtual space is preferably controllable by the user activating a pointing device, such as a mouse cursor, over an unoccupied part of the virtual space and moving the pointing device. The user can preferably interact with any image using a pointing device to cause that image to be temporarily displayed in a separate window, allow it to so be resized, or request appropriate installed application software to display an interface to its associated item of information either within the display area provided for the image or in a separate Window provided by the host operating system.
M&C P5 1841 GO
The items of digitally stored information may include files arranged in folders, and the method preferably further comprises creating a further virtual 3D space representing the contents of a folder and displaying the further virtual 3D space to the user as an image 5 attached to the node corresponding to that folder. The further virtual 3D space should be scaled to fit the area available to it as an image in the virtual 3D space, and it is therefore possible to display hierarchically organised files and folders as a visual hierarchy of nested virtual 3D spaces - i.e. the display comprises a virtual 3D space with farther virtual 3D spaces embedded within it, some of which may display yet further lo virtual 3D spaces embedded within them.
The user can preferably interact with each further virtual 3D space in the same way as with the first virtual 3D space. In other words, he can rotate each further virtual 3D space independently of the first virtual 3D space, and interact with the images contained 5 within it so as to select them for display in a separate window, cause them to be resided, execute application software, etc. Thus the content of folders as well as their titles can be discerned by the user, which applied recursively results in an unprecedented impression of the entire hierarchical tree 20 system which simultaneously provides a view to several levels of nest depth down every branch of the tree.
This is helpful for gaining an overall impression of the information within a hierarchical tree system, and for providing a visual indication of information density within branches 25 of the tree. Visual cues can be provided for access to members of that hierarchical tree, glimpsing sought after files or folders, which are embedded in unexpected parts of the hierarchical tree, and glimpsing empty folders and files that contain useless or repeated information. 30 Furthermore a new visual environment is then provided for representing hierarchical tree systems into which other meaningful visual symbols can be introduced, an example being the representation of associative relational or referential links between items of
M&C P51841GB
information throughout the hierarchical tree. The spatial arrangement of nodes representing items of information within a 3D Information Space allows lines to be drawn between them to represent links. Links between items of information (e.g. hyperlinks between HTML files) may therefore be displayed as lines linking the nodes 5 associated with those items of information.
However, two linked files will not always reside in the same folder and will therefore not be displayed as images in the same virtual 3D space. It will therefore not always be possible to display direct lines between images representing two files.
A visual indication of all links between files, including links between files which are not displayed as images within in the same virtual 3D space may be produced by application of the following to the display of each virtual 3D space: a line may be displayed between an image corresponding to a first file and an image corresponding to a second 5 file if the first and second files are linked; a line may be displayed between an image representing a file and an image representing a folder if the file is linked to one or more files embedded within the hierarchy represented by the folder; a line may be displayed between an image representing a first folder and an image representing a second folder if one or more files embedded within the hierarchy of the first folder are linked to one or 20 more files embedded within the hierarchy of the second folder; an external link indicator may be displayed attached to an image representing a first file if the first file is linked to one or more files located in parts of the hierarchy not contained within the parent folder of the first file; and an external link indicator may be displayed attached to an image representing a folder if a file located within the hierarchy of that folder is linked to one 25 or more files located in parts of the hierarchy not contained within the parent folder of that folder.
Thus a coherent expression of all links that exist within a simple list or a Hierarchical tree can be displayed, being of utility in gaining an overview of the structure of linkage 30 within the hierarchical tree.
M&C P5 1841 GB
Preferably, all external link indicators or lines representing links from a file or folder are highlighted if the image corresponding to that file or folder is selected by the user.
Lines between nodes which are part of the link may be highlighted by colour or line style. Any external link indicators that are part of the link may be replaced by a 5 highlighted line drawn to a point at the edge of the virtual 3D space closest to the node that represents the embedded virtual space containing it within its parent virtual space.
This further provision allows the complete path throughout the hierarchy of all links from a chosen item to be visually traced, illustrating the distribution through the lo hierarchical tree of files to which the chosen file is linked, and providing a further utility of visually cued access. The pattern of associative relational or referential linkage throughout the hierarchical tree is visible, limited by images of three dimensional virtual spaces becoming to small for their contents to be discerned at large nest depths.
IS In accordance with a second aspect of the present invention there is provided a method of displaying digital information stored in the form of hierarchically arranged folders and files, comprising: creating a first virtual 3D space for a root folder, each file and folder located within the root folder being associated with a unique point in the virtual 3D space; 20 displaying the first virtual 3D space to the user, each file or folder being represented by an image located at the associated unique point in the virtual 3D space; wherein the image representing a folder within the first virtual 3D space is a display of a further virtual 3D space representing the contents of that folder.
25 The first virtual 3D space and the further virtual 3D spaces should be rotatable in response to instructions from the user.
The present invention also provides a computer storage medium having stored thereon a program arranged to perform any of the methods described above.
In accordance with a third aspect of the present invention there is provided apparatus for displaying a plurality of discrete items of information, comprising:
M&C P51841GB
- a digital display device controllable by a control unit; wherein the control unit is arranged to cause images representing the items of information to be displayed on the display device so as to cause an impression to the user of a plurality of 2D images suspended within a virtual 3D space; 5 and wherein the control unit is further arranged to manipulate the display of the images so that the virtual 3D space appears to rotate in response to instructions from the user. Each image preferably occupies a unique position in the virtual 3D space.
Each image is preferably drawn on the display device adjacent to a position which lo represents a 2D projection of its position within the virtual 3D space such that, when a first image is closer to the user in the virtual 3D space than a second image, the first image obscures any part of the second image occupying the same region of the display device. The appearance of rotation of the 3D space to the user may be caused by incremental variations of the angle from which the 2D projection is taken, each 5 incremental variation being followed by re-drawing the images.
In order to speed the display process up, a memory image may be held in random access memory of each image to be displayed within a virtual 3D space, each memory image being in a form which can be quickly transferred to the display device or to another 20 memory location; and each memory image may be formed when the images are first displayed, and during subsequent re-display each memory image is directly transferred to the display of the virtual 3D space.
When an image within a virtual 3D space is required to change its appearance, the 25 memory image corresponding to that image is preferably deleted or marked invalid and the display re-drawn. During the re-draw of the display the deleted or invalid memory image may be re-formed to contain the new image and validated.
An image within the virtual 3D space may itself comprise a further virtual 3D space, 30 enabling the display of a hierarchical structure. If the memory image of an image displayed within the further virtual 3D space is deleted or marked invalid then the image in memory of the image within the virtual 3D space is preferably also deleted or marked
M&C P51841GB
Hi. invalid. The items of information preferably include files and folders, a folder being represented as a discrete virtual 3D space. Wherever there exists a link between first and second 5 files which do not share the same parent folder, an iteration which operates on two files or folders is implemented, operating initially on the first and second file, and during each iteration: if one file or folder is more deeply embedded in the hierarchy than the other then an indication of external links held against the more deeply embedded file or folder is 0 set and the next iteration is carried out replacing the more deeply embedded file or folder with its parent; if both files or folders are embedded in the hierarchy equally deeply, but do not share the same parent folder, then an indication of external links held against both files or folders is set and the next iteration is carried out replacing both files or folders with 15 their parents; and if both files or folders share the same parent folder then an implied link is generated between them by adding a reference to the file or folder deriving from the second file to the list of implied links held by the file or folder deriving from the first file and the iteration terminates.
The control of incremental variations of the angle from which the 2D projection may be provided by commands from a computer input device, and produce a dynamic impression of rotation of said three dimensional virtual space which gives the user real time visual feedback whilst using said computer input to device to control the rotation, 25 and provides an intuitive means of altering the manner in which members of said plurality of images obscure each other.
A command from the computer input device may cause any particular image to be temporarily displayed to obscure all else thereby presenting itself fully to the user. On 30 further rotation of the virtual 3D space this effect may be cancelled so that the images obscure each other in the usual way (with the image closest to the viewer obscuring any others). This utility is provided for the convenience of gaining a complete view of any
M&C P5 1841 GB
particular image without the need to find an orientation of the three dimensional virtual space which would allow a complete view of said particular image.
Images displayed using the method of the invention may be sufficiently large to enable s detail that is visible within each image to be clearly seen, even though this may increase the degree to which some images are obscured by others, the disadvantages of this obscuring of images being offset by the provisions for the user to control the rotational orientation of the virtual space and hence the manner in which the images obscure each other. Each image may be accompanied by display of its title, displayed at a size which depends only on the depth of embedding of the virtual space in which it is displayed, the size of the text being reduced by no more than a discernible amount with each increase in embedded depth, so as to allow several reductions in size before the text becomes IS unreadable.
The computer input device may be a mouse or other pointing device, and the effect of rotation may be controlled by dragging the mouse or pointing device over an unoccupied portion of said three dimensional virtual space with a button depressed such that a 20 horizontal drag will produce said rotation about a vertical axis and a vertical drag will tilt the vertical axis towards or away from the user The user may use the mouse or pointing device to choose a particular image within said plurality of images and alter the size of said particular image.
2s A command from the computer input device applied to an particular image, which may be an activation of the pointing device while positioned over that image, may cause actions specific to the image or the information that the image represents; for example it may request appropriate installed application software to display JO an interface to its associated item of information, the interface being presented either within the display area provided, or in a separate Window provided by the host operating system.
M&C P51841GB
Where an image within a first virtual space is a further embedded virtual space, any mouse interaction with that image will preferably be interpreted as mouse interaction with the embedded virtual space that it represents, the display of that image being able 5 to dynamically respond to those interactions, thus allowing the rotational orientation of embedded virtual spaces to be individually controlled by the user, and thus providing said embedded virtual spaces with an independent dynamic response that will provide a utility of visually cued access to items of information within them.
0 Where an image within a first virtual space is a further embedded virtual space, the action of causing a image within the embedded virtual space to be temporarily displayed in front of all others within the same embedded virtual space may also cause the image representing the embedded virtual space within the first virtual space to be displayed in front of all others within the first virtual space, this being required to maintain visual 15 harmony within the display as whole.
Where an image within a first virtual space is a further embedded virtual space, a computer input device interaction may be provided that will cause the embedded virtual space to be displayed either as the root folder of the display, or in a separate Window 20 provided by the Operating System, thus providing a larger view of that embedded virtual space and allowing deeper exploration of the hierarchy.
Where any number of the items of information are linked to any number of other items of information, any one of the images may be selected by the user and, when selected, 25 all line segments which represent a part of any link from its associated item of information may be highlighted by colour or line style, allowing the complete path throughout the hierarchy of all links from a chosen item of information to be visually traced. 30 Thus the invention generally provides a mechanism for visually overviewing, performing visually cued navigation and gaining visual access to chosen parts of systems of flat or hierarchically organised information. A4&C PS184lGB Some preferred embodiments of the invention will now be
described by way of example only and with reference to the accompanying drawings, in which: 5 Figure 1 is a schematic block diagram showing the components of a system for displaying files and folders assembled ready for operation; Figure 2 illustrates an example of a computer screen displaying files and folders using an application operating in accordance with the present invention; Figure 3 illustrates an example of the display area of the application of Figure 2 following interaction and manipulation by the user; Figures 4 to 9 show how links between files not residing in the same folder are visually expressed; Figure 10 illustrates an example of the Display area of the application which causes operation of an embodiment of the invention after some investigative interaction and manipulation by the user; Figure 11 illustrates an example of the Display area of the application which causes operation of the embodiment of Figure 10 after some investigative interaction and manipulation by the user and after the user has selected one Item for the purpose of highlighting its links; Figure 12 is a block diagram generally illustrating data and methods used to enable the operation of a system according the invention; Figure 13 is a block diagram representing a configuration which does not include 30 visualization of links between files;
M&C P51841GB
Figure 14 is a block diagram representing a configuration which does not include visualization of links between files or the hierarchical representation of folders; Figure 15 is a block diagram representing a configuration similar to that of Figure 14 5 which operates without use of a file content image repository; Figure 16 is a block diagram representing a configuration which includes hierarchical representation of folders and the visualisation of links between illes but which only produces a static display; Figure 17 is a schematic block diagram showing an overview of an application in accordance with the invention; Figure 18 is a schematic block diagram showing an overview of the Core engine of the Is application of Figure 17; Figure 19 is a schematic block diagram showing an overview ofthe differences between the application of Figure 2 and the application of Figure 10; JO Figure 20 illustrates, using example user data, the drawing operations involved in rendering a display for the first time.
Figure 21 illustrates, using the same example user data as Figure 20, the drawing operations involved in subsequent rendering of the display while the display does not 2s change its appearance; Figure 22 illustrates, using the same example user data as Figure 20, the drawing operations involved in rendering the display after rotation of folder; 30 Figure 23 illustrates, using the same example user data as Figure 20, the drawing operations involved in rendering the display after residing file;
M&C P51841GB
Figure 24 is a schematic block diagram showing the structure of the Data model of the application of Figure 17 and how the parts of it contain and reference each other; Figure 25 illustrates a populated data model using example user data, Figure 26 is a schematic block diagram showing the structure of Visual memory support and how the parts of it contain each other; Figure 27 is a flow chart showing steps in the operation of the HandleEvent process; Figure 28 is a flow chart showing steps in the operation of the ItemArrayHandleMouse process; Figure 29 is a flow chart showing steps in the operation of the ItemGetMouse process; Figure 30 is a schematic block diagram showing extensions to data structures required for the application of Figure 10; and Figure 31 illustrates using example user data, the requirements of operation of the 20 DoFarLinks and HighlightFarLinks process.
The following description explains how users of personal computer systems running the
Windows 98 operating system can view any selection of folders and HTML, Jpeg, or Gif files residing on the persistent data storage unit and accessible through the Windows 25 98 operating system. It will be understood that although the description applies to one
particular operating system, suitable modifications will allow any operating system to be used. A system for displaying files is shown in Figure 1 and comprises a personal computer 30 system comprising an Arithmetic and Logic unit 100, Read only memory 101, Random access memory 102, and Input/Output control hardware 103 all connected to an address and data bus 104, the Input/Output control hardware being further connected to a
M&C P51841GB
Display unit 105, a pointing device 106, a keyboard 107, and a system of persistent data storage 108, this computer system hardware being configured or selected for compatibility with the Windows 98 operating system.
5 The Windows 98 operating system software 109 includes the Windows graphical user interface 110, the Windows Explorer application 111 and the Microsoft(D Web Browser control 112 installed on the persistent data storage unit so that, in accordance with common practice, the Windows 98(E operating system is automatically executed when the machine is switched on; A collection of HTML, Jpeg, or Gif files 113, which may be of interest to the user and which may therefore require display, reside on the persistent data storage unit and are accessible through the Windows 98(D operating system.
is A pre prepared executable application file 404 resides on the persistent data storage unit accessible through the Windows 98 operating system, the executable application file being written so that when executed it creates a window which is sensitive to the pointing device and which forms the display area in which the invention operates.
20 The user initiates operation of the file display system by carrying out the following steps: 1. switch on the personal computer system and wait for the Windows 98(D operating system to complete its loading sequence; 2. execute the pre prepared executable application file, which will appear initially as a blank window; 3. execute Windows Explorers and use it to select any list of files and folders from 30 within any one folder;
M&C P5 1841 GO
4. using the pointing device, drag the chosen selection of folders and files from the Windows Explorer(D and drop them into the Display area of the pre prepared executable application window.
5 Figure 2 illustrates the computer screen shortly after completion of the steps described above, in which the Display window shows the folders and files which have been selected and dragged from the Windows Explorers. At the stage shown in figure 2 the Display window is ready for user interaction even though only two files within the Display window are showing an image of content. The remaining files will fill out with lo images at the rate of one or two per second over the following minute or so.
The display window of Figure 2 shows a set of files and folders displayed in two windows, a system explorer window 111 and application window 120. In the system explorer window 111 the files and folders are displayed as a list. In the application 5 window 120 they are represented as 2D images suspended in a virtual 3D space. The folders and files appear to the user to be arranged so that they each have a reference point (e.g. the top left corner) in a planar circle within the virtual 3D space. In other words the images are arranged as if on a carousel, with all the images facing the user.
The images representing files are arranged in a virtual circle in the top half of the 20 display window, and the images representing folders are arranged in a virtual circle in the bottom half of the display window.
Each image represents the contents of the file or folder. For example, "Index.htm" is an HTML file including a picture, and the first page of this file is shown as the 2D image.
25 The folder "Classic" contains further files and folders, and so the image representing this folder is itself a virtual 3D space, scaled to the size of the image. Any processes carried out on the virtual 3D space of the display window 121 (described below) can also be carried out on the virtual 3D space of each folder.
30 Once initialized, the Display window 121 responds to the pointing device as follows:
M&C P51841GB
dragging the pointing device in a horizontal (left, right) movement over an unoccupied part of any three dimensional virtual space with the left button depressed will cause that three dimensional virtual space and its contents to visibly rotate about a vertical axis through its centre; dragging the pointing device in a vertical (up, down) movement over an unoccupied part of any three dimensional virtual space with the left button depressed will cause the above mentioned axis of rotation for that virtual space to tilt away (drag up) or towards (drag down) the user; dragging the pointing device in any direction over an unoccupied part of any three dimensional virtual space with the right button depressed will cause that three dimensional virtual space and its contents to visibly scroll or translate as if attached to the pointing device; a single click of the pointing device while positioned over any of the images within any 3D virtual space will cause that image to be displayed in front of all other images within that 3D space and will also cause any ancestors of the file or folder to be displayed in front of all other images in their own 3D space, this 20 effect being cancelled within any three dimensional virtual space when itself or any of its ancestors are rotated. In other words, a single click of the pointing device over a file located within the 3D space of one of the displayed folders will cause the file to come to the front within the display of the folder, and will also cause the folder to come to the front within the display of its parent 3D space; dragging the pointing device in any direction over the right or lower edge of any image within any three dimensional virtual space will cause that image to be resided; 30 a double click of the pointing device while positioned over any image within any three dimensional virtual space will cause that image to fill the display area;
M&C P51841GB
a click on the Back button 122 will cause the parent folder, if there is one, of the file or folder currently filling the display area, to become the folder filling the display area.
5 Figure 3 illustrates an example of the Display area 121 following some investigative interaction and manipulation by the user.
An enhancement of the system described above provides visualization of links between items of information and also provides highlighting of the links from a single item of lo infonnation when it is selected by the user for this purpose by positioning the mouse near the top left corner of the displayed item. The user may keep an item selected for this purpose by clicking over the top left corner of the displayed item so that the mouse may be used for other operations while links from that item remain highlighted and a further click over the top left comer of that displayed item or any other will cancel this 5 effect.
The display of links is shown in figures 4-9.
Figure 4 shows an example of the Display Area showing a first file (700) linked to a 20 second file (701) where both files reside in the same folder. Enages representing the files are linked by a solid line.
Figure 5 shows the same linked files as in figure 4, but with the link highlighted.
25 Figure 6 shows a first file (704) linked to a second file (705) where the first file (704) is a child of a first folder (702) and the second file (705) is a child of a second folder (703) and both the first (702) and second (703) folders reside in the same common folder.
Each file (704, 705) has attached thereto a short diagonal line projecting from the top left hand corner of the corresponding image, showing that it is linked to another file in a 30 different folder. The two folders (702, 703) are joined by a solid line.
M&C PS1841GH
The line joining the two folders indicates that something within one folder is linked to something within the other folder; as this line does not indicate a direct link between the two folders (702) and (703), but is implied by a link between files (704) and (705) within them, this kind of drawn link will hereafter be referred to as a 'Bridge link'.
The symbol projecting from the top left corners of the two files, (704) and (705), indicate that each one is linked to a file which is not in the same folder as itself nor within any of its descendants, this symbol will hereafter be referred to an 'External link indicator'. Figure 7 shows the same linked files as in figure 6, but with the link highlighted. The entire path of a single link is now shown in full, with the External link indicators replaced by a solid line to the comer of the image representing the folder.
5 Figure 8 shows a first file (706) linked to a second file (709) where the second file is a child of a first folder (708), that first folder is a child of a second folder (707) and that second folder resides in the same folder as the first file.
The first file (706)and the second folder (707) are joined by a line indicating that the 20 first file (706) is linked to something within the second folder (707). This is another example of a bridge link.
The first folder (709) has a symbol extending from the top left hand corner, indicating that something within it is linked to a file which is not in the same folder as itself nor 25 within any of its descendants. This symbol is another external link indicator. The second file (709) also has attached thereto an external link indicator.
Figure 9 shows the same linked files as in figure 8, but with the link highlighted. As in Figure 7, the external link indicators have been replaced by solid lines to the corner of 30 the folder so that the entire link from the first file to the second file is shown.
M8:C P51841GB
Figure 10 shows an exemplary Display area of the application after some investigative interaction and manipulation by the user, in which links between files are shown as described above.
5 Figure 11 shows the Display area of Figure 10 after the user has positioned the mouse over the top left corner of a first displayed file (710) in order to highlight its links. It can be seen that the first displayed file (710) is linked to isles (711 to 717) and if the view is rotated then the destination of other links from the first displayed file will become visible. The invention can be put into practice by execution of program code written so as to cause working of the invention when executed on a programmable computer equipped with Random Access Memory and a suitable display device; alternatively specialized electronic hardware may be constructed equipped with 5 Random Access Memory and a suitable display device to work the invention with greater, lesser or no degree of programmability.
Figure 12 is a block diagram illustrating data and methods which work together to operate the invention. Within Figure 12 the following symbolic conventions are used: 20 rectangles represent data, rounded rectangles represent methods, lines with arrows represent one method applying another, double headed arrows representing iterative application and long arrows representing recursive application; 25 and lines without arrows represent important interactions between methods and data. The diagram shows three input signals: Draw display' 23 which the system illustrated receives whenever the display needs to be drawn, 30 'User input' 24 which the system illustrated receives whenever the user operates the pointing device, and 'On idle' 26 which the system illustrated receives whenever there is no
M&C P51841GB
requirement to draw the display nor input from the user.
The diagram also shows an output signal 'request to re-draw display' which will cause the system illustrated to receive a new 'Draw display' signal. If more than one 'request 5 to re-draw display' signal is issued during the handling of any input signal then the system illustrated should only receive one 'Draw display' signal in response.
A root list 1 is held of all files and folders that will be displayed, the list is constructed so that further data may be held against each file or folder, which data may be set and lo retrieved in association with that file or folder.
Where the root list of files and folders includes folders, then for each of those folders a further separate list 2 is held of the further files and folders within it and a reference 3 to that list is held against the folder; is where these separate lists contain further folders then for each of those further folders a yet further separate list is held in the same way; in this way every file and folder within the hierarchy is listed in a hierarchically structured manner which readily allows the retrieval of the list of files and folders within any one folder.
20 A 3D co-ordinate 4 is held against each file or folder and a general rule is applied to each of the lists of files and folders to assign values to the 3D co-ordinate held against the file and folders within them, for instance the rule may be that all files and folders within each list are assigned values so that collectively their 3D co-ordinate values form a circular configuration.
A 3D orientation matrix 5 or other means of holding 3D orientation information is held against each virtual 3D space and is used to determine the angle from which the virtual 3D space is projected to the display.
30 A Z order index table 6 is held against each virtual 3D space and contains references to the files and folders in the list which it displays, these are maintained in a sequence which corresponds to their relative distance from the viewer in terms of the virtual 3D effect.
M&:C P51841GB
the sequence of each Z order index table is first calculated before its corresponding virtual 3D space is first drawn and is subsequently recalculated whenever 3D orientation matrix held against its corresponding virtual 3D space is altered. s A method 7 is provided to draw at a chosen size, a virtual 3D space representing a collection of files and folders wherein an image of each of the files and folders within the virtual 3D space is drawn adjacent to or attached to a node positioned to reflect the 2D projection according to the 3D orientation matrix of the virtual 3D space, of the 3D o co-ordinate value held against the file or folder; and the corresponding Z order index table is used to control the sequence or manner in which file and folder images are drawn so that, in terms of the virtual 3D effect, ones which are closer to the viewer obscure portions of ones farther from the viewer wherever they overlap on the display.
A method 8 is provided to draw the image of a file displayed within a virtual 3D space wherein a representation of the contents of the file is obtained by whatever means are available and scaled to fit the size of the image.
20 A method 9 is provided to draw the image of a folder displayed within a virtual 3D space wherein the method to draw a virtual 3D space is applied to the collection of files and folders within that folder to draw a further virtual 3D space within the dimensions of the image; 25 The method of drawing a virtual 3D space further provides that it is constructed so that it can be applied recursively The angle from which a virtual 3D space is projected to form the display may be varied? by altering its 3D orientation matrix under control of the user or pre- programmed so instructions and redrawing the display; whenever the 3D orientation matrix of a virtual 3D space is altered the sequence of its Z order index table of the virtual 3D space is re-
calculated.
M&C P51841GB
An impression of continuous rotation may be produced by a sequence of displays, each making incremental changes to the angle from which the virtual 3D space is projected.
s A method 10 is provided to respond to actions of a pointing device positioned over a virtual 3D space which may be used to control rotation and lateral position of the virtual 3D space and issue commands specific to visually located files or folders.
The sizes of images of files and folders displayed within a virtual 3D space may be 0 individually or collectively varied under control of the user or pre-programrned instructions - for example the method of responding to actions of a pointing device positioned over a virtual 3D space may respond to a drag of the pointing device initiated over an edge of one of the images within that virtual 3D space and may use the position of the pointing device whilst being dragged to control the size of that image.
Optionally a reference 11 to an 'on top' file or folder, which must be able to hold a null value, may be held against each virtual 3D space, this reference is set to null whenever the virtual 3D space is rotated and may be set by user interaction (preferably any kind of clicking of the pointing device while positioned over the image of the file or folder) or so pre-programmed instructions to point at any file or folder within it; and accordingly the method to draw a virtual 3D space may optionally provide in its sequence or manner of drawing the images within it, that if the reference to an 'on top' file or folder is not null, then the image of file or folder it references will not be obscured by any other images that is it will appear temporarily on top The impression of continuous rotation may be synchronised with a user input of a continuous nature such as movement of a pointing device; for instance the 3D orientation matrix of a virtual 3D space may be calculated as a product of Spin matrix and a Tilt matrix and the method of responding to actions of a 30 pointing device positioned over a virtual 3D space may respond to a drag of the pointing device initiated over the virtual 3D space using left/right movements of the pointing device to apply rotation to the Spin matrix and using up/down movements of the
M&C P51841GB
pointing device to apply rotation to the Tilt matrix; this gives the effect of a virtual 3D space which can be spun about an axis (left/right movements of the pointing device) and the axis can be tilted (up/down movements of the pointing device); s Note: For the impression of rotation to be comfortable and effective and for rotation synchronised with a user input to respond to the user without perceptible delay it is important that the display can be redrawn very quickly, this is achieved by the mechanism described in the next two paragraphs.
lo A memory bitmap 12 is held against each image of a file or folder displayed within a virtual 3D space holding an exact copy of the image as it is displayed, these are formed and used according to the mechanisms described below, The method of drawing a virtual 3D space further provides that images of files and folders are drawn to the display of a virtual 3D space in the following manner; if the memory bitmap held against the file or folder is not formed or does not have the same dimensions as are required for the image then a memory bitmap is formed with the same dimensions as are required for the image and held against 20 the file or folder, the method for drawing the image of the file or of a folder within a virtual 3D space is applied to the memory bitmap to form the image of the file or folder on it and the memory bitmap is then transferred to the display of the virtual 3D space; 25 otherwise if the memory bitmap held against the file or folder is already formed and has the same dimensions as are required for the image then the memory bitmap is transferred to the display of the virtual 3D space.
Note: The transfer of a stored pre-formed memory bitmap image to the display or to another memory bitmap is in current state of the art a very fast operation and its application in this context avoids:
M&C P51841GB
in the case of a file - the much slower operation of obtaining an image of the contents of the file and scaling it to fit the size of the image and in the case of a folder - recursive application of the method to draw a virtual s 3D space; once the display and all memory bitmaps associated with it have been formed, subsequent re-displays which do not alter the size of images within it, for example rotation or lateral translation of a virtual 3D space, can be completed very quickly Note: When a virtual 3D space is re-drawn following the resizing of itself, all memory bitmaps held against images of files and folders within it are detected as being not of the required size and are accordingly re-fonned at the new required sizes by the action of the method of drawing a virtual 3D space.
Note: When a virtual 3D space is re-drawn following the residing of an image of a file or folder displayed within it, only the memory bitmap held against the image of the file or folder resized is detected as being not of the required size and is re-formed at the new . required size.
The method of responding to a pointing device positioned over a virtual 3D space further provides that its response to the action of the pointing device located over a further virtual 3D space displayed within it, is to apply the same method of responding to the further virtual 3D space according to the location of the pointing device within 25 that further virtual 3D space; accordingly the method provides that it is constructed so that it can be applied recursively. Note: When a deeply embedded file or folder changes its appearance (for example a 30 folder is rotated or a file is resided) then it will need to be re-drawn, but as it is displayed within its parent folder then that parent folder will need to be re-drawn and if that parent itself has a further parent then the further parent will need to be redrawn. In
M&C P5 1841 GO
general it can be said that when a file or folder changes its appearance then itself and all of its ancestors need to be re-drawn, this is achieved by the mechanism described in the next three paragraphs.
5 A method 13 of bitmap invalidation is provided which for any file or folder deletes the memory bitmap held against it or flags it as invalid and then applies itself recursively to its parent folder, if it has one, to ensure that the memory bitmaps of all of its ancestors are deleted or flagged as invalid.
10 The method of responding to a pointing device positioned over a virtual 3D space further provides that wherever its response causes a change in the appearance of the image of a file or folder then the method of bitmap invalidation is applied to that file or folder and the display is re-drawn.
5 The method of drawing a virtual 3D space further provides that where the memory bitmap held against an image is non-existent or has been flagged invalid then that memory bitmap is formed or re-formed applying the methods for drawing the image of a file or folder within a virtual 3D space and any invalid flag is unset before transferring the memory bitmap to the display of the virtual 3D space.
Note: Although the invalidation and re-drawing mechanism of the above three paragraphs disrupts the performance advantage of using the transfer of stored pre-
formed bitmap images, it does so in a managed and minimal way. Although many ancestor folders may need to be re-drawn, each one only has to apply the method for 25 drawing the image of a folder within a virtual 3D space to the single child which represents the branch of the tree which contains the file or folder that caused the invalidation, all other children of those ancestors are drawn by transfer of their stored pre- formed bitmap images 30 Optionally a method 14 may be provided to set a file or folder 'On top' which sets the reference to an 'on top' file or folder of the virtual 3D space displaying its parent folder to point at that file or folder and then applies itself recursively to its parent folder, if it
M&C P5 1841 GO
At, has one, to ensure that all of its ancestors are also set on top; thismethod is then applied throughout all methods of the invention in place of directly setting the reference to an on top' file or folder of a virtual 3D space.
5 Optionally a method 14 may be provided to unset the 'On top' member of a virtual 3D space which if the 'On top' member is a folder, applies itself recursively to the virtual 3D space displaying the contents of that folder and then sets the reference to an 'on top' file to null; the recursive application ensures that all of its descendants are not holding any of their members 'On top'; this method is then applied throughout all methods of 10 the invention in place of directly clearing the reference to an 'on top' file or folder of a virtual 3D space.
Optionally any folder within the hierarchy held can be made the root virtual 3D space of the display by applying the method of drawing a virtual 3D space to the list of files and is folders within it in the first instance when forming the display. Preferably any descendant folder visible within the display can be selected as the root of the display by an action of the pointing device (e.g. double click) whilst positioned over that folder; and the parent folder of the folder which is currently the root of the display can be selected as the root of the display by a similar action of the pointing device whilst not 20 positioned over any file or folder displayed.
Optionally any file within the hierarchy can be fully displayed by applying the method of drawing the image of a file within a virtual 3D space to that file in the first instance when forming the display, or by commanding appropriate installed application software 25 to display that file. Preferably any file visible in the display may be selected for this purpose by an action of the pointing device (e.g. double click) whilst positioned over that file.
A list 15 of linked files is held against each file, the list contains references to other files 30 to which the file is linked, each reference also indicates whether the file referenced is in the same folder as the file holding the list; the references held must be of an immediate type such memory pointer, or offset into an array,
M&C P51841GB
Note: It is helpful to arrange the lists of files and folders that represent the data model into an indexable array and implement the lists themselves as indexable arrays, any file can then be uniquely referenced, using the index to the list containing it and its index within that list.
A method 16 is provided to populate the list of linked files that is held against any file using whatever indication of links are found within that file, or according to the design of the user or pre-prograrnmed instructions.
lO The method of drawing a virtual 3D space further provides that for each file, a line is drawn from that file to each file referenced in its list of linked files provided that the file referenced resides in the same parent folder as the file.
Note: The following description refers to 'implicit links', the purpose of implicit links is
5 to indicate linkage within any virtual 3D space between either a file and the contents of a folder, or the contents of one folder and the contents of another folder, this provides a hierarchical overview of linkage between different branches of the hierarchy.
q Note: The following description also refers to 'indications of the existence of external
20 links' these are necessary to provide an indication that a file is linked to others for every scenario possible in a hierarchical context; the scenarios and their indications are: the file is linked to another sibling file - a link is drawn from the file to the 25 sibling file, a file is linked to another file which is contained within a sibling folder - an implied link is drawn from the file to the sibling folder, 30 a first folder contains one of two linked files and a second sibling folder contains the other linked file - an implied link is drawn from the first folder to the sibling folder,
M&C P51841GB
j a file is linked to another file which is not contained within it parent - an indication of the existence of external links is drawn.
5 A list 17 of implicitly linked files and folders is held against each file or folder, the list contains references to file or folders within the same parent folder, to which that file or folder is implicitly linked An indication 18 of the existence of external links to other files which are not lo descendants of its parent, is held against each file or folder A method 19 is provided to generate implied links and indications of the existence of external links resulting from a link from a first file to a second file where the second file does not reside in the same folder as the first file, 15 wherein an iteration which operates on two files or folders, begins with the first and second files, and during each iteration: if one file or folder is more deeply embedded in the hierarchy than the other then the indication of external links held against the more deeply embedded file or JO folder is set and the next iteration is carried out replacing the more deeply embedded file or folder with its parent; if both files or folders are embedded in the hierarchy equally deeply, but do not share the same parent folder, then the indication of external links held against 25 both files or folders is set and the next iteration is carried out replacing both files or folders with their parents, if both files or folders share the same parent folder then an implied link is generated between them by adding a reference to the file or folder deriving from 30 the second file to the list of implied links held by the file or folder deriving from the first file, the iteration then terminates.
M&C P5 1841 GO
Note: Where two linked files reside in the same folder no implied links are generated The method of populating a list of linked files further provides that where the linked file does not reside within the same folder as the file against which the list is held, then the 5 method of generating implied links is applied operating on the file against which the list is held and the linked file.
The method of drawing a virtual 3D space further provides that for each file or folder, a line is drawn from that file or folder to each file or folder referenced in its list of lo implicitly linked files.
The method of drawing a virtual 3D space further provides that for each file or folder, if the indication of the existence of external links is set for that file or folder then a visible mark to represent the existence of external links is drawn associated with the file or folder. A highlight flag may be held against every reference to linked or implicitly linked folders and any indications of the existence of external links, the normal state of these flags is to be unset.
A method 27 is provided to highlight any link within a list of linked files wherein an iteration which operates on two files or folders, begins with the file against which the list is held and the file referenced by the link, and during each iteration: 25 if it is the first iteration and both files have the same parent folder then the highlight flag held against the link is set and the iteration terminates; if one file or folder is more deeply embedded in the hierarchy than the other then the highlight flag of the indication of external links held against the more deeply so embedded file or folder is set and the next iteration is carried replacing the deeply embedded file or folder with its parent;
M&C P51841GB
A\ if both files or folders are embedded in the hierarchy equally deeply, but do not share the same parent folder, then the highlight flag of the indication of external links held agamst both files or folders is set and the next iteration is carried out replacing both files or folders with their parents; if both files or folders share the same parent folder and it is not the first iteration, then the implied link between them is found by searching the list of implied links held by the file or folder deriving from the first file for a reference to the file or folder deriving from the second file, when the implied link is found its lo highlight flag is set and the iteration terminates.
The method of highlighting any link within a list of linked files further provides that it can remove the highlight from any link within a list of linked files by substituting any 5 setting of highlight flags within its method with upsetting of the same flags.
The method of drawing a virtual 3D space further provides that wherever the highlight flag held against a link or implied links is set, then the line drawn representing that link or implied link is drawn with a distinct color or line style to represent a highlighted 20 state.
The method of drawing a virtual 3I) space further provides that wherever the highlight flag held against an indication of the existence of external links is set, then a line is drawn from the file or folder against which the indication of the existence of external 2s links is held, to a point at the edge of the display of that virtual 3D space, using the same distinct colour or line style used for highlighted links and implied links.; the point to which the line is drawn should be preferably as close as possible to the general point of attachment of the display of an embedded virtual 3D space to its position within its it parent virtual 3D space, so that if the virtual 3D space has a parent 30 then there will be a visual continuity between the line drawn and the associated highlighted implied links that will be visible within its parent virtual 3D space emanating from its position within that parent virtual 3D space
M&C P51841GB
The method of responding to a pointing device positioned over a virtual 3D space further provides that an action associated with the pointing device while positioned over a chosen file may cause: s the method of highlighting any link within a list of linked files to be applied to each link within its list of linked files, the method of bitmap invalidation to be applied each of the linked files and the chosen file, and the display to be redrawn, the method of highlighting any link within a list of linked files may set or unset highlight flags according to the action associated with the pointing device Note: When the display of a virtual 3D space is first formed and whenever it is resized the method of drawing the image of a file within a virtual 3D space must be applied for every file visible within it and every application of the method involves obtaining a representation of the contents of a file; in the case of files stored in magnetic disk or 5 files whose visualization is complex, this can be time consuming and cause unacceptable delays in drawing the display. The following paragraphs describe a convenient contingency for these circumstances.
A file content image repository 20 is provided whose purpose is to hold an image 20 representing the contents of each file stored in such a way that it can be readily retrieved and transferred to a memory bitmap; and a reference 21 to a file content image within the file content image repository is held against each file; this reference is initially set to a null value to indicate that no file content image is available.
Note: A simple implementation of the file content image repository would be an indexable array of memory bitmaps, the index of a file content image within the array could then be used as the reference to a file content image held against the associated file. It may be preferable that the memory bitmaps within the repository are of a size 30 which is similar to that at which files are likely to be displayed within a virtual 3D space and the images of content obtained are reduced to fit them.
M&C P51841GB
A method 22 is provided to load an image of file content into the file content image repository for a given file, wherein an image of file content is obtained by whatever means are available, is put into the file content image repository and the reference to a file content image held 5 against the file is set to reference the new file content image.
The method of drawing the image of a file within a virtual 3D space further provides that if the reference to a file content image held against the file is not a null value, then the method operates by extraction and transfer of a file content image referenced from 0 the file content image repository using the reference to a file content image.
The method of drawing the image of a file within a virtual 3D space preferably provides that if the reference to a file content image held against the file is a null value, then a simple indication of nonavailability of image of file content is displayed and no action 5 is taken to form an image of file content Note: The use of a simple indication of non-availability of image of file content when a file content image is not yet available allows the display to be formed and respond to user interaction immediately albeit without any images of file content.
A preferred way of applying the method of loading an image of file content to populate the file content image repository is to arrange that the method of loading an image of file content is applied to each file in turn whenever the system is not busy responding to user interaction; 25 and each time the method of loading an image of file content completes for a given file the method of bitmap invalidation is applied to the file and the display is re drawn. Optionally where the operating environment allows simultaneous execution of multiple 30 execution threads, the method of loading an image of file content into the file content image repository may start whatever process is used to obtain an image of the content of the file in a separate execution thread and return immediately allowing the system to
M&C P51841GB
continue responding to user interaction; in combination with this an event may be provided which on completion of the associated separate execution thread puts the image obtained into the file content image repository, sets the reference to a file content image held against the file to reference that s image, applies the method of bitmap invalidation to the file and causes the display to be re-drawn. Note: The result of the arrangement described above is that the display is immediately available and responsive to user interaction and images of file content gradually appear lo during an initial period until they are all present.
Figure 12 represents the presence in the invention of all functionality described above; Figures 13 - 16 represent alternative fully working configurations but with less functionality: Figure 13 represents a configuration which does not include visualisation of links between files - this would be appropriate where there are no links between the files displayed or the links are of no interest to the user.
20 Figure 14 represents a configuration which does not include visualisation of links between files or the hierarchical representation of folders - this configuration may be chosen for its simplicity of construction where the files and folders to be displayed are not arranged in a hierarchy, that is there are no folders, or there is for some reason only a requirement to display the first or root level of the hierarchy.
Figure IS represents the same configuration as figure 14 but operates without use of a file content image repository - the file content image repository is not needed if the image of the content of a file can be obtained from the native stored form of the file without significant delay; this would be the case for instance if the native stored form of 30 the file is as a bitmap image held in random access memory.
Figure 16 represents a configuration which includes hierarchical representation of
M&C P5 1841 GB
folders and the visualization of links between files but only produces a static display.
Other configurations are possible.
5 The invention may operate without its provisions relating to calculating 2D projections of 3D points and calculating the Z order of displayed images wherever hardware or software environments in which it operates provide these operations as a service, in which case the invention operates using these services.
0 When implemented in an environment in which a 3D engine is available to present a 3D model to the display it may be advantageous that nodes and lines within a virtual 3D space are defined within the 3D model and projected to the display by the 3D engine, however it may be preferable that the images displayed within the virtual 3D space are not represented in the 3D model as thin flat 3D objects, but rather as 2D images to be 5 displayed always facing the user, attached to their respective nodes and overlapping each other according to the Z order of their respect nodes.
When implemented in conjunction with a true 3D display such as might be achieved by a digitally controlled dynamic holograph then the images displayed within the virtual 3D 20 space will necessarily have to be shown as thin flat 3D objects and the orientation of these objects will have to be adjusted as the virtual 3D space rotates to ensure that they are always facing the user.
A detailed method for putting the invention into effect will now be described. A Is personal computer system complete with all of its hardware (Arithmetic and Logic unit (100), Read only memory (101), Random access memory (102), Input /Output control hardware (103), address and data bus (104), Display unit (105), pointing device (106), keyboard (107), and system of persistent data storage (108)) and the Windows 98 operating system (109) (Windows GUI (110), Windows Explorer (111) and Web 30 Browser control (112)) is generally purchased as a single unit of existing state of the art technology. Only the pre prepared executable application file (404) is prepared
M&C P5 1841 GB
specifically to cause operation of the invention, therefore the remainder of this discussion will focus on preparation of the pre prepared executable application file.
The pre prepared executable program file (404) is produced from source code written in s a structured programming language, this source code being called by and making calls to the application programming interface (API) of the operating system. The source code is compiled into executable program code and calls to and from the API are resolved by a compiler and linker. The result of the compilation is a named executable program file stored within the file system. The invention is then performed by commanding the lo operating system to execute the same named executable program file whose effect when executed is hereafter referred to as 'the Application'.
The following description specifies how the aforementioned source code may be written
by describing configurations and actions within the computer system which the 5 executable program code it produces should cause when executed, it being normal and routine practice in the art to produce working source code from such a specification.
Figure 17 is a schematic block diagram showing an overview of the application which causes operation of an exemplary embodiment of the invention. The application 20 comprises: a visible pointing device sensitive application window (120) provided with an event handler HandleWinProc (123) which receives all message from the operating system destined for the Display window (121) in accordance with 25 common practice and a Back button (122), a Core engine (405) for putting into effect the manipulation of the virtual 3D space, 30 a set of File Structure services (124) which are called as required by the Core engine,
M&C P51841GB
a set of File Content services (125) which are called as required by the Core engme, a definition and means of construction of a Bitmap class (126) which 5 implements a drawing surface representing either the Display area or a bitmap image created in memory and implements a set of drawing and bit transfer operations on that drawing surface, a SendEvent process (127) which receives events from HandleWinProc event lo handler (123) and processes them to be sent to the HandleEvent process (416) of the Core engine (405) along with a Bitmap (126) representing the Display area (121) , on which Bitmap the Core engine can draw to produce output on the Display area of the Display device, 15 a definition and means of construction of a Web Browser control class (128) which is able to read any HTML, Jpeg, or Gif file and transfer an image of its content onto a Bitmap (126).
The File structure services (124) implement Windows API calls to return information 20 about file and folders and comprise: (143) boot IsDirectory(Full path and filename of file or folder) which returns true if the address passed is a folder and otherwise returns false; 25 (144) void FilListWithDirectoryItems(Pointer to String List, Full path and filename of folder) which fills String List with the members of the folder passed; (145) boot CanDisplayFile(Full path and filename of file) which returns true if the address passed is a folder or HTML, Jpeg, or Gif file and otherwise returns 30 false;
M&C PS1841GB
(146) String GetFileTitle(Full path and filename of file or folder) which returns the title of the file or folder passed.
The File content services (125) create and control instances of the Web Browser control 5 class (128) to display or obtain a Bitmap (126) image of the content of HTML, Jpeg, or Gif files and comprise: (147) ShowFile(Full path and filename of file) which hides the DisplayWindow, creates a visible Web Browser control sized to exactly cover the Display area lo and navigates it to the address passed, (148) CloseFileShowing() which detects if a Web Browser control is visible and if so, destroys it and shows the DisplayWindow; 5 (149) GetFileImage(Pointer, Full path and filename of file) which creates an invisible Web Browser control, sets its Pointer value member (150) equal to the Pointer passed, initiates navigation to the address passed and returns - the invisible Web Browser control then performs the navigation in its own thread calling SendMessage with GOTFILEIMAGE as described below to when the navigation is complete and the control holds an image of the file, after which the invisible Web Browser control destroys itself.
The Core engine (405) will now be described in more detail.
25 Figure 18 is a schematic block diagram showing an overview of the Core engine. The diagram and its components are in many ways analogous to Figure 12 and its components, the core engine being a specific implementation of the workings earlier described in general terms with reference to Figure 12.
so The Core engine comprises the following operational units:
M&C P5 1841 GB
a Data Model unit (406) to contain in memory the information that is to be displayed, a Data Populator unit (160) to populate the Data Model (406) with files and s folders selected by the user, a Display Unit (161) to paint within the Display Area and a Control Unit (162) to manage user interaction and dynamic response.
The Data Model Unit (406) contains: the Array of ItemArrays (307) which holds information about the plurality of 5 files and folders being displayed and its hierarchical structure, each IternArray (311) representing a folder arid each Item (322) within that IternArray representing a file or folder within that folder; and the ReferenceImageArray (306) which holds images of the visual content of 20 the files to be displayed and provides the display unit with a means of repeatedly accessing images of the visual content of the files without the delay incurred by opening them each time they are needed for a paint operation or the system problems caused by a proliferation of open files in memory.
The Data Populator unit(l 60) consists of the following process: the Populate process(407), which takes a list of files and folders passed to it by the HandleEvent(416) process when it receives a WM_DROPFILES message, 30 and from that list, populates the Array of Item Arrays (307), calling itself recursively as it does so;
M&C P51841GB
the Arrange process(408) which generates a three dimensional geometry with which to display the information, the Arrange process is called following the Populate process; 5 the GetNextFileLnage process(426) which calls the GetFileImage (147) process of the File content services (125) to get an image of the content of a file, the GetNextFileImage process is called by the HandleEvent (416) process when it receives an IDLE message; 0 and the OnGotFileImage process(425) which is called by the HandleEvent (416) process when it receives a GOTFILEIMAGE message, and stores the image passed in the ReferenceImageArray (306) 5 The Display unit (161) provides a Visual Memory Support structure (409) which ensures that information required for drawing the display can be accessed as quickly as possible and comprises: the Array of Z Arrays (344), each Z Array (353) holding information about the 20 screen position and Z order of the images representing files and folders within a 3D virtual space, provided to avoid repeated recalculation of geometrical transformations and Z sorting when the orientation of the 3D virtual space has not changed, the GetZArray (411), GetZElement (419), and Zsort (412) processes being provided to access and maintain the Array of Z Arrays; and the VisualItemsArray (345), each VisualItem (362) holding a memory Bitmap (126) of a file or folder exactly as it is displayed within the 3D virtual space to which it belongs, provided to avoid the repetition of either: 30 stretching the associated Reference Image to the required size in the case of a displaying a file image,
M&C P51841GB
or reconstruction of a 3D virtual space in the case of a displaying a folder image, the GetVisualItem(414) and Invalidate (415) processes being provided to access s and maintain the VisualItemsArray (345).
Painting of the Display area (121) is initiated by a call from the HandleEvents (416) process to the DrawItemArray process (410) passing a Bitmap (126) representing a bitmap image stored in memory on which to paint, and is carried out by iterative and lo recursive interaction between the DrawItemArray process (410) and the DrawItem process (413) as follows: the DrawItemArray process (410) calls the GetZArray process (411) , 15 which GetZArray process either: returns an existing ZArray (353) if it is marked valid (the fast route), 20 recalculates the values of an existing ZArray and returns it if it is marked invalid, or creates a new ZArray if one doesn't exist, calculates the values and returns it; the DrawItemArray process (410) uses the ZArray returned, to sequence the order in which its constituent items are painted to the Bitmap passed and in what position each item is painted, painting each item by a call to the DrawItem process (413) passing the saline passed Bitmap and the Point the item is to be drawn at;
M&C P5 1841 GO
* the DrawItem process (413) calls the GetVisualItem (414) process to gets a Visual Item bitmap which bitmap: if it is marked valid is transferred directly to the Bitmap passed at the s Point passed (the fast route), otherwise: if the Item represented is a file then the a Reference Image 0 Bitmap is obtained from the ReferenceImageArray (306) which is stretched to fit the Visual Item bitmap which Visual Item bitmap is then marked valid and transferred to the Bitmap passed at the Point passed, 5 or if it is a folder then a recursive call is made to the DrawItemArray process (410) passing the VisualItem bitmap which Visual Item bitmap is then marked valid and transferred to the Bitmap passed at the Point passed.
20 The interaction of these two processes builds a layered structure of bitmaps descending recursively through the hierarchy after which the VisualItemsArray (345) will contain a valid VisualItem Bitmap for every file or folder that is displayed as an image within a 3D virtual space and the ArrayOfZArrays (344) will contain a valid ZArray for every 3D virtual space displayed. It can be seen from above that: valid ZArrays allow the fastest execution
of the GetZArray process (411) and therefore the fastest execution of the DrawItemArray process (410);
M8tC P5 1841 GO and that valid VisualItems allow the fastest execution of the DrawItem process (413) which fastest execution route avoids further recursive calls to DrawItemArray (410) or stretching of Reference Image Bitmaps; 5 therefore the fastest repainting of the display will be achieved when all Z ATays and VisualItems remain valid.
In order to maintain the fastest possible response from the display whilst allowing it to repaint areas whose appearance has changed due to some aspect of dynamic response: lo Z Arrays are only marked mvalid when the orientation of the 3D Virtual Space they are associated with has been changed since they were last calculated; and VisualItems are only marked _valid when the representation of the file or folder they represents has changed since they were last updated e.g.: an image representing them has become available, the image representing them has resized, 20 or in the case of VisualItems which represent folders, some aspect of an file or folder displayed within them or the orientation in which they are displayed has changed.
The Invalidate process(415) is provided to ensure that when a VisualItem is marked 25 invalid, any VisualItems within which they are displayed are also marked invalid, it is called when for any reason when due to some aspect of dynamic response an Item has changed its appearance.
Figures 20 - 23 illustrate how invalidation and repainting is controlled to minimise time 30 consuming operations during repainting.
M&C P51841GB
Figure 20 shows a folder (9163 which contains two files (900) and (901) and two folders (902) and (903), the folder (902) contains two further folders (904) and (905) each of which contains two further files (908-911) , the folder (903) contains two further folders (906) and (907) each of which contains two further files (912-915). Each file or folder 5 is marked with letters which represent the operations required to draw them for the first time where: DF signifies Draw the Folder, CZ signifies Create ZArray, 0 SR signifies Stretch Reference image.
it can be seen from figure 20 that to draw the system represented for the first time requires drawing a folder 7 times and creating a ZArray 7 times and stretching a reference image 10 times.
Figure 21 shows the same system and the files and folders arid operations required to redraw it if it is not invalidated due to any change in its appearance where B signifies Blit or Bit transfer, it can be seen that only 4 Bit transfers are required.
Figure 22 shows the same system and the files and folders and operations required to redraw it after the three dimensional space representing folder (907) has been rotated 25 where LIZ signifies Re-calculate ZArray; and Figure 23 shows the same system and the files and folders and operations required 30 to redraw it after the file (909) has been resided;
M&C P51841GB
it can be seen that in both cases much of the redrawing is still achieved by rapid blit or bit transfer operations.
5 The Control (162) unit is driven by HandleEvents process (416) which receives events from the SendEvent process (127) of the Application.
On receiving a WM_DROPFILES message with a list of files and folders representing a part of the file system selected by the user, the HandleEvents process (416) calls the 0 Populate process (407) to fill the ArrayOfItemArrays (307)with a information representing the portion of file system passed and then calls the Arrange process (408) to generate a geometrical structure for each ItemArray (311).
Once the ArrayOfftemArrays (307) is populated, the HandleEvents process (416) will 5 call the DrawItemArray process (410) whenever it receives a Paint or Size message or if the processing of any other message or event indicates a requirement to repaint the Display area (121).
20 The HandleEvents process (416) calls the ItemArrayGetMouse process (417) whenever it receives a mouse event from the Display area (121). Propagation and response to mouse events is carried out by recursive interaction between the IternArrayGetMouse process (417), the ItemGetMouse process(422), and the ItemArrayHandleMouse process (420) as follows: the ItemArrayGetMouse process (417) calls the HitTest (418) process for each of its constituent Items, which HitTest process returns true if the mouse is positioned over that Item and; 30 if any call to HitTest returns true then the ItemGetMouse process (422) for that Item is called;
M&C P51841GB
otherwise the ItemArrayHandleMouse process(420) is called; the ItemGetMouse process(422): 5 recursively calls the ItemArrayGetMouse process (417) if the Item represents a folder, and otherwise handles the mouse event itself, which may involve: 0 resizing the image representing the Item if its border is being dragged, or displaying the file if the event is a double click; 5 and the ItemArrayHandleMouse process(420) which handles mouse events which are positioned over an unoccupied region of a 3D Virtual Space and may involve: rotation of the 3D Virtual Space if the event is a LBUTTONDRAG, by 20 calling the Spin & Tilt process; altering the position of a 3D Virtual Space within its display area if the event is a RBIJTTONDRAG; 25 or if the event is a double click, causing the Folder it represents to become the root folder displayed and whose 3D Virtual Space occupies the main Display area.
Update of the Display to reflect changes resulting from mouse actions is managed by so appropriate calls to the Invalidate process and propagating back a return value of true which causes the HandleEvents process (416) to call the DrawItemArray process (410) before exiting.
M&C P51841GB
It is in the current state of the art a normal user expectation of any graphical interface that if you click on any part of a partially obscured visual object then it will be displayed in front or on top of all others. Accordingly the Select process (423) is called by the 5 ItemGetMouse process (422) each time it receives a Mouse Down message. The Select process (423) attributes that Item as being on top within its parent ItemArray and this status is respected by the DrawItemArray (410) and the ItemArrayGetMouse (417) processes, the Select process (423) also ensures that all ancestors of the Item selected are also attributed as being on top within their parent Item Arrays.
It is in the current state of the art also a normal user expectation of any graphical interface that if you commence a mouse drag within a visual object then that visual object should continue to receive all mouse drag messages, even if the mouse is no longer over the visual object, until the mouse is released; this is known in the art as 5 mouse capture. Accordingly a mouse capture mechanism is operated by the ItemArrayGetMouse (417), IternArrayHandleMouse (420) and ItemGetMouse (422) processes. Figure 19 summarises changes which should be made to the embodiment described 20 above to effect the enhancement which displays links. The processes represented in the figure by an ellipse are those which form part of the earlier description which need to be
changed to make calls to new processes represented by rounded rectangles which are introduced to effect the enhancement.
5 The following describes, with reference to figure 19, the changes which should be made to the previously described embodiment to effect the enhancement which displays links: The WebBrowser control (128) is modified so that when it handles the OnDocumentComplete event (151), it calls a new GetLinks process (170) which constructs a StringList containing the location of all files that the page that it holds is so linked to and calls the SendEvent process (127) passing a DOITEMLINKS message, the PointerValue member (150) of the WebBrowser control (128) and the StringList constructed by the new GetLinks process (170).
M&C P51841GB
The HandleEvent process (416) is modified so that it calls the DoItemLinks process (30) in response to a DOITEMLINKS message. The DoItemLinks process is an implementation of the method of populating a list of linked files 18 described earlier with reference to figure 12 and accordingly calls the DoFarLink process (31) which is an 5 implementation of the method of generating implied links 19 described earlier with reference to figure 12.
The ItemArrayHandleMouse process (420) and the ItemGetMouse process (422) are modified to control the HighlightItemLinks process (36) which calls the HighlightItemLinks process (36). The HighlightItemLinks process (36) is an lo implementation of the method of highlighting a link between two files 27 described earlier with reference to figure 12.
The DrawItemArray process (410) is modified to call to the new DrawArrayLinks process (32) which calls the DrawItemLinks process (33) for each Item in the ItemArray. The DrawItemLinks process is an implementation of the extensions to method of drawing a virtual 3D space 7 which effect the display of links described earlier with reference to figure 12.
Extensions to the data model 40 include implementation of the lists of links 15, lists of implied links 17 and external link indicators 18 described earlier with reference to figure 20 12.
The following is a detailed description of the data structures and processes referred to
above. They are first described without implementation of the enhancement which displays links and then the changes which are necessary to effect the enhancement 25 which displays links will be described.
The Bitmap class The Bitmap class (126) is provided with two constructors: 30 (129) new Bitmap(Window)- which is used by the SendEvent process to construct an instance of a Bitmap class which represents the Display area (the
M&C P51841GB
Windows Device Context of the Display area is held as the operand of drawing and bit transfer operations), (130) new Bitmap(Size)- which is used throughout the Core engine to construct 5 an instance of a Bitmap class (126) which creates and represents a bitmap image stored in memory (a new Windows device context is created and a new Windows Bitmap is created of the Size passed and selected into the new Windows device context which is held as the operand of drawing and bit transfer operations); each instance of the Bitmap class (126)implementing the following operations on the drawing surface it represents: (131) FillColor(Colour) which fills the entire Bitmap (126) with Colour passed, (132) BlitTo(Point, Source Bitmap) which transfers the entire Source Bitmap to the Bitmap at the Point passed, (133) StretchToFit(Source Bitmap) which transfers the entire Source Bitmap to 20 the Bitmap stretching it to fit the Bitmap exactly, (134) SetPen(Type) which sets the pen for drawing operations to be of the Type passed (this operation is called frequently therefore repeated creation and destruction of Windows Pen objects is avoided by using a static reservoir of pre 25 created Windows Pen objects), (135) MoveTo(Point) which moves the current pen position to the Point passed, (136) LineTo(Point) which draws a line on the Bitmap from the current pen 30 position to the Point passed,
M&C P5 1841 GB
(137) Rectangle(Rectangle) which draws an outline of the Rectangle passed onto the Bitmap.
(138) SetFont(Nest Depth) which sets the font for text operations to be s appropriate for the Nest Depth passed, a working formula for calculating font height being 'Font height equals fifteen minus three times the Nest Depth' (this operation is called frequently therefore repeated creation and destruction of Windows Font objects is avoided by using a static reservoir of pre created Windows Font objects), (139) SetTextColor(Colour) which sets the text colour for text operations to be the Colour passed, (140) SetTextBackgroundColor(Colour) which sets the text background colour
5 for text operations to be the Colour passed, (141) Size GetTextSize(Text) which returns the size that the Text passed would occupy drawn using the current font, 20 (142) TextOut(Point, Text) which prints the Text passed onto the bitmap at the Point passed.
The Web Browser control class The Web Browser control class (128) which is built around the Microsoft Web Browser 25 control, implements the OnDocumentComplete event handler(151) and sets the Pointer value member(l50) to NULL on construction. The OnDocumentComplete event handler is called when the navigation is complete and the control holds an image of the file and performs the following operations when called: 30 if the Pointer value member is NULL then does nothing and returns; otherwise:
M&C PS 1841 GH
creates a local (destroyed on exit from the process) Bitmap (126) instance using the new Bitmap(Size) constructor (130) passing the size of the Web Browser control, paints the Web Browser control onto the bitmap instance using the OleDraw Windows API call, calls the SendEvent process (127) passing the following parameters: message = GOTFILEIMAGE, x = control width, y = control height, pVoidl = Pointer value member, pVoid2 = address of Bitmap, then posts a message to the Web Browser control to destroy itself The SendEvent process The SendEvent process (127) creates a Bitmap (126) representing the screen and 20 prepares events messages and parameters which are passed in a call to the HandleEvent process (416) of the Core engine (405).
The SendEvent process is defined according to Con syntax: void SendEvent(lJINT Message, int x, int y, void* pVoidl, void* pVoid2); 25 wherein: Message' indicates the type of message or event, x' & 'y' are used to pass position values where appropriate, pVoidl' & 'pVoid2' are used to pass further parameters by reference; and operation of the core engine is achieved by calling the SendEvent process from the 30 HandleWinProc (123) event handler of the application window as follows: In response to an Initialise event
M&C P51841GB
SendEvent(INITIALISE, 0, 0, NULL, NULL); In response to WM_SIZE message SendEvent(WM_SIZE, LOWORD(IParam), HIWORD(lParam), NULL, 5 NULL);
In response to WM_PAINT message SendEvent(WM_PAINT, 0, 0, NULL, NULL); lo In response to WM_DROPFILES message SendEvent(WM_DROPFILES, 0, 0, (void*)wParam, NULL); In response to WM_LBUTTONDOWN, WM_LBUTTONUP, WM_LBUTTONDBLCLK, WM_RBUTTONDOWN and WM_RBUTTONUP 5 messages SendEvent(message, LOWORD(IParam), HIVVORD(lParam), (void*)&wParam, NULL); In response to an OnIdle event J SendEvent(IDLE, 0, 0, NULL, NULL); In response to Back button pressed SendEvent(BACKBUTTON, 0, 0, NULL, NULL); 25 When called the SendEvent process (127) creates a local (destroyed on exit from the process) Bitmap (126) instance representing the Display area by using the new Bitmap(Window) constructor and performs the following modifications to the message and parameters before passing them with the new Bitmap instance to the HandleEvent process (416) of the Core engine (405): In response to a WM DROPFILES message
M&C P51841GB
uses the Windows HDROP passed by reference in poidl to fill a string list with the filenames of the files and folders dropped, and passes a pointer to the string list to the HandleEvent process of the Core engine as the pVoidl parameter; In response to a WM_MOUSEMOVE message use the DINT nFlags passed by reference in pVoidl to determine if either of the left or right buttons of the pointing device are held down and: 0 if the left button is held down then calls the HandleEvent process of the Core engine passing LBUTTONDD1lAG as the message parameter and the amount by which the pointing device has been dragged as the x and y parameters; 5 if the right button is held down then calls the HandleEvent process of the Core engine passing RBUTTONDDRAG as the message parameter and the amount by which the pointing device has been dragged as the x and y parameters; 20 if neither button is pressed then calls the HandleEvent process of the Core engine without altering any parameters; In response to all other messages and events calls the HandleEvent process of the Core engine without altering any parameters.
Data Model Figure 24 is a schematic block diagram showing the structure of the data model (406) and how the parts of it contain (300, 301, 302) and reference (303, 304) each other.
The Data Model globals (305) are initialized when the Core engine (405) is created and comprise:
M&C P5 1841 GB
the ReferenceImageArray(306) which is an array of Bitmaps (126) initialised as empty, which will be used to hold reference images of the files represented; s the ArrayOfltemArrays(307) which is an array of ItemArrays (311) initialised as empty, the zero element of which is used to represent the root folder,-and the remaining elements to represent all other folders g_ArrayIndexLoading(308) and g_ItemdexLoading(309) which are an integers 0 initialised to NONE and are used by the GetNextFileImage process (426) during IDLE events; and g_NumLoading (310) which is an integer initialised to zero and used by the GetNextFileLmage (426) and OnGotFileImage (425) processes to control the 5 number of files allowed to load asynchronously at the same time.
The Item Array structure (311) represents the format for storing the list of files and folders within a folder, and contains: go an array of Items (312) representing the list of files and folders a SpinMatrix member (313) , which is a 3D transformation matrix initialised to unity, and represents rotation about a vertical axis of the 3D virtual space which represents the folder, a TiltMatrix member (314), which is a 3D transformation matrix initialised to unity, and represents the tilt of the above mentioned vertical axis towards the user, 30 a ScrollOffset member (315), which is a Point value (x and y co-ordinates both initialised to zero) and represents the offset from the centre of the display area of the centre of the 3D virtual space when displayed,
M&C P51841GB
a Parent Item Address member (316), which is an IternAddress (317) referencing its parent Item if it has one, the Item Address-structure (317) consisting of a ParentArrayIndex member (318) and an ItemIndex member(319) both initialised 5 to NONE, a ZArrayIndex member (320) which is an integer initialized to NONE, and when not equal to NONE is an index into the Arrayof ZArrays (344) of its associated ZArray (353), and a NestDepth member(321) which is an integer indicating the nested depth of the folder it represents within the hierarchy of files and folder represented.
The Item Structure(322) represents the format for storing information about each file or 5 folder within a folder and contains: a Filename member(323) which is a text string initialised as empty and is used the store the full path and filename of the file or folder; 20 a Title member(324) which is a text string initialised as empty and is used the store a short title which will be displayed for the file or folder; an knageIndex member(325) which is an index initialised to NONE, and when not equal to NONE is an index into The ReferenceImageArray (306) of a Bitmap 2s (126) holding a visual representation of the contents of the file; an Item Array Index member(326) which is an index initialised to NONE, and when not equal to NONE is an index into the ArrayofItemArrays (307) of the ItemArray (311) representing the folder;
M&C P51841GB
a ThreeDirnensionalCoordinate member (327) which is a 3D Point value (x an y and z co-ordinates all initialised to zero) used to indicates the position of the Item within its three dimensional logical space.
s a ImageSizeRatioX member(328) which is a ratio initialised to unity and indicates the width of the image displayed to represent the item, with respect to the default width of images displayed in the same 3D virtual space, a ImageSizeRatioY member(329) which is a ratio initialised to unity and 0 indicates the height of the image displayed to represent the item, with respect to the default height of images displayed in the same 3D virtual space, a ParentArrayIndex member(330)-which is an index into the ArrayofItemArrays (307) of the ItemArray (311) to which the Item belongs; a OwnIndex member(331) which is an index into the ItemArray (311) to which the Item belongs of the Item itself; a NestDepth member(332) which is an integer indicating the nested depth of the So item it represents within the hierarchy of files and folder represented, and a VisualItemIndex member(333) which is an integer initialised to NONE, and when not equal to NONE is an index into the VisualItemsArray (345) of its associated VisualItem (362).
Figure 25 illustrates the Data model configured for a particular hierarchical system of files and folders illustrated in box (920), and shows the ArrayOfftemArrays (307) containing 4 ItemArrays (311) representing the 4 folders each of which contains a number of Items (322) each labelled by its Title member (324) and either indicating that 30 its ItemArraydex member (326) references an ItemArray within the ArrayOfItemArrays (307) or that its Imagedex member (325) references a reference image bitmap (126) in the ReferenceImageArray (306).
M&C P51 841GB
j Data model processes GetParentItem s The GetParentItem process (427) is passed an Item (322) and an ItemArray (311), one of which is always NULL and the other the operand of the process, in both cases it returns the parent Item if there is one.
0 The GetParentItem process operates as follows: if the ItemArray passed is Null and the Item passed is the operand then indexes a first ItemArray from the ArrayOflItemArrays (307) using the 15 ParentArrayIndex (330) member of the Item passed; The GetParentItem process then indexes a second ItemArray from the AIrayOflItemArrays (307) using the ParentArrayIndex (318) member of the ParentItemAddress member (316) of the ItemArray (311) passed or first indexed and 20 indexes an Item (322) from the second ItemArray indexed using the ItemIndex member (319) of the ParentItemAddress member (316) of the ItemArray (311) passed or first indexed. The process then exits returning the Item indexed. If either members of the ParentItemAddress member (3 16) of the ItemArray (3 11) passed or first indexed have a value of NONE then the process exits returning NULL.
2s Data populator Processes Populate 30 The Populate process (407) is passed
M&C P51841GB
an ItemAddress (317) holding the address within the ArrayOfItemArrays (307) of the calling Item, both members of ItemAddress retaining a value of NONE if the Populate process is called by the HandleEvents process (416); 5 NestDepth which is an integer value holding the value of the NestDepth member (332) of the calling Item, or a value of zero if the Populate process is called by the HandleEvents process (416); a List of text strings holding the full paths and filenames of a list of files and 0 folders; The Populate process creates a new ItemArray (311), sets the NestDepth member (321) of the new ItemArray equal to the NestDepth passed and the ParentItemAddress member (316) equal to ItemAddress passed, adds the new ItemArray to the 15 ArrayOfItemArrays (307) and sets the ParentArrayIndex member (318) of ItemAddress equal to the index of the new ItemArray within the ArrayOfLtemArrays; it then iterates through the List and for each list member: 20 creates a new Item (322), adds the new Item to the new ItemArray and sets the Owndndex member (331) of the new Item equal to the index of the new Item within the new IternArray, sets the NestDepth member (332) equal to NestDepth, the Filename member (323) equal to the list member, the ParentIArrayIndex member (330) to the ParentArrayIndex member (318) of ItemAddress, the Title 25 member (324) equal to the value returned from a call to the GetFileTitle process (146) passing ListMember, sets the ItemIndex member (319) of ItemAddress equal to the OwnIndexMember (331) of the new Item and then calls the IsDirectory process (143) passing ListMember; 30 and if the IsDirectory process returns true then
M&C P5 1841 GO
l calls the FillListWithDirectoryItems process (144) passing ListMember, and calls the Populate process (407) recursively passing ItemAddress, NestDepth +1 and the string list obtained from FillListWithDirectoryItems; A single call to the Populate process (407) by the HandleEvents process (416) causes the ArrayOfItemArrays (307) to represent the entire branch of the file system passed, the zero element representing the root folder, the remaining elements representing all other 0 folders. Arrange The Arrange process (408) operates on the ArrayOfItemArrays (307) iterating through 5 the ItemArrays within and for each ItemArray: assigns values to the ThreeDimemsionalCoordinate member (327) of each of the Items within, so that collectively they form a coherent spatial configuration, and sets the TiltMatrix member (314) of the ItemArray to a slight tilt (visually more 20 revealing) GetNextFileImage The GetNextFileDnage process (426) is called by the HandleEvent process (416) each 25 time it receives an II)LE event. The purpose of the GetNextFileage process (426) is to initiate obtaining an image from the contents of a single file each time there is an IDLE event until all images of content have been obtained. Because reading the content of files is time consuming, it is carried out after the display is activated and images of content for each item appear on the display as they are obtained.
30 The GetNextFileknage process (426) makes use of the g_ArraydexLoading (308) and g_ItemIndexLoading (309) global variables to keep track of its position as it iterates
M&C P51841GB
through every Item of even ItemArray in the ArrayOfItemArrays (307), processing one Item during each IDLE event in the following manner: calls the CanDisplayFile process (145) and if CanDisplayFile retunes true then increments the g_NumLoading (310) global variable and calls the GetFileImage process (147) which initiates obtaining an image for that Item.
The GetNextFileImage process (426) also checks on entry that the value of 0 g_NumLoading (310) has not risen to high and if it is too high then the GetNextFileImage process returns without any further processing.
OnGotFileImage 5 The OnGotFileImage process (425) is called by the HandleEvent process (416) each time it receives an GOTFILEIMAGE event which happens when an image of the content of a file is ready after a previous call to the GetFileDnage process (147).
The OnGotFileImage process (425) is passed: 20 a reference to an Item which is the Item whose image is ready, a Bitmap holding the image which is ready, and a Size variable holding the Size of the Bitmap.
The OnGotFileImage process (425) decrements the g_NumLoading (310) global variable and then creates a new Bitmap (126) using the Bitmap(Size) constructor (130) 25 passing the size used for reference bitmaps, adds the new Bitmap to the ReferenceImageArray (306), sets the ImageIndex member (325) of the Item passed equal to the index of the new Bitmap within the l;LeferenceImageArray, transfers and stretches the Bitmap passed onto the new reference Bitmap by calling the StretchToFit process (133) and invalidates the Item whose image is ready by calling the invalidate 30 process (415). The next time that Item is Drawn, the DrawItem process (413) will fetch the reference Bitmap referenced by the valid ImageIndex member (325) of that Item.
M&C P51841GB
Visual memory support Figure 26 is a schematic block diagram showing the structure of the Visual Memory Support (409) and how the parts of it contain (340, 341, 342) each other.
The Visual Memory Support globals (343) are initialized when the Core engine (405) is created and comprise: the ArrayOfZArrays (344) which is an array of ZArrays, each Zarray (353) lo holding positional and Z order information about the Items within an ItemArray (311);
the VisualItemsArray (435) which is an array of VisualItems, each VisualItem (362) holding an image of the content of a file or folder exactly as currently 15 displayed; g_pItemArrayShowing (346)) which is apointer initialised to NULL and when not equal to NULL, points to the ItemArray (311) which represents the root folder currently displayed; g_pItemShowing (347) which is a pointer initialized to NULL and when not equal to NULL, points to the Item (322) whose file is currently displayed to fill the Display area (121); 25 g_ShowingNestDepth (348) which is an integer initialised to zero, and holds the nest depth of the ItemArray (311) which represents the root folder currently displayed with respect to the ItemArray which is the zero element of the ArrayOfltemArrays (307); so g_pWindowMemBitmap (349) which is a pointer initialised to NULL and when not equal to NULL, points to a Bitmap (126) in memory onto which the root
M&C P51841GB
three dimensional virtual space is be drawn, the Bitmap being transferred to the display when complete in one bit block transfer operation; g_pCapturedItem (350) which is a pointer initialised to NULL and when not 5 equal to NULL, points to the Item (322) whose display is holding the mouse capture during a drag operation of the pointing device; g_pCapturedItemArray (351) which is a pointer initialised to NULL and when not equal to NULL, points to the ItemArray (311) whose display is holding the i mouse capture during a drag operation of the pointing device; g_bCaptureOn (352) which is a boolean value initialised to false and when true indicates that a mouse drag is currently taking place.
5 g_WindowSize (366) which is a Size value holding the size of the display area in which the invention operates.
The ZArray structure (353) presents the format for storing information about positional information and Z order of Items within an ItemArray (311) and contains; an array of Zelements (354) each associated with an Item (322) within the ItemArray; a bOrientationValid member (355) which is a boolean value initialized to false 25 and when true indicates that the ZArray is valid and the information it holds can be used without recalculation; a RotationMatrix member (356), which is a 3D transformation matrix initialized to unity, and represents the net rotation of the 3D virtual space, used to avoid 30 repeated recalculation of the product of the Spin and Tilt matrix members of the ItemArray;
M&C P51841GB
a pOnTopElement member (357), which is a pointer initialised to NULL and when not equal to NULL, points to the Item (322) which the user has selected to be presented 'on top' in the display, that is visible in front of all the others.
5 The ZElement structure (358) represents the format for storing positional and Z order information about each Item within the IternArray (311) with which it is associated and contains: an ItemIndex member (359) which is an index initialised to NONE, and when 10 not equal to NONE is an index into the associated IternArray, of the Item (322) which the ZElement represents; a NodePosition member (360), which is a Point value (x and y co-ordinates both initialised to zero) which the unscaled position on the screen at which the Item 5 (322) it represents is drawn to the screen; a Zvalue member (361), which is an integer initialized to zero, and holds the Z position, that is position perpendicular to the display surface, within the virtual space of the Item (322) it represents; The VisualItem structure (362) represents the format for storing an image of the content of a file or folder exactly as currently displayed and contains: a bBitmapValid member (363)) which is a boolean value initialized to false and 25 when true indicates that the pMernBitmap member (365) holds an image which is currently valid, and therefore can be used without any further drawing operations being performed on it; a bBitmapSize member (364) which is a Size value (width and height both 30 initialized to zero) and holds the size of the image;
M&C P51841GB
a pMernBitmap member (365) which is a pointer initialised to NULL and when not equal to NULL, points to a Bitmap which has been created to hold the image; Display unit processes DrawItemArray. 0 The DrawItemArray process (410) is passed an ItemArray (311), a Bitmap (126) and a Size and is called by the HandleEvents process (416) when it receives a WM_PAINT message or the return value from the ItemArrayGetMouse process (417) when handling mouse events is true, it is also called by the DrawItem process (413) when the Item being drawn represents a folder.
15 The DrawItemArray process (410) calls the FillColor member function (131) of the Bitmap passed to paint a background and then draws the ItemArray passed, onto the
Bitmap passed, by calling the GetZArray process (411) to get a ZArray (353) and then iterating through that ZArray and for each ZElement (358) in the ZArray: 20 calculates a position based on NodePosition member (360) of the ZElement, scaled to fit the view area (indicated by the Size passed), offset to place the origin in the centre and further offset according to the value of the ScrollOffset member (315) of the ItemArray passed, 25 calculates a default display size for Items displayed based on the Size passed, draws the title of the Item indexed by the ItemIndex member (359) of the
ZElement at the position calculated, obtaining the title from the Title member of the Item indexed and using the Kidnap member functions FillColor (131), 30 SetPen (134), MoveTo (135), LineTo (136), Rectangle (137), SetFont (138), SetTextColor (139), SetTextbackgroundColor (140), GetTextSize (141) and
M&C P51841GB
TextOut (142) to draw the text at a suitable size and with a suitable frame around it, and calls the DrawItem process (413) passing the same calculated position, the 5 same passed Bitmap and the default display size calculated.
If the pOnTopElement member (357) of the ZArray has a value other than NULL, then one more iteration is carried out using the ZElement it points to, in order to ensure that it is displayed on top.
0 A working formula for determining a suitable text size for Item titles is TextHeight - 15 minus (3 times the value of the NestDepth member (321) of the ItemArray being drawn minus g_ShowingNestDepth (348)) GetZArray. The GetZArray process (411) is passed an ItemArray (311) and returns a valid ZArray (353) holding information about the screen position and Z order of the images 20 representing files and folders within the 3D virtual space representing the ItemArray passed. The GetZArray process operates as follows: if the ZArrayIndex member (320) of the ItemArray passed is not NONE then uses the ZArrayIndex member (320) of the ItemArray to index a ZArray from the ZArraysArray (344) and if the bOrientationValid member (355) of the ZArray obtained has a 30 value of true then returns the ZArray obtained;
M&C P5 1841 GB
:! } if the ZArrayIndex member (320) of the ItemArray passed is equal to NONE then { s creates a new ZArray (353) and adds it to the ZArraysArray (344)setting the ZArrayIndex member (320) of the ItemArray equal to the index of the new ZArray in the ZArraysArray; if the ZArray is empty then 0 { fills the ZArray with one ZElement (358) for each Item in the ItemArray passed, setting the ItemIndex member (359) of each new ZElement to the index of its associated Item in the ItemArray passed;.
5 next the GetZArray process calculates the RotationMatrix member (356) of the Zarray by pre-multiplying the SpinMatrix member (313) of the Zarray by the TiltMatrix member (314) ofthe Zarray and for each ZElement (358) in the ZArray 20 { uses the ItemIndex member (320) of the ZElement to index an Item from the ArrayOfItemArrays (307) and pre-multiplies the ThreeDimemsionalCoordinate member (327) of the Item indexed, by the RotationMatrix member (356) of the Zarray to calculate a ThreeDimemsionalCoordinate value representing the Items 25 position in the virtual space as seen by the user, the NodePostion member (360) of the ZElement is set to the x and y values of the ThreeDimemsionalCoordinate value calculated and the ZValue member (361) of the ZElement is set to the z value of the ThreeDimemsionalCoordinate value calculated; 30 finally the GetZArray process calls the ZSort process (412) passing the ZArray obtained or created sets the bOrientationValid member (355) of the ZArray to true and exits resuming the same ZArray.
M&C P5 1 841GB
ZSort The ZSort process (412) is passed a ZArray (353) and sorts the elements of that ZArray 5 by using a traditional shuttle sort with lower and upper thresholds. The order of sorting being determined by the ZValue members (361) of the Zelements (358) within the ZArray. DrawItem The DrawItem process (413) is passed an Item (322) which is to be drawn, a Bitmap (126) to draw on, a point value holding the position on the Bitmap at which the Item is to be drawn, and a Size value indicating the default size for Items drawn onto the Bitmap. The DrawItem process calculates a Size value whose width is the product of the width of the Size passed and the ImageSizeRatioX member (328) of the Item passed and whose height is the product of the height of the Size passed and the ImageSizeRatioY member (329) of the Item passed (this is the Size at which the Item will be drawn) and 20 then calls GetVisualItem (414) passing the Size calculated to obtain a VisualItem (362) if the bBitmapValid member (363) of the VisualItem has a value of true then transfers the pBitmap member (365) of the VisualItem directly to the Bitmap 25 passed at the position passed by calling the BlitTo method (132) of the Bitmap passed and exits; if the ItemArraydex member (326) of the Item passed is not NONE then 30 indexes an ItemArray (311) from the ArrayOlltemArrays (307) using the ItemArrayIndex member (326) of the Item passed and calls the DrawIternArray
M&C P51841GB
process (410) passing the ItemArray indexed, the pBitmap member (365) of the VisualItem and the Size value calculated; otherwise if the ImageIndex member (325) of the Item passed is not NONE then 5 { indexes a Bitmap from the ReferenceImageArray (306) using the ImageIndex member (325) of the Item passed and stretches the indexed Bitmap onto the pBitmap member (365) of the VisualItem by calling its StretchToFit method (133);
0} otherwise paints a blank pattern onto the pBitmap member (365) of the VisualItem by calling its FillColor method (131); 5} Finally DrawItem process draws a frame onto the pBitmap member (365) of the VisualItem using its member functions, sets the bBitmapValid member (363) of the VisualItem to a true value, transfers the pBitmap member (365) of the VisualItem directly to the Bitmap passed at the position passed by calling the BlitTo method (132) 20 of the Bitmap passed and exits; GetVisualItem. The GetVisualItem process (414) is passed an Item (322) and a Size value and: 25 if the VisualItemIndex member (333) of the Item passed has a value of NONE then { creates a new VisualItem (362) and adds it to the VisualItemsArray (345) setting the VisualIternIndex member (333) of the Item passed equal to the index of the new VisualItem in the VisualItemsATay; so} otherwise
M&C P51841GB
indexes an VisualItem (362) from the VisualItemsArray (345) using the VisualItemIndex member (333) of the Item passed and if the BitrnapSize member (364) of the VisualItem indexed is equal to the Size 5 passed then exits returning the VisualItem indexed; otherwise deletes the pMernBitmap member (365) of the VisualItem indexed; The GetVisualItem process then creates a new Bitmap (126) for the pMemBitmap is member (365) of the VisualItem created or indexed by calling the Bitmap(Size) constructor (130) passing the Size value passed, sets the BitmapSize member (364) of the VisualItem equal to the Size passed and the bBitmapValid member (363) to false and exits returning the VisualItem created or indexed.
20 Invalidate The Invalidate process (415) is passed an Item (322) and an ItemAray (311) and is called when for any reason when due to some aspect of dynamic response an Item or ItemAray has changed its appearance.
25 One of the passed parameters is always NULL and the Invalidate process operate on the other non NULL parameter, this allows it to be called with either an Item or an ItemAray as the operand. The purpose of the process is to set the bBitmapValid member (363) of the VisualItem (362) holding an image of the operand and all VisualItems holding images of its ancestors to a false value, forcing them to be redrawn 30 by the DrawItem process (413) the next time that the display is redrawn.
The Invalidate process operates as follows:
M&C P51841GB
if the Item passed is not NULL then { if the VisualItemIndex member (333) of the Item passed is not NONE then indexes an VisualItem (362) from the VisualItemsArray (345) using the VisualItemIndex member (333) of the Item passed, and sets the bBitmapValid member (363) of the VisualItem indexed to false; 0 (N.B. if there is no VisualItem then by being non-existent it is implicitly invalid); the process then calls the GetParentItem process (427) passing the parameters passed to itself and if the return from GetParentItem is not NULL then makes a recursive call to itself passing the Item returned by the call to GetParentItem The recursive calls by the Invalidate process ensure that all ancestors of the Item or 20 IternArray invalidated are also invalidated and terminate when the call to GetParentItem returns a NULL.
GetZElement 25 The GetZElement process is passed a ZArray and an Item and returns the ZElement associated with the Item passed. It does this by iterating through all the ZElements in the ZArray passed and for each ZElement: if the ItemIndex member of the ZElement s equal to the Ownlndex member of 30 the Item passed then exits resuming that ZArray
M&C P51841GB
Control unit processes 5 HandleEvents The HandleEvents (416) process is called by the SendEvent process (127) of the host application (404) it is the only call made by the host application to the Core Engine (405) and is passed a message code describing the event, a set of parameters (described lo below) and a Bitmap representing the display on which the Core Engine can draw any changes that result from the event handled. When redrawing the display, the process uses a memory Bitmap referenced by g pWindowMemBitmap (349) which is passed to the DrawItemArray (410) process, this Bitmap is then transferred to the display device in a single BitBlit operation, thus avoiding the flicker cause by sequences of drawing 5 operation being made directly to the screen.
Figure 27. is a flow chart showing steps in the operation of the HandleEvents process (416) details of each step according to the box in which they appear are as follows: 20 530. The HandleEvents process is called and is passed the following named parameters: message which is an integer holding a message or event code, x and y which are integers used to pass position and size information, pVoidl which is a pointer used to reference message specific information, 25 a Bitmap and pVoid2 which is a pointer used to reference further message specific information, operation then continues from the box numbered (531).
M&C P5 1841 GO
531. represents the sequence of execution being determined by the value of the message parameter and following the direction indicated by the box showing the value that matches the message: 5 532. message has the value INITIALISE, continues from (536); 533. message has the value WM_DROPFILES, continues from (537); 534. message has the value WM_SIZE continues from (538); 535. message has none of the above values continues from (541); lo 536. In response to INITIALISE, Initialises all global variables setting g_pItemArrayShowing (346), g_pItemShowing (347), g_pCapturedItem (350) and g_pCapturedItemArray (351) equal to NI]LL; setting g bCaptureOn (352) equal to false; and setting g_ArrayIndexLoading (308), g_ItemIndexLoading (309), g_NumLoading 5 (410) and g_ShowingNestDepth (348) equal to O. the process then exits.
537. In response to DROPFILES, calls the Populate process (407) passing an ItemAddress (317) with both members set to NONE (indicating that there is no parent), a StringList de-referenced from the pVoidl parameter passed and a NestDepth value of So zero, calls the Arrange process (408), points g_pItemArrayShowing (346) at the zero element of ArrayOfItemArrays (307), and sets g_ShowingNestDepth (348) to zero, operation then continues from the box labelled 'Draw' and numbered (558) 538. In Response to WM_SIZE, if g_pWindowMemBitmap (349) does not have a null 25 value then 539. deletes g_pWindowMemBitmap (it is now the wrong size); 540. sets g_WindowSize (366) to have a width equal to the x parameter passed and a height equal to the y parameter passed.
M&C P51841GB
i (N.B a new Window Bitmap of the correct size will be created in step at box 556) s operation then continues from the box labelled 'Draw' and numbered (558) 541. if g_pItemArrayShowing (346) does not have a null value then operation then continues from the box numbered (542) otherwise the process exits.
5 542. represents the sequence of execution being determined by the value of the message parameter and following the direction indicated by the box showing the value that matches the message: 543. message has the value BACKBUTTON, continues from (550); 20 544. message has the value GOTFILEIMAGE, continues from (551); 546.message has the value WM_PAINT, continues from the box labelled 'Draw' and numbered (558) 547. message has any of the following values, WM_MOUSEMOVE, WM_LBUTTONDOWN, WM_LBUTTONUP,
25 WM_RBUTTONDOWN, WM_RBUTTONUP,
WM_LBUTTONDDBLCLK, WM_1lBUTTONDDBLCLK LBUTTONDDRAG, RBUTTONDDRAG; continues from (552); 548. message has the value IDLE, continues from (553); 549. message has none of the above values, exits;
M&C P51841GB
550. response to BACKBUTTON calls the I3ack process (424) and then continues from the box labelled 'Draw' and numbered (558) 551. In response to GOTFILEIMAGE calls the OnGotFileIinage process (425) passing 5 an Item de-referenced from the pVoidl parameter passed, a Size value with its width set to the x parameter passed and its height set to the y parameter passed and a Bitmap de-
referenced from the pVoid2 parameter passed, the process then continues from the box labelled 'Draw' and numbered (558) 0 552. response to any mouse message creates a local boolean variable named bRedraw, calls the ItemArrayGetMouse process (417) passing g pItemArrayShowing (346), g_WindowSize (366), a Point value representing the x and y parameters passed and the message passed, setting bRedraw equal to the value returned from ItemArrayGetMouse and; 553. if bRedraw has a true value; continues from the box labelled 'Draw' and numbered (558) 20 otherwise the process exits.
553. In response to IDLE calls the GetNextFileLnage process (426) and exits.
554. In response to GOTFILEIMAGE calls the OnGotFileImage process (425) and continues from the box labelled 'Draw' and numbered (558) 558. The box labelled 'Draw', operation continues from the box numbered (542) 555. yes, if g_pWindowMemBitmap (349) does not have a null value;
M&C rs l 841 GO 556. create a new Bitmap (126) using the Bitmap(Size) constructor (130) and pass it, a Size value whose width is set to the x parameter passed and whose height is set to y parameter passed, set g_pWindowMemBitmap (349) to point at the new Bitmap; 5 557. call the FillColor method (131) of the Bitmap that pWindowMemBitmap points at to paint a background, call the DrawItem Array process (410) passing
gItemArrayShowing (346), g_pWindowMemBitmap and g_WindowSize, call the BlitTo method (132) of the Bitmap that pMemBitmap points at, passing a Point value with x and y co-ordinates set to zero and g pWindowMemBitmap as 0 parameters. ItemArrayGetMouse The ItemArrayGetMouse process (417) handles all mouse events occurring over the 5 display of a three dimensional virtual space representing an ItemArray (311). The role of the IternArrayGetMouse process is to determine if the mouse is positioned over the image of an Item (322) within the display of the three dimensional virtual space, in which case it calls the ItemGetMouse process (422), otherwise it calls the ItemArrayHandleMouse process (420).
The ItemAIrayGetMouse process is called and is passed the following parameters: an ItemArray (31 1) which is to receive the mouse event, a Size value indicating the displayed size of the ItemArray; 25 a Point value indicating the position of the mouse within the display area of the ItemArray, or the amount the mouse has been dragged in the case of LBUTTONDDRAG and RBUTTONDDRAG events; a message which is an integer holding a message or event code; 30 The process operates by obtaining a ZArray (353) from the return value of a call to the GetZArray process (411) passing the ItemArray passed, it then iterates through that
M&C P5 1841 GO
ZArray backwards (the opposite direction to that in the DrawItemAray process (410)) and for each ZElement (358) within it: calls the HitTest process (418) passing the ItemArray and point passed and the 5 ZElement and if the HitTest process returns true then calculates a position based on NodePosition member (360) of the ZElement and a default display size for Items displayed based on the Size I o passed in the same manner as the DrawIternArray process (410), indexes an Item from the IternArray passed using the ItemIndex member (359) of the ZElement and calls the ItemGetMouse process (422) passing the Item indexed, the default display size calculated, the position 5 calculated and the message passed and then exits returning the value returned from the ItemGetMouse process; if the HitTest process never returned a true throughout the iteration of the ZArray then 20 the process calls the ItemArrayHandleMouse process (420) passing the same parameters passed to itself and then exits returning the value resumed from the ItemArrayHandleMouse process.
However the simple iteration described above is modified to handle any Item which is 25 'On top' (that is it has been caused by a mouse click to be displayed in front of all others regardless of its position in the three dimensional virtual space) and is also modified to operate mouse capture.
The following operations are carried out before carrying out the general iteration of the ZArray described above and modify it as described below: if g_bCaptureOn (352) has a value of true then {
M&C P5 1841 GO
it, if g_pCapturedItemArray (351) points at the ItemArray passed then calls the ItemArrayHandleMouse process (420) passing the same parameters passed to itself and then exits returning the value returned 5 from the ItemArrayHandleMouse process; otherwise indexes an Item from the ItemArray passed using the ItemIndex member (359) of the ZElement which the pOnTopElement (357) of the ZArray points at and calls the ItemGetMouse process (422) passing the Item indexed, the default display size calculated, the position calculated and the message passed and then exits returning the value returned from the ItemGetMouse process; (N.B. if it is not the IternArray passed which has the capture then it must be the 'OnTop' Item since the mouse down event which initiates capture also causes the 'OnTop' effect) otherwise if the pOnTopElement (357) of the ZArray is not NULL 25 performs one pass of the iteration described above using the ZElement that the pOnTopElement of the ZArray points at; the process then carries out the general iteration of the ZArray described above.
} HitTest
M&:C P51841GB
The HitTest process (418) determines if the mouse is over the image of a Item associated with a single ZElement (358) within the display of a three dimensional virtual space representing an ItemArray (311). It is passed the following parameters: 5 an ItemArray for which the call is being made; a point value indicating the position of the mouse within the display area representing the ItemArray passed; a Size value indicating the displayed size of the ItemArray passed; the ZElement for which a hit is being tested; and operates as follows: calculates a position based on NodePosition member (360) of the ZElement and a default display size for Items displayed based on the Size passed in the same manner as 5 the DrawItemArray process (410), indexes an Item (322) from the ItemArray passed using the ItemIndex member (359) of the ZElement passed, calculates a Size value whose width is the product of the width of the Size passed and the ImageSizeRatioX member (328) of the Item indexed and whose height is the product of the height of the Size passed and the ImageSizeRatioY member (329) of the Item indexed in the same 20 manner as the DrawItemProcess (413) and calculates a rectangle whose top left corner is the position calculated and whose width and height are equal to those of the Size value calculated, if the point passed is within the rectangle calculated then exits returning true; otherwise 30 exits returning false.
GetZElement
M&C P51841GB
The GetZElement process (419) returns the ZElement (358) associated with a given Item (322) within a given ZArray (353).
5 It is passed a ZArray in which the ZElement is sought; and an Item whose associated ZElement is sought. It iterates through the ZArray and for each ZElement: if the ItemIndex member (359) of the ZElement is equal to the OwnIndex member (331) ofthe Item passed then return that ZElement if no match was found during the iteration then it returns NULL.
5 ItemArrayHandleMouse The ItemArrayHandleMouse process (420) is called by the IternArrayGetMouse process (417) when the mouse is not positioned over any Item within the ItemArray for which it has been called, that is it handles all mouse events occurring over unoccupied virtual 20 three dimensional space. Its actions are to spin or tilt the virtual three dimensional space in response to a left button drag, scroll or translate the display in response to a right button drag and in response to a left button double click makes the ItemArray being handled into the root folder displayed.
25 Figure 28 is a flow chart showing steps in the operation of the ItemArrayHandleMouse process (420) details of each step according to the box in which they appear are as follows: 595. The ItemArrayHandleMouse process is called and is passed the following 30 parameters: an ItemArray (311) to which is to handle the mouse event,
M&C P51841GB
a Size value indicating the displayed size of the ItemArray a Point value indicating the position of the mouse within the display area of the ItemArray, or the amount the mouse has been dragged in the case of LBUTTONDDRAG and RBUTTONDDRAG events; 5 a message which is an integer holding a message or event code; 596. declares bRedraw as a boolean local variable, sets it to false and continues operation from the box numbered (597) 0 597. if message has the value WM_LBUTTONDOWN or WM_RBUTTONDOVVN then 598. sets g_bCaptureOn (352) to a 'true' value, set g_pCapturedItemArray (351) to point at the ItemArray passed, sets g_pCapturedItem (350) to a null pointer 5 value, sets bRedraw to a 'true' value and continues operation from the box numbered (606); otherwise 20 599. if message has the value LBUTTONDRAG and g_bCaptureOn (352) has a 'true' value and g_pCapturedItemArray (351) points at the ItemArray passed then 600. calls the SpinAndTilt process (421) passing the ItemArray, Size and point passed, sets bRedraw to a 'true' value and continues operation from the box 25 numbered (606).
otherwise 601. it message has the value RBUTTONDRAG and g_bCaptureOn (352) has a 'true' 30 value and g_pCapturedItemArray (351) points at the ItemArray passed then
M&C P5 1841 GO
602. increases the x and values of the ScrollOffset member (315) of the ItemArray passed, by the x and y values of the point passed scaled in the same manner as in the DrawItemArray (410), ItemArrayGetMouse (417) and HitTest (418) processes, calls the Validate process (415) passing a null 5 pointer value and ItemArray passed, sets bRedraw to a 'true' value and continues operation from the box numbered (606); otherwise 0 603. if message has the value LBUTTONDBLCLK then 604. set g_pItemArrayShowing (346) to point at the ItemArray passed, sets g_ShowingNestDepth (348)equal to the NestDepth member (321) of the ItemArray passed, sets bRedraw to a 'true' value and continues operation from 5 the box numbered (605); otherwise 605. sets g_bCaptureOn (352) to a 'false' value, sets g_pCapturedIternArray (351) to a 20 null pointer value, sets g_pCapturedItem (350) to a null pointer value and continues operation from the box numbered (606).
606. exits the ItemArrayHandleMouse process resuming bRedraw; SpinAndTilt The SpinAndTilt process (421) is called by the ItemArrayHandleMouse process (420) and if the horizontal movement of the mouse if greater than the vertical movement of 30 the mouse then rotates the three dimensional virtual space displayed with respect to the user
M&C P51841GB
and otherwise tilts the axis of rotation of the three dimensional virtual space towards or away 5 from the user It is passed the following parameters: the ItemArray ( 311) to which is to be rotated; 0 a Size value indicating the displayed size of the ItemArray; a Point value indicating amount the mouse has been dragged; and operates as follows: 5 indexes a ZArray (353) from the ZArraysArray (344) using the ZArrayIndex member (320) of the ItemArray passed (there will be a ZArray indexed because an ItemArray carmot receive messages until it has been drawn at least once), sets the bOrientationValid member (355) of the ZArray indexed to false and if the pOnTopElement member (357) of the ZArray indexed, is not NULL then 20 { indexes an Item (322) from the AIrayOfftemArrays (307) using the ItemIndex member (359) of the ZElement that the pOnTopElement member (357) of the ZArray indexed points at and calls the Select process (423) passing the Item indexed and a false value (this cancels any 'OnTop' effect); 25} the process then branches depending on whether the horizontal movement of the mouse is greater than whether the vertical movement of the mouse as follows: if the square of the x value of the point passed is greater than the square of the y value of 30 the point passed then
M&:C PS1841GB
calculates a radian value R based on the x value of the point passed and scaled with respect to the width value of the Size passed and the mouse sensitivity, sets a value CosR equal to the cosine of R. sets a SinR value equal to the sine of R and, sets a matrix RY to equal a three by three matrix with the following values: CosR O -SinR 0 1 0 SinR O CosR lo premultiplies the SpinMatrix member (313) of the ItemArray passed, by RY; otherwise calculates a radian value R based on the y value of the point passed and scaled 5 with respect to the height value of the Size passed and the mouse sensitivity, sets a value CosR equal to the cosine of R. sets a SinR value equal to the sine of R and, sets a matrix RY to equal a three by three matrix with the following values: 1 0 0 20 0 CosR - SinR O SinR CosR premultiplies the Tilt Matrix member (314) of the ItemArray passed, by RY; } 25 the process then call the Invalidate process passing a NI]LL Item value and the ItemArray passed and exits.
ItemGetMouse 30 The ItemGetMouse process (422) is called by the ItemArrayGetMouse process (417) when the mouse is positioned over an Item (322) within the ItemArray (311) for which it has been called, and handles events destined for that Item. Its actions are to call the
NJ&C P51841GB
Select process (423) in response to a mouse down event, resize the Item in response to dragging its right or bottom edge, present a full view of the Item in response to a left button double click and if it is a folder then calls the ItemArrayGetMouse process (417) for the ItemArray representing that folder. Like the IternArrayGetMouse process the 5 ItemGetMouse process is complicated by its role in the operation of the capture mechanism. Figure 29 is a flow chart showing steps in the operation of the ItemGetMouse process (422), details of each step according to the box in which they appear are as follows: 618. The ItemGetMouse process is called and is passed the following parameters: an Item which is to receive the mouse event, a Size value which is the default Size for Items within the ItemArray to which 5 the Item belongs; a Point value indicating the position of the mouse within the display area of the Item, or the amount the mouse has been dragged in the case of LBUTTONDDRAG and RBUTTONDDRAG events; a message which is an integer holding a message or event code; and operates as follows: 619. calculates a Size value whose width is the product of the width of the Size passed and the ImageSizeRatioX member (328) of the Item passed and whose height is the 25 product of the height of the Size passed and the ImageSizeRatioY member (329) of the Item passed (this is the Size at which the Item is drawn by the DrawItem process (413)) sets a local boolean variable bRedraw to a 'false' value and continues operation from the box numbered (620); 30 620. if the message passed has the value WM_LBUTTONDOWN or WM_R13UTTONDOWN then
M&C P51841GB
621. calls the Select process (423) passing the Item passed and a 'true' value, sets bRedraw to a 'true' value and continues operation from the box numbered (622);
s otherwise continues operation from the box numbered (624); 622. if the x value of the point passed is greater than the width value of the Size value 10 calculated minus BORDERWIDTH, or the y value of point is greater than the height value of the Size value calculated minus BORDERWIDTH (where BORDERWIDTH has a value large enough for the user to have a reasonable margin of error when the locating the edges of a displayed Item) then 15 632. sets g_bCaptureOn (352) to a 'true' value, sets g_pCapturedItem (350) to point at the Item passed, sets g_pCapturedItemArray (351) to a NULL, sets blledraw to a 'true' value and continues operation from the box numbered (634) So otherwise continues operation from the box numbered (625) 624. if g_bCaptureOn (352) has a 'true' value and g_pCapturedItem (350) points at the 25 Item passed then continues operation from the box numbered (631) otherwise continues operation from the box numbered (625)
/ M&C P51841GB
625. if the ItemArrayIndex member (326) of the Item passed has a value which is not NONE then 626. indexes an ItemArray (311) from the ArrayOfltemArrays (307) using the s ItemArrayIndex member (326) of the Item passed, calls the IternArrayGetMouse process (417) passing the ItemArray indexed, the calculated Size, and the point and message values passed, sets bRedraw equal to the return value from ItemArrayGetMouse and continues operation from the box numbered (634); otherwise continues operation from the box numbered (628) 5 628. if the message passed has the value WM_LBUTTONDBLCLK then 629. sets g_pItemShowing (347) to point at the Item passed, calls the ShowFile process (148) passing the Item passed and its Filename member (323) and continues operation from the box numbered (630) 630. sets g_bCaptureOn (352) to a 'false' value, sets g_pCapturedItem (350) equal to NULL, sets g pCapturedItemArray (351) to NULL and continues operation from the box numbered (634) 2s 631. if the message passed has the value LBI]TTONORAG then 632. sets the ImageSizeRatioX member (328) of the Item passed equal to the sum of the width value of the calculated Size value and the x value of the point passed, divided by the width value of the Size value passed, sets the 30 ImageSizeRatioY member (329) of the Item passed equal to the sum of the height value of the calculated Size and the y value of point passed, divided
M&C P51841GB
by the height value of Size value passed, and continues operation from the box numbered (633); otherwise continues operation from the box numbered (630) 633. calls the Invalidate process (415) passing the Item passed and a null pointer value and continues operation from the box numbered (634); 634. exits the ItemGetMouse process returning bRedraw; Select The Select process (423) operates the 'OnTop' effect which allows any one Item (322) within an ItemArray (311) to have the status of appearing on front of all others regardless of its Z position in the three dimensional virtual space in which it is displayed. The recursive action of the ItemGetMouse process (422) which calls the 20 Select process operates the requirement that if an Item is made 'OnTop' within its parent ItemArray then all of its ancestor Items must be made 'OnTop' within their parent ItemArrays, however the Select process must handle the de-selection of the descendants of a folder Item which is deselected.
25 The Select process is passed the Item which is to be selected and a boolean value indicating 'true' if the Item is to be selected or 'false' if it is to be deselected; and operates as follows: 30 Indexes the parent IternArray of the Item passed from the ArrayOfftemArrays (307) using the ParentArrayIndex member (330) of the Item passed, obtains a ZArray (353) from a call to the GetZArray process (411) passing the parent ItemArray indexed and
Nl&C P51841GB if the pOnTopElement (357) of the ZArray obtained has a value of NULL (there is no OnTop' Item) then { 5 if the boolean value passed is true then obtains a ZElement (358) from a call to the GetZElement process (419) passing the ZArray obtained and the Item passed, sets the pOnTopElement (357) of the ZArray obtained to point at the ZElement 0 obtained (this makes the Item passed 'OnTop'), calls the Invalidate process (415) passing the parent ItemArray indexed and exits; (N.B. ancestors of the Item passed will have been set on top by making their own calls to the Select process as the mouse down event is 5 propagated through them before being handled by the Item passed.) otherwise exits (no need to cancel an 'OnTop' state which doesn't exist); 20} if it has not exited the process it continues as follows: if the boolean value passed is true then 25 if the ItemIndex member (359) of the ZElement that the pOnTopElement (357) of the ZArray obtained points at is equal the OwnIndex member (331) of the Item passed then exits (it is already on top); otherwise (it is not already on top)
M&C P5 1841 GB
obtains the 'OnTop' Item by indexing Tom the parent ItemArray indexed using the ItemIndex member (359) of the ZElement that the pOnTopElement (357) of the ZArray obtained points at, makes a recursive call to the Select process passing the 'OnTop' Item indexed 5 and a boolean value of false (this deselects the Item currently on top), obtains a ZElement (358) from a call to the GetZElement process (419) passing the ZArray obtained and the Item passed, sets the pOnTopElement (357) of the ZArray obtained to point at the ZElement 0 obtained (this makes the Item passed 'OnTop7), calls the Invalidate process (415) passing the Item passed and exits; otherwise (the boolean value passed is false) 5 { calls the Invalidate process (415) passing the parent ItemArray indexed and if the Itemdex member (359) of the ZElement that the pOnTopElement (357) of the ZArray obtained points at is not equal the OwnIndex member (331) of the Item passed then 20 { sets the pOnTopElement (357) of the ZArray obtained to NULL and exits (it was not the one on top); otherwise (it is the one on top) if the ItemArrayIndex (326) of the Item passed is NONE then sets the pOnTopElement (357) of the ZArray obtained to NULL and exits (the on top Item was a file and has no descendants); 30}
M&C P5 1841 GB
) if it has not exited (the boolean value passed is false, it is the one on top and it is a folder) the process continues as follows: sets the pOnTopElement (357) of the ZArray obtained to NULL, indexes the child 5 ItemArray of the Item passed from the ArrayOflternArays (307) using the ItemArrayIndex member (326) of the Item passed, obtains a child ZArray (353) from a call to the GetZArray process (41 1) passing the child ItemArray indexed and if the pOnTopElement (357) of the child ZArray obtained is NULL exits (the folder represented by the Item passed does not have any on top elements) otherwise (the folder the Item passed represents has an on top element) 5 { indexes the 'OnTop' child Item from the child ItemArray indexed using the Itemdex member (359) of pOnTopElement (357) ofthe child ZArray obtained, makes a recursive call to the Select process passing the 'OnTop' child Item indexed and a boolean value of false and exits; (N.B. recursive propagation of this call to Select operates the de-selection of the descendants of a folder Item which is deselected) } 25 Back The Back process (424) reverses the effect of double clicking on a displayed folder or file. Whatever file or folder is currently filling the display area, the Back process causes its 30 parent folder to fill the display area instead, except in the case that the root folder is currently filling the display area in which case it does nothing.
M&C P5 1841 GB
9' The Back process operates as follows: If g_pItemShowing (347) is not NULL (there is a view of a file filling the display area) then 5 { calls the CloseFileShowing process (149), points g_pItemArrayShowing (346) at an IternArary (311) indexed from the ArrayOfItemArrays (307) using the ParentArrayIndex member (330) of the Item that pItemShowing (347) points at, sets g_pItemShowing to NULL and exits; 0} otherwise if the ParentArrayIndex member (318) of the ParentItemAddress member (316) of the ItemArray (311) that g_pItemArrayShowing (346) points at is NONE (there is no parent - it is the root folder) then Is exits; otherwise sets g_pItemArrayShowing (346) to point at the ItemArray (311) indexed from 20 the ArrayOfftemArrays (307) using the ParentArrayIndex member (318) of the ParentItemAddress member (316) of the ItemArray that g pItemArrayShowing currently points at, sets g_ShowingNestDepth (348) equal to the NestDepth member (321) of the new ItemArray (311) that g_pItemArrayShowing (346) now points at and exits.
25} The following describes modifications which are necessary to effect the enhancement of the application so as to display links as illustrated in figure 19.
WebBrowser control modifications The WebBrowser control (128) is modified so that when it handles the OnDocumentComplete event (151), it calls a new GetLinks process (170) which
M&C P51841GB
constructs a StringList containing the location of all files that the page that it holds is linked to and calls the SendEvent process (127) passing the following parameters: message = DOITEMLINKS, x - 0, y = O. 5 pVoidl = the PointerValue member (150) of the WebBrowser control (128), pVoid2 pointing at the StringList constructed by the new GetLinks process (me); this is done before the WebBrowser control posts a message to destroy itself.
HandleEvent modifications The HandleEvent process (416) is modified by inserting a test for a message value of DOITEML1NKS before the existing test for a message value of GOTFILEIMAGE and 5 if the message has a value of DOITEMLINKS then calls the new DoItemLinks process (30) passing an Item (322) de-referenced from the pVoidl parameter passed and a StringList de-referenced from the pVoid2 parameter passed.
DrawItemArray modifications The DrawItemArray process (410) is modified by inserting a call to the new DrawArrayLinks process (32) passing the ItemArray, Bitmap and Size value passed, before exiting.
25 GetZArray modifications The GetZArray process (411) is modified by inserting a call to the new SortItemZIndices process (35) passing the ZArray obtained or created, after making the existing call to the ZSort process (412).
Modifications to the ItemArrayHandleMouse (420) and ItemGetMouse (422) processes will be discussed after discussing the extensions to the data structures (40), as the
M&C P5 1841 GO
t modifications to those processes make reference to members which extend the data structures. Data structure modifications Figure 30 is a block diagram showing the additions to the data structures to effect the enhancement. The Item structure (322) is extended by addition of the following: NearLinks (370) which is an array of NearLinkElements (375) each of which indicates a hyperlink to another Item residing in the same folder, each NearLinkElement consisting of: 15 a ToIndex member (376) which is an index into the common parent ItemArray (311) of the Item to which it links, and a SelectOn member (377) which is a boolean holding a value of true' if the link is one of the links from the Item selected for the purpose 20 of highlighting its links, otherwise it holds false'.
FarLinks (371) which is an array of FarLinkElements (378) each of which indicates a hyperlink to another Item not residing in the same folder, each FarLinkElement consisting of: a ToArrayIndex member (380) which is an index into the ArrayOfftemATrays (307) of the ItemArray in which the Item to which it links resides, 30 and a ToIndex member (379) which is an index into the ItemArray indexed by the ToArrayIndex member (380), of the Item to which it links;
M&C P51841GB
BridgeLinks (372) which is an array of BridgeLinkElements (378) each of which indicates a displayed Bridge link which is not a hyperlink itself but is implied by hyperlinks within the system of files and folders being displayed, each s BridgeLinkElement consisting of: a ToIndex member (382) which is an index into the common parent ItemArray (31 1) of the Item to which it links, 0 and a SelectOn member (383) which is a boolean holding a value of true' if the link is a part of a path from the Item selected for the purpose of highlighting its links, otherwise it holds 'false'.
NumLinksOut (373) which is an integer recording the need for the display of an 5 external link indicator - an external link indicator is displayed if NumLinksOut is greater than zero; LinksOutSelectOn (374) which is a boolean holding a value of 'true' if the external link indicator is a part of a path from the Item selected for the purpose 20 of highlighting its links, otherwise it holds 'false'.
25 The ItemArray structure (311) is extended by the addition of a pLinkSelectedItem member (389) which is a pointer that either holds a value of NULL, or points to the Item selected for the purpose of highlighting its links - the existence of a non-NULL value held by this member is a faster indication of whether the Item selected for the purpose of highlighting its links is within a given ItemArray than iterating that given ItemArray to 30 see if any of its Items match the global variable g_ pLinkSelectedItem (385) described below.
M&C P51841GB
The Visual Memory Globals (343) are is extended by addition the following: g_ pLinkSelectedItem (385) which is a pointer that either holds a value of NULL, or points to the Item selected for the purpose of highlighting its links; g_LinkSelectLocked (386) which is a boolean holding a value of 'true' if the user has chosen to hold an Item selected for the purpose of highlighting its links whilst performing other operations such as rotation of one or more virtual three dimensional spaces.
The ZArray structure (353) is extended by the addition of a ItenZElementIndices member (384) which is an array of integers arranged so that the index within the ZArray of the ZElement (358) associated with a given Item (322) is indexed from the new ItemZElementIndices member (384) using the OwnIndex member (331) of that given 5 Item - the new ItemZElementIndices member (384) is provided to avoid the need for iteration in obtaining the ZElement (358) associated with a given Item (322).
So Modifications to the ItemArrayHandleMouse (420) and ItemGetMouse (422) processes will now be described.
ItemArrayHandleMouse modifications 2s With reference to figure 28 the IternArrayHandleMouse process (420) is modified by inserting the following operations after initialising the bRedraw local variable (596) and before the test for a mouse down event (597): if g_pLinkSelectedIteTn (385) does not have a NULL value g_bLinkSelectLocked (386) 30 has a false value then
M&C P51841GB
calls the new HighlightItemLinks process (36) passing the Item that g_pLinkSelectedIten (385) points at, and a boolean value of false, calls the Invalidate process (415) passing a NULL pointer value and the ItemArray passed to the ItemArrayHandleMouse process and sets bRedraw to a true value; (N.B. the call to the new HighlightItemLinks process (36) passing a false, cancels the Highlighted Item if there is one, unless it has been locked by the user - this being done because the mouse is no longer positioned over the highlight hotspot at the top left corner of a displayed Item.) 0} operation then continues from the box numbered (597).
ItemGetMouse modifications 5 With reference to figure 29 the ItemGetMouse process (422) is modified as follows: the following operations are inserted after the call to the Select process (621) and before testing if the mouse is over the right or bottom edge (622): 20 if the x member of the point passed has a value less third BORDERWII)TH and the y member of the point passed has a value less than BORI)ERWII)TH (where BORDERWIDTH has a value large enough for the user to have a reasonable margin of error when the locating the top left corner a displayed Item) then: 25 if g_bLinkSelectLocked (386) has a true value then sets g_bLinkSelectLocked to false; otherwise (g_bLinkSelectLocked does not have a true value) 30 { sets g_bLinkSelectLocked to true;
M&C P5 184] GO
(N.B a mouse click over the top left corner of a displayed Item toggles whether the Item selected for the purpose of highlighting its links is held or locked in that status while other mouse operations are performed) 5 operation then continues from the box numbered (622).
the following operations are inserted after failing the test for the Item being a folder (625) and before testing for a double click of the mouse (628): 0 if the message passed is WM:_MOUSEMOVE then if the x member of the point passed has a value less than BORDERWTH and the y member of the point passed has a value less than BORDERW1DTH (where BORDERWIDTH has a value large enough for the user to have a reasonable 15 margin of error when the locating the top left comer a displayed Item) then if g bLinkSelectLocked (386) has a false value and g pLinkSelectedItem (385) does not point at the Item passed then 20 calls the HighlightItemLinks process (36) passing the Item passed and a boolean value of true, sets bRedraw to a true value and continues operation from the box numbered (628); (N.B. the call to the new HighlightItemLinks process (36) passing 25 a true sets the Item passed to be the Item selected for the purpose of highlighting its links) otherwise continues operation from the box numbered (628); }
M&C P5 1841 GO
i otherwise (if the point passed is not positioned over the top left corner of the displayed Item within a reasonable margin of error) if g_pLinkSelectedItem (385) does not have a NULL value and 5 g_bLinkSelectLocked (386) has a false value then calls the HighlightItemLinks process (36) passing the Item (322) that g_pLinkSelectedItem (385) points at and a boolean value of false, sets bRedraw to a true value and continues operation from 0 the box numbered (628); (N.B. the call to the new HighlightItemLinks process (36) passing a false, cancels the Highlighted Item if there is one, unless it has been locked by the user - this being done because the mouse is no 5 longer positioned over the highlight hotspot at the top left corner of a displayed Item.) otherwise 20 continues operation from the box numbered (628); } otherwise (if the message passed is not WM_MOUSEMOVE) 25 continues operation from the box numbered (628); The new processes of the second embodiment of the invention will now be described in more detail.
30 DoItemLinks
54&C P51841GB
The DoItemLinks process (30) is passed an Item (322) and a StringList holding all the links from that Item, the process populates the NearLinks (370) and FarLinks (371) members of the Item passed according to the elements of the StringList passed and calls the DoFarLink process (31) for each FarLink (378) added to the FarLinks member of the 5 Item passed. For each link the process caries out a search of every Item in the data model to determine if it is the Item at the other end of the link The DoItemLinks process (30) operates as follows: 0 If the StringList passed is empty then the process exits immediately; otherwise: for each member of the StringList passed, iterates through every Item (322) in every ItemArray (311) in the ArrayOfftemArrays (307) and for each Item iterated: is if the filenmne member (323) of the current iteration Item is equal to that member of the StringList then if the ParentArrayIndex member (330) of the current iteration Item is to equal to the ParentArrayIndex of the Item passed (they are in the same folder) then creates a new NearLinkElement (375), sets the ToIndex member (376) of the new NearLinkElement equal to the OwnIndex 25 member (331) of the current iteration Item, sets the SelectOn member (377) of the new NearLinkElement to false, and adds the new NearLinkElement to the NearLinks member (370) of the Item passed; 30 otherwise (they are not in the same folder) {
M&C P51841GB
creates a new FarLinlcElement (378), sets the ToIndex member (379) of the new FarLinkElement equal to the OwnIndex member (331) of the current iteration Item, sets the ToArrayIndex member (380) of the new FarLirkElement equal to the ParentArrayIndex 5 (330) member of the current iteration Item, adds the new FarLinkElement to the FarLinks member (371) of the Item passed and calls the DoFarLink process (31) passing the Item passed and the current iteration Item; 0 and then in either case terminates further iteration of Items for that member of the StringList passed and starts the iteration of Items for the next member of the StringList passed; otherwise (the filename member of the current iteration Item is not equal to that is member of the StringList) continues the iteration of Items for that member of the StringList; 20 DoFarLink The DoFarLink process (31) is passed a 'From' Item (322) and a 'To' Item. The process adds BridgeLinks and external link indicators to Items throughout the data structure as required to indicate the full path of the link from the 'From' Item (322) to the 'To' Item.
25 The requirements of its operation can be understood with reference to figure 31 in which a first Item (800) is linked to a second Item (801) which is not located in the same folder. To illustrate a general case both Items are deeply nested, but the second Item (801) is more deeply nested than the first Item (800). Folder Items 802, 803 and 805 to 808 show external link indicators, folder Items 804 and 809 are implicitly linked by a 30 BridgeLink (810) and folder Item 811 is the most deeply nested common ancestor of both the first and second Items within which the entire path of the link is displayed.
M&C P51841GB
* : The DoFarLink process iterates backwards through the ancestry of the most deeply nested Item until the nest depth of the other Item has been reached, it then iterates backwards through the ancestry of both Items until it reaches a common parent and then within that common parent adds a BridgeLink connecting its child which is an ancestor 5 of the first Item with its child which is an ancestor of the second Item.
Operation of the DoFarLink process (31) proceeds as follows: local pointer variable pItemA is created and set to point at the 'From' Item passed and 0 a local pointer variable pItemB is created and set to point at the 'To' Item passed; while the NestDepth member (332) of the Item that pItemA points at is not equal to the NestDepth member (332) of the Item that pItemB points at it does the following: 5 if the NestDepth member of the Item that pItemA points at is greater than the NestDepth member of the Item that pItemB points at then increments the value of the NumLinksOut member (373) of the Item that pItemA points at by one, calls the GetParentItem process (427) passing 20 the Item that pItemA points at and sets pItemA to point at the Item returned by the call to the GetParentItem process; otherwise 25 increments the value of the NumLinksOut member (373) of the Item that pItemB points at by one, calls the GetParentItem process (427) passing the Item that pItemB points at and sets pItemB to point atthe Item returned by the call to the GetParentItem process; 30 (N.B. here it iterates backwards through the ancestry of the most deeply embedded Item)
M&C P51841GB
when the while loop above has completed and the NestDepth members of the Items that pItemA and pItemB point at have the same value the process continues as follows: while the ParentArraydex member (330) of the Item that pItemA points at is not equal 5 to the ParentArrayIndex member (330) of the Item that pItemB points at it does the following: { increments the value of the NumLinksOut member (373) of the Item that pIteTnA points at by one, calls the GetParentItem process (427) passing the Item that 10 pItemA points at sets pItemA to point at the Item returned by the call to the GetParentItem process, increments the value of the NumLinksOut member (373) of the Item that pItemB points at by one, calls the GetParentItem process (427) passing the Item that pItemB points at and sets pItemB to point at the Item returned by the call to the GetParentItem process; (N.B. here it iterates baclvards through the ancestry of both Items simultaneously until they have a common parent) when the while loop above has completed and the ParentArrayIndex members (330) of 20 the Items that pItemA and pItemB point at have the same value the process continues as follows: creates a new BridgeLinkElement (381), sets the ToIndex member (382) of the new BridgeLinkElement equal to the OwnIndex member (331) of the Item that pItemB 25 points at, sets the SelectOn member (383) of the new BridgeLinkElement to false, adds the new BridgeLinkElement to the BridgeLinks membe- (372) of the Item that pItemA points at and exits.
DrawArrayLinks
M&C P51841GB
The DrawItemArrayLinks process (32) takes care of drawing all the links within a displayed ItemArray (311), it is passed an ItemArray, a Bitmap (126) on which to draw and a Size value.
The process operates as follows: s calls the GetZArray process (411) passing the ItemArray passed to obtain a ZArray (353) and then iterates through every ZElement (358) within that ZArray and for each ZElement: lo indexes an Item (322) from the ItemArray passed using the ItemIndex member (359) of the ZElement and calls the DrawItemLinks process (33) passing the ItemArray passed, the Item indexed, the ZArray obtained, the Bitmap passed and the Size passed; 5 if the pLinkSelectedItem member (389) of the ItemArray passed does not have a Al ILL value then calls the DrawItemLinks process (33) once more, passing the IternArray passed, the Item that the pLinkSelectedItem member (389) of the IternArray passed 20 points at, the ZArray obtained, the Bitmap passed and the Size passed; (N.B. this last call to the DrawItemLinks process ensures that selected links will be drawn last and therefore will not be obscured by other links.) 25 the process then exits.
DrawItemLinks The DrawItemLinks process (33) draws all links and external link indicators that are 30 visually connected to a given Item. It is passed an IternArray (311) in within whose display the links are drawn, an Item (322) being the given Item, a ZArray (353) being
M&C P51841GB
the ZArray associated with the ItemArray passed, a Bitmap (126) on which to draw and a Size value being the displayed size of the ItemArray passed and operates as follows: calls the GetItemPos process (34) passing the ItemArray, ZArray, Item and size passed 5 and sets a local Point variable ItemPos equal to the Point returned from the GetItemPos process (this obtains the position of the Item passed within the display of the ItemArray passed and holds it in the ItemPos local point variable) and then: for each NearLinkElement (375) within the NearLinks member (370) of the Item 0 passed: { indexes an Item from the ItemArray passed using the ToIndex member (376) of the NearLinkElement, calls the GetItemPos process (34) passing the IternAIray passed, the ZArray passed, the Item indexed and the Size passed setting a local 5 Point variable ToItemPos equal to the Point value returned from the GetItemPos process and if the SelectOn member (377) of the NearLinkElement is true then 20 calls the SetPen member function (134) of the Bitmap passed to choose a pen suitable for highlighted links; otherwise 25 calls the SetPen member function (134) of the Bitmap passed to choose a pen suitable for non highlighted links; } and in either case draws a line onto the Bitmap passed from ItemPos to ToIternPos; so}
M&C P51841GB
for each BridgeLinkElement (381) within the BridgeLinks member (372) of the Item passed: indexes an Item from the ItemArray passed using the ToIndex member (382) of 5 the BridgeLinkElement, calls the GetItemPos process (34) passing the ItemArray passed, the ZArray passed, the Item indexed and the Size passed setting a local Point variable ToItemPos equal to the Point value returned from the GetItemPos process and 0 if the SelectOn member (383) of the BridgeLinkElement is true then calls the SetPen member function (134) of the Bitmap passed to choose a pen suitable for highlighted links; 5 otherwise calls the SetPen member function (134) of the Bitmap passed to choose a pen suitable for non highlighted links; 20 and in either case draws a line onto the Bitmap passed from ItemPos to ToItemPos; if the NumLinksOut member (373) of the Item passed is greater than zero then 25 if the LinksOutSelectOn member (374) of the Item passed has a value of 'true' then calls the SetPen member function (134) of the Bitmap passed to choose a pen suitable for highlighted links, draws a line from ItemPos to the top 30 left corner of the display of the ItemArray passed and exits; otherwise
M&C P5 1841 GB
calls the SetPen member function (134) of the Bitmap passed to choose a pen suitable for non highlighted links, draws an external link indicator attached to the Item passed using ToItemPos to locate its position and 5 exits; otherwise 0exits GetItemPos The GetItemPos process (34) is passed an ItemArray (311), a ZArray (353), an Item 5 (322), and a Size value, returns the screen position of the Item passed within the display of the ItemArray passed and operates as follows: indexes an integer from the IternZIndices member (384) of the ZArray passed using the OwnIndex member (331) of the Item passed, indexes a ZElement (358) from the ZArray 20 passed using the integer indexed; and then calculates a position based on NodePosition member (360) of the ZElement, scaled to fit the view area (indicated by the Size passed), offset to place the origin in the centre and further offset according to the value of the ScrollOffset member (315) of the 25 ItemArray passed in the same manner as the DrawItemArray process (410); and then exits returning the position calculated.
SortItemZIndices The SortItemZIndices process (35) is passed a ZArray (353) and maintains the ItemZIndices member (384) of that ZArray so that indexing into it with the OwnIndex
M&C P5 1841 GB
t member (331) of an Item will obtain the index within that ZArray of the ZElement (358) associated with that Item. The process operates as follows: if the ItemZIndices member (384) of the Moray passed is empty then populates the ItemZIndices member (384) of the ZArray passed with one element for each ZElement in the ZATay (the initial values of the element of the ItemZIndices member (384) of the ZArray passed do not matter); } 0 for each ZElement (358) in the ZArray passed: sets the element of the ItemZIndices member (384) of the ZArray passed whose index into the ZArray passed is equal to the ItemIndex member (359) of the ZElement, equal to the index into the Malay passed of the ZElement; 15} the process then exits; HighlighfftemLinks 20 The HighlightItemLinks process (36) is called to highlight the full path of all links from a given Item (322). It is passed an Item (322) and a boolean value and if the boolean value is false it removes all highlight from the full path of all links from that Item. It also records which Item is selected for this purpose using g_pLinkSelectedItem (385) and maintains correct values for the pLinkSelectedItem member (389) of the parent 25 ItemArray (311) of the Item passed.
It operates as follows: if the boolean value passed is 'true' then 30 { if gLinkSelectedItem (385) does not have a NULL value then
M&C P51841GB
it recursively calls the HighlightItemLinks process (36) passing the Item that gLinkSelectedItem points at and a boolean value of 'false'; (N.I3. this deselects any Item that was previously selected for this s purpose) and either way sets g pLinkSelectedItem to point at the Item passed; } otherwise (the boolean value passed is 'false') 10 { sets g_pLinkSelectedItem (385) to a NULL value; } either way, the process then indexes an ItemArray (311) from the ArrayOfItemArrays (307) using the ParentArrayIndex member (330) of the Item passed and if the boolean value passed is 'true' then sets the pLinkSelectedItem member (389) of the ItemArray indexed to point at the Item passed; 20} otherwise sets the pLinkSelectedItem member (389) of the ItemArray indexed to a NULL value; 2s} either way, the process then continues as follows: for each NearLinkElement (375) in the NearLinks member (370) of the Item passed: 30 sets the SelectOn member (377) of the NearLinkElement equal to the boolean value passed;
M&C P51841GB
and then for each FarLinkElement (378) in the FarLinks member (371) of the Item passed: indexes an ItemArray (311) from the ArrayOfltemArrays (307) using the s ToArrayIndex member (380) of the FarLinkElement, indexes an Item (322) from ItemArray indexed using the ToItemIndex member (379) of the FarLinkElement and calls the HighlightFarLink process (37) passing the Item passed, the Item indexed and the boolean value passed; o with all iterations complete the process exits.
HighlightFarLink The HighlightFarLink process (37) operates in a very similar manner to the DoFarLink 5 process (31) except that instead of creating BridgeLinks and external link indicators it marks them as highlighted.
It is passed a 'From' Item (322), a 'To' Item and a boolean value, if the boolean value passed is false then the highlight is removed from the BridgeLinks and external link indicators concerned.
The process operates as follows: calls the GetParentItem process (427) passing the 'From' Item passed and calls the Invalidate process (415) passing the Item returned from the call to the GetParentItem 25 process, calls the GetParentItem process (427) passing the 'To' Item passed and calls the Invalidate process (415) passing the Item returned from the call to the GetParentItem process, 30 (N.B. these calls to the Invalidate process ensure that all displays of ItemArrays affected by the addition or removal of highlight will be redrawn.)
M&C P51841GB
A local pointer variable pItemA is created and set to point at the 'From' Item passed and a local pointer variable pItemB is created and set to point at the 'To' Item passed; while the NestDepth member (332) of the Item that pItemA points at is not equal to the 5 NestDepth member (332) of the Item that pItemB points at it does the following: { if the NestDepth member of the Item that pItemA points at is greater than the NestDepth member of the Item that pItemB points at then 0 sets LinksOutSelectOn member (374) of the Item that pIternA points at to the boolean value passed, calls the GetParentItem process (427) passing the Item that pIternA points at and sets pItemA to point at the Item returned by the call to the GetParentItem process; 5 otherwise sets LinksOutSelectOn member (374) of the Item that pItemB points at to the boolean value passed, calls the GetParentItem process (427) passing the Item that pItemB points at and sets pItemB to point at the Item 20 returned by the call to the GetParentItem process; (N.B. here it iterates backwards through the ancestry of the most deeply embedded Item) 25 when the while loop above has completed and the NestDepth members of the Items that pItemA and pIternB point at have the same value the process continues as follows: while the ParentArrayIndex member (330) of the Item that pItemA points at is not equal to the ParentArrayIndex member (330) of the Item that pItemB points at it does the so following:
M&C P51841GB
sets LinksOutSelectOn member (374) of the Item that pItemA points at to the boolean value passed, calls the GetParentItem process (427) passing the Item that pItemA points at sets pItemA to point at the Item returned by the call to the GetParentItem process, 5 sets LinksOutSelectOn member (374) of the Item that pItemB points at to the boolean value passed, calls the GetParentItem process (427) passing the Item that pItemB points at and sets pItemB to point at the Item returned by the call to the GetParentItem process; lo (N.B. here it iterates backwards through the ancestry of both Items simultaneously until they have a common parent) when the while loop above has completed and the ParentArraylndex members (330) of the Items that pItemA and pItemB point at have the same value the process continues as Is follows: for each BridgeLinkElement (381) within the BridgeLinks member (372) of the Item that pItemA points at: 20 if the ToIndex member (382) of the BridgeLiT,lcElement is equal to the OwnIndex member (331) of the Item that pItemB points at then sets the SelectOn member (383) of the BridgeLinkElement to the boolean value passed and exits; (N.B. this is the BridgeLink associated with the FarLink being highlighted.) 30 the process exits.
M&C P51841GB
It will be appreciated that an application described above could equally well be realised by constructing electronic logic circuitry which directly embodies the logic of the software described above.
5 It will further be appreciated that variations from the above described embodiments may still fall within the scope of the invention.

Claims (1)

  1. M&C P51841GB
    CLAIMS:
    1. A method of displaying digitally stored information, comprising: creating a virtual 3D space which is rotatable in response to user interaction; 5 representing items of the stored information as labelled nodes within the virtual 3D space; and displaying the virtual 3D space to the user.
    2. A method as claimed in claim 1, wherein each item of information is represented lo as an image located at a corresponding node, and which moves with the node as the virtual 3D space is rotated.
    3. A method as claimed in claim 2, wherein each image is displayed so that it always appears as a 2D image facing the user, so that the user receives the impression of 5 a plurality of 2D images suspended in 3D space.
    4. A method as claimed in claim 2 or 3, wherein a first image obscures parts of other images with which it overlaps when the node of the first image is closer to the user than the nodes of the other images in the virtual 3D space.
    5. A method as claimed in any preceding claim, wherein the virtual space is rotatable about a single axis in response to user interaction.
    6. A method as claimed in claim 5, wherein the axis of rotation is tillable towards 25 or away Tom the user in response to user interaction.
    7. A method as claimed in any preceding claim, wherein the rotation of the virtual space is controllable by the user activating a pointing device over an unoccupied part of the virtual space and moving the pointing device.
    8. A method as claimed in any preceding claim, wherein the user can interact with any image using a pointing device to cause an action specific to that image or the
    M&C P51841GB
    information which that image represents.
    9. A method as claimed in claim 8, wherein the interaction with an image using the pointing device causes that image to be temporarily enlarged or displayed in a separate window. 10. A method as claimed in any preceding claim, wherein an action of a pointing device over an image displayed within a virtual space causes that image to be temporarily displayed so that it is not obscured by any other image.
    11. A method as claimed in any preceding claim, wherein links between items of information are displayed as lines linking the nodes associated with those items of information. 12. A method as claimed in any preceding claim, wherein the items of digitally stored information include illles arranged in folders, the method further comprising creating a farther virtual 3D space representing the contents of a folder and displaying the further virtual 3D space to the user as an image attached to the node corresponding to that folder.
    13. A method as claimed in claim 12, wherein the user can interact with the further virtual 3D space in the same way as with the virtual 3D space, the further virtual 3D space being embedded within the virtual 3D space.
    25 14. A method as claimed in claim 12 or 13, wherein the embedded further virtual 3D space is displayable to the user in place of the virtual 3D space on selection by the user of said further virtual 3D space.
    15. A method as claimed in claim 12 or 13, farther comprising displaying within a 30 virtual 3D space a line between an image corresponding to a first file and an image corresponding to a second file if the first and second files are linked.
    M&C P5 1841 GO
    16. A method as claimed in claim any of claims 12 to 15, further comprising displaying within a virtual 3D space a line between an image representing a file and an image representing a folder if the file is linked to one or more files embedded within the hierarchy represented by the folder.
    17. A method as claimed in any of claims 12 to 16, further comprising displaying within a virtual 3D space a line between an image representing a first folder and an image representing a second folder if one or more files embedded within the hierarchy of the first folder are linked to one or more files embedded within the hierarchy of the lo second folder.
    18. A method as claimed in any of claims 12 to 17, further comprising displaying an external link indicator attached to an image representing a first file if the first file is linked to one or more files located in parts of the hierarchy not contained within the 5 parent folder of the first file.
    19. A method as claimed in any of claims 12 to 18, further comprising displaying an external link indicator attached to an image representing a folder if a file located within the hierarchy of that folder is linked to one or more files located in parts of the hierarchy 20 not contained within the parent folder of that folder.
    20. A method as claimed in any of claims 12 to 19, wherein all external link indicators or lines representing links from a file or folder throughout the display are highlighted if the image corresponding to that file or folder is selected by the user.
    21. A method of displaying digital information stored in the form of hierarchically arranged folders and files, comprising: creating a first virtual 3D space for a root folder, each file and folder located within the root folder being associated with a unique point in the virtual 3D space; 30 displaying the first virtual 3D space to the user, each file or folder being represented by an image located at the associated unique point in the virtual 3D space; wherein the image representing a folder within the first virtual 3D space is a
    M&C P51841GB
    display of a further virtual 3D space representing the contents of that folder.
    22. A method as claimed in claim 21, wherein the first virtual 3D space and the further virtual 3D spaces are rotatable in response to instructions Mom the user.
    23. A computer storage medium having stored thereon a program arranged to perform the method of any preceding claim.
    24. Apparatus for displaying a plurality of discrete items of information, comprising: lo a digital display device controllable by a control unit; wherein the control unit is arranged to cause images representing the items of information to be displayed on the display device so as to cause an impression to the user of a plurality of 2D images suspended within a virtual 3D space; and wherein the control unit is further arranged to manipulate the display of the 5 images so that the virtual 3D space appears to rotate in response to instructions from the user. 25. Apparatus as claimed in claim 24, wherein each image occupies a unique position in the virtual 3D space.
    26. Apparatus as claimed in claim 24 or 25, wherein the control unit is arranged so that each image is drawn on the display device adjacent to a position which represents a 2D projection of its position within the virtual 3D space such that, when a first image is closer to the user in the virtual 3D space than a second image, the first image obscures 25 any part of the second image occupying the same region of the display device.
    27. Apparatus as claimed in claim 26, wherein the control unit is arranged so that the appearance of rotation of the 3D space to the user is caused by incremental variations of the angle from which the 2D projection is taken, each incremental variation being 30 followed by re Drawing the images.
    28. Apparatus as claimed in claim 27, wherein the control unit is arranged to hold a
    M&C P51841GB
    memory image in random access memory of each 2D image to be displayed within a virtual 3D space, each memory image being in a form which can be quickly transferred to the display device or to another memory location; and wherein the control unit is arranged such that each memory image is formed 5 when the 2D images are first displayed, and during subsequent redisplay each memory image is directly transferred to the display of the virtual 3D space.
    29. Apparatus as claimed in claim 28, wherein the control unit is arranged so that, when a 2D image within a virtual 3D space is required to change its appearance, the lo memory image corresponding to that image is deleted or marked invalid and the display re-drawn; and wherein during the re-draw of the display the deleted or invalid memory image is re formed to contain the new 2D image and validated.
    15 30. Apparatus as claimed in claim 29, wherein the control unit is arranged so that an image within the virtual 3D space can itself comprise a further virtual 3D space; and so that if the memory image of an image displayed within the further virtual 3D space is deleted or marked invalid then the image in memory of the image within the virtual 3D space is also deleted or marked invalid.
    31. Apparatus as claimed in any of claims 24 to 30, wherein the items of information include files and folders, a folder being represented as a discrete virtual 3D space, and wherein the control unit is arranged so that wherever there exists a link from a first file to a second file not sharing a parent folder with said first file, an iteration which 25 operates on two files or folders is implemented, operating initially on the first and second file, and during each iteration if one file or folder is more deeply embedded in the hierarchy than the other then an indication of external links held against the more deeply embedded file or folder is set and the next iteration is carried out replacing the more deeply embedded file or 30 folder with its parent; if both files or folders are embedded in the hierarchy equally deeply, but do not share the same parent folder, then an indication of external links held against both files
    M&C P51841GB
    r, or folders is set and the next iteration is carried out replacing both files or folders with their parents; and if both files or folders share the same parent folder then an implied link is generated between them by adding a reference to the file or folder deriving from the 5 second file to the list of implied links held by the file or folder deriving from the first file and the iteration terminates.
    32. A method substantially as herein described with reference to the accompanying drawings.
GB0208727A 2002-04-17 2002-04-17 Electronic file display Expired - Fee Related GB2387754B (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
GB0208727A GB2387754B (en) 2002-04-17 2002-04-17 Electronic file display

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
GB0208727A GB2387754B (en) 2002-04-17 2002-04-17 Electronic file display

Publications (3)

Publication Number Publication Date
GB0208727D0 GB0208727D0 (en) 2002-05-29
GB2387754A true GB2387754A (en) 2003-10-22
GB2387754B GB2387754B (en) 2004-05-19

Family

ID=9934953

Family Applications (1)

Application Number Title Priority Date Filing Date
GB0208727A Expired - Fee Related GB2387754B (en) 2002-04-17 2002-04-17 Electronic file display

Country Status (1)

Country Link
GB (1) GB2387754B (en)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2406770A (en) * 2003-09-15 2005-04-06 Sun Microsystems Inc Displaying related two-dimensional windows in a three-dimensional display model
US7245310B2 (en) 2003-09-15 2007-07-17 Sun Microsystems, Inc. Method and apparatus for displaying related two-dimensional windows in a three-dimensional display model
US7818690B2 (en) 2007-06-15 2010-10-19 Microsoft Corporation Framework for creating user interfaces containing interactive and dynamic 3-D objects
US8910072B2 (en) 2010-11-23 2014-12-09 Apple Inc. Browsing and interacting with open windows
US9851866B2 (en) 2010-11-23 2017-12-26 Apple Inc. Presenting and browsing items in a tilted 3D space
CN109408476A (en) * 2018-09-19 2019-03-01 腾讯科技(深圳)有限公司 A kind of file-sharing management method, equipment and storage medium

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4685070A (en) * 1984-08-03 1987-08-04 Texas Instruments Incorporated System and method for displaying, and interactively excavating and examining a three dimensional volume
WO2000073888A1 (en) * 1999-05-27 2000-12-07 International Business Machines Corporation Dynamically re-sizable 3d icons for windowing, browser, or graphical user interfaces

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4685070A (en) * 1984-08-03 1987-08-04 Texas Instruments Incorporated System and method for displaying, and interactively excavating and examining a three dimensional volume
WO2000073888A1 (en) * 1999-05-27 2000-12-07 International Business Machines Corporation Dynamically re-sizable 3d icons for windowing, browser, or graphical user interfaces

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
JP 2001204922A *

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2406770A (en) * 2003-09-15 2005-04-06 Sun Microsystems Inc Displaying related two-dimensional windows in a three-dimensional display model
GB2406770A8 (en) * 2003-09-15 2005-04-25 Sun Microsystems Inc Displaying related two-dimensional windows in a three-dimensional display model
GB2406770B (en) * 2003-09-15 2006-03-22 Sun Microsystems Inc Method and apparatus for displaying related two-dimensional windows in a three-dimensional display model
US7245310B2 (en) 2003-09-15 2007-07-17 Sun Microsystems, Inc. Method and apparatus for displaying related two-dimensional windows in a three-dimensional display model
US7818690B2 (en) 2007-06-15 2010-10-19 Microsoft Corporation Framework for creating user interfaces containing interactive and dynamic 3-D objects
US8910072B2 (en) 2010-11-23 2014-12-09 Apple Inc. Browsing and interacting with open windows
US9851866B2 (en) 2010-11-23 2017-12-26 Apple Inc. Presenting and browsing items in a tilted 3D space
CN109408476A (en) * 2018-09-19 2019-03-01 腾讯科技(深圳)有限公司 A kind of file-sharing management method, equipment and storage medium

Also Published As

Publication number Publication date
GB0208727D0 (en) 2002-05-29
GB2387754B (en) 2004-05-19

Similar Documents

Publication Publication Date Title
US5611031A (en) Graphical user interface for modifying object characteristics using coupon objects
US5596690A (en) Method and apparatus for operating on an object-based model data structure to produce a second image in the spatial context of a first image
EP0636971B1 (en) Method and apparatus for producing a composite second image in the spatial context of a first image
US5467441A (en) Method for operating on objects in a first image using an object-based model data structure to produce a second contextual image having added, replaced or deleted objects
EP0635808B1 (en) Method and apparatus for operating on the model data structure on an image to produce human perceptible output in the context of the image
US5729704A (en) User-directed method for operating on an object-based model data structure through a second contextual image
US5913063A (en) Drag and drop object subclassing
US6459442B1 (en) System for applying application behaviors to freeform data
US5784545A (en) System and methods for improved spreadsheet interface with user-familiar objects
US5544301A (en) Object-oriented view layout system
USRE37722E1 (en) Object-oriented system for the transparent translation among locales of locale-dependent application programs
JP2559962B2 (en) Information display device and device for displaying characteristics of file
US5689669A (en) Graphical user interface for navigating between levels displaying hallway and room metaphors
Beaudouin-Lafon et al. The architecture and implementation of CPN2000, a post-WIMP graphical application
US5737559A (en) Object-oriented view hierarchy framework
US20010017622A1 (en) Apparatus and method for generating a configurable program explanation using templates and transparent graphical user interfaces
Sander VCG-visualization of compiler graphs
US7590933B2 (en) Method for displaying an annotated file
US5524200A (en) Object-oriented non-rectilinear viewing framework
US20030037310A1 (en) Visual programming tool and execution environment for developing computer software applications
US5995984A (en) Apparatus and method for zoom-in entry of an element in a table
GB2387754A (en) Representing information as 3D image
US8099682B1 (en) Proxies for viewing hierarchical data
JPH0991299A (en) Generation method of hierarchically related information and computer-controlled display system
Plimmer et al. FreeForm: A tool for sketching form designs

Legal Events

Date Code Title Description
PCNP Patent ceased through non-payment of renewal fee

Effective date: 20120417