Commit 4f30340a authored by Ludovic Fauvet's avatar Ludovic Fauvet Committed by Jean-Baptiste Kempf

epg: add an overlay containing the channels list

Signed-off-by: default avatarJean-Baptiste Kempf <jb@videolan.org>
parent 5cae846c
...@@ -26,19 +26,41 @@ ...@@ -26,19 +26,41 @@
#include <QDateTime> #include <QDateTime>
#include <QMatrix> #include <QMatrix>
#include <QPaintEvent>
#include <QScrollBar>
#include <QtDebug> #include <QtDebug>
#include <QGraphicsTextItem>
EPGView::EPGView( QWidget *parent ) : QGraphicsView( parent ) EPGView::EPGView( QWidget *parent ) : QGraphicsView( parent )
{ {
setContentsMargins( 0, 0, 0, 0 ); setContentsMargins( 0, 0, 0, 0 );
setFrameStyle( QFrame::NoFrame ); setFrameStyle( QFrame::NoFrame );
setAlignment( Qt::AlignLeft | Qt::AlignTop ); setAlignment( Qt::AlignLeft | Qt::AlignTop );
setViewportUpdateMode( QGraphicsView::FullViewportUpdate );
m_startTime = QDateTime::currentDateTime(); m_startTime = QDateTime::currentDateTime();
QGraphicsScene *EPGscene = new QGraphicsScene( this ); QGraphicsScene *EPGscene = new QGraphicsScene( this );
setScene( EPGscene ); 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 ) void EPGView::setScale( double scaleFactor )
...@@ -57,7 +79,8 @@ void EPGView::setStartTime( const QDateTime& startTime ) ...@@ -57,7 +79,8 @@ void EPGView::setStartTime( const QDateTime& startTime )
for ( int i = 0; i < itemList.count(); ++i ) 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 ) ); item->setStart( item->start().addSecs( diff ) );
} }
...@@ -75,7 +98,13 @@ const QDateTime& EPGView::startTime() ...@@ -75,7 +98,13 @@ const QDateTime& EPGView::startTime()
void EPGView::addEvent( EPGEvent* event ) void EPGView::addEvent( EPGEvent* event )
{ {
if ( !m_channels.contains( event->channelName ) ) if ( !m_channels.contains( event->channelName ) )
{
m_channels.append( 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 ); EPGItem* item = new EPGItem( this );
item->setChannel( m_channels.indexOf( event->channelName ) ); item->setChannel( m_channels.indexOf( event->channelName ) );
...@@ -123,7 +152,8 @@ void EPGView::updateDuration() ...@@ -123,7 +152,8 @@ void EPGView::updateDuration()
for ( int i = 0; i < list.count(); ++i ) 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() ); QDateTime itemEnd = item->start().addSecs( item->duration() );
if ( itemEnd > lastItem ) if ( itemEnd > lastItem )
...@@ -137,3 +167,8 @@ void EPGView::eventFocused( EPGEvent *ev ) ...@@ -137,3 +167,8 @@ void EPGView::eventFocused( EPGEvent *ev )
{ {
emit eventFocusedChanged( ev ); emit eventFocusedChanged( ev );
} }
void EPGView::sceneRectChanged( const QRectF& rect )
{
m_overlay->setRect( 0, 0, m_overlay->rect().width(), rect.height() );
}
...@@ -61,8 +61,14 @@ protected: ...@@ -61,8 +61,14 @@ protected:
int m_scaleFactor; int m_scaleFactor;
int m_duration; int m_duration;
private:
QGraphicsRectItem* m_overlay;
public slots: public slots:
void eventFocused( EPGEvent * ); void eventFocused( EPGEvent * );
private slots:
void updateOverlayPosition( int value );
void sceneRectChanged( const QRectF& rect );
}; };
#endif // EPGVIEW_H #endif // EPGVIEW_H
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