US5680563A - Object-oriented operating system enhancement for filtering items in a window - Google Patents

Object-oriented operating system enhancement for filtering items in a window Download PDF

Info

Publication number
US5680563A
US5680563A US08/280,169 US28016994A US5680563A US 5680563 A US5680563 A US 5680563A US 28016994 A US28016994 A US 28016994A US 5680563 A US5680563 A US 5680563A
Authority
US
United States
Prior art keywords
display
filter
filtered
items
display items
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.)
Expired - Lifetime
Application number
US08/280,169
Inventor
Bradley A. Edelman
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.)
Apple Inc
Original Assignee
Object Technology Licensing Corp
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 Object Technology Licensing Corp filed Critical Object Technology Licensing Corp
Priority to US08/280,169 priority Critical patent/US5680563A/en
Assigned to TALIGENT, INC. reassignment TALIGENT, INC. ASSIGNMENT OF ASSIGNORS INTEREST (SEE DOCUMENT FOR DETAILS). Assignors: EDELMAN, BRADLEY A.
Priority to EP95928675A priority patent/EP0772824B1/en
Priority to PCT/US1995/009320 priority patent/WO1996003691A1/en
Priority to DE69503052T priority patent/DE69503052T2/en
Assigned to OBJECT TECHNOLOGY LICENSING CORP. reassignment OBJECT TECHNOLOGY LICENSING CORP. ASSIGNMENT OF ASSIGNORS INTEREST (SEE DOCUMENT FOR DETAILS). Assignors: TALIGENT, INC.
Application granted granted Critical
Publication of US5680563A publication Critical patent/US5680563A/en
Assigned to APPLE INC. reassignment APPLE INC. ASSIGNMENT OF ASSIGNORS INTEREST (SEE DOCUMENT FOR DETAILS). Assignors: OBJECT TECHNOLOGY LICENSING CORPORATION
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/451Execution arrangements for user interfaces

Definitions

  • Modern computer systems utilize an operating system with windowing capability to display items of interest to a user.
  • Examples of such systems include Microsoft Windows, X-Windows for Unix operating system platforms, and the OS/2 operating system from IBM.
  • OS/2 operating system has even added capability for incorporating limited object-oriented processing into the IBM operating system utilizing a front-end called the System Object Model (SOM).
  • SOM System Object Model
  • Windows are useful for organizing information on a display and allow a user to collect information associated with a particular feature in a central repository.
  • users have become more proficient with window processing, they have demanded an additional capability not currently available in any of the aforementioned windowing environments to better utilize an individual window and utilize the information therein.
  • the filtering system is provided with a flexible interface by using object-oriented programming techniques and providing filtering objects organized in a filtering framework containing the filter objects.
  • New filter objects can inherit function from existing filter objects and customized for a particular requirement.
  • FIG. 2 is a flowchart of the filter processing in accordance with a preferred embodiment
  • FIG. 3 is a system flow diagram of the filter processing in accordance with a preferred embodiment
  • FIG. 4 is a block diagram of the major modules as they are loaded in the memory of a computer in accordance with a preferred embodiment
  • FIG. 6 illustrates a display showing a filter menu torn off from the main menu in accordance with a preferred embodiment
  • FIG. 7 illustrates a display showing a window after the show aliases filter has been invoked in accordance with a preferred embodiment
  • FIG. 8 illustrates a display showing a window after the show stationery has been invoked in accordance with a preferred embodiment.
  • FIG. 1 illustrates a typical hardware configuration of a computer 100 in accordance with the subject invention.
  • the computer 100 is controlled by a central processing unit 102, which may be a conventional microprocessor; a number of other units, all interconnected via a system bus 108, are provided to accomplish specific tasks.
  • a particular computer may only have some of the units illustrated in FIG. 1 or may have additional components not shown, most computers will include at least the units shown.
  • computer 100 shown in FIG. 1 includes a random access memory (RAM) 106 for temporary storage of information, a read only memory (ROM) 104 for permanent storage of the computer's configuration and basic operating commands and an input/output (I/O) adapter 110 for connecting peripheral devices such as a disk unit 113 and printer 114 to the bus 108, via cables 115 and 112, respectively.
  • a user interface adapter 116 is also provided for connecting input devices, such as a keyboard 120, and other known interface devices including mice, speakers and microphones to the bus 108.
  • Visual output is provided by a display adapter 118 which connects the bus 108 to a display device 122 such as a video monitor.
  • the workstation has resident thereon and is controlled and coordinated by operating system software such as the Apple System/7, operating system.
  • the invention is implemented in the C++ programming language using object-oriented programming techniques.
  • C++ is a compiled language, that is, programs are written in a human-readable script and this script is then provided to another program called a compiler which generates a machine-readable numeric code that can be loaded into, and directly executed by, a computer.
  • the C++ language has certain characteristics which allow a software developer to easily use programs written by others while still providing a great deal of control over the reuse of programs to prevent their destruction or improper use.
  • the C++ language is well-known and many articles and texts are available which describe the language in detail.
  • C++ compilers are commercially available from several vendors including Borland International, Inc. and Microsoft Corporation. Accordingly, for reasons of clarity, the details of the C++ language and the operation of the C++ compiler will not be discussed further in detail herein.
  • OOP Object-Oriented Programming
  • objects are software entities comprising data elements and routines, or functions, which manipulate the data elements.
  • the data and related functions are treated by the software as an entity and can be created, used and deleted as if they were a single item.
  • the data and functions enable objects to model virtually any real-world entity in terms of its characteristics, which can be represented by the data elements, and its behavior, which can be represented by its data manipulation functions.
  • objects can model concrete things like people and computers, and they can also model abstract concepts like numbers or geometrical designs.
  • Objects are defined by creating "classes" which are not objects themselves, but which act as templates that instruct the compiler how to construct the actual object.
  • a class may, for example, specify the number and type of data variables and the steps involved in the functions which manipulate the data.
  • An object is actually created in the program by means of a special function called a constructor which uses the corresponding class definition and additional information, such as arguments provided during object creation, to construct the object. Likewise objects are destroyed by a special function called a destructor. Objects may be used by using their data and invoking their functions.
  • objects can be designed to hide, or encapsulate, all, or a portion of, the internal data structure and the internal functions. More particularly, during program design, a program developer can define objects in which all or some of the data variables and all or some of the related functions are considered "private" or for use only by the object itself. Other data or functions can be declared "public” or available for use by other programs. Access to the private variables by other programs can be controlled by defining public functions for an object which access the object's private data. The public functions form a controlled and consistent interface between the private data and the "outside" world. Any attempt to write program code which directly accesses the private variables causes the compiler to generate an error during program compilation which error stops the compilation process and prevents the program from being run.
  • Polymorphism is a concept which allows objects and functions which have the same overall format, but which work with different data, to function differently in order to produce consistent results.
  • an addition function may be defined as variable A plus variable B (A+B) and this same format can be used whether the A and B are numbers, characters or dollars and cents.
  • the actual program code which performs the addition may differ widely depending on the type of variables that comprise A and B.
  • Polymorphism allows three separate function definitions to be written, one for each type of variable (numbers, characters and dollars). After the functions have been defined, a program can later refer to the addition function by its common format (A+B) and, during compilation, the C++ compiler will determine which of the three functions is actually being used by examining the variable types. The compiler will then substitute the proper function code.
  • Polymorphism allows similar functions which produce analogous results to be "grouped" in the program source code to produce a more logical and clear program flow.
  • the third principle which underlies object-oriented programming is inheritance, which allows program developers to easily reuse pre-existing programs and to avoid creating software from scratch.
  • the principle of inheritance allows a software developer to declare classes (and the objects which are later created from them) as related.
  • classes may be designated as subclasses of other base classes.
  • a subclass "inherits" and has access to all of the public functions of its base classes just as if these function appeared in the subclass.
  • a subclass can override some or all of its inherited functions or may modify some or all of its inherited functions merely by defining a new function with the same form (overriding or modification does not alter the function in the base class, but merely modifies the use of the function in the subclass).
  • the creation of a new subclass which has some of the functionality (with selective modification) of another class allows software developers to easily customize existing code to meet their particular needs.
  • an application framework for a user interface might provide a set of pre-defined graphic interface objects which create windows, scroll bars, menus, etc. and provide the support and "default" behavior for these graphic interface objects.
  • application frameworks are based on object-oriented techniques, the pre-defined classes can be used as base classes and the built-in default behavior can be inherited by developer-defined subclasses and either modified or overridden to allow developers to extend the framework and create customized solutions in a particular area of expertise.
  • This object-oriented approach provides a major advantage over traditional programming since the programmer is not changing the original program, but rather extending the capabilities of the original program.
  • developers are not blindly working through layers of code because the framework provides architectural guidance and modeling and, at the same time, frees the developers to supply specific actions unique to the problem domain.
  • frameworks There are many kinds of application frameworks available, depending on the level of the system involved and the kind of problem to be solved.
  • the types of frameworks range from high-level application frameworks that assist in developing a user interface, to lower-level frameworks that provide basic system software services such as communications, printing, file systems support, graphics, etc.
  • Commercial examples of application frameworks include MacApp (Apple), Bedrock (Symantec), OWL (Borland), NeXT Step App Kit (NEXT), and Smalltalk-80 MVC (ParcPlace).
  • a system framework such as that included in a preferred embodiment, can provide a prefab functionality for system level services which developers can modify or override to create customized solutions, thereby avoiding the awkward procedural calls necessary with the prior art application frameworks programs.
  • a system framework is used for the filtering and sorting system of the present invention.
  • the filter objects and the sort objects provide their own internal data plus a set of predefined methods for filtering and sorting the items in a particular window into other representations.
  • an application software developer who needs filtering and sorting capabilities only needs to supply the characteristics and behavior of the filters, while the framework provides the actual routines which set up the filters, sort the items and reformat the window to display the correct information on the display.
  • the system can also provide information through alternate means other than a visual display. A user could access an electronic mail system using a telephone and use the filtering mechanism described here to limit which messages would be read to the user over the phone.
  • a preferred embodiment takes the concept of frameworks and applies it throughout the entire system, including the application and the operating system.
  • frameworks such as MacApp
  • FIG. 2 is a flowchart of the filtering logic in accordance with a preferred embodiment of the invention.
  • Processing commences at function block 200 where the object-oriented operating system utilizes the view framework to display a window.
  • the view framework is used to manage display real-estate.
  • a view specifies an area of the display and facilitates using the graphics framework to draw images on that part of the display.
  • the view framework provides clipping and depth ordering when views are overlapping.
  • the system detects the selection of a particular filter from a menu of filtering capabilities and applies the filter to the items in the displayed window as shown in function block 220.
  • the application of the filter includes two visible indicia on the display.
  • the item count on the display is updated based on the number of items that do not meet the filter property which results in their loss of individual identity on the display and subtraction from the active item count as shown in function block 240.
  • the window items are updated to display individually only those items that meet the filter requirements. All others are depicted by an icon showing numerous items tied together as a group utilizing a belt. Processing stops at terminal 250.
  • FIG. 3 illustrates how filters are used in accordance with a preferred embodiment of the invention.
  • information propagates forward using notification 310, 330 and 350 and questions can be asked backward using direct function calls 390, 380 and 370.
  • Filters 325 are held by the filtering framework 320 which provides an important level of indirection. Given this indirection, the filter can be replaced without need for the next node in the information cascade (in this case, the sorter framework 340) to reestablish its connection. Had the filter 325 been in the cascade directly, removal of the filter framework 320 would have broken the cascade.
  • Container Layout View (CLV) 360 is the view information defining the window containing the items as depicted in FIG. 5.
  • the Containable Component Sources (CCS) objects 370, 380 and 390 provide an important architectural freedom. It does not matter what protocol or base classes an object in the cascade has. It only matters that it a CCS can be implemented for it. This is particularly important in the case where the backing object is the model because it properly obeys the architectural need for a data/presentation split. Had the presentation framework placed base class or protocol requirements on the model, the data/presentation split would have been violated. In the preferred embodiment of the system, the data being presented (i.e. a set of files) is held in a "folder model" which could potentially be used by other presentation systems.
  • the presentation system described here demands that every sour of information in the cascade (including the source which is the folder model) must communicate through a CCS interface. Because the folder model can be used with other presentation systems, it would be architecturally incorrect to demand it inherit protocol for use by the presentation. Instead, a CCS that understands how to communicate with the model is implemented which converts the model's protocol into a protocol understood by the presentation system described here.
  • FIG. 4 is a schematic block diagram which illustrates the interaction of a container layout view 432 with three frameworks: the container framework 408, the filter framework 410 and the sorter framework 412, which interaction is indicated schematically by arrows 426, 428 and 430, respectively.
  • Each of the three frameworks communicates with the object-oriented operating system 400 in a preferred embodiment.
  • the container framework 408 contains the Containable Component Reference 414 which is a reference for a Containable Component 416 residing in a small amount of memory.
  • the Containable 415 is an object residing in the object oriented operating system containing information indicative of name, icon and children for each of the icons listed in the Container Layout View 431.
  • the Container Layout View 431 maintains a set of containable component references indicative of what items are represented by the other items icon and currently inactive on the display depicted in FIG. 7.
  • the Containable Component is an object which contains information indicative of a containable and information utilized in displaying the containable 415.
  • the Filter Framework 410 is a collection of objects resident in the object-oriented operating system for enabling filtering.
  • the Containable Container Source 418 provides the information relative to the containable that the filter is processing.
  • the Container Filter 420 is the object that examines a containable and determines whether it should be displayed based on the filtering information.
  • the Container Filter ID 417 is an extensibility mechanism for adding a new id and label for a filter that can thereafter accessed and activated.
  • the Sorter Framework 412 is a collection of objects resident in the object-oriented operating system for enabling Sorting.
  • the Containable Container Source 422 provides the information relative to the containable that the Sorter is processing.
  • the Container Sorter 424 is the object that examines the set of containables and determines what order they should be displayed in.
  • the Container Sorter ID 421 is an extensibility mechanism for adding a new id and label for a Sorter that can thereafter accessed and activated.
  • N Y minus X.
  • FIG. 5 illustrates a display from a user perspective showing a window before filtering has been performed in accordance with a preferred embodiment.
  • the document folders are in the default state which displays all items available for use by a user. Note the status bar indicates: "6 of 6 items shown" and that 6 items appear in the folder.
  • the six items currently active in the window are Folders which has a property of stationery, READ ME which has a property of document, Taligent.Help which has a property of document, READ.ME-alias which has a property of alias, WELCOME-alias which has a property of alias, and Phone-alias which has a property of alias.
  • the window is displayed using objects provided by the toolbox which use the view framework to provide the display real-estate for the window and the graphics system to draw the window frame and decoration.
  • the controls framework is used to add controls like the close-box and window-maximizer to the window's title bar.
  • Each item displayed is backed by a "containable" which is an object which provides information about attributes such as name, type, icon, and Visually represented by a view object used to draw the icon and name.
  • a user has "torn off” the Filter Menu.
  • the filter menu indicates that "Show All” is the selected filter denoted by a check mark located next to the item.
  • the "Show All” filter is the NIL-filter, it does nothing.
  • the Document Folder presentation is unchanged from the previous figure.
  • the system's controls framework provides menu functionality. Using the mouse, a menu can be dragged away from its menu-palette. When the mouse button it released, the menu becomes its own menu palette.
  • a filter When a filter is selected by clicking on the menu, it causes a menu state object to update the menu checkmark and notify the filtering framework that a new filter has been selected. The filtering framework then creates a new filter of the selected type and installs it in the filter holder.
  • the "other items" bundle is backed by a data structure which holds the set of which items are filtered.
  • a filter object of the type selected is created within the Filter Framework.
  • the Filter Framework sends a message to the Sorter Framework to indicate that a new filter has been installed and consequently the filtered status of the presented items may have changed.
  • the sorter then may ask the filter questions to determine if any state has changed and take appropriate action.
  • the Sorter Framework Once the Sorter Framework has synchronized to the change caused by the filter installation, it sends a message forward to the view that some information may have changed. The view then takes similar action and synchronizes to information provided by the sorter.
  • containable components are referred to by containable component references (TContainableComponentReference). References allow the framework to keep information about containable components without keeping copies of the containable components themselves. Further, the filter framework has an object called a TContainableComponentInfo which holds two pieces of information: 1) a TContainableComponentReference, and 2) a boolean value indicating whether or not this containable component is marked filtered.
  • TContainableComponentInfo which holds two pieces of information: 1) a TContainableComponentReference, and 2) a boolean value indicating whether or not this containable component is marked filtered.
  • a filter is an object with the ability to look at a collection of containable components and determine, on the basis of a deterministic algorithm, which containable components should be marked "filtered" and which ones should not be.
  • a deterministic algorithm is one that gives the same result everytime. Given a set of 10 numbers, an algorithm that determines the largest number is deterministic, but algorithm that picks one of the 10 at random is non-deterministic.
  • TContainerFilter has five "interesting" member functions--the pure virtual logic that developers override to customize filter functionality. The behavior of these functions is specified below:
  • SyncUp When SyncUp is called, this is an indication that the source information has changed significantly and the entire internal state of the filter should be updated.
  • Some filters have no internal state. More complex filters must keep track of previously encountered information in order to execute efficiently. Some filters can decide whether a containble component is filtered on a case by case basis, for example a filter that passes containble component whose name starts with the letter "A". Other filters need to consider multiple containble component at once in order to make a decision, for example a filter that only passes containble components whose names are pair of a .C/.h pair. (if a containble component named foo.C existed, it would only pass through the filtered of a containble component named foo.h also existed). Sophisticated filters like this can be implemented more efficiently if they maintain internal state which caches information about all the containble components being presented. SyncUp gives the filter a chance to rebuild this cache when a large change occurs.
  • Add is passed two collections:add is a collection of those containable components that have been added to the source and should be considered by the filter--update the filter's internal state (if any) and decide whether or not each containable component should be filtered out.
  • ChangedResult is used by more sophisticated filters that may change their mind about previously seen containable components when a new one is added. For example, a filter that only allows documents to pass if they are part of a .C or a .h pair may have previously filtered foo.h because foo.C was not in the source. When foo.C is added, it needs to unfilter foo.h--therefore an unfiltered foo.h would be added to the changedResult.
  • Remove is very similar to Add except that instead of considering containable components that have been added to the source, it considers ones that have been removed.
  • Change is very similar to Add except that instead of considering containable components that have been added to the source, it considers ones that have changed in some way. Essentially, this allows for some optimization.
  • the net result of a change should be the same as removing and re-adding the item.
  • One possible implementation of Change is to call Remove and then Add Changes in containble components are important to filtering because the change may change the result of the filter. For example if the filter only passes containble components whose name starts with "A" and a containble component changes its name from "Apple” to "Pear", then the filter which previously passed this containble component needs to reverse its decision and mark the containble component as filtered.
  • TContainerFilterID subclass which serves as a light-weight representation of the filter.
  • TContainerFilterID's have 3 primary functions which include:
  • filters can readily be cascaded without departing from the invention.
  • filters can readily be cascaded without departing from the invention.
  • they can be joined in series to apply a variety of filters to a view before the view is redisplayed.

Abstract

A filtering framework in an object oriented operating system with a processor, such as an IBM PowerPC, a storage connected to and controlled by the processor, a display connected to and controlled by said processor, an object-oriented operating system resident in the storage and under the control of the processor, a view framework in the object-oriented operating system for managing a window on the display, a container framework in the object-oriented operating system for storing and manipulating information indicative of each item displayed in the window on the display, and a filter framework in the object-oriented operating system containing a method and data which respond to selection of a particular filter object and application of the filter object to each item displayed in the window to filter out all items not matching a particular characteristic that is not currently required. The filtered out items in a preferred embodiment are gathered into a bundle of unusable items and displayed in a group. Whereas, the items meeting the particular characteristic are displayed normally on the display along with a count of the items that are currently active on the display.

Description

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, but otherwise reserves all copyright rights whatsoever.
FIELD OF THE INVENTION
This invention generally relates to improvements in computer systems with an object-oriented operating system and, more particularly, to an enhancement to filter items displayed in a window.
BACKGROUND OF THE INVENTION
Modern computer systems utilize an operating system with windowing capability to display items of interest to a user. Examples of such systems include Microsoft Windows, X-Windows for Unix operating system platforms, and the OS/2 operating system from IBM. Recently, the OS/2 operating system has even added capability for incorporating limited object-oriented processing into the IBM operating system utilizing a front-end called the System Object Model (SOM). Windows are useful for organizing information on a display and allow a user to collect information associated with a particular feature in a central repository. However, as users have become more proficient with window processing, they have demanded an additional capability not currently available in any of the aforementioned windowing environments to better utilize an individual window and utilize the information therein.
SUMMARY OF THE INVENTION
The improvement for window environments is a flexible, object-oriented filtering capability to be applied to a window to select only certain items to be individually displayed and all additional items to be grouped collectively. For example, if a window contained five-hundred items ranging from document folders to help information to alias information, and the user only was interested in viewing the alias items, an alias filter is selected and applied to the window items. The window items would be updated with a new item count reflecting the number of visible alias items and the window would be updated to display only the alias items.
The filtering system is provided with a flexible interface by using object-oriented programming techniques and providing filtering objects organized in a filtering framework containing the filter objects. New filter objects can inherit function from existing filter objects and customized for a particular requirement.
BRIEF DESCRIPTION OF THE DRAWING
FIG. 1 is a block schematic diagram of a computer system, for example, a personal computer system on which the inventive object-oriented filtering framework operates;
FIG. 2 is a flowchart of the filter processing in accordance with a preferred embodiment;
FIG. 3 is a system flow diagram of the filter processing in accordance with a preferred embodiment;
FIG. 4 is a block diagram of the major modules as they are loaded in the memory of a computer in accordance with a preferred embodiment;
FIG. 5 illustrates a display showing filters in action in accordance with a preferred embodiment;
FIG. 6 illustrates a display showing a filter menu torn off from the main menu in accordance with a preferred embodiment;
FIG. 7 illustrates a display showing a window after the show aliases filter has been invoked in accordance with a preferred embodiment; and
FIG. 8 illustrates a display showing a window after the show stationery has been invoked in accordance with a preferred embodiment.
DETAILED DESCRIPTION OF THE ILLUSTRATIVE EMBODIMENT
A preferred embodiment of 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 FIG. 1, which illustrates a typical hardware configuration of a computer 100 in accordance with the subject invention. The computer 100 is controlled by a central processing unit 102, which may be a conventional microprocessor; a number of other units, all interconnected via a system bus 108, are provided to accomplish specific tasks. Although a particular computer may only have some of the units illustrated in FIG. 1 or may have additional components not shown, most computers will include at least the units shown.
Specifically, computer 100 shown in FIG. 1 includes a random access memory (RAM) 106 for temporary storage of information, a read only memory (ROM) 104 for permanent storage of the computer's configuration and basic operating commands and an input/output (I/O) adapter 110 for connecting peripheral devices such as a disk unit 113 and printer 114 to the bus 108, via cables 115 and 112, respectively. A user interface adapter 116 is also provided for connecting input devices, such as a keyboard 120, and other known interface devices including mice, speakers and microphones to the bus 108. Visual output is provided by a display adapter 118 which connects the bus 108 to a display device 122 such as a video monitor. The workstation has resident thereon and is controlled and coordinated by operating system software such as the Apple System/7, operating system.
In a preferred embodiment, the invention is implemented in the C++ programming language using object-oriented programming techniques. C++ is a compiled language, that is, programs are written in a human-readable script and this script is then provided to another program called a compiler which generates a machine-readable numeric code that can be loaded into, and directly executed by, a computer. As described below, the C++ language has certain characteristics which allow a software developer to easily use programs written by others while still providing a great deal of control over the reuse of programs to prevent their destruction or improper use. The C++ language is well-known and many articles and texts are available which describe the language in detail. In addition, C++ compilers are commercially available from several vendors including Borland International, Inc. and Microsoft Corporation. Accordingly, for reasons of clarity, the details of the C++ language and the operation of the C++ compiler will not be discussed further in detail herein.
As will be understood by those skilled in the art, Object-Oriented Programming (OOP) techniques involve the definition, creation, use and destruction of "objects". These objects are software entities comprising data elements and routines, or functions, which manipulate the data elements. The data and related functions are treated by the software as an entity and can be created, used and deleted as if they were a single item. Together, the data and functions enable objects to model virtually any real-world entity in terms of its characteristics, which can be represented by the data elements, and its behavior, which can be represented by its data manipulation functions. In this way, objects can model concrete things like people and computers, and they can also model abstract concepts like numbers or geometrical designs.
Objects are defined by creating "classes" which are not objects themselves, but which act as templates that instruct the compiler how to construct the actual object. A class may, for example, specify the number and type of data variables and the steps involved in the functions which manipulate the data. An object is actually created in the program by means of a special function called a constructor which uses the corresponding class definition and additional information, such as arguments provided during object creation, to construct the object. Likewise objects are destroyed by a special function called a destructor. Objects may be used by using their data and invoking their functions.
The principle benefits of object-oriented programming techniques arise out of three basic principles: encapsulation, polymorphism and inheritance. More specifically, objects can be designed to hide, or encapsulate, all, or a portion of, the internal data structure and the internal functions. More particularly, during program design, a program developer can define objects in which all or some of the data variables and all or some of the related functions are considered "private" or for use only by the object itself. Other data or functions can be declared "public" or available for use by other programs. Access to the private variables by other programs can be controlled by defining public functions for an object which access the object's private data. The public functions form a controlled and consistent interface between the private data and the "outside" world. Any attempt to write program code which directly accesses the private variables causes the compiler to generate an error during program compilation which error stops the compilation process and prevents the program from being run.
Polymorphism is a concept which allows objects and functions which have the same overall format, but which work with different data, to function differently in order to produce consistent results. For example, an addition function may be defined as variable A plus variable B (A+B) and this same format can be used whether the A and B are numbers, characters or dollars and cents. However, the actual program code which performs the addition may differ widely depending on the type of variables that comprise A and B. Polymorphism allows three separate function definitions to be written, one for each type of variable (numbers, characters and dollars). After the functions have been defined, a program can later refer to the addition function by its common format (A+B) and, during compilation, the C++ compiler will determine which of the three functions is actually being used by examining the variable types. The compiler will then substitute the proper function code. Polymorphism allows similar functions which produce analogous results to be "grouped" in the program source code to produce a more logical and clear program flow.
The third principle which underlies object-oriented programming is inheritance, which allows program developers to easily reuse pre-existing programs and to avoid creating software from scratch. The principle of inheritance allows a software developer to declare classes (and the objects which are later created from them) as related. Specifically, classes may be designated as subclasses of other base classes. A subclass "inherits" and has access to all of the public functions of its base classes just as if these function appeared in the subclass. Alternatively, a subclass can override some or all of its inherited functions or may modify some or all of its inherited functions merely by defining a new function with the same form (overriding or modification does not alter the function in the base class, but merely modifies the use of the function in the subclass). The creation of a new subclass which has some of the functionality (with selective modification) of another class allows software developers to easily customize existing code to meet their particular needs.
Although object-oriented programming offers significant improvements over other programming concepts, program development still requires significant outlays of time and effort, especially if no pre-existing software programs are available for modification. Consequently, a prior art approach has been to provide a program developer with a set of pre-defined, interconnected classes which create a set of objects and additional miscellaneous routines that are all directed to performing commonly-encountered tasks in a particular environment. Such pre-defined classes and libraries are typically called "application frameworks" and essentially provide a pre-fabricated structure for a working application.
For example, an application framework for a user interface might provide a set of pre-defined graphic interface objects which create windows, scroll bars, menus, etc. and provide the support and "default" behavior for these graphic interface objects. Since application frameworks are based on object-oriented techniques, the pre-defined classes can be used as base classes and the built-in default behavior can be inherited by developer-defined subclasses and either modified or overridden to allow developers to extend the framework and create customized solutions in a particular area of expertise. This object-oriented approach provides a major advantage over traditional programming since the programmer is not changing the original program, but rather extending the capabilities of the original program. In addition, developers are not blindly working through layers of code because the framework provides architectural guidance and modeling and, at the same time, frees the developers to supply specific actions unique to the problem domain.
There are many kinds of application frameworks available, depending on the level of the system involved and the kind of problem to be solved. The types of frameworks range from high-level application frameworks that assist in developing a user interface, to lower-level frameworks that provide basic system software services such as communications, printing, file systems support, graphics, etc. Commercial examples of application frameworks include MacApp (Apple), Bedrock (Symantec), OWL (Borland), NeXT Step App Kit (NEXT), and Smalltalk-80 MVC (ParcPlace).
While the application framework approach utilizes all the principles of encapsulation, polymorphism, and inheritance in the object layer, and is a substantial improvement over other programming techniques, there are difficulties which arise. These difficulties are caused by the fact that it is easy for developers to reuse their own objects, but it is difficult for the developers to use objects generated by other programs. Further, application frameworks generally consist of one or more object "layers" on top of a monolithic operating system and even with the flexibility of the object layer, it is still often necessary to directly interact with the underlying operating system by means of awkward procedural calls.
In the same way that an application framework provides the developer with prefab functionality for an application program, a system framework, such as that included in a preferred embodiment, can provide a prefab functionality for system level services which developers can modify or override to create customized solutions, thereby avoiding the awkward procedural calls necessary with the prior art application frameworks programs. In particular such a system framework is used for the filtering and sorting system of the present invention. The filter objects and the sort objects provide their own internal data plus a set of predefined methods for filtering and sorting the items in a particular window into other representations. Consequently, an application software developer who needs filtering and sorting capabilities only needs to supply the characteristics and behavior of the filters, while the framework provides the actual routines which set up the filters, sort the items and reformat the window to display the correct information on the display. The system can also provide information through alternate means other than a visual display. A user could access an electronic mail system using a telephone and use the filtering mechanism described here to limit which messages would be read to the user over the phone.
A preferred embodiment takes the concept of frameworks and applies it throughout the entire system, including the application and the operating system. For the commercial or corporate developer, systems integrator, or OEM, this means all of 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 printing, graphics, multimedia, file systems, I/O, testing, etc.
FIG. 2 is a flowchart of the filtering logic in accordance with a preferred embodiment of the invention. Processing commences at function block 200 where the object-oriented operating system utilizes the view framework to display a window. The view framework is used to manage display real-estate. A view specifies an area of the display and facilitates using the graphics framework to draw images on that part of the display. The view framework provides clipping and depth ordering when views are overlapping. Then, at function block 210, the system detects the selection of a particular filter from a menu of filtering capabilities and applies the filter to the items in the displayed window as shown in function block 220. The application of the filter includes two visible indicia on the display. First, the item count on the display is updated based on the number of items that do not meet the filter property which results in their loss of individual identity on the display and subtraction from the active item count as shown in function block 240. Finally, in function block 240, the window items are updated to display individually only those items that meet the filter requirements. All others are depicted by an icon showing numerous items tied together as a group utilizing a belt. Processing stops at terminal 250.
FIG. 3 illustrates how filters are used in accordance with a preferred embodiment of the invention. In the system, information propagates forward using notification 310, 330 and 350 and questions can be asked backward using direct function calls 390, 380 and 370. Filters 325 are held by the filtering framework 320 which provides an important level of indirection. Given this indirection, the filter can be replaced without need for the next node in the information cascade (in this case, the sorter framework 340) to reestablish its connection. Had the filter 325 been in the cascade directly, removal of the filter framework 320 would have broken the cascade. For example, this indirection allows for replacing a "Show Aliases" filter with a "Show Stationery" filter without changing the relationship between any objects except the filter holder and the filter itself. Container Layout View (CLV) 360 is the view information defining the window containing the items as depicted in FIG. 5.
The Containable Component Sources (CCS) objects 370, 380 and 390, provide an important architectural freedom. It does not matter what protocol or base classes an object in the cascade has. It only matters that it a CCS can be implemented for it. This is particularly important in the case where the backing object is the model because it properly obeys the architectural need for a data/presentation split. Had the presentation framework placed base class or protocol requirements on the model, the data/presentation split would have been violated. In the preferred embodiment of the system, the data being presented (i.e. a set of files) is held in a "folder model" which could potentially be used by other presentation systems. However, the presentation system described here demands that every sour of information in the cascade (including the source which is the folder model) must communicate through a CCS interface. Because the folder model can be used with other presentation systems, it would be architecturally incorrect to demand it inherit protocol for use by the presentation. Instead, a CCS that understands how to communicate with the model is implemented which converts the model's protocol into a protocol understood by the presentation system described here.
FIG. 4 is a schematic block diagram which illustrates the interaction of a container layout view 432 with three frameworks: the container framework 408, the filter framework 410 and the sorter framework 412, which interaction is indicated schematically by arrows 426, 428 and 430, respectively. Each of the three frameworks communicates with the object-oriented operating system 400 in a preferred embodiment. The container framework 408 contains the Containable Component Reference 414 which is a reference for a Containable Component 416 residing in a small amount of memory. The Containable 415 is an object residing in the object oriented operating system containing information indicative of name, icon and children for each of the icons listed in the Container Layout View 431. The Container Layout View 431 maintains a set of containable component references indicative of what items are represented by the other items icon and currently inactive on the display depicted in FIG. 7. The Containable Component is an object which contains information indicative of a containable and information utilized in displaying the containable 415.
The Filter Framework 410 is a collection of objects resident in the object-oriented operating system for enabling filtering. The Containable Container Source 418 provides the information relative to the containable that the filter is processing. The Container Filter 420 is the object that examines a containable and determines whether it should be displayed based on the filtering information. The Container Filter ID 417 is an extensibility mechanism for adding a new id and label for a filter that can thereafter accessed and activated.
The Sorter Framework 412 is a collection of objects resident in the object-oriented operating system for enabling Sorting. The Containable Container Source 422 provides the information relative to the containable that the Sorter is processing. The Container Sorter 424 is the object that examines the set of containables and determines what order they should be displayed in. The Container Sorter ID 421 is an extensibility mechanism for adding a new id and label for a Sorter that can thereafter accessed and activated.
Visual Representation of Filtering
The examples below show various ways of visually representing filtered items; however, two visual indicators appear optimal.
1. A status bar containing information indicative of "X of Y items shown"--this indicates that Y minus X items are not shown because they are filtered.
2. "N Other Items" icon. Where N=Y minus X. An icon that looks like a "stack of documents" appears with a name that indicates how many items are not shown because they are filtered. Alternate methods for visually representing filtered items exist. One possibility would be to "gray out" items which have been filtered and make them non-selectable items on the display. Another would be to "shrink" them so that they would not appear prominently on the display. Depending on the context, different techniques may be more appropriate. The important thing is that a user is aware that items have been filtered and does not believe that the document has been lost.
FIG. 5 illustrates a display from a user perspective showing a window before filtering has been performed in accordance with a preferred embodiment. The document folders are in the default state which displays all items available for use by a user. Note the status bar indicates: "6 of 6 items shown" and that 6 items appear in the folder. The six items currently active in the window are Folders which has a property of stationery, READ ME which has a property of document, Taligent.Help which has a property of document, READ.ME-alias which has a property of alias, WELCOME-alias which has a property of alias, and Phone-alias which has a property of alias. The window is displayed using objects provided by the toolbox which use the view framework to provide the display real-estate for the window and the graphics system to draw the window frame and decoration. The controls framework is used to add controls like the close-box and window-maximizer to the window's title bar. Each item displayed is backed by a "containable" which is an object which provides information about attributes such as name, type, icon, and Visually represented by a view object used to draw the icon and name.
In FIG. 6, a user has "torn off" the Filter Menu. Note that, the filter menu indicates that "Show All" is the selected filter denoted by a check mark located next to the item. The "Show All" filter is the NIL-filter, it does nothing. The Document Folder presentation is unchanged from the previous figure. The system's controls framework provides menu functionality. Using the mouse, a menu can be dragged away from its menu-palette. When the mouse button it released, the menu becomes its own menu palette.
In FIG. 7, a user has selected the "Show Aliases" menu item. Note, that the Filter Menu reflects this change in filter denoted by a check mark next to the "Show Aliases" option. This change in filter has affected the presentation. The status bar now reads, "3 of 6 items shown." Only the items which are aliases remain. Also, a new icon has appeared which looks like a stack of documents entitled "3 other items." This "other items" along with the "3 of 6 items shown" status bar serve together to visually emphasize that some items are NOT shown. It is important to provide clear feedback to a user that a filter is in use so that they do not mistakenly think their documents have disappeared. When a filter is selected by clicking on the menu, it causes a menu state object to update the menu checkmark and notify the filtering framework that a new filter has been selected. The filtering framework then creates a new filter of the selected type and installs it in the filter holder. The "other items" bundle is backed by a data structure which holds the set of which items are filtered.
In FIG. 8, the user has selected the "Show Stationery" menu item. Again, the check mark denotes which filter has been chosen. Now, the status bar indicates, "1 of 6 items shown." The Folders stationery is shown along with the "5 other items" icon.
Filtering Framework Internals
When a user selects a filter from a menu, a filter object of the type selected is created within the Filter Framework. Whenever a new filter is created, the Filter Framework sends a message to the Sorter Framework to indicate that a new filter has been installed and consequently the filtered status of the presented items may have changed. The sorter then may ask the filter questions to determine if any state has changed and take appropriate action. Once the Sorter Framework has synchronized to the change caused by the filter installation, it sends a message forward to the view that some information may have changed. The view then takes similar action and synchronizes to information provided by the sorter.
Developing a Filter
Supporting Classes
The items that the user sees in the window are called containable components. In the filtering framework, containable components are referred to by containable component references (TContainableComponentReference). References allow the framework to keep information about containable components without keeping copies of the containable components themselves. Further, the filter framework has an object called a TContainableComponentInfo which holds two pieces of information: 1) a TContainableComponentReference, and 2) a boolean value indicating whether or not this containable component is marked filtered.
______________________________________                                    
class TContainableComponentInfo: public MCollectible {                    
public:                                                                   
  MCollectibleDeclarationsMacro(TContainableComponentInf                  
o):                                                                       
  //contructor - caller provides a                                        
TContainableComponentReference                                            
   TContainableComponentInfo(const                                        
TContainableComponentReference&);                                         
   //copy constructor                                                     
   TContainableComponentInfo(const                                        
TContainableComponentInfo&);                                              
   //destructor                                                           
   virtualËśTContainableComponentInfo( );                            
   //assignment operator                                                  
   TContainableComponentInfo& operator=(const                             
TContainableComponentInfo&);                                              
   //streaming operators                                                  
   virtual TStream& operator>>=(TStream& towhere) const;                  
   virtual TStream& operator<<=(TStream& fromwhere);                      
   //comparison and hashing for use by collections                        
   virtual long Hash( ) const;                                            
   virtual Boolean IsEqual(const MCollectible*) const;                    
   //information interface for getting info about reference               
and filtered status                                                       
   virtual TContainableComponentReference                                 
     GetContainableComponentReference( ) const;                           
   virtual Boolean IsFiltered( ) const;                                   
   virtual void SetFiltered( );                                           
protected:                                                                
   TContainableComponentInfo( );                                          
};                                                                        
When a filter is invoked, a parameter,                                    
MContainableComponentSource, is passed to the filter. This                
parameter is used to indicate various characteristics concerning          
the information being filtered. First, what order should be used          
to filter the items? Second, what item comes before this one?             
The "C++" source code for the MContainableComponentSource                 
Application Program Interface (API) is presented below.                   
class MContainableComponentSource {                                       
public:                                                                   
 //get information about model where containables                         
components are kept                                                       
 virtual TModelReference GetModelReference( ) const =                     
0;                                                                        
 //get ordered list of containble component infos                         
 virtual void                                                             
GiveReferences(TFunnelFor<TContainableComponentInfo>&)                    
const = 0;                                                                
 //get reference of containble component before this one,                 
is FIrst is set to TRUE                                                   
 //is this one is the first one                                           
 virtual TContainableComponentReference                                   
  Before(const TContainableComponentReference&, Boolean&                  
isFirst) const = 0;                                                       
};                                                                        
______________________________________                                    
The Filter
In essence, a filter is an object with the ability to look at a collection of containable components and determine, on the basis of a deterministic algorithm, which containable components should be marked "filtered" and which ones should not be. A deterministic algorithm is one that gives the same result everytime. Given a set of 10 numbers, an algorithm that determines the largest number is deterministic, but algorithm that picks one of the 10 at random is non-deterministic.
A C++ implementation of an abstract interface for a container filter is presented below in accordance with a preferred embodiment of the invention.
______________________________________                                    
class TContainerFilter: pubic MCollectible {                              
public:                                                                   
 VersionDeclarationsMacro(TContainerFilter);                              
 //constructor takes a MContainableComponentSource for the                
filter to use                                                             
     TContainerFilter(MContainableComponentSource*                        
toAlias);                                                                 
 //destructor                                                             
 virtual ËśTContainerFilter( );                                      
 //give information in filtered state                                     
 virtual void                                                             
GiveReferences(TFunnelFor<TConatinableComponentInfo>&)                    
const = 0;                                                                
 //synchronize with information provided by                               
MContainableComponentSource                                               
 virtual void SycnUp( ) = 0;                                              
 //new containble components have arrived, process them,                  
report changes                                                            
 virtual void Add(TContainableComponentInfoCollection&                    
added,                                                                    
     TContailableComponentInfoCollection&                                 
changedResult) = 0;                                                       
 //containble components have been removed, process them,                 
report changes                                                            
 virtual void                                                             
Remove(TContainableComponentReferenceCollection& removed,                 
     TContainableComponentInfoCollection&                                 
changedResult) = 0;                                                       
 //containble components have changed, process them, report               
further changes                                                           
 virtual void Change(TContainableComponentInfoCollection&                 
changed,                                                                  
     TContainableComponentInfoCollection&                                 
changedResult) = 0;                                                       
protected:                                                                
 //subclasser interface to get MContainableComponentSource                
to use                                                                    
 MContainableComponentSource* GetSource( ) const;                         
};                                                                        
______________________________________                                    
TContainerFilter has five "interesting" member functions--the pure virtual logic that developers override to customize filter functionality. The behavior of these functions is specified below:
______________________________________                                    
virtual void        SyncUp( ) = 0;                                        
______________________________________                                    
When SyncUp is called, this is an indication that the source information has changed significantly and the entire internal state of the filter should be updated. Some filters have no internal state. More complex filters must keep track of previously encountered information in order to execute efficiently. Some filters can decide whether a containble component is filtered on a case by case basis, for example a filter that passes containble component whose name starts with the letter "A". Other filters need to consider multiple containble component at once in order to make a decision, for example a filter that only passes containble components whose names are pair of a .C/.h pair. (if a containble component named foo.C existed, it would only pass through the filtered of a containble component named foo.h also existed). Sophisticated filters like this can be implemented more efficiently if they maintain internal state which caches information about all the containble components being presented. SyncUp gives the filter a chance to rebuild this cache when a large change occurs.
______________________________________                                    
virtual void                                                              
GiveReferences(TFunnelFor<TContainableComponentInfo>&                     
funnel) = 0;                                                              
______________________________________                                    
When GiveReferences is called, a request is being made for the complete output of the filter. The filter should iterate over all the items and transfer them to the funnel which is passive iteration mechanism. Filters are required to give the TContainableComponentlnfo's in the same order that it would receive them if it called GiveReferences on the source. This is important to allow filters to be used on a sorted list of containble components:
______________________________________                                    
virtual void   Add(TContainableComponentInfoCollection&                   
added,                                                                    
     TContainableComponentInfoCollection&                                 
changedResult) = 0;                                                       
______________________________________                                    
Add is passed two collections:add is a collection of those containable components that have been added to the source and should be considered by the filter--update the filter's internal state (if any) and decide whether or not each containable component should be filtered out. ChangedResult is used by more sophisticated filters that may change their mind about previously seen containable components when a new one is added. For example, a filter that only allows documents to pass if they are part of a .C or a .h pair may have previously filtered foo.h because foo.C was not in the source. When foo.C is added, it needs to unfilter foo.h--therefore an unfiltered foo.h would be added to the changedResult.
______________________________________                                    
virtual void  Remove(TContainableComponentInfoCollection&                 
removed,                                                                  
       TContainableComponentInfoCollection&                               
changedResult) = 0;                                                       
______________________________________                                    
Remove is very similar to Add except that instead of considering containable components that have been added to the source, it considers ones that have been removed.
______________________________________                                    
virtual void  Change(const MContainableComponentSource*                   
source,                                                                   
     TContainableComponentInfoCollection& changed,                        
     TContainableComponentInfoCollection&                                 
changedResults) = 0;                                                      
______________________________________                                    
Change is very similar to Add except that instead of considering containable components that have been added to the source, it considers ones that have changed in some way. Essentially, this allows for some optimization. The net result of a change should be the same as removing and re-adding the item. One possible implementation of Change is to call Remove and then Add Changes in containble components are important to filtering because the change may change the result of the filter. For example if the filter only passes containble components whose name starts with "A" and a containble component changes its name from "Apple" to "Pear", then the filter which previously passed this containble component needs to reverse its decision and mark the containble component as filtered.
Filter IDs
The final step in developing a filter, is to create a TContainerFilterID subclass which serves as a light-weight representation of the filter. TContainerFilterID's have 3 primary functions which include:
1. create a filter;
2. create a label to represent that filter in a menu; and
3. create a unique token that acts as an identifier.
______________________________________                                    
class TContainerFilterID: public MCollectible {                           
public:                                                                   
  VersionDeclarationsMacro(TContainerFilterID);                           
TContainerFilterID(const TContainerFilterID&);                            
  virtualËśTContainerFilterID( );                                    
  TContainerFilterID&     operator=(const                                 
TConatinerFilterID&);                                                     
  virtual TStream&     operator>>=(TStream&)                              
const;                                                                    
  virtual TStream&     operator<<=(TStream&);                             
  virtual long     Hash( ) const;                                         
  virtual Boolean     IsEqual(const MCollectible*)                        
const;                                                                    
  //provide menu label, TContainerPresenterState support                  
  virtual TLabel*     CreateLabel( ) const = 0;                           
  virtual TContainerFilter*                                               
CreateContainerFilter(MContainableComponentSource* toAlias)               
const = 0;                                                                
  //must same return unique identifier as corresponding                   
TContainerFilter                                                          
  virtual TToken     GetToken( ) const = 0;                               
#ifndef NO.sub.-- Internal                                                
private:                                                                  
  enum EVersion     {kVersion1};                                          
#endif                                                                    
};                                                                        
______________________________________                                    
Adding a New Filter
Once a new filter is created by a developer, it is simple to add it to the Filter Framework. The new filter ID is written into a file and placed in a "filters" directory on the disk. When creating the "filters" menu, this directory is scanned and all filter IDs found are made available to the user. Said another way, when the menu of available filters is being constructed, all the IDs found in files in the "filters" directory are consulted for a name. These names are placed in the "filter" menu. When one of these menu items is selected by the user, the ID for that name is used to constructor the actual filter object using the CreateContainerFilter method. One of ordinary skill in the art will readily comprehend based on a careful review of the architecture set forth herein that filters can readily be cascaded without departing from the invention. Thus, if two or more filters are defined, they can be joined in series to apply a variety of filters to a view before the view is redisplayed.
While the invention is described in terms of preferred embodiments 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 (24)

Having thus described our invention, what we claim as new, and desire to secure by Letters Patent is:
1. A window display system for use in a computer system having a storage and a display, the window display system operating to selectively display icons representing non-filtered display items and filtered display items, the window display system comprising:
(a) a container framework in the storage including methods for storing and manipulating information indicative of each display item;
(b) a filter framework in the storage including methods for constructing a filter object containing filter object criteria data, methods for extracting the stored display item information and methods for applying the filter object criteria to the extracted display item information to separate non-filtered display items and filtered display items; and
(c) a view framework responsive to the display items for displaying an icon for each non-filtered display item and a bundle icon representing all filtered display items, the bundle icon including a count of all filtered display items.
2. A window display system as recited in claim 1, including a sorter framework including methods responsive to the non-filtered display items for sorting the non-filtered display items.
3. A window display system as recited in claim 1, including a set of filter objects and means for cascading the set of filter objects to apply the filter object criteria data in all of the set of filter objects to the extracted display item information to separate non-filtered display items and filtered display items.
4. A window display system as recited in claim 1 wherein the filter framework includes an object which includes a reference to each of the display items and a value for each referenced display item indicating whether the each referenced display item is filtered.
5. A window display system as recited in claim 1, wherein the filter object includes a cache mechanism for temporarily storing information relating to extracted display item information.
6. A window display system as recited in claim 1 wherein the filter object includes a method for restoring extracted display item information in the cache mechanism.
7. A window display system as recited in claim 1 wherein the filter object includes a method for examining display items which are added to the plurality of display items after an initial examination.
8. A window display system as recited in claim 1 wherein the filter object includes a method for examining display items which are removed from the plurality of display items after an initial examination.
9. A window display method for use in a computer system having a storage and a display, the window display method operating to selectively display icons representing non-filtered display items and filtered display items, the window display method comprising the steps of:
(a) storing and manipulating information indicative of each display item;
(b) constructing a filter object containing filter object criteria data, methods for extracting the information the stored display item information and methods for applying the filter object criteria to the extracted display item information to separate non-filtered display items and filtered display items; and
(c) displaying an icon for each non-filtered display item and a bundle icon representing all filtered display items, the bundle icon including a count of all filtered display items.
10. A window display method as recited in claim 9, including the step of:
(d) sorting the non-filtered display items.
11. A window display method as recited in claim 9, wherein step (c) includes the steps of:
(b1) constructing a set of filter objects; and
(b2) cascading the set of filter objects to apply the filter object criteria data in all of the set of filter objects to the extracted display item information to separate non-filtered display items and filtered display items.
12. A window display method as recited in claim 9 wherein step (b) includes the step of:
(b3) constructing an object which includes a reference to each of the display items and a value for each referenced display item indicating whether the each referenced display item is filtered.
13. A window display method as recited in claim 9, wherein step (b) includes the step of:
(b4) creating a cache mechanism in the filter object for temporarily storing information relating to extracted display item information.
14. A window display method as recited in claim 13 wherein step (b4) includes the step of:
(b4a) creating in the filter object a method for restoring extracted display item information in the cache mechanism.
15. A window display method as recited in claim 9 wherein step (b) includes the step of:
(b5) creating in the filter object a method for examining display items which are added to the plurality of display items after an initial examination.
16. A window display method as recited in claim 9 wherein step (b) includes the step of:
(b6) creating in the filter object a method for examining display items which are removed from the plurality of display items after an initial examination.
17. A computer program product for use in a computer system having a storage and a display, the computer program product operating to selectively display icons representing non-filtered display items and filtered display items, and comprising a computer usable medium having computer readable program code thereon including:
(a) container framework code including methods for storing and manipulating information indicative of each display item;
(b) filter framework code including methods for constructing a filter object containing filter object criteria data, methods for extracting the information the stored display item information and methods for applying the filter object criteria to the extracted display item information to separate non-filtered display items and filtered display items; and
(c) view framework code responsive to the display items for displaying an icon for each non-filtered display item and a bundle icon representing all filtered display items, the bundle icon including a count of all filtered display items.
18. A computer program product as recited in claim 17, including on the computer usable medium sorter framework code including methods responsive to the non-filtered display items for sorting the non-filtered display items.
19. A computer program product as recited in claim 17, wherein each of the constructed filter objects includes means for cascading a set of filter objects to apply the filter object criteria data in all of the set of filter objects to the extracted display item information to separate non-filtered display items and filtered display items.
20. A computer program product as melted in claim 17 wherein the filter framework code includes constructor code for constructing an object which includes a reference to each of the display items and a value for each referenced display item indicating whether the each referenced display item is filtered.
21. A computer program product as recited in claim 17, wherein each of the constructed filter objects includes a cache mechanism for temporarily storing information relating to extracted display item information.
22. A computer program product as recited in claim 21 wherein each of the constructed filter objects includes a method for restoring extracted display item information in the cache mechanism.
23. A computer program product as recited in claim 17 wherein each of the constructed filter objects includes a method for examining display items which am added to the plurality of display items after an initial examination.
24. A computer program product as recited in claim 17 wherein each of the constructed filter objects includes a method for examining display items which are removed front the plurality of display items after an initial examination.
US08/280,169 1994-07-25 1994-07-25 Object-oriented operating system enhancement for filtering items in a window Expired - Lifetime US5680563A (en)

Priority Applications (4)

Application Number Priority Date Filing Date Title
US08/280,169 US5680563A (en) 1994-07-25 1994-07-25 Object-oriented operating system enhancement for filtering items in a window
EP95928675A EP0772824B1 (en) 1994-07-25 1995-07-20 Object-oriented operating system enhancement for filtering items in a window
PCT/US1995/009320 WO1996003691A1 (en) 1994-07-25 1995-07-20 Object-oriented operating system enhancement for filtering items in a window
DE69503052T DE69503052T2 (en) 1994-07-25 1995-07-20 IMPROVED OBJECT-ORIENTED OPERATING SYSTEM FOR FILTERING DATA OBJECTS IN A WINDOW

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US08/280,169 US5680563A (en) 1994-07-25 1994-07-25 Object-oriented operating system enhancement for filtering items in a window

Publications (1)

Publication Number Publication Date
US5680563A true US5680563A (en) 1997-10-21

Family

ID=23071975

Family Applications (1)

Application Number Title Priority Date Filing Date
US08/280,169 Expired - Lifetime US5680563A (en) 1994-07-25 1994-07-25 Object-oriented operating system enhancement for filtering items in a window

Country Status (4)

Country Link
US (1) US5680563A (en)
EP (1) EP0772824B1 (en)
DE (1) DE69503052T2 (en)
WO (1) WO1996003691A1 (en)

Cited By (63)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5794233A (en) * 1996-04-09 1998-08-11 Rubinstein; Seymour I. Browse by prompted keyword phrases
WO1998037499A1 (en) * 1997-02-19 1998-08-27 Rubinstein Seymour I Browse by prompted keyword phrases with an improved method for obtaining an initial document set
US5822599A (en) * 1996-12-17 1998-10-13 Intel Corporation Method and apparatus for selectively activating a computer display for power management
US5831617A (en) * 1995-11-27 1998-11-03 Bhukhanwala; Saumil A. Browsing and manipulating objects using movie like icons
US5838317A (en) * 1995-06-30 1998-11-17 Microsoft Corporation Method and apparatus for arranging displayed graphical representations on a computer interface
US5912668A (en) * 1997-05-30 1999-06-15 Sony Corporation Controlling a screen display of a group of images represented by a graphical object
US5956508A (en) * 1994-08-26 1999-09-21 International Business Machines Corporation Creation of manageable management collections using filters
US6025827A (en) * 1994-04-07 2000-02-15 International Business Machines Corporation Digital image capture control
US6108664A (en) * 1997-10-31 2000-08-22 Oracle Corporation Object views for relational data
US6269407B1 (en) * 1996-03-14 2001-07-31 International Business Machines Corporation Method and system for data filtering within an object-oriented data
US6279016B1 (en) * 1997-09-21 2001-08-21 Microsoft Corporation Standardized filtering control techniques
US20010026289A1 (en) * 2000-03-21 2001-10-04 Hiroki Sugiyama Image information processing device, image information processing method, program and recording medium
US20020135614A1 (en) * 2001-03-22 2002-09-26 Intel Corporation Updating user interfaces based upon user inputs
WO2002101943A2 (en) * 2001-06-13 2002-12-19 Glen David Brin Interactive communication between a plurality of users
US20030043185A1 (en) * 2001-06-22 2003-03-06 Sony Computer Entertainment Inc. Method for perusing information
US20040194110A1 (en) * 2003-03-26 2004-09-30 Microsoft Corporation Extensible user context system for delivery of notifications
US20040194116A1 (en) * 2003-03-26 2004-09-30 Mckee Timothy P. System and method for public consumption of communication events between arbitrary processes
US20040193600A1 (en) * 2003-03-27 2004-09-30 Microsoft Corporation System and method for filtering and organizing items based on common elements
US20040249849A1 (en) * 2003-06-05 2004-12-09 Michael Mordkovich Conversion system
US20040255289A1 (en) * 2003-06-11 2004-12-16 Citycites.Com Corp. Remote access software solution for rapidly deploying a desktop
US20050114305A1 (en) * 2003-11-20 2005-05-26 International Business Machines Corporation Method and system for filtering the display of files in graphical interfaces
US20050166143A1 (en) * 2004-01-22 2005-07-28 David Howell System and method for collection and conversion of document sets and related metadata to a plurality of document/metadata subsets
US20050165841A1 (en) * 2004-01-23 2005-07-28 Microsoft Corporation System and method for automatically grouping items
US20050166156A1 (en) * 2004-01-23 2005-07-28 Microsoft Corporation System and method for automatically grouping items
US20050240878A1 (en) * 2004-04-26 2005-10-27 Microsoft Corporation System and method for scaling icons
US20050246650A1 (en) * 2004-04-30 2005-11-03 Yeung Simon D User interfaces for displaying content and methods of using the same
US20050246643A1 (en) * 2003-03-24 2005-11-03 Microsoft Corporation System and method for shell browser
US20050246327A1 (en) * 2004-04-30 2005-11-03 Yeung Simon D User interfaces and methods of using the same
US20050251748A1 (en) * 2003-03-24 2005-11-10 Microsoft Corporation System and method for viewing and editing multi-value properties
US20060036568A1 (en) * 2003-03-24 2006-02-16 Microsoft Corporation File system shell
US20060236252A1 (en) * 2005-04-15 2006-10-19 Microsoft Corporation Task dialog and programming interface for same
US20060242121A1 (en) * 2005-04-22 2006-10-26 Microsoft Corporation Systems, methods, and user interfaces for storing, searching, navigating, and retrieving electronic information
US20060242604A1 (en) * 2005-04-21 2006-10-26 Microsoft Corporation Multiple roots in navigation pane
US20060271382A1 (en) * 2005-05-27 2006-11-30 Microsoft Corporation Entity projection
US7181463B2 (en) 2003-10-24 2007-02-20 Microsoft Corporation System and method for managing data using static lists
US7234114B2 (en) 2003-03-24 2007-06-19 Microsoft Corporation Extensible object previewer in a shell browser
US7240292B2 (en) 2003-04-17 2007-07-03 Microsoft Corporation Virtual address bar user interface control
US20080040369A1 (en) * 2006-08-09 2008-02-14 Oracle International Corporation Using XML for flexible replication of complex types
US7383503B2 (en) 2005-02-23 2008-06-03 Microsoft Corporation Filtering a collection of items
US7409644B2 (en) 2003-05-16 2008-08-05 Microsoft Corporation File system shell
US20080288531A1 (en) * 2004-04-29 2008-11-20 Microsoft Corporation Metadata editing control
US7496583B2 (en) 2004-04-30 2009-02-24 Microsoft Corporation Property tree for metadata navigation and assignment
US7499925B2 (en) 2003-03-27 2009-03-03 Microsoft Corporation File system for displaying items of different types and from different physical locations
US7526483B2 (en) 2003-03-27 2009-04-28 Microsoft Corporation System and method for virtual folder sharing including utilization of static and dynamic lists
US7536386B2 (en) 2003-03-27 2009-05-19 Microsoft Corporation System and method for sharing items in a computer system
US7587411B2 (en) * 2003-03-27 2009-09-08 Microsoft Corporation System and method for filtering and organizing items based on common elements
US7650575B2 (en) 2003-03-27 2010-01-19 Microsoft Corporation Rich drag drop user interface
US7657846B2 (en) * 2004-04-23 2010-02-02 Microsoft Corporation System and method for displaying stack icons
US7665028B2 (en) 2005-07-13 2010-02-16 Microsoft Corporation Rich drag drop user interface
US7694236B2 (en) * 2004-04-23 2010-04-06 Microsoft Corporation Stack icons representing multiple objects
US7823077B2 (en) 2003-03-24 2010-10-26 Microsoft Corporation System and method for user modification of metadata in a shell browser
US7925682B2 (en) 2003-03-27 2011-04-12 Microsoft Corporation System and method utilizing virtual folders
US7992103B2 (en) 2004-04-26 2011-08-02 Microsoft Corporation Scaling icons for representing files
US8024335B2 (en) 2004-05-03 2011-09-20 Microsoft Corporation System and method for dynamically generating a selectable search extension
US20120005708A1 (en) * 2000-04-10 2012-01-05 Hillcrest Laboratories, Inc. Media User Interfaces Using Metadata from Different Sources
US8108430B2 (en) 2004-04-30 2012-01-31 Microsoft Corporation Carousel control for metadata navigation and assignment
US8195646B2 (en) 2005-04-22 2012-06-05 Microsoft Corporation Systems, methods, and user interfaces for storing, searching, navigating, and retrieving electronic information
US20120151356A1 (en) * 2010-12-08 2012-06-14 Sap Ag Preset navigator
US20130097566A1 (en) * 2011-10-17 2013-04-18 Carl Fredrik Alexander BERGLUND System and method for displaying items on electronic devices
US8522154B2 (en) 2005-04-22 2013-08-27 Microsoft Corporation Scenario specialization of file browser
US8707209B2 (en) 2004-04-29 2014-04-22 Microsoft Corporation Save preview representation of files being created
US20180188911A1 (en) * 2015-12-22 2018-07-05 Huawei Technologies Co., Ltd. Method and apparatus for filtering object by using pressure
US10895954B2 (en) * 2017-06-02 2021-01-19 Apple Inc. Providing a graphical canvas for handwritten input

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2380578B (en) * 1997-09-21 2003-12-17 Microsoft Corp Method of filtering visually displayed data
EP0992898A1 (en) * 1998-09-21 2000-04-12 Hewlett-Packard Company Using a namespace extension to selectively display files read from a computer readable drive
US7099869B1 (en) 2001-07-11 2006-08-29 Apple Computer, Inc. Method and apparatus for managing file extensions in a digital processing system

Citations (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4821220A (en) * 1986-07-25 1989-04-11 Tektronix, Inc. System for animating program operation and displaying time-based relationships
US4885717A (en) * 1986-09-25 1989-12-05 Tektronix, Inc. System for graphically representing operation of object-oriented programs
US4891630A (en) * 1988-04-22 1990-01-02 Friedman Mark B Computer vision system with improved object orientation technique
US4953080A (en) * 1988-04-25 1990-08-28 Hewlett-Packard Company Object management facility for maintaining data in a computer system
US5041992A (en) * 1988-10-24 1991-08-20 University Of Pittsburgh Interactive method of developing software interfaces
US5050090A (en) * 1989-03-30 1991-09-17 R. J. Reynolds Tobacco Company Object placement method and apparatus
US5060276A (en) * 1989-05-31 1991-10-22 At&T Bell Laboratories Technique for object orientation detection using a feed-forward neural network
US5075848A (en) * 1989-12-22 1991-12-24 Intel Corporation Object lifetime control in an object-oriented memory protection mechanism
US5093914A (en) * 1989-12-15 1992-03-03 At&T Bell Laboratories Method of controlling the execution of object-oriented programs
US5119475A (en) * 1991-03-13 1992-06-02 Schlumberger Technology Corporation Object-oriented framework for menu definition
US5125091A (en) * 1989-06-08 1992-06-23 Hazox Corporation Object oriented control of real-time processing
US5133075A (en) * 1988-12-19 1992-07-21 Hewlett-Packard Company Method of monitoring changes in attribute values of object in an object-oriented database
US5136705A (en) * 1988-06-14 1992-08-04 Tektronix, Inc. Method of generating instruction sequences for controlling data flow processes
US5151987A (en) * 1990-10-23 1992-09-29 International Business Machines Corporation Recovery objects in an object oriented computing environment
US5181162A (en) * 1989-12-06 1993-01-19 Eastman Kodak Company Document management and production system
US5315703A (en) * 1992-12-23 1994-05-24 Taligent, Inc. Object-oriented notification framework system
US5388264A (en) * 1993-09-13 1995-02-07 Taligent, Inc. Object oriented framework system for routing, editing, and synchronizing MIDI multimedia information using graphically represented connection object
US5504852A (en) * 1991-09-09 1996-04-02 Apple Computer, Inc. Method for creating a collection of aliases representing computer system files
US5519865A (en) * 1993-07-30 1996-05-21 Mitsubishi Denki Kabushiki Kaisha System and method for retrieving and classifying data stored in a database system

Patent Citations (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4821220A (en) * 1986-07-25 1989-04-11 Tektronix, Inc. System for animating program operation and displaying time-based relationships
US4885717A (en) * 1986-09-25 1989-12-05 Tektronix, Inc. System for graphically representing operation of object-oriented programs
US4891630A (en) * 1988-04-22 1990-01-02 Friedman Mark B Computer vision system with improved object orientation technique
US4953080A (en) * 1988-04-25 1990-08-28 Hewlett-Packard Company Object management facility for maintaining data in a computer system
US5136705A (en) * 1988-06-14 1992-08-04 Tektronix, Inc. Method of generating instruction sequences for controlling data flow processes
US5041992A (en) * 1988-10-24 1991-08-20 University Of Pittsburgh Interactive method of developing software interfaces
US5133075A (en) * 1988-12-19 1992-07-21 Hewlett-Packard Company Method of monitoring changes in attribute values of object in an object-oriented database
US5050090A (en) * 1989-03-30 1991-09-17 R. J. Reynolds Tobacco Company Object placement method and apparatus
US5060276A (en) * 1989-05-31 1991-10-22 At&T Bell Laboratories Technique for object orientation detection using a feed-forward neural network
US5125091A (en) * 1989-06-08 1992-06-23 Hazox Corporation Object oriented control of real-time processing
US5181162A (en) * 1989-12-06 1993-01-19 Eastman Kodak Company Document management and production system
US5093914A (en) * 1989-12-15 1992-03-03 At&T Bell Laboratories Method of controlling the execution of object-oriented programs
US5075848A (en) * 1989-12-22 1991-12-24 Intel Corporation Object lifetime control in an object-oriented memory protection mechanism
US5151987A (en) * 1990-10-23 1992-09-29 International Business Machines Corporation Recovery objects in an object oriented computing environment
US5119475A (en) * 1991-03-13 1992-06-02 Schlumberger Technology Corporation Object-oriented framework for menu definition
US5504852A (en) * 1991-09-09 1996-04-02 Apple Computer, Inc. Method for creating a collection of aliases representing computer system files
US5315703A (en) * 1992-12-23 1994-05-24 Taligent, Inc. Object-oriented notification framework system
US5519865A (en) * 1993-07-30 1996-05-21 Mitsubishi Denki Kabushiki Kaisha System and method for retrieving and classifying data stored in a database system
US5388264A (en) * 1993-09-13 1995-02-07 Taligent, Inc. Object oriented framework system for routing, editing, and synchronizing MIDI multimedia information using graphically represented connection object

Non-Patent Citations (6)

* Cited by examiner, † Cited by third party
Title
IBM OS/2 Developer, V. 5 No. 2, Apring 1993, US, pp. 48 59, Peter Haggar & Peter Brightbill: Programming the OS/2 Container Control by Example . *
IBM OS/2 Developer, V. 5 No. 2, Apring 1993, US, pp. 48-59, Peter Haggar & Peter Brightbill: "Programming the OS/2 Container Control by Example".
IBM Technical Disclosure Bulletin, V. 34, No. 7A, Dec. 1991, New York, US, pp. 83 84, X 400 Smartmail Filter Object Document . *
IBM Technical Disclosure Bulletin, V. 34, No. 7A, Dec. 1991, New York, US, pp. 83-84, "X 400 Smartmail Filter Object Document".
IBM Technical Disclosure Bulletin, V.37, No. 4B, Apr. 1994, New York, US, pp. 423 425, Graphical User Interface for LAN NetView Fix Event Log Filter Notebook. *
IBM Technical Disclosure Bulletin, V.37, No. 4B, Apr. 1994, New York, US, pp. 423-425, Graphical User Interface for LAN NetView Fix -- Event Log Filter Notebook.

Cited By (105)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6025827A (en) * 1994-04-07 2000-02-15 International Business Machines Corporation Digital image capture control
US5956508A (en) * 1994-08-26 1999-09-21 International Business Machines Corporation Creation of manageable management collections using filters
US5838317A (en) * 1995-06-30 1998-11-17 Microsoft Corporation Method and apparatus for arranging displayed graphical representations on a computer interface
US5831617A (en) * 1995-11-27 1998-11-03 Bhukhanwala; Saumil A. Browsing and manipulating objects using movie like icons
US6269407B1 (en) * 1996-03-14 2001-07-31 International Business Machines Corporation Method and system for data filtering within an object-oriented data
US5913215A (en) * 1996-04-09 1999-06-15 Seymour I. Rubinstein Browse by prompted keyword phrases with an improved method for obtaining an initial document set
US5794233A (en) * 1996-04-09 1998-08-11 Rubinstein; Seymour I. Browse by prompted keyword phrases
US5822599A (en) * 1996-12-17 1998-10-13 Intel Corporation Method and apparatus for selectively activating a computer display for power management
WO1998037499A1 (en) * 1997-02-19 1998-08-27 Rubinstein Seymour I Browse by prompted keyword phrases with an improved method for obtaining an initial document set
US5912668A (en) * 1997-05-30 1999-06-15 Sony Corporation Controlling a screen display of a group of images represented by a graphical object
US6279016B1 (en) * 1997-09-21 2001-08-21 Microsoft Corporation Standardized filtering control techniques
US7133880B1 (en) 1997-10-31 2006-11-07 Oracle International Corporation Object views for relational data
US6108664A (en) * 1997-10-31 2000-08-22 Oracle Corporation Object views for relational data
US20010026289A1 (en) * 2000-03-21 2001-10-04 Hiroki Sugiyama Image information processing device, image information processing method, program and recording medium
US7065715B2 (en) * 2000-03-21 2006-06-20 Sharp Kabushiki Kaisha Processing device that maintains display order between corresponding items in different display areas
US20120005708A1 (en) * 2000-04-10 2012-01-05 Hillcrest Laboratories, Inc. Media User Interfaces Using Metadata from Different Sources
US9552128B2 (en) * 2000-04-10 2017-01-24 Hillcrest Laboratories, Inc. Media user interfaces using metadata from different sources
US20020135614A1 (en) * 2001-03-22 2002-09-26 Intel Corporation Updating user interfaces based upon user inputs
WO2002101943A2 (en) * 2001-06-13 2002-12-19 Glen David Brin Interactive communication between a plurality of users
WO2002101943A3 (en) * 2001-06-13 2003-05-22 Glen David Brin Interactive communication between a plurality of users
US7124372B2 (en) 2001-06-13 2006-10-17 Glen David Brin Interactive communication between a plurality of users
US20030043185A1 (en) * 2001-06-22 2003-03-06 Sony Computer Entertainment Inc. Method for perusing information
US7290213B2 (en) * 2001-06-22 2007-10-30 Sony Computer Entertainment Inc. Method for perusing information
US20060036568A1 (en) * 2003-03-24 2006-02-16 Microsoft Corporation File system shell
US7234114B2 (en) 2003-03-24 2007-06-19 Microsoft Corporation Extensible object previewer in a shell browser
US7712034B2 (en) 2003-03-24 2010-05-04 Microsoft Corporation System and method for shell browser
US7769794B2 (en) * 2003-03-24 2010-08-03 Microsoft Corporation User interface for a file system shell
US7823077B2 (en) 2003-03-24 2010-10-26 Microsoft Corporation System and method for user modification of metadata in a shell browser
US7188316B2 (en) 2003-03-24 2007-03-06 Microsoft Corporation System and method for viewing and editing multi-value properties
US20050246643A1 (en) * 2003-03-24 2005-11-03 Microsoft Corporation System and method for shell browser
US20050251748A1 (en) * 2003-03-24 2005-11-10 Microsoft Corporation System and method for viewing and editing multi-value properties
US7865904B2 (en) 2003-03-26 2011-01-04 Microsoft Corporation Extensible user context system for delivery of notifications
US20040194110A1 (en) * 2003-03-26 2004-09-30 Microsoft Corporation Extensible user context system for delivery of notifications
US20040194116A1 (en) * 2003-03-26 2004-09-30 Mckee Timothy P. System and method for public consumption of communication events between arbitrary processes
US7827561B2 (en) 2003-03-26 2010-11-02 Microsoft Corporation System and method for public consumption of communication events between arbitrary processes
US20040215732A1 (en) * 2003-03-26 2004-10-28 Mckee Timothy P. Extensible user context system for delivery of notifications
US7890960B2 (en) 2003-03-26 2011-02-15 Microsoft Corporation Extensible user context system for delivery of notifications
US7925682B2 (en) 2003-03-27 2011-04-12 Microsoft Corporation System and method utilizing virtual folders
US9361312B2 (en) 2003-03-27 2016-06-07 Microsoft Technology Licensing, Llc System and method for filtering and organizing items based on metadata
US7587411B2 (en) * 2003-03-27 2009-09-08 Microsoft Corporation System and method for filtering and organizing items based on common elements
US7512586B2 (en) 2003-03-27 2009-03-31 Microsoft Corporation System and method for filtering and organizing items based on common elements
US7149729B2 (en) * 2003-03-27 2006-12-12 Microsoft Corporation System and method for filtering and organizing items based on common elements
US7162466B2 (en) * 2003-03-27 2007-01-09 Microsoft Corporation System and method for filtering and organizing items based on common elements
US20040193600A1 (en) * 2003-03-27 2004-09-30 Microsoft Corporation System and method for filtering and organizing items based on common elements
US7536386B2 (en) 2003-03-27 2009-05-19 Microsoft Corporation System and method for sharing items in a computer system
US7707197B2 (en) 2003-03-27 2010-04-27 Microsoft Corporation System and method for filtering and organizing items based on common elements
US20070088672A1 (en) * 2003-03-27 2007-04-19 Microsoft Corporation System and Method for Filtering and Organizing Items Based on Common Elements
US7650575B2 (en) 2003-03-27 2010-01-19 Microsoft Corporation Rich drag drop user interface
US7499925B2 (en) 2003-03-27 2009-03-03 Microsoft Corporation File system for displaying items of different types and from different physical locations
US20060004692A1 (en) * 2003-03-27 2006-01-05 Microsoft Corporation System and method for filtering and organizing items based on common elements
US20090327961A1 (en) * 2003-03-27 2009-12-31 Microsoft Corporation System and method for filtering and organizing items based on common elements
US7526483B2 (en) 2003-03-27 2009-04-28 Microsoft Corporation System and method for virtual folder sharing including utilization of static and dynamic lists
US7627552B2 (en) 2003-03-27 2009-12-01 Microsoft Corporation System and method for filtering and organizing items based on common elements
US8037104B2 (en) * 2003-03-27 2011-10-11 Microsoft Corporation System and method for filtering and organizing items based on common elements
US9361313B2 (en) 2003-03-27 2016-06-07 Microsoft Technology Licensing, Llc System and method for filtering and organizing items based on common elements
US7853890B2 (en) 2003-04-17 2010-12-14 Microsoft Corporation Address bar user interface control
US8209624B2 (en) 2003-04-17 2012-06-26 Microsoft Corporation Virtual address bar user interface control
US7240292B2 (en) 2003-04-17 2007-07-03 Microsoft Corporation Virtual address bar user interface control
US7409644B2 (en) 2003-05-16 2008-08-05 Microsoft Corporation File system shell
US20040249849A1 (en) * 2003-06-05 2004-12-09 Michael Mordkovich Conversion system
US20040255289A1 (en) * 2003-06-11 2004-12-16 Citycites.Com Corp. Remote access software solution for rapidly deploying a desktop
US7711754B2 (en) 2003-10-24 2010-05-04 Microsoft Corporation System and method for managing data using static lists
US7181463B2 (en) 2003-10-24 2007-02-20 Microsoft Corporation System and method for managing data using static lists
US8091044B2 (en) * 2003-11-20 2012-01-03 International Business Machines Corporation Filtering the display of files in graphical interfaces
US20050114305A1 (en) * 2003-11-20 2005-05-26 International Business Machines Corporation Method and system for filtering the display of files in graphical interfaces
US20050166143A1 (en) * 2004-01-22 2005-07-28 David Howell System and method for collection and conversion of document sets and related metadata to a plurality of document/metadata subsets
US20050166156A1 (en) * 2004-01-23 2005-07-28 Microsoft Corporation System and method for automatically grouping items
US7441186B2 (en) * 2004-01-23 2008-10-21 Microsoft Corporation System and method for automatically grouping items
US20050165841A1 (en) * 2004-01-23 2005-07-28 Microsoft Corporation System and method for automatically grouping items
US7694236B2 (en) * 2004-04-23 2010-04-06 Microsoft Corporation Stack icons representing multiple objects
US7657846B2 (en) * 2004-04-23 2010-02-02 Microsoft Corporation System and method for displaying stack icons
US7992103B2 (en) 2004-04-26 2011-08-02 Microsoft Corporation Scaling icons for representing files
US20050240878A1 (en) * 2004-04-26 2005-10-27 Microsoft Corporation System and method for scaling icons
US8707209B2 (en) 2004-04-29 2014-04-22 Microsoft Corporation Save preview representation of files being created
US8972342B2 (en) * 2004-04-29 2015-03-03 Microsoft Corporation Metadata editing control
US20090055428A1 (en) * 2004-04-29 2009-02-26 Microsoft Corporation Metadata editing control
US20080288531A1 (en) * 2004-04-29 2008-11-20 Microsoft Corporation Metadata editing control
US8661036B2 (en) * 2004-04-29 2014-02-25 Microsoft Corporation Metadata editing control
US20080307346A1 (en) * 2004-04-29 2008-12-11 Microsoft Corporation Metadata editing control
US7496583B2 (en) 2004-04-30 2009-02-24 Microsoft Corporation Property tree for metadata navigation and assignment
US20050246650A1 (en) * 2004-04-30 2005-11-03 Yeung Simon D User interfaces for displaying content and methods of using the same
US20050246327A1 (en) * 2004-04-30 2005-11-03 Yeung Simon D User interfaces and methods of using the same
US8108430B2 (en) 2004-04-30 2012-01-31 Microsoft Corporation Carousel control for metadata navigation and assignment
US8024335B2 (en) 2004-05-03 2011-09-20 Microsoft Corporation System and method for dynamically generating a selectable search extension
US7383503B2 (en) 2005-02-23 2008-06-03 Microsoft Corporation Filtering a collection of items
US20060236252A1 (en) * 2005-04-15 2006-10-19 Microsoft Corporation Task dialog and programming interface for same
US8490015B2 (en) 2005-04-15 2013-07-16 Microsoft Corporation Task dialog and programming interface for same
US20060242604A1 (en) * 2005-04-21 2006-10-26 Microsoft Corporation Multiple roots in navigation pane
US7614016B2 (en) 2005-04-21 2009-11-03 Microsoft Corporation Multiple roots in navigation pane
US20060242121A1 (en) * 2005-04-22 2006-10-26 Microsoft Corporation Systems, methods, and user interfaces for storing, searching, navigating, and retrieving electronic information
US7162488B2 (en) 2005-04-22 2007-01-09 Microsoft Corporation Systems, methods, and user interfaces for storing, searching, navigating, and retrieving electronic information
US8522154B2 (en) 2005-04-22 2013-08-27 Microsoft Corporation Scenario specialization of file browser
US8195646B2 (en) 2005-04-22 2012-06-05 Microsoft Corporation Systems, methods, and user interfaces for storing, searching, navigating, and retrieving electronic information
US20060271382A1 (en) * 2005-05-27 2006-11-30 Microsoft Corporation Entity projection
US7720904B2 (en) * 2005-05-27 2010-05-18 Microsoft Corporation Entity projection
US7665028B2 (en) 2005-07-13 2010-02-16 Microsoft Corporation Rich drag drop user interface
US10489044B2 (en) 2005-07-13 2019-11-26 Microsoft Technology Licensing, Llc Rich drag drop user interface
US20080040369A1 (en) * 2006-08-09 2008-02-14 Oracle International Corporation Using XML for flexible replication of complex types
US7801856B2 (en) 2006-08-09 2010-09-21 Oracle International Corporation Using XML for flexible replication of complex types
US8438493B2 (en) * 2010-12-08 2013-05-07 Sap Ag Preset navigator
US20120151356A1 (en) * 2010-12-08 2012-06-14 Sap Ag Preset navigator
US20130097566A1 (en) * 2011-10-17 2013-04-18 Carl Fredrik Alexander BERGLUND System and method for displaying items on electronic devices
US20180188911A1 (en) * 2015-12-22 2018-07-05 Huawei Technologies Co., Ltd. Method and apparatus for filtering object by using pressure
US11112938B2 (en) * 2015-12-22 2021-09-07 Huawei Technologies Co., Ltd. and Huawei Technologies Co., Ltd. Method and apparatus for filtering object by using pressure
US10895954B2 (en) * 2017-06-02 2021-01-19 Apple Inc. Providing a graphical canvas for handwritten input

Also Published As

Publication number Publication date
DE69503052T2 (en) 1999-01-21
EP0772824A1 (en) 1997-05-14
WO1996003691A1 (en) 1996-02-08
DE69503052D1 (en) 1998-07-23
EP0772824B1 (en) 1998-06-17

Similar Documents

Publication Publication Date Title
US5680563A (en) Object-oriented operating system enhancement for filtering items in a window
US7577938B2 (en) Data association
US5761684A (en) Method and reusable object for scheduling script execution in a compound document
US5379430A (en) Object-oriented system locator system
EP0529844B1 (en) Method and apparatus for deriving object type
US5752245A (en) Object-oriented system for configuration history management with a project workspace and project history database for draft identification
US7694229B2 (en) System and theme file format for creating visual styles
US5396626A (en) Object-oriented locator system
EP0827077B1 (en) Object-oriented system, method and computer program for a client-server failure reporting process
US6151024A (en) Data processor controlled display interface with tree hierarchy of elements view expandable into multiple detailed views
US20050188350A1 (en) Data binding
WO2007033260A1 (en) Extensible xml format and object model for localization data
WO1995015524A1 (en) Method and apparatus for displaying hardware dependent graphics in an object-oriented operating system
WO1996013026A1 (en) Object-oriented system for servicing windows
US6111579A (en) Data processor controlled display system with a tree hierarchy of elements view having virtual nodes
US7814432B2 (en) Method and system for image rendering including polymorphic image data in a graphical user interface
US5790132A (en) Image rendering system with extensible mechanism for providing visual user feedback when an image graphic is selected
GB2320111A (en) Data processing system and method for software development/configuration
US6581203B1 (en) Technique for visually creating and adding members to a class
TW411414B (en) Method and apparatus for monitoring and controlling real-time information in a building automation system
Samaan et al. Task models and interaction models in a multiple user interfaces generation process
US20030159131A1 (en) Promotion of features in reusable software component types
US6880006B1 (en) System and method for contextual passive rule-based navigation between applications supporting network-disconnected use
Foley et al. JFC unleashed
Taivalsaari Multidimensional browsing

Legal Events

Date Code Title Description
AS Assignment

Owner name: TALIGENT, INC., CALIFORNIA

Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNOR:EDELMAN, BRADLEY A.;REEL/FRAME:007196/0601

Effective date: 19940907

AS Assignment

Owner name: OBJECT TECHNOLOGY LICENSING CORP., CALIFORNIA

Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNOR:TALIGENT, INC.;REEL/FRAME:007886/0500

Effective date: 19960403

STCF Information on status: patent grant

Free format text: PATENTED CASE

FPAY Fee payment

Year of fee payment: 4

FPAY Fee payment

Year of fee payment: 8

FPAY Fee payment

Year of fee payment: 12

AS Assignment

Owner name: APPLE INC., CALIFORNIA

Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNOR:OBJECT TECHNOLOGY LICENSING CORPORATION;REEL/FRAME:023810/0315

Effective date: 20091210