Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
AG_FILEDLG(3)		    Library Functions Manual		 AG_FILEDLG(3)

NAME
       AG_FileDlg -- agar file browser widget

SYNOPSIS
       #include	<agar/core.h>
       #include	<agar/gui.h>

DESCRIPTION
       AG_FileDlg  is a	traditional file selection widget.  It displays	a list
       of directories and shortcuts at the left, a list	of files at the	 right
       and an input textbox and	file type selector at the bottom.  If supports
       filesystem   monitoring	via  AG_AddEventSink(3).   On  platforms  with
       glob(3) support,	glob patterns may be entered in	the input textbox.

       Although	AG_FileDlg is most often used to  implement  "Load"  or	 "Save
       as..."  dialog windows, it may also be embedded into any	arbitrary con-
       tainer widget.  User-specified actions (with optional  parameters)  can
       be tied to specific file	extensions.

       For selecting directories, the AG_DirDlg(3) widget may be used instead.

INHERITANCE HIERARCHY
       AG_Object(3) -> AG_Widget(3) -> AG_FileDlg.

INTERFACE
       AG_FileDlg * AG_FileDlgNew(AG_Widget *parent, Uint flags)

       AG_FileDlg  *  AG_FileDlgNewMRU(AG_Widget  *parent, const char *mruKey,
       Uint flags)

       AG_FileDlg * AG_FileDlgNewCompact(AG_Widget *parent, const char *label,
       Uint flags)

       AG_FileDlg  *  AG_FileDlgNewCompactMRU(AG_Widget	 *parent,  const  char
       *label, const char *mruKey, Uint	flags)

       char * AG_FileDlgGetDirectory(AG_FileDlg	*fd)

       AG_Size	AG_FileDlgCopyDirectory(AG_FileDlg  *fd,  char	*dst,  AG_Size
       size)

       int AG_FileDlgSetDirectory(AG_FileDlg *fd, const	char *format, ...)

       int AG_FileDlgSetDirectoryS(AG_FileDlg *fd, const char *path)

       void  AG_FileDlgSetDirectoryMRU(AG_FileDlg  *fd,	 const	char  *mruKey,
       const char *defaultDir)

       char * AG_FileDlgGetFilename(AG_FileDlg *fd)

       AG_Size AG_FileDlgCopyFilename(AG_FileDlg *fd, char *dst, AG_Size size)

       void AG_FileDlgSetFilename(AG_FileDlg *fd, const	char *format, ...)

       void AG_FileDlgSetFilenameS(AG_FileDlg *fd, const char *filename)

       AG_FileType  *  AG_FileDlgAddType(AG_FileDlg  *fd,  const  char *descr,
       const char *exts, void (*fn)(AG_Event *), const char *fnArgs, ...)

       void AG_FileDlgAddImageTypes(AG_FileDlg *fd,  void  (*fn)(AG_Event  *),
       const char *fnArgs, ...)

       void AG_FileDlgCopyTypes(AG_FileDlg *dst, const AG_FileDlg *src)

       void AG_FileDlgRefresh(AG_FileDlg *fd)

       AG_FileDlgNew() allocates, initializes, and attaches a new AG_FileDlg.

       The  AG_FileDlgNewMRU()	variant	calls AG_FileDlgSetDirectoryMRU() with
       mruKey.	Unless AG_FileDlgSetDirectory()	is used	(see below),  the  de-
       fault  directory	is set according to the	AG_CONFIG_PATH_DATA setting of
       AG_Config(3).

       AG_FileDlgNewCompact() and  AG_FileDlgNewCompactMRU()  implicitely  set
       the  AG_FILEDLG_COMPACT flag as well as the contents of the display la-
       bel.

       Acceptable flags	include:

       AG_FILEDLG_COMPACT	Proxy mode.  Collapse to a single-line textbox
				and "..." button.  The expand button  shows  a
				regular	 AG_FileDlg  in	 a new window.	If the
				user selects a file and	clicks "OK", the  file
				path  is  copied to the	textbox	of the compact
				AG_FileDlg.

       AG_FILEDLG_MASK_EXT	Mask unknown files by extension.

       AG_FILEDLG_MASK_HIDDEN	Mask hidden files.

       AG_FILEDLG_MULTI		Allow multiple files to	be selected at once.

       AG_FILEDLG_CLOSEWIN	Automatically close  the  AG_FileDlg  widget's
				parent window when a file is selected.

       AG_FILEDLG_LOAD		The  selected  file must exist and be readable
				or an error is returned	to the user.

       AG_FILEDLG_SAVE		The selected file must be writeable or an  er-
				ror is returned	to the user.

       AG_FILEDLG_ASYNC		Load/save routines will	be executed in a sepa-
				rate  thread.	This flag is available only if
				agar was compiled with threads support.

       AG_FILEDLG_NOMASKOPTS	Don't display "Mask files  by  extension"  and
				"Mask hidden files" checkboxes.

       AG_FILEDLG_NOTYPESELECT	Don't display the "Type:" selector dropbox.

       AG_FILEDLG_NOBUTTONS	Don't display "OK" and "Cancel"	buttons.

       AG_FILEDLG_HFILL		Expand horizontally in parent container.

       AG_FILEDLG_VFILL		Expand vertically in parent container.

       AG_FILEDLG_EXPAND	Shorthand      for	AG_FILEDLG_HFILL     |
				AG_FILEDLG_VFILL.

       The working directory can be retrieved as a newly-allocated string  us-
       ing  AG_FileDlgGetDirectory(),  or copied into a	fixed-size buffer with
       AG_FileDlgCopyDirectory().  AG_FileDlgSetDirectory().

       AG_FileDlgSetDirectoryMRU() sets	the working directory according	to  an
       AG_Config(3)  parameter named mruKey.  If the parameter does not	exist,
       it will be set to defaultDir (it	is customary to	use  a	name  such  as
       `myapp.mru.foofiles').	If AG_FileDlgSetDirectoryMRU() is used,	subse-
       quent directory changes will cause the current AG_Config(3) settings to
       be saved	automatically.

       The current filename can	be retrieved as	a newly-allocated string using
       AG_FileDlgGetFilename(),	 or  copied  into  a  fixed-size  buffer  with
       AG_FileDlgCopyFilename().

       The  AG_FileDlgSetFilename()  function  sets  the filename to initially
       display in the textbox.	It is typically	used in	file saving dialogs.

       AG_FileDlgAddType() registers a new type-specific event handler	for  a
       given  file  format (and	associated set of filename extensions).	 If fn
       is non-NULL, it sets a type-specific callback to	invoke when a file  of
       the  selected  type is selected by the user.  descr is a	description of
       the file	format and exts	is a comma-separated list of  filename	exten-
       sions  or special directives (enclosed in "<>").	 Syntax	for extensions
       include:

       .txt or *.txt	Match all files	ending in ".txt".

       <-x>		Match all files	that are executable by	the  effective
			owner of the process (using AG_GetFileInfo(3)).

       <=hello.txt>	Only match hello.txt (case-sensitive exact match).

       <=hello.txt/i>	Match hello.txt, Hello.txt, etc	(case-insensitive).

       Type-specific  handlers do not override the general "file-chosen" event
       handler when one	exists (if both	are set	then the type-specific handler
       is run first, followed by "file-chosen").

       AG_FileDlgAddImageTypes() registers a  common  handler  for  all	 image
       types recognized	by AG_SurfaceFromFile(3) (such as BMP, PNG and JPEG).

       AG_FileDlgCopyTypes() copies the	set of AG_FileType (and	any associated
       type-specific options), from one	AG_FileDlg to another.

       The AG_FileDlgRefresh() function	updates	the displayed directory	struc-
       ture and	current	directory contents.

OK/CANCEL ACTIONS
       By default, selecting a file will trigger the following checks:

       1.   If	AG_FILEDLG_LOAD	 or  AG_FILEDLG_SAVE is	set, check whether the
	    file is readable or	writeable.
       2.   If AG_FILEDLG_SAVE is set and a file exists,  display  a  "Replace
	    file?" prompt.
       3.   Execute  the  format-specific  callback,  as previously configured
	    with AG_FileDlgAddType().
       4.   If AG_FILEDLG_CLOSEWIN is set, close the parent window.

       The default action performed when a user	clicks on "Cancel"  is	simply
       to close	the parent window if AG_FILEDLG_CLOSEWIN is set.

       These default actions can be overridden using the functions below:

       void  AG_FileDlgOkAction(AG_FileDlg  *fd, void (*fn)(AG_Event *), const
       char *fmt, ...)

       void AG_FileDlgCancelAction(AG_FileDlg  *fd,  void  (*fn)(AG_Event  *),
       const char *fmt,	...)

       int AG_FileDlgCheckReadAccess(AG_FileDlg	*fd)

       int AG_FileDlgCheckWriteAccess(AG_FileDlg *fd)

       The  AG_FileDlgOkAction() function configures an	event handler function
       to invoke when a	file is	selected,  overriding  the  default  behavior.
       The  event  handler will	be passed a string argument containing the ab-
       solute path to  the  selected  file,  followed  by  a  pointer  to  the
       AG_FileType  structure  for  the	 file  type  selected by the user (see
       "STRUCTURE DATA"	for details).

       AG_FileDlgCancelAction()	overrides the default behavior of the "Cancel"
       button.

       AG_FileDlgCheckReadAccess() and	AG_FileDlgCheckWriteAccess()  evaluate
       whether the selected file is readable or	writeable.

FORMAT-SPECIFIC	OPTIONS
       When  we	 are  using  AG_FileDlg	to load	and save files,	we may want to
       provide the user	with format-specific  options  that  will  affect  the
       loading or saving process.  Format-specific options are associated with
       a  file type (an	AG_FileType as returned	by AG_FileDlgAddType()).  When
       a file type is selected,	AG_FileDlg displays basic widgets enabling the
       user to manipulate those	options.

       void AG_FileDlgSetOptionContainer(AG_FileDlg *fd, AG_Widget *container)

       AG_FileOption  *	 AG_FileOptionNewBool(AG_FileType  *type,  const  char
       *descr, const char *key,	int default)

       AG_FileOption   *  AG_FileOptionNewInt(AG_FileType  *type,  const  char
       *descr, const char *key,	int default, int min, int max)

       AG_FileOption  *	 AG_FileOptionNewFlt(AG_FileType  *type,  const	  char
       *descr,	const  char  *key,  float default, float min, float max, const
       char *unit)

       AG_FileOption  *	 AG_FileOptionNewDbl(AG_FileType  *type,  const	  char
       *descr,	const char *key, double	default, double	min, double max, const
       char *unit)

       AG_FileOption * AG_FileOptionGet(AG_FileType *type, const char *key)

       int AG_FileOptionBool(AG_FileType *type,	const char *key)

       int AG_FileOptionInt(AG_FileType	*type, const char *key)

       float AG_FileOptionFlt(AG_FileType *type, const char *key)

       double AG_FileOptionDbl(AG_FileType *type, const	char *key)

       AG_FileDlgSetOptionContainer() arranges for the given container	widget
       to hold the control widgets that	will be	dynamically created.

       AG_FileOptionNewBool()  registers  a  boolean option, manipulated by an
       AG_Checkbox(3).	descr is a description string and key is a handle that
       the save/load routine will use to retrieve the option.	default	 indi-
       cates the initial value of the option (1	= true,	0 = false).

       AG_FileOptionNewInt()  registers	 an  integer option, manipulated by an
       AG_Numerical(3).	 default is the	initial	value, min and max define  the
       bounds.

       AG_FileOptionNewFlt()  and  AG_FileOptionNewDbl()  register  single and
       double  precision  floating-point   options,   using   AG_Numerical(3).
       default	is  the	initial	value, min and max define the bounds and unit,
       if not NULL, is the unit	system to use (see AG_Units(3)).

       AG_FileOptionGet() returns a pointer to the AG_FileOption structure for
       the  given  option  name,  or  NULL  if	there  is  no	such   option.
       AG_FileOptionBool(),    AG_FileOptionInt(),    AG_FileOptionFlt()   and
       AG_FileOptionDbl() return the value of the given	option.

BINDINGS
       The AG_FileDlg widget does not provide any bindings.

EVENTS
       The AG_FileDlg widget generates the following events:

       file-chosen(char	*path, AG_FileType *type)
	   User	has selected the given file.  path is the full pathname	to the
	   file.  If not NULL, type describes the matching type	of the file.

       file-selected(char *path)
	   User	has moved selection over the given file,  where	 path  is  the
	   full	pathname to it.	 This event is useful for things like preview-
	   ing file contents using an external widget.

       dir-selected(char *path)
	   The given directory was selected.

STRUCTURE DATA
       For the AG_FileDlg object:

       char cwd[AG_PATHNAME_MAX]     Absolute  path  of	current	working	direc-
				     tory.
       char cfile[AG_PATHNAME_MAX]   Absolute path of last selected file.

       For the AG_FileType structure (as returned by AG_FileDlgAddType()):

       AG_FileDlg *fd	   Back	pointer	to the parent AG_FileDlg (read-only).
       char **exts	   List	of associated file extensions.
       Uint nExts	   Count of file extensions.
       const char *descr   Description string (read-only).
       AG_Event	*action	   Callback function (as returned  by  AG_SetEvent(3))
			   to  invoke when a file of this type is selected for
			   a load/save operation.

EXAMPLES
       See tests/loader.c in the Agar source distribution.

SEE ALSO
       AG_DirDlg(3), AG_Intro(3), AG_Limits(3),	AG_Widget(3), AG_Window(3)

HISTORY
       The   AG_FileDlg	  widget   first   appeared   in   Agar	  1.0.	   The
       AG_FILEDLG_COMPACT    option   as   well	  as   AG_FileDlgNewCompact(),
       AG_FileDlgNewCompactMRU(),		     AG_FileDlgGetDirectory(),
       AG_FileDlgCopyDirectory(),		      AG_FileDlgGetFilename(),
       AG_FileDlgCopyFilename(),	   AG_FileDlgCopyTypes()	   and
       AG_FileDlgAddImageTypes() routines appeared in Agar 1.6.0.

Agar 1.7		       December	21, 2022		 AG_FILEDLG(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=AG_FileDlg&sektion=3&manpath=FreeBSD+Ports+14.3.quarterly>

home | help