From 4f30340a1ea3b3caa4d2d4d07318a7a8a9a2a3f9 Mon Sep 17 00:00:00 2001 From: Ludovic Fauvet Date: Wed, 2 Jun 2010 11:00:29 +0200 Subject: [PATCH] epg: add an overlay containing the channels list Signed-off-by: Jean-Baptiste Kempf --- 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 cf3c91a7a1..5af6f93382 100644 --- a/modules/gui/qt4/components/epg/EPGView.cpp +++ b/modules/gui/qt4/components/epg/EPGView.cpp @@ -26,19 +26,41 @@ #include #include +#include +#include #include +#include 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( itemList.at( i ) ); + EPGItem* item = dynamic_cast( 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( list.at( i ) ); + EPGItem* item = dynamic_cast( 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 2fd66fc146..ef8d76debd 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 -- 2.39.2