OBJECT-ORIENTED CURSOR TOOL

Abstract: An innovative system and method provide a cursor tool framework and tool server with support for multiple cursors on any given system, and supports the selection of a cursor tool utilizing a cursor. The framework and server facilitate the association of cursor tools to a cursor in a process independent space such that tools can be used cross-process and cross-document. The framework also provides default functionality for communication and negotiation among cursor tools and the canvas on which they are used. This negotiation allows any cursor tool and any document to function together such that the cursor tool can be written without the knowledge of the document developer. The framework provides implementation for the distribution of cursor tools across processes and documents in an efficient manner such that documents need not be aware of tools until such time as the tool has successfully negotiated with the document for the right to alter the documents data.

Description: OBJECT-ORIENΠΈD CURSOR TOOL COPYRIGHT NOTIFICATION Portions of this patent application contain materials that are subject to copyright protection. The copyright owner has no objection to the facsimile reproduction by anyone of the patent document or the patent disclosure, as it appears in the Patent and Trademark Office patent file or records, but otherwise reserves all copyright rights whatsoever. Field of the Invention This invention generally relates to improvements in computer systems and more particularly to a system and method for employing tool objects and menu of tool object in an object-oriented operating system. Background of the Invention Cursor tools specify a particular mode of user interaction with a document or frame by changing the behavior of the user controlled "cursor." For example, a user can select a "rectangle" cursor tool to indicate to the operating environment that pressing the mouse button and dragging the mouse will result in the creation of a rectangle on a documents drawing canvas. Tools can indicate modes for data selection, manipulation, or creation. Prior art examples of cursor tools can be found in applications such as MacPaint ® or MacDraw ®. However, these applications did not provide the user with management of more than one cursor at a time. Further, no integration into the operating system was provided to allow a tool active in one application to function in another application also. Negotiation capability between cursor tools and applications is also unknown in the prior art. Summary of the Invention An innovative system and method apply object-oriented techniques to integrate cursor tools into an object-oriented operating system. This integration includes management of multiple cursor tools in multiple tasks at the same time. Negotiation capability is provided allowing any cursor tool and any application to function together. This unique capability includes cross-partition memory management allowing cursor tool usage across applications and across partitions. The object-oriented framework provides an architecture for the distribution of cursor tools across applications so that application requirements are unaware of tools until the cursor tool function is requested. In technical terms this means that any application can use cursor tools without mapping in the cursor tools shared- library until after it has been determined that the cursor tool can successfully alter the application's information. Brief Description of the Drawings Figure 1 is a block diagram of a personal computer system in accordance with a preferred embodiment; Figure 2 is an example of a prior art cursor tool cluster used in MacDraw; Figure 3 is a command panel in accordance with a preferred embodiment; Figure 4 illustrates an example of a command panel bar in accordance with a preferred embodiment; Figure 5 illustrates an example of a command panel in accordance with a preferred embodiment; Figure 6 is an illustration of a tool cluster in accordance with a preferred embodiment; Figure 7 illustrates some examples of various types of frames in accordance with a preferred embodiment; Figure 8 illustrates a desktop with various frames in accordance with a preferred embodiment.; Figure 9 illustrates a user selection of a rectangle cursor tool, a creator in accordance with a preferred embodiment; and Figure 10 illustrates the selection arrow in accordance with a preferred embodiment; Figure 11 illustrates the cursor rectangle tool becoming the active tool in accordance with a preferred embodiment; Figure 12 illustrates the selection arrow passing over an inactive document, so the selection arrow becomes the active tool in accordance with a preferred embodiment; Figure 13 illustrates the selection process for a smudge tool, a selector /effector, in accordance with a preferred embodiment; Figure 14 illustrates enabling a smudge tool only when the cursor passes over a particular frame in accordance with a preferred embodiment; Figures 15 and 16 illustrate the dynamics of the tool cursor as it passes through a content region in accordance with a preferred embodiment; Figure 17 summarizes the window and frame processing in accordance with a preferred embodiment; Figure 18 is a flow diagram showing the logic of tool processing in accordance with a preferred embodiment; Figure 19 is a diagram showing the class hierarchy in accordance with a preferred embodiment; Figure 20 is a TToolServer class diagram in accordance with a preferred embodiment; Figure 21 illustrates the command classes in accordance with a preferred embodiment; Figure 22 illustrates some of the pre-built geometries in accordance with a preferred embodiment; and Figure 23 illustrates the utility classes in accordance with a preferred embodiment. Detailed Description Of The Invention The invention is preferably practiced in the context of an operating system resident on a personal computer such as the IBM ® PS/2 ® or Apple ® Macintosh ® computer. A representative hardware environment is depicted in Figure 1, which illustrates a typical hardware configuration of a computer in accordance with the subject invention having a central processing unit 10, such as a conventional microprocessor, with a built in non- volatile storage 11, and a number of other units interconnected via a system bus 12. The workstation shown in Figure 1 includes a Random Access Memory (RAM) 14, Read Only Memory (ROM) 16, an I/O adapter 18 for connecting peripheral devices such as a disk unit 20, and a diskette unit 21 to the bus, a user interface adapter 22 for connecting a keyboard 24, a mouse 26, a speaker 28, a microphone 32, and /or other user interface devices such as a touch screen device (not shown) to the bus, a communication adapter 34 for connecting the workstation to a data processing network 23 and a display adapter 36 for connecting the bus to a display device 38. The computer has resident thereon an operating system such as the Apple System/7 ® operating system. Object Oriented Programming Techniques In a preferred embodiment, the invention is implemented in the C++ programming language using object oriented programming techniques. As will be understood by those skilled in the art, Object-Oriented Programming (OOP) objects are software entities comprising data structures and operations on the data. Together, these elements enable objects to model virtually any real-world entity in terms of its characteristics, represented by its data elements, and its behavior, represented by its data manipulation functions. In this way, objects can model concrete things like people and computers, and they can model abstract concepts like numbers or geometrical concepts. The benefits of object technology arise out of three basic principles: encapsulation, polymorphism and inheritance. Objects hide, or encapsulate, the internal structure of their data and the algorithms by which their functions work. Instead of exposing these implementation details, objects present interfaces that represent their abstractions cleanly with no extraneous information. Polymorphism takes encapsulation a step further. The idea is many shapes, one interface. A software component can make a request of another component without knowing exactly what that component is. The component that receives the request interprets it and determines, according to its variables and data, how to execute the request. The third principle is inheritance, which allows developers to reuse pre-existing design and code. This capability allows developers to avoid creating software from scratch. Rather, through inheritance, developers derive subclasses that inherit behaviors, which the developer then customizes to meet their particular needs. A prior art approach is to layer objects and class libraries in a procedural environment. Many application frameworks on the market take this design approach. In this design, there are one or more object layers on top of a monolithic operating system. While this approach utilizes all the principles of encapsulation, polymorphism, and inheritance in the object layer, and is a substantial improvement over procedural programming techniques, there are limitations to this approach. These difficulties arise because it is easy for a developer to reuse their own objects, it is difficult to use objects from other systems, and a developer still needs to reach into the internal, non-object layers with procedural Operating System (OS) calls. Another aspect of object oriented programming is a framework approach to application development. One of the most rational definitions of frameworks come from Ralph E. Johnson of the University of Illinois and Vincent F. Russo of Purdue. In their 1991 paper, Reusing Object-Oriented Designs, University of Illinois tech report UIUCDCS91-1696 they offer the following definition: "An abstract class is a design of a set of objects that collaborate to carry out a set of responsibilities. Thus, a framework is a set of object classes that collaborate to execute defined sets of computing responsibilities." From a programming standpoint, frameworks are essentially groups of interconnected object classes that provide a pre-fabricated structure of a working application. For example, a user interface framework might provide the support and "default" behavior of drawing windows, scroll bars, menus, etc. . Since frameworks are based on object technology, this behavior can be inherited and overridden to allow developers to extend the framework and create customized solutions in a particular area of expertise. This is a major advantage over traditional programming since the programmer is not changing the original code, but rather extending the software. In addition, developers are not blindly working through layers of code because the framework provides architectural guidance and modeling but at the same time frees them to then supply the specific actions unique to the problem domain. From a business perspective, frameworks can be viewed as a way to encapsulate or embody expertise in a particular knowledge area. Corporate development organizations, Independent Software Vendors (ISV)s and system integrators have acquired expertise in particular areas, such as manufacturing, accounting, or currency transactions. This expertise is embodied in their code. Frameworks allow organizations to capture and package the common characteristics of that expertise by embodying it in the organization's code. First, this allows developers to create or extend an application that utilizes the expertise, thus the problem gets solved once and the business rules and design are enforced and used consistently. Also, frameworks and the embodied expertise behind the frameworks have a strategic asset implication for those organizations which have acquired expertise in vertical markets such as manufacturing, accounting, or bio-technology have a distribution mechanism for packaging, reselling, and deploying their expertise, and furthering the progress and dissemination of technology. Historically, frameworks have only recently emerged as a mainstream concept on computing platforms. This migration has been assisted by the availability of object-oriented languages, such as C++. Traditionally, C++ was found mostly on UNIX systems and researcher's workstations, rather than on computers in commercial settings. It is languages such as C++ and other object- oriented languages, such as Smalltalk and others, that enabled a number of university and research projects to produce the precursors to today's commercial frameworks and class libraries. Some examples of these are Interviews from Stanford University, the Andrew toolkit from Carnegie-Mellon University and University of Zurich's ET++ framework. There are many kinds of frameworks depending on the level of the system and the nature of the problem. The types of frameworks range from application frameworks that assist in developing the user interface, to lower level frameworks that provide basic system software services such as communication, printing, file systems support, graphic, etc. Commercial examples of application frameworks are MacApp (Apple), Bedrock (Symantec), OWL (Borland), NeXTStep App Kit (NeXT), and Smalltalk-80 MVC (ParcPlace). Programming with frameworks requires a new way of thinking for developers accustomed to other kinds of systems. In fact, it is not like "programming" at all in the traditional sense. In old-style operating systems such as DOS or UNIX, the developer's own program provides all of the structure. The operating system provides services through system calls — the developer's program makes the calls when it needs the service and control returns when the service has been provided. The program structure is based on the flow-of-control, which is embodied in the code the developer writes. When frameworks are used, this is reversed. The developer is no longer responsible for the flow-of-control. The developer must forego the tendency to understand programming tasks in term of flow of execution. Rather, the thinking must be in terms of the responsibilities of the objects, which must rely on the framework to determine when the tasks should execute. Routines written by the developer are activated by code the developer did not write and that the developer never even sees. This flip-flop in control flow can be a significant psychological barrier for developers experienced only in procedural programming. Once this is understood, however, framework programming requires much less work than other types of programming. In the same way that an application framework provides the developer with prefab functionality, system frameworks, such as those included in a preferred embodiment, leverage the same concept by providing system level services, which developers, such as system programmers, use to subclass /override to create customized solutions. For example, consider a multi-media framework which could provide the foundation for supporting new and diverse devices such as audio, video, MIDI, animation, etc. The developer that needed to support a new kind of device would have to write a device driver. To do this with a framework, the developer only needs to supply the characteristics and behavior that is specific to that new device. The developer in this case supplies an implementation for certain member functions that will be called by the multi-media framework. An immediate benefit to the developer is that the generic code needed for each category of device is already provided by the multi-media framework. This means less code for the device driver developer to write, test, and debug. Another example of using system frameworks implements I/O frameworks for SCSI devices, NuBus cards, and graphic devices. Because there is inherited functionality, each framework provides support for common functionality found in its device category. Other developers depend on these consistent interfaces various other devices. A preferred embodiment takes the concept of frameworks and applies it throughout the entire system. For the commercial or corporate developer, system integrator, or OEM, this means all the advantages that have been illustrated for a framework such as MacApp can be leveraged not only at the application level for such things as text and user interfaces, but also at the system level, for services such as graphics, multi-media, file systems, I/O, testing, etc. Application creation in the architecture of a preferred embodiment is essentially like writing domain-specific puzzle pieces that adhere to the framework protocol. In this manner, the whole concept of programming changes. Instead of writing line after line of code that calls multiple API hierarchies, software will be developed by deriving classes from preexisting frameworks within this environment, and then adding new behavior and/or overriding inherited behavior as desired. Thus, the developer's application becomes the collection of code that is written and shared with all the other framework applications. This is a powerful concept because developers will be able to build on each other's work. This also provides the developer the flexibility to customize as much or as little as needed. Some frameworks will be used just as they are. In some cases, the amount of customization will be minimal, so the puzzle piece the developer plugs in will be small. In other cases, the developer may make very extensive modifications and create something completely new. In a preferred embodiment, as shown in Figure 1, a program resident in the RAM 14, and under the control of the CPU 10, is responsible for managing various tasks using an object oriented graphic framework. The program employs a new architecture to implement cursor tools. "Tools" are normally associated with icons that can be clicked on to select. Once selected, the tool changes the cursor's shape and lets the user draw in the content region of a document. MacPaint's paint-brush tool is a classic example of a cursor tool. These tools are referred to as cursor tools because they change the cursor and effect the data directly under the cursor. Characteristics that are associated with cursor tools include selection by clicking on a tool icon; and changing the current cursor shape to indicate a user is "holding" the selected tool. Cursor tools come in various types including creators, selectors, and selector/effectors. Creators are active over the content region of the active document. Selectors and Selector /Effectors are active only over frames of a type they understand, in the active document. Persistence In the Apple Macintosh computer, the selected cursor tool persists within an application. For example, if you select the paint-brush tool in MacPaint, switch to MacDraw and select the Rectangle tool, and then switch back to MacPaint, the selected tool will be the paint-brush — the last tool you selected in MacPaint. In a preferred embodiment, tools will persist within a place, but not across places. For example, if a rectangle cursor tool is selected in one application, it will remain the selected cursor tool no matter which frame or document that is made active. Examples of Cursor Tools • A polygon cursor tool: *- ■ • The arrow selection cursor tool: *v • A color-grabber ("eye-dropper") cursor tool: & Cursor Tool Cluster Clusters are a means for logically and visually grouping related cursor tools. One can think of them as a view that holds various cursor tools. Tool clusters are not themselves panels — developers can use them on panels. Figure 2 is an example of a prior art cursor tool cluster used in MacDraw. Command Panels Command panels group and organize all of a frame's commands that do not appear directly on the frame furniture or in a frame's menu. Command panels provide interfaces to these commands through cursor tools (clustered or not), buttons, sliders, pull-down menus, scrolling lists, text-fields, additional panels, or any custom control a developer may create. All command panels must contain a frame-creation tool — a cursor tool that can be used to draw a frame of the type represented by the panel. The relationship between a command panel and its frames is similar to the relationship between an application and its documents. The command panel can be used to create its frames, and it holds much of the interface for manipulating the frame and its contents. But there is a significant difference. In prior art tool systems, the application owns its documents, literally surrounding them. In a preferred embodiment, the document is supreme. The document owns and surrounds the frames, the command panel is simply a tool that a user can employ, using it to create or manipulate frames in a document. In this model, an application is simply a command panel and a stationery pad designed to provide an interface to the commands for a frame of a particular type, and provide a frame creation cursor tool for the frame of its type. Command panels group controls that work on a single frame-type together, and vendors will often create a command panel for each of their frame types, so command panels may appear to group controls by vendor. For example, Wordperfect would develop a Wordperfect command panel for their Wordperfect frame type. For common frame-types, such as graph edit applications, there may be several different command panels. Command panels could eventually be user constructable, so that users could group all their image manipulation controls, from whatever vendor they choose, on a single command panel. A command can be accessed through the global command panel container or a command panel bar. The command panel for the active frame can be brought to the front with a multiple key sequence, such as a control-key press. Figure 3 is a command panel in accordance with a preferred embodiment. The command panel bar contains icons that represent various command panels that a user may have installed. In addition, the top two icons on the bar are special: the topmost icon always represents the command panel for the active frame, and the second icon always contains a command panel with a cluster of tools that apply globally to any frame-type. The icons include a selection arrow and an optional magnifier and color-grabber. Unlike earlier designs which suggested that the command panel bar would be filled with all the command panels of the frames in a document, or on the desktop, in this design, the user determines which panels are available. Actions available to a user through command panels include capability to click-drag an icon to pull out an associated command panel. Command panels may also be removed from the command panel bar and placed on the desktop. Single- clicking a command panel icon selects a default tool which is usually the frame creation tool. In the case of the select tool command panel, the default tool is the arrow selection tool. Figure 4 illustrates an example of a command panel bar in accordance with a preferred embodiment. Command Panel Container When users install command panels, they are gathered into a global command panel container in the workspace. They can always access the panels in this container, or they can place them on various command panel bars. Figure 5 illustrates an example of a command panel in accordance with a preferred embodiment. Current Tool versus Active Tool Users set the current cursor tool by selecting it from within a tool cluster. Figure 6 is an illustration of a tool cluster in accordance with a preferred embodiment. The current tool only becomes active when the user moves the cursor over a screen region in which the tool can function. Whenever the cursor is in a region inappropriate for the current tool, the active tool reverts to the selection tool and the cursor shape reverts to the arrow. Active regions Active regions are only within the active document. Anywhere outside of the active document, including the active document's furniture, the active tool becomes the selection arrow. Within the active document, the active regions depend on the current tool and the type of the frame under the cursor. Because of click-through, whether a frame is active or not is unimportant. As mentioned above, cursor tools come in three categories: creators, selectors, and selector effectors. • Creator's create new data, i.e. a circle drawing tool. • Selectors select existing data, i.e. Photoshop's Magic Wand. • Selector /Effectors select and change data, i.e. MacPaint's eraser tool. Creator cursor tools are active above all frames that can embed. If a user draws a circle on a frame without a circle data type, the Tool Framework will create a new frame that does understand circles, place the circle in the new frame, and embed the new frame into the existing frame. This explicit frame creation allows users to create data where they need it, when they need it, without having to first create the appropriate frame. Selector and Selector/Effector cursor tools are active only above frames of a type they understand. For example, the MacPaint eraser tool is only active above MacPaint frames. Above all other frames, the active tool becomes the selection arrow. Figure 7 illustrates some examples of various types of frames in accordance with a preferred embodiment. An Active frame 700, Inactive frame 720, PinkDraw frame 710 and Text Frame 740 each have distinguishing characteristics. Figure 8 illustrates a desktop with various frames in accordance with a preferred embodiment. In the Figure, a user has two documents open, one active 800, the other inactive 810. Both documents have two frames, one PinkDraw frame and one Text frame. The user is choosing tools from PinkDraw's command panel 830. Figure 9 illustrates a user selection of a rectangle cursor tool, a creator in accordance with a preferred embodiment. Outside of the active document's content region (root-frame), the active tool is the selection arrow. Figure 10 illustrates the selection arrow in accordance with a preferred embodiment. Figure 11 illustrates the cursor rectangle tool becoming the active tool in accordance with a preferred embodiment. Figure 12 illustrates the selection arrow passing over an inactive document, so the selection arrow becomes the active tool in accordance with a preferred embodiment. Figure 13 illustrates the selection process for a smudge tool, a selector /effector, in accordance with a preferred embodiment. Figure 14 illustrates enabling a smudge tool only when the cursor passes over a particular frame in accordance with a preferred embodiment. Figures 15 and 16 illustrates the dynamics of the tool cursor as it passes through a content region in accordance with a preferred embodiment. As the cursor passes through a content region of the active document and other non-PinkDraw frames, the active tool becomes the selection tool. Accessing/Retrieving Command Panels There are several ways to access a command panel. Users can open a panel by double-clicking its icon from within the global panel container or any other workspace container. For any panels that have been placed on the Panel Bar, users can simply select the panel's icon and retrieve it. When users select a frame, they can issue a "Show command panel" command, and the workspace will open the default command panel for the current frame's type. So, If I select a PinkDraw frame and choose "Show command panel", the workspace will open the PinkDraw command panel. Multiple command panels per Frame Type Some document types can be opened by several applications. For example Painter, MacPaint, Photoshop, MacDraw, and TeachText can all open PICT files. In accordance with a preferred embodiment, certain frame types, such as images and text, will have many different command panels. To choose among all the possible command panels when working with a particular frame, a frame's property sheet allows users to select a command panel and even set a default command panel for a particular frame's type. The "Show command panel" command opens a default command panel. Frame and Window Activation It is important to understand how windows and frames are activated, because tools other than the selection arrow are only active within the active window. When discussing activation, there are two issues to consider. First, when does the window or frame activate? Second, how does the initial click into an inactive frame or window effect the data? Frames Frames must activate on mouse-down because their activation feedback may be important to the action the user is initiating. For example, if the user clicks down on a frame with the rectangle cursor tool, the frame must activate to show its bounds so that the user can know where the rectangle will be clipped. The first click within an inactive frame not only causes activation, but because of click-through effects, the contents of the frame behave as if the frame had already been active. So, if the eraser cursor tool is selected and used to draw across an inactive frame, the first click detected will erase some data. Window Windows activate when a mouse-up event occurs within their bounds. The mouse-up can come after a click within the window's bounds or as the user releases the mouse button when dragging an object into the window. Because windows do not activate until mouse-up, the active tool will always be the selection arrow during a drag. If the current tool is something other than the selection arrow, it will become active only after the drag has been completed and the target window has activated. The first click within an inactive window cannot affect the contents of the window other than to select or drag them. It is important that the first click do nothing damaging so that users can't accidentally destroy data by swiping a selector /effector tool across the screen. But, by letting the first click select and drag data, drag-and-drop actions are accelerated. Since the window will not activate until mouse-up, an object can be selected from an inactive window and dragged into an active window without ever causing the inactive window to come to the front. Figure 17 summarizes the window and frame processing in accordance with a preferred embodiment. Tools Architecture Overview The tools system provides a structure for developing cursor tools that can be used across frames and documents, and provides the necessary system services for transporting tools from tool selection controls (such as a tool palette) to the frames where they can effect user data. The TTool class provides system services for transporting tools from tool selection controls. A TTool is a simple class that contains a TToolLnteractor, a cursor graphic, a palette graphic, a text name, and type negotiation information. A TToolLnteractor is a straightforward subclass of TInteractor. It adds only protocol for passing a view and presentation to the interactor. Once a user has moused-down in an appropriate frame with a tool, the TToolLnteractor modifies the data visible in the frame. The palette graphic and text name are used by controls that set the current tool for displaying an identifying graphic or text string. The cursor graphic is the shape that the cursor will take on when the tool crosses over a frame in which it can be used. The type negotiation information is a list of selection types which the tool can work on. This list is used to determine whether a tool can function in a given frame. Setting and Distributing the Current Tool Three objects work in concert to set and distribute the current tool. They are the SetCurrentToolCmd, the ToolServer, and the ToolNegotiator. SetCurrentToolCmd When activated, the SetCurrentToolCmd takes a given TTool and sends it to the ToolServer. The SetCurrentToolCmd is designed to be placed in controls such as buttons and tool palettes. The developer will most often construct a tool palette out of a set of buttons, each with a SetCurrentToolCmd, each command holding a different TTool. ToolServer The ToolServer's job is to associate Tools with Cursors. When a SetCurrentToolCmd sends to the ToolServer a tool and a cursor, the server sets the tool as the current tool for the given cursor. Later, when a view asks for the current tool for a given cursor, the ToolServer looks up the cursor and passes the tool, through a ToolNegotiator, to the requesting view. ToolNegotiator The ToolNegotiator's role is to negotiate with views and then transport the current tool to that view if the negotiation has succeeded. When a cursor is entered, the following sequence of commands occur. First, the cursor passes over the active frame. Then, the frame's content view receives "CursorEntered" notification and requests a negotiator from the ToolServer. Then, the ToolServer constructs a negotiator for the current tool and sends it to the requesting view, and the view then gives a selection to the tool negotiator and executes a command to change the cursor shape. Finally, the tool negotiator compares its list of selection types to the type of the selection provided by the view. If the selection is a type that the tool understands, the negotiator changes the cursor shape to the current tools cursor graphic. Sequence of Calls on MouseDown In a many-cursor environment the view cannot be sure that the cursor that moused down was the same that it most recently negotiated with, so it must again request a negotiator from the ToolServer. The server returns a negotiator and the view passes a selection to the negotiator. If the negotiation succeeds, the negotiator requests the current Toollnteractor. That is, if the tool understands the selection, the negotiator returns a Toollnteractor to the view. The view sets appropriate values in the Toollnteractor and starts the interaction. At this point the interactor takes over and proceeds to run the user interaction. Flow Diagram Figure 18 is a flow diagram showing the logic of tool processing in accordance with a preferred embodiment. Processing commences at 1800 where a tool palette 1840 has detected the selection of a particular tool. At 1800, the current tool is activated and the information associated with the current tool is passed to the toolserver 1810. The toolserver 1810, in turn is called by the tool negotiator 1830 to activate the appropriate feature of the tool via a call 1820 to the toolserver 1810. The toolserver 1810 in turn communicates back status information to the application via a tool negotiation message 1820 to the tool negotiator 1830 to update the display. TAbstractTool Figure 19 is a diagram showing the class hierarchy in accordance with a preferred embodiment. Of particular interest are, TGloballD GetID() const; which gets the tools I.D; and virtual void SetΙD(TGlobalLD); which sets the tool's I.D. The cursor tools framework uses a tool's global I.D. to uniquely identify it within the tool server and to provide appropriate tool changed notification to tool setting commands. TTool TTool is an abstract superclass for defining tools. It also has several static methods for communicating with the tool server. TTool subclasses actually perform very little work. They provide graphics and a text name for menus and tool palettes, a cursor graphic to represent the tool when active, a list of selection types for which the tool is valid, and they create an interactor subclass that is activated when the user mouses-down in a valid frame with the tool selected. The object that performs the actual work of creating or modifying data in a frame is the interactor. Pure Virtual Methods virtual MGraphic* CreatePaletteGraphic() const=0; Subclasses must return a new MGraphic to be used on a tool palette or a menu. virtual void GetPaletteText(TText&) const=0; Subclasses must set the TText's text to a string appropriate for a menu item representing the tool. virtual MGraphic* CreateCursorGraphic() const=0; Subclasses must return a new MGraphic to be used as the cursor when the tool is active. virtual TToolLnteractor* Createlnteractor(TToken) const=0; Subclasses must return a new TToolLnteractor to be started when a user mouses down in a valid frame. The token passed in is the type of selection representing the clicked-in frame. The TTool can use the token to create different interactors depending on the type of the receiving frame. virtual void CreateTypeInfoList(TSequence&) const=0; Subclasses must fill out the sequence with a token for each type of selection from each model that the tool can work within (when TType objects become available, the tokens will be replaced with a TType for each appropriate selection). For example, if a tool works with GrafEdit models and TTextContainer models, the subclass would place TGrafEditSelection::kType and TTextSelection::kType in the sequence. In addition, tools have two behaviors that are set through Boolean methods: Boolean IsOneShot() const; Defaults to FALSE. "One-shot" tools are selected for only a single use. Once the tool is used, the Tool Server automatically switches the current tool to the default tool (the Selection Arrow). By default, this method returns FALSE so that the tool will remain the current tool until the user selects a new tool from a palette or a menu. void SetIsOneShot(Boolean isOne=TRUE); Use this method to dynamically set a tool to be one-shot or not. For example, a palette developer might set tools to always be one-shot when users single-click in the palette, but to be sticky (not one-shot) is the user double-clicks. virtual Boolean IsCreationToolQ const; Defaults to FALSE. Tools that can create data are valid in ANY embedding frame. If the tool does not have explicit knowledge of the frame in which it is being used, the framework will create and embed a new frame that the tool does know about. Currently the framework does not provide embedding support, so override this method only if your tool can explicitly create and embed frames. Static Methods For Accessing The Tool Server static void SetCurrentTool(const TT00I& theTool); Sets "theTool" as the current tool. static TTool* CopyCurrentTool(); Returns a copy of the current tool. static TToolNegotiator* CopyCurrentToolNegotiator(); Returns a new TToolNegotiator for the current tool. static TTool* CopyDefaultTool(); Returns a copy of the systems default tool. For now the default tool is the TSelectionArrow. static void SetToDefaultTool(); Sets the current tool to the default tool. Static Methods For Creating Notification Interests static TInterest* CreateCurrentToolChangedInterest(); Returns an interest used to receive notification each time the current tool changes. static TInterest* CreateCurrentToolTypeChangedInterest(); Returns an interest used to receive notification each time the current tool changes to a tool of a different class. TToolSurrogate A very simple TAbstractTool subclass. It adds no data members. Its only interesting method is an operator defined so that TToolSurrogates can be set to any TAbstractTool. TSelectionArrow A simple TTool subclass with the following attributes: Palette Graphic: The standard Pink Arrow. Cursor Graphic: The standard Pink Arrow. Palette Text: "Arrow". Type Info: TModelSelection::kType. The arrow is valid in any frame. Tool Interactor: None. The selection arrow returns NIL for its interactor. The clicked-in frame must provide its own selection interactor. TToolNegotiator TToolNegotiators are lightweight monomorphic objects that represent the current tool in a receiving team. For example, when the cursor passes over a frame in the active document, the frame is passed a TToolNegotiator. The frame negotiates with the TToolNegotiator and tells the negotiator whether or not to change the cursor shape. One mouse-down, the frame also gets TToolNegotiator, negotiates to see if the current tool is valid in the frame. If so, the frame gets the Toollnteractor from the TToolNegotiator, and starts the interaction. TToken Accepts(const TModelSelection&) const; Returns the type of the selection if the current tool is valid for the given selection and has explicit knowledge of the given selection. Returns TTool: :kEmbeddingSelections if the current tool is a creation tool and is valid for the given selection only because the current selection is an embedding selection. Returns TTool::kSelectionRejected if the tool is not valid for the given selection. void AdjustCursorShapeFor(const TModelSelection&) const; Sets the cursor shape to the current tool's shape if the tool can apply to the given selection. TToolLnteractor* CreateInteractor(const TModelSelection&) const; First calls Accepts for the selection. If the current tool accepts the given selection, it returns the tool's interactor. Otherwise it returns NIL. Common use is: TToolLnteractor* anLnteractor=NIL; TToolNegotiator* negotiator=TTool::CopyCurrentToolNegotiator(); if ( anlnteractor = negotiator->Create!nteractor(aSelection)) anLnteractor->StartTracking(); else { // start a selection interactor } TToken GetToolType() const; Returns the type of the current tool. TToolInteractor TToolInteractor's have methods for setting and getting a view and selection which subclasses often pass to there interaction states. TToolInteractors know if they where created by a one-shot tool. If they were, they call TTool: :SetToDefaultTool in TToolInteractor::Stop Tracking. void SetView(TView*); void SetSelection(TModelSelection&); TView* GetView() const; TModelSelection* GetSelectionQ const; CALLER / DISPATCHER CLASSES TToolServer TToolServer is a dispatcher class that implements the tool server. Figure 20 is a TToolServer class diagram in accordance with a preferred embodiment. TToolServerCaller TToolServer Caller is the dispatcher class used by TTool to communicate with the tool server. You should never have to instantiate one of these or speak to one directly. COMMAND CLASSES TSetCurrentToolCmd Sets the current tool in the tool server to its bound tool. Figure 21 illustrates the command classes in accordance with a preferred embodiment. TSetCurrentToolCmd(const TT00I& theTool); Constructs a command with theTool as its bound tool. void SetTool(const TT00I& theTool); Sets theTool as the commands bound tool. The command discards its old tool, if it had one. Boolean GetSelected(); Returns whether the commands bound tool is the current tool (i.e. whether a control holding this command should show itself as "selected). void SetSelected(Boolean); Can be used as a controls CommandBooleanSetter, but it really does nothing. The command sets its selected state based solely on notification from the tool server. TInterest* CreateSelectionStateChangedLnterest() const; Use this interest to receive notification when the selected state of a particular command changes. The command uses this interest when a control calls TSetCurrentToolCmd::ConnectData(). TSetToDefaultToolCmd Sets the current tool to the default tool. CURSOR GRAPHICS MGraphic subclasses with pre-built geometries. Figure 22 illustrates some of the pre-built geometries. TCrossHairGraphic A draw program style cross hair T . TExGraphic A big pink X, used for debugging Jv TArrowGraphic An arrow * UTILITY CLASSES TToolInstancelnterest This interest is constructed with a TAbstractTool. It expresses an interest in a particular instance of a TAbstractTool becoming the current tool. Figure 23 illustrates the utility classes in accordance with a preferred embodiment. TToolInstanceInterest(const TAbstractTool&, MNotifier*, const TToken&); TToolChangedNotification The Tool Server throws TToolChangedNotification every time the current tool changes. The notification holds a TToolSurrogate for and he class name of the new current tool. Methods for extracting data from the notification: TToolSurrogate GetToolSurrogate() const; TToken GetToolType() const; TCursorToolException The exception subclass thrown by the Cursor Tool framework. Errors defined by TCursorToolException: kNoBoundCursor = 0xlD02 TSetCurrentToolCmd::Do()called with no bound cursor. This exception is currently not used. It will be thrown when the cursor server supports multiple cursors. At that time, programmers will need to bind both a tool and a cursor to the command before issuing it. kNoBoundToolInCommand = 0xlD02 Thrown when trying to call a method on TSetCurrentToolCmd that requires a bound tool when the command has no bound tool. kNoBoundToolInServer = 0xlD03 Thrown when trying to call a method on TToolServer that requires a current tool before a current tool has been set. While the invention has been described in terms of a preferred embodiment in a specific system environment, those skilled in the art will recognize that the invention can be practiced, with modification, in other and different hardware and software environments within the spirit and scope of the appended claims.

Claims: CLAIMS Having thus described our invention, what we claim as new, and desire to secure by Letters Patent is: 1. A method for performing operations on a computer with a memory, graphic, view objects and an attached display, comprising the steps of: (a) detecting a selection signal; (b) identifying the graphic object corresponding to a location of the cursor when the selection signal is detected; (c) determining a window corresponding to the location; (d) determining an object in the graphic object corresponding to the location; (e) executing a command object associated with the particular view object based at the location of the cursor when the selection signal is detected; (f) passing a tool object associated with the command object to a tool server object; (g) setting the current tool for the cursor within the tool server object to the tool object; and (h) linking, via the tool server object, the tool object and an application. 2. A method as recited in claim 1, including the step of linking the tool object and the application across an address space. 3. A method as recited in claim 1, including the step of visually modifying a tool object in a menu of tool objects to indicate the active cursor tool. 4. A method as recited in claim 1, including the step of selecting a tool object from a menu of tool objects. 5. A method as recited in claim 1, including the step of displaying a tool object in a menu of tool objects. 6. A method as recited in claim 1, including the step of displaying a frame indicative of the tool object state. 7. A method as recited in claim 1, including the step of varying the cursor based on the tool object. 8. A method as recited in claim 1, including the step of varying the cursor based on the tool object state. 9. An apparatus for cursor tool processing, comprising: (a) a processor; (b) a storage attached to and under the control of the processor; (c) a display attached to and under the control of the processor; (d) means for detecting a selection signal; (e) means for identifying the graphic object corresponding to a location of the cursor when the selection signal is detected; () means for determining a window corresponding to the location; (g) means for determining a view object in the graphic object corresponding to the location; (h) means for executing a command object associated with the particular view object based at the location of the cursor when the selection signal is detected; (i) means for passing a tool object associated with the command object to a tool server object; (j) means for setting the current tool for the cursor within the tool server object to the tool object; and (k) means for linking, via the tool server object, the tool object and an application. 10. An apparatus as recited in claim 9, including means for linking the tool object and the application across an address space. 11. An apparatus as recited in claim 9, including means for visually modifying a tool object in a menu of tool objects to indicate the active cursor tool. 12. An apparatus as recited in claim 9, including means for selecting a tool object from a menu of tool objects. 13. An apparatus as recited in claim 9, including means for displaying a tool object in a menu of tool objects. 14. An apparatus as recited in claim 9, including means for displaying a frame indicative of the tool object state. 15. An apparatus as recited in claim 9, including means for varying the cursor based on the tool object. 16. An apparatus as recited in claim 9, including means for varying the cursor based on the tool object state. 17. A method for performing operations on a computer with a memory, objects in an object-oriented operating system, at least one cursor and an attached display, comprising the steps of: (a) detecting that a cursor has entered a region on the display; (b) obtaining a current tool corresponding to the detected cursor; (c) obtaining a tool negotiator object corresponding to the current tool; (d) calling the tool negotiator object to determine if the current tool is valid within the region on the display; (e) obtaining a graphic object corresponding to the current tool; and (f) changing the cursor to the graphic object. 18. A method as recited in claim 17, wherein the tool negotiator object negotiation includes the following steps: (a) obtaining a list of selection types associated with the tool; and (b) comparing the list of selection types with a list of selection types associated with a data associated with the region on the display. 19. A method as recited in claim 17, including the steps of: (a) detecting a mouse event; (b) obtaining a current tool corresponding to the detected cursor; (c) obtaining a tool negotiator object corresponding to the current tool; (d) calling the tool negotiator object to determine if the current tool is valid within the region on the display; (e) obtaining the tool interactor from the tool negotiator; (f) transferring control to the tool interactor; and (g) applying a tool specific action under the control of the tool interactor to the region on the display. 20. A method as recited in claim 17, including the step of embedding a frame within the region on the display.

Inventors: WISHNIE JEFFREY, WISHNIE, JEFFREY
Applicants: TALIGENT INC, TALIGENT, INC.
Application year: 1994
Main classification: G06F3
IPC codes: G06F3, G06F9, G06F17