[vlc-commits] commit: epg: add an overlay containing the channels list (Ludovic Fauvet )

git at videolan.org git at videolan.org
Wed Jun 2 11:59:52 CEST 2010


vlc | branch: master | Ludovic Fauvet <etix at l0cal.com> | Wed Jun  2 11:00:29 2010 +0200| [4f30340a1ea3b3caa4d2d4d07318a7a8a9a2a3f9] | committer: Jean-Baptiste Kempf 

epg: add an overlay containing the channels list

Signed-off-by: Jean-Baptiste Kempf <jb at videolan.org>

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=4f30340a1ea3b3caa4d2d4d07318a7a8a9a2a3f9
---

 modules/gui/qt4/components/epg/EPGView.cpp |   39 ++++++++++++++++++++++++++-
 modules/gui/qt4/components/epg/EPGView.hpp |    6 ++++
 2 files changed, 43 insertions(+), 2 deletions(-)

diff --git a/modules/gui/qt4/components/epg/EPGView.cpp b/modules/gui/qt4/components/epg/EPGView.cpp
index cf3c91a..5af6f93 100644
--- a/modules/gui/qt4/components/epg/EPGView.cpp
+++ b/modules/gui/qt4/components/epg/EPGView.cpp
@@ -26,19 +26,41 @@
 
 #include <QDateTime>
 #include <QMatrix>
+#include <QPaintEvent>
+#include <QScrollBar>
 #include <QtDebug>
+#include <QGraphicsTextItem>
 
 EPGView::EPGView( QWidget *parent ) : QGraphicsView( parent )
 {
     setContentsMargins( 0, 0, 0, 0 );
     setFrameStyle( QFrame::NoFrame );
     setAlignment( Qt::AlignLeft | Qt::AlignTop );
+    setViewportUpdateMode( QGraphicsView::FullViewportUpdate );
 
     m_startTime = QDateTime::currentDateTime();
 
     QGraphicsScene *EPGscene = new QGraphicsScene( this );
 
     setScene( EPGscene );
+
+    connect( horizontalScrollBar(), SIGNAL( valueChanged(int) ),
+             this, SLOT( updateOverlayPosition(int) ) );
+
+    m_overlay = EPGscene->addRect( 0, 0, 100, 1, QPen(), QBrush( QColor( 40, 86, 255, 220 ) ) );
+    m_overlay->setFlag( QGraphicsItem::ItemIgnoresTransformations );
+    m_overlay->setZValue( 100 );
+
+    sceneRectChanged( scene()->sceneRect() );
+
+    connect( scene(), SIGNAL( sceneRectChanged(QRectF) ),
+             this, SLOT( sceneRectChanged(QRectF) ) );
+}
+
+void EPGView::updateOverlayPosition( int value )
+{
+    int pos = value * matrix().inverted().m11();
+    m_overlay->setPos( pos, 0 );
 }
 
 void EPGView::setScale( double scaleFactor )
@@ -57,7 +79,8 @@ void EPGView::setStartTime( const QDateTime& startTime )
 
     for ( int i = 0; i < itemList.count(); ++i )
     {
-        EPGItem* item = static_cast<EPGItem*>( itemList.at( i ) );
+        EPGItem* item = dynamic_cast<EPGItem*>( itemList.at( i ) );
+        if ( !item ) continue;
         item->setStart( item->start().addSecs( diff ) );
     }
 
@@ -75,7 +98,13 @@ const QDateTime& EPGView::startTime()
 void EPGView::addEvent( EPGEvent* event )
 {
     if ( !m_channels.contains( event->channelName ) )
+    {
         m_channels.append( event->channelName );
+        QGraphicsTextItem* channelTitle = new QGraphicsTextItem( event->channelName, m_overlay );
+        channelTitle->setZValue( 101 );
+        channelTitle->setPos( 0, m_channels.indexOf( event->channelName ) * TRACKS_HEIGHT );
+        channelTitle->setTextWidth( 100 );
+    }
 
     EPGItem* item = new EPGItem( this );
     item->setChannel( m_channels.indexOf( event->channelName ) );
@@ -123,7 +152,8 @@ void EPGView::updateDuration()
 
     for ( int i = 0; i < list.count(); ++i )
     {
-        EPGItem* item = static_cast<EPGItem*>( list.at( i ) );
+        EPGItem* item = dynamic_cast<EPGItem*>( list.at( i ) );
+        if ( !item ) continue;
         QDateTime itemEnd = item->start().addSecs( item->duration() );
 
         if ( itemEnd > lastItem )
@@ -137,3 +167,8 @@ void EPGView::eventFocused( EPGEvent *ev )
 {
     emit eventFocusedChanged( ev );
 }
+
+void EPGView::sceneRectChanged( const QRectF& rect )
+{
+    m_overlay->setRect( 0, 0, m_overlay->rect().width(), rect.height() );
+}
diff --git a/modules/gui/qt4/components/epg/EPGView.hpp b/modules/gui/qt4/components/epg/EPGView.hpp
index 2fd66fc..ef8d76d 100644
--- a/modules/gui/qt4/components/epg/EPGView.hpp
+++ b/modules/gui/qt4/components/epg/EPGView.hpp
@@ -61,8 +61,14 @@ protected:
     int             m_scaleFactor;
     int             m_duration;
 
+private:
+    QGraphicsRectItem* m_overlay;
+
 public slots:
     void eventFocused( EPGEvent * );
+private slots:
+    void updateOverlayPosition( int value );
+    void sceneRectChanged( const QRectF& rect );
 };
 
 #endif // EPGVIEW_H



More information about the vlc-commits mailing list