Warning: main(/www/www/htdocs/style/globals.php) [function.main]: failed to open stream: No such file or directory in /www/www/docs/6.4.1/photon/wid_build/list.html on line 1
Warning: main() [function.include]: Failed opening '/www/www/htdocs/style/globals.php' for inclusion (include_path='.:/www/www/common:/www/www/php/lib/php') in /www/www/docs/6.4.1/photon/wid_build/list.html on line 1
Warning: main(/www/www/htdocs/style/header.php) [function.main]: failed to open stream: No such file or directory in /www/www/docs/6.4.1/photon/wid_build/list.html on line 8
Warning: main() [function.include]: Failed opening '/www/www/htdocs/style/header.php' for inclusion (include_path='.:/www/www/common:/www/www/php/lib/php') in /www/www/docs/6.4.1/photon/wid_build/list.html on line 8
This chapter covers the following topics:
The Photon library provides the generic list widget class
PtGenList for creating custom list widgets. The
PtGenList class displays a vertical list of any number of
items. A user can select one or more items from this list, depending
on the selection policy.
The child class shouldn't override the Draw method or consume mouse or
key events. Instead, it should define a List Draw method for drawing
and may define a Mouse and/or Key Event method if additional handling of
those event types is required. Usually, the child class will also
define a Selection method that will be called by the
PtGenList event handler.
The PtGenList class never allocates or frees
items. This is the responsibility of the child class. The
PtGenList class expects each item to be represented by
a
PtGenListItem_t
structure — see the Photon Widget Reference.
When you call a PtGenList*() convenience
function, you give it a pointer to the PtGenListItem_t
structure as an item. When PtGenList
calls one of your methods, it provides a pointer to the
PtGenListItem_t structure as an item.
Since a child class will most likely need additional data describing the
item, it will usually define its item as a structure whose first member
is PtGenListItem_t. This makes conversions to and
from PtGenListItem_t easy.
The child class is responsible for allocating items and adding them to
the widget. Before adding an item to the widget, the members of the
item structure should be set to the required values.
After adding the item to the widget, don't modify the
PtGenListItem_t directly — use the convenience functions
instead.
The PtGenListItem_t structure is defined as follows:
typedef struct Pt_genlist_item {
unsigned flags;
PhDim_t size;
PtGenListItem_t *next, *prev;
}
PtGenListItem_t;
- flags
- The following flags describe the state of the item:
- Pt_LIST_ITEM_SELECTED
- This item is selected. Use
PtGenListSelect()
and
PtGenListUnselect()
to modify this flag.
- Pt_LIST_ITEM_CURRENT
- This item is the current item
(see
“Current item”
in the description of PtGenList in the
Widget Reference).
Use
PtGenListGoto()
to modify this flag.
- Pt_LIST_ITEM_DAMAGED
- This item should be redrawn. Use
PtGenListDamageItem()
to force a redraw.
- Pt_LIST_ITEM_ABOVE
- This item is above the visible range of items. Use the
Pt_ARG_TOP_ITEM_POS
resource or
PtGenListShow()
to scroll the list.
- Pt_LIST_ITEM_BELOW
- This item is below the visible range of items. Use the
Pt_ARG_TOP_ITEM_POS
resource or
PtGenListShow()
to scroll the list.
The Pt_LIST_ITEM_USED_FLAGS macro defines the flags used by
the PtGenList widget. The remaining bits are available
for the child class.
- size
- A
PhDim_t
structure (see the Photon Library Reference) that defines
the width and height of the item.
If the child class needs to modify
the size of an item after it has been added to the widget, it should use
the
PtGenListLockItem()
and
PtGenListUnlockItem()
convenience functions. If the widget has columns, the widths of
the items are ignored.
- next, prev
- The widget uses these links to find the next and previous items
in the list.
Don't modify these links after adding the item to the widget.
The next link is used for linking items
before they're added to a widget (see
PtGenListAddItems()).
Some members of the PtGenListWidget_t structure may be
used by the child class.
In general, don't modify the structure members directly; use the provided
resources and convenience
functions instead.
|
For information on
the correspondence between structure members and resources, see
the “Resource definitions” section for
PtGenList
in the chapter on Using Widget Superclasses. |
- gflags
- Flags that affect the behavior of the widget. The child class will
probably set all or most of these flags to a fixed value; however, if
a class has to modify gflags after the widget has been
created, use
PtGenListSetGflags().
- Pt_GEN_LIST_NO_BACKGROUND
- If set, the Draw method won't draw the background (under the items) or margins.
- Pt_GEN_LIST_ITEM_BACKGROUND
- If this flag is set but the
Pt_GEN_LIST_NO_BACKGROUND flag is clear, the Draw method will draw the background
beneath each item and call the List Draw method once for each item
that needs to be drawn.
- Pt_GEN_LIST_NO_CLIPPING
- If this flag is clear, the Draw method will set clipping to the
widget's canvas before calling the List Draw method. The clipping
won't be set if no items are wider than the canvas.
- Pt_GEN_LIST_SHOW_DAMAGED
- If this flag is set, the Draw method
will scan the damage list and set the
Pt_LIST_ITEM_DAMAGE flag in the items that need to be
drawn. The List Draw method won't be called at all if no
items are damaged.
- Pt_GEN_LIST_FULL_WIDTH
- If this flag is set, the space to the right of an item is
considered part of the item — the width stored in the item
is treated as a suggested minimum. If that space is damaged, the
item will be marked as damaged. If this flag isn't set, the space
to the right of an item is treated like the margin. Mouse clicks
on that space are ignored.
- Pt_GEN_LIST_NO_AUTOFOCUS
- If this flag is clear, giving focus to the widget when there's
no current item in that widget will automatically set the current
item to the first displayed item
(see
“Current item”
in the description of PtGenList in the
Widget Reference).
- Pt_LIST_BALLOONS_IN_COLUMNS
- If this flag is set and the widget has columns, the widget will
destroy and recreate the balloon when the mouse pointer crosses
column boundaries.
- sel_xmode and sel_xflags
- The “decomposed” value of the current selection mode. The
value of sel_xmode can be one of:
- Pt_SELECTION_MODE( Pt_SELECTION_MODE_NONE )
- Pt_SELECTION_MODE( Pt_SELECTION_MODE_SINGLE )
- Pt_SELECTION_MODE( Pt_SELECTION_MODE_MULTIPLE )
- Pt_SELECTION_MODE( Pt_SELECTION_MODE_RANGE )
The sel_xflags member contains the “flags”
part of the current selection mode:
- Pt_SELECTION_FLAGS( Pt_SELECTION_MODE_NOSCROLL )
- Pt_SELECTION_FLAGS( Pt_SELECTION_MODE_NOMOVE )
- Pt_SELECTION_FLAGS( Pt_SELECTION_MODE_NOREST )
- Pt_SELECTION_FLAGS( Pt_SELECTION_MODE_AUTO )
- Pt_SELECTION_FLAGS( Pt_SELECTION_MODE_NOCLEAR )
- Pt_SELECTION_FLAGS( Pt_SELECTION_MODE_TOGGLE )
- Pt_SELECTION_FLAGS( Pt_SELECTION_MODE_NOFOCUS )
- current_item
- The pointer to the current item
(see
“Current item”
in the description of PtGenList in the
Widget Reference).
- cur_ndx
- The index of the current item (the first item on the list has an index
of 1).
The methods described in this section are defined in the
PtGenList class.
The Draw method calls the List Draw method with the following arguments:
- PtGenListWidget_t *widget
- The widget pointer.
- PtGenListItem_t *items
- A pointer to the
PtGenListItem_t
structure for the first item that needs to be redrawn.
- unsigned index
- The index of the item to be redrawn (the first item on the list
has an index of 1).
- unsigned nitems
- The number of items the function should look at.
- PhRect_t *where
- A pointer to a
PhRect_t
structure (see the Photon Library Reference) that defines
the extent of the items (the function is allowed to modify the
PhRect_t structure pointed to by where).
The list class's raw callbacks invoke the Mouse List method on every
mouse event if the mouse points to an item. The function can return a
value other than Pt_CONTINUE to suppress normal mouse
handling.
The List Mouse method is called with the following arguments:
- PtGenListWidget_t *widget
- The widget pointer.
- PtGenListItem_t *item
- A pointer to the
PtGenListItem_t
structure for the item under the mouse cursor.
- unsigned index
- The index of that item (the first item on the list has an index of 1).
- PhPoint_t *where
- A pointer to a
PhPoint_t
structure (see the Photon Library Reference) that defines
the mouse position, relative to the item.
The function is allowed to modify the structure pointed to by
where.
- int column
- The index of the column under the mouse pointer, or -1 if the pointer
isn't on a column or the widget has no columns.
- PhEvent_t const *event
- A pointer to a
PhEvent_t
structure (see the Photon Library Reference) that describes
the event.
The list class's raw callbacks invoke the List Key method on every
key event. This method should return one of the following values:
- Pt_CONTINUE
- The PtGenList class will normally process the
data contained in the
PhKeyEvent_t
structure. Note
that the class's raw callbacks are allowed to modify the
contents of that structure.
- Pt_END
- The widget will ignore the event and the class's raw callbacks will
return Pt_CONTINUE immediately.
- Pt_HALT
- The event will be consumed by the widget, but
PtGenList itself won't take any further action. The
class's raw callbacks return Pt_END immediately.
The List Key method is called with the following arguments:
- PtGenListWidget_t *widget
- The widget pointer.
- PhEvent_t const *event
- A pointer to a
PhEvent_t
structure (see the Photon Library Reference) that describes
the event.
- PhKeyEvent_t *kevent
- A pointer to the event data (which the function can modify).
See
PhKeyEvent_t
in the Photon Library Reference.
- PtGenListItem_t *newcur
- A pointer to the
PtGenListItem_t
structure for the new current item (if the event is processed normally).
- int index
- The index of that item (the first item on the list has an index of 1).
The list class's raw callbacks invoke the List Select method when an
item is selected or unselected. The arguments are:
- PtGenListWidget_t *list
- The widget pointer.
- PtGenListItem_t *item
- A pointer to a
PtGenListItem_t
structure.
In Pt_SELECTION_MODE_RANGE selection mode, it's a pointer
to the first selected item.
In other modes, it's a pointer to the item that has been selected or
unselected.
- int index
- The index of that item (the first item on the list has an index of 1).
- int column
- The index of the column under the mouse pointer, or -1 if the pointer
isn't on a column or the widget has no columns.
- int nitems
- The current number of selected items (the same as
list->sel_count).
- int subtype
- The selection subtype.
- PhEvent_t const *event
- A pointer to a
PhEvent_t
structure (see the Photon Library Reference) that describes
the event.
The List Inflate method is called whenever a balloon widget needs to be
created. The List Inflate method should create a balloon and return its widget
pointer.
The List Inflate method is called with the following arguments:
- PtWidget_t *widget
- The list widget.
- PtWidget_t *parent
- The parent widget for the balloon.
- PtGenListItem_t *item
- A pointer to the
PtGenListItem_t
structure for the item under the mouse pointer.
- unsigned index
- The index of that item (the first item on the list has an index of 1).
- int column
- The index of the column under the mouse pointer, or -1 if the
pointer isn't on a column or the widget has no columns.
- PhArea_t *area
- A pointer to a
PhArea_t
structure (see the Photon Library Reference) that defines
the area (relative to the parent widget)
corresponding to the entire item. Use
PtGenListSetColumnBalloon()
to adjust the area
to the specified column if you're not using
PtGenListCreateTextBalloon().
These functions are described
in the Photon Widget Reference.
The List Attributes is called from the widget's draw functions
(PtGenListDrawString()
and PtGenListDrawBackground()).
It should return a pointer to a
PtGenListItemAttrs_t attribute structure filled in with
information about how to draw the item, and has the following arguments:
- PtWidget_t *widget
- The widget pointer.
- PtGenListItem_t *item
- A pointer to the item that's being drawn.
If the method returns NULL, the calling draw function uses the widget's resources. Also, if any of the colors in the attributes structure are set to Pg_TRANSPARENT, or the font is NULL, the corresponding widget-wide setting is used.
The PtGenList class defines the following convenience
functions (see the Photon Widget Reference):
- PtGenListAddItems()
- Add items to a list.
- PtGenListAllItems()
- Get pointers to all the items in a list.
- PtGenListClearSelection()
- Clear the selection.
- PtGenListDamageItem()
- Redraw an item when its data has been changed.
- PtGenListDrawBackground()
- Draw the background of a list.
- PtGenListDrawString()
- Draw a string.
- PtGenListFirstItem()
- Return a pointer to the first item in a list.
- PtGenListGetCurrent()
- Return a pointer to the current item in a list.
- PtGenListGetSelIndexes()
- Get the indexes of the selected items.
- PtGenListGoto()
- Set the current item so that the new current item is visible.
- PtGenListHold()
- Prevent visible repair of a list widget.
- PtGenListItemIndex()
- Find the index of an item.
- PtGenListItemRealloc()
- Reallocate memory for an item.
- PtGenListLastItem()
- Return a pointer to the last item in a list.
- PtGenListLockItem()
- Lock an item so it can be resized.
- PtGenListRelease()
- Release a hold on visible repairs of a list widget.
- PtGenListRemoveItems()
- Remove items from a list.
- PtGenListResize()
- Resize a list widget.
- PtGenListSelect()
- Select an item in a list.
- PtGenListSelectedItems()
- Get pointers to the selected items.
- PtGenListSetGflags()
- Modify the gflags field of the widget.
- PtGenListSetSelIndexes()
- Set the selection indexes.
- PtGenListShow()
- Set the current position so a given item is visible.
- PtGenListUnlockItem()
- Unlock an item so it can be updated.
- PtGenListUnselect()
- Unselect an item in a list.
- PtSuperClassGenListDraw()
- Invoke the Draw List method in a superclass.
- PtSuperClassGenListInflate()
- Invoke the List Inflate method in a superclass.
- PtSuperClassGenListKey()
- Invoke the List Key method in a superclass.
- PtSuperClassGenListMouse()
- Invoke the List Mouse method in a superclass.
- PtSuperClassGenListSelect()
- Invoke the List Select method in a superclass.
Warning: main(/www/www/htdocs/style/footer.php) [function.main]: failed to open stream: No such file or directory in /www/www/docs/6.4.1/photon/wid_build/list.html on line 898
Warning: main() [function.include]: Failed opening '/www/www/htdocs/style/footer.php' for inclusion (include_path='.:/www/www/common:/www/www/php/lib/php') in /www/www/docs/6.4.1/photon/wid_build/list.html on line 898