2 Copyright 2004-2007 Chris Tallon
4 This file is part of VOMP.
6 VOMP is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
11 VOMP is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with VOMP; if not, write to the Free Software
18 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
21 #include "vrecordinglistadvanced.h"
24 #include "directory.h"
25 #include "recording.h"
30 #include "vrecordingmenu.h"
31 #include "vrecording.h"
33 #include "vvideorec.h"
34 #include "vradiorec.h"
41 #include "movieinfo.h"
42 #include "seriesinfo.h"
43 #include "staticartwork.h"
48 VRecordingListAdvanced::VRecordingListAdvanced()
50 setSize(640, 500); //old setSize(570, 420);
56 setTitleBarColour(DrawStyle::TITLEBARBACKGROUND);
57 TVMediaInfo *info= new TVMediaInfo();
58 info->setStaticArtwork(sa_recordings);
59 setTitleBarIcon(info);
61 sl.setPosition(10, 30 + 5);
62 sl.setSize(area.w*42/100 - 20, area.h - 30 - 15 - 30);
63 sl.setLinesPerOption(2.4f);
66 Region slarea=sl.getRegionR();
68 epg.setParaMode(true);
69 epg.setPosition(slarea.x +slarea.w+10 ,30+5);
70 epg.setSize(area.w -slarea.x -slarea.w -10, area.h - 30 - 15 - 30);
73 epg.setBackgroundColour(DrawStyle::VIEWBACKGROUND);
75 epgTVmedia.setPosition(epg.getRegionR().w-100-10,10);
76 epgTVmedia.setSize(100,150/Osd::getInstance()->getPixelAspect());
81 VRecordingListAdvanced::~VRecordingListAdvanced()
85 void VRecordingListAdvanced::drawData(bool doIndexPop)
87 int saveIndex = sl.getCurrentOption();
88 int saveTop = sl.getTopOption();
97 char tempA[300]; // FIXME this is guesswork!
98 char tempB[300]; // FIXME
101 Directory* currentSubDir;
102 DirectoryList::iterator i;
103 DirectoryList* dirList = recman->getDirectories();
104 for (i = dirList->begin(); i != dirList->end(); i++)
107 SNPRINTF(tempA, 299, tr("\t%s \n \t <dir> %lu/%lu"), currentSubDir->name, currentSubDir->getNumNewRecordings(), currentSubDir->getNumRecordings());
109 TVMediaInfo *info=new TVMediaInfo();
110 if (currentSubDir->recList.begin() != currentSubDir->recList.end())
112 info->setPosterThumb((*currentSubDir->recList.begin())->getFileName());
113 info->setStaticFallback(sa_recfolder);
115 info->setStaticArtwork(sa_recfolder);
117 currentSubDir->index = sl.addOption(tempA, 0, first, info);
121 // FIXME convert the whole program to time_t's
123 Recording* currentRec;
124 RecordingList::iterator j;
125 RecordingList* recList = recman->getRecordings();
126 for (j = recList->begin(); j != recList->end(); j++)
129 time_t recStartTime = (time_t)currentRec->getStartTime();
130 localtime_r(&recStartTime, &btime);
131 //NMT does not like this too!
133 // strftime(tempA, 299, "%0d/%0m %0H:%0M ", &btime);
135 strftime(tempA, 299, "%d/%m/%y %H:%M ", &btime);
137 sprintf(tempB, "%c\t%s\n \t%s", (currentRec->getNew() ? '*': ' '), currentRec->getProgName(),tempA);
139 TVMediaInfo *info= new TVMediaInfo();
140 info->setPosterThumb(currentRec->getFileName());
141 info->setStaticFallback(sa_recording);
142 currentRec->index = sl.addOption(tempB, 0, first, info);
148 sl.hintSetCurrent(slIndexStack.top());
153 sl.hintSetCurrent(saveIndex);
154 sl.hintSetTop(saveTop);
159 void VRecordingListAdvanced::draw(bool doIndexPop)
163 if (recman->isSubDir())
166 SNPRINTF(title, 299, tr("Recordings - %s"), recman->getCurDirName());
167 setTitleText(title, 364);
171 setTitleText(tr("Recordings"));
173 drawData(doIndexPop);
181 drawText(tr("Loading..."), area.w*22/100-90, 180, DrawStyle::LIGHTTEXT);
186 int gigFree = recman->getFreeSpace() / 1024;
187 SNPRINTF(freeSpace, 49, tr("%lu%% used, %iGB free"), recman->getUsedPercent(), gigFree);
188 drawTextRJ(freeSpace, 560+70, 5, DrawStyle::LIGHTTEXT);
193 w.nextSymbol = WSymbol::UP;
194 w.setPosition(20, area.h-35);
196 w.nextSymbol = WSymbol::DOWN;
197 w.setPosition(50, area.h-35);
199 w.nextSymbol = WSymbol::SKIPBACK;
200 w.setPosition(85, area.h-35);
202 w.nextSymbol = WSymbol::SKIPFORWARD;
203 w.setPosition(115, area.h-35);
205 w.nextSymbol = WSymbol::PLAY;
206 w.setPosition(150, area.h-35);
208 drawTextRJ(tr("[ok] = menu"), 560+70, 385+80, DrawStyle::LIGHTTEXT);
210 // All static stuff done
215 void VRecordingListAdvanced::doShowingBar()
216 { //setSize(640, 500); //old setSize(570, 420);
217 int topOption = sl.getTopOption() + 1;
218 if (sl.getNumOptions() == 0) topOption = 0;
219 #ifndef GRADIENT_DRAWING
220 rectangle(area.w/2-65, area.h-115, 180, 25, DrawStyle::VIEWBACKGROUND);
223 sprintf(showing, tr("%i to %i of %i"), topOption, sl.getBottomOption(), sl.getNumOptions());
224 drawText(showing, area.w/2-65, area.h-35, DrawStyle::LIGHTTEXT);
227 void VRecordingListAdvanced::updateSelection()
229 Recording* toShow = getCurrentOptionRecording();
232 toShow->loadRecInfo();
233 std::stringstream description;
234 if (toShow->recInfo && strlen(toShow->recInfo->summary)){
235 description << "\n"<< toShow->recInfo->title << "\n\n";
236 description << toShow->recInfo->summary;
238 description << "\n" << std::string(toShow->getProgName()) << "\n\n";
239 description << tr("Summary unavailable");
244 if (toShow->movieInfo) {
245 poster=toShow->movieInfo->poster;
247 if (toShow->seriesInfo) {
248 if (toShow->seriesInfo->seasonposter.height) {
249 poster=toShow->seriesInfo->seasonposter;
252 if (toShow->seriesInfo->posters.size()) {
253 poster=toShow->seriesInfo->posters[0];
257 epgTVmedia.setTVMedia(poster.info, WTVMedia::ZoomHorizontal);
258 epgTVmedia.setVisible(true);
260 epgTVmedia.setVisible(false);
263 epg.setText(description.str().c_str());
265 Directory* toShowDir = getCurrentOptionDirectory();
268 std::stringstream description;
269 description << "\n"<< std::string(toShowDir->name) << "\n\n";
271 Directory* currentSubDir;
272 DirectoryList::iterator i;
273 DirectoryList & dirList = toShowDir->dirList;
274 for (i = dirList.begin(); i != dirList.end(); i++)
277 description << tr("<dir> ") << std::string(currentSubDir->name) << " "
278 << currentSubDir->getNumNewRecordings() <<"/"<< currentSubDir->getNumRecordings() <<"\n";
280 Recording* currentRec;
281 RecordingList::iterator j;
282 RecordingList & recList = toShowDir->recList;
285 for (j = recList.begin(); j != recList.end(); j++)
289 time_t recStartTime = (time_t)currentRec->getStartTime();
290 localtime_r(&recStartTime, &btime);
291 strftime(tempA, 299, "%d/%m/%y %H:%M ", &btime);
293 description<< tempA <<" "<< std::string(currentRec->getProgName()) << "\n";
296 epgTVmedia.setVisible(false);
297 epg.setText(description.str().c_str());
307 void VRecordingListAdvanced::quickUpdate() { //only quick for plattform that need it!
309 #ifdef GRADIENT_DRAWING