/*********************************************************************************************
 *                                                                                           *
 *                                                                                           *
 *   Copyright 1989-2018 by AutoDesSys, Inc.                                                 *
 *                                                                                           *
 *   This software and its associated documentation contains proprietary,                    *
 *   confidential, and trade secret information of AutoDesSys Inc. and may not be            *
 *   disclosed, copied in any form, or used for any purpose except as specifically           *
 *   permitted in writing by AutoDesSys, Inc.                                                *
 *                                                                                           *
 *   AutoDesSys, Inc. grants permission to use the software to those who purchase            *
 *   a license.  Such a usage will be made according to the terms and conditions             *
 *   specified in the license agreement to which a licensee agrees before installing         *
 *   and commencing usage of the software.  The license agreement can be found               *
 *   on the envelop that contains the software CD.                                           *
 *                                                                                           *
 *   AutoDesSys, Inc. also grants permission to licensees to develop extensions to           *
 *   the software, which can be in the form of scripts or plugins.  The permission           *
 *   includes calling the API and call back functions provided by AutoDesSys, Inc.           *
 *   and accessing information relevant to these functions and the general workings          *
 *   of form.Z, but only up to the point to which AutoDesSys, Inc. has chosen to             *
 *   expose, through its form.Z SDK Manual.  All extensions developed by third               *
 *   parties will include a copy of this copyright note in an easily accessible place or     *
 *   a clear instruction to read this original note by AutoDesSys, Inc.                      *
 *                                                                                           *
 *   All the software distributed under a license, either for the purpose of using it or     *
 *   for the purpose of developing extensions, is distributed AS IS, WITHOUT                 *
 *   WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, AND                                    *
 *   AutoDesSys, Inc. HEREBY DISCLAIMS ALL SUCH WARRANTIES,                                  *
 *   INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF                                         *
 *   MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.                                    *
 *                                                                                           *
 *   formZ, RenderZone, and RadioZity are registered trademarks of AutoDesSys, Inc.          *
 *                                                                                           *
 *   form.Z SDK, Version 8.6.3, Dec 03, 2018                                                 *
 *                                                                                           *
 *                                                                                           *
 *********************************************************************************************/


#ifndef _FZ_FUIM_LIST_API_
#define _FZ_FUIM_LIST_API_

#ifdef __cplusplus
extern "C" {
#endif


/****************************************************************

	Lists


	Description
		Functions for constructing and managing list items in templates.  List items present the user 
		with many choices in one list.  By registering callbacks with list items, one may further 
		customize how the list interacts with the users.
 ****************************************************************/

#include "fz_fuim_alrt_api.h"
#include "fz_fuim_api.h"

#include "fzpl_plugin.h"
#include "fz_type_api.h"

/****************************************************************

	fz_fuim_list_ptr


	Description
		Pointer to a data structure that holds information about a list.

	Availability	5.0.0.0

 ****************************************************************/
typedef struct fuim_list_td* fz_fuim_list_ptr;

/****************************************************************

	fz_fuim_list_type_enum


	Description
		Type of list. 
		These types determine how the list reacts as items are picked(selected).

	Members
		FZ_FUIM_LIST_TYPE_NONE
			No items are allowed to be picked. 
			Clicking on an item gives no visual indication, but this list type will allow 
			for click handling by setting the click callback function. 
			This list is for viewing only. 
			By default, if there is a title row, it is clickable. 
			By default, if there are multiple columns, the column dividers are clickable and moveable.
		FZ_FUIM_LIST_TYPE_ONE
			Only one item can be picked at a time. 
			Clicking on an item unpicks the old item and picks the new item. 
			One item is always picked.
		FZ_FUIM_LIST_TYPE_MULTI
			Multiple items can be selected. 
			Clicking on an item toggles its picked status. 
			Between zero and N items can be picked.
		FZ_FUIM_LIST_TYPE_SYSTEM
			This list simulates how the Operating System operates. 
			Shift-clicking will pick all items between the last picked item and 
			the currently clicked item. 
			Command-clicking (on Macintosh) and Control-clicking (on Windows) will toggle 
			the clicked items picked status. 
			Clicking and dragging over a range will pick that range.

	Availability	5.0.0.0


	See Also
		fz_fuim_new_list

 ****************************************************************/
typedef enum	fz_fuim_list_type_enum
{
	FZ_FUIM_LIST_TYPE_NONE = 0,
	FZ_FUIM_LIST_TYPE_ONE,
	FZ_FUIM_LIST_TYPE_MULTI,
	FZ_FUIM_LIST_TYPE_SYSTEM,
	FZ_FUIM_LIST_TYPE_MAX
}	fz_fuim_list_type_enum;

/****************************************************************

	fz_fuim_list_enum


	Description
		Bit flags that are used to change how lists are displayed. 
		These options can only be set when creating a list and can't be changed afterwards.

	Members
		FZ_FUIM_LIST_TITLE_BIT
			Indicates that a title row is to be drawn at the top of the list. 
			Default is for no title row to be drawn.
		FZ_FUIM_LIST_DRAG_BIT
			Indicates that dragging of rows is allowed. 
			Note : This only affects lists of type FZ_FUIM_LIST_TYPE_ONE and FZ_FUIM_LIST_TYPE_MULTI. 
			If this bit is set, the fz_fuim_list_drag_func callback should be defined.
		FZ_FUIM_LIST_DEFFONT2_BIT
			Use the second default font.
		FZ_FUIM_LIST_BG_LIST_BIT
			Indicates that the background of the list is to be drawn like a list. 
			Default is for the background to be drawn like the background of the 
			tab control if the list is in a tab control 
			pane or like the background of the dialog otherwise. 
			Note : This only affects lists of type FZ_FUIM_LIST_TYPE_NONE. 
			All other list types have their backgrounds drawn like a list.
		FZ_FUIM_LIST_H_DIVIDE_BIT
			Indicates that horizontal lines dividing rows are to be displayed. 
			Default is for there to be no divisions between rows. 
			Note : Unlike vertical divisions, horizontal divisions are for separation only 
			and can't be dragged.
		FZ_FUIM_LIST_AUTOSIZE_BIT
			Indicates that the horizontal size of the list and the individual columns will be auto-sized 
			to fit when the list is created. 
			Default is for the list to use the manually set values. 
			If the horizontal size of the list has been set to any value greater than 0 
			(the width parameter in fz_fuim_new_list) the size will not 
			be changed, but the individual columns will be resized to fit the list.
		FZ_FUIM_LIST_NO_V_DIVIDE_BIT
			Indicates that vertical lines dividing columns are not to be displayed. 
			Default is for there to be divisions between columns. 
			Note : If this bit is set, columns are unable to be resized by click-dragging.
		FZ_FUIM_LIST_TITLE_SIZE_BIT
			Indicates that the height of the title row is to be the same height as the other rows. 
			Default is for the title row to be just tall enough for the text to be drawn in.
		FZ_FUIM_LIST_NO_FRAME_BIT
			Indicates that the boarder of the list should not be drawn.
		FZ_FUIM_LIST_NO_SCROLL_BIT
			Indicates that the list will not be generated with a scroll bar.
		FZ_FUIM_LIST_NO_COLOR_LIST_BIT
			Indicates that the background of the list is not to be drawn with alternating colors per row. 
			The list is drawn with a white background.
		FZ_FUIM_LIST_HILITE_ROW_BIT
			Indicates that the row the mouse is over is hilighted.

	Availability	5.0.0.0


	See Also
		fz_fuim_new_list

 ****************************************************************/
typedef enum fz_fuim_list_enum
{	FZ_FUIM_LIST_TITLE_BIT = 0,
	FZ_FUIM_LIST_DRAG_BIT,
	FZ_FUIM_LIST_DEFFONT2_BIT,
	FZ_FUIM_LIST_BG_LIST_BIT,
	FZ_FUIM_LIST_H_DIVIDE_BIT,
	FZ_FUIM_LIST_AUTOSIZE_BIT,
	FZ_FUIM_LIST_NO_V_DIVIDE_BIT,
	FZ_FUIM_LIST_TITLE_SIZE_BIT,
	FZ_FUIM_LIST_NO_FRAME_BIT,
	FZ_FUIM_LIST_NO_SCROLL_BIT,
	FZ_FUIM_LIST_NO_COLOR_LIST_BIT,
	FZ_FUIM_LIST_HILITE_ROW_BIT,

	FZ_FUIM_LIST_MAX
}	fz_fuim_list_enum;

/****************************************************************

	fz_fuim_list_colm_enum


	Description
		Bit flags that are used to change how columns in a list are handled.

	Members
		FZ_FUIM_LIST_COLM_NO_TITLE_BIT
			Indicates that clicking in the title bar of the column isn't handled. 
			Default is for the column of the title bar that was clicked to be highlighted while the mouse is down 
			and for the click (or double-click) function called (if one is set). 
			If there is a title string, the last picked title will be underlined.
		FZ_FUIM_LIST_COLM_NO_DRAG_BIT
			Indicates that the divider line between the column and the column to the right can't be dragged around. 
			Note : Since there is no divider to the right of the far right column, this bit has no effect on that column.
		FZ_FUIM_LIST_COLM_NO_V_DIVIDE_BIT
			Indicates that the divider line between the column and the column to the right is not to be displayed. 
			Default is for there to be divisions between columns. 
			Note : If this bit is set, the column to the right is unable to be resized by click-dragging.

	Availability	5.0.0.0


	See Also
		fz_fuim_list_get_colm_flags, fz_fuim_list_set_colm_flags

 ****************************************************************/
typedef enum fz_fuim_list_colm_enum
{	FZ_FUIM_LIST_COLM_NO_TITLE_BIT = 0,
	FZ_FUIM_LIST_COLM_NO_DRAG_BIT,
	FZ_FUIM_LIST_COLM_NO_V_DIVIDE_BIT,

	FZ_FUIM_LIST_COLM_MAX
}	fz_fuim_list_colm_enum;

/****************************************************************

	fz_fuim_list_just_h_enum


	Description
		Sets the horizontal text justification of a column of text in a list. 
		Default justification is FZ_FUIM_LIST_COLM_JUST_H_LEFT.

	Members
		FZ_FUIM_LIST_COLM_JUST_H_LEFT
			Indicates that text is to be left justified.
		FZ_FUIM_LIST_COLM_JUST_H_CENTER
			Indicates that text is to be center justified.
		FZ_FUIM_LIST_COLM_JUST_H_RIGHT
			Indicates that text is to be right justified.
		FZ_FUIM_LIST_COLM_JUST_H_NO_CHANGE
			Indicates that text justification is not to be changed.

	Availability	5.0.0.0


	See Also
		fz_fuim_list_set_colm_just

 ****************************************************************/
typedef enum fz_fuim_list_just_h_enum
{	FZ_FUIM_LIST_COLM_JUST_H_LEFT = 0,
	FZ_FUIM_LIST_COLM_JUST_H_CENTER,
	FZ_FUIM_LIST_COLM_JUST_H_RIGHT,
	FZ_FUIM_LIST_COLM_JUST_H_NO_CHANGE,

	FZ_FUIM_LIST_COLM_JUST_H_MAX
}	fz_fuim_list_just_h_enum;

/****************************************************************

	fz_fuim_list_just_v_enum


	Description
		Sets the vertical text justification of a column of text in a list. 
		Default justification is FZ_FUIM_LIST_COLM_JUST_V_BOTTOM.

	Members
		FZ_FUIM_LIST_COLM_JUST_V_TOP
			Indicates that text is to be top justified.
		FZ_FUIM_LIST_COLM_JUST_V_CENTER
			Indicates that text is to be center justified.
		FZ_FUIM_LIST_COLM_JUST_V_BOTTOM
			Indicates that text is to be bottom justified.
		FZ_FUIM_LIST_COLM_JUST_V_NO_CHANGE
			Indicates that text justification is not to be changed.

	Availability	5.0.0.0


	See Also
		fz_fuim_list_set_colm_just

 ****************************************************************/
typedef enum fz_fuim_list_just_v_enum
{	FZ_FUIM_LIST_COLM_JUST_V_TOP = 0,
	FZ_FUIM_LIST_COLM_JUST_V_CENTER,
	FZ_FUIM_LIST_COLM_JUST_V_BOTTOM,
	FZ_FUIM_LIST_COLM_JUST_V_NO_CHANGE,

	FZ_FUIM_LIST_COLM_JUST_V_MAX
}	fz_fuim_list_just_v_enum;

/****************************************************************

	fz_fuim_list_get_string_func


	Description
		The list get string callback function. 
		This callback is designed to return the string in a specified row and column of a list. 
		The draw item callback function is called before this. 
		Both the draw item function and the get string function can be called for the same item. 
		If both functions exist for an item, the draw item is handled first followed by the get string. 
		In this case, the text will be drawn on top of the item. 
		row_indx is the index to the row item and will always be greater than or equal to 0 and less 
		than the number of items in the list. 
		col_indx is the index to the column and will always be greater than or equal to 0 and less 
		than the number of columns in the list. 
		max_len is the maximum length of str and str must not exceed max_len. 
		Return whether a string was found in did. 
		Strings in the title row are not handled by this callback but are instead retrieved 
		by calling fz_fuim_list_get_colm_title.

	Parameters
		fuim_tmpl  [Input]
			fuim manager
		list_ptr  [Input]
			list pointer
		row_indx  [Input]
			row index
		col_indx  [Input]
			column index
		str  [Result]
			string
		max_len  [Input]
			maximum length of string
		did  [Result]
			was a string found 
			TRUE if string was found, FALSE otherwise

	Returns
		Error codes


	Availability	5.0.0.0


	See Also
		fz_fuim_list_set_get_string_func, fz_fuim_list_get_colm_title

 ****************************************************************/
typedef fzrt_error_td	(*fz_fuim_list_get_string_func)(
	fz_fuim_tmpl_ptr					fuim_tmpl,
	fz_fuim_list_ptr					list_ptr,
	fzrt_int								row_indx,
	fzrt_int								col_indx,
	char								*str,
	fzrt_int								max_len,
	fzrt_boolean						*did
	);

/****************************************************************

	fz_fuim_list_draw_item_func


	Description
		The list draw item callback function. 
		This callback is designed to draw the item in a specified row and column of a list. 
		This is called before the get string callback function. 
		Both the draw item function and the get string function can be called for the same item. 
		If both functions exist for an item, the draw item is handled first followed by the get string. 
		In this case, the text will be drawn on top of the item. 
		Unlike the get string function, this callback can be used on the title row, 
		in which case row_indx will be passed as -1. 
		rect is the rectangle, in screen coordinates, of where the item should be drawn. 
		It is the responsibility of the draw function to only draw within the specified rectangle. 
		If the item drawn is smaller than the rectangle, the rectangle where the item was 
		drawn should be passed back through rect. 
		row_indx is the index to the row item and will always be greater than or equal to -1 and less 
		than the number of items in the list. 
		col_indx is the index to the column and will always be greater than or equal to 0 and less 
		than the number of columns in the list. 
		Return whether an item was drawn in did.

	Parameters
		fuim_tmpl  [Input]
			fuim manager
		list_ptr  [Input]
			list pointer
		row_indx  [Input]
			row index
		col_indx  [Input]
			column index
		rect  [Input, Result]
			rectangle of item to draw
		did  [Result]
			was an item drawn 
			TRUE if item was drawn, FALSE otherwise

	Returns
		Error codes


	Availability	5.0.0.0


	See Also
		fz_fuim_list_set_draw_item_func

 ****************************************************************/
typedef fzrt_error_td	(*fz_fuim_list_draw_item_func)(
	fz_fuim_tmpl_ptr					fuim_tmpl,
	fz_fuim_list_ptr					list_ptr,
	fzrt_int								row_indx,
	fzrt_int								col_indx,
	fzrt_rect							*rect,
	fzrt_boolean						*did
	);

/****************************************************************

	fz_fuim_list_click_func


	Description
		The list click callback function. 
		This callback is designed to allow handling of single mouse clicks in the list. 
		row_indx is the index to the row item and will always be greater than or equal to -1 and less 
		than the number of items in the list. 
		If row_indx is -1, the click occurred in the title row. 
		col_indx is the index to the column and will always be greater than or equal to 0 and less 
		than the number of columns in the list. 
		In lists of type FZ_FUIM_LIST_TYPE_ONE, the picked parameter is always TRUE. 
		In this list type, if a picked list is being maintained (i.e. the picked status callback is 
		defined), all other items in the list should be marked not-picked except the 
		one that is being handled. 
		In lists of type FZ_FUIM_LIST_TYPE_MULTI, the picked parameter will be TRUE to indicate 
		the row was toggled on, and FALSE to indicate the row was toggled off. 
		In lists of type FZ_FUIM_LIST_TYPE_SYSTEM, this callback function will be called whenever a 
		row is picked or unpicked. 
		For example, in shift-clicking a range, all rows in the range will be called with picked set to TRUE, 
		and any rows that were previously picked but not in the new range will be called with picked set to FALSE. 
		Note: Don't do any work in this callback that is of a time consuming nature since it is called 
		on each click. 
		This should mainly be used to update the state of other fuim items that are dependent on 
		the item that is selected in the list.

	Parameters
		fuim_tmpl  [Input]
			fuim manager
		list_ptr  [Input]
			list pointer
		row_indx  [Input]
			row index
		col_indx  [Input]
			column index
		picked  [Input]
			is the item picked 
			TRUE if picked, FALSE otherwise

	Returns
		Error codes


	Availability	5.0.0.0


	See Also
		fz_fuim_list_set_click_func

 ****************************************************************/
typedef fzrt_error_td	(*fz_fuim_list_click_func)(
	fz_fuim_tmpl_ptr					fuim_tmpl,
	fz_fuim_list_ptr					list_ptr,
	fzrt_int								row_indx,
	fzrt_int								col_indx,
	fzrt_boolean						picked
	);

/****************************************************************

	fz_fuim_list_click_dbl_func


	Description
		The list double-click callback function. 
		This callback is designed to allow handling of double mouse clicks in the list. 
		row_indx is the index to the row item and will always be greater than or equal to -1 and less 
		than the number of items in the list. 
		If row_indx is -1, the double-click occurred in the title row. 
		col_indx is the index to the column and will always be greater than or equal to 0 and less 
		than the number of columns in the list.

	Parameters
		fuim_tmpl  [Input]
			fuim manager
		list_ptr  [Input]
			list pointer
		row_indx  [Input]
			row index
		col_indx  [Input]
			column index

	Returns
		Error codes


	Availability	5.0.0.0


	See Also
		fz_fuim_list_set_click_dbl_func

 ****************************************************************/
typedef fzrt_error_td	(*fz_fuim_list_click_dbl_func)(
	fz_fuim_tmpl_ptr					fuim_tmpl,
	fz_fuim_list_ptr					list_ptr,
	fzrt_int								row_indx,
	fzrt_int								col_indx
	);

/****************************************************************

	fz_fuim_list_drag_func


	Description
		The list drag callback function. 
		This callback is designed to allow handling of mouse click drags in the list. 
		row_indx is the index to the row item where the drag started and will always be 
		greater than or equal to 0 and less than the number of items in the list. 
		row_dist is the number of rows the item was dragged. 
		Negative numbers indicate the item was dragged up. 
		Positive numbers indicate the item was dragged down. 
		This callback will not be called if an item is dragged to itself (i.e. row_dist will never be 0). 
		Return whether the move was successfully handled in did. If did isn't set, the move is assumed to 
		have been handled. 
		This callback is only valid on lists of type FZ_FUIM_LIST_TYPE_ONE and FZ_FUIM_LIST_TYPE_MULTI. 
		Drags in lists of type FZ_FUIM_LIST_TYPE_SYSTEM are handled with fz_fuim_list_click.

	Parameters
		fuim_tmpl  [Input]
			fuim manager
		list_ptr  [Input]
			list pointer
		row_indx  [Input]
			row index
		row_dist  [Input]
			number of rows moved. 
			negative numbers are up, positive numbers are down
		did  [Result, Optional]
			was the drag handled 
			TRUE if handled, FALSE otherwise

	Returns
		Error codes


	Availability	5.0.0.0


	See Also
		fz_fuim_list_enum, fz_fuim_list_set_drag_func

 ****************************************************************/
typedef fzrt_error_td	(*fz_fuim_list_drag_func)(
	fz_fuim_tmpl_ptr					fuim_tmpl,
	fz_fuim_list_ptr					list_ptr,
	fzrt_int								row_indx,
	fzrt_int								row_dist,
	fzrt_boolean						*did
	);

/****************************************************************

	fz_fuim_list_get_picked_func


	Description
		The list get picked status callback function. 
		This callback is designed to return whether a selected item is picked in the list. 
		This callback must be set in order for fz_fuim_list_regen to work. 
		A structure should be maintained that has the picked status of each row. 
		When this callback is called, the picked status for the selected row should be passed back in picked. 
		row_indx is the index to the row item and will always be greater than or equal to 0 and less 
		than the number of items in the list. 
		Note : Currently, the get picked callback will always be called with 0 for col_indx.

	Parameters
		fuim_tmpl  [Input]
			fuim manager
		list_ptr  [Input]
			list pointer
		row_indx  [Input]
			row index
		col_indx  [Input]
			column index
		picked  [Result]
			picked status 
			TRUE if picked, FALSE otherwise

	Returns
		Error codes


	Availability	5.0.0.0


	See Also
		fz_fuim_list_set_get_picked_func, fz_fuim_list_regen

 ****************************************************************/
typedef fzrt_error_td	(*fz_fuim_list_get_picked_func)(
	fz_fuim_tmpl_ptr					fuim_tmpl,
	fz_fuim_list_ptr					list_ptr,
	fzrt_int								row_indx,
	fzrt_int								col_indx,
	fzrt_boolean						*picked
	);

/****************************************************************

	fz_fuim_list_get_num_items_func


	Description
		The list get number of items callback function. 
		This callback is designed to return the number of items in the list. 
		This callback must be set in order for fz_fuim_list_regen to work.

	Parameters
		fuim_tmpl  [Input]
			fuim manager
		list_ptr  [Input]
			list pointer
		num_items  [Result]
			number of items in the list

	Returns
		Error codes


	Availability	5.0.0.0


	See Also
		fz_fuim_list_set_get_num_items_func, fz_fuim_list_regen

 ****************************************************************/
typedef fzrt_error_td	(*fz_fuim_list_get_num_items_func)(
	fz_fuim_tmpl_ptr					fuim_tmpl,
	fz_fuim_list_ptr					list_ptr,
	fzrt_int								*num_items
	);

/****************************************************************

	fz_fuim_list_init_func


	Description
		The list initialization callback function. 
		This callback is designed to be called during the initialization of the list. 
		It allows for any user defined data to be initialized as well as setting up the 
		list at startup.

	Parameters
		fuim_tmpl  [Input]
			fuim manager
		list_ptr  [Input]
			list pointer

	Returns
		Error codes


	Availability	5.0.0.0


	See Also
		fz_fuim_list_set_init_func

 ****************************************************************/
typedef fzrt_error_td	(*fz_fuim_list_init_func)(
	fz_fuim_tmpl_ptr					fuim_tmpl,
	fz_fuim_list_ptr					list_ptr
	);

/****************************************************************

	fz_fuim_list_finit_func


	Description
		The list finalization callback function. 
		This callback is designed to be called during the finalization of the list. 
		It allows for any user defined data to be finalized.

	Parameters
		fuim_tmpl  [Input]
			fuim manager
		list_ptr  [Input, Result]
			list pointer

	Returns
		Error codes


	Availability	5.0.0.0


	See Also
		fz_fuim_list_set_finit_func

 ****************************************************************/
typedef fzrt_error_td	(*fz_fuim_list_finit_func)(
	fz_fuim_tmpl_ptr					fuim_tmpl,
	fz_fuim_list_ptr					list_ptr
	);

/****************************************************************

	fz_fuim_list_click_edit_func


	Description
		The list click edit callback function. 
		This callback is designed to return whether the text in a selected cell is editable. 
		Both this callback and fz_fuim_list_set_string_func must be defined in order to 
		allow for strings to be edited in the list. 
		The click edit callback is called first, to verify if the selected cell can be edited. 
		If so, the user is able to edit the text. 
		When the user is done, the set string callback is called to update the text of the cell. 
		row_indx is the index to the row item and will always be greater than or equal to 0 and less 
		than the number of items in the list. 
		col_indx is the index to the column and will always be greater than or equal to 0 and less 
		than the number of columns in the list. 
		Return whether the text in the cell is editable in editable.

	Parameters
		fuim_tmpl  [Input]
			fuim manager
		list_ptr  [Input]
			list pointer
		row_indx  [Input]
			row index
		col_indx  [Input]
			column index
		editable  [Result]
			is the text editable 
			TRUE if editable, FALSE otherwise

	Returns
		Error codes


	Availability	5.0.0.0


	See Also
		fz_fuim_list_set_click_edit_func, fz_fuim_list_set_string_func

 ****************************************************************/
typedef fzrt_error_td	(*fz_fuim_list_click_edit_func)(
	fz_fuim_tmpl_ptr					fuim_tmpl,
	fz_fuim_list_ptr					list_ptr,
	fzrt_int								row_indx,
	fzrt_int								col_indx,
	fzrt_boolean						*editable
	);

/****************************************************************

	fz_fuim_list_set_string_func


	Description
		The list set string callback function. 
		This callback is designed to set the string in a specified row and column of a list. 
		Both this callback and fz_fuim_list_click_edit_func must be defined in order to 
		allow for strings to be edited in the list. 
		The click edit callback is called first, to verify if the selected cell can be edited. 
		If so, the user is able to edit the text. 
		When the user is done, the set string callback is called to update the text of the cell. 
		row_indx is the index to the row item and will always be greater than or equal to 0 and less 
		than the number of items in the list. 
		col_indx is the index to the column and will always be greater than or equal to 0 and less 
		than the number of columns in the list. 
		max_len is the maximum length of str and str must not exceed max_len. 
		Return whether the string was set in did. 
		Strings in the title row are not handled by this callback but are instead set 
		by calling fz_fuim_list_set_colm_title.

	Parameters
		fuim_tmpl  [Input]
			fuim manager
		list_ptr  [Input]
			list pointer
		row_indx  [Input]
			row index
		col_indx  [Input]
			column index
		str  [Input]
			string
		max_len  [Input]
			maximum length of string
		did  [Result]
			was the string set 
			TRUE if string was set, FALSE otherwise

	Returns
		Error codes


	Availability	5.0.0.0


	See Also
		fz_fuim_list_set_set_string_func, fz_fuim_list_click_edit_func, fz_fuim_list_set_colm_title

 ****************************************************************/
typedef fzrt_error_td	(*fz_fuim_list_set_string_func)(
	fz_fuim_tmpl_ptr					fuim_tmpl,
	fz_fuim_list_ptr					list_ptr,
	fzrt_int								row_indx,
	fzrt_int								col_indx,
	char								*str,
	fzrt_int								max_len,
	fzrt_boolean						*did
	);

/****************************************************************

	fz_fuim_list_set_colm_width



	Description
		Sets the width of a column in pixels. 
		The width is changed by the moving of the divider bar to the right of the column. 
		If the selected width is smaller than the minimum, the width will be set to the minimum. 
		If the selected width will make the column to the right smaller than its minimum, the width 
		will be set to the maximum it is allowed. 
		If the column has a title, the minimum is the width of the title. Otherwise, the minimum is a set 
		number of pixels. 
		The column farthest to the right can't have its width changed. 
		(If that column's width needs to be changed, change the width on the column to its left.) 
		This function has no effect on lists with one column.

	Parameters
		fuim_tmpl  [Input]
			fuim manager
		list_ptr  [Input]
			list pointer
		col_indx  [Input]
			column index
		width  [Input]
			width of column

	Returns
		Error codes


	Availability	5.0.0.0


	See Also
		fz_fuim_list_get_colm_width

 ****************************************************************/
typedef fzrt_error_td	(*fz_fuim_list_set_colm_width_func)(
	fz_fuim_tmpl_ptr					fuim_tmpl,
	fz_fuim_list_ptr					list_ptr,
	fzrt_int								col_indx,
	fzrt_int								width
	);

/****************************************************************

	fz_fuim_list_get_colm_width



	Description
		Gets the width of a column in pixels. 
		col_indx is the index to the column and must be greater than or equal to 0 and less 
		than the number of columns in the list. 
		width is returned as the width of the specified column is pixels.

	Parameters
		fuim_tmpl  [Input]
			fuim manager
		list_ptr  [Input]
			list pointer
		col_indx  [Input]
			column index
			Range: 0
		width  [Result]
			width of column

	Returns
		Error codes


	Availability	5.0.0.0


	See Also
		fz_fuim_list_set_colm_width

 ****************************************************************/
typedef fzrt_error_td	(*fz_fuim_list_get_colm_width_func)(
	fz_fuim_tmpl_ptr					fuim_tmpl,
	fz_fuim_list_ptr					list_ptr,
	fzrt_int								col_indx,
	fzrt_int								*width
	);

/****************************************************************

	fz_fuim_list_set_colm_title



	Description
		Sets the title of a column. 
		col_indx is the index to the column and must be greater than or equal to 0 and less 
		than the number of columns in the list. 
		If title_str is passed as NULL or the empty string, the specified column title will be empty. 
		By defaut, all column titles are empty.

	Parameters
		fuim_tmpl  [Input]
			fuim manager
		list_ptr  [Input]
			list pointer
		col_indx  [Input]
			column index
			Range: 0
		title_str  [Input, Optional]
			column title

	Returns
		Error codes


	Availability	5.0.0.0


	See Also
		fz_fuim_list_get_colm_title

 ****************************************************************/
typedef fzrt_error_td	(*fz_fuim_list_set_colm_title_func)(
	fz_fuim_tmpl_ptr					fuim_tmpl,
	fz_fuim_list_ptr					list_ptr,
	fzrt_int								col_indx,
	char								*title_str
	);

/****************************************************************

	fz_fuim_list_get_colm_title



	Description
		Gets the title of a column. 
		col_indx is the index to the column and must be greater than or equal to 0 and less 
		than the number of columns in the list. 
		title_str must be preallocated to hold at least max_len number of characters.

	Parameters
		fuim_tmpl  [Input]
			fuim manager
		list_ptr  [Input]
			list pointer
		col_indx  [Input]
			column index
			Range: 0
		title_str  [Result]
			column title
		max_len  [Input, Optional]
			the maximum length of the string to be returned. 
			This cannot exceed the length that title_str was allocated to

	Returns
		Error codes


	Availability	5.0.0.0


	See Also
		fz_fuim_list_set_colm_title

 ****************************************************************/
typedef fzrt_error_td	(*fz_fuim_list_get_colm_title_func)(
	fz_fuim_tmpl_ptr					fuim_tmpl,
	fz_fuim_list_ptr					list_ptr,
	fzrt_int								col_indx,
	char								*title_str,
	fzrt_int								*max_len
	);

/****************************************************************

	fz_fuim_list_set_colm_flags



	Description
		Sets flags of a column. 
		col_indx is the index to the column and must be greater than or equal to 0 and less 
		than the number of columns in the list. 
		If flags is passed as 0, no flags will be set and any previously set flags on the 
		column will be cleared.

	Parameters
		fuim_tmpl  [Input]
			fuim manager
		list_ptr  [Input]
			list pointer
		col_indx  [Input]
			column index
			Range: 0
		flags  [Input]
			column flags
			Bit Flag Type: fz_fuim_list_colm_enum

	Returns
		Error codes


	Availability	5.0.0.0

 ****************************************************************/
typedef fzrt_error_td	(*fz_fuim_list_set_colm_flags_func)(
	fz_fuim_tmpl_ptr					fuim_tmpl,
	fz_fuim_list_ptr					list_ptr,
	fzrt_int								col_indx,
	fzrt_int								flags
	);

/****************************************************************

	fz_fuim_list_get_colm_flags



	Description
		Gets flags of a column. 
		col_indx is the index to the column and must be greater than or equal to 0 and less 
		than the number of columns in the list.

	Parameters
		fuim_tmpl  [Input]
			fuim manager
		list_ptr  [Input]
			list pointer
		col_indx  [Input]
			column index
			Range: 0
		flags  [Result]
			column flags
			Bit Flag Type: fz_fuim_list_colm_enum

	Returns
		Error codes


	Availability	5.0.0.0

 ****************************************************************/
typedef fzrt_error_td	(*fz_fuim_list_get_colm_flags_func)(
	fz_fuim_tmpl_ptr					fuim_tmpl,
	fz_fuim_list_ptr					list_ptr,
	fzrt_int								col_indx,
	fzrt_int								*flags
	);

/****************************************************************

	fz_fuim_list_set_colm_just



	Description
		Sets text justification of a column. 
		col_indx is the index to the column and must be greater than or equal to 0 and less 
		than the number of columns in the list. 
		Pass FZ_FUIM_LIST_COLM_JUST_H_NO_CHANGE and FZ_FUIM_LIST_COLM_JUST_V_NO_CHANGE to 
		not change the horizontal and vertical justification, respectively.

	Parameters
		fuim_tmpl  [Input]
			fuim manager
		list_ptr  [Input]
			list pointer
		col_indx  [Input]
			column index
			Range: 0
		just_h  [Input]
			horizontal text justification.
		just_v  [Input]
			vertical text justification.

	Returns
		Error codes


	Availability	5.0.0.0

 ****************************************************************/
typedef fzrt_error_td	(*fz_fuim_list_set_colm_just_func)(
	fz_fuim_tmpl_ptr					fuim_tmpl,
	fz_fuim_list_ptr					list_ptr,
	fzrt_int								col_indx,
	fz_fuim_list_just_h_enum			just_h,
	fz_fuim_list_just_v_enum			just_v
	);

/****************************************************************

	fz_fuim_new_list



	Description
		Creates a list. 
		This must be called first when creating a list. 
		Pass FZ_FUIM_ROOT for parent if there is no parent group. 
		Pass FZ_FUIM_NONE for item_id to not assign a specific list item id. 
		An id will be created and assigned to the group and returned. 
		list_type describes how the list will handle clicks. 
		width is the width of the list in pixels. 
		num_rows is the number of rows to be displayed in the list. 
		If there is a title bar, it is not counted towards the number of rows. 
		num_cols is the number of columns to be displayed in the list. 
		row_height sets the height of the rows in pixels. 
		To set the row heights to be just large enough for the text items, pass -1 for 
		row_height. 
		list_ptr returns a pointer to the list structure. 
		list_ptr should be saved to allow for any future calls on the list. 
		Both the row and column indices are 0 based. 
		If there is a title row, it is -1.

	Parameters
		fuim_tmpl  [Input]
			fuim manager
		parent  [Input]
			parent group
		id  [Input]
			list item id
		list_type  [Input]
			list type
		list_flags  [Input]
			list flags
			Bit Flag Type: fz_fuim_list_enum
		width  [Input]
			list width
			Range: 0
		num_rows  [Input]
			number of rows
			Range: 0
		num_cols  [Input]
			number of columns
			Range: 0
		row_height  [Input]
			height of a row
			Range: 0  -1
		list_ptr  [Result]
			list pointer

	Returns
		List id


	Availability	5.0.0.0

 ****************************************************************/
typedef fzrt_int			(*fz_fuim_new_list_func)(
	fz_fuim_tmpl_ptr					fuim_tmpl,
	fzrt_int								parent,
	fzrt_int								id,
	fz_fuim_list_type_enum				list_type,
	fzrt_int								list_flags,
	fzrt_int								width,
	fzrt_int								num_rows,
	fzrt_int								num_cols,
	fzrt_int								row_height,
	fz_fuim_list_ptr					*list_ptr
	);

/****************************************************************

	fz_fuim_list_get_nitems



	Description
		Gets the number of items in a list.

	Parameters
		fuim_tmpl  [Input]
			fuim manager
		list_ptr  [Input]
			list pointer
		num_items  [Result]
			number of items

	Returns
		Error codes


	Availability	5.0.0.0

 ****************************************************************/
typedef fzrt_error_td	(*fz_fuim_list_get_nitems_func)(
	fz_fuim_tmpl_ptr					fuim_tmpl,
	fz_fuim_list_ptr					list_ptr,
	fzrt_int								*num_items
	);

/****************************************************************

	fz_fuim_list_set_auto_scroll



	Description
		Sets the auto-scroll status of a list. 
		When auto-scroll is set, at least one picked item in the list is always viewable. 
		If none of the current items in the list are picked, the list will auto-scroll to the 
		first picked item. 
		If there are no picked items in the list, nothing happens.

	Parameters
		fuim_tmpl  [Input]
			fuim manager
		list_ptr  [Input]
			list pointer
		auto_scroll  [Input]
			auto-scroll. 
			TRUE if auto-scroll is on, FALSE otherwise

	Returns
		Error codes


	Availability	5.0.0.0


	See Also
		fz_fuim_list_get_auto_scroll

 ****************************************************************/
typedef fzrt_error_td	(*fz_fuim_list_set_auto_scroll_func)(
	fz_fuim_tmpl_ptr					fuim_tmpl,
	fz_fuim_list_ptr					list_ptr,
	fzrt_boolean						auto_scroll
	);

/****************************************************************

	fz_fuim_list_get_auto_scroll



	Description
		Gets the auto-scroll status of a list.

	Parameters
		fuim_tmpl  [Input]
			fuim manager
		list_ptr  [Input]
			list pointer
		auto_scroll  [Result]
			auto-scroll. 
			TRUE if auto-scroll is on, FALSE otherwise

	Returns
		Error codes


	Availability	5.0.0.0


	See Also
		fz_fuim_list_set_auto_scroll

 ****************************************************************/
typedef fzrt_error_td	(*fz_fuim_list_get_auto_scroll_func)(
	fz_fuim_tmpl_ptr					fuim_tmpl,
	fz_fuim_list_ptr					list_ptr,
	fzrt_boolean						*auto_scroll
	);

/****************************************************************

	fz_fuim_list_regen



	Description
		Regenerates a list. 
		This is only useful if the fz_fuim_list_get_num_items_func and 
		fz_fuim_list_get_picked_func callback functions have been set. 
		The regen function retrieves the number of items in the list and 
		re-checks each picked status.

	Parameters
		fuim_tmpl  [Input]
			fuim manager
		list_ptr  [Input]
			list pointer

	Returns
		Error codes


	Availability	5.0.0.0


	See Also
		fz_fuim_list_set_get_num_items_func, fz_fuim_list_get_num_items_func, 
		fz_fuim_list_set_get_picked_func, fz_fuim_list_get_picked_func

 ****************************************************************/
typedef fzrt_error_td	(*fz_fuim_list_regen_func)(
	fz_fuim_tmpl_ptr					fuim_tmpl,
	fz_fuim_list_ptr					list_ptr
	);

/****************************************************************

	fz_fuim_list_get_picked_status



	Description
		Retrieves the picked status of the specified row. 
		This function is different from the get picked callback function. 
		This function will retrieve the picked status of the item from the status stored in the list as 
		opposed to the callback which requires an externally maintained pick status. 
		row_indx is the index to the row item and will always be greater than or equal to 0 and less 
		than the number of items in the list. 
		col_indx is currently ignored. 
		The picked status for the selected row will be passed back in picked.

	Parameters
		fuim_tmpl  [Input]
			fuim manager
		list_ptr  [Input]
			list pointer
		row_indx  [Input]
			row index
			Range: 0
		col_indx  [Input]
			column index
		picked  [Result]
			picked status 
			TRUE if picked, FALSE otherwise

	Returns
		Error codes


	Availability	5.0.0.0

 ****************************************************************/
typedef fzrt_error_td	(*fz_fuim_list_get_picked_status_func)(
	fz_fuim_tmpl_ptr					fuim_tmpl,
	fz_fuim_list_ptr					list_ptr,
	fzrt_int								row_indx,
	fzrt_int								col_indx,
	fzrt_boolean						*picked
	);

/****************************************************************

	fz_fuim_list_inval



	Description
		Invalidates a list.

	Parameters
		fuim_tmpl  [Input]
			fuim manager
		list_ptr  [Input]
			list pointer

	Returns
		Error codes


	Availability	5.0.0.0

 ****************************************************************/
typedef fzrt_error_td	(*fz_fuim_list_inval_func)(
	fz_fuim_tmpl_ptr					fuim_tmpl,
	fz_fuim_list_ptr					list_ptr
	);

/****************************************************************

	fz_fuim_list_set_get_string_func



	Description
		Sets the "get string" callback function of a list.

	Parameters
		fuim_tmpl  [Input]
			fuim manager
		list_ptr  [Input]
			list pointer
		func  [Input]
			get string function

	Returns
		Error codes


	Availability	5.0.0.0


	See Also
		fz_fuim_list_get_string_func

 ****************************************************************/
typedef fzrt_error_td	(*fz_fuim_list_set_get_string_func_func)(
	fz_fuim_tmpl_ptr					fuim_tmpl,
	fz_fuim_list_ptr					list_ptr,
	fz_fuim_list_get_string_func		func
	);

/****************************************************************

	fz_fuim_list_set_draw_item_func



	Description
		Sets the "draw item" callback function of a list.

	Parameters
		fuim_tmpl  [Input]
			fuim manager
		list_ptr  [Input]
			list pointer
		func  [Input]
			draw item function

	Returns
		Error codes


	Availability	5.0.0.0


	See Also
		fz_fuim_list_draw_item_func

 ****************************************************************/
typedef fzrt_error_td	(*fz_fuim_list_set_draw_item_func_func)(
	fz_fuim_tmpl_ptr					fuim_tmpl,
	fz_fuim_list_ptr					list_ptr,
	fz_fuim_list_draw_item_func			func
	);

/****************************************************************

	fz_fuim_list_set_click_func



	Description
		Sets the "single-click" callback function of a list.

	Parameters
		fuim_tmpl  [Input]
			fuim manager
		list_ptr  [Input]
			list pointer
		func  [Input]
			click function

	Returns
		Error codes


	Availability	5.0.0.0


	See Also
		fz_fuim_list_click_func

 ****************************************************************/
typedef fzrt_error_td	(*fz_fuim_list_set_click_func_func)(
	fz_fuim_tmpl_ptr					fuim_tmpl,
	fz_fuim_list_ptr					list_ptr,
	fz_fuim_list_click_func				func
	);

/****************************************************************

	fz_fuim_list_set_click_dbl_func



	Description
		Sets the "double-click" callback function of a list.

	Parameters
		fuim_tmpl  [Input]
			fuim manager
		list_ptr  [Input]
			list pointer
		func  [Input]
			double-click function

	Returns
		Error codes


	Availability	5.0.0.0


	See Also
		fz_fuim_list_click_dbl_func

 ****************************************************************/
typedef fzrt_error_td	(*fz_fuim_list_set_click_dbl_func_func)(
	fz_fuim_tmpl_ptr					fuim_tmpl,
	fz_fuim_list_ptr					list_ptr,
	fz_fuim_list_click_dbl_func			func
	);

/****************************************************************

	fz_fuim_list_set_drag_func



	Description
		Sets the "drag" callback function of a list.

	Parameters
		fuim_tmpl  [Input]
			fuim manager
		list_ptr  [Input]
			list pointer
		func  [Input]
			drag function

	Returns
		Error codes


	Availability	5.0.0.0


	See Also
		fz_fuim_list_drag_func

 ****************************************************************/
typedef fzrt_error_td	(*fz_fuim_list_set_drag_func_func)(
	fz_fuim_tmpl_ptr					fuim_tmpl,
	fz_fuim_list_ptr					list_ptr,
	fz_fuim_list_drag_func				func
	);

/****************************************************************

	fz_fuim_list_set_get_picked_func



	Description
		Sets the "get picked status" callback function of a list.

	Parameters
		fuim_tmpl  [Input]
			fuim manager
		list_ptr  [Input]
			list pointer
		func  [Input]
			get picked status function

	Returns
		Error codes


	Availability	5.0.0.0


	See Also
		fz_fuim_list_get_picked_func

 ****************************************************************/
typedef fzrt_error_td	(*fz_fuim_list_set_get_picked_func_func)(
	fz_fuim_tmpl_ptr					fuim_tmpl,
	fz_fuim_list_ptr					list_ptr,
	fz_fuim_list_get_picked_func		func
	);

/****************************************************************

	fz_fuim_list_set_get_num_items_func



	Description
		Sets the "get number of items" callback function of a list.

	Parameters
		fuim_tmpl  [Input]
			fuim manager
		list_ptr  [Input]
			list pointer
		func  [Input]
			get number of items function

	Returns
		Error codes


	Availability	5.0.0.0


	See Also
		fz_fuim_list_get_num_items_func

 ****************************************************************/
typedef fzrt_error_td	(*fz_fuim_list_set_get_num_items_func_func)(
	fz_fuim_tmpl_ptr					fuim_tmpl,
	fz_fuim_list_ptr					list_ptr,
	fz_fuim_list_get_num_items_func		func
	);

/****************************************************************

	fz_fuim_list_set_init_func



	Description
		Sets the "initialization" callback function of a list.

	Parameters
		fuim_tmpl  [Input]
			fuim manager
		list_ptr  [Input]
			list pointer
		func  [Input]
			initialization function

	Returns
		Error codes


	Availability	5.0.0.0


	See Also
		fz_fuim_list_init_func

 ****************************************************************/
typedef fzrt_error_td	(*fz_fuim_list_set_init_func_func)(
	fz_fuim_tmpl_ptr					fuim_tmpl,
	fz_fuim_list_ptr					list_ptr,
	fz_fuim_list_init_func				func
	);

/****************************************************************

	fz_fuim_list_set_finit_func



	Description
		Sets the "finalization" callback function of a list.

	Parameters
		fuim_tmpl  [Input]
			fuim manager
		list_ptr  [Input]
			list pointer
		func  [Input]
			finalization function

	Returns
		Error codes


	Availability	5.0.0.0


	See Also
		fz_fuim_list_finit_func

 ****************************************************************/
typedef fzrt_error_td	(*fz_fuim_list_set_finit_func_func)(
	fz_fuim_tmpl_ptr					fuim_tmpl,
	fz_fuim_list_ptr					list_ptr,
	fz_fuim_list_finit_func				func
	);

/****************************************************************

	fz_fuim_list_set_click_edit_func



	Description
		Sets the "click edit" callback function of a list.

	Parameters
		fuim_tmpl  [Input]
			fuim manager
		list_ptr  [Input]
			list pointer
		func  [Input]
			click function

	Returns
		Error codes


	Availability	5.0.0.0


	See Also
		fz_fuim_list_click_edit_func

 ****************************************************************/
typedef fzrt_error_td	(*fz_fuim_list_set_click_edit_func_func)(
	fz_fuim_tmpl_ptr					fuim_tmpl,
	fz_fuim_list_ptr					list_ptr,
	fz_fuim_list_click_edit_func		func
	);

/****************************************************************

	fz_fuim_list_set_set_string_func



	Description
		Sets the "set string" callback function of a list.

	Parameters
		fuim_tmpl  [Input]
			fuim manager
		list_ptr  [Input]
			list pointer
		func  [Input]
			set string function

	Returns
		Error codes


	Availability	5.0.0.0


	See Also
		fz_fuim_list_set_string_func

 ****************************************************************/
typedef fzrt_error_td	(*fz_fuim_list_set_set_string_func_func)(
	fz_fuim_tmpl_ptr					fuim_tmpl,
	fz_fuim_list_ptr					list_ptr,
	fz_fuim_list_set_string_func		func
	);


#ifdef __cplusplus
}
#endif

#endif

