12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- Many people have admired the paged question selection facility in the
- OpenDoors 5.00 EZVote example door. EZVote allows the user to choose
- questions from a list of up to 200 questions, by displaying one page
- of questions at a time. The user is able to page up or down in the list
- of quesitons, select a question from the list, or return to the main
- menu. A prompt at the bottom of the screen shows the current page
- number, and a list of options that are currently available. For
- instance, when displaying the first of two pages, this prompt indicates
- that the user can move to the next page, but not the previous page.
- This OpenDoors Tip shows a generic function that provides the same sorts
- of capabilities that are seen in the EZVote example door, in a form that
- can be re-used in many different programs. This function, named
- PagedViewer(), can be used for displaying multi-paged messages, text
- files, or for permitting selection from a potentially very long list of
- items. To use the PagedViewer() in a program, you should add the
- pageview.c file to your project file / makefile, and #include the
- pageview.h file in any source file that calls PagedViewer().
- The prototype for the PagedViewer() function is as follows:
- int PagedViewer(
- int nInitialLine,
- int nTotalLines,
- void (*pDisplayCallback)(int nLine, void *pCallbackData),
- void *pCallbackData,
- BOOL bAllowSelection,
- char *pszTitle,
- int nPageSize);
- The nInitialLine parameter specifies the line to begin viewing at.
- Normally this would be 0, but you may wish to pass a different value to
- this function to force the viewer to begin on a page other than the
- first. Using this parameter, you can have the user return to
- the page they were previously viewing, rather than returning to the
- first page and having to again find their original location.
- The nTotalLines parameter specifies the total number of lines that can
- be viewed, and can be any value greater than or equal to 0.
- The pDisplayCallback parameter must be a pointer to a function that the
- PagedViewer will call to display a particular line of the file at the
- current location. When PagedViewer() calls your function, it will pass
- the line number to be displayed, along with the value originally passed
- to PagedViewer() in pCallbackData. The provided function should simply
- display the text for the specified line number, without a trailing CR/LF
- sequence, and then return.
- The pCallbackData can point to any data that you wish PagedViewer() to
- pass to your callback function, or may be NULL if you do not wish to use
- this feature.
- The bAllowSelection parameter should be TRUE if the user should be able
- to make a selection from the list, and FALSE if they should not. If
- bAllowSelection is TRUE, PagedViewer() will display a letter beside each
- line, and allow the user to select a line by pressing the corresponding
- letter. If you are using PagedViewer() to display a text file or
- message, you will want to set bAllowSelection to FALSE. If you are using
- PagedViewer() to display a list of items from which the user can select,
- you will want to set bAllowSelection to TRUE.
- The pszTitle parameter can point to a title to be displayed at the top
- of each page, and could be something like ("Select a message"). If you
- do not wish to have a title displayed, set this parameter to NULL.
- The nPageSize parameter specifies the number of lines that should be
- displayed on each page. If you do not wish to have the local screen
- (with a two line status line) to be scrolled while displaying the list,
- the maximum page size you should use is 21 if no title is being
- displayed, and 19 if a title is being displayed.
- The included fileview.c text file viewing program demonstrates the use
- of PagedViewer(). The fileview.c door can be setup to allow the user to
- view one or more files. If setup to view multiple files, the program
- first displays a list of files that the user can select to view.
- The fileview.c program uses PagedViewer() in two places - for providing
- the list of files and for displaying the file itself. As such, the user
- can page up or down in the list of files, select a file to view, and
- then page up or down in the file. When the user selects quit while
- viewing the file, they are returned to the list of files to possibly
- select another file. When the user selects quit from the list of files,
- the door returns control to the calling BBS software.
|