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_BUTTON,      
00076   } bg_parameter_type_t;
00077 
00082 typedef union
00083   {
00084   double  val_f; 
00085   int     val_i; 
00086   char *  val_str; 
00087   float val_color[4];  
00088   gavl_time_t val_time; 
00089   double val_pos[2];     
00090   } bg_parameter_value_t;
00091 
00092 /* Flags */
00093 
00097 #define BG_PARAMETER_SYNC         (1<<0) 
00098 
00099 
00102 #define BG_PARAMETER_HIDE_DIALOG  (1<<1) 
00103 
00104 
00108 typedef struct bg_parameter_info_s bg_parameter_info_t;
00109 
00116 struct bg_parameter_info_s
00117   {
00118   char * name; 
00119   char * long_name; 
00120   char * opt; 
00121 
00122   char * gettext_domain; 
00123   char * gettext_directory; 
00124   
00125   bg_parameter_type_t type; 
00126 
00127   int flags; 
00128   
00129   bg_parameter_value_t val_default; 
00130   bg_parameter_value_t val_min; 
00131   bg_parameter_value_t val_max; 
00132   
00133   /* Names which can be passed to set_parameter (NULL terminated) */
00134 
00135   char const * const * multi_names; 
00136 
00137   /* Long names are optional, if they are NULL,
00138      the short names are used */
00139 
00140   char const * const * multi_labels; 
00141   char const * const * multi_descriptions; 
00142     
00143   /*
00144    *  These are parameters for each codec.
00145    *  The name members of these MUST be unique with respect to the rest
00146    *  of the parameters passed to the same set_parameter func
00147    */
00148 
00149   struct bg_parameter_info_s const * const * multi_parameters; 
00150   
00151   int num_digits; 
00152   
00153   char * help_string; 
00154   
00155   char ** multi_names_nc; 
00156 
00157   char ** multi_labels_nc; 
00158 
00159   char ** multi_descriptions_nc; 
00160 
00161   struct bg_parameter_info_s ** multi_parameters_nc; 
00162 
00163   };
00164 
00165 /* Prototype for setting/getting parameters */
00166 
00167 /*
00168  *  NOTE: All applications MUST call a bg_set_parameter_func with
00169  *  a NULL name argument to signal, that all parameters are set now
00170  */
00171 
00185 typedef void (*bg_set_parameter_func_t)(void * data, const char * name,
00186                                         const bg_parameter_value_t * v);
00187 
00201 typedef int (*bg_get_parameter_func_t)(void * data, const char * name,
00202                                        bg_parameter_value_t * v);
00203 
00213 bg_parameter_info_t *
00214 bg_parameter_info_copy_array(const bg_parameter_info_t * src);
00215 
00224 void
00225 bg_parameter_info_set_const_ptrs(bg_parameter_info_t * info);
00226 
00227 
00236 void bg_parameter_info_copy(bg_parameter_info_t * dst,
00237                             const bg_parameter_info_t * src);
00238 
00244 void bg_parameter_info_destroy_array(bg_parameter_info_t * info);
00245 
00256 void bg_parameter_value_copy(bg_parameter_value_t * dst,
00257                              const bg_parameter_value_t * src,
00258                              const bg_parameter_info_t * info);
00259 
00266 void bg_parameter_value_free(bg_parameter_value_t * val,
00267                              bg_parameter_type_t type);
00268 
00269 
00277 bg_parameter_info_t *
00278 bg_parameter_info_concat_arrays(bg_parameter_info_t const ** srcs);
00279 
00290 int bg_parameter_get_selected(const bg_parameter_info_t * info,
00291                               const char * val);
00292 
00293 
00305 const bg_parameter_info_t *
00306 bg_parameter_find(const bg_parameter_info_t * info,
00307                   const char * name);
00308 
00309 
00320 bg_parameter_info_t * bg_xml_2_parameters(xmlDocPtr xml_doc,
00321                                           xmlNodePtr xml_parameters);
00322 
00332 void
00333 bg_parameters_2_xml(const bg_parameter_info_t * info, xmlNodePtr xml_parameters);
00334 
00335 
00336 
00337 #endif /* __BG_PARAMETER_H_ */
00338 

Generated on Tue Jul 28 01:06:35 2009 for gmerlin by  doxygen 1.5.4