List.mui
DESCRIPTION
List.mui/List.mui MUI's list class is very powerful. It handles all types of entries, from a simple string to a complicated structure with many associated resources. Multi column lists are also supported, the format for a column is adjustable. Lists support any kind of sorting, multi selection and an active entry that can be controlled with the mouse or the cursor keys. Note: A list object alone doesn't make much sense, you should always use it as child of a listview object. This one attaches a scrollbar and handles all user input
MUIA_List_Active
(V4 ) [ISG], LONG, 0x8042391c
DESCRIPTION
Reading this attribute will return the number of the active entry (the one with the cursor on it). The result is between 0 and MUIA_List_Entries-1 or MUIV_List_Active_Off, in which case there is currently no active entry. Setting the attribute will cause the list to move the cursor to the new position and scroll this position into the visible area
SPECIAL INPUTS
MUIV_List_Active_Off MUIV_List_Active_Top MUIV_List_Active_Bottom MUIV_List_Active_Up MUIV_List_Active_Down MUIV_List_Active_PageUp MUIV_List_Active_PageDown
SEE ALSO
MUIA_List_AdjustHeight
(V4 ) [I..], BOOL, 0x8042850d
DESCRIPTION
A list with MUIA_List_AdjustHeight set to true is exactly as high as all of its entries and not resizable. This is only possible when the list is filled *before* the window is opened
SEE ALSO
MUIA_List_AdjustWidth
(V4 ) [I..], BOOL, 0x8042354a
DESCRIPTION
A list with MUIA_List_AdjustWidth set to true is exactly as wide as the widest entry and not resizable. This is only possible when the list is filled *before* the window is opened
SEE ALSO
MUIA_List_AgainClick
(V20) [ISG], BOOL, 0x804214c2
DESCRIPTION
yet undocumented, please complain in mailinglist
MUIA_List_AutoLineHeight
(V20) [ISG], BOOL, 0x8042bc08
DESCRIPTION
Set to TRUE to make List calculate line height automatically for multi-line entries. Entries will be same height. Set to TRUE again to force re-calculating heights after content changes to allow shrinking the height
SEE ALSO
MUIA_List_AutoVisible
(V11) [ISG], BOOL, 0x8042a445
DESCRIPTION
Set this to make your lists automatically jump to the active entry when they are displayed
SEE ALSO
MUIA_List_ClickColumn
(V7 ) [.SG], LONG, 0x8042d1b3
DESCRIPTION
yet undocumented, please complain in mailinglist
MUIA_List_ColumnOrder
(V20) [.SG], BYTE*, 0x9d5100f6
DESCRIPTION
yet undocumented, please complain in mailinglist
MUIA_List_CompareHook
(V4 ) [IS.], struct Hook *, 0x80425c14
DESCRIPTION
If you plan to have the entries of your list sorted (either by inserting them sorted or by using the MUIM_List_Sort method) and if the entries of your list are not simple strings, you *must* supply a compare hook. This hook will be called with one list element in A1 and another one in A2. You should return something like <0 e1 < e2 0 e1 == e2 >0 e1 > e2 There are following builtin compare hooks available: - MUIV_List_CompareHook_String (or NULL) Compare strings in single column list. - MUIV_List_CompareHook_StringArray Compare an array of strings in multicolumn list using a column number from MUIA_List_SortColumn
EXAMPLE
/* the builtin string compare function */
LONG __asm cmpfunc(_a1 char *s1,_a2 char *s2)
{
return(stricmp(s1,s2
SPECIAL INPUTS
MUIV_List_CompareHook_String MUIV_List_CompareHook_StringArray
SEE ALSO
MUIA_List_ConstructHook
(V4 ) [IS.], struct Hook *, 0x8042894f
DESCRIPTION
The construct hook is called whenever you add an entry to your list. MUI will not insert the given pointer directly, but instead call the construct hook and add its result code. Imagine you want to display a list of entries in a directory. You could step through it using Examine()/ExNext() and directly use the MUIM_List_Insert method on your file info block buffer. Your construct hook will be called with this file info block as parameter, makes a copy of it and returns the address of that copy. Thats what is actually added to the list. The corresponding destruct hook is called whenever an entry shall be removed. It's task would simply be to free the memory and maybe other resources concering this entry that were allocated by the construct hook. Using these two functions, you will never have to worry about freeing the memory used by your list entries. Clearing the list or disposing the list object will automatically remove all entries and thus free the associated resources. The construct hook will be called with the hook in A0, the data given to MUIM_List_Insert as message in register A1 and with pointer to a standard kick 3.x memory pool in A2. If you want, you can use the exec or amiga.lib functions for allocating memory within this pool, but this is only an option. If the construct hook returns NULL, nothing will be added to the list. There are following builtin construct hooks available: - MUIV_List_ConstructHook_String (CONST_STRPTR) This expects that you only add strings to your list and will make a local copy of this string to allow you destroying the original. Of course you *must* also use MUIV_List_DestructHook_String in this case. - MUIV_List_ConstructHook_StringArray (CONST_STRPTR *) Pass an array of strings. Array and its contents are copied to an internal buffer to allow you destroying the original. This is useful for multicolumn lists. You must also use MUIV_List_DestructHook_StringArray. Without construct and destruct hooks, you are responsible for allocating and freeing entries yourself or overload MUIM_List_Construct/MUIM_List_Destruct methods
EXAMPLE
/* the builtin string construct and destruct functions. */ /* used when MUIV_List_ConstructHook_String is given */ APTR __asm consfunc(_a2 APTR pool,_a1 char *str) { char *new; if (new=AllocPooled(pool,strlen(str)+1)) strcpy(new,str); return(new); } VOID __asm desfunc(_a2 APTR pool,_a1 char *entry) { FreePooled(pool,entry,strlen(entry)+1); } /* for more sophisticated hooks see demo program WbMan.c
SPECIAL INPUTS
MUIV_List_ConstructHook_String MUIV_List_ConstructHook_StringArray
SEE ALSO
MUIA_List_DefClickColumn
(V7 ) [ISG], LONG, 0x8042b296
DESCRIPTION
yet undocumented, please complain in mailinglist
MUIA_List_DestructHook
(V4 ) [IS.], struct Hook *, 0x804297ce
DESCRIPTION
Set up a destruct hook for your list. For detailed explanation see MUIA_List_ConstructHook
SPECIAL INPUTS
MUIV_List_DestructHook_String MUIV_List_DestructHook_StringArray
SEE ALSO
MUIA_List_DisplayHook
(V4 ) [IS.], struct Hook *, 0x8042b4d5
DESCRIPTION
Since MUI's lists can handle any kind of entries, you have to supply a display hook to specify what should actually be shown in the display. The hook will be called with a pointer to the entry to be displayed in A1 and a pointer to a string array containing as many entries as your list may have columns in A2. You must fill this array with the strings that you want to display. Note: You can of course use MUI's text engine facilities here to create e.g. right aligned or centered columns. Without a display hook, MUI expects a simple one columned string list. See MUIA_List_Format for details about column handling. Note: Since version 6 of MUI, the display hook also gets the position of the current entry as additional parameter. You can easily do e.g. some line numbering using this feature. The number (from 0 to NumEntries-1) is stored in the longword *preceding* the column array (see example below). There are following builtin display hooks available: - MUIV_List_DisplayHook_String (or NULL) Display strings in single column list. - MUIV_List_DisplayHook_StringArray Display an array of strings in multicolumn list
EXAMPLE
/* list of file info blocks, two columned, name and size */ LONG __asm dispfunc(_a2 char **array,_a1 struct FileInfoBlock *fib) { static char buf1[20],buf2[20]; if (fib->fib_EntryType<0) sprintf(buf2,"\33r%ld",fib->fib_Size); else strcpy(buf2,"\33r(dir)"); sprintf(buf1,"%ld",array[-1]); // get the line number. *array++ = buf1; *array++ = fib->fib_FileName; *array = buf2; return(0
SPECIAL INPUTS
MUIV_List_DisplayHook_String MUIV_List_DisplayHook_StringArray
SEE ALSO
MUIA_List_DoubleClick
(V4 ) [ISG], BOOL, 0x80424635
DESCRIPTION
yet undocumented, please complain in mailinglist
MUIA_List_DragSortable
(V11) [ISG], BOOL, 0x80426099
DESCRIPTION
If you set this attribute to TRUE, the user will be able to move around entries in the list by using drag&drop
MUIA_List_DragType
(V11) [ISG], LONG, 0x80425cd3
DESCRIPTION
yet undocumented, please complain in mailinglist
SPECIAL INPUTS
MUIV_List_DragType_None MUIV_List_DragType_Immediate
MUIA_List_DropMark
(V11) [..G], LONG, 0x8042aba6
DESCRIPTION
After a successfull drop operation, this attribute holds the position where we should insert the new entry(ies
EXAMPLE
See DragnDrop example program
MUIA_List_Editable
(V21) [ISG], BOOL, 0x8042f9b9
DESCRIPTION
Allow user to enter the edit mode
SEE ALSO
MUIA_List_Entries
(V4 ) [..G], LONG, 0x80421654
DESCRIPTION
Get the current number of entries in the list
SEE ALSO
MUIA_List_First
(V4 ) [.SG], LONG, 0x804238d4
DESCRIPTION
Get the number of the entry displayed on top of the list. You have to be prepared to get a result of -1, which means that the list is not visible at all (e.g. when the window is iconifed
SEE ALSO
MUIA_List_Format
(V4 ) [ISG], STRPTR, 0x80423c0a
DESCRIPTION
MUI has the ability to handle multi column lists. To define how many columns should be displayed and how they should be formatted, you specify a format string. This format string must contain one entry for each column you want to see. Entries are separated by commas, each single entry is parsed via dos.library/ReadArgs(). The template for a single entry looks like this: DELTA=D/N,PREPARSE=P/K,WEIGHT=W/N, MINWIDTH=MIW/N,MAXWIDTH=MAW/N,COL=C/N,BAR/S, SORTABLE/S,O=ORDER/K
NOTES
By the default there is 64 columns for a list unless you have used MUIA_List_MaxColumns attribute to specify more/less columns.
EXAMPLE
/* Three column list without further formatting: */ MUIA_List_Format: ",," /* Three column list, middle column centered: */ MUIA_List_Format: ",P=\33c," /* Three column list, display order 2 1 0: */ MUIA_List_Format: "COL=2,COL=1,COL=0" /* now something more complex. */ /* the display hook defines six entries: */ dispfunc(struct Hook *h, char **array, struct Article *at) { *array++ = at->FromName; // col 0 *array++ = at->FromPath; // col 1 *array++ = at->ToName; // col 2 *array++ = at->ToPath; // col 3 *array++ = at->Date; // col 4 *array = at->Subject; // col 5 } /* but we only want to have fromname, date and subject /* actually displayed, subject shoud be centered: */ MUIA_List_Format, "COL=0,COL=4,COL=5 P=\33c" /* maybe this looks kind of silly, why not make our */ /* display hook only fill in these three columns. */ /* well, if you would e.g. make the format string */ /* user configurable and document what your display */ /* hook puts into the array, the user could decide */ /* what columns he actually wants to see. */ /* The supplied example DFView does something like */ /* that. */ /* two column list: ! Eye 1234 ! ! Foot 22 ! ! Nose 22331 ! */ MUIA_List_Format, "MAW=100,P=\33r
BAR
Since muimaster.library V11, you can enable a vertical bar between this and the next column by using this switch.
COL
Set number of the current column. This allows you to adjust the order of your columns without having to change your display hook. See example for details. Defaults to current entry number (0,1,...)
DELTA
Space in pixel between this column and the next. the last displayed column ignores this setting. Defaults to 4.
MAXWIDTH
Maximum percentage width for the current column. If your list is 200 pixel wide and you set this to 25, your column will not be wider than 50 pixel. The special value -1 for this parameter means that the maximum width is as wide as the widest entry in this column. Defaults to -1. NEW: starting from MorphOS 3.10 it is possible set maximum width in pixels. MAXWIDTH=50px sets maximum width to 50 pixels.
MINWIDTH
Minimum percentage width for the current column. If your list is 200 pixel wide and you set this to 25, your column will at least be 50 pixel. The special value -1 for this parameter means that the minimum width is as wide as the widest entry in this column. This ensures that every entry will be completely visible (as long as the list is wide enough). Defaults to -1. NEW: starting from MorphOS 3.10 it is possible set minimum width in pixels: MINWIDTH=50px sets minimum width to 50 pixels.
ORDER
Set sorting order to ascending or descending.
Possible values are ASC or ASCENDING and DESC
or DESCENDING. Defaults to ascending order. (V21)
If your list object gets so small that there is not
enough place for the minwidth of a column, this column
will be hidden completely and the remaining space is
distributed between the remaining columns. This is not
true if the column is the first column, in this case
the entries will simply be clipped.
Note: You will have as many columns in your list as
entries in the format string (i.e. number of
commas + 1). Empty entries, e.g. with a format
string of ",,,," are perfectly ok.
The default list format is an empty string (""), this
means a one column list without special formatting.
PREPARSE
A preparse value for this column. Setting this e.g. to "\33c" would make the column centered. See MUIA_Text_Contents for other control codes.
SORTABLE
When set user can reorder the list by this column when he clicks the title. (V21)
WEIGHT
The weight of the column. As with MUI's group class, columns are layouted with a minimum size, a maximum size and weight. A column with a weight of 200 would gain twice the space than a column with a weight of 100. Defaults to 100.
SEE ALSO
MUIA_List_HideColumn
(V21) [IS.], LONG, 0x80428052
DESCRIPTION
yet undocumented, please complain in mailinglist
MUIA_List_HScrollerVisibility
(V20) [I..], LONG, 0x804280a6
DESCRIPTION
yet undocumented, please complain in mailinglist
SPECIAL INPUTS
MUIV_List_HScrollerVisibility_Always MUIV_List_HScrollerVisibility_Never MUIV_List_HScrollerVisibility_Auto
MUIA_List_Input
(V4 ) [I..], BOOL, 0x8042682d
DESCRIPTION
yet undocumented, please complain in mailinglist
MUIA_List_InsertPosition
(V9 ) [..G], LONG, 0x8042d0cd
DESCRIPTION
After insertion of an element with MUIM_List_Insert, you can query the position of the new entry by getting this attribute
MUIA_List_LineHeight
(V20) [..G], ULONG, 0x80425880
DESCRIPTION
yet undocumented, please complain in mailinglist
MUIA_List_MaxColumns
(V21) [I..], LONG, 0x8042a98b
DESCRIPTION
Specify a maximum number of columns for the current list
NOTES
At the moment you should not specify more than 256 columns.
SEE ALSO
MUIA_List_MinLineHeight
(V4 ) [I..], LONG, 0x8042d1c3
DESCRIPTION
Sets the minimum line height for lists in pixels. Useful e.g. if you have custom images
MUIA_List_MultiSelect
(V7 ) [I..], LONG, 0x80427e08
DESCRIPTION
yet undocumented, please complain in mailinglist
SPECIAL INPUTS
MUIV_List_MultiSelect_None MUIV_List_MultiSelect_Default MUIV_List_MultiSelect_Shifted MUIV_List_MultiSelect_Always
MUIA_List_MultiTestHook
(V4 ) [IS.], struct Hook *, 0x8042c2c6
DESCRIPTION
If you plan to have a multi selecting list but not all of your entries are actually multi selectable (e.g. in a file requester), you can supply a MUIA_List_MultiTestHook. It will be called with a pointer to an entry in A1 and should return TRUE if the entry is multi selectable, FALSE otherwise
EXAMPLE
/* multi test func for a list of file info blocks */ LONG __asm mtfunc(_a1 struct FileInfoBlock *fib) { if (fib->fib_DirEntryType<0) return(TRUE); else return(FALSE
SEE ALSO
MUIA_List_Pool
(V13) [I.G], APTR, 0x80423431
DESCRIPTION
Pass something from CreatePool() here if you dont want the list to create its own memory pool but use this one instead. Note that list class does *not* use semaphore protection when accessing the pool, you must *not* use pools which are accessed from different tasks than the applications main task
SEE ALSO
MUIA_List_PoolPuddleSize
(V13) [I..], ULONG, 0x8042a4eb
DESCRIPTION
Specify the puddle size for the lists memory pool. Defaults to 2008. Is ignored if you specify your own pool with MUIA_List_Pool
SEE ALSO
MUIA_List_PoolThreshSize
(V13) [I..], ULONG, 0x8042c48c
DESCRIPTION
Specify the thresh size for the lists memory pool. Defaults to 1024. Is ignored if you specify your own pool with MUIA_List_Pool
SEE ALSO
MUIA_List_Quiet
(V4 ) [.SG], BOOL, 0x8042d8c7
DESCRIPTION
If you add/remove lots of entries to/from a currently visible list, this will cause lots of screen action and slow down the operation. Setting MUIA_List_Quiet to true will temporarily prevent the list from being refreshed, this refresh will take place only once when you set it back to false again
EXAMPLE
set(list,MUIA_List_Quiet,TRUE); AddThousandEntries(list); set(list,MUIA_List_Quiet,FALSE
SEE ALSO
MUIA_List_ScrollerPos
(V10) [I..], BOOL, 0x8042b1b4
DESCRIPTION
yet undocumented, please complain in mailinglist
SPECIAL INPUTS
MUIV_List_ScrollerPos_Default MUIV_List_ScrollerPos_Left MUIV_List_ScrollerPos_Right MUIV_List_ScrollerPos_None
MUIA_List_SelectChange
(V4 ) [..G], BOOL, 0x8042178f
DESCRIPTION
yet undocumented, please complain in mailinglist
MUIA_List_ShowColumn
(V21) [IS.], LONG, 0x8042c840
DESCRIPTION
yet undocumented, please complain in mailinglist
MUIA_List_ShowDropMarks
(V11) [ISG], BOOL, 0x8042c6f3
DESCRIPTION
If a list supports Drag & Drop, it usually indicates the place where a new line would be inserted with some horizontal lines. Showing this place doesnt make much sense if you dont care about the drop position anyway, e.g. because your list is always alphabetically sorted. You should set this attribute to FALSE in these cases
SEE ALSO
MUIA_List_SortColumn
(V21) [ISG], LONG, 0x8042cafb
DESCRIPTION
Set or get a column number used for sorting
SEE ALSO
MUIA_List_SourceArray
(V4 ) [I..], APTR, 0x8042c0a0
DESCRIPTION
The NULL terminated array given here is immediately inserted into the list after object creation time
EXAMPLE
static const char *KeyList[] =
{
"Cursor Up",
"Cursor Down",
"Cursor Left",
"Cursor Right",
NULL;
};
LV_Keys = ListviewObject,
MUIA_Listview_List, ListObject,
InputListFrame,
MUIA_List_AdjustWidth, TRUE,
MUIA_List_SourceArray, KeyList,
End,
End
MUIA_List_Stripes
(V21) [ISG], BOOL, 0x8042a308
DESCRIPTION
Set this to have every second row in the list appear in different color
MUIA_List_Title
(V6 ) [ISG], STRPTR, 0x80423e66
DESCRIPTION
Specify a title for the current list. The title is displayed at the very first line and doesn't scroll away when the list top position moves. Usually, the title is just a string. However, if you have a multi column list with a custom display hook and you want to have seperate titles for each of your columns, you can set this attribute to TRUE. In this case, whenever MUI feels that the list title has to be drawn, it will call your display hook with a NULL entry pointer. Your hook has to check for this NULL entry and fill the given string array with your column titles. Layout of the column titles follows the same rules as layout of the lists entries
EXAMPLE
/* display function for a multi columned file list with titles */ LONG DisplayFunc(struct Hook *hook, char **array, struct Entry *e) { struct Data *data = hook->h_Data; if (e) { *array++ = e->Name; *array++ = e->Size; *array++ = e->Date; *array++ = e->Time; *array++ = e->Flags; *array = e->Comment; } else { *array++ = "Name"; *array++ = "Size"; *array++ = "Date"; *array++ = "Time"; *array++ = "Flags"; *array = "Comment"; } return(0
SEE ALSO
MUIA_List_TitleArray
(V21) [ISG], STRPTR *, 0x80427d95
DESCRIPTION
Specify an array of title strings for the current list. The title is displayed at the very first line and doesn't scroll away when the list top position moves. This attribute overrides MUIA_List_Title. The display hook is not called to get list titles when this tag is used
NOTES
The array is copied to a private buffer but strings are not and must stay valid through object lifetime.
EXAMPLE
/* Set list titles */
CONST_STRPTR list_titles[] = { "#", "City", "Population" };
list = ListObject,
InputListFrame,
MUIA_List_MaxColumns, 3,
MUIA_List_TitleArray, list_titles,
End
SEE ALSO
MUIA_List_TitleClick
(V20) [.SG], LONG, 0x80422fd9
DESCRIPTION
yet undocumented, please complain in mailinglist
MUIA_List_TopPixel
(V4 ) [.SG], LONG, 0x80429df3
DESCRIPTION
yet undocumented, please complain in mailinglist
MUIA_List_TotalPixel
(V4 ) [..G], LONG, 0x8042a8f5
DESCRIPTION
yet undocumented, please complain in mailinglist
MUIA_List_Visible
(V4 ) [..G], LONG, 0x8042191f
DESCRIPTION
Get the current number of visible entries in the list. You have to be prepared to get a result of -1, which means that the list is not visible at all (e.g. when the window is iconifed
SEE ALSO
MUIA_List_VisiblePixel
(V4 ) [..G], LONG, 0x804273e9
DESCRIPTION
yet undocumented, please complain in mailinglist
MUIM_List_Clear
MUIM_List_Clear (V4 ) 0x8042ad89
SYNOPSIS
DoMethod(obj,MUIM_List_Clear);
DESCRIPTION
Clear the list, all entries are removed. If a destruct hook is set it will be called for every entry
SEE ALSO
MUIM_List_Compare
MUIM_List_Compare (V20) 0x80421b68
SYNOPSIS
DoMethod(obj,MUIM_List_Compare,APTR entry1, APTR entry2, ULONG column);
DESCRIPTION
This method is invoked when MUI is comparing columns
INPUTS
entry1 - pointer to the entry for comparison entry2 - pointer to the entry for comparison column - the column number to compare (MorphOS 3.10 and newer
RESULT
<0 entry1 < entry2 0 entry1 == entry2 >0 entry1 > entry2
EXAMPLE
/* Also see ListExample.c example code. */ ssize_t mListDisplay(struct IClass *cl, Boopsiobject *obj, struct MUIP_List_Compare *msg) { struct entry *p1 = msg->entry1; struct entry *p2 = msg->entry2; ssize_t rc = 0; switch (msg->column) { case 0: return Stricmp(p1->Name, p2->Name); case 1: return Stricmp(p1->Address, p2->Address); case 2: return Stricmp(p1->City, p2->City); case 3: rc = p1->DateStamp.ds_Days - p2->DateStamp.ds_Days; if (rc == 0) { rc = p1->DateStamp.ds_Minute - p2->DateStamp.ds_Minute; if (rc == 0) { rc = p1->DateStamp.ds_Tick - p2->DateStamp.ds_Tick; } } break; } return rc
SEE ALSO
MUIM_List_Construct
MUIM_List_Construct (V20) 0x8042d662
SYNOPSIS
DoMethod(obj,MUIM_List_Construct,APTR entry, APTR pool);
DESCRIPTION
This method is invoked whenever you add an entry to your list
INPUTS
entry - pointer to an entry as passed in MUIM_List_InsertSingle pool - memory pool you can use for memory allocations
RESULT
Pointer to new entry. If NULL, nothing will be added to the list
NOTES
MUIA_List_ConstructHook must be NULL.
EXAMPLE
/* Replacement for MUIV_List_ConstructHook_String callback hook. * Also see ListExample.c example code. */ APTR mListConstruct(struct IClass *cl, Boopsiobject *obj, struct MUIP_List_Construct *msg) { STRPTR str = msg->entry; STRPTR p = AllocPooled(msg->pool, strlen(str) + 1); if (p) { strcpy(p, str); } return p
SEE ALSO
MUIM_List_CreateEditObject
MUIM_List_CreateEditObject (V21) 0x804219ae
SYNOPSIS
DoMethod(obj,MUIM_List_CreateEditObject,LONG row, LONG column, APTR entry);
DESCRIPTION
Overload this method to create custom edit objects
INPUTS
row - row number column - column number entry - pointer to entry
EXAMPLE
/* Default MUI inline object */ LONG CreateInlineObject(struct IClass *cl, Boopsiobject *obj, struct MUIP_List_CreateInlineObject *msg) { return StringObject, MUIA_String_Contents, msg->entry, StringFrame, TAG_DONE
RETURN
Pointer to edit object or NULL to cancel editing.
SEE ALSO
MUIM_List_CreateImage
MUIM_List_CreateImage (V11) 0x80429804
SYNOPSIS
DoMethod(obj,MUIM_List_CreateImage,Boopsiobject *obj, ULONG flags);
DESCRIPTION
If you want to have custom images in a listview (e.g. like the little monitor icons in PSI), you should create them as Bitmap objects (or Bodychunk objects) in the setup method of your list class (use a subclass!). After that, pass the newly created object pointer to MUIM_List_CreateImage and use the result in your display hook with \33O[%08lx] where %08lx must be replaced by the pointer you got from MUIM_List_CreateImage. When your list is done (i.e. in the Cleanup method), kill your image with MUIM_List_DeleteImage and dispose your object
RESULT
The result you get is a black box pointer, it's not valid to assume anything about it. The only useful thing you can do is to include it in \33O[%08lx]. The result may be NULL in which case MUI was unable to create the image, but the \33O[] combination simply draws nothing when receiving a NULL so it shouldnt be considered an error
EXAMPLE
See ScreenList class in screen inspector source code psi.c
SEE ALSO
MUIM_List_DeleteImage
MUIM_List_DeleteImage (V11) 0x80420f58
SYNOPSIS
DoMethod(obj,MUIM_List_DeleteImage,APTR listimg);
DESCRIPTION
Delete the image pointer returned from MUIM_List_CreateImage
SEE ALSO
MUIM_List_Destruct
MUIM_List_Destruct (V20) 0x80427d51
SYNOPSIS
DoMethod(obj,MUIM_List_Destruct,APTR entry, APTR pool);
DESCRIPTION
This method is invoked whenever you an entry is removed from your list
INPUTS
entry - pointer to a removed entry pool - memory pool you can use for memory allocations
NOTES
MUIA_List_DestructHook must be NULL.
SEE ALSO
MUIM_List_Display
MUIM_List_Display (V20) 0x80425377
SYNOPSIS
DoMethod(obj,MUIM_List_Display,APTR entry, STRPTR *array, LONG row);
DESCRIPTION
This method is invoked when MUI is redrawing entries
INPUTS
entry - pointer to the entry to be displayed array - you fill this array with strings, one for each column row - current row number (MorphOS 3.10 and newer) If entry is NULL you are asked to fill in list titles if they were not passed with MUIA_List_TitleArray
EXAMPLE
/* Also see ListExample.c example code. */ size_t mListDisplay(struct IClass *cl, Boopsiobject *obj, struct MUIP_List_Display *msg) { STRPTR *p = msg->array; if (msg->entry == NULL) { p[0] = "Name"; p[1] = "Address"; p[2] = "City"; p[3] = "Added"; } else { struct entry *e = msg->entry; p[0] = e->Name; p[1] = e->Address; p[2] = e->City; p[3] = e->Time; } return 0
SEE ALSO
MUIM_List_Edit
MUIM_List_Edit (V21) 0x8042843d
SYNOPSIS
DoMethod(obj,MUIM_List_Edit,LONG row, LONG column);
DESCRIPTION
Enter the editing mode. In the custom class you should call DoSuperMethod() for entires allowed to edit. The class takes care of installing in-place editor object. Only one item can be in edit mode at the same time
INPUTS
row - row number, or use MUIV_List_Edit_Active to edit currently active entry column - column number entry - pointer to entry
RETURN
TRUE if invoking in-place editing was successful, FALSE if editing was not possible.
SEE ALSO
MUIM_List_EditDone
MUIM_List_EditDone (V21) 0x80423ab3
SYNOPSIS
DoMethod(obj,MUIM_List_EditDone,LONG row, LONG column, APTR entry, Boopsiobject *editobj);
DESCRIPTION
This method is called when in-place editing is done
INPUTS
row - row number column - column number entry - pointer to entry editobj - edit object
RETURN
TRUE if the editor gadget can go FALSE if the user is not allowed to quit editing
SEE ALSO
MUIM_List_EndEdit
MUIM_List_EndEdit (V22) 0x804203ee
SYNOPSIS
DoMethod(obj,MUIM_List_EndEdit,ULONG mode);
DESCRIPTION
yet undocumented, please complain in mailinglist
MUIM_List_Exchange
MUIM_List_Exchange (V4 ) 0x8042468c
SYNOPSIS
DoMethod(obj,MUIM_List_Exchange,LONG pos1, LONG pos2);
DESCRIPTION
Exchange two entries in a list
INPUTS
pos1 - number of the first entry. pos2 - number of the second entry. Possible special values since muimaster.library V9: MUIV_List_Exchange_Top 0 MUIV_List_Exchange_Active -1 MUIV_List_Exchange_Bottom -2 MUIV_List_Exchange_Next -3 /* only valid for second parameter */ MUIV_List_Exchange_Previous -4 /* only valid for second parameter
SEE ALSO
MUIM_List_GetEntry
MUIM_List_GetEntry (V4 ) 0x804280ec
SYNOPSIS
DoMethod(obj,MUIM_List_GetEntry,LONG pos, APTR *entry);
DESCRIPTION
Get an entry of a list
INPUTS
pos - Number of entry, MUIV_List_GetEntry_Active can be used to get the active entry. entry - Pointer to a longword where the entry will be stored. If the entry is not available (either because you are out of bounds or because there is no active entry), you will receive a NULL
EXAMPLE
/* iterate through a list containing file info blocks */
for (i=0;;i++)
{
struct FileInfoBlock *fib;
DoMethod(list,MUIM_List_GetEntry,i,&fib);
if (!fib) break;
printf("%s\n",fib->fib_FileName
SEE ALSO
MUIM_List_Insert
MUIM_List_Insert (V4 ) 0x80426c87
SYNOPSIS
DoMethod(obj,MUIM_List_Insert,APTR *entries, LONG count, LONG pos);
DESCRIPTION
Insert new entries into a list. When the list has a construct hook, the given pointers won't be inserted directly but instead passed through to the construct hook
INPUTS
entries - pointer to an array of pointers to be inserted. Warning: This is a pointer to a pointer. See example for details. count - Number of elements to be inserted. If count==-1, entries will be inserted until NULL pointer in the entries array is found. pos - New entries will be added in front of this entry. MUIV_List_Insert_Top: insert as first entry. MUIV_List_Insert_Active: insert in front of the active entry. MUIV_List_Insert_Sorted: insert sorted. MUIV_List_Insert_Bottom: insert as last entry. If pos is bigger or equal to the number of entries in the list, it's treated like MUIV_List_Insert_Bottom
EXAMPLE
/* insert a string */ char *str = "New entry"; DoMethod(list,MUIM_List_Insert,&str,1,MUIV_List_Insert_Bottom); /* insert an array */ char *str[] = { "Entry 1", "Entry 2", "Entry 3", "Entry 4
NULL
}; DoMethod(list,MUIM_List_Insert,str,-1,MUIV_List_Insert_Bottom);
SEE ALSO
MUIM_List_InsertSingle
MUIM_List_InsertSingle (V7 ) 0x804254d5
SYNOPSIS
DoMethod(obj,MUIM_List_InsertSingle,APTR entry, LONG pos);
DESCRIPTION
Insert one new entry into a list. Using MUIM_List_Insert has caused some confusion since it takes an array to items instead a single item. To insert single items, MUIM_List_InsertSingle is the better choice. When the list has a construct hook, the given pointer won't be inserted directly but instead passed through to the construct hook
INPUTS
entry - item to insert. pos - New entry will be added in front of this entry. MUIV_List_Insert_Top: insert as first entry. MUIV_List_Insert_Active: insert in front of the active entry. MUIV_List_Insert_Sorted: insert sorted. MUIV_List_Insert_Bottom: insert as last entry. If pos is bigger or equal to the number of entries in the list, it's treated like MUIV_List_Insert_Bottom
EXAMPLE
/* insert a string */ DoMethod(list,MUIM_List_InsertSingle,"foobar",MUIV_List_Insert_Bottom
SEE ALSO
MUIM_List_Jump
MUIM_List_Jump (V4 ) 0x8042baab
SYNOPSIS
DoMethod(obj,MUIM_List_Jump,LONG pos);
DESCRIPTION
Scroll any entry into the visible part of a list. Note: Jumping to an entry doesn't mean to make this entry the active one. This can be done by setting the MUIA_List_Active attribute
INPUTS
pos - Number of the entry that should be made visible. Use MUIV_List_Jump_Active to jump to the active entry
EXAMPLE
/* line 42 is interesting, so make it visible */ DoMethod(list,MUIM_List_Jump,42
SEE ALSO
MUIM_List_Move
MUIM_List_Move (V9 ) 0x804253c2
SYNOPSIS
DoMethod(obj,MUIM_List_Move,LONG from, LONG to);
DESCRIPTION
Move an entry from one position to another
INPUTS
pos1 - number of the first entry. pos2 - number of the second entry. Possible special values since muimaster.library V9: MUIV_List_Move_Top 0 MUIV_List_Move_Active -1 MUIV_List_Move_Bottom -2 MUIV_List_Move_Next -3 /* only valid for second parameter */ MUIV_List_Move_Previous -4 /* only valid for second parameter
SEE ALSO
MUIM_List_NextSelected
MUIM_List_NextSelected (V6 ) 0x80425f17
SYNOPSIS
DoMethod(obj,MUIM_List_NextSelected,LONG *pos);
DESCRIPTION
Iterate through the selected entries of a list. This method steps through the contents of a (multi select) list and returns every entry that is currently selected. When no entry is selected but an entry is active, only the active entry will be returned. This behaviour will result in not returning the active entry when you have some other selected entries somewhere in your list. Since the active entry just acts as some kind of cursor mark, this seems to be the only sensible possibility to handle multi selection together with keyboard control
INPUTS
pos - a pointer to longword that will hold the number of the returned entry. Must be set to MUIV_List_NextSelected_Start at start of iteration. Is set to MUIV_List_NextSelected_End when iteration is finished
EXAMPLE
/* Iterate through a list with FileInfoBlocks */ struct FileInfoBlock *fib; LONG id = MUIV_List_NextSelected_Start; for (;;) { DoMethod(list,MUIM_List_NextSelected,&id); if (id==MUIV_List_NextSelected_End) break; DoMethod(list,MUIM_List_GetEntry,id,&fib); printf("selected: %s\n",fib->fib_FileName
SEE ALSO
MUIM_List_Redraw
MUIM_List_Redraw (V4 ) 0x80427993
SYNOPSIS
DoMethod(obj,MUIM_List_Redraw,LONG pos, APTR entry);
DESCRIPTION
If you made some changes to an entry of your list and want these changes to be shown in the display, you will have to call this method
INPUTS
pos - Number of the line to redraw. When the line is not currently visible, nothing will happen. Specials: MUIV_List_Redraw_Active: redraw the active line (if any), MUIV_List_Redraw_All: redraw all lines
EXAMPLE
/* do a complete refresh: */ DoMethod(list,MUIM_List_Redraw,MUIV_List_Redraw_All
MUIM_List_Remove
MUIM_List_Remove (V4 ) 0x8042647e
SYNOPSIS
DoMethod(obj,MUIM_List_Remove,LONG pos);
DESCRIPTION
Remove an entry from a list
INPUTS
pos - number of the entry to be removed or one of MUIV_List_Remove_First, MUIV_List_Remove_Active, MUIV_List_Remove_Last. MUIV_List_Remove_Selected. When the active entry is removed, the following entry will become active
EXAMPLE
/* when delete is pressed, remove the active entry */ DoMethod(btdel,MUIM_Notify,MUIA_Pressed,FALSE, list,2,MUIM_List_Remove,MUIV_List_Remove_Active
SEE ALSO
MUIM_List_Select
MUIM_List_Select (V4 ) 0x804252d8
SYNOPSIS
DoMethod(obj,MUIM_List_Select,LONG pos, LONG seltype, LONG *state);
DESCRIPTION
Select/deselect a list entry or ask an entry if its selected
INPUTS
pos - Number of the entry or MUIV_List_Select_Active for the active entry. MUIV_List_Select_All for all entries. seltype - MUIV_List_Select_Off unselect entry. MUIV_List_Select_On select entry. MUIV_List_Select_Toggle toggle entry. MUIV_List_Select_Ask just ask about the state. state - Pointer to a longword. If not NULL, this will be filled with the current selection state
NOTES
Since version V9 of muimaster.library: If pos==MUIV_List_Select_All and seltype==MUIV_List_Select_Ask, state will be filled with the total number of selected entries.
EXAMPLE
/* toggle selection state of active entry */ DoMethod(list,MUIM_List_Select,MUIV_List_Select_Active, MUIV_List_Select_Toggle,NULL); /* select all entries */ DoMethod(list,MUIM_List_Select,MUIV_List_Select_All, MUIV_List_Select_On,NULL
SEE ALSO
MUIM_List_Sort
MUIM_List_Sort (V4 ) 0x80422275
SYNOPSIS
DoMethod(obj,MUIM_List_Sort);
DESCRIPTION
Sort the list. MUI uses an iterative quicksort algorithm, no stack problems will occur
SEE ALSO
MUIM_List_SortEntries
MUIM_List_SortEntries (V21) 0x80429e32
SYNOPSIS
DoMethod(obj,MUIM_List_SortEntries,APTR *entries);
DESCRIPTION
yet undocumented, please complain in mailinglist
MUIM_List_TestPos
MUIM_List_TestPos (V11) 0x80425f48
SYNOPSIS
DoMethod(obj,MUIM_List_TestPos,LONG x, LONG y, struct MUI_List_TestPos_Result *res);
DESCRIPTION
Find out which line/column of a listview is currently displayed at a certain position