In general, the present invention relates to computer software and user interfaces and, in particular, to systems and methods for controlling modifications to a user interface.
In general, software applications and the operating systems in which they run provide user interfaces (UIs) to the commands necessary to use the functions of the application or system. The commands are typically represented in the UI as selectable items with text or as a combination of text and an image (e.g., a command icon), and are organized into lists that facilitate the selection and execution of the commands. The lists of selectable items are often hierarchical, with sub-lists of items nested within the lists of items. Examples of different types of common UIs that manage lists of items representing commands are the familiar menu and submenu, often seen in today's applications, toolbars, often with drop-down lists, as well as lists of hyperlinks, buttons, and tasks.
The UIs provided by an application or operating system are frequently modified by other applications to customize, add to, or otherwise enhance the functionality of the original application or operating system and/or the appearance of the UI. In this context, the original application or operating system is generally referred to as the host, and the other applications are generally referred to as extensions to the host, so named because they are used to extend various aspects of the host. Extensions take a variety of forms, including plug-ins, add-ins, utilities, or any other type of executable software. Hosts whose usefulness can be extended in this way include graphical operating systems, like the Microsoft Windows® operating system, and applications having a graphical user interface such as the Microsoft Outlook® e-mail client or Internet Explorer® browser products.
The Windows® operating system provides various programming interfaces that extensions can use to facilitate modifying a host UI after the host UI has been loaded or created. For menu-type UIs, these changes may include adding or removing menu items and modifying existing menu items by the menu item's identifier or by the menu item's position.
The menu item's identifier is a unique, host-assigned integer associated with each menu item. The menu item's position is a zero-based integer that indicates where the menu item is located relative to the other menu items in the host menu, including the separators, the non-selectable horizontal lines that are used to divide a vertical menu into groups of related items. For example, the leftmost item in a horizontal menu (or the topmost item in a vertical menu) would likely be assigned a menu item identifier of “1” located at position “0.”
An example of one such Windows® programming interface to facilitate changing a host menu is IContextMenu, an interface to the Windows® context menu (the shortcut menu that is provided when a user right clicks on certain objects accessed via the Windows® Shell). For instance, using the QueryContextMenu method of the IContextMenu interface and the InsertMenuItem function, an extension may add a new menu item to the context menu. With this interface, the host returns the minimum and maximum values that the extension can use to assign menu-item identifiers when inserting new menu items, and the extension specifies the zero-based position at which to insert the new menu item.
As the use of extensions to enhance the functionality of hosts becomes more prevalent, it is not uncommon for a host UI to be modified by several extensions at the same time. A host cannot realistically know of all the extensions that exist. This can lead to conflicts in the UI, particularly when multiple extensions are modifying the same positions within the host's original UI. Sometimes the conflicts render the UI unusable due to accidental deletion or modification of critical commands from the UI. Some extensions can even render the original application or operating system unstable, causing it to hang. In some cases, malicious extensions spam the host UI with modifications to intentionally cause the host to hang. Existing programming interfaces, such as IContextMenu, fail to prevent such problems.
Moreover, many subjective decisions go into laying out a UI. Considerations of aesthetics, simplicity, the goal of the underlying host software, and the target user, among others, all factor into the UI layout. The goals and target user will often change between versions of the host software, resulting in changes in the UI layout from one version to the next. An extension UI is generally designed to match the host's UI layout in the version(s) of the host software that exists during the extension development. Thus, when extensions attempt to extend versions of the host UI later than the version for which they were originally designed, they are often incompatible. An example scenario is a host application that removes its “View” submenu and merges those submenu items into one or more other submenus, such as the “Tools” submenu. Extensions that attempt to add commands to the “View” submenu using existing programming interfaces may fail. Neither can the host realistically test every extension when developing the new version of the host UI to avoid such failures.
To overcome the above-described problems, a system, method, and computer-accessible medium for modifying a host UI are provided. The system and method provide an improved programming interface that permits multiple extensions to safely modify the host's UI, regardless of the version of the host UI for which they were originally designed.
In accordance with one aspect of the present invention, each command represented in the host UI is associated with a command item. A command item is an object that is uniquely identified by a universal unique identifier (UUID) and has a number of properties that define the UI for the associated command. For example, a command item may include properties that define the display icon, text, and hotkeys for the associated command, as well as properties that define some of the off-screen features provided for the command, including the tooltip description, the help topic text, etc.
In accordance with another aspect of the present invention, a host constrains extensions by permitting new commands to be inserted in the host UI only at certain insert locations. An insert location represents an actual location in the host UI where the inserted command's extension UI will be displayed. Like a command item, an insert location is also uniquely identified by a UUID. The actual location of an insert location in a host UI is dynamically defined by the host, and may change or even be eliminated from one version of the host UI to another.
In accordance with a further aspect of the present invention, using the improved programming interface, the host passes the available insert locations to extensions that seek to modify the UI. Each extension returns one or a set of command items that represent the commands that the extension requests to add to the host's UI at one or more of the available insert locations. The host loads the extensions and recursively modifies the UI as requested by each extension in accordance with the available insert locations and the extension's load order relative to the other extensions. The load order may be arbitrary or predefined.
In accordance with yet another aspect of the present invention, before returning the command items that represent the commands that the extension requests to add to the host's UI, each extension may itself load subextensions that recursively modify the extension's UI similar to the manner in which the host loads extensions that modify the host's UI. In this way, the improved interface not only prevents UI conflicts between competing extensions, but also prevents interference with a parent extension's modifications of its own UI.
In accordance with a still further aspect of the present invention, after loading the extensions, the commands are displayed in the modified host UI at the designated insert locations using the properties defined in the associated command item.
In accordance with yet other aspects of the present invention, a computer accessible medium for modifying a host UI is provided. The computer accessible medium comprises data structures and computer executable components comprising a programming interface for permitting multiple extensions to safely modify the host's UI, regardless of the version of the host UI for which they were originally designed. The data structures define command item and insert location data in a manner that is generally consistent with the above-described method. Likewise, the computer executable components are capable of performing actions generally consistent with the above-described method.
The foregoing aspects and many of the attendant advantages of this invention will become more readily appreciated as the same become better understood by reference to the following detailed description, when taken in conjunction with the accompanying drawings, wherein:
The following discussion is intended to provide a brief, general description of a computing system suitable for implementing various features of the invention. While the computing system will be described in the general context of a personal computer usable in a distributed computing environment, where complementary tasks are performed by remote computing devices linked together through a communication network, those skilled in the art will appreciate that the invention may be practiced with many other computer system configurations, including multiprocessor systems, minicomputers, mainframe computers, and the like. In addition to the more conventional computer systems described above, those skilled in the art will recognize that the invention may be practiced on other computing devices including laptop computers, tablet computers, personal digital assistants (PDAs), and other devices upon which computer software or other digital content is installed.
While aspects of the invention may be described in terms of programs executed by a Web browser in conjunction with a personal computer, those skilled in the art will recognize that those aspects also may be implemented in combination with other program modules. Generally, program modules include routines, programs, components, data structures, etc., that perform particular tasks or implement particular abstract data types.
A number of program modules may be stored in the drives and RAM 330, including an operating system 346, one or more application programs 348, other program modules 350 such as the extensions and interfaces of the present invention, and program data 352, including the command item and insert location data of the present invention. A user may enter commands and information into the personal computer 302 through input devices such as a keyboard 360 or a mouse 362. Other input devices (not shown) may include a microphone, touch pad, joystick, game pad, satellite dish, scanner, or the like. These and other input devices are often connected to the processing unit 322 through a user input interface 364 that is coupled to the system bus, but may be connected by other interfaces (not shown), such as a game port or a universal serial bus (USB). A display device 390 is also connected to the system bus 326 via a display subsystem that typically includes a graphics display interface (not shown) and a code module, sometimes referred to as a display driver, to interface with the graphics display interface. While illustrated as a stand-alone device, the display device 390 could be integrated into the housing of the personal computer 302. Furthermore, in other computing systems suitable for implementing the invention, such as a PDA, the display could be overlaid with a touch-screen. In addition to the elements illustrated in
The personal computer 302 may operate in a networked environment using logical connections to one or more remote computers, such as a remote computer 365. The remote computer 365 may be a server, a router, a peer device, or other common network node, and typically includes many or all of the elements described relative to the personal computer 302. The logical connections depicted in
When used in a LAN networking environment, the personal computer 302 is connected to the LAN 366 through a network interface 368. When used in a WAN networking environment, the personal computer 302 typically includes a modem 369 or other means for establishing communications over the WAN 367, such as the Internet. The modem 369, which may be internal or external, is connected to the system bus 326 via the user input interface 364. In a networked environment, program modules depicted relative to the personal computer 302, or portions thereof, may be stored in the remote memory storage device. It will be appreciated that the network connections shown are exemplary and other means of establishing a communication link between the computers may be used. In addition, the LAN 366 and WAN 367 may be used as a source of nonvolatile storage for the system.
The host identifies the actual locations 422 in the host UI where the host will allow one or more new command items 402 to be inserted by an extensions (or, in the case of a resource 400 for an extension UI, to be inserted by a sub-extension). More specifically, each of the actual locations 422 is represented by an insert location 420 in the resource 400. An insert location 420 is a collection of data about a location that may be stored in a data structure 428. For each of the insert locations, the host also generates a UUID 424.
The host is able to track various properties for each command item 402, including the text 408 that is to be displayed in the UI for the command, the icon 410 that is to be used to depict the command, the hotkey 412 associated with the command, and any other information 414 associated with the command, such as tip information displayed with the user, hovers a pointing device over the text 408 or icon 410 representing the command, or the help text that is displayed when a user requests help with the command.
The command item 402 may include an index 416 for use when multiple command items 420 are specified in an array. Command items 402 are specified in an array when there are sibling command items or child command items. For example, sibling command items occur when there are related commands that appear next to one another in a menu or submenu, and child command items occur when there are submenu items that are revealed when a user clicks on a parent command that has one or more children commands, e.g., a submenu within a menu, or a pull-down list within a toolbar.
Preferably, the extension interface 522 extends an existing programming interface for commands, such as the IOleCommandTarget interface. For example, the host may call the Exec method of the IOleCommandTarget interface to execute a command when a user has selected a command item in the extended host UI. The host may further use the QueryStatus method of the IOleCOmmandTarget interface to determine the UI state of a command item 402 in preparation for displaying the command item's UI (corresponding to the above-described set command item status method 516, as implemented by the host 510 and used by an extension 530 to update the status of a command item 402).
The New 608 command item is a parent command item that, when selected, opens up a lower order vertical submenu list 628 that contains four child command items 402 (
The New Stationary 642 command item is a parent command item that, when selected, opens up a still lower order vertical submenu list 644 that contains three grandchild command items,-Stationary X 646, Stationary Y 648, and Stationary Z 650.
The Edit menu item 604 expands into yet another vertical submenu list 652 containing one command item, View 656, and one insert location, IL #7654. As shown, UI 600 indicates that the host constrains extensions from inserting any command items after the View 656 command item in the vertical submenu list 606.
In operation, the host loads the extensions and passes to each extension the UUIDs of available insert locations, in this case, IL #1610, IL #2614, IL #3618, IL #4622, IL #5632, IL #6636, and IL #7654. Each extension then returns a set of command items to be inserted into one of the available locations. In this case, extension A 702 has returned a set of two command items, command item G 708 and command item H 710, to be inserted into IL #2610. Extension B 704 has returned one command item, command item I 712 to be inserted into IL #2. Extension C 706 has returned a set of two command items, command item J 714 and command item K 716, to be inserted into IL #2610. The host determines the load order of the extensions and concatenates the command items accordingly for insertion into the IL #2614 insert location. The extensions cannot prioritize their command items over other extensions' command items.
Referring back to
While the presently preferred embodiments of the invention have been illustrated and described, it will be appreciated that various changes may be made therein without departing from the spirit and scope of the invention. For example, in other embodiments of the present invention, extensions may not extend their UIs prior to extending a host UI. In yet other embodiments, the command items of extensions written to previous versions of the host UI may not be accommodated.