Ticket #7985: jump_to_rec_watch_recordings_screen_version.diff
File jump_to_rec_watch_recordings_screen_version.diff, 11.2 KB (added by , 13 years ago) |
---|
-
libs/libmythtv/tv_play.h
59 59 60 60 typedef QMap<QString,InfoMap> DDValueMap; 61 61 typedef QMap<QString,DDValueMap> DDKeyMap; 62 typedef ProgramInfo * (*EMBEDRETURNPROGRAM)(void *, bool);63 62 typedef void (*EMBEDRETURNVOID) (void *, bool); 64 63 typedef void (*EMBEDRETURNVOIDEPG) (uint, const QString &, TV *, bool, bool, int); 65 64 typedef void (*EMBEDRETURNVOIDFINDER) (TV *, bool, bool); … … 311 310 312 311 bool eventFilter(QObject *o, QEvent *e); 313 312 static QStringList lastProgramStringList; 314 static EMBEDRETURN PROGRAMRunPlaybackBoxPtr;313 static EMBEDRETURNVOID RunPlaybackBoxPtr; 315 314 static EMBEDRETURNVOID RunViewScheduledPtr; 316 315 static EMBEDRETURNVOIDEPG RunProgramGuidePtr; 317 316 static EMBEDRETURNVOIDFINDER RunProgramFinderPtr; … … 342 341 void ForceNextStateNone(PlayerContext*); 343 342 void ScheduleStateChange(PlayerContext*); 344 343 void SetErrored(PlayerContext*); 344 void PrepToSwitchToRecordedProgram(PlayerContext*, 345 ProgramInfo*); 345 346 void PrepareToExitPlayer(PlayerContext*, int line, 346 347 bool bookmark = true) const; 347 348 void SetExitPlayer(bool set_it, bool wants_to) const; -
libs/libmythtv/tv_play.cpp
113 113 /** 114 114 * \brief function pointer for RunPlaybackBox in playbackbox.cpp 115 115 */ 116 EMBEDRETURN PROGRAMTV::RunPlaybackBoxPtr = NULL;116 EMBEDRETURNVOID TV::RunPlaybackBoxPtr = NULL; 117 117 118 118 /** 119 119 * \brief function pointer for RunViewScheduled in viewscheduled.cpp … … 440 440 { 441 441 QString name(string); 442 442 if (name == "playbackbox") 443 RunPlaybackBoxPtr = (EMBEDRETURN PROGRAM)lptr;443 RunPlaybackBoxPtr = (EMBEDRETURNVOID)lptr; 444 444 else if (name == "viewscheduled") 445 445 RunViewScheduledPtr = (EMBEDRETURNVOID)lptr; 446 446 else if (name == "programguide") … … 3087 3087 errorRecoveryTimerId = StartTimer(1, __LINE__); 3088 3088 } 3089 3089 3090 void TV::PrepToSwitchToRecordedProgram(PlayerContext *ctx, 3091 ProgramInfo *p) 3092 { 3093 VERBOSE(VB_GENERAL, LOC + 3094 QString("Switchin to program: %1: %2") 3095 .arg(p->title).arg(p->subtitle)); 3096 SetLastProgram(p); 3097 PrepareToExitPlayer(ctx,__LINE__); 3098 jumpToProgram = true; 3099 SetExitPlayer(true, true); 3100 } 3101 3090 3102 void TV::PrepareToExitPlayer(PlayerContext *ctx, int line, bool bookmark) const 3091 3103 { 3092 3104 bool bookmark_it = bookmark && IsBookmarkAllowed(ctx); … … 8113 8125 } 8114 8126 8115 8127 // Actually show the pop-up UI 8116 ProgramInfo *nextProgram = NULL;8117 8128 switch (editType) 8118 8129 { 8119 8130 case kScheduleProgramGuide: … … 8144 8155 } 8145 8156 case kPlaybackBox: 8146 8157 { 8147 nextProgram =RunPlaybackBoxPtr((void *)this, !pause_active);8158 RunPlaybackBoxPtr((void *)this, !pause_active); 8148 8159 ignoreKeyPresses = true; 8149 8160 break; 8150 8161 } … … 8855 8866 if (message.left(11) == "EPG_EXITING" || 8856 8867 message.left(18) == "PROGFINDER_EXITING" || 8857 8868 message.left(21) == "VIEWSCHEDULED_EXITING" || 8869 message.left(19) == "PLAYBACKBOX_EXITING" || 8858 8870 message.left(22) == "SCHEDULEEDITOR_EXITING") 8859 8871 { 8860 8872 GetMythMainWindow()->SetDrawEnabled(false); … … 8888 8900 qApp->processEvents(); 8889 8901 DrawUnusedRects(); 8890 8902 8903 isEmbedded = false; 8904 ignoreKeyPresses = false; 8905 8906 if (message.left(19) == "PLAYBACKBOX_EXITING") 8907 { 8908 ProgramInfo *p = new ProgramInfo; 8909 QStringList nextProgStringList = me->ExtraDataList(); 8910 if (!nextProgStringList.isEmpty() && 8911 p->FromStringList(nextProgStringList, 0)) 8912 { 8913 PrepToSwitchToRecordedProgram(actx, p); 8914 } 8915 else 8916 delete p; 8917 } 8918 8891 8919 ReturnPlayerLock(actx); 8892 8920 8893 isEmbedded = false;8894 ignoreKeyPresses = false;8895 8921 } 8896 8922 8897 8923 if (message.left(14) == "COMMFLAG_START") … … 10997 11023 { 10998 11024 if (mctx == ctx) 10999 11025 { 11000 VERBOSE(VB_GENERAL, LOC + 11001 QString("Switching to program: %1: %2") 11002 .arg(p->title).arg(p->subtitle)); 11003 11004 SetLastProgram(p); 11005 PrepareToExitPlayer(ctx, __LINE__); 11006 jumpToProgram = true; 11007 SetExitPlayer(true, true); 11026 PrepToSwitchToRecordedProgram(ctx, p); 11008 11027 } 11009 11028 else 11010 11029 { … … 11042 11061 (wants_pbp ? kPBPLeft : kPIPOff); 11043 11062 } 11044 11063 11045 if (db_jump_prefer_osd && (StateIsPlaying(s) || StateIsLiveTV(s))) 11064 if ((wants_pbp || wants_pip || db_jump_prefer_osd) && 11065 (StateIsPlaying(s) || StateIsLiveTV(s))) 11046 11066 { 11047 11067 QMutexLocker locker(&timerIdLock); 11048 11068 if (jumpMenuTimerId) -
programs/mythfrontend/playbackbox.cpp
319 319 return chanid && recstartts.isValid(); 320 320 } 321 321 322 ProgramInfo *PlaybackBox::RunPlaybackBox(void * player, bool showTV)322 void * PlaybackBox::RunPlaybackBox(void * player, bool showTV) 323 323 { 324 324 MythScreenStack *mainStack = GetMythMainWindow()->GetMainStack(); 325 325 … … 331 331 else 332 332 delete pbb; 333 333 334 ProgramInfo *nextProgram = NULL; 335 if (pbb->CurrentItem()) 336 nextProgram = new ProgramInfo(*pbb->CurrentItem()); 337 338 return nextProgram; 334 return NULL; 339 335 } 340 336 341 337 PlaybackBox::PlaybackBox(MythScreenStack *parent, QString name, BoxType ltype, … … 373 369 m_underNetworkControl(false), 374 370 // Other 375 371 m_player(NULL), 372 m_player_selected_new_show(false), 376 373 m_helper(this) 377 374 { 378 375 m_formatShortDate = gContext->GetSetting("ShortDateFormat", "M/d"); … … 468 465 m_coverartTimer->disconnect(this); 469 466 m_coverartTimer = NULL; 470 467 } 468 469 if (m_player) 470 { 471 QStringList nextProgram; 472 ProgramInfo *pginfo = CurrentItem(); 473 474 if (pginfo && m_player_selected_new_show) 475 pginfo->ToStringList(nextProgram); 476 477 QString message = QString("PLAYBACKBOX_EXITING"); 478 qApp->postEvent(m_player, new MythEvent(message, nextProgram)); 479 } 471 480 } 472 481 473 482 bool PlaybackBox::Create() … … 764 773 QString rating = QString::number((int)((pginfo->stars * 10.0) + 0.5)); 765 774 766 775 item->DisplayState(rating, "ratingstate"); 767 776 768 777 QString oldimgfile = item->GetImage("preview"); 769 778 if (oldimgfile.isEmpty() || force_preview_reload) 770 779 m_helper.GetPreviewImage(*pginfo); … … 1151 1160 subtitleFlags[SUB_ONSCREEN] = "onscreensub"; 1152 1161 subtitleFlags[SUB_NORMAL] = "subtitles"; 1153 1162 subtitleFlags[SUB_HARDHEAR] = "cc"; 1154 1163 1155 1164 ProgramList::iterator it = progList.begin(); 1156 1165 for (; it != progList.end(); ++it) 1157 1166 { … … 1193 1202 disp_flag_stat[7] = (*it)->programflags & FL_INUSEPLAYING; 1194 1203 disp_flag_stat[8] = (*it)->programflags & FL_COMMFLAG; 1195 1204 disp_flag_stat[9] = (*it)->programflags & FL_TRANSCODED; 1196 1205 1197 1206 for (uint i = 0; i < sizeof(disp_flags) / sizeof(char*); ++i) 1198 1207 item->DisplayState(disp_flag_stat[i]?"yes":"no", disp_flags[i]); 1199 1208 1200 1209 QMap<AudioProps, QString>::iterator ait; 1201 1210 for (ait = audioFlags.begin(); ait != audioFlags.end(); ++ait) 1202 1211 { … … 1210 1219 if ((*it)->videoproperties & vit.key()) 1211 1220 item->DisplayState(vit.value(), "videoprops"); 1212 1221 } 1213 1222 1214 1223 QMap<SubtitleTypes, QString>::iterator sit; 1215 1224 for (sit = subtitleFlags.begin(); sit != subtitleFlags.end(); ++sit) 1216 1225 { … … 1903 1912 if (!pginfo) 1904 1913 return; 1905 1914 1906 if (m_player && m_player->IsSameProgram(0, pginfo))1915 if (m_player) 1907 1916 { 1917 if (!m_player->IsSameProgram(0, pginfo)) 1918 m_player_selected_new_show = true; 1908 1919 Close(); 1909 1920 return; 1910 1921 } … … 2274 2285 QStringList sgEntries; 2275 2286 2276 2287 // TODO do this in another thread 2277 RemoteGetFileList(host, "", &sgEntries, sgroup, true); 2288 RemoteGetFileList(host, "", &sgEntries, sgroup, true); 2278 2289 2279 2290 int regIndex = 0; 2280 2291 titleIn.replace(' ', "(?:\\s|-|_|\\.)?"); … … 2348 2359 return QString(); 2349 2360 } 2350 2361 2351 void PlaybackBox::doPIPPlay(void)2352 {2353 doPIPPlay(kPIPonTV);2354 }2355 2356 void PlaybackBox::doPBPPlay(void)2357 {2358 doPIPPlay(kPBPLeft);2359 }2360 2361 void PlaybackBox::doPIPPlay(PIPState state)2362 {2363 if (m_player)2364 {2365 ProgramInfo *pginfo = CurrentItem();2366 m_player->SetNextProgPIPState(state);2367 if (pginfo)2368 pginfo->setIgnoreBookmark(true);2369 Close();2370 }2371 }2372 2373 2362 void PlaybackBox::ShowDeletePopup(DeletePopupType type) 2374 2363 { 2375 2364 if (m_popupMenu) … … 2944 2933 sameProgram = m_player->IsSameProgram(0, &pginfo); 2945 2934 2946 2935 TVState tvstate = kState_None; 2947 if (m_player)2948 {2949 if (!sameProgram && m_player->IsPIPSupported())2950 m_popupMenu->AddButton(tr("Start As PIP"), SLOT(doPIPPlay()));2951 if (!sameProgram && m_player->IsPBPSupported())2952 m_popupMenu->AddButton(tr("Start As PBP"), SLOT(doPBPPlay()));2953 2936 2954 tvstate = m_player->GetState(0); 2955 } 2956 else 2937 if (!sameProgram) 2957 2938 { 2958 2939 if (pginfo.programflags & FL_BOOKMARK) 2959 2940 m_popupMenu->AddButton(tr("Play from..."), 2960 SLOT(showPlayFromPopup()), true); 2941 SLOT(showPlayFromPopup()), true); 2961 2942 else 2962 2943 m_popupMenu->AddButton(tr("Play"), SLOT(playSelected())); 2944 } 2963 2945 2946 if (!m_player) 2947 { 2964 2948 if (m_playList.filter(pginfo.MakeUniqueKey()).size()) 2965 2949 m_popupMenu->AddButton(tr("Remove from Playlist"), 2966 2950 SLOT(togglePlayListItem())); … … 4428 4412 tmpItem->SetWatchedFlag(turnOn); 4429 4413 } 4430 4414 } 4431 4415 4432 4416 doClearPlaylist(); 4433 UpdateUILists(); 4417 UpdateUILists(); 4434 4418 } 4435 4419 4436 4420 void PlaybackBox::showMetadataEditor() -
programs/mythfrontend/playbackbox.h
123 123 void customEvent(QEvent *event); 124 124 125 125 void setInitialRecGroup(QString initialGroup) { m_recGroup = initialGroup; } 126 static ProgramInfo *RunPlaybackBox(void *player, bool);126 static void * RunPlaybackBox(void *player, bool); 127 127 128 128 public slots: 129 129 void displayRecGroup(const QString &newRecGroup = ""); … … 174 174 175 175 void doPlayFromBeg(); 176 176 void doPlayListRandom(); 177 void doPIPPlay(void);178 void doPIPPlay(PIPState state);179 void doPBPPlay(void);180 177 181 178 void askStop(); 182 179 … … 432 429 433 430 // Other 434 431 TV *m_player; 432 bool m_player_selected_new_show; 435 433 /// Main helper thread 436 434 PlaybackBoxHelper m_helper; 437 435 };