]> git.sesse.net Git - vlc/blobdiff - modules/gui/wxwidgets/dialogs/preferences.cpp
One more time removing of some useless tests.
[vlc] / modules / gui / wxwidgets / dialogs / preferences.cpp
index f9eeefcd93805cb23394b53c7da8182fb13b462d..a6a2a844794988a24c8ff68b12610fac29b8f864 100644 (file)
@@ -124,9 +124,9 @@ public:
     ConfigTreeData() { b_submodule = 0; panel = NULL; psz_name = NULL;
                        psz_help = NULL; }
     virtual ~ConfigTreeData() {
-                                 if( panel ) delete panel;
-                                 if( psz_name ) free( psz_name );
-                                 if( psz_help ) free( psz_help );
+                                 delete panel;
+                                 free( psz_name );
+                                 free( psz_help );
                               };
 
     vlc_bool_t b_submodule;
@@ -325,7 +325,7 @@ PrefsTreeCtrl::PrefsTreeCtrl( wxWindow *_p_parent, intf_thread_t *_p_intf,
 {
     vlc_list_t      *p_list = NULL;;
     module_t        *p_module;
-    module_config_t *p_item;
+    module_config_t *p_item, *p_end;
     int i_index, i_image=0;
 
     /* Initializations */
@@ -356,30 +356,35 @@ PrefsTreeCtrl::PrefsTreeCtrl( wxWindow *_p_parent, intf_thread_t *_p_intf,
     for( i_index = 0; i_index < p_list->i_count; i_index++ )
     {
         p_module = (module_t *)p_list->p_values[i_index].p_object;
-        if( !strcmp( p_module->psz_object_name, "main" ) )
+        if( !strcmp( module_GetObjName(p_module), "main" ) )
             break;
     }
     if( i_index < p_list->i_count )
     {
         wxTreeItemId current_item;
-        char *psz_help;
+        const char *psz_help;
+        unsigned int i_confsize;
+        module_config_t *p_config;
+
         /* We found the main module */
 
         /* Enumerate config categories and store a reference so we can
          * generate their config panel them when it is asked by the user. */
-        p_item = p_module->p_config;
 
-        if( p_item ) do
+        p_config = module_GetConfig( p_module, &i_confsize );
+        for( size_t i = 0; i < i_confsize; i++ )
         {
+            module_config_t *p_item = p_config + i;
             ConfigTreeData *config_data;
             switch( p_item->i_type )
             {
             case CONFIG_CATEGORY:
+                if( p_item->value.i == -1 )   break; // Don't display it
+
                 config_data = new ConfigTreeData;
-                if( p_item->i_value == -1 )   break; // Don't display it
                 config_data->psz_name = strdup( config_CategoryNameGet(
-                                                            p_item->i_value ) );
-                psz_help = config_CategoryHelpGet( p_item->i_value );
+                                                            p_item->value.i ) );
+                psz_help = config_CategoryHelpGet( p_item->value.i );
                 if( psz_help )
                 {
                     config_data->psz_help = wraptext( strdup( psz_help ), 72 );
@@ -389,10 +394,10 @@ PrefsTreeCtrl::PrefsTreeCtrl( wxWindow *_p_parent, intf_thread_t *_p_intf,
                     config_data->psz_help = NULL;
                 }
                 config_data->i_type = TYPE_CATEGORY;
-                config_data->i_object_id = p_item->i_value;
+                config_data->i_object_id = p_item->value.i;
 
                 /* Add the category to the tree */
-                switch( p_item->i_value )
+                switch( p_item->value.i )
                 {
                     case CAT_AUDIO:
                         i_image = 0; break;
@@ -415,26 +420,26 @@ PrefsTreeCtrl::PrefsTreeCtrl( wxWindow *_p_parent, intf_thread_t *_p_intf,
 
                 break;
             case CONFIG_SUBCATEGORY:
-                if( p_item->i_value == -1 ) break; // Don't display it
+                if( p_item->value.i == -1 ) break; // Don't display it
                 /* Special case: move the "general" subcategories to their
                  * parent category */
-                if( p_item->i_value == SUBCAT_VIDEO_GENERAL ||
-                    p_item->i_value == SUBCAT_ADVANCED_MISC ||
-                    p_item->i_value == SUBCAT_INPUT_GENERAL ||
-                    p_item->i_value == SUBCAT_INTERFACE_GENERAL ||
-                    p_item->i_value == SUBCAT_SOUT_GENERAL||
-                    p_item->i_value == SUBCAT_PLAYLIST_GENERAL||
-                    p_item->i_value == SUBCAT_AUDIO_GENERAL )
+                if( p_item->value.i == SUBCAT_VIDEO_GENERAL ||
+                    p_item->value.i == SUBCAT_ADVANCED_MISC ||
+                    p_item->value.i == SUBCAT_INPUT_GENERAL ||
+                    p_item->value.i == SUBCAT_INTERFACE_GENERAL ||
+                    p_item->value.i == SUBCAT_SOUT_GENERAL||
+                    p_item->value.i == SUBCAT_PLAYLIST_GENERAL||
+                    p_item->value.i == SUBCAT_AUDIO_GENERAL )
                 {
                     ConfigTreeData *cd = (ConfigTreeData *)
                                             GetItemData( current_item );
                     cd->i_type = TYPE_CATSUBCAT;
-                    cd->i_subcat_id = p_item->i_value;
-                    if( cd->psz_name ) free( cd->psz_name );
+                    cd->i_subcat_id = p_item->value.i;
+                    free( cd->psz_name );
                     cd->psz_name = strdup(  config_CategoryNameGet(
-                                                      p_item->i_value ) );
-                    if( cd->psz_help ) free( cd->psz_help );
-                    char *psz_help = config_CategoryHelpGet( p_item->i_value );
+                                                      p_item->value.i ) );
+                    free( cd->psz_help );
+                    const char *psz_help = config_CategoryHelpGet( p_item->value.i );
                     if( psz_help )
                     {
                         cd->psz_help = wraptext( strdup( psz_help ), 72 );
@@ -449,8 +454,8 @@ PrefsTreeCtrl::PrefsTreeCtrl( wxWindow *_p_parent, intf_thread_t *_p_intf,
                 config_data = new ConfigTreeData;
 
                 config_data->psz_name = strdup(  config_CategoryNameGet(
-                                                           p_item->i_value ) );
-                psz_help = config_CategoryHelpGet( p_item->i_value );
+                                                           p_item->value.i ) );
+                psz_help = config_CategoryHelpGet( p_item->value.i );
                 if( psz_help )
                 {
                     config_data->psz_help = wraptext( strdup( psz_help ), 72 );
@@ -460,10 +465,10 @@ PrefsTreeCtrl::PrefsTreeCtrl( wxWindow *_p_parent, intf_thread_t *_p_intf,
                     config_data->psz_help = NULL;
                 }
                 config_data->i_type = TYPE_SUBCATEGORY;
-                config_data->i_object_id = p_item->i_value;
+                config_data->i_object_id = p_item->value.i;
                 /* WXMSW doesn't know image -1 ... FIXME */
                 #ifdef __WXMSW__
-                switch( p_item->i_value / 100 )
+                switch( p_item->value.i / 100 )
                 {
                     case CAT_AUDIO:
                         i_image = 0; break;
@@ -488,8 +493,8 @@ PrefsTreeCtrl::PrefsTreeCtrl( wxWindow *_p_parent, intf_thread_t *_p_intf,
                 break;
             }
         }
-        while( p_item->i_type != CONFIG_HINT_END && p_item++ );
 
+        module_PutConfig( p_config );
     }
 
 
@@ -498,35 +503,32 @@ PrefsTreeCtrl::PrefsTreeCtrl( wxWindow *_p_parent, intf_thread_t *_p_intf,
      */
     for( i_index = 0; i_index < p_list->i_count; i_index++ )
     {
-        int i_category = -1;
-        int i_subcategory = -1;
-        int i_options = 0;
+        int i_category = -1, i_subcategory = -1, i_options = 0;
+        unsigned int i_confsize;
+        module_config_t *p_config;
 
         p_module = (module_t *)p_list->p_values[i_index].p_object;
 
         /* Exclude the main module */
-        if( !strcmp( p_module->psz_object_name, "main" ) )
+        if( !strcmp( module_GetObjName(p_module), "main" ) )
             continue;
-
+#if 0
         /* Exclude empty plugins (submodules don't have config options, they
          * are stored in the parent module) */
-        if( p_module->b_submodule )
-              continue;
-//            p_item = ((module_t *)p_module->p_parent)->p_config;
-        else
-            p_item = p_module->p_config;
-
-
-        if( !p_item ) continue;
-        do
+        if( module_IsSubModule(p_module) )
+            continue;
+#endif
+        p_config = module_GetConfig( p_module, &i_confsize );
+        for( size_t i = 0; i < i_confsize; i++ )
         {
+            module_config_t *p_item = p_config + i;
             if( p_item->i_type == CONFIG_CATEGORY )
             {
-                i_category = p_item->i_value;
+                i_category = p_item->value.i;
             }
             else if( p_item->i_type == CONFIG_SUBCATEGORY )
             {
-                i_subcategory = p_item->i_value;
+                i_subcategory = p_item->value.i;
             }
             if( p_item->i_type & CONFIG_ITEM )
                 i_options ++;
@@ -535,7 +537,6 @@ PrefsTreeCtrl::PrefsTreeCtrl( wxWindow *_p_parent, intf_thread_t *_p_intf,
                 break;
             }
         }
-        while( p_item->i_type != CONFIG_HINT_END && p_item++ );
 
         if( !i_options ) continue;
 
@@ -555,7 +556,6 @@ PrefsTreeCtrl::PrefsTreeCtrl( wxWindow *_p_parent, intf_thread_t *_p_intf,
             }
             category_item = GetNextChild( root_item, cookie );
         }
-
         if( !b_found ) continue;
 
         /* Find subcategory item */
@@ -580,11 +580,13 @@ PrefsTreeCtrl::PrefsTreeCtrl( wxWindow *_p_parent, intf_thread_t *_p_intf,
 
         /* Add the plugin to the tree */
         ConfigTreeData *config_data = new ConfigTreeData;
-        config_data->b_submodule = p_module->b_submodule;
+#if 0
+        config_data->b_submodule = module_IsSubModule(p_module);
+#endif
         config_data->i_type = TYPE_MODULE;
-        config_data->i_object_id = p_module->b_submodule ?
-            ((module_t *)p_module->p_parent)->i_object_id :
-            p_module->i_object_id;
+        config_data->i_object_id = config_data->b_submodule ?
+            ((vlc_object_t *)p_module)->p_parent->i_object_id :
+            ((vlc_object_t *)p_module)->i_object_id;
         config_data->psz_help = NULL;
 
         /* WXMSW doesn't know image -1 ... FIXME */
@@ -609,10 +611,8 @@ PrefsTreeCtrl::PrefsTreeCtrl( wxWindow *_p_parent, intf_thread_t *_p_intf,
         #else
         i_image = -1;
         #endif
-        AppendItem( subcategory_item, wxU( p_module->psz_shortname ?
-                       p_module->psz_shortname : p_module->psz_object_name )
-                                    , i_image, -1,
-                    config_data );
+        AppendItem( subcategory_item, wxU( module_GetName(p_module, 0) ),
+                    i_image, -1, config_data );
     }
 
     /* Sort all this mess */
@@ -857,7 +857,8 @@ PrefsPanel::PrefsPanel( wxWindow* parent, intf_thread_t *_p_intf,
                         ConfigTreeData *config_data )
   :  wxPanel( parent, -1, wxDefaultPosition, wxDefaultSize )
 {
-    module_config_t *p_item;
+    module_config_t *p_item, *p_start, *p_end;
+    unsigned int i_confsize;
     vlc_list_t *p_list = NULL;;
 
     wxStaticText *label;
@@ -898,8 +899,8 @@ PrefsPanel::PrefsPanel( wxWindow* parent, intf_thread_t *_p_intf,
         /* Get a pointer to the module */
         if( config_data->i_type == TYPE_MODULE )
         {
-            p_module = (module_t *)vlc_object_get( p_intf,
-                                                   config_data->i_object_id );
+            p_module = (module_t *)
+                vlc_object_get( config_data->i_object_id );
         }
         else
         {
@@ -912,7 +913,7 @@ PrefsPanel::PrefsPanel( wxWindow* parent, intf_thread_t *_p_intf,
             for( i_index = 0; i_index < p_list->i_count; i_index++ )
             {
                 p_module = (module_t *)p_list->p_values[i_index].p_object;
-                if( !strcmp( p_module->psz_object_name, "main" ) )
+                if( !strcmp( module_GetObjName(p_module), "main" ) )
                 {
                     b_found = VLC_TRUE;
                     break;
@@ -926,41 +927,38 @@ PrefsPanel::PrefsPanel( wxWindow* parent, intf_thread_t *_p_intf,
             }
         }
 
-        if( p_module->i_object_type != VLC_OBJECT_MODULE )
-        {
-            /* 0OOoo something went really bad */
-            return;
-        }
-
         /* Enumerate config options and add corresponding config boxes
          * (submodules don't have config options, they are stored in the
          *  parent module) */
-        if( p_module->b_submodule )
-            p_item = ((module_t *)p_module->p_parent)->p_config;
+#if 0
+        if( module_IsSubModule(p_module) )
+            p_start = module_GetConfig((module_t *)(((vlc_object_t *)p_module)->p_parent), &i_confsize);
         else
-            p_item = p_module->p_config;
+#endif
+            p_start = module_GetConfig(p_module, &i_confsize);
+
+        p_item = p_start;
+        p_end = p_start + i_confsize;
 
         /* Find the category if it has been specified */
         if( config_data->i_type == TYPE_SUBCATEGORY ||
             config_data->i_type == TYPE_CATSUBCAT )
         {
-            do
+            for( ; p_item && p_item < p_end; p_item++ )
             {
                 if( p_item->i_type == CONFIG_SUBCATEGORY &&
                     ( config_data->i_type == TYPE_SUBCATEGORY &&
-                      p_item->i_value == config_data->i_object_id ) ||
+                      p_item->value.i == config_data->i_object_id ) ||
                     ( config_data->i_type == TYPE_CATSUBCAT &&
-                      p_item->i_value == config_data->i_subcat_id ) )
+                      p_item->value.i == config_data->i_subcat_id ) )
                 {
                     break;
                 }
-                if( p_item->i_type == CONFIG_HINT_END )
-                    break;
-            } while( p_item++ );
+            }
         }
 
         /* Add a head title to the panel */
-        char *psz_head;
+        const char *psz_head;
         if( config_data->i_type == TYPE_SUBCATEGORY ||
             config_data->i_type == TYPE_CATSUBCAT )
         {
@@ -969,7 +967,7 @@ PrefsPanel::PrefsPanel( wxWindow* parent, intf_thread_t *_p_intf,
         }
         else
         {
-            psz_head = p_module->psz_longname;
+            psz_head = module_GetLongName(p_module);
         }
 
         label = new wxStaticText( this, -1,
@@ -988,19 +986,17 @@ PrefsPanel::PrefsPanel( wxWindow* parent, intf_thread_t *_p_intf,
         config_window->SetAutoLayout( TRUE );
         config_window->SetScrollRate( 5, 5 );
 
-        if( p_item ) do
+        for( ; p_item && p_item < p_end; p_item++ )
         {
             /* If a category has been specified, check we finished the job */
             if( ( ( config_data->i_type == TYPE_SUBCATEGORY &&
-                    p_item->i_value != config_data->i_object_id ) ||
+                    p_item->value.i != config_data->i_object_id ) ||
                   ( config_data->i_type == TYPE_CATSUBCAT  &&
-                    p_item->i_value != config_data->i_subcat_id ) ) &&
+                    p_item->value.i != config_data->i_subcat_id ) ) &&
                 (p_item->i_type == CONFIG_CATEGORY ||
                   p_item->i_type == CONFIG_SUBCATEGORY ) )
                 break;
 
-            if( p_item->b_internal == VLC_TRUE ) continue;
-
             ConfigControl *control =
                 CreateConfigControl( VLC_OBJECT(p_intf),
                                      p_item, config_window );
@@ -1013,12 +1009,8 @@ PrefsPanel::PrefsPanel( wxWindow* parent, intf_thread_t *_p_intf,
 
             config_sizer->Add( control, 0, wxEXPAND | wxALL, 2 );
         }
-        while( !( p_item->i_type == CONFIG_HINT_END ||
-               ( ( config_data->i_type == TYPE_SUBCATEGORY ||
-                   config_data->i_type == TYPE_CATSUBCAT ) &&
-                 ( p_item->i_type == CONFIG_CATEGORY ||
-                   p_item->i_type == CONFIG_SUBCATEGORY ) ) ) && p_item++ );
 
+        module_PutConfig( p_start );
 
         config_sizer->Layout();
         config_window->SetSizer( config_sizer );
@@ -1042,7 +1034,7 @@ PrefsPanel::PrefsPanel( wxWindow* parent, intf_thread_t *_p_intf,
 
         if( config_data->i_type == TYPE_MODULE )
         {
-            vlc_object_release( p_module );
+            module_Put( p_module );
         }
         else
         {
@@ -1071,20 +1063,20 @@ void PrefsPanel::ApplyChanges()
         case CONFIG_ITEM_MODULE_CAT:
         case CONFIG_ITEM_MODULE_LIST:
         case CONFIG_ITEM_MODULE_LIST_CAT:
-            config_PutPsz( p_intf, control->GetName().mb_str(),
-                           control->GetPszValue().mb_str() );
+            config_PutPsz( p_intf, control->GetName().mb_str(wxConvUTF8),
+                           control->GetPszValue().mb_str(wxConvUTF8) );
             break;
         case CONFIG_ITEM_KEY:
             /* So you don't need to restart to have the changes take effect */
             val.i_int = control->GetIntValue();
-            var_Set( p_intf->p_libvlc, control->GetName().mb_str(), val );
+            var_Set( p_intf->p_libvlc, control->GetName().mb_str(wxConvUTF8), val );
         case CONFIG_ITEM_INTEGER:
         case CONFIG_ITEM_BOOL:
-            config_PutInt( p_intf, control->GetName().mb_str(),
+            config_PutInt( p_intf, control->GetName().mb_str(wxConvUTF8),
                            control->GetIntValue() );
             break;
         case CONFIG_ITEM_FLOAT:
-            config_PutFloat( p_intf, control->GetName().mb_str(),
+            config_PutFloat( p_intf, control->GetName().mb_str(wxConvUTF8),
                              control->GetFloatValue() );
             break;
         }