parameter.h

00001 /*****************************************************************
00002  * gmerlin - a general purpose multimedia framework and applications
00003  *
00004  * Copyright (c) 2001 - 2008 Members of the Gmerlin project
00005  * gmerlin-general@lists.sourceforge.net
00006  * http://gmerlin.sourceforge.net
00007  *
00008  * This program is free software: you can redistribute it and/or modify
00009  * it under the terms of the GNU General Public License as published by
00010  * the Free Software Foundation, either version 2 of the License, or
00011  * (at your option) any later version.
00012  *
00013  * This program is distributed in the hope that it will be useful,
00014  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00015  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00016  * GNU General Public License for more details.
00017  *
00018  * You should have received a copy of the GNU General Public License
00019  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
00020  * *****************************************************************/
00021 
00022 #ifndef __BG_PARAMETER_H_
00023 #define __BG_PARAMETER_H_
00024 
00025 #include <libxml/tree.h>
00026 #include <libxml/parser.h>
00027 
00028 #include <gavl/gavl.h>
00029 
00044 /* Universal Parameter setting mechanism */
00045 
00053 typedef enum
00054   {
00055     BG_PARAMETER_SECTION, 
00056     BG_PARAMETER_CHECKBUTTON, 
00057     BG_PARAMETER_INT,         
00058     BG_PARAMETER_FLOAT,       
00059     BG_PARAMETER_SLIDER_INT,  
00060     BG_PARAMETER_SLIDER_FLOAT, 
00061     BG_PARAMETER_STRING,      
00062     BG_PARAMETER_STRING_HIDDEN, 
00063     BG_PARAMETER_STRINGLIST,  
00064     BG_PARAMETER_COLOR_RGB,   
00065     BG_PARAMETER_COLOR_RGBA,  
00066     BG_PARAMETER_FONT,        
00067     BG_PARAMETER_DEVICE,      
00068     BG_PARAMETER_FILE,        
00069     BG_PARAMETER_DIRECTORY,   
00070     BG_PARAMETER_MULTI_MENU,  
00071     BG_PARAMETER_MULTI_LIST,  
00072     BG_PARAMETER_MULTI_CHAIN, 
00073     BG_PARAMETER_TIME,        
00074     BG_PARAMETER_POSITION     
00075   } bg_parameter_type_t;
00076 
00081 typedef union
00082   {
00083   double  val_f; 
00084   int     val_i; 
00085   char *  val_str; 
00086   float val_color[4];  
00087   gavl_time_t val_time; 
00088   double val_pos[2];     
00089   } bg_parameter_value_t;
00090 
00091 /* Flags */
00092 
00096 #define BG_PARAMETER_SYNC         (1<<0) 
00097 
00098 
00101 #define BG_PARAMETER_HIDE_DIALOG  (1<<1) 
00102 
00103 
00107 typedef struct bg_parameter_info_s bg_parameter_info_t;
00108 
00115 struct bg_parameter_info_s
00116   {
00117   char * name; 
00118   char * long_name; 
00119   char * opt; 
00120 
00121   char * gettext_domain; 
00122   char * gettext_directory; 
00123   
00124   bg_parameter_type_t type; 
00125 
00126   int flags; 
00127   
00128   bg_parameter_value_t val_default; 
00129   bg_parameter_value_t val_min; 
00130   bg_parameter_value_t val_max; 
00131   
00132   /* Names which can be passed to set_parameter (NULL terminated) */
00133 
00134   char const * const * multi_names; 
00135 
00136   /* Long names are optional, if they are NULL,
00137      the short names are used */
00138 
00139   char const * const * multi_labels; 
00140   char const * const * multi_descriptions; 
00141     
00142   /*
00143    *  These are parameters for each codec.
00144    *  The name members of these MUST be unique with respect to the rest
00145    *  of the parameters passed to the same set_parameter func
00146    */
00147 
00148   struct bg_parameter_info_s const * const * multi_parameters; 
00149   
00150   int num_digits; 
00151   
00152   char * help_string; 
00153   
00154   char ** multi_names_nc; 
00155 
00156   char ** multi_labels_nc; 
00157 
00158   char ** multi_descriptions_nc; 
00159 
00160   struct bg_parameter_info_s ** multi_parameters_nc; 
00161 
00162   };
00163 
00164 /* Prototype for setting/getting parameters */
00165 
00166 /*
00167  *  NOTE: All applications MUST call a bg_set_parameter_func with
00168  *  a NULL name argument to signal, that all parameters are set now
00169  */
00170 
00184 typedef void (*bg_set_parameter_func_t)(void * data, const char * name,
00185                                         const bg_parameter_value_t * v);
00186 
00200 typedef int (*bg_get_parameter_func_t)(void * data, const char * name,
00201                                        bg_parameter_value_t * v);
00202 
00212 bg_parameter_info_t *
00213 bg_parameter_info_copy_array(const bg_parameter_info_t * src);
00214 
00223 void
00224 bg_parameter_info_set_const_ptrs(bg_parameter_info_t * info);
00225 
00226 
00235 void bg_parameter_info_copy(bg_parameter_info_t * dst,
00236                             const bg_parameter_info_t * src);
00237 
00243 void bg_parameter_info_destroy_array(bg_parameter_info_t * info);
00244 
00255 void bg_parameter_value_copy(bg_parameter_value_t * dst,
00256                              const bg_parameter_value_t * src,
00257                              const bg_parameter_info_t * info);
00258 
00265 void bg_parameter_value_free(bg_parameter_value_t * val,
00266                              bg_parameter_type_t type);
00267 
00268 
00276 bg_parameter_info_t *
00277 bg_parameter_info_concat_arrays(bg_parameter_info_t const ** srcs);
00278 
00289 int bg_parameter_get_selected(const bg_parameter_info_t * info,
00290                               const char * val);
00291 
00292 
00304 const bg_parameter_info_t *
00305 bg_parameter_find(const bg_parameter_info_t * info,
00306                   const char * name);
00307 
00308 
00319 bg_parameter_info_t * bg_xml_2_parameters(xmlDocPtr xml_doc,
00320                                           xmlNodePtr xml_parameters);
00321 
00331 void
00332 bg_parameters_2_xml(const bg_parameter_info_t * info, xmlNodePtr xml_parameters);
00333 
00334 
00335 
00336 #endif /* __BG_PARAMETER_H_ */
00337 

Generated on Sat Aug 9 12:12:42 2008 for gmerlin by  doxygen 1.5.6