/* Updates the PrefsItemData loaded status to reflect currently * running modules */ void PrefsTree::updateLoadedStatus( QTreeWidgetItem *item = NULL, QSet<QString> *loaded = NULL ) { bool b_release = false; if( loaded == NULL ) { vlc_object_t *p_root = VLC_OBJECT( p_intf->p_libvlc ); loaded = new QSet<QString>(); populateLoadedSet( loaded, p_root ); b_release = true; } if ( item == NULL ) { for( int i = 0 ; i < topLevelItemCount(); i++ ) updateLoadedStatus( topLevelItem( i ), loaded ); } else { PrefsItemData *data = item->data( 0, Qt::UserRole ) .value<PrefsItemData *>(); data->b_loaded = loaded->contains( QString( data->psz_shortcut ) ); for( int i = 0; i < item->childCount(); i++ ) updateLoadedStatus( item->child( i ), loaded ); } if ( b_release ) delete loaded; }
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 ); size_t count = 0, size; vlc_object_t **tab = NULL; do { delete[] tab; size = count; tab = new vlc_object_t *[size]; count = vlc_list_children(p_node, tab, size); } while (size < count); for (size_t i = 0; i < count ; i++) { populateLoadedSet( loaded, tab[i] ); vlc_object_release(tab[i]); } delete[] tab; }
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 ); }