mirror of
https://code.videolan.org/videolan/vlc
synced 2024-10-03 01:31:53 +02:00
Qt: efficient iconView browsing demands a specialized playlist event
This commit is contained in:
parent
6a4273c261
commit
b59984266a
@ -130,8 +130,8 @@ StandardPLPanel::StandardPLPanel( PlaylistWidget *_parent,
|
||||
|
||||
getSettings()->endGroup();
|
||||
|
||||
CONNECT( THEMIM, inputChanged( input_thread_t * ),
|
||||
this, handleInputChange( input_thread_t * ) );
|
||||
CONNECT( THEMIM, leafBecameParent( input_item_t *),
|
||||
this, browseInto( input_item_t * ) );
|
||||
|
||||
CONNECT( model, currentChanged( const QModelIndex& ),
|
||||
this, handleExpansion( const QModelIndex& ) );
|
||||
@ -410,7 +410,7 @@ void StandardPLPanel::wheelEvent( QWheelEvent *e )
|
||||
|
||||
void StandardPLPanel::activate( const QModelIndex &index )
|
||||
{
|
||||
last_activated_id = model->itemId( index );
|
||||
last_activated_id = model->getItem( index )->inputItem()->i_id;
|
||||
if( model->hasChildren( index ) )
|
||||
{
|
||||
if( currentView == iconView ) {
|
||||
@ -425,26 +425,22 @@ void StandardPLPanel::activate( const QModelIndex &index )
|
||||
}
|
||||
}
|
||||
|
||||
void StandardPLPanel::handleInputChange( input_thread_t *p_input_thread )
|
||||
void StandardPLPanel::browseInto( input_item_t *p_input )
|
||||
{
|
||||
if( currentView != iconView ) return;
|
||||
|
||||
input_item_t *p_input_item = input_GetItem( p_input_thread );
|
||||
if( !p_input_item ) return;
|
||||
if( p_input->i_id != last_activated_id ) return;
|
||||
|
||||
playlist_Lock( THEPL );
|
||||
|
||||
playlist_item_t *p_item = playlist_ItemGetByInput( THEPL, p_input_item );
|
||||
playlist_item_t *p_item = playlist_ItemGetByInput( THEPL, p_input );
|
||||
assert( p_item != NULL );
|
||||
|
||||
if( p_item && p_item->p_parent &&
|
||||
p_item->p_parent->i_id == last_activated_id )
|
||||
{
|
||||
QModelIndex index = model->index( p_item->p_parent->i_id, 0 );
|
||||
if( currentView == iconView ) {
|
||||
QModelIndex index = model->index( p_item->i_id, 0 );
|
||||
iconView->setRootIndex( index );
|
||||
//title->setText( index.data().toString() );
|
||||
locationBar->setIndex( index );
|
||||
last_activated_id = p_item->i_id;
|
||||
}
|
||||
last_activated_id = p_item->pp_children[0]->p_input->i_id;
|
||||
|
||||
playlist_Unlock( THEPL );
|
||||
}
|
||||
|
@ -107,7 +107,7 @@ private slots:
|
||||
void showView( int );
|
||||
void cycleViews();
|
||||
void activate( const QModelIndex & );
|
||||
void handleInputChange( input_thread_t * );
|
||||
void browseInto( input_item_t * );
|
||||
};
|
||||
|
||||
class LocationBar : public QToolBar
|
||||
|
@ -37,6 +37,8 @@
|
||||
|
||||
static int ItemChanged( vlc_object_t *, const char *,
|
||||
vlc_value_t, vlc_value_t, void * );
|
||||
static int LeafToParent( vlc_object_t *, const char *,
|
||||
vlc_value_t, vlc_value_t, void * );
|
||||
static int PLItemChanged( vlc_object_t *, const char *,
|
||||
vlc_value_t, vlc_value_t, void * );
|
||||
static int PLItemAppended( vlc_object_t *, const char *,
|
||||
@ -905,6 +907,7 @@ MainInputManager::MainInputManager( intf_thread_t *_p_intf )
|
||||
var_AddCallback( THEPL, "item-change", ItemChanged, im );
|
||||
var_AddCallback( THEPL, "item-current", PLItemChanged, this );
|
||||
var_AddCallback( THEPL, "activity", PLItemChanged, this );
|
||||
var_AddCallback( THEPL, "leaf-to-parent", LeafToParent, this );
|
||||
var_AddCallback( THEPL, "playlist-item-append", PLItemAppended, this );
|
||||
var_AddCallback( THEPL, "playlist-item-deleted", PLItemRemoved, this );
|
||||
var_AddCallback( THEPL, "random", RandomChanged, this );
|
||||
@ -947,6 +950,7 @@ MainInputManager::~MainInputManager()
|
||||
|
||||
var_DelCallback( THEPL, "activity", PLItemChanged, this );
|
||||
var_DelCallback( THEPL, "item-change", ItemChanged, im );
|
||||
var_DelCallback( THEPL, "leaf-to-parent", LeafToParent, this );
|
||||
|
||||
var_DelCallback( THEPL, "item-current", PLItemChanged, this );
|
||||
var_DelCallback( THEPL, "playlist-item-append", PLItemAppended, this );
|
||||
@ -972,6 +976,7 @@ void MainInputManager::customEvent( QEvent *event )
|
||||
int type = event->type();
|
||||
|
||||
PLEvent *plEv;
|
||||
IMEvent *imEv;
|
||||
|
||||
// msg_Dbg( p_intf, "New MainIM Event of type: %i", type );
|
||||
switch( type )
|
||||
@ -997,6 +1002,9 @@ void MainInputManager::customEvent( QEvent *event )
|
||||
case RepeatChanged_Type:
|
||||
notifyRepeatLoop();
|
||||
return;
|
||||
case LeafToParent_Type:
|
||||
imEv = static_cast<IMEvent*>( event );
|
||||
emit leafBecameParent( imEv->p_item );
|
||||
default:
|
||||
if( type != ItemChanged_Type ) return;
|
||||
}
|
||||
@ -1135,6 +1143,17 @@ static int PLItemChanged( vlc_object_t *p_this, const char *psz_var,
|
||||
return VLC_SUCCESS;
|
||||
}
|
||||
|
||||
static int LeafToParent( vlc_object_t *p_this, const char *psz_var,
|
||||
vlc_value_t oldval, vlc_value_t newval, void *param )
|
||||
{
|
||||
MainInputManager *mim = (MainInputManager*)param;
|
||||
|
||||
IMEvent *event = new IMEvent( LeafToParent_Type,
|
||||
static_cast<input_item_t*>( newval.p_address ) );
|
||||
QApplication::postEvent( mim, event );
|
||||
return VLC_SUCCESS;
|
||||
}
|
||||
|
||||
static int VolumeChanged( vlc_object_t *p_this, const char *psz_var,
|
||||
vlc_value_t oldval, vlc_value_t newval, void *param )
|
||||
{
|
||||
|
@ -61,6 +61,7 @@ enum {
|
||||
RandomChanged_Type,
|
||||
LoopChanged_Type,
|
||||
RepeatChanged_Type,
|
||||
LeafToParent_Type,
|
||||
/* SignalChanged_Type, */
|
||||
|
||||
FullscreenControlToggle_Type = QEvent::User + IMEventType + 20,
|
||||
@ -77,6 +78,7 @@ enum { NORMAL, /* loop: 0, repeat: 0 */
|
||||
class IMEvent : public QEvent
|
||||
{
|
||||
friend class InputManager;
|
||||
friend class MainInputManager;
|
||||
public:
|
||||
IMEvent( int type, input_item_t *p_input = NULL )
|
||||
: QEvent( (QEvent::Type)(type) )
|
||||
@ -288,6 +290,7 @@ signals:
|
||||
void playlistItemRemoved( int itemId );
|
||||
void randomChanged( bool );
|
||||
void repeatLoopChanged( int );
|
||||
void leafBecameParent( input_item_t * );
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -279,6 +279,7 @@ static void VariablesInit( playlist_t *p_playlist )
|
||||
var_SetBool( p_playlist, "intf-change", true );
|
||||
|
||||
var_Create( p_playlist, "item-change", VLC_VAR_ADDRESS );
|
||||
var_Create( p_playlist, "leaf-to-parent", VLC_VAR_ADDRESS );
|
||||
|
||||
var_Create( p_playlist, "playlist-item-deleted", VLC_VAR_INTEGER );
|
||||
var_SetInteger( p_playlist, "playlist-item-deleted", -1 );
|
||||
|
@ -626,6 +626,7 @@ static playlist_item_t *ItemToNode( playlist_t *p_playlist,
|
||||
pl_priv(p_playlist)->b_reset_currently_playing = true;
|
||||
vlc_cond_signal( &pl_priv(p_playlist)->signal );
|
||||
var_SetAddress( p_playlist, "item-change", p_item_in_category->p_input );
|
||||
var_SetAddress( p_playlist, "leaf-to-parent", p_item_in_category->p_input );
|
||||
PL_UNLOCK_IF( !b_locked );
|
||||
return p_item_in_category;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user