128 lines
3.3 KiB
Plaintext
128 lines
3.3 KiB
Plaintext
|
|
|
|
NT User Interface
|
|
Design Overview
|
|
N-Level Outline Listbox
|
|
Kevin LaChapelle (KevinL)
|
|
Revision 0.5 10/06/91
|
|
|
|
|
|
|
|
1. SCOPE
|
|
|
|
This document provides a general design overview of the N-Level
|
|
Outline listbox design.
|
|
|
|
2. REFERENCES
|
|
|
|
BLT Specification
|
|
|
|
3. OVERVIEW
|
|
|
|
The current design for the OLB does not contain a data structure
|
|
other than that of the underlying windows listbox. This has
|
|
proven to be inadequate for a n-level implementation for several
|
|
reasons that are not discussed here. The key area that needed
|
|
improvement was how to insert an element into the listbox and have it
|
|
placed in the proper location. The reason that this has proven
|
|
difficult is because it is possible for elements to have identical
|
|
"parent" values. (In the case of Multiple networks the server/domain
|
|
names can be identical across domains).
|
|
|
|
The solution to this problem is to have an underlying data
|
|
structure that takes the form of a tree. Specifically one that has
|
|
the following structure:
|
|
|
|
LBI * plbi
|
|
BOOL fShowChildren // Display children (if any)
|
|
NODE * pnParent // Parent
|
|
NODE * pnChild // First Child
|
|
NODE * pnLeft // Left and Right
|
|
NODE * pnRight // Siblings
|
|
|
|
The benefits of using a tree are many:
|
|
|
|
- You will always know based upon your location in the tree
|
|
what index in the listbox you are. (The tree is always sorted, and
|
|
thus provides a way to easily count the path from the root.)
|
|
|
|
- This allows for easy preservation of selection across refreshes.
|
|
|
|
- Easy way for to purge unwanted data from memory.
|
|
For example: If someone expands a node, then chooses
|
|
to collapse that node. A pointer to that node could be entered into
|
|
a list for cleanup. This list would contain pointers to parents
|
|
whose children were no longer visible and after an appropriate time
|
|
delay that information would be purged. Of course at the moment it
|
|
would be too dificult to delete anything more than one level of
|
|
expansion because if the user happens to expand that node again we
|
|
must present the same expansion as was there before.
|
|
|
|
EXAMPLE:
|
|
|
|
ABLE TO PURGE:
|
|
|
|
domain
|
|
server
|
|
server
|
|
server
|
|
server
|
|
server
|
|
domain1
|
|
|
|
domain is collapsed
|
|
|
|
domain
|
|
domain1
|
|
|
|
after a period of time all of the servers are purged. If the user
|
|
expands domain then we reload the servers.
|
|
|
|
|
|
UNABLE TO PURGE:
|
|
|
|
domain
|
|
server
|
|
server
|
|
server
|
|
share
|
|
share
|
|
share
|
|
server
|
|
server
|
|
domain1
|
|
|
|
domain is collapsed
|
|
|
|
domain
|
|
domain1
|
|
|
|
after a period of time the servers can't be purged because we would
|
|
then have to remember the level of expansion of each server because
|
|
if the user re-expands domain, then we should show what was there
|
|
before the initial collapse.
|
|
|
|
4. CLASS HEIRARCHY
|
|
|
|
The C++ classes for implementing the OLB is as follows:
|
|
|
|
LB_TREE
|
|
LBNODE
|
|
LBI
|
|
|
|
|
|
5. CLASS DETAILS
|
|
|
|
T.B.F.I
|
|
|
|
6. OPERATION
|
|
|
|
7. OPEN ISSUES
|
|
|
|
8. REVISION HISTORY
|
|
|
|
Who When What
|
|
--- ---- ----
|
|
KevinL 10/06/1991 Created this document.
|
|
|