diff --git a/src/dvb/dvbtab.h b/src/dvb/dvbtab.h --- a/src/dvb/dvbtab.h +++ b/src/dvb/dvbtab.h @@ -23,6 +23,8 @@ #include #include +#include +#include #include #include "../tabbase.h" #include "../mediawidget.h" @@ -81,10 +83,12 @@ private: void activate(); void playChannel(const DvbSharedChannel &channel, const QModelIndex &index); + DvbSharedRecording *getInstantRecording(DvbSharedChannel ch); MediaWidget *mediaWidget; DvbManager *manager; QAction *instantRecordAction; + QList instantRecordings; DvbSharedRecording instantRecording; QSplitter *splitter; QWidget *leftWidget; @@ -96,6 +100,8 @@ QTimer osdChannelTimer; QString currentChannel; QString lastChannel; + QIcon mediaRecordIcon; + QIcon documentSaveIcon; bool autoHideMenu; QTimer *cursorHideTimer; diff --git a/src/dvb/dvbtab.cpp b/src/dvb/dvbtab.cpp --- a/src/dvb/dvbtab.cpp +++ b/src/dvb/dvbtab.cpp @@ -85,6 +85,9 @@ { manager = new DvbManager(mediaWidget, this); + mediaRecordIcon = QIcon::fromTheme(QLatin1String("media-record"), QIcon(":media-record")); + documentSaveIcon = QIcon::fromTheme(QLatin1String("document-save"), QIcon(":document-save")); + QAction *channelsAction = new QAction(QIcon::fromTheme(QLatin1String("video-television"), QIcon(":video-television")), i18n("Channels"), this); channelsAction->setShortcut(Qt::Key_C); connect(channelsAction, SIGNAL(triggered(bool)), this, SLOT(showChannelDialog())); @@ -108,7 +111,7 @@ menu->addSeparator(); - instantRecordAction = new QAction(QIcon::fromTheme(QLatin1String("document-save"), QIcon(":document-save")), i18n("Instant Record"), this); + instantRecordAction = new QAction(documentSaveIcon, i18n("Instant Record"), this); instantRecordAction->setCheckable(true); connect(instantRecordAction, SIGNAL(triggered(bool)), this, SLOT(instantRecord(bool))); menu->addAction(collection->addAction(QLatin1String("dvb_instant_record"), instantRecordAction)); @@ -413,10 +416,14 @@ recording.begin = QDateTime::currentDateTime().toUTC(); recording.duration = QTime(12, 0); instantRecording = manager->getRecordingModel()->addRecording(recording); + instantRecordings.push_back(instantRecording); + instantRecordAction->setIcon(mediaRecordIcon); mediaWidget->getOsdWidget()->showText(i18nc("osd", "Instant Record Started"), 1500); } else { manager->getRecordingModel()->removeRecording(instantRecording); + instantRecordings.removeOne(instantRecording); + instantRecordAction->setIcon(documentSaveIcon); mediaWidget->getOsdWidget()->showText(i18nc("osd", "Instant Record Stopped"), 1500); } @@ -427,9 +434,12 @@ if (instantRecording == recording) { instantRecording = DvbSharedRecording(); instantRecordAction->setChecked(false); + instantRecordAction->setIcon(documentSaveIcon); mediaWidget->getOsdWidget()->showText(i18nc("osd", "Instant Record Stopped"), 1500); } + + instantRecordings.removeOne(recording); } void DvbTab::configureDvb() @@ -505,6 +515,10 @@ void DvbTab::playChannel(const DvbSharedChannel &channel, const QModelIndex &index) { + QIcon *icon; + DvbSharedRecording *recording; + bool isRecording; + if (!channel.isValid()) { qCWarning(logDvb, "Channel is invalid"); return; @@ -514,6 +528,20 @@ lastChannel = currentChannel; } + recording = getInstantRecording(channel); + + if (recording) { + instantRecording = *recording; + isRecording = true; + icon = &mediaRecordIcon; + } else { + isRecording = false; + icon = &documentSaveIcon; + } + + instantRecordAction->setChecked(isRecording); + instantRecordAction->setIcon(*icon); + channelView->setCurrentIndex(index); currentChannel = channel->name; manager->getLiveView()->playChannel(channel); @@ -522,3 +550,18 @@ epgDialog->setCurrentChannel(manager->getLiveView()->getChannel()); } } + +DvbSharedRecording *DvbTab::getInstantRecording(DvbSharedChannel ch) { + DvbSharedRecording *ret = NULL; + + QListIterator i(instantRecordings); + while (i.hasNext()) { + DvbSharedRecording r = i.next(); + if(r.constData()->channel == ch) { + ret = &r; + break; + } + } + + return ret; +}