Commit a20ffdd4 authored by Clément Stenac's avatar Clément Stenac

* Add random/loop buttons

* Improve hilighting
parent fa2f997e
......@@ -31,6 +31,7 @@
class QTreeView;
class PLModel;
class QPushButton;
/**
* \todo Share a single model between views using a filterproxy
......@@ -62,10 +63,13 @@ public:
private:
PLModel *model;
QTreeView *view;
QPushButton *repeatButton , *randomButton;
public slots:
virtual void setRoot( int );
private slots:
void handleExpansion( const QModelIndex& );
void toggleRandom();
void toggleRepeat();
};
#endif
......@@ -24,6 +24,8 @@
#include "playlist_model.hpp"
#include "components/playlist/panels.hpp"
#include <QTreeView>
#include <QPushButton>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QHeaderView>
#include "qt4.hpp"
......@@ -35,7 +37,6 @@ StandardPLPanel::StandardPLPanel( QWidget *_parent, intf_thread_t *_p_intf,
PLPanel( _parent, _p_intf )
{
model = new PLModel( p_playlist, p_root, -1, this );
model->Rebuild();
view = new QTreeView( 0 );
view->setModel(model);
view->header()->resizeSection( 0, 300 );
......@@ -47,24 +48,66 @@ StandardPLPanel::StandardPLPanel( QWidget *_parent, intf_thread_t *_p_intf,
SIGNAL( dataChanged( const QModelIndex&, const QModelIndex& ) ),
this, SLOT( handleExpansion( const QModelIndex& ) ) );
model->Rebuild();
QVBoxLayout *layout = new QVBoxLayout();
layout->setSpacing( 0 ); layout->setMargin( 0 );
QHBoxLayout *buttons = new QHBoxLayout();
repeatButton = new QPushButton( this );
buttons->addWidget( repeatButton );
randomButton = new QPushButton( this );
buttons->addWidget( randomButton );
if( model->hasRandom() ) randomButton->setText( qtr( "Random" ) );
else randomButton->setText( qtr( "No random" ) );
if( model->hasRepeat() ) repeatButton->setText( qtr( "Repeat One" ) );
else if( model->hasLoop() ) repeatButton->setText( qtr( "Repeat All" ) );
else repeatButton->setText( qtr( "No Repeat" ) );
connect( repeatButton, SIGNAL( clicked() ), this, SLOT( toggleRepeat() ));
connect( randomButton, SIGNAL( clicked() ), this, SLOT( toggleRandom() ));
layout->addWidget( view );
layout->addLayout( buttons );
setLayout( layout );
}
void StandardPLPanel::toggleRepeat()
{
if( model->hasRepeat() )
{
model->setRepeat( false ); model->setLoop( true );
repeatButton->setText( qtr( "Repeat All" ) );
}
else if( model->hasLoop() )
{
model->setRepeat( false ) ; model->setLoop( false );
repeatButton->setText( qtr( "No Repeat" ) );
}
else
{
model->setRepeat( true );
repeatButton->setText( qtr( "Repeat One" ) );
}
}
void StandardPLPanel::toggleRandom()
{
bool prev = model->hasRandom();
model->setRandom( !prev );
randomButton->setText( prev ? qtr( "No Random" ) : qtr( "Random" ) );
}
void StandardPLPanel::handleExpansion( const QModelIndex &index )
{
fprintf( stderr, "Checking expansion\n" );
QModelIndex parent;
if( model->isCurrent( index ) )
{
fprintf( stderr, "It is the current one\n" ) ;
parent = index;
while( parent.isValid() )
{
fprintf( stderr, "Expanding %s\n",
(model->data( parent, Qt::DisplayRole )).toString().toUtf8().data() );
view->setExpanded( parent, true );
parent = model->parent( parent );
}
......
......@@ -27,25 +27,30 @@
#include "components/playlist/panels.hpp"
#include "components/playlist/selector.hpp"
#include <QHBoxLayout>
#include "menus.hpp"
PlaylistDialog *PlaylistDialog::instance = NULL;
PlaylistDialog::PlaylistDialog( intf_thread_t *_p_intf ) : QVLCFrame( _p_intf )
PlaylistDialog::PlaylistDialog( intf_thread_t *_p_intf ) : QVLCMW( _p_intf )
{
setWindowTitle( qtr( "Playlist" ) );
selector = new PLSelector( this, p_intf, THEPL );
selector->setMaximumWidth( 150 );
QWidget *main = new QWidget( this );
setCentralWidget( main );
QVLCMenu::createPlMenuBar( menuBar(), p_intf );
rightPanel = qobject_cast<PLPanel *>(new StandardPLPanel( this, p_intf,
THEPL, THEPL->p_local_category ) );
selector = new PLSelector( centralWidget(), p_intf, THEPL );
selector->setMaximumWidth( 140 );
rightPanel = qobject_cast<PLPanel *>(new StandardPLPanel( centralWidget(),
p_intf, THEPL, THEPL->p_local_category ) );
connect( selector, SIGNAL( activated( int ) ),
rightPanel, SLOT( setRoot( int ) ) );
QHBoxLayout *layout = new QHBoxLayout();
layout->addWidget( selector, 0 );
layout->addWidget( rightPanel, 10 );
centralWidget()->setLayout( layout );
readSettings( "playlist", QSize( 600,300 ) );
setLayout( layout );
}
PlaylistDialog::~PlaylistDialog()
......
......@@ -29,7 +29,7 @@
class PLSelector;
class PLPanel;
class PlaylistDialog : public QVLCFrame
class PlaylistDialog : public QVLCMW
{
Q_OBJECT;
public:
......
......@@ -135,6 +135,8 @@ void QVLCMenu::createPlMenuBar( QMenuBar *bar, intf_thread_t *p_intf )
SLOT( simpleAppendDialog() ) );
manageMenu->addSeparator();
manageMenu->addMenu( SDMenu( p_intf ) );
bar->addMenu( manageMenu );
}
QMenu *QVLCMenu::SDMenu( intf_thread_t *p_intf )
......
......@@ -325,6 +325,36 @@ int PLModel::rowCount(const QModelIndex &parent) const
return parentItem->childCount();
}
/************************* General playlist status ***********************/
bool PLModel::hasRandom()
{
if( var_GetBool( p_playlist, "random" ) ) return true;
return false;
}
bool PLModel::hasRepeat()
{
if( var_GetBool( p_playlist, "repeat" ) ) return true;
return false;
}
bool PLModel::hasLoop()
{
if( var_GetBool( p_playlist, "loop" ) ) return true;
return false;
}
void PLModel::setLoop( bool on )
{
var_SetBool( p_playlist, "loop", on ? VLC_TRUE:VLC_FALSE );
}
void PLModel::setRepeat( bool on )
{
var_SetBool( p_playlist, "repeat", on ? VLC_TRUE:VLC_FALSE );
}
void PLModel::setRandom( bool on )
{
var_SetBool( p_playlist, "random", on ? VLC_TRUE:VLC_FALSE );
}
/************************* Lookups *****************************/
PLItem *PLModel::FindById( PLItem *root, int i_id )
......@@ -467,12 +497,22 @@ void PLModel::Rebuild()
qDeleteAll( rootItem->children );
/* Recreate from root */
UpdateNodeChildren( rootItem );
if( p_playlist->status.p_item )
{
fprintf( stderr, "Playlist is playing" );
PLItem *currentItem = FindByInput( rootItem,
p_playlist->status.p_item->p_input->i_id );
if( currentItem )
{
fprintf( stderr, "Updating item\n" );
UpdateTreeItem( p_playlist->status.p_item, currentItem,
true, false );
}
}
PL_UNLOCK;
/* And signal the view */
emit layoutChanged();
/// \todo Force current item to be updated
addCallbacks();
}
......
......@@ -118,6 +118,7 @@ public:
int i_items_to_append;
void Rebuild();
void rebuildRoot( playlist_item_t * );
bool hasRandom(); bool hasLoop(); bool hasRepeat();
private:
void addCallbacks();
void delCallbacks();
......@@ -148,6 +149,9 @@ private:
int i_cached_input_id;
public slots:
void activateItem( const QModelIndex &index );
void setRandom( bool );
void setLoop( bool );
void setRepeat( bool );
friend class PLItem;
};
......
......@@ -130,6 +130,11 @@ public:
QVLCFrame::fixStyle( this );
}
virtual ~QVLCMW() {};
void toggleVisible()
{
if( isVisible() ) hide();
else show();
}
protected:
intf_thread_t *p_intf;
QSize mainSize;
......@@ -138,10 +143,8 @@ protected:
{
QSettings settings( "VideoLAN", "VLC" );
settings.beginGroup( name );
mainSize = settings.value( "size", defSize ).toSize();
QPoint npos = settings.value( "pos", QPoint( 0,0 ) ).toPoint();
if( npos.x() > 0 )
move( npos );
resize( settings.value( "size", defSize ).toSize() );
move( settings.value( "pos", QPoint( 0,0 ) ).toPoint() );
settings.endGroup();
}
void readSettings( QString name )
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment