[vlc-commits] commit: Qt/EPG: Remove channels when they don't have any item. ( Adrien Maglo )
git at videolan.org
git at videolan.org
Wed Aug 11 19:23:21 CEST 2010
vlc/vlc-1.1 | branch: master | Adrien Maglo <magsoft at videolan.org> | Wed Aug 4 11:07:22 2010 +0200| [30c336461a10e97878cce4eca886e5d3c5688998] | committer: Jean-Baptiste Kempf
Qt/EPG: Remove channels when they don't have any item.
(cherry picked from commit 4b897bbb5eca8beac7fa2a092a94513b985f83b3)
Signed-off-by: Jean-Baptiste Kempf <jb at videolan.org>
> http://git.videolan.org/gitweb.cgi/vlc/vlc-1.1.git/?a=commit;h=30c336461a10e97878cce4eca886e5d3c5688998
---
modules/gui/qt4/components/epg/EPGItem.cpp | 7 ++++-
modules/gui/qt4/components/epg/EPGItem.hpp | 3 +-
modules/gui/qt4/components/epg/EPGView.cpp | 42 ++++++++++++++++++++++++++--
3 files changed, 47 insertions(+), 5 deletions(-)
diff --git a/modules/gui/qt4/components/epg/EPGItem.cpp b/modules/gui/qt4/components/epg/EPGItem.cpp
index ec2d1f9..e9e5935 100644
--- a/modules/gui/qt4/components/epg/EPGItem.cpp
+++ b/modules/gui/qt4/components/epg/EPGItem.cpp
@@ -111,7 +111,12 @@ int EPGItem::duration() const
return m_duration;
}
-void EPGItem::setChannel( int channelNb )
+int EPGItem::getChannelNb() const
+{
+ return m_channelNb;
+}
+
+void EPGItem::setChannelNb( int channelNb )
{
//qDebug() << "Channel" << channelNb;
m_channelNb = channelNb;
diff --git a/modules/gui/qt4/components/epg/EPGItem.hpp b/modules/gui/qt4/components/epg/EPGItem.hpp
index 04f9909..057ff39 100644
--- a/modules/gui/qt4/components/epg/EPGItem.hpp
+++ b/modules/gui/qt4/components/epg/EPGItem.hpp
@@ -44,8 +44,9 @@ public:
const QDateTime& start() const;
int duration() const;
+ int getChannelNb() const;
- void setChannel( int channelNb );
+ void setChannelNb( int channelNb );
void setStart( const QDateTime& start );
void setDuration( int duration );
void setName( const QString& name );
diff --git a/modules/gui/qt4/components/epg/EPGView.cpp b/modules/gui/qt4/components/epg/EPGView.cpp
index cb6690c..5701c3c 100644
--- a/modules/gui/qt4/components/epg/EPGView.cpp
+++ b/modules/gui/qt4/components/epg/EPGView.cpp
@@ -92,7 +92,7 @@ void EPGView::addEvent( EPGEvent* event )
m_channels.append( event->channelName );
EPGItem* item = new EPGItem( this );
- item->setChannel( m_channels.indexOf( event->channelName ) );
+ item->setChannelNb( m_channels.indexOf( event->channelName ) );
item->setStart( event->start );
item->setDuration( event->duration );
item->setName( event->name );
@@ -107,9 +107,45 @@ void EPGView::addEvent( EPGEvent* event )
void EPGView::delEvent( EPGEvent* event )
{
- if( event->item != NULL )
- scene()->removeItem( event->item );
+ if( event->item == NULL )
+ return;
+
+ int channelNb = event->item->getChannelNb();
+
+ // Remove the item.
+ scene()->removeItem( event->item );
event->item = NULL;
+
+ // Look if the channel is still used by other events.
+ QList<QGraphicsItem*> itemList = items();
+ bool b_used = false;
+ for( int i = 0; i < itemList.count(); ++i )
+ {
+ EPGItem* item = qgraphicsitem_cast<EPGItem*>( itemList.at( i ) );
+ if ( !item )
+ continue;
+ if( item->getChannelNb() == channelNb )
+ {
+ b_used = true;
+ break;
+ }
+ }
+
+ // If the channel is no more used, then we remove it from the list
+ // and decrease the channel number of the concerned items.
+ if( !b_used )
+ {
+ m_channels.removeAt( channelNb );
+ for( int i = 0; i < itemList.count(); ++i )
+ {
+ EPGItem* item = qgraphicsitem_cast<EPGItem*>( itemList.at( i ) );
+ if ( !item )
+ continue;
+ int itemChannelNb = item->getChannelNb();
+ if( itemChannelNb > channelNb )
+ item->setChannelNb( itemChannelNb - 1 );
+ }
+ }
}
void EPGView::updateDuration()
More information about the vlc-commits
mailing list