/***************************************************************************** * MonitorLibVLCDeath: Used when b_should_run_on_first_thread is set. *****************************************************************************/ static void * MonitorLibVLCDeath( vlc_object_t * p_this ) { intf_thread_t *p_intf = (intf_thread_t *)p_this; libvlc_int_t * p_libvlc = p_intf->p_libvlc; vlc_object_lock( p_libvlc ); while(vlc_object_alive( p_libvlc ) ) { if(p_intf->b_die) { vlc_object_unlock( p_libvlc ); return NULL; } vlc_object_wait( p_libvlc ); } vlc_object_unlock( p_libvlc ); /* Someone killed libvlc */ /* Make sure we kill all interface objects, especially * those that are blocking libvlc (running on main thread) */ vlc_list_t * p_list = vlc_list_find( p_libvlc, VLC_OBJECT_INTF, FIND_CHILD ); for( int i = 0; i < p_list->i_count; i++ ) { vlc_object_t * p_intf = p_list->p_values[i].p_object; vlc_object_kill( p_intf ); } vlc_list_release( p_list ); return NULL; }
/***************************************************************************** * GtkAutoplayFile: Autoplay file depending on configuration settings *****************************************************************************/ void GtkAutoPlayFile( vlc_object_t *p_this ) { GtkWidget *cbautoplay; intf_thread_t *p_intf; int i_index; vlc_list_t *p_list = vlc_list_find( p_this, VLC_OBJECT_INTF, FIND_ANYWHERE ); for( i_index = 0; i_index < p_list->i_count; i_index++ ) { p_intf = (intf_thread_t *)p_list->p_values[i_index].p_object ; if( strcmp( MODULE_STRING, p_intf->p_module->psz_object_name ) ) { continue; } cbautoplay = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT( p_intf->p_sys->p_window ), "cbautoplay" ) ); if( !config_GetInt( p_this, "pda-autoplayfile" ) ) { p_intf->p_sys->b_autoplayfile = VLC_FALSE; } else { p_intf->p_sys->b_autoplayfile = VLC_TRUE; } gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( cbautoplay ), p_intf->p_sys->b_autoplayfile ); } vlc_list_release( p_list ); }
void MessagesDialog::buildTree( QTreeWidgetItem *parentItem, vlc_object_t *p_obj ) { QTreeWidgetItem *item; if( parentItem ) item = new QTreeWidgetItem( parentItem ); else item = new QTreeWidgetItem( ui.modulesTree ); char *name = vlc_object_get_name( p_obj ); item->setText( 0, QString("%1%2 (0x%3)") .arg( qfu( p_obj->psz_object_type ) ) .arg( ( name != NULL ) ? QString( " \"%1\"" ).arg( qfu( name ) ) : "" ) .arg( (uintptr_t)p_obj, 0, 16 ) ); free( name ); item->setExpanded( true ); vlc_list_t *l = vlc_list_children( p_obj ); for( int i=0; i < l->i_count; i++ ) buildTree( item, l->p_values[i].p_object ); vlc_list_release( l ); }
/*********************************************************************** * Stop ***********************************************************************/ static void ObjectKillChildrens( vlc_object_t *p_obj ) { vlc_list_t *p_list; int i; vlc_object_kill( p_obj ); p_list = vlc_list_children( p_obj ); for( i = 0; i < p_list->i_count; i++ ) ObjectKillChildrens( p_list->p_values[i].p_object ); vlc_list_release( p_list ); }
static void populateLoadedSet( QSet<QString> *loaded, vlc_object_t *p_node ) { Q_ASSERT( loaded ); char *name = vlc_object_get_name( p_node ); if ( !EMPTY_STR( name ) ) loaded->insert( QString( name ) ); free( name ); vlc_list_t *l = vlc_list_children( p_node ); for( int i=0; i < l->i_count; i++ ) populateLoadedSet( loaded, l->p_values[i].p_object ); vlc_list_release( l ); }
/***************************************************************************** * ModuleConfigControl implementation *****************************************************************************/ ModuleConfigControl::ModuleConfigControl( vlc_object_t *p_this, module_config_t *p_item, HWND parent, HINSTANCE hInst, int * py_pos ) : ConfigControl( p_this, p_item, parent, hInst ) { vlc_list_t *p_list; module_t *p_parser; label = CreateWindow( _T("STATIC"), _FROMMB(p_item->psz_text), WS_CHILD | WS_VISIBLE | SS_LEFT, 5, *py_pos, 200, 15, parent, NULL, hInst, NULL ); *py_pos += 15 + 10; combo = CreateWindow( _T("COMBOBOX"), _T(""), WS_CHILD | WS_VISIBLE | CBS_AUTOHSCROLL | CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL, 20, *py_pos, 180, 5*15 + 6, parent, NULL, hInst, NULL); *py_pos += 15 + 10; /* build a list of available modules */ p_list = vlc_list_find( p_this, VLC_OBJECT_MODULE, FIND_ANYWHERE ); ComboBox_AddString( combo, _T("Default") ); ComboBox_SetItemData( combo, 0, (void *)NULL ); ComboBox_SetCurSel( combo, 0 ); //ComboBox_SetText( combo, _T("Default") ); for( int i_index = 0; i_index < p_list->i_count; i_index++ ) { p_parser = (module_t *)p_list->p_values[i_index].p_object ; if( !strcmp( p_parser->psz_capability, p_item->psz_type ) ) { ComboBox_AddString( combo, _FROMMB(p_parser->psz_longname) ); ComboBox_SetItemData( combo, i_index, (void*)p_parser->psz_object_name ); if( p_item->psz_value && !strcmp(p_item->psz_value, p_parser->psz_object_name) ) { ComboBox_SetCurSel( combo, i_index ); //ComboBox_SetText( combo, _FROMMB(p_parser->psz_longname) ); } } } vlc_list_release( p_list ); }
/***************************************************************************** * ModuleConfigControl implementation *****************************************************************************/ ModuleConfigControl::ModuleConfigControl( vlc_object_t *p_this, module_config_t *p_item, wxWindow *parent ) : ConfigControl( p_this, p_item, parent ) { vlc_list_t *p_list; module_t *p_parser; label = new wxStaticText(this, -1, wxU(p_item->psz_text)); combo = new wxComboBox( this, -1, wxL2U(p_item->psz_value), wxDefaultPosition, wxDefaultSize, 0, NULL, wxCB_READONLY | wxCB_SORT ); /* build a list of available modules */ p_list = vlc_list_find( p_this, VLC_OBJECT_MODULE, FIND_ANYWHERE ); combo->Append( wxU(_("Default")), (void *)NULL ); combo->SetSelection( 0 ); for( int i_index = 0; i_index < p_list->i_count; i_index++ ) { p_parser = (module_t *)p_list->p_values[i_index].p_object ; if( !strcmp( p_parser->psz_capability, p_item->psz_type ) ) { combo->Append( wxU(p_parser->psz_longname), p_parser->psz_object_name ); if( p_item->psz_value && !strcmp(p_item->psz_value, p_parser->psz_object_name) ) combo->SetValue( wxU(p_parser->psz_longname) ); } } vlc_list_release( p_list ); combo->SetToolTip( wxU(p_item->psz_longtext) ); sizer->Add( label, 1, wxALIGN_CENTER_VERTICAL | wxALL, 5 ); sizer->Add( combo, 1, wxALIGN_CENTER_VERTICAL | wxALL, 5 ); sizer->Layout(); this->SetSizerAndFit( sizer ); }
/***************************************************************************** * PrefsTreeCtrl class definition. *****************************************************************************/ PrefsTreeCtrl::PrefsTreeCtrl( intf_thread_t *_p_intf, PrefsDialog *_p_prefs_dialog, HWND hwnd, HINSTANCE hInst ) { vlc_list_t *p_list; module_t *p_module; module_config_t *p_item; int i_index; INITCOMMONCONTROLSEX iccex; RECT rcClient; TVITEM tvi = {0}; TVINSERTSTRUCT tvins = {0}; HTREEITEM hPrev; size_t i_capability_count = 0; size_t i_child_index; HTREEITEM capability_item; /* Initializations */ p_intf = _p_intf; p_prefs_dialog = _p_prefs_dialog; b_advanced = VLC_FALSE; /* Create a tree view */ // Initialize the INITCOMMONCONTROLSEX structure. iccex.dwSize = sizeof( INITCOMMONCONTROLSEX ); iccex.dwICC = ICC_TREEVIEW_CLASSES; // Registers Statusbar control classes from the common control dll InitCommonControlsEx( &iccex ); // Get the client area rect to put the tv in GetClientRect(hwnd, &rcClient); // Create the tree-view control. hwndTV = CreateWindowEx( 0, WC_TREEVIEW, NULL, WS_VISIBLE | WS_CHILD | WS_BORDER | TVS_HASLINES | TVS_LINESATROOT | TVS_HASBUTTONS, 5, 10 + 2*(15 + 10) + 105 + 5, rcClient.right - 5 - 5, 6*15, hwnd, NULL, hInst, NULL ); tvi.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM; /* List the plugins */ p_list = vlc_list_find( p_intf, VLC_OBJECT_MODULE, FIND_ANYWHERE ); if( !p_list ) return; /* * Build a tree of the main options */ ConfigTreeData *config_data = new ConfigTreeData; config_data->i_object_id = GENERAL_ID; config_data->psz_help = strdup("nothing");//strdup( GENERAL_HELP ); config_data->psz_section = strdup( GENERAL_TITLE ); tvi.pszText = _T("General settings"); tvi.cchTextMax = lstrlen(_T("General settings")); tvi.lParam = (long)config_data; tvins.item = tvi; tvins.hInsertAfter = TVI_FIRST; tvins.hParent = TVI_ROOT; // Add the item to the tree-view control. hPrev = (HTREEITEM) TreeView_InsertItem( hwndTV, &tvins); general_item = hPrev; 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" ) ) break; } if( i_index < p_list->i_count ) { /* 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 { switch( p_item->i_type ) { case CONFIG_HINT_CATEGORY: ConfigTreeData *config_data = new ConfigTreeData; config_data->psz_section = strdup( p_item->psz_text ); if( p_item->psz_longtext ) { config_data->psz_help = strdup( p_item->psz_longtext ); } else { config_data->psz_help = NULL; } config_data->i_object_id = p_module->i_object_id; /* Add the category to the tree */ // Set the text of the item. tvi.pszText = _FROMMB(p_item->psz_text); tvi.cchTextMax = _tcslen(tvi.pszText); tvi.lParam = (long)config_data; tvins.item = tvi; tvins.hInsertAfter = hPrev; tvins.hParent = general_item; //level 3 // Add the item to the tree-view control. hPrev = (HTREEITEM)TreeView_InsertItem( hwndTV, &tvins ); break; } } while( p_item->i_type != CONFIG_HINT_END && p_item++ ); TreeView_SortChildren( hwndTV, general_item, 0 ); } /* * Build a tree of all the plugins */ config_data = new ConfigTreeData; config_data->i_object_id = PLUGIN_ID; config_data->psz_help = strdup("nothing");//strdup( PLUGIN_HELP ); config_data->psz_section = strdup("nothing");//strdup( PLUGIN_TITLE ); tvi.pszText = _T("Modules"); tvi.cchTextMax = lstrlen(_T("Modules")); tvi.lParam = (long)config_data; tvins.item = tvi; tvins.hInsertAfter = TVI_LAST; tvins.hParent = TVI_ROOT; // Add the item to the tree-view control. hPrev = (HTREEITEM) TreeView_InsertItem( hwndTV, &tvins); plugins_item = hPrev; i_capability_count = 0; for( i_index = 0; i_index < p_list->i_count; i_index++ ) { i_child_index = 0; p_module = (module_t *)p_list->p_values[i_index].p_object; /* Exclude the main module */ if( !strcmp( p_module->psz_object_name, "main" ) ) continue; /* Exclude empty plugins (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; else p_item = p_module->p_config; if( !p_item ) continue; do { if( p_item->i_type & CONFIG_ITEM ) break; } while( p_item->i_type != CONFIG_HINT_END && p_item++ ); if( p_item->i_type == CONFIG_HINT_END ) continue; /* Find the capability child item */ /*long cookie; size_t i_child_index;*/ capability_item = TreeView_GetChild( hwndTV, plugins_item ); while( capability_item != 0 ) { TVITEM capability_tvi = {0}; TCHAR psz_text[256]; i_child_index++; capability_tvi.mask = TVIF_TEXT; capability_tvi.pszText = psz_text; capability_tvi.cchTextMax = 256; capability_tvi.hItem = capability_item; TreeView_GetItem( hwndTV, &capability_tvi ); if( !strcmp( _TOMB(capability_tvi.pszText), p_module->psz_capability ) ) break; capability_item = TreeView_GetNextSibling( hwndTV, capability_item ); } if( i_child_index == i_capability_count && p_module->psz_capability && *p_module->psz_capability ) { /* We didn't find it, add it */ ConfigTreeData *config_data = new ConfigTreeData; config_data->psz_section = strdup( GetCapabilityHelp( p_module->psz_capability , 1 ) ); config_data->psz_help = strdup( GetCapabilityHelp( p_module->psz_capability , 2 ) ); config_data->i_object_id = CAPABILITY_ID; tvi.pszText = _FROMMB(p_module->psz_capability); tvi.cchTextMax = _tcslen(tvi.pszText); tvi.lParam = (long)config_data; tvins.item = tvi; tvins.hInsertAfter = plugins_item; tvins.hParent = plugins_item;// level 3 // Add the item to the tree-view control. capability_item = (HTREEITEM) TreeView_InsertItem( hwndTV, &tvins); i_capability_count++; } /* Add the plugin to the tree */ ConfigTreeData *config_data = new ConfigTreeData; config_data->b_submodule = p_module->b_submodule; 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->psz_help = NULL; tvi.pszText = _FROMMB(p_module->psz_object_name); tvi.cchTextMax = _tcslen(tvi.pszText); tvi.lParam = (long)config_data; tvins.item = tvi; tvins.hInsertAfter = capability_item; tvins.hParent = capability_item;// level 4 // Add the item to the tree-view control. TreeView_InsertItem( hwndTV, &tvins ); } /* Sort all this mess */ /*long cookie; size_t i_child_index;*/ TreeView_SortChildren( hwndTV, plugins_item, 0 ); capability_item = TreeView_GetChild( hwndTV, plugins_item ); while( capability_item != 0 ) { TreeView_SortChildren( hwndTV, capability_item, 0 ); capability_item = TreeView_GetNextSibling( hwndTV, capability_item ); } /* Clean-up everything */ vlc_list_release( p_list ); TreeView_Expand( hwndTV, general_item, TVE_EXPANDPARTIAL |TVE_EXPAND ); }