[vlc-devel] commit: Qt4: move the selector from View/Model to QTreeWidget ( Jean-Baptiste Kempf )
git version control
git at videolan.org
Mon Sep 7 00:04:55 CEST 2009
vlc | branch: master | Jean-Baptiste Kempf <jb at videolan.org> | Wed Sep 2 00:46:34 2009 +0200| [0fb61d20ed442d49e8e98f15ff5a5fd44633792f] | committer: Jean-Baptiste Kempf
Qt4: move the selector from View/Model to QTreeWidget
The idea behind this is to simplify the playlist_model and have a better SD control.
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=0fb61d20ed442d49e8e98f15ff5a5fd44633792f
---
modules/gui/qt4/components/playlist/panels.hpp | 6 ++-
modules/gui/qt4/components/playlist/playlist.cpp | 13 +++--
modules/gui/qt4/components/playlist/playlist.hpp | 2 +-
modules/gui/qt4/components/playlist/selector.cpp | 55 +++++++++++++++-----
modules/gui/qt4/components/playlist/selector.hpp | 10 +++-
.../gui/qt4/components/playlist/standardpanel.cpp | 24 +++++---
6 files changed, 77 insertions(+), 33 deletions(-)
diff --git a/modules/gui/qt4/components/playlist/panels.hpp b/modules/gui/qt4/components/playlist/panels.hpp
index 4654b09..d949c40 100644
--- a/modules/gui/qt4/components/playlist/panels.hpp
+++ b/modules/gui/qt4/components/playlist/panels.hpp
@@ -35,6 +35,8 @@
#include <QWidget>
#include <QString>
+#include <vlc_playlist.h>
+
class QSignalMapper;
class QTreeView;
class PLModel;
@@ -56,6 +58,7 @@ protected:
QFrame *parent;
public slots:
virtual void setRoot( int ) = 0;
+ virtual void setRoot( playlist_item_t * ) = 0;
};
@@ -79,6 +82,7 @@ private:
public slots:
void removeItem( int );
virtual void setRoot( int );
+ virtual void setRoot( playlist_item_t * );
private slots:
void deleteSelection();
void handleExpansion( const QModelIndex& );
@@ -87,7 +91,7 @@ private slots:
void gotoPlayingItem();
void doPopup( QModelIndex index, QPoint point );
void search( const QString& searchText );
- void setCurrentRootId( int );
+ void setCurrentRootId( playlist_item_t * );
void popupAdd();
void popupSelectColumn( QPoint );
void toggleColumnShown( int );
diff --git a/modules/gui/qt4/components/playlist/playlist.cpp b/modules/gui/qt4/components/playlist/playlist.cpp
index 4ae5a30..7851073 100644
--- a/modules/gui/qt4/components/playlist/playlist.cpp
+++ b/modules/gui/qt4/components/playlist/playlist.cpp
@@ -77,20 +77,21 @@ PlaylistWidget::PlaylistWidget( intf_thread_t *_p_i ) : p_intf ( _p_i )
rightPanel = new StandardPLPanel( this, p_intf, THEPL, p_root );
/* Connect the activation of the selector to a redefining of the PL */
- CONNECT( selector, activated( int ), rightPanel, setRoot( int ) );
+ CONNECT( selector, activated( playlist_item_t * ),
+ rightPanel, setRoot( playlist_item_t * ) );
/* Connect the activated() to the rootChanged() signal
This will be used by StandardPLPanel to setCurrentRootId, that will
change the label of the addButton */
- connect( selector, SIGNAL( activated( int ) ),
- this, SIGNAL( rootChanged( int ) ) );
+ connect( selector, SIGNAL( activated( playlist_item_t * ) ),
+ this, SIGNAL( rootChanged( playlist_item_t * ) ) );
/* Forward removal requests from the selector to the main panel */
- CONNECT( qobject_cast<PLSelector *>( selector )->model,
+/* CONNECT( qobject_cast<PLSelector *>( selector )->model,
shouldRemove( int ),
- qobject_cast<StandardPLPanel *>( rightPanel ), removeItem( int ) );
+ qobject_cast<StandardPLPanel *>( rightPanel ), removeItem( int ) ); */
- emit rootChanged( p_root->i_id );
+ emit rootChanged( p_root );
/* Add the two sides of the QSplitter */
addWidget( leftW );
diff --git a/modules/gui/qt4/components/playlist/playlist.hpp b/modules/gui/qt4/components/playlist/playlist.hpp
index ee3dad6..38270e6 100644
--- a/modules/gui/qt4/components/playlist/playlist.hpp
+++ b/modules/gui/qt4/components/playlist/playlist.hpp
@@ -62,7 +62,7 @@ protected:
virtual void closeEvent( QCloseEvent * );
signals:
- void rootChanged( int );
+ void rootChanged( playlist_item_t *);
};
class ArtLabel : public CoverArtLabel
diff --git a/modules/gui/qt4/components/playlist/selector.cpp b/modules/gui/qt4/components/playlist/selector.cpp
index 22cad94..4063221 100644
--- a/modules/gui/qt4/components/playlist/selector.cpp
+++ b/modules/gui/qt4/components/playlist/selector.cpp
@@ -25,30 +25,36 @@
# include "config.h"
#endif
+#include <assert.h>
+
#include "components/playlist/selector.hpp"
#include "qt4.hpp"
#include <QVBoxLayout>
#include <QHeaderView>
-#include <QTreeView>
+#include <QTreeWidget>
+
+#include <vlc_playlist.h>
PLSelector::PLSelector( QWidget *p, intf_thread_t *_p_intf ) : QWidget( p ), p_intf(_p_intf)
{
- model = new PLModel( THEPL, p_intf, THEPL->p_root_category, 1, this );
- view = new QTreeView( 0 );
+// model = new PLModel( THEPL, p_intf, THEPL->p_root_category, 1, this );
+ view = new QTreeWidget;
view->setIconSize( QSize( 24,24 ) );
- view->setAlternatingRowColors( true );
+// view->setAlternatingRowColors( true );
view->setIndentation( 0 );
view->header()->hide();
- view->setModel( model );
+// view->setModel( model );
view->setAcceptDrops(true);
view->setDropIndicatorShown(true);
- CONNECT( view, activated( const QModelIndex& ),
- this, setSource( const QModelIndex& ) );
- CONNECT( view, clicked( const QModelIndex& ),
- this, setSource( const QModelIndex& ) );
+
+ createItems();
+ CONNECT( view, itemActivated( QTreeWidgetItem *, int ),
+ this, setSource( QTreeWidgetItem *) );
+ CONNECT( view, itemClicked( QTreeWidgetItem *, int ),
+ this, setSource( QTreeWidgetItem *) );
QVBoxLayout *layout = new QVBoxLayout();
layout->setSpacing( 0 ); layout->setMargin( 0 );
@@ -56,15 +62,38 @@ PLSelector::PLSelector( QWidget *p, intf_thread_t *_p_intf ) : QWidget( p ), p_i
setLayout( layout );
/* select the first item */
- view->setCurrentIndex( model->index( 0, 0, QModelIndex() ) );
+// view->setCurrentIndex( model->index( 0, 0, QModelIndex() ) );
}
-void PLSelector::setSource( const QModelIndex &index )
+void PLSelector::setSource( QTreeWidgetItem *item )
{
- if( model )
- emit activated( model->itemId( index ) );
+ if( item )
+ {
+ playlist_item_t *pl_item =
+ item->data( 0, Qt::UserRole ).value<playlist_item_t *>();
+ emit activated( pl_item );
+ }
}
+void PLSelector::createItems()
+{
+ assert( view );
+ QTreeWidgetItem *pl = new QTreeWidgetItem( view );
+ pl->setText( 0, qtr( "Playlist" ) );
+ pl->setData( 0, Qt::UserRole, QVariant::fromValue( THEPL->p_local_category ) );
+/* QTreeWidgetItem *empty = new QTreeWidgetItem( view );
+ empty->setFlags(Qt::NoItemFlags);
+*/
+ QTreeWidgetItem *lib = new QTreeWidgetItem( view );
+ lib->setText( 0, qtr( "Library" ) );
+ lib->setData( 0, Qt::UserRole, QVariant::fromValue( THEPL->p_ml_category ) );
+/*
+ QTreeWidgetItem *empty2 = new QTreeWidgetItem( view );
+ empty2->setFlags(Qt::NoItemFlags);*/
+
+
+
+}
PLSelector::~PLSelector()
{
}
diff --git a/modules/gui/qt4/components/playlist/selector.hpp b/modules/gui/qt4/components/playlist/selector.hpp
index 63a514e..f496dd9 100644
--- a/modules/gui/qt4/components/playlist/selector.hpp
+++ b/modules/gui/qt4/components/playlist/selector.hpp
@@ -31,10 +31,12 @@
#include "components/playlist/playlist_model.hpp"
#include <QWidget>
+#include <QTreeWidgetItem>
-class QTreeView;
+class QTreeWidget;
class PlaylistWidget;
+Q_DECLARE_METATYPE( playlist_item_t *);
class PLSelector: public QWidget
{
Q_OBJECT;
@@ -46,11 +48,13 @@ protected:
friend class PlaylistWidget;
private:
intf_thread_t *p_intf;
- QTreeView *view;
+ QTreeWidget *view;
+ void createItems();
private slots:
- void setSource( const QModelIndex& );
+ void setSource( QTreeWidgetItem *item );
signals:
void activated( int );
+ void activated( playlist_item_t * );
void shouldRemove( int );
};
diff --git a/modules/gui/qt4/components/playlist/standardpanel.cpp b/modules/gui/qt4/components/playlist/standardpanel.cpp
index d7cabd4..5ecaf30 100644
--- a/modules/gui/qt4/components/playlist/standardpanel.cpp
+++ b/modules/gui/qt4/components/playlist/standardpanel.cpp
@@ -107,7 +107,8 @@ StandardPLPanel::StandardPLPanel( PlaylistWidget *_parent,
this, handleExpansion( const QModelIndex& ) );
currentRootId = -1;
- CONNECT( parent, rootChanged( int ), this, setCurrentRootId( int ) );
+ CONNECT( parent, rootChanged( playlist_item_t * ),
+ this, setCurrentRootId( playlist_item_t * ) );
/* Buttons configuration */
QHBoxLayout *buttons = new QHBoxLayout;
@@ -219,19 +220,16 @@ void StandardPLPanel::handleExpansion( const QModelIndex& index )
view->scrollTo( index );
}
-void StandardPLPanel::setCurrentRootId( int _new )
+void StandardPLPanel::setCurrentRootId( playlist_item_t *p_item )
{
- currentRootId = _new;
- if( currentRootId == THEPL->p_local_category->i_id ||
- currentRootId == THEPL->p_local_onelevel->i_id )
+ if( p_item == THEPL->p_local_category ||
+ p_item == THEPL->p_local_onelevel )
{
addButton->setEnabled( true );
addButton->setToolTip( qtr(I_PL_ADDPL) );
}
- else if( ( THEPL->p_ml_category &&
- currentRootId == THEPL->p_ml_category->i_id ) ||
- ( THEPL->p_ml_onelevel &&
- currentRootId == THEPL->p_ml_onelevel->i_id ) )
+ else if( ( THEPL->p_ml_category && p_item == THEPL->p_ml_category) ||
+ ( THEPL->p_ml_onelevel && p_item == THEPL->p_ml_onelevel ) )
{
addButton->setEnabled( true );
addButton->setToolTip( qtr(I_PL_ADDML) );
@@ -310,6 +308,14 @@ void StandardPLPanel::setRoot( int i_root_id )
playlist_item_t *p_item = playlist_ItemGetById( THEPL, i_root_id );
assert( p_item );
p_item = playlist_GetPreferredNode( THEPL, p_item );
+ setRoot( p_item );
+ QPL_UNLOCK;
+}
+
+void StandardPLPanel::setRoot( playlist_item_t *p_item )
+{
+ QPL_LOCK;
+ p_item = playlist_GetPreferredNode( THEPL, p_item );
assert( p_item );
QPL_UNLOCK;
More information about the vlc-devel
mailing list