throbber
Case 1:13-cv-00919-LPS Document 311-8 Filed 03/10/21 Page 1 of 201 PageID #: 29247
`Case 1:13-cv-00919—LPS Document 311-8 Filed 03/10/21 Page 1 of 201 PageID #: 29247
`
`EXHIBIT 64 PART 4
`
`EXHIBIT 64 PART 4
`
`

`

`Case 1:13-cv-00919-LPS Document 311-8 Filed 03/10/21 Page 2 of 201 PageID #: 29248
`
`CHAP T ER 16
`
`Find
`
`The full complement of slots in the finder frame resulting from your searches
`varies according to the finder proto it's based on. A finder frame based on the
`ROM_SoupFinder proto returns a finder containing a cursor with which to
`retrieve found items from the application soup. A finder frame based on the
`ROM_ CompatibleFinder proto results in a frame containing an array of the
`actual found items.
`
`The ROM_CompatibleFinder proto is meant to serve as a guideline for creating
`a finder that works on a data storage set that does not use soups. The methods
`included must be overridden to fit the data type in which your application data
`is stored.
`
`Several methods and slots are included by both system protos; they include:
`n The selected array stores selected items from the Find overview in an
`internal format All you can do is pass the array to the Length function to
`determine the number of selected items.
`n The Count method returns an integer with the total number of found items.
`n The Re sync method resets the finder to the first found item.
`n The ShowFoundltem method displays the overview data item that resides in
`the overview's items array.
`n The ShowOrdinal Item method displays an item based on the ordinal number
`or symbol (' f irst, ' prev, or ' next) passed to it.
`
`Whenever possible, you should store your application's data in soups and use the
`ROM _SoupFinder proto to support the Find service, as shown in the following
`code fragment:
`
`if cursor:Entry() then begin
`myFinder :_ {
`proto: ROM SoupFinder,
`owner: self,
`title:"My Application",
`findType:'text, //other possible values are
`//IdateBef ore, 'date0n, and IdateAfter
`f indWords : [searchedForTheseStrings] ,
`cursor: myCursor,};
`
`Table 16-1 provides quick reference descriptions of the ROM_SoupFinder
`methods. Most should not be overridden, but those that may be are indicated.
`
`16-12
`
`Using the Find Service
`
`ARENDI-DEFS00004248
`
`

`

`Case 1:13-cv-00919-LPS Document 311-8 Filed 03/10/21 Page 3 of 201 PageID #: 29249
`
`CHAP T ER 16
`
`Find
`
`Table 16-1
`
`Overview of ROM SoupFinder methods
`
`Description
`
`Override?
`
`Method
`
`Reset
`
`Zero0ne0rMore
`
`ShowEntry
`
`SelectItem
`
`IsSelected
`
`ForEachSelected
`
`FileAndMove
`
`Resets cursor to first found entry. In
`general you should use Re sync to reset
`a finder.
`
`Returns 0 if no found entries, 1 for one
`found entry, or other number for more.
`
`Causes the finding application to display
`entry, which is passed to it as an argument.
`Does not close the Find overview.
`
`Marks the item, passed in as an argument,
`as selected. If this method is set to n 1 a
`checkbox does not appear in front of
`the item.
`
`Returns true if the item, passed in as an
`argument, is selected.
`
`Calls the callback function, passed in as an
`argument, with each selected item. The
`function has one argument: the entry from
`the cursor.
`
`File and/or move the selected items. Has
`four arguments: IabelsCbanged, newLabel,
`storeChanged, newStore. If IabelsChanged
`or storeChanged, is true newLabel and
`newStore indicate the new label and store.
`If overridden you must check for selected
`items as in
`
`if selected then // do work;
`
`No
`
`No
`
`No
`
`No
`
`No
`
`No
`
`Yes, but
`should call
`inherited
`method to
`do work.
`
`Yes, but
`crumple
`effect still
`occurs.
`
`Yes
`
`Delete
`
`Deletes all selected items from
`writeable stores.
`
`GetTarget
`
`Returns cursor for routing.
`
`Note
`The ROM_SoupFinder and ROM_CompatibleFinder
`methods Make Found Item and AddFoundItem are internal
`methods, which should not be called or overridden under any
`circumstances.
`
`Using the Find Service
`
`16-13
`
`ARENDI-DEFS00004249
`
`

`

`Case 1:13-cv-00919-LPS Document 311-8 Filed 03/10/21 Page 4 of 201 PageID #: 29250
`
`CHAP T ER 16
`
`Find
`
`If your application does not store data as soup entries, you can use the
`ROM_ CompatibleFinder proto as the framework from which to create your
`finder frame. Although ROM_CompatibleFinder provides most of the services
`that ROM_SoupFinder does, it does not respond to messages sent by the system
`when the user files, deletes, or moves items in the Find overview. The following
`methods have the same definitions in the ROM_CompatibleFinder as they have
`in the ROM_SoupFinder. If you use ROM_CompatibleFinder proto, in most
`cases, you must define the following methods to work on your data structures:
`
`n FileAndMove
`
`n Delete
`
`n IsSelected
`
`n SelectItem
`
`n ForEachSelected
`
`n GetTarget
`
`The commonality of definition between these methods causes problems in some
`cases. For instance, when used with the ROM_ CompatibleFinder proto, the
`ForEachSelected method must be overridden because it is expected to return
`an array of soup entries.
`
`The ROM_CompatibleFinder proto has the two following methods which are
`not found in the ROM_SoupFinder proto:
`
`n ShowFakeEntry
`
`n ConvertToSoupEntry
`
`When you use the ROM_CompatibleFinder proto, you should define a
`ShowFakeEntry method that makes sure your application is open, and calls your
`ShowFoundItem method.
`
`The convenience method, ConvertToSoupEntry, returns a soup entry when
`given a data item as a parameter.
`
`I mplementing Search Methods
`
`Your application conducts searches in response to messages that it receives from
`the system. You must supply a search method for each message that your application
`supports. These methods are usually defined in your application's base view;
`they include:
`n Find
`
`n DateFind
`
`n FindTargeted
`
`n DateFindTargeted
`
`16-14
`
`Using the Find Service
`
`ARENDI-DEFS00004250
`
`

`

`Case 1:13-cv-00919-LPS Document 311-8 Filed 03/10/21 Page 5 of 201 PageID #: 29251
`
`CHAP T ER 16
`
`Find
`
`Although the implementation of a search method is for the most part application
`specific, some general requirements apply to all search methods. This section
`describes these requirements and advises you of potential problems your search
`methods may need to handle.
`Your search method must be able to search for data in internal RAM as well as in
`RAM or ROM on a PCMCIA card. Using union soups, which allow you to treat
`multiple soups as a single soup regardless of physical location, to store your data
`makes it easier to solve this problem.
`As a search method proceeds through the application data, it must test items
`against criteria specified in the Find slip and collect the ones meeting the test
`criteria. It also needs to call the setMessage method to provide a status string
`that the system displays to the user while the search is in progress. Each of the
`code examples included later in this section shows how to do this.
`When the search is completed, it must append its finder frame to the system-
`supplied results array. This task is described in detail in "Returning Search
`Results" (page 16-21).
`If your application registers for participation in Global finds, your search methods
`may be invoked when your application is not open. Thus, your search methods
`must not rely on your application being open when they are invoked.
`
`Using the StandardFind Method
`
`You can use the system-supplied StandardFind method to search for text in
`soup-based application data. This method makes the necessary calls to display the
`status message, gather matching data items, and to append the finder frame that
`contains the cursor with which to fetch found items to the system's results
`array. The parameters are described in detail in "StandardFind" (page 13-13) in
`Newton Programmer's Reference.
`
`You must call the GetUnionSoupAlways function, saving the result, before
`calling StandardFind. Note that your Find method must be defined in your
`application's base view. Its use is illustrated in the following code example:
`
`MyApplicationBase.Find :_
`func(what, results, scope, statusView)
`begin
`
`The following assignment forces the existence of
`a union soup. Always all GetUnionSoupAlways
`//(saving the result in a local variable) before
`// calling StandardFind.
`
`local temp := GetUnionSoupAlways (kMySoupName);
`:StandardFind(what, kMySoupName, results,
`statusView, nil);
`
`end;
`
`Using the Find Service
`
`16-15
`
`ARENDI-DEFS00004251
`
`

`

`Case 1:13-cv-00919-LPS Document 311-8 Filed 03/10/21 Page 6 of 201 PageID #: 29252
`
`CHAP T ER 16
`
`Find
`
`Using Your Own Text-Searching Method
`
`The following code example illustrates the kinds of tasks you must perform when
`the StandardFind method is not used. (However, it is strongly suggested that
`you use the StandardFind method to implement your Find routine, if possible.)
`This example searches for text in soup-based application data using the
`ROM_SoupFinder proto:
`
`This routine MUST be named Find; it is called by
`the system when the user chooses Find.
`MyApplicationBase.Find :_
`func(what, results, scope, statusView)
`begin
`local myFinder;
`
`Report status to the user;
`note use of GetAppName and Unicode ellipsis.
`if statusView then
`statusView:SetMessage("Searching in " &
`GetAppName(kAppSymbol)& $\u2026);
`
`Presume our soup def is registered,
`however, app may be closed so get our own soup.
`local mySoup:= GetUnionSoupAlways("My Soup");
`
`Make sure a member soup exists so query won't
`fail (GetMember creates the soup if necessary).
`mySoup:GetMember(GetDefaultStore());
`
`//Retrieve entries with strings beginning with "what".
`local myCursor := mySoup: Query({text: what});
`
`// Append finder to system-supplied results array
`if cursor:Entry() then
`begin
`
`myFinder
`
`{
`
`proto: ROM SoupFinder,
`owner: self,
`title:"My Application",
`findType: 'text,
`findWords: :MyStringSplittingFn(what),
`cursor: myCursor,
`
`};
`AddArraySlot(results, myFinder);
`
`end;
`end;
`
`16-16
`
`Using the Find Service
`
`ARENDI-DEFS00004252
`
`

`

`Case 1:13-cv-00919-LPS Document 311-8 Filed 03/10/21 Page 7 of 201 PageID #: 29253
`
`CHAP T ER 16
`
`Find
`
`Finding Text With a ROM_CompatibleFinder
`
`The following example shows how to use the ROM_CompatibleFinder proto to
`search for text in application data that is not soup based. The sample code
`immediately following doesn't contain code that actually searches application data,
`because the implementation of such a search would be specific to the data type
`used to store the application data.
`
`MyAppplicationBase.Find:=
`func(what, results, scope, statusView)
`begin
`local item, foundItems, massagedFoundItems, myFinder;
`
`// Set the message in the Find slip.
`if statusView then
`statusView:SetMessage("Searching in " &
`GetAppName(kAppSymbol) & $\u2026);
`
`MyFindMethod does the actual searching, since
`this is too app-specific to do here. It returns
`an array of all the data items that match 'what.
`foundItems := MyFindMethod(what);
`
`Now we create an array with frames of the form
`mandated for ROM CompatibleFinder.
`_
`massagedFoundItems =
`foreach item in foundItems collect
`{
`
`// Use proto inheritance to protect data
`_proto : item,
`This is seen by the user in the Overview
`(pretend our data is frames w/'name slots)
`: item.name,
`title
`We may add any other slots here our
`methods may want later
`
`};
`
`Construct the finder frame.
`myFinder :_
`{_proto: ROM_CompatibleFinder, // For non-soup data
`owner: self,// View receiving ShowFoundItem message
`title: "My App",
`items: massagedFoundItems,
`findType : 'text,
`findWords: :MyStringSplittingFn(what),
`
`Using the Find Service
`
`16-17
`
`ARENDI-DEFS00004253
`
`

`

`Case 1:13-cv-00919-LPS Document 311-8 Filed 03/10/21 Page 8 of 201 PageID #: 29254
`
`CHAP T ER 16
`
`Find
`
`We may also add slots here...
`
`Append myFinder frame to system's results array
`AddArraySlot(results, myFinder);
`end;
`
`I mplementing the DateFind Method
`
`Date-based searches have a lot in common with their text-based counterparts; in
`fact the only significant difference between these two operations is the search
`criteria. Rather than matching a text string, the DateFind method tests items
`against a time value according to the value of the f indType parameter. This
`parameter indicates whether the search should include results for items dated on,
`after, or before a specified date.
`
`You can simplify the implementation of date-based searches by time-stamping your
`application's data when it is stored. If you store application data as frames that hold
`the time they were created or modified in a particular slot, the DateFind method
`simply tests the value of this slot to accept or reject the entry.
`
`The sample code immediately following shows the implementation of a typical
`DateFind method using the ROM_SoupFinder proto. This code assumes that
`soup entries have a timestamp slot:
`
`MyApplicationBase.DateFind :_
`func(findTime, findType, results, scope, statusView)
`begin
`local myCursor
`local querySpecFrame;
`local querySpec;
`local ourFinder;
`local mySoup;
`constant kOneDay := 60*24;
`
`// report status to the user
`if statusView then
`statusView:SetMessage("Searching in " &
`GetAppName(kAppSymbol) & $\u2026);
`
`// Get the soup
`mySoup:= RegUnionSoup(kAppSymbol, kSoupDef);
`
`16-18
`
`Using the Find Service
`
`ARENDI-DEFS00004254
`
`

`

`Case 1:13-cv-00919-LPS Document 311-8 Filed 03/10/21 Page 9 of 201 PageID #: 29255
`
`CHAP T ER 16
`
`Find
`
`querySpecFrame :=
`
`{
`
`dateBefore
`
`{
`indexPath : 'timeStamp,
`endKey: findTime,
`
`dateAfter
`
`{
`indexPath : 'timeStamp,
`beginKey: findTime,
`
`dateOn
`
`{
`indexPath : 'timeStamp,
`beginKey: kOneDay *
`(findTime div kOneDay)
`endKey: kOneDay + kOneDay *
`(findTime div kOneDay)
`
`};
`local querySpec := querySpecFrame.(findType);
`
`}
`
`// Get the cursor.
`myCursor := mySoup:Query(querySpec);
`
`Set up finder frame and add it to the results
`array.
`if myCursor:Entry() then
`begin
`ourFinder
`
`{
`
`proto: ROM SoupFinder,
`owner: self,
`title: "My Application",
`findType: findType,
`findWords: [DateNTime(findTime)],
`cursor: myCursor
`
`};
`AddArraySlot(results, ourFinder);
`end;
`end;
`
`Adding Application Data Sets to Selected Finds
`
`You can allow users to choose data sets in an application to search by adding the
`AppFindTargets method and either or both of the FindTargeted or
`DateFindTargeted methods. This functionality is useful when you want to
`
`Using the Find Service
`
`16-19
`
`ARENDI-DEFS00004255
`
`

`

`Case 1:13-cv-00919-LPS Document 311-8 Filed 03/10/21 Page 10 of 201 PageID #: 29256
`
`CHAP T ER 16
`
`Find
`
`limit a Find operation to certain data sets of an application. For example, a personal
`finance program may have a check ledger, an account list, and a credit card charges
`list. Another example is an online sales catalog program that could allow users to
`separately search different catalogs. Even though a single application is receiving
`the Find message, a Selected find operation from the Find slip allows the user to
`designate any or all of the associated data sets for the Find operation.
`
`To enable multiple data sets in a find operation, first add the method
`AppFindTargets to your application's base view. This method must return an
`array of frames that specify the data sets for the application. These data set frames
`consist of a name and target pair of slots for each data set, in the following form:
`
`[ {name : "userVisibleText" , target: thisDataForYourUse} , { ... } ]
`
`The name slot of the data set frame holds the string to be displayed in the picker
`which displays when the Find slip's Selected button is tapped. The target slot, of
`the data set frame, can be set to anything; it is passed to your FindTargeted (or
`DateFindTargeted) method. There may be any number of these data set frames
`included.
`
`An example AppFindTargets method may be defined as follows:
`
`MyApplicationBase.AppFindTargets: func()
`begin
`
`[{name:"Check Book", target:'check},
`{name:"Accounts", target: 'accounts},
`{name "Credit Cards", target:'credit}];
`
`end;
`
`You must then add the search methods to your finder frame. These methods
`leverage from the built-in Find and DateFind methods, adding the data set you
`refer to in the target slot as an additional parameter. You define a
`FindTargeted method as shown in the following example:
`
`MyApplicationBase.FindTargeted:
`func (what,sysResultArray,scope, statusView,target)
`// N.B. Scope for Selected find is always 'globalFind
`begin
`local mySoup;
`Assume the target parameter is the name of the
`soup to search... (We provided this value in
`base.AppFindTargets.)
`
`Must include the following line... See "Using the
`StandardFind Method."
`local temp := GetUnionSoupAlways(target)
`:StandardFind( what, target, sysResultArray,
`statusView, 'text);
`
`end;
`
`16-20
`
`Using the Find Service
`
`ARENDI-DEFS00004256
`
`

`

`Case 1:13-cv-00919-LPS Document 311-8 Filed 03/10/21 Page 11 of 201 PageID #: 29257
`
`CHAP T ER 16
`
`Find
`
`Note
`Applications implementing these methods must also implement
`the usual Find and DateFind methods since afind operation
`may be dispatched as other than a Selected find.
`
`Returning Search Results
`
`After constructing the finder frame, your search method needs to append it to the
`system-supplied results array. Each element in this array is afinder frame. In
`the case of a finder based on the ROM SoupFinder, the array the frame has a
`cursor for obtaining the items found in the search. In the case of a finder based on
`the ROM_CompatibleFinder proto, your finder frame contains an array of the
`found items themselves. You need to use the global function AddArraySlot to
`append your finder frame to the results array.
`
`The following example shows a line of code that would be placed at the end of
`your application's search method to store the results of the search. In this code
`fragment, the results parameter is the system-supplied array passed to the Find
`method, and the myFinder parameter is the finder frame resulting from the
`search. The following call to AddArraySlot places the finder frame, myFinder,
`at the end of the results array:
`
`AddArraySlot(results, myFinder);
`
`Note that the system's results array is cleared when the Find slip closes.
`
`I mplementing Find Overview Support
`The messages described in this section are sent to your application when the user
`taps buttons in the Find overview. These include:
`n the FindSoupExcerpt message
`n the ShowFoundltem message
`If your finder frame is based on ROM_CompatibleFinder, you do not need to
`write a FindSoupExcerpt method, but you must also write a ShowFakeEntry
`method to call your ShowFoundltem method.
`
`The FindSoupExcerpt Method
`
`If you use the ROM_SoupFinder proto to construct a finder frame, your
`application must supply a FindSoupExcerpt method. This methods must extract
`the name of a found item when it is given the soup entry and the finder frame, and
`return it to the system as a string to display in the Find overview.
`
`Using the Find Service
`
`16-21
`
`ARENDI-DEFS00004257
`
`

`

`Case 1:13-cv-00919-LPS Document 311-8 Filed 03/10/21 Page 12 of 201 PageID #: 29258
`
`CHAP T ER 16
`
`Find
`
`Your FindsoupExcerpt method may also extract extra information if the finder
`frame has been set up to hold additional data. For example, if the date associated
`with each found item was saved, you could use this information to build more
`descriptive titles for overview items.
`
`The following example shows the implementation of a simple
`FindsoupExcerpt method:
`
`myApplication.FindSoupExcerpt:=
`func(entry, myFinder)
`begin
`//We simply return the string in our entry's name slot
`entry.name;
`
`end
`
`For a complete description of the FindsoupExcerpt method, see
`"FindSoupExcerpt" (page 13-19) in Newton Programmer's Reference.
`
`If you are using the ROM_CompatibleFinder proto, this finder must contain the
`strings that a ROM_SoupFinder's FindsoupExcerpt method would return. For
`more information see the description of the items array in
`"ROM_ CompatibleFinder" (page 13-7) in Newton Programmer's Reference.
`
`The ShowFoundltem Method
`
`This method locates the specified item in your application's data and displays it,
`performing any scrolling or highlighting that is appropriate. A typical
`ShowFoundltem method may need to
`n open a view appropriate for displaying the target
`n set the cursor or the target slot to reference the target
`n scroll the contents of the display view to make the target visible
`n highlight the target in the display view
`The implementation of a ShowFoundltem method depends on which finder proto
`you use. This section describes an example ShowFoundltem method suitable for
`use with the ROM_SoupFinder proto.
`
`If you've based your finder frame on the ROM _SoupFinder proto, the
`ShowFoundltem method is passed two arguments: the soup entry that
`the user tapped in the Find overview, and the finder frame your application
`added to the results array of finder frames.
`
`The system expects your application's ShowFoundltem method to look like the
`following example:
`
`ShowFoundltem: func(myEntry, myFinder) begin . . end
`
`16-22
`
`Using the Find Service
`
`ARENDI-DEFS00004258
`
`

`

`Case 1:13-cv-00919-LPS Document 311-8 Filed 03/10/21 Page 13 of 201 PageID #: 29259
`
`CHAP T ER 16
`
`Find
`
`In the body of this method, you need to do whatever is necessary to display the
`soup entry myEntry. Typically, you first send a Close message to the Overview
`and then open the view that displays the entry. The following code fragment shows
`the implementation of atypical ShowFoundltem method.
`
`// For use with ROM_SoupFinder proto
`myApplication.ShowFoundItem:=
`func(entry, myFinder)
`begin // close my overview if it's open
`if currentView = my0verview then begin
`myOverView:Close();
`myDisplayView:Open();
`// open view that displays the entry
`end;
`scroll, highlight, etc. as necessary
`to display the entry
`myDisplayView:DisplayEntry(entry, cursor);
`
`end
`
`Your application is always open when the ShowFoundltem message is sent to it.
`For example, this message is sent when the user scrolls between found items from
`within the Find slip. The system also invokes this method when the user taps an
`item in the Find overview. In this case, the system opens your application, if
`necessary, before sending the ShowFoundltem message to it.
`
`Note that if no items are found this message is never sent.
`
`Using ShowFoundltem with ROM_CompatibleFinder
`If you are using afinder based on ROM_CompatibleFinder, you still need to
`implement a ShowFoundltem in your application's base view. Your finder also
`needs to override the ShowFakeEntry method. Your ShowFakeEntry method
`needs to call your ShowFoundltem method, making sure that your application is
`open first. Your ShowFoundltem method should accept an element of the finder's
`items array as its first parameter, instead of a soup entry. It should perform the
`same actions as a ShowFoundltem method that expects a soup entry, as described
`in "The ShowFoundItem Method" (page 16-22).
`
`The following example demonstrates a typical ShowFakeEntry method:
`
`myFinder
`
`{
`
`proto : ROM CompatibleFinder,
`ShowFakeEntry : func (index)
`begin
`local myApp;
`if myApp := GetRoot.(kAppSymbol) then
`
`Using the Find Service
`
`16-23
`
`ARENDI-DEFS00004259
`
`

`

`Case 1:13-cv-00919-LPS Document 311-8 Filed 03/10/21 Page 14 of 201 PageID #: 29260
`
`CHAP T ER 16
`
`Find
`
`begin
`myApp:Open();
`myApp:ShowFoundItem (items[index], self);
`end;
`end,
`
`} R
`
`eplacing the Built-in Find Slip
`
`Applications can replace the system-supplied Find slip with a customized version,
`which is called when the application is frontmost. To implement a custom Find slip
`that displays in your application, include a method named CustomFind in the
`application's base view. This CustomFind method must open the Find slip you
`constructed and do anything else that's appropriate, including displaying found items.
`
`Reporting Progress to the User
`
`It is strongly recommended that your status messages be consistent with those that
`the built-in Newton applications display while a Find operation is in progress; for
`example, you can use a message such as "Searching in appName."
`
`Your search method is passed a status View parameter which is the view the system
`is using to report progress. You can display a string in this view, by calling its
`SetMessage method. Figure 16-10 depicts a typical status message from the Find
`service.
`
`Figure 16-10 Typical status message
`
`Searching haystack for needles_
`¤ Lookfor needles
`
`I
`
`Find M
`
`16-24
`
`Using the Find Service
`
`ARENDI-DEFS00004260
`
`

`

`Case 1:13-cv-00919-LPS Document 311-8 Filed 03/10/21 Page 15 of 201 PageID #: 29261
`
`CHAP T ER 16
`
`Find
`
`The following code fragment shows how to use the statusView parameter to
`display a progress message to the user:
`
`MyAppplicationBase.Find:=
`func(what, results, scope, statusView)
`begin
`if statusView then
`statusView:SetMessage("Searching in" &
`GetAppName(kAppSymbol)&
`$/u2026);
`
`end;
`
`There are several ways to obtain the application name string that replaces the
`appName variable; they are listed here in order of recommended use:
`n You can retrieve this string from the appName slot in your application's base view.
`n You can retrieve this string from the title slot in your finder frame.
`n You can retrieve this string by calling GetAppName (kAppSymbol) ;
`
`Registering for Finds
`
`Applications registered with the Find service participate in Global finds; they also
`participate in selective finds when specified by the user.
`
`You do not need to register with the Find service to support Local finds. Global
`and Local find support use the same mechanism, which relies on the Find and
`ShowFoundltem methods that your application supplies. A Global find is simply
`a series of Local finds initiated by the system in applications that have registered
`for participation in Global finds.
`
`Use the RegFindApps function to register your application with the Find service
`and its counterpart, the UnRegFindApps function, to reverse the effect. You
`should call these functions from your application part's Instal lScript and
`RemoveScript functions.
`
`Using the Find Service
`
`16-25
`
`ARENDI-DEFS00004261
`
`

`

`Case 1:13-cv-00919-LPS Document 311-8 Filed 03/10/21 Page 16 of 201 PageID #: 29262
`
`CHAP T ER 16
`
`Find
`
`Summary
`
`Finder Protos
`
`// Use to find soup entries.
`mySoupFinder:= {
`proto: ROM SoupFinder,
`owner:self, // View that gets ShowFoundItem message
`usually your app's base view
`title: "My Application",// Displayed in Find overview
`// usually inherited from owner
`cursor:myCursor,// Returned by search method's query
`findType:'text// Must use this value for text search
`findWords: [search strings] // Array of words to match
`selected: [] , // Internal array of selected items
`Count: func(),//Returns # found items; don't override
`Delete: func(), // Deletes all selected items
`FileAndMove: func
`(labelsChanged, newLabel, storeChanged, newStore) ,
`// Files and/or moves selected items
`ForEachSelected: func (callbackFunction) , // Calls callback
`// func for each selected found item; dont override
`GetTarget: func(), //Returns target frame; for routing
`IsSelected: func(item), // Returns true if item
`selected; don't override.
`Reset: func(), // Resets cursor; don't override.
`ReSync: func(), // Resets SoupFinder; do not override.
`SelectItem: func(item), // Marks item as selected
`ShowFoundItem: func (item, finder) ,
`ShowEntry: func (entry) , // Displays entry;
`// don't override
`ShowOrdinalItem: func (ordinal) , //Shows found item
`// specified by integer
`ZeroOneOrMore: func(), // Returns number of items;
`don't override
`
`}
`
`16-26
`
`Summary
`
`ARENDI-DEFS00004262
`
`

`

`Case 1:13-cv-00919-LPS Document 311-8 Filed 03/10/21 Page 17 of 201 PageID #: 29263
`
`CHAP T ER 16
`
`Find
`
`myCompatibleFinder:= {// Use to find data stored in
`non-soup data structures
`//Override most to fit your data.
`proto: ROM CompatibleFinder,
`owner:self, // Required. View that gets ShowFoundItem
`message;usually your app's base view.
`title: "My Application",// Displayed in Find overview;
`// usually inherited from owner.
`findType:'text// Can also be 'dateBefore,
`//'date0n, or 'dateAfter.
`f indWords : [ textOrDate]/ / Text or date to find.
`items:[// Array of the items found by your search.
`{_proto: myFoundItem, //Optional; but better
`//to reference data as it
`//gets altered destructively.
`title: "My Application",//String displayed in
`//Find overview.
`
`I
`{ /* and other such frames...
`
`selected: [1 , // Internal array of selected items.
`ConvertToSoupEntry: func(item),//Return a soup entry
`//corresponding to data item.
`Count: func(),//Returns number of found items;
`// don't override.
`Delete: func(), // Deletes all selected items.
`FileAndMove : func (labelsChanged, newLabel,
`storeChanged, newStore) ,
`Files and/or moves selected items
`ForEachSelected: (callbackFunction) , // Calls callback
`function for each selected
`found item; don't override.
`GetTarget: func(), //Returns target frame; for routing
`IsSelected: func(item), // Returns true if item is
`selected; don't override.
`ReSync: func(), // Resets finder to its initial
`state; do not override.
`SelectItem: func(item), // Marks item as selected
`ShowFakeEntry: func(index), // Displays the index(th)
`number found item. Replaces
`ShowFoundItem in compatabile finder.
`
`}
`
`Summary
`
`16-27
`
`ARENDI-DEFS00004263
`
`

`

`Case 1:13-cv-00919-LPS Document 311-8 Filed 03/10/21 Page 18 of 201 PageID #: 29264
`
`CHAP T ER 16
`
`Find
`
`Functions and Methods
`
`RegFindApps(appSymbol)
`
`//registers app. for global &
`//selected finds
`UnRegFindApps(appSymbol) //unregs. app for non-local finds
`status View: SetMessage (msg) //sets string in progress view
`view: StandardFind ( what, soupName, results, status View, indexPatb)
`//searches soups
`
`Application-Defined Methods
`
`appBase: Find ( what, results, scope, status View) //text find
`appBase: FindTargeted ( what, results, scope, status View, target)
`// targeted text find
`appBase: DateFind (findTime, compareHow, results, scope, status View)
`// date find
`appBase: DateFindTargeted ( what, results, scope, status View, target)
`// targeted date find
`appBase:AppFindTargets ()//sets targets for targeted finds
`targetView: FindSoupExcerpt (entry, resultFrame) // returns string
`// to display in find overview
`targetView: ShowFoundItem (foundltem, ruyFinder) //show found
`//item
`
`appBase:CustomFind() //Does all find work
`
`16-28
`
`Summary
`
`ARENDI-DEFS00004264
`
`

`

`Case 1:13-cv-00919-LPS Document 311-8 Filed 03/10/21 Page 19 of 201 PageID #: 29265
`
`C H A P T E R 1 7
`
`Additional System Services
`
`This chapter discusses system services not covered elsewhere in this book. The
`topics covered in this chapter are
`n Providing the capability to undo and redo user actions.
`n Using idler objects to perform periodic operations.
`n Using the notification service to respond to soup, folder, or user configuration
`change messages.
`n Using the alerts and alarms service to display user messages and execute
`callback functions at specified times.
`n Using progress indicators to provide user feedback.
`n Using the power registry to execute callback functions when the Newton is
`powered on or off.
`n Using a custom help book to provide online help to the user.
`If you are developing an application that utilizes any of these objects or services,
`you should familiarize yourself with the material discussed in this chapter.
`
`About Additional System Services
`
`This section briefly describes the undo, idler objects, alerts and alarms, change
`notification, progress reporting, and power registry services. These are discussed in
`greater detail later in this chapter.
`
`Undo
`The Undo service is the mechanism the system provides for undoing and redoing
`the user's most recent action. From within each function or method that must
`support Undo, your application registers a function object that can reverse the
`actions of that function or method. This function object is called an undo action,
`and is called when the user taps the Undo button. The undo action can then register
`
`About Additional System Services
`
`17-1
`
`ARENDI-DEFS00004265
`
`

`

`Case 1:13-cv-00919-LPS Document 311-8 Filed 03/10/21 Page 20 of 201 PageID #: 29266
`
`CHAP T ER 17
`
`Additional System Services
`
`a function object to redo the original function or method. Thus tapping the Undo
`button twice completes an undo/redo cycle.
`
`Undo Compatibility
`
`The user interface standards for version 2.0 of the Newton operating system call for
`the user's second tap on the Undo button to provide a Redo rather than a second
`level of Undo. Your undo action must create an undo action for itself to implement
`this interface. For more information, see the section "Using Undo Actions"
`beginning on page 17-8.
`
`The global function AddUndoAction is obsolete, replaced by the view method of
`the same name that provides similar functionality. Existing code that uses the
`global function can be converted by prefixing a colon to the message selector.
`For example:
`
`AddUndoAction(....)
`
`becomes
`
`:AddUndoAction(...)
`
`Idler Objects
`
`An idler object sends a message to your view periodically to execute the
`viewzdlescript method you provide for that view. Thi

This document is available on Docket Alarm but you must sign up to view it.


Or .

Accessing this document will incur an additional charge of $.

After purchase, you can access this document again without charge.

Accept $ Charge
throbber

Still Working On It

This document is taking longer than usual to download. This can happen if we need to contact the court directly to obtain the document and their servers are running slowly.

Give it another minute or two to complete, and then try the refresh button.

throbber

A few More Minutes ... Still Working

It can take up to 5 minutes for us to download a document if the court servers are running slowly.

Thank you for your continued patience.

This document could not be displayed.

We could not find this document within its docket. Please go back to the docket page and check the link. If that does not work, go back to the docket and refresh it to pull the newest information.

Your account does not support viewing this document.

You need a Paid Account to view this document. Click here to change your account type.

Your account does not support viewing this document.

Set your membership status to view this document.

With a Docket Alarm membership, you'll get a whole lot more, including:

  • Up-to-date information for this case.
  • Email alerts whenever there is an update.
  • Full text search for other cases.
  • Get email alerts whenever a new case matches your search.

Become a Member

One Moment Please

The filing “” is large (MB) and is being downloaded.

Please refresh this page in a few minutes to see if the filing has been downloaded. The filing will also be emailed to you when the download completes.

Your document is on its way!

If you do not receive the document in five minutes, contact support at support@docketalarm.com.

Sealed Document

We are unable to display this document, it may be under a court ordered seal.

If you have proper credentials to access the file, you may proceed directly to the court's system using your government issued username and password.


Access Government Site

We are redirecting you
to a mobile optimized page.





Document Unreadable or Corrupt

Refresh this Document
Go to the Docket

We are unable to display this document.

Refresh this Document
Go to the Docket