class QTreeView;
class PLModel;
+class QPushButton;
/**
* \todo Share a single model between views using a filterproxy
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
#include "playlist_model.hpp"
#include "components/playlist/panels.hpp"
#include <QTreeView>
+#include <QPushButton>
+#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QHeaderView>
#include "qt4.hpp"
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 );
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 );
}
#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()
class PLSelector;
class PLPanel;
-class PlaylistDialog : public QVLCFrame
+class PlaylistDialog : public QVLCMW
{
Q_OBJECT;
public:
ui.hboxLayout->insertWidget( 0, slider );
ui.prevButton->setText( "" );
ui.nextButton->setText( "" );
- ui.playButton->setText( "" );
- ui.stopButton->setText( "" );
+ ui.playButton->setText( "" );
+ ui.stopButton->setText( "" );
ui.prevButton->setIcon( QIcon( ":/pixmaps/previous.png" ) );
ui.nextButton->setIcon( QIcon( ":/pixmaps/next.png" ) );
ui.playButton->setIcon( QIcon( ":/pixmaps/play.png" ) );
SLOT( simpleAppendDialog() ) );
manageMenu->addSeparator();
manageMenu->addMenu( SDMenu( p_intf ) );
+
+ bar->addMenu( manageMenu );
}
QMenu *QVLCMenu::SDMenu( intf_thread_t *p_intf )
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 )
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();
}
int i_items_to_append;
void Rebuild();
void rebuildRoot( playlist_item_t * );
+ bool hasRandom(); bool hasLoop(); bool hasRepeat();
private:
void addCallbacks();
void delCallbacks();
int i_cached_input_id;
public slots:
void activateItem( const QModelIndex &index );
+ void setRandom( bool );
+ void setLoop( bool );
+ void setRepeat( bool );
friend class PLItem;
};
QVLCFrame::fixStyle( this );
}
virtual ~QVLCMW() {};
+ void toggleVisible()
+ {
+ if( isVisible() ) hide();
+ else show();
+ }
protected:
intf_thread_t *p_intf;
QSize mainSize;
{
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 )