Ticket #8088: 8088_playgroups_v15.patch
| File 8088_playgroups_v15.patch, 113.5 KB (added by , 15 years ago) |
|---|
-
libs/libmythtv/videoout_vdpau.h
Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream
20 20 { 21 21 public: 22 22 static void GetRenderOptions(render_opts &opts); 23 VideoOutputVDPAU( MythCodecID codec_id);23 VideoOutputVDPAU(PlaySettings *settings, MythCodecID codec_id); 24 24 ~VideoOutputVDPAU(); 25 25 bool Init(int width, int height, float aspect, WId winid, 26 26 int winx, int winy, int winw, int winh, WId embedid = 0); … … 53 53 const QSize &video_dim); 54 54 static MythCodecID GetBestSupportedCodec(uint width, uint height, 55 55 uint stream_type, 56 bool no_acceleration); 56 bool no_acceleration, 57 PlaySettings *settings); 57 58 DisplayInfo GetDisplayInfo(void); 58 59 virtual bool IsPIPSupported(void) const { return true; } 59 60 virtual bool IsPBPSupported(void) const { return false; } -
libs/libmythtv/NuppelVideoPlayer.cpp
61 61 #include "mythpainter.h" 62 62 #include "mythimage.h" 63 63 #include "mythuiimage.h" 64 #include "playsettings.h" 64 65 65 66 extern "C" { 66 67 #include "vbitext/vbi.h" … … 243 244 output_jmeter(NULL) 244 245 { 245 246 playerThread = QThread::currentThread(); 246 // Playback (output) zoom control247 detect_letter_box = new DetectLetterbox(this);248 247 249 vbimode = VBIMode::Parse(gCoreContext->GetSetting("VbiFormat"));250 decode_extra_audio = gCoreContext->GetNumSetting("DecodeExtraAudio", 0);251 itvEnabled = gCoreContext->GetNumSetting("EnableMHEG", 0);252 db_prefer708 = gCoreContext->GetNumSetting("Prefer708Captions", 1);253 254 248 bzero(&tc_lastval, sizeof(tc_lastval)); 255 249 bzero(&tc_wrap, sizeof(tc_wrap)); 256 250 … … 481 475 482 476 if (using_null_videoout) 483 477 { 484 videoOutput = new VideoOutputNull( );478 videoOutput = new VideoOutputNull(GetPlaySettings()); 485 479 if (!videoOutput->Init(video_disp_dim.width(), video_disp_dim.height(), 486 480 video_aspect, 0, 0, 0, 0, 0, 0)) 487 481 { … … 531 525 pipState, 532 526 video_disp_dim, video_aspect, 533 527 widget->winId(), display_rect, (video_frame_rate * play_speed), 534 0 /*embedid*/ );528 0 /*embedid*/, GetPlaySettings()); 535 529 } 536 530 537 531 if (!videoOutput) … … 620 614 621 615 void NuppelVideoPlayer::ReinitVideo(void) 622 616 { 623 if (!videoOutput->IsPreferredRenderer(video_disp_dim ))617 if (!videoOutput->IsPreferredRenderer(video_disp_dim, GetPlaySettings())) 624 618 { 625 619 VERBOSE(VB_PLAYBACK, LOC + QString("Need to switch video renderer.")); 626 620 SetErrored(QObject::tr("Need to switch video renderer.")); … … 1933 1927 } 1934 1928 #endif // USING_MHEG 1935 1929 1936 SetCaptionsEnabled(gCoreContext->GetNumSetting("DefaultCCMode"), false); 1930 SetCaptionsEnabled(GetPlaySettings()->GetNumSetting("DefaultCCMode", 0), 1931 false); 1937 1932 } 1938 1933 1939 1934 SetPlaying(true); … … 1981 1976 m_double_process = videoOutput->IsExtraProcessingRequired(); 1982 1977 1983 1978 videosync = VideoSync::BestMethod( 1984 videoOutput, fr_int, rf_int, m_double_framerate); 1979 videoOutput, GetPlaySettings(), 1980 fr_int, rf_int, m_double_framerate); 1985 1981 1986 1982 // Make sure video sync can do it 1987 1983 if (videosync != NULL && m_double_framerate) … … 2345 2341 if (bookmarkseek > 30) 2346 2342 { 2347 2343 DoFastForward(bookmarkseek, true, false); 2348 if ( gCoreContext->GetNumSetting("ClearSavedPosition", 1) &&2344 if (GetPlaySettings()->GetNumSetting("ClearSavedPosition", 1) && 2349 2345 !player_ctx->IsPIP()) 2350 2346 { 2351 2347 ClearBookmark(false); … … 2549 2545 { 2550 2546 if (jumpto == totalFrames) 2551 2547 { 2552 if (!( gCoreContext->GetNumSetting("EndOfRecordingExitPrompt") == 12548 if (!(GetPlaySettings()->GetNumSetting("EndOfRecordingExitPrompt", 0) == 1 2553 2549 && !player_ctx->IsPIP() && 2554 2550 player_ctx->GetState() == kState_WatchingPreRecorded)) 2555 2551 { … … 2812 2808 return kPIP_END; 2813 2809 2814 2810 if (pip_players.isEmpty()) 2815 return (PIPLocation)gCoreContext->GetNumSetting("PIPLocation", kPIPTopLeft); 2811 return (PIPLocation)GetPlaySettings()->GetNumSetting("PIPLocation", 2812 kPIPTopLeft); 2816 2813 2817 2814 // order of preference, could be stored in db if we want it configurable 2818 2815 PIPLocation ols[] = … … 3318 3315 exactseeks = frame_exact_seek; 3319 3316 player_ctx = ctx; 3320 3317 livetv = ctx->tvchain; 3318 3319 vbimode = VBIMode::Parse(GetPlaySettings()->GetSetting("VbiFormat", "")); 3320 3321 // Playback (output) zoom control 3322 detect_letter_box = new DetectLetterbox(this); 3323 3324 decode_extra_audio = GetPlaySettings()->GetNumSetting("DecodeExtraAudio", 0); 3325 itvEnabled = GetPlaySettings()->GetNumSetting("EnableMHEG", 0); 3326 db_prefer708 = GetPlaySettings()->GetNumSetting("Prefer708Captions", 1); 3321 3327 } 3322 3328 3323 3329 bool NuppelVideoPlayer::EnableEdit(void) -
libs/libmythtv/subtitlereader.h
33 33 34 34 TextSubtitles* GetTextSubtitles(void) { return &m_TextSubtitles; } 35 35 bool HasTextSubtitles(void); 36 bool LoadExternalSubtitles(const QString &videoFile );36 bool LoadExternalSubtitles(const QString &videoFile, PlaySettings *settings); 37 37 38 38 private: 39 39 AVSubtitles m_AVSubtitles; -
libs/libmythtv/videooutwindow.cpp
29 29 30 30 #include "videooutwindow.h" 31 31 #include "osd.h" 32 #include "playsettings.h" 32 33 #include "NuppelVideoPlayer.h" 33 34 #include "videodisplayprofile.h" 34 35 #include "decoderbase.h" … … 53 54 const float VideoOutWindow::kManualZoomMinVerticalZoom = 0.5f; 54 55 const int VideoOutWindow::kManualZoomMaxMove = 50; 55 56 56 VideoOutWindow::VideoOutWindow( ) :57 VideoOutWindow::VideoOutWindow(PlaySettings *_settings) : 57 58 // DB settings 58 59 db_move(0, 0), db_scale_horiz(0.0f), db_scale_vert(0.0f), 59 60 db_pip_size(26), … … 84 85 85 86 // Various state variables 86 87 embedding(false), needrepaint(false), 87 allowpreviewepg(true), pip_state(kPIPOff) 88 allowpreviewepg(true), pip_state(kPIPOff), 89 90 settings(_settings) 88 91 { 89 92 db_pip_size = gCoreContext->GetNumSetting("PIPSize", 26); 90 93 91 db_move = QPoint( gCoreContext->GetNumSetting("xScanDisplacement", 0),92 gCoreContext->GetNumSetting("yScanDisplacement", 0));94 db_move = QPoint(settings->GetNumSetting("xScanDisplacement", 0), 95 settings->GetNumSetting("yScanDisplacement", 0)); 93 96 db_use_gui_size = gCoreContext->GetNumSetting("GuiSizeForTV", 0); 94 97 95 98 QDesktopWidget *desktop = NULL; … … 612 615 if (change) 613 616 { 614 617 db_scale_vert = 615 gCoreContext->GetNumSetting("VertScanPercentage", 0) * 0.01f;618 settings->GetNumSetting("VertScanPercentage", 0) * 0.01f; 616 619 db_scale_horiz = 617 gCoreContext->GetNumSetting("HorizScanPercentage", 0) * 0.01f;620 settings->GetNumSetting("HorizScanPercentage", 0) * 0.01f; 618 621 db_scaling_allowed = true; 619 622 } 620 623 else -
libs/libmythtv/videoout_d3d.cpp
50 50 opts.priorities->insert("direct3d", 55); 51 51 } 52 52 53 VideoOutputD3D::VideoOutputD3D( void)54 : VideoOutput( ),m_lock(QMutex::Recursive),53 VideoOutputD3D::VideoOutputD3D(PlaySettigns *settings) 54 : VideoOutput(settings), m_lock(QMutex::Recursive), 55 55 m_hWnd(NULL), m_render(NULL), 56 56 m_video(NULL), 57 57 m_render_valid(false), m_render_reset(false), m_pip_active(NULL), -
libs/libmythtv/DetectLetterbox.cpp
5 5 #include "NuppelVideoPlayer.h" 6 6 #include "videoouttypes.h" 7 7 #include "mythcorecontext.h" 8 #include "playsettings.h" 8 9 9 10 DetectLetterbox::DetectLetterbox(NuppelVideoPlayer* const nvp) 10 11 { 11 int dbAdjustFill = gCoreContext->GetNumSetting("AdjustFill", 0);12 int dbAdjustFill = nvp->GetPlaySettings()->GetNumSetting("AdjustFill", 0); 12 13 isDetectLetterbox = dbAdjustFill >= kAdjustFill_AutoDetect_DefaultOff; 13 14 firstFrameChecked = 0; 14 15 detectLetterboxDefaultMode = (AdjustFillMode) max((int) kAdjustFill_Off, … … 18 19 detectLetterboxPossibleFullFrame = -1; 19 20 detectLetterboxConsecutiveCounter = 0; 20 21 detectLetterboxDetectedMode = nvp->GetAdjustFill(); 21 detectLetterboxLimit = gCoreContext->GetNumSetting("DetectLeterboxLimit", 75); 22 detectLetterboxLimit = 23 nvp->GetPlaySettings()->GetNumSetting("DetectLeterboxLimit", 75); 22 24 nupple_video_player = nvp; 23 25 } 24 26 -
libs/libmythtv/videoout_opengl.cpp
37 37 opts.priorities->insert("opengl", 65); 38 38 } 39 39 40 VideoOutputOpenGL::VideoOutputOpenGL( void)41 : VideoOutput( ),40 VideoOutputOpenGL::VideoOutputOpenGL(PlaySettings *settings) 41 : VideoOutput(settings), 42 42 gl_context_lock(QMutex::Recursive), 43 43 gl_context(NULL), gl_videochain(NULL), gl_pipchain_active(NULL), 44 44 gl_parent_win(0), gl_embed_win(0), gl_painter(NULL) -
libs/libmythtv/videoout_quartz.cpp
64 64 #include "videodisplayprofile.h" 65 65 #include "videoout_dvdv.h" 66 66 67 class PlaySettings; 68 67 69 #define LOC QString("VideoOutputQuartz::") 68 70 #define LOC_ERR QString("VideoOutputQuartz Error: ") 69 71 … … 1127 1129 /** \class VideoOutputQuartz 1128 1130 * \brief Implementation of Quartz (Mac OS X windowing system) video output 1129 1131 */ 1130 VideoOutputQuartz::VideoOutputQuartz( 1132 VideoOutputQuartz::VideoOutputQuartz(PlaySettings *settings 1131 1133 MythCodecID _myth_codec_id, void *codec_priv) : 1132 VideoOutput( ), Started(false), data(new QuartzData()),1134 VideoOutput(settings), Started(false), data(new QuartzData()), 1133 1135 myth_codec_id(_myth_codec_id) 1134 1136 { 1135 1137 init(&pauseFrame, FMT_YV12, NULL, 0, 0, 0, 0); … … 1866 1868 MythCodecID VideoOutputQuartz::GetBestSupportedCodec( 1867 1869 uint width, uint height, 1868 1870 uint osd_width, uint osd_height, 1869 uint stream_type, uint fourcc )1871 uint stream_type, uint fourcc, PlaySettings *settings) 1870 1872 { 1871 1873 (void) osd_width; 1872 1874 (void) osd_height; 1873 1875 1874 VideoDisplayProfile vdp ;1876 VideoDisplayProfile vdp(settings); 1875 1877 vdp.SetInput(QSize(width, height)); 1876 1878 QString dec = vdp.GetDecoder(); 1877 1879 if ((dec == "libmpeg2") || (dec == "ffmpeg")) -
libs/libmythtv/avformatdecoder.cpp
30 30 #include "BDRingBuffer.h" 31 31 #include "videodisplayprofile.h" 32 32 #include "mythuihelper.h" 33 #include "playsettings.h" 33 34 34 35 #include "lcddevice.h" 35 36 … … 525 526 526 527 cc608_build_parity_table(cc608_parity_table); 527 528 528 if ( gCoreContext->GetNumSetting("CCBackground", 0))529 if (GetNVP()->GetPlaySettings()->GetNumSetting("CCBackground", 0)) 529 530 CC708Window::forceWhiteOnBlackText = true; 530 531 531 532 no_dts_hack = false; … … 1426 1427 if (selectedStream) 1427 1428 { 1428 1429 directrendering = true; 1429 if (! gCoreContext->GetNumSetting("DecodeExtraAudio", 0) &&1430 if (!GetNVP()->GetPlaySettings()->GetNumSetting("DecodeExtraAudio", 0) && 1430 1431 !CODEC_IS_HWACCEL(codec)) 1431 1432 { 1432 1433 SetLowBuffers(false); … … 1908 1909 1909 1910 if (!is_db_ignored) 1910 1911 { 1911 VideoDisplayProfile vdp ;1912 VideoDisplayProfile vdp(GetNVP()->GetPlaySettings()); 1912 1913 vdp.SetInput(QSize(width, height)); 1913 1914 dec = vdp.GetDecoder(); 1914 1915 thread_count = vdp.GetMaxCPUs(); … … 1936 1937 MythCodecID vdpau_mcid; 1937 1938 vdpau_mcid = VideoOutputVDPAU::GetBestSupportedCodec( 1938 1939 width, height, 1939 mpeg_version(enc->codec_id), no_hardware_decoders); 1940 mpeg_version(enc->codec_id), no_hardware_decoders, 1941 GetNVP()->GetPlaySettings()); 1940 1942 1941 1943 if (vdpau_mcid >= video_codec_id) 1942 1944 { … … 1968 1970 /* mpeg type */ mpeg_version(enc->codec_id), 1969 1971 /* xvmc pix fmt */ xvmc_pixel_format(enc->pix_fmt), 1970 1972 /* test surface */ codec_is_std(video_codec_id), 1971 /* force_xv */ force_xv); 1973 /* force_xv */ force_xv, 1974 GetNVP()->GetPlaySettings()); 1972 1975 1973 1976 if (mcid >= video_codec_id) 1974 1977 { … … 2001 2004 /* osd dim */ 0, 0, 2002 2005 /* mpeg type */ mpeg_version(enc->codec_id), 2003 2006 /* pixel format */ 2004 (PIX_FMT_YUV420P == enc->pix_fmt) ? FOURCC_I420 : 0); 2007 (PIX_FMT_YUV420P == enc->pix_fmt) ? FOURCC_I420 : 0, 2008 GetNVP()->GetPlaySettings()); 2005 2009 2006 2010 if (quartz_mcid >= video_codec_id) 2007 2011 { -
libs/libmythtv/playgroup.cpp
1 1 #include "mythdb.h" 2 2 #include "playgroup.h" 3 3 #include "programinfo.h" 4 #include "playsettings.h" 4 5 5 6 // A parameter associated with the profile itself 6 7 class PlayGroupDBStorage : public SimpleDBStorage … … 210 211 return res; 211 212 } 212 213 213 PlayGroupEditor::PlayGroupEditor(void) : 214 listbox(new ListBoxSetting(this)), lastValue("Default") 214 PlayGroupEditor::PlayGroupEditor(SettingsLookup *funcArray, int funcArraySize) : 215 listbox(new ListBoxSetting(this)), lastValue("Default"), 216 getSettings(funcArray), getSettingsSize(funcArraySize) 215 217 { 216 218 listbox->setLabel(tr("Playback Groups")); 217 219 addChild(listbox); … … 242 244 } 243 245 244 246 PlayGroup group(name); 247 PlaySettings *psettings = new PlaySettings(name); 248 for (int i=0; i<getSettingsSize; i++) 249 getSettings[i](psettings, &group); 245 250 if (group.exec() == QDialog::Accepted || !created) 246 251 lastValue = name; 247 252 else … … 276 281 query.bindValue(":NAME", name); 277 282 if (!query.exec()) 278 283 MythDB::DBError("PlayGroupEditor::doDelete", query); 284 PlaySettings::deleteGroup(name); 279 285 280 286 int lastIndex = listbox->getValueIndex(name); 281 287 lastValue = ""; -
libs/libmythtv/videoout_opengl.h
10 10 { 11 11 public: 12 12 static void GetRenderOptions(render_opts &opts, QStringList &cpudeints); 13 VideoOutputOpenGL( );13 VideoOutputOpenGL(PlaySettings *settings); 14 14 ~VideoOutputOpenGL(); 15 15 16 16 bool Init(int width, int height, float aspect, WId winid, -
libs/libmythtv/tv_play.h
56 56 class OSDListTreeItemEnteredEvent; 57 57 class OSDListTreeItemSelectedEvent; 58 58 struct osdInfo; 59 class PlaySettings; 59 60 60 61 typedef QMap<QString,InfoMap> DDValueMap; 61 62 typedef QMap<QString,DDValueMap> DDKeyMap; … … 179 180 unsigned long seconds; 180 181 }; 181 182 182 TV( void);183 TV(PlaySettings *settings); 183 184 ~TV(); 184 185 185 void InitFromDB( void);186 void InitFromDB(PlaySettings *settings); 186 187 bool Init(bool createWindow = true); 187 188 188 189 // User input processing commands … … 205 206 206 207 // Recording commands 207 208 int PlayFromRecorder(int recordernum); 208 int Playback(const ProgramInfo &rcinfo );209 int Playback(const ProgramInfo &rcinfo, PlaySettings *settings); 209 210 210 211 // Commands used by frontend playback box 211 212 QString GetRecordingGroup(int player_idx) const; -
libs/libmythtv/playgroup.h
7 7 #include "mythwidgets.h" 8 8 9 9 class ProgramInfo; 10 class PlaySettings; 10 11 11 12 class MPUBLIC PlayGroup: public ConfigurationWizard 12 13 { … … 29 30 Q_OBJECT 30 31 31 32 public: 32 PlayGroupEditor(void); 33 typedef ConfigurationWizard *(*SettingsLookup)(PlaySettings *settings, 34 ConfigurationWizard *base); 35 PlayGroupEditor(SettingsLookup *funcArray, int funcArraySize); 33 36 virtual DialogCode exec(void); 34 37 virtual void Load(void); 35 38 virtual void Save(void) { } … … 44 47 protected: 45 48 ListBoxSetting *listbox; 46 49 QString lastValue; 50 SettingsLookup *getSettings; 51 int getSettingsSize; 47 52 }; 48 53 49 54 #endif -
libs/libmythtv/dbcheck.cpp
3561 3561 3562 3562 VideoDisplayProfile::CreateNewProfiles(host); 3563 3563 profiles = VideoDisplayProfile::GetProfiles(host); 3564 QString profile = VideoDisplayProfile::GetDefaultProfileName(host); 3564 QString profile = 3565 VideoDisplayProfile::GetDefaultProfileName(host, NULL); 3565 3566 3566 3567 if (profiles.contains("Normal") && 3567 3568 (profile=="CPU++" || profile=="CPU+" || profile=="CPU--")) … … 5799 5800 " jump int(11) NOT NULL default '0'," 5800 5801 " PRIMARY KEY (`name`)" 5801 5802 ");", 5803 "CREATE TABLE playgroupsettings (" 5804 " playgroupname varchar(64) NOT NULL," 5805 " `value` varchar(128) NOT NULL," 5806 " `data` text," 5807 " overridden tinyint(1) NOT NULL," 5808 " PRIMARY KEY (playgroupname, `value`)" 5809 ");", 5802 5810 "CREATE TABLE powerpriority (" 5803 5811 " priorityname varchar(64) collate utf8_bin NOT NULL," 5804 5812 " recpriority int(10) NOT NULL default '0'," -
libs/libmythtv/videoout_vdpau.cpp
48 48 opts.deints->insert("vdpau", deints); 49 49 } 50 50 51 VideoOutputVDPAU::VideoOutputVDPAU( MythCodecID codec_id)52 : VideoOutput( ),51 VideoOutputVDPAU::VideoOutputVDPAU(PlaySettings *settings, MythCodecID codec_id) 52 : VideoOutput(settings), 53 53 m_codec_id(codec_id), m_win(0), m_render(NULL), 54 54 m_buffer_size(NUM_VDPAU_BUFFERS), m_pause_surface(0), 55 55 m_need_deintrefs(false), m_video_mixer(0), m_mixer_features(kVDPFeatNone), … … 871 871 872 872 MythCodecID VideoOutputVDPAU::GetBestSupportedCodec( 873 873 uint width, uint height, 874 uint stream_type, bool no_acceleration )874 uint stream_type, bool no_acceleration, PlaySettings *settings) 875 875 { 876 876 bool use_cpu = no_acceleration; 877 VideoDisplayProfile vdp ;877 VideoDisplayProfile vdp(settings); 878 878 vdp.SetInput(QSize(width, height)); 879 879 QString dec = vdp.GetDecoder(); 880 880 -
libs/libmythtv/videoout_directfb.cpp
274 274 opts.priorities->insert("directfb", 60); 275 275 } 276 276 277 VideoOutputDirectfb::VideoOutputDirectfb( void)278 : VideoOutput( ), XJ_started(false), widget(NULL),277 VideoOutputDirectfb::VideoOutputDirectfb(PlaySettings *settings) 278 : VideoOutput(settings), XJ_started(false), widget(NULL), 279 279 data(new DirectfbData()) 280 280 { 281 281 init(&pauseFrame, FMT_YV12, NULL, 0, 0, 0, 0); -
libs/libmythtv/videoout_d3d.h
12 12 { 13 13 public: 14 14 static void GetRenderOptions(render_opts &opts, QStringList &cpudeints); 15 VideoOutputD3D( );15 VideoOutputD3D(PlaySettings *settings); 16 16 ~VideoOutputD3D(); 17 17 18 18 bool Init(int width, int height, float aspect, WId winid, -
libs/libmythtv/playercontext.cpp
17 17 #include "storagegroup.h" 18 18 #include "mythcorecontext.h" 19 19 #include "videometadatautil.h" 20 #include "DetectLetterbox.h" 21 #include "playsettings.h" 20 22 21 23 #define LOC QString("playCtx: ") 22 24 #define LOC_ERR QString("playCtx, Error: ") … … 404 406 WId embedwinid, const QRect *embedbounds, 405 407 bool muted) 406 408 { 407 int exact_seeking = gCoreContext->GetNumSetting("ExactSeeking", 0);409 int exact_seeking = settings->GetNumSetting("ExactSeeking", 0); 408 410 409 411 if (HasNVP()) 410 412 { … … 447 449 { 448 450 QString subfn = buffer->GetSubtitleFilename(); 449 451 if (!subfn.isEmpty() && _nvp->GetSubReader()) 450 _nvp->GetSubReader()->LoadExternalSubtitles(subfn );452 _nvp->GetSubReader()->LoadExternalSubtitles(subfn, settings); 451 453 } 452 454 453 455 if ((embedwinid > 0) && embedbounds) … … 888 890 /** 889 891 * \brief assign programinfo to the context 890 892 */ 891 void PlayerContext::SetPlayingInfo(const ProgramInfo *info) 893 void PlayerContext::SetPlayingInfo(const ProgramInfo *info, 894 PlaySettings *_settings) 892 895 { 893 896 bool ignoreDB = gCoreContext->IsDatabaseIgnored(); 894 897 … … 900 903 playingInfo->MarkAsInUse(false, recUsage); 901 904 delete playingInfo; 902 905 playingInfo = NULL; 906 // XXX delete settings? 903 907 } 904 908 905 909 if (info) … … 908 912 if (!ignoreDB) 909 913 playingInfo->MarkAsInUse(true, recUsage); 910 914 playingLen = playingInfo->GetSecondsInRecording(); 915 settings = (_settings ? _settings : 916 new PlaySettings(playingInfo->GetPlaybackGroup())); 911 917 } 912 918 } 913 919 -
libs/libmythtv/NuppelVideoPlayer.h
213 213 QString GetXDS(const QString &key) const; 214 214 PIPLocation GetNextPIPLocation(void) const; 215 215 216 PlaySettings *GetPlaySettings(void) const { 217 return player_ctx ? player_ctx->settings : NULL; 218 } 219 216 220 // Bool Gets 217 221 bool GetRawAudioState(void) const; 218 222 bool GetLimitKeyRepeat(void) const { return limitKeyRepeat; } -
libs/libmythtv/subtitlereader.cpp
56 56 av_free(subtitle.rects); 57 57 } 58 58 59 bool SubtitleReader::LoadExternalSubtitles(const QString &subtitleFileName) 59 bool SubtitleReader::LoadExternalSubtitles(const QString &subtitleFileName, 60 PlaySettings *settings) 60 61 { 61 62 m_TextSubtitles.Clear(); 62 return TextSubtitleParser::LoadSubtitles(subtitleFileName, m_TextSubtitles); 63 return TextSubtitleParser::LoadSubtitles(subtitleFileName, m_TextSubtitles, 64 settings); 63 65 } 64 66 65 67 bool SubtitleReader::HasTextSubtitles(void) -
libs/libmythtv/textsubtitleparser.h
17 17 // Qt headers 18 18 #include <QStringList> 19 19 20 class PlaySettings; 21 20 22 class text_subtitle_t 21 23 { 22 24 public: … … 79 81 class TextSubtitleParser 80 82 { 81 83 public: 82 static bool LoadSubtitles(QString fileName, TextSubtitles &target); 84 static bool LoadSubtitles(QString fileName, TextSubtitles &target, 85 PlaySettings *settings); 83 86 }; 84 87 85 88 #endif -
libs/libmythtv/vsync.cpp
34 34 35 35 #include "mythcontext.h" 36 36 #include "mythmainwindow.h" 37 #include "playsettings.h" 37 38 38 39 #ifdef USING_XV 39 40 #include "videoout_xv.h" … … 78 79 * \brief Returns the most sophisticated video sync method available. 79 80 */ 80 81 VideoSync *VideoSync::BestMethod(VideoOutput *video_output, 82 PlaySettings *settings, 81 83 uint frame_interval, uint refresh_interval, 82 84 bool halve_frame_interval) 83 85 { … … 102 104 #ifndef _WIN32 103 105 TESTVIDEOSYNC(DRMVideoSync); 104 106 #ifdef USING_OPENGL_VSYNC 105 if ( gCoreContext->GetNumSetting("UseOpenGLVSync", 1) &&107 if (settings->GetNumSetting("UseOpenGLVSync", 1) && 106 108 (getenv("NO_OPENGL_VSYNC") == NULL)) 107 109 { 108 110 TESTVIDEOSYNC(OpenGLVideoSync); -
libs/libmythtv/tv_play.cpp
59 59 #include "mythsystemevent.h" 60 60 #include "videometadatautil.h" 61 61 #include "mythdialogbox.h" 62 #include "playsettings.h" 62 63 63 64 #if ! HAVE_ROUND 64 65 #define round(x) ((int) ((x) + 0.5)) … … 209 210 bool startInGuide = flags & kStartTVInGuide; 210 211 bool inPlaylist = flags & kStartTVInPlayList; 211 212 bool initByNetworkCommand = flags & kStartTVByNetworkCommand; 212 TV *tv = new TV();213 213 bool quitAll = false; 214 214 bool showDialogs = true; 215 215 bool playCompleted = false; … … 223 223 curProgram->SetIgnoreBookmark(flags & kStartTVIgnoreBookmark); 224 224 } 225 225 226 PlaySettings settings(curProgram ? curProgram->GetPlaybackGroup() : "Default"); 227 TV *tv = new TV(&settings); 228 226 229 // Initialize TV 227 230 if (!tv->Init()) 228 231 { … … 253 256 if (curProgram) 254 257 { 255 258 VERBOSE(VB_PLAYBACK, LOC + "tv->Playback() -- begin"); 256 if (!tv->Playback(*curProgram ))259 if (!tv->Playback(*curProgram, &settings)) 257 260 { 258 261 quitAll = true; 259 262 } … … 838 841 class TVInitRunnable : public QRunnable 839 842 { 840 843 public: 841 TVInitRunnable(TV *ourTV) : tv(ourTV) {} 842 virtual void run(void) { tv->InitFromDB(); } 844 TVInitRunnable(TV *ourTV, PlaySettings *ourSettings) : 845 tv(ourTV), settings(ourSettings) {} 846 virtual void run(void) { tv->InitFromDB(settings); } 843 847 TV *tv; 848 PlaySettings *settings; 844 849 }; 845 850 846 851 /** \fn TV::TV(void) 847 852 * \sa Init(void) 848 853 */ 849 TV::TV( void)854 TV::TV(PlaySettings *settings) 850 855 : // Configuration variables from database 851 856 baseFilters(""), 852 857 db_channel_format("<num> <sign>"), … … 946 951 playerActive = 0; 947 952 playerLock.unlock(); 948 953 949 QThreadPool::globalInstance()->start(new TVInitRunnable(this ), 99);954 QThreadPool::globalInstance()->start(new TVInitRunnable(this, settings), 99); 950 955 951 956 VERBOSE(VB_PLAYBACK, LOC + "ctor -- end"); 952 957 } 953 958 954 void TV::InitFromDB( void)959 void TV::InitFromDB(PlaySettings *settings) 955 960 { 956 961 QMap<QString,QString> kv; 957 962 kv["LiveTVIdleTimeout"] = "0"; … … 997 1002 kv[QString("FFRewSpeed%1").arg(i)] = QString::number(ff_rew_def[i]); 998 1003 999 1004 MythDB::getMythDB()->GetSettings(kv); 1005 settings->AddToMap(kv); 1000 1006 1001 1007 // convert from minutes to ms. 1002 1008 db_idle_timeout = kv["LiveTVIdleTimeout"].toInt() * 60 * 1000; … … 1733 1739 askAllowLock.unlock(); 1734 1740 } 1735 1741 1736 int TV::Playback(const ProgramInfo &rcinfo )1742 int TV::Playback(const ProgramInfo &rcinfo, PlaySettings *settings) 1737 1743 { 1738 1744 wantsToQuit = false; 1739 1745 jumpToProgram = false; … … 1747 1753 return 0; 1748 1754 } 1749 1755 1750 mctx->SetPlayingInfo(&rcinfo );1756 mctx->SetPlayingInfo(&rcinfo, settings); 1751 1757 mctx->SetInitialTVState(false); 1752 1758 ScheduleStateChange(mctx); 1753 1759 … … 1830 1836 1831 1837 if (fileexists) 1832 1838 { 1833 Playback(pginfo); 1839 PlaySettings settings("Default"); 1840 Playback(pginfo, &settings); 1834 1841 retval = 1; 1835 1842 } 1836 1843 … … 2171 2178 QString msg = tr("%1 Settings") 2172 2179 .arg(tv_i18n(ctx->playingInfo->GetPlaybackGroup())); 2173 2180 ctx->UnlockPlayingInfo(__FILE__, __LINE__); 2174 if (count > 0) 2181 if (count > 0 && 2182 ctx->playingInfo->GetPlaybackGroup() != "Default" && 2183 ctx->playingInfo->GetPlaybackGroup() != "Videos") 2175 2184 SetOSDMessage(ctx, msg); 2176 2185 ITVRestart(ctx, false); 2177 2186 } -
libs/libmythtv/videodisplayprofile.h
13 13 14 14 #include "mythcontext.h" 15 15 16 class PlaySettings; 17 16 18 typedef QMap<QString,QString> pref_map_t; 17 19 typedef QMap<QString,QStringList> safe_map_t; 18 20 typedef QStringList safe_list_t; … … 80 82 class MPUBLIC VideoDisplayProfile 81 83 { 82 84 public: 83 VideoDisplayProfile( );85 VideoDisplayProfile(PlaySettings *settings); 84 86 ~VideoDisplayProfile(); 85 87 86 88 void SetInput(const QSize &size); … … 124 126 static QString GetDecoderName(const QString &decoder); 125 127 static QString GetDecoderHelp(QString decoder = QString::null); 126 128 127 static QString GetDefaultProfileName(const QString &hostname); 129 static QString GetDefaultProfileName(const QString &hostname, 130 PlaySettings *settings); 128 131 static void SetDefaultProfileName(const QString &profilename, 129 132 const QString &hostname); 130 133 static uint GetProfileGroupID(const QString &profilename, -
libs/libmythtv/videoout_null.cpp
27 27 opts.priorities->insert("null", 10); 28 28 } 29 29 30 VideoOutputNull::VideoOutputNull( void) :31 VideoOutput( ), global_lock(QMutex::Recursive)30 VideoOutputNull::VideoOutputNull(PlaySettings *settings) : 31 VideoOutput(settings), global_lock(QMutex::Recursive) 32 32 { 33 33 VERBOSE(VB_PLAYBACK, "VideoOutputNull()"); 34 34 memset(&av_pause_frame, 0, sizeof(av_pause_frame)); -
libs/libmythtv/videooutbase.cpp
7 7 #include "NuppelVideoPlayer.h" 8 8 #include "videodisplayprofile.h" 9 9 #include "decoderbase.h" 10 #include "playsettings.h" 10 11 11 12 #include "mythcorecontext.h" 12 13 #include "mythverbose.h" … … 109 110 PIPState pipState, 110 111 const QSize &video_dim, float video_aspect, 111 112 WId win_id, const QRect &display_rect, 112 float video_prate, WId embed_id) 113 float video_prate, WId embed_id, 114 PlaySettings *settings) 113 115 { 114 116 (void) codec_priv; 115 117 … … 154 156 QString renderer = QString::null; 155 157 if (renderers.size() > 0) 156 158 { 157 VideoDisplayProfile vprof ;159 VideoDisplayProfile vprof(settings); 158 160 vprof.SetInput(video_dim); 159 161 160 162 QString tmp = vprof.GetVideoRenderer(); … … 182 184 183 185 #ifdef USING_DIRECTFB 184 186 if (renderer == "directfb") 185 vo = new VideoOutputDirectfb( );187 vo = new VideoOutputDirectfb(settings); 186 188 #endif // USING_DIRECTFB 187 189 188 190 #ifdef USING_MINGW 189 191 if (renderer == "direct3d") 190 vo = new VideoOutputD3D( );192 vo = new VideoOutputD3D(settings); 191 193 #endif // USING_MINGW 192 194 193 195 #ifdef Q_OS_MACX 194 196 if (osxlist.contains(renderer)) 195 vo = new VideoOutputQuartz( codec_id, codec_priv);197 vo = new VideoOutputQuartz(settings, codec_id, codec_priv); 196 198 #endif // Q_OS_MACX 197 199 198 200 #ifdef USING_OPENGL_VIDEO 199 201 if (renderer == "opengl") 200 vo = new VideoOutputOpenGL( );202 vo = new VideoOutputOpenGL(settings); 201 203 #endif // USING_OPENGL_VIDEO 202 204 203 205 #ifdef USING_VDPAU 204 206 if (renderer == "vdpau") 205 vo = new VideoOutputVDPAU( codec_id);207 vo = new VideoOutputVDPAU(settings, codec_id); 206 208 #endif // USING_VDPAU 207 209 208 210 #ifdef USING_XV 209 211 if (xvlist.contains(renderer)) 210 vo = new VideoOutputXv( codec_id);212 vo = new VideoOutputXv(settings, codec_id); 211 213 #endif // USING_XV 212 214 213 215 if (vo) … … 304 306 * \brief This constructor for VideoOutput must be followed by an 305 307 * Init(int,int,float,WId,int,int,int,int,WId) call. 306 308 */ 307 VideoOutput::VideoOutput( ) :309 VideoOutput::VideoOutput(PlaySettings *_settings) : 308 310 // DB Settings 309 311 db_display_dim(0,0), 310 312 db_aspectoverride(kAspect_Off), db_adjustfill(kAdjustFill_Off), … … 341 343 monitor_sz(640,480), monitor_dim(400,300), 342 344 343 345 // OSD 344 osd_painter(NULL), osd_image(NULL) 346 osd_painter(NULL), osd_image(NULL), 347 settings(_settings) 345 348 346 349 { 347 350 bzero(&pip_tmp_image, sizeof(pip_tmp_image)); 348 db_display_dim = QSize( gCoreContext->GetNumSetting("DisplaySizeWidth", 0),349 gCoreContext->GetNumSetting("DisplaySizeHeight", 0));351 db_display_dim = QSize(settings->GetNumSetting("DisplaySizeWidth", 0), 352 settings->GetNumSetting("DisplaySizeHeight", 0)); 350 353 351 354 db_pict_attr[kPictureAttribute_Brightness] = 352 gCoreContext->GetNumSetting("PlaybackBrightness", 50);355 settings->GetNumSetting("PlaybackBrightness", 50); 353 356 db_pict_attr[kPictureAttribute_Contrast] = 354 gCoreContext->GetNumSetting("PlaybackContrast", 50);357 settings->GetNumSetting("PlaybackContrast", 50); 355 358 db_pict_attr[kPictureAttribute_Colour] = 356 gCoreContext->GetNumSetting("PlaybackColour", 50);359 settings->GetNumSetting("PlaybackColour", 50); 357 360 db_pict_attr[kPictureAttribute_Hue] = 358 gCoreContext->GetNumSetting("PlaybackHue", 0);361 settings->GetNumSetting("PlaybackHue", 0); 359 362 360 363 db_aspectoverride = (AspectOverrideMode) 361 gCoreContext->GetNumSetting("AspectOverride", 0);364 settings->GetNumSetting("AspectOverride", 0); 362 365 db_adjustfill = (AdjustFillMode) 363 gCoreContext->GetNumSetting("AdjustFill", 0);366 settings->GetNumSetting("AdjustFill", 0); 364 367 db_letterbox_colour = (LetterBoxColour) 365 gCoreContext->GetNumSetting("LetterboxColour", 0);368 settings->GetNumSetting("LetterboxColour", 0); 366 369 db_use_picture_controls = 367 gCoreContext->GetNumSetting("UseOutputPictureControls", 0);370 settings->GetNumSetting("UseOutputPictureControls", 0); 368 371 369 372 if (!gCoreContext->IsDatabaseIgnored()) 370 db_vdisp_profile = new VideoDisplayProfile( );373 db_vdisp_profile = new VideoDisplayProfile(settings); 371 374 372 windows.push_back(VideoOutWindow( ));375 windows.push_back(VideoOutWindow(settings)); 373 376 } 374 377 375 378 /** … … 443 446 return QString::null; 444 447 } 445 448 446 bool VideoOutput::IsPreferredRenderer(QSize video_size )449 bool VideoOutput::IsPreferredRenderer(QSize video_size, PlaySettings *settings) 447 450 { 448 451 if (!db_vdisp_profile || (video_size == windows[0].GetVideoDispDim())) 449 452 return true; 450 453 451 VideoDisplayProfile vdisp ;454 VideoDisplayProfile vdisp(settings); 452 455 vdisp.SetInput(video_size); 453 456 QString new_rend = vdisp.GetVideoRenderer(); 454 457 if (new_rend.isEmpty()) -
libs/libmythtv/videooutwindow.h
16 16 #include "videoouttypes.h" 17 17 18 18 class NuppelVideoPlayer; 19 class PlaySettings; 19 20 20 21 class VideoOutWindow 21 22 { 22 23 public: 23 VideoOutWindow( );24 VideoOutWindow(PlaySettings *settings); 24 25 25 26 bool Init(const QSize &new_video_dim, float aspect, 26 27 const QRect &new_display_visible_rect, … … 162 163 bool allowpreviewepg; 163 164 PIPState pip_state; 164 165 166 PlaySettings *settings; 167 165 168 // Constants 166 169 static const float kManualZoomMaxHorizontalZoom; 167 170 static const float kManualZoomMaxVerticalZoom; -
libs/libmythtv/videoout_directfb.h
12 12 { 13 13 public: 14 14 static void GetRenderOptions(render_opts &opts, QStringList &cpudeints); 15 VideoOutputDirectfb( );15 VideoOutputDirectfb(PlaySettings *settings); 16 16 ~VideoOutputDirectfb(); 17 17 18 18 bool Init(int width, int height, float aspect, WId winid, -
libs/libmythtv/playercontext.h
28 28 class LiveTVChain; 29 29 class MythDialog; 30 30 class QPainter; 31 class PlaySettings; 31 32 32 33 struct osdInfo 33 34 { … … 112 113 void SetRecorder(RemoteEncoder *rec); 113 114 void SetTVChain(LiveTVChain *chain); 114 115 void SetRingBuffer(RingBuffer *buf); 115 void SetPlayingInfo(const ProgramInfo *info );116 void SetPlayingInfo(const ProgramInfo *info, PlaySettings *settings=NULL); 116 117 void SetPlayGroup(const QString &group); 117 118 void SetPseudoLiveTV(const ProgramInfo *pi, PseudoState new_state); 118 119 void SetPIPLocation(int loc) { pipLocation = loc; } … … 168 169 LiveTVChain *tvchain; 169 170 RingBuffer *buffer; 170 171 ProgramInfo *playingInfo; ///< Currently playing info 172 PlaySettings *settings; // corresponding to playingInfo 171 173 long long playingLen; ///< Initial CalculateLength() 172 174 bool nohardwaredecoders; // < Disable use of VDPAU decoding 173 175 int last_cardid; ///< CardID of current/last recorder -
libs/libmythtv/vsync.h
87 87 88 88 // documented in vsync.cpp 89 89 static VideoSync *BestMethod(VideoOutput*, 90 PlaySettings *settings, 90 91 uint frame_interval, uint refresh_interval, 91 92 bool interlaced); 92 93 protected: -
libs/libmythtv/videoout_xv.h
51 51 friend class XvMCOSD; 52 52 public: 53 53 static void GetRenderOptions(render_opts &opts, QStringList &cpudeints); 54 VideoOutputXv( MythCodecID av_codec_id);54 VideoOutputXv(PlaySettings *settings, MythCodecID av_codec_id); 55 55 ~VideoOutputXv(); 56 56 57 57 bool Init(int width, int height, float aspect, WId winid, … … 109 109 static MythCodecID GetBestSupportedCodec(uint width, uint height, 110 110 uint osd_width, uint osd_height, 111 111 uint stream_type, int xvmc_chroma, 112 bool test_surface, bool force_xv); 112 bool test_surface, bool force_xv, 113 PlaySettings *settings); 113 114 114 115 static int GrabSuitableXvPort(MythXDisplay* disp, Window root, 116 PlaySettings *settings, 115 117 MythCodecID type, 116 118 uint width, uint height, 117 119 bool &xvsetdefaults, -
libs/libmythtv/videoout_xv.cpp
165 165 * \see VideoOutput, VideoBuffers 166 166 * 167 167 */ 168 VideoOutputXv::VideoOutputXv( MythCodecID codec_id)169 : VideoOutput( ),168 VideoOutputXv::VideoOutputXv(PlaySettings *settings, MythCodecID codec_id) 169 : VideoOutput(settings), 170 170 myth_codec_id(codec_id), video_output_subtype(XVUnknown), 171 171 global_lock(QMutex::Recursive), 172 172 … … 404 404 * \return port number if it succeeds, else -1. 405 405 */ 406 406 int VideoOutputXv::GrabSuitableXvPort(MythXDisplay* disp, Window root, 407 PlaySettings *settings, 407 408 MythCodecID mcodecid, 408 409 uint width, uint height, 409 410 bool &xvsetdefaults, … … 488 489 } 489 490 490 491 // figure out if we want chromakeying.. 491 VideoDisplayProfile vdp ;492 VideoDisplayProfile vdp(settings); 492 493 vdp.SetInput(QSize(width, height)); 493 494 bool check_for_colorkey = (vdp.GetOSDRenderer() == "chromakey"); 494 495 … … 781 782 disp->StartLog(); 782 783 QString adaptor_name = QString::null; 783 784 const QSize video_dim = windows[0].GetVideoDim(); 784 xv_port = GrabSuitableXvPort(disp, disp->GetRoot(), mcodecid,785 xv_port = GrabSuitableXvPort(disp, disp->GetRoot(), settings, mcodecid, 785 786 video_dim.width(), video_dim.height(), 786 787 xv_set_defaults, 787 788 xvmc_chroma, &xvmc_surf_info, &adaptor_name); … … 860 861 disp->StartLog(); 861 862 QString adaptor_name = QString::null; 862 863 const QSize video_dim = windows[0].GetVideoDim(); 863 xv_port = GrabSuitableXvPort(disp, disp->GetRoot(), kCodec_MPEG2,864 xv_port = GrabSuitableXvPort(disp, disp->GetRoot(), settings, kCodec_MPEG2, 864 865 video_dim.width(), video_dim.height(), 865 866 xv_set_defaults, 0, NULL, &adaptor_name); 866 867 if (xv_port == -1) … … 1014 1015 uint width, uint height, 1015 1016 uint osd_width, uint osd_height, 1016 1017 uint stream_type, int xvmc_chroma, 1017 bool test_surface, bool force_xv) 1018 bool test_surface, bool force_xv, 1019 PlaySettings *settings) 1018 1020 { 1019 1021 (void)width, (void)height, (void)osd_width, (void)osd_height; 1020 1022 (void)stream_type, (void)xvmc_chroma, (void)test_surface; … … 1025 1027 return ret; 1026 1028 1027 1029 #ifdef USING_XVMC 1028 VideoDisplayProfile vdp ;1030 VideoDisplayProfile vdp(settings); 1029 1031 vdp.SetInput(QSize(width, height)); 1030 1032 QString dec = vdp.GetDecoder(); 1031 1033 if ((dec == "libmpeg2") || (dec == "ffmpeg")) … … 1075 1077 1076 1078 ok = false; 1077 1079 bool dummy; 1078 int port = GrabSuitableXvPort(disp, disp->GetRoot(), ret, width, height, 1080 int port = GrabSuitableXvPort(disp, disp->GetRoot(), settings, 1081 ret, width, height, 1079 1082 dummy, xvmc_chroma, &info); 1080 1083 if (port >= 0) 1081 1084 { -
libs/libmythtv/videooutbase.h
31 31 class FilterChain; 32 32 class FilterManager; 33 33 class OpenGLContextGLX; 34 class PlaySettings; 34 35 35 36 typedef QMap<NuppelVideoPlayer*,PIPLocation> PIPMap; 36 37 … … 51 52 PIPState pipState, 52 53 const QSize &video_dim, float video_aspect, 53 54 WId win_id, const QRect &display_rect, 54 float video_prate, WId embed_id); 55 float video_prate, WId embed_id, 56 PlaySettings *settings); 55 57 56 VideoOutput( );58 VideoOutput(PlaySettings *settings); 57 59 virtual ~VideoOutput(); 58 60 59 61 virtual bool Init(int width, int height, float aspect, … … 61 63 int winh, WId embedid = 0); 62 64 virtual void InitOSD(OSD *osd); 63 65 virtual void SetVideoFrameRate(float); 64 virtual bool IsPreferredRenderer(QSize video_size );66 virtual bool IsPreferredRenderer(QSize video_size, PlaySettings *settings); 65 67 virtual bool SetDeinterlacingEnabled(bool); 66 68 virtual bool SetupDeinterlace(bool i, const QString& ovrf=""); 67 69 virtual void FallbackDeint(void); … … 337 339 // OSD painter and surface 338 340 MythYUVAPainter *osd_painter; 339 341 MythImage *osd_image; 342 343 PlaySettings *settings; 340 344 }; 341 345 342 346 #endif -
libs/libmythtv/textsubtitleparser.cpp
21 21 #include "RingBuffer.h" 22 22 #include "textsubtitleparser.h" 23 23 #include "xine_demux_sputext.h" 24 #include "playsettings.h" 24 25 25 26 bool operator<(const text_subtitle_t& left, 26 27 const text_subtitle_t& right) … … 116 117 m_lock.unlock(); 117 118 } 118 119 119 bool TextSubtitleParser::LoadSubtitles(QString fileName, TextSubtitles &target) 120 bool TextSubtitleParser::LoadSubtitles(QString fileName, TextSubtitles &target, 121 PlaySettings *settings) 120 122 { 121 123 demux_sputext_t sub_data; 122 124 sub_data.rbuffer = new RingBuffer(fileName, 0, false); … … 134 136 target.SetFrameBasedTiming(!sub_data.uses_time); 135 137 136 138 QTextCodec *textCodec = NULL; 137 QString codec = gCoreContext->GetSetting("SubtitleCodec", "");139 QString codec = settings->GetSetting("SubtitleCodec", ""); 138 140 if (!codec.isEmpty()) 139 141 textCodec = QTextCodec::codecForName(codec.toLatin1()); 140 142 if (!textCodec) -
libs/libmythtv/subtitlescreen.cpp
7 7 #include "mythuiimage.h" 8 8 #include "mythpainter.h" 9 9 #include "subtitlescreen.h" 10 #include "playsettings.h" 10 11 11 12 #define LOC QString("Subtitles: ") 12 13 #define LOC_WARN QString("Subtitles Warning: ") … … 62 63 VERBOSE(VB_IMPORTANT, LOC_WARN + "Failed to get CEA-608 reader."); 63 64 if (!m_708reader) 64 65 VERBOSE(VB_IMPORTANT, LOC_WARN + "Failed to get CEA-708 reader."); 65 m_useBackground = (bool) gCoreContext->GetNumSetting("CCBackground", 0);66 m_708fontZoom = gCoreContext->GetNumSetting("OSDCC708TextZoom", 100);66 m_useBackground = (bool)m_player->GetPlaySettings()->GetNumSetting("CCBackground", 0); 67 m_708fontZoom = m_player->GetPlaySettings()->GetNumSetting("OSDCC708TextZoom", 100); 67 68 return true; 68 69 } 69 70 -
libs/libmythtv/videoout_quartz.h
3 3 4 4 class DVDV; 5 5 struct QuartzData; 6 class PlaySettings; 6 7 7 8 #include "videooutbase.h" 8 9 … … 10 11 { 11 12 public: 12 13 static void GetRenderOptions(render_opts &opts, QStringList &cpudeints); 13 VideoOutputQuartz(MythCodecID av_codec_id, void *codec_priv); 14 VideoOutputQuartz(PlaySettings *settings, MythCodecID av_codec_id, 15 void *codec_priv); 14 16 ~VideoOutputQuartz(); 15 17 16 18 bool Init(int width, int height, float aspect, WId winid, … … 55 57 static MythCodecID GetBestSupportedCodec( 56 58 uint width, uint height, 57 59 uint osd_width, uint osd_height, 58 uint stream_type, uint fourcc );60 uint stream_type, uint fourcc, PlaySettings *settings); 59 61 virtual bool NeedExtraAudioDecode(void) const 60 62 { return !codec_is_std(myth_codec_id); } 61 63 -
libs/libmythtv/videodisplayprofile.cpp
8 8 #include "mythverbose.h" 9 9 #include "videooutbase.h" 10 10 #include "avformatdecoder.h" 11 #include "playsettings.h" 11 12 12 13 bool ProfileItem::IsMatch(const QSize &size, float rate) const 13 14 { … … 212 213 pref_map_t VideoDisplayProfile::dec_name; 213 214 safe_list_t VideoDisplayProfile::safe_decoders; 214 215 215 VideoDisplayProfile::VideoDisplayProfile( )216 VideoDisplayProfile::VideoDisplayProfile(PlaySettings *settings) 216 217 : lock(QMutex::Recursive), last_size(0,0), last_rate(0.0f), 217 218 last_video_renderer(QString::null) 218 219 { … … 220 221 init_statics(); 221 222 222 223 QString hostname = gCoreContext->GetHostName(); 223 QString cur_profile = GetDefaultProfileName(hostname );224 QString cur_profile = GetDefaultProfileName(hostname, settings); 224 225 uint groupid = GetProfileGroupID(cur_profile, hostname); 225 226 226 227 item_list_t items = LoadDB(groupid); … … 772 773 return list; 773 774 } 774 775 775 QString VideoDisplayProfile::GetDefaultProfileName(const QString &hostname) 776 QString VideoDisplayProfile::GetDefaultProfileName(const QString &hostname, 777 PlaySettings *settings) 776 778 { 777 779 QString tmp = 780 settings ? settings->GetSetting("DefaultVideoPlaybackProfile", "") : 778 781 gCoreContext->GetSettingOnHost("DefaultVideoPlaybackProfile", hostname); 779 782 780 783 QStringList profiles = GetProfiles(hostname); -
libs/libmythtv/videoout_null.h
9 9 { 10 10 public: 11 11 static void GetRenderOptions(render_opts &opts, QStringList &cpudeints); 12 VideoOutputNull( );12 VideoOutputNull(PlaySettings *settings); 13 13 ~VideoOutputNull(); 14 14 15 15 bool Init(int width, int height, float aspect, WId winid, -
libs/libmyth/settings.cpp
235 235 return -1; 236 236 } 237 237 238 QString SelectSetting::GetValueLabel(const QString &value) 239 { 240 selectionList::const_iterator iterValues = values.begin(); 241 selectionList::const_iterator iterLabels = labels.begin(); 242 for (; iterValues != values.end() && iterLabels != labels.end(); 243 ++iterValues, ++iterLabels) 244 { 245 if (*iterValues == value) 246 return *iterLabels; 247 } 248 249 return "???"; 250 } 251 238 252 bool SelectSetting::ReplaceLabel(const QString &new_label, const QString &value) 239 253 { 240 254 int i = getValueIndex(value); … … 299 313 QLabel *label = new QLabel(); 300 314 label->setText(getLabel() + ": "); 301 315 layout->addWidget(label); 316 labelWidget = label; 302 317 } 303 318 304 319 bxwidget = widget; … … 327 342 328 343 widget->setLayout(layout); 329 344 345 setValue(getValue()); 346 330 347 return widget; 331 348 } 332 349 … … 336 353 { 337 354 bxwidget = NULL; 338 355 edit = NULL; 356 labelWidget = NULL; 339 357 } 340 358 } 341 359 … … 373 391 Setting::setHelpText(str); 374 392 } 375 393 394 static void adjustFont(QWidget *widget, bool isDefault) 395 { 396 if (widget) 397 { 398 QFont f = widget->font(); 399 f.setWeight(isDefault ? QFont::Light : QFont::Bold); 400 widget->setFont(f); 401 } 402 } 403 404 void LineEditSetting::setValue(const QString &newValue) 405 { 406 if (adjustOnBlank) 407 { 408 adjustFont(labelWidget, newValue.isEmpty()); 409 adjustFont(edit, newValue.isEmpty()); 410 } 411 Setting::setValue(newValue); 412 } 413 376 414 void BoundedIntegerSetting::setValue(int newValue) 377 415 { 378 416 newValue = std::max(std::min(newValue, max), min); … … 439 477 440 478 SpinBoxSetting::SpinBoxSetting( 441 479 Storage *_storage, int _min, int _max, int _step, 442 bool _allow_single_step, QString _special_value_text) : 480 bool _allow_single_step, QString _special_value_text, 481 bool change_style_on_special) : 443 482 BoundedIntegerSetting(_storage, _min, _max, _step), 444 483 spinbox(NULL), relayEnabled(true), 445 sstep(_allow_single_step), svtext("") 484 sstep(_allow_single_step), svtext(""), labelWidget(NULL), 485 changeOnSpecial(change_style_on_special) 446 486 { 447 487 if (!_special_value_text.isEmpty()) 448 488 svtext = _special_value_text; … … 476 516 QLabel *label = new QLabel(); 477 517 label->setText(getLabel() + ": "); 478 518 layout->addWidget(label); 519 labelWidget = label; 479 520 } 480 521 481 522 bxwidget = widget; … … 506 547 507 548 widget->setLayout(layout); 508 549 550 setValue(intValue()); 551 509 552 return widget; 510 553 } 511 554 … … 515 558 { 516 559 bxwidget = NULL; 517 560 spinbox = NULL; 561 labelWidget = NULL; 518 562 } 519 563 } 520 564 521 565 void SpinBoxSetting::setValue(int newValue) 522 566 { 523 567 newValue = std::max(std::min(newValue, max), min); 568 if (changeOnSpecial) 569 { 570 adjustFont(labelWidget, (newValue == min)); 571 adjustFont(spinbox, (newValue == min)); 572 } 524 573 if (spinbox && (spinbox->value() != newValue)) 525 574 { 526 575 //int old = intValue(); … … 631 680 QLabel *label = new QLabel(); 632 681 label->setText(getLabel() + ": "); 633 682 layout->addWidget(label); 683 labelWidget = label; 634 684 } 635 685 636 686 bxwidget = widget; … … 659 709 cbwidget, SLOT(clear())); 660 710 661 711 if (rw) 712 { 662 713 connect(cbwidget, SIGNAL(editTextChanged(const QString &)), 663 714 this, SLOT(editTextChanged(const QString &))); 715 connect(cbwidget, SIGNAL(editTextChanged(const QString &)), 716 this, SLOT(changeLabel(const QString &))); 717 } 664 718 665 719 if (cg) 666 720 connect(cbwidget, SIGNAL(changeHelpText(QString)), cg, … … 673 727 674 728 widget->setLayout(layout); 675 729 730 setValue(current); 731 676 732 return widget; 677 733 } 678 734 … … 682 738 { 683 739 bxwidget = NULL; 684 740 cbwidget = NULL; 741 labelWidget = NULL; 685 742 } 686 743 } 687 744 … … 717 774 718 775 if (rw) 719 776 { 777 changeLabel(newValue); 720 778 Setting::setValue(newValue); 721 779 if (cbwidget) 722 780 cbwidget->setCurrentIndex(current); … … 727 785 { 728 786 if (cbwidget) 729 787 cbwidget->setCurrentIndex(which); 788 changeLabel(labels[which]); 730 789 SelectSetting::setValue(which); 731 790 } 732 791 733 void ComboBoxSetting::addSelection( 734 const QString &label, QString value, bool select) 792 void ComboBoxSetting::changeLabel(const QString &newLabel) 735 793 { 794 if (changeOnSpecial) 795 { 796 adjustFont(labelWidget, specialLabel == newLabel); 797 adjustFont(cbwidget, specialLabel == newLabel); 798 } 799 } 800 801 void ComboBoxSetting::addSelection(const QString &label, QString value, 802 bool select, bool special_formatting) 803 { 736 804 if ((findSelection(label, value) < 0) && cbwidget) 737 805 { 738 806 cbwidget->insertItem(label); 739 807 } 740 808 809 if (special_formatting) 810 { 811 changeOnSpecial = true; 812 specialLabel = label; 813 } 814 741 815 SelectSetting::addSelection(label, value, select); 742 816 743 817 if (cbwidget && isSet) … … 953 1027 BooleanSetting::setHelpText(str); 954 1028 } 955 1029 1030 QWidget* TristateCheckBoxSetting::configWidget(ConfigurationGroup *cg, 1031 QWidget* parent, 1032 const char* widgetName) { 1033 widget = new MythCheckBox(parent, widgetName, true); 1034 connect(widget, SIGNAL(destroyed(QObject*)), 1035 this, SLOT(widgetDeleted(QObject*))); 1036 1037 widget->setHelpText(getHelpText()); 1038 widget->setText(getLabel()); 1039 widget->setCheckState(tristateValue()); 1040 setValue(tristateValue()); 1041 1042 connect(widget, SIGNAL(stateChanged(int)), 1043 this, SLOT(setValue(int))); 1044 connect(this, SIGNAL(valueChanged(int)), 1045 this, SLOT(relayValueChanged(int))); 1046 1047 if (cg) 1048 connect(widget, SIGNAL(changeHelpText(QString)), cg, 1049 SIGNAL(changeHelpText(QString))); 1050 1051 return widget; 1052 } 1053 1054 void TristateCheckBoxSetting::widgetInvalid(QObject *obj) 1055 { 1056 widget = (widget == obj) ? NULL : widget; 1057 } 1058 1059 void TristateCheckBoxSetting::setEnabled(bool fEnabled) 1060 { 1061 TristateSetting::setEnabled(fEnabled); 1062 if (widget) 1063 widget->setEnabled(fEnabled); 1064 } 1065 1066 void TristateCheckBoxSetting::setHelpText(const QString &str) 1067 { 1068 if (widget) 1069 widget->setHelpText(str); 1070 TristateSetting::setHelpText(str); 1071 } 1072 1073 const char *TristateSetting::kPartiallyCheckedString = "default"; 1074 1075 void TristateCheckBoxSetting::setValue(int check) 1076 { 1077 adjustFont(widget, (check != Qt::Checked && check != Qt::Unchecked)); 1078 TristateSetting::setValue(check); 1079 emit valueChanged(check); 1080 } 1081 1082 void TristateSetting::setValue(int check) 1083 { 1084 if (check == Qt::Checked) 1085 Setting::setValue("1"); 1086 else if (check == Qt::Unchecked) 1087 Setting::setValue("0"); 1088 else 1089 Setting::setValue(kPartiallyCheckedString); 1090 emit valueChanged(check); 1091 } 1092 956 1093 void AutoIncrementDBSetting::Save(QString table) 957 1094 { 958 1095 if (intValue() == 0) … … 1140 1277 addSelection(label, value, select); 1141 1278 } 1142 1279 1280 void ImageSelectSetting::addDefaultSelection(const QString label, 1281 const QString value, 1282 const QString defaultValue, 1283 bool select) 1284 { 1285 for (unsigned i=0; i<values.size(); i++) 1286 { 1287 if (values[i] == defaultValue) 1288 { 1289 changeOnSpecial = true; 1290 specialLabel = label; 1291 images.push_back(new QImage(*images[i])); 1292 addSelection(label, value, select); 1293 return; 1294 } 1295 } 1296 } 1297 1143 1298 ImageSelectSetting::~ImageSelectSetting() 1144 1299 { 1145 1300 Teardown(); … … 1162 1317 bxwidget = NULL; 1163 1318 imagelabel = NULL; 1164 1319 combo = NULL; 1320 labelWidget = NULL; 1165 1321 } 1166 1322 1167 1323 void ImageSelectSetting::imageSet(int num) … … 1209 1365 QLabel *label = new QLabel(); 1210 1366 label->setText(getLabel() + ":"); 1211 1367 layout->addWidget(label); 1368 labelWidget = label; 1212 1369 } 1213 1370 1214 1371 combo = new MythComboBox(false); … … 1255 1412 connect(combo, SIGNAL(highlighted(int)), this, SLOT(imageSet(int))); 1256 1413 connect(combo, SIGNAL(activated(int)), this, SLOT(setValue(int))); 1257 1414 connect(combo, SIGNAL(activated(int)), this, SLOT(imageSet(int))); 1415 connect(combo, SIGNAL(highlighted(const QString &)), 1416 this, SLOT(changeLabel(const QString &))); 1417 connect(combo, SIGNAL(activated(const QString &)), 1418 this, SLOT(changeLabel(const QString &))); 1258 1419 1259 1420 connect(this, SIGNAL(selectionsCleared()), 1260 1421 combo, SLOT(clear())); … … 1265 1426 1266 1427 bxwidget->setLayout(layout); 1267 1428 1429 changeLabel(GetLabel(current)); 1430 1268 1431 return bxwidget; 1269 1432 } 1270 1433 1434 void ImageSelectSetting::changeLabel(const QString &newLabel) 1435 { 1436 if (changeOnSpecial) 1437 { 1438 adjustFont(labelWidget, specialLabel == newLabel); 1439 adjustFont(combo, specialLabel == newLabel); 1440 } 1441 } 1442 1271 1443 void ImageSelectSetting::widgetInvalid(QObject *obj) 1272 1444 { 1273 1445 if (bxwidget == obj) -
libs/libmyth/mythwidgets.cpp
224 224 else if (action == "DOWN") 225 225 focusNextPrevChild(true); 226 226 else if (action == "LEFT" || action == "RIGHT" || action == "SELECT") 227 toggle(); 227 { 228 if (isTristate()) 229 { 230 Qt::CheckState newState = 231 (Qt::CheckState)(((int)checkState() + 1) % 3); 232 setCheckState(newState); 233 } 234 else 235 toggle(); 236 } 228 237 else 229 238 handled = false; 230 239 } -
libs/libmyth/settings.h
134 134 135 135 class MPUBLIC LineEditSetting : public Setting 136 136 { 137 Q_OBJECT 138 137 139 protected: 138 LineEditSetting(Storage *_storage, bool readwrite = true) : 140 LineEditSetting(Storage *_storage, bool readwrite = true, 141 bool adjust_on_blank = false) : 139 142 Setting(_storage), bxwidget(NULL), edit(NULL), 140 rw(readwrite), password_echo(false) { } 143 rw(readwrite), password_echo(false), 144 adjustOnBlank(adjust_on_blank), labelWidget(NULL) { } 141 145 142 146 public: 143 147 virtual QWidget* configWidget(ConfigurationGroup *cg, QWidget* parent, … … 159 163 160 164 virtual void setHelpText(const QString &str); 161 165 166 public slots: 167 virtual void setValue(const QString &newValue); 168 162 169 private: 163 170 QWidget *bxwidget; 164 171 MythLineEdit *edit; 165 172 bool rw; 166 173 bool password_echo; 174 bool adjustOnBlank; 175 QWidget *labelWidget; 167 176 }; 168 177 169 178 // TODO: set things up so that setting the value as a string emits … … 219 228 public: 220 229 SpinBoxSetting(Storage *_storage, int min, int max, int step, 221 230 bool allow_single_step = false, 222 QString special_value_text = ""); 231 QString special_value_text = "", 232 bool change_style_on_special = false); 223 233 224 234 virtual QWidget *configWidget(ConfigurationGroup *cg, QWidget *parent, 225 235 const char *widgetName = 0); … … 248 258 bool relayEnabled; 249 259 bool sstep; 250 260 QString svtext; 261 QLabel *labelWidget; 262 bool changeOnSpecial; 251 263 }; 252 264 253 265 class MPUBLIC SelectSetting : public Setting … … 277 289 { return (i < labels.size()) ? labels[i] : QString::null; } 278 290 virtual QString GetValue(uint i) const 279 291 { return (i < values.size()) ? values[i] : QString::null; } 292 virtual QString GetValueLabel(const QString &value); 280 293 281 294 signals: 282 295 void selectionAdded(const QString& label, QString value); … … 318 331 protected: 319 332 ComboBoxSetting(Storage *_storage, bool _rw = false, int _step = 1) : 320 333 SelectSetting(_storage), rw(_rw), 321 bxwidget(NULL), cbwidget(NULL), step(_step) { } 334 bxwidget(NULL), cbwidget(NULL), changeOnSpecial(false), 335 specialLabel(""), labelWidget(NULL), step(_step) { } 322 336 323 337 public: 324 338 virtual void setValue(QString newValue); … … 340 354 public slots: 341 355 void addSelection(const QString &label, 342 356 QString value = QString::null, 343 bool select = false); 357 bool select = false, 358 bool special_formatting = false); 344 359 bool removeSelection(const QString &label, 345 360 QString value = QString::null); 361 virtual void changeLabel(const QString &newValue); 346 362 void editTextChanged(const QString &newText); 347 363 348 364 private: 349 365 bool rw; 350 366 QWidget *bxwidget; 351 367 MythComboBox *cbwidget; 368 bool changeOnSpecial; 369 QString specialLabel; 370 QLabel *labelWidget; 352 371 353 372 protected: 354 373 int step; … … 417 436 ImageSelectSetting(Storage *_storage) : 418 437 SelectSetting(_storage), 419 438 bxwidget(NULL), imagelabel(NULL), combo(NULL), 420 m_hmult(1.0f), m_wmult(1.0f) { } 439 m_hmult(1.0f), m_wmult(1.0f), 440 changeOnSpecial(false), specialLabel(""), labelWidget(NULL) { } 421 441 virtual QWidget* configWidget(ConfigurationGroup *cg, QWidget* parent, 422 442 const char* widgetName = 0); 423 443 virtual void widgetInvalid(QObject *obj); … … 428 448 QImage* image, 429 449 QString value=QString::null, 430 450 bool select=false); 451 virtual void addDefaultSelection(const QString label, 452 const QString value, 453 const QString defaultValue, 454 bool select); 431 455 432 456 protected slots: 433 457 void imageSet(int); 458 void changeLabel(const QString &newLabel); 434 459 435 460 protected: 436 461 void Teardown(void); … … 442 467 QLabel *imagelabel; 443 468 MythComboBox *combo; 444 469 float m_hmult, m_wmult; 470 bool changeOnSpecial; 471 QString specialLabel; 472 QLabel *labelWidget; 445 473 }; 446 474 447 475 class MPUBLIC BooleanSetting : public Setting … … 484 512 MythCheckBox *widget; 485 513 }; 486 514 515 class MPUBLIC TristateSetting : public BooleanSetting 516 { 517 Q_OBJECT 518 519 public: 520 TristateSetting(Storage *_storage) : BooleanSetting(_storage) {} 521 522 Qt::CheckState tristateValue(void) const { 523 if (getValue() == "0") 524 return Qt::Unchecked; 525 if (getValue() == "1") 526 return Qt::Checked; 527 return Qt::PartiallyChecked; 528 } 529 530 static const char *kPartiallyCheckedString; 531 532 public slots: 533 virtual void setValue(/*Qt::CheckState*/int check); 534 535 signals: 536 void valueChanged(int); 537 }; 538 539 class MPUBLIC TristateCheckBoxSetting: public TristateSetting { 540 Q_OBJECT 541 542 public: 543 TristateCheckBoxSetting(Storage *_storage) : 544 TristateSetting(_storage), widget(NULL) { } 545 virtual QWidget* configWidget(ConfigurationGroup *cg, QWidget* parent, 546 const char* widgetName = 0); 547 virtual void widgetInvalid(QObject*); 548 549 virtual void setEnabled(bool b); 550 551 virtual void setHelpText(const QString &str); 552 553 554 public slots: 555 virtual void setValue(/*Qt::CheckState*/int check); 556 virtual void relayValueChanged(int state) { 557 if (widget) 558 widget->setCheckState((Qt::CheckState)state); 559 } 560 561 protected: 562 MythCheckBox *widget; 563 }; 564 487 565 class MPUBLIC PathSetting : public ComboBoxSetting 488 566 { 489 567 public: -
libs/libmyth/libmyth.pro
62 62 SOURCES += mythrssmanager.cpp netgrabbermanager.cpp 63 63 SOURCES += rssparse.cpp netutils.cpp 64 64 65 HEADERS += playsettings.h 66 SOURCES += playsettings.cpp 67 65 68 # remove when everything is switched to mythui 66 69 SOURCES += virtualkeyboard_qt.cpp 67 70 -
libs/libmyth/mythconfiggroups.cpp
476 476 Configurable *target) 477 477 { 478 478 VerifyLayout(); 479 bool isDuplicate = triggerMap.values().contains(target); 479 480 triggerMap[triggerValue] = target; 480 481 481 482 if (!configStack) … … 485 486 configStack->setSaveAll(isSaveAll); 486 487 } 487 488 488 configStack->addChild(target); 489 // Don't add a target as a child if it has already been added, 490 // otherwise something goes wrong with signals in the child. 491 if (!isDuplicate) 492 configStack->addChild(target); 489 493 } 490 494 491 495 Setting *TriggeredConfigurationGroup::byName(const QString &settingName) -
libs/libmyth/mythwidgets.h
329 329 Q_OBJECT 330 330 331 331 public: 332 MythCheckBox(QWidget *parent = 0, const char *name = "MythCheckBox") 333 : QCheckBox(parent) { setObjectName(name); }; 332 MythCheckBox(QWidget *parent = 0, const char *name = "MythCheckBox", 333 bool isTristate = false) : QCheckBox(parent) 334 { 335 setObjectName(name); 336 setTristate(isTristate); 337 } 334 338 MythCheckBox(const QString &text, 335 QWidget *parent = 0, const char *name = "MythCheckBox") 336 : QCheckBox(text, parent) { setObjectName(name); }; 339 QWidget *parent = 0, const char *name = "MythCheckBox", 340 bool isTristate = false) : QCheckBox(text, parent) 341 { 342 setObjectName(name); 343 setTristate(isTristate); 344 } 337 345 338 346 void setHelpText(const QString&); 339 347 -
programs/mythfrontend/globalsettings.cpp
37 37 #include "mythconfig.h" 38 38 #include "mythdirs.h" 39 39 #include "mythuihelper.h" 40 #include "playsettings.h" 40 41 42 #define CREATE_CHECKBOX_SETTING(var, name, settings) \ 43 BooleanSetting *var; \ 44 if ((settings)) \ 45 var = new PlaySettingsCheckBox((name), (settings)); \ 46 else \ 47 var = new HostCheckBox((name)) 48 49 #define CREATE_COMBOBOX_SETTING(var, name, settings) \ 50 ComboBoxSetting *var; \ 51 if ((settings)) \ 52 var = new PlaySettingsComboBox((name), (settings)); \ 53 else \ 54 var = new HostComboBox((name)) 55 56 #define CREATE_COMBOBOX1_SETTING(var, name, settings, arg1) \ 57 ComboBoxSetting *var; \ 58 if ((settings)) \ 59 var = new PlaySettingsComboBox((name), (settings), (arg1)); \ 60 else \ 61 var = new HostComboBox((name), (arg1)) 62 63 #define CREATE_SPINBOX_SETTING(var, name, settings, arg1, arg2, arg3, arg4) \ 64 SpinBoxSetting *var; \ 65 if ((settings)) \ 66 var = new PlaySettingsSpinBox((name), (settings), (arg1), (arg2), (arg3), (arg4)); \ 67 else \ 68 var = new HostSpinBox((name), (arg1), (arg2), (arg3), (arg4)) 69 70 #define CREATE_LINEEDIT_SETTING(var, name, settings) \ 71 LineEditSetting *var; \ 72 if ((settings)) \ 73 var = new PlaySettingsLineEdit((name), (settings), ""); \ 74 else \ 75 var = new HostLineEdit((name)) 76 77 // For PlaySettings, use a SpinBox instead of a Slider so that a 78 // default value can be easily used. 79 #define CREATE_SLIDER_SETTING(var, name, settings, arg1, arg2, arg3) \ 80 BoundedIntegerSetting *var; \ 81 if ((settings)) \ 82 var = new PlaySettingsSpinBox((name), (settings), (arg1), (arg2), (arg3)); \ 83 else \ 84 var = new HostSlider((name), (arg1), (arg2), (arg3)) 85 86 #define CREATE_IMAGESELECT_SETTING(var, name, settings) \ 87 ImageSelectSetting *var; \ 88 if ((settings)) \ 89 var = new PlaySettingsImageSelect((name), (settings)); \ 90 else \ 91 var = new HostImageSelect((name)) 92 93 static Setting *wrap(Setting *obj, PlaySettings *settings, 94 bool twoLineLabel=false) 95 { 96 if (!settings) 97 return obj; 98 99 // Get the setting name 100 PlaySettingsCombinedStorage *storage = 101 dynamic_cast<PlaySettingsCombinedStorage *>(obj); 102 const QString &name = storage->getName(); 103 104 // Get the default value and label. The label is different 105 // from the value for most object types. 106 QString defaultValue = settings->GetSetting(name, "", true); 107 QString defaultLabel(defaultValue); 108 if (dynamic_cast<BooleanSetting *>(obj)) 109 defaultLabel = (defaultValue == "0" || defaultValue.isEmpty() ? 110 QObject::tr("disabled") : QObject::tr("enabled")); 111 if (dynamic_cast<SpinBoxSetting *>(obj) && defaultValue.isEmpty()) 112 defaultLabel = "0"; 113 ComboBoxSetting *cb = dynamic_cast<ComboBoxSetting *>(obj); 114 if (cb) 115 { 116 defaultLabel = cb->GetValueLabel(defaultValue); 117 // Add the default selection to a ComboBox 118 cb->addSelection(QString("(") + QObject::tr("default") + ")", 119 storage->getDefault(), 120 !settings->IsOverridden(name), 121 true); 122 } 123 ImageSelectSetting *is = dynamic_cast<ImageSelectSetting *>(obj); 124 if (is) 125 { 126 defaultLabel = is->GetValueLabel(defaultValue); 127 // Add the default selection to a ImageSelect 128 is->addDefaultSelection(QString("(") + QObject::tr("default") + ")", 129 storage->getDefault(), 130 defaultValue, 131 !settings->IsOverridden(name)); 132 } 133 134 // Change the help text to include the default and its source. 135 QString helpPrefix; 136 if (dynamic_cast<LineEditSetting *>(obj)) 137 helpPrefix = QObject::tr("Leave blank to keep default value"); 138 else 139 helpPrefix = QObject::tr("Override default value"); 140 helpPrefix += " (" + defaultLabel + ") "; 141 QString inheritsFrom = settings->InheritsFrom(name); 142 if (inheritsFrom.isNull()) 143 helpPrefix += QObject::tr("from global settings"); 144 else 145 helpPrefix += QObject::tr("from group") + " " + inheritsFrom; 146 helpPrefix += ". " + obj->getHelpText(); 147 obj->setHelpText(helpPrefix); 148 149 // Change the label to include the default. 150 obj->setLabel(obj->getLabel() + (twoLineLabel ? "\n" : "") + 151 " (" + defaultLabel + ")"); 152 153 return obj; 154 } 155 41 156 class TriggeredItem : public TriggeredConfigurationGroup 42 157 { 43 158 public: … … 593 708 return gs; 594 709 } 595 710 596 static HostCheckBox *DecodeExtraAudio()711 static Setting *DecodeExtraAudio(PlaySettings *settings) 597 712 { 598 HostCheckBox *gc = new HostCheckBox("DecodeExtraAudio");713 CREATE_CHECKBOX_SETTING(gc, "DecodeExtraAudio", settings); 599 714 gc->setLabel(QObject::tr("Extra audio buffering")); 600 715 gc->setValue(true); 601 716 gc->setHelpText(QObject::tr("Enable this setting if MythTV is playing " … … 604 719 "effect on framegrabbers (MPEG-4/RTJPEG). MythTV will " 605 720 "keep extra audio data in its internal buffers to " 606 721 "workaround this bug.")); 607 return gc;722 return wrap(gc, settings); 608 723 } 609 724 610 static HostComboBox *PIPLocationComboBox()725 static Setting *PIPLocationComboBox(PlaySettings *settings) 611 726 { 612 HostComboBox *gc = new HostComboBox("PIPLocation");727 CREATE_COMBOBOX_SETTING(gc, "PIPLocation", settings); 613 728 gc->setLabel(QObject::tr("PIP video location")); 614 729 for (uint loc = 0; loc < kPIP_END; ++loc) 615 730 gc->addSelection(toString((PIPLocation) loc), QString::number(loc)); 616 731 gc->setHelpText(QObject::tr("Location of PIP Video window.")); 617 return gc;732 return wrap(gc, settings); 618 733 } 619 734 620 735 static GlobalLineEdit *AllRecGroupPassword() … … 710 825 return gc; 711 826 } 712 827 713 static HostCheckBox *SmartForward()828 static Setting *SmartForward(PlaySettings *settings) 714 829 { 715 HostCheckBox *gc = new HostCheckBox("SmartForward");830 CREATE_CHECKBOX_SETTING(gc, "SmartForward", settings); 716 831 gc->setLabel(QObject::tr("Smart fast forwarding")); 717 832 gc->setValue(false); 718 833 gc->setHelpText(QObject::tr("If enabled, then immediately after " 719 834 "rewinding, only skip forward the same amount as " 720 835 "skipping backwards.")); 721 return gc;836 return wrap(gc, settings); 722 837 } 723 838 724 static HostCheckBox *ExactSeeking()839 static Setting *ExactSeeking(PlaySettings *settings) 725 840 { 726 HostCheckBox *gc = new HostCheckBox("ExactSeeking");841 CREATE_CHECKBOX_SETTING(gc, "ExactSeeking", settings); 727 842 gc->setLabel(QObject::tr("Seek to exact frame")); 728 843 gc->setValue(false); 729 844 gc->setHelpText(QObject::tr("If enabled, seeking is frame exact, but " 730 845 "slower.")); 731 return gc;846 return wrap(gc, settings); 732 847 } 733 848 734 849 static GlobalComboBox *CommercialSkipMethod() … … 746 861 return bc; 747 862 } 748 863 749 static HostComboBox *AutoCommercialSkip()864 static Setting *AutoCommercialSkip(PlaySettings *settings) 750 865 { 751 HostComboBox *gc = new HostComboBox("AutoCommercialSkip");866 CREATE_COMBOBOX_SETTING(gc, "AutoCommercialSkip", settings); 752 867 gc->setLabel(QObject::tr("Automatically skip commercials")); 753 868 gc->addSelection(QObject::tr("Off"), "0"); 754 869 gc->addSelection(QObject::tr("Notify, but do not skip"), "2"); … … 757 872 "have been flagged during automatic commercial detection " 758 873 "or by the mythcommflag program, or just notify that a " 759 874 "commercial has been detected.")); 760 return gc;875 return wrap(gc, settings); 761 876 } 762 877 763 878 static GlobalCheckBox *AutoCommercialFlag() … … 843 958 return bc; 844 959 } 845 960 846 static HostSpinBox *CommRewindAmount()961 static Setting *CommRewindAmount(PlaySettings *settings) 847 962 { 848 HostSpinBox *gs = new HostSpinBox("CommRewindAmount", 0, 10, 1);963 CREATE_SPINBOX_SETTING(gs, "CommRewindAmount", settings, 0, 10, 1, false); 849 964 gs->setLabel(QObject::tr("Commercial skip automatic rewind amount (secs)")); 850 965 gs->setHelpText(QObject::tr("MythTV will automatically rewind " 851 966 "this many seconds after performing a commercial skip.")); 852 967 gs->setValue(0); 853 return gs;968 return wrap(gs, settings); 854 969 } 855 970 856 static HostSpinBox *CommNotifyAmount()971 static Setting *CommNotifyAmount(PlaySettings *settings) 857 972 { 858 HostSpinBox *gs = new HostSpinBox("CommNotifyAmount", 0, 10, 1);973 CREATE_SPINBOX_SETTING(gs, "CommNotifyAmount", settings, 0, 10, 1, false); 859 974 gs->setLabel(QObject::tr("Commercial skip notify amount (secs)")); 860 975 gs->setHelpText(QObject::tr("MythTV will act like a commercial " 861 976 "begins this many seconds early. This can be useful " 862 977 "when commercial notification is used in place of " 863 978 "automatic skipping.")); 864 979 gs->setValue(0); 865 return gs;980 return wrap(gs, settings); 866 981 } 867 982 868 983 static GlobalSpinBox *MaximumCommercialSkip() … … 1664 1779 labels[j]->setValue(label_i); 1665 1780 } 1666 1781 1667 PlaybackProfileConfigs::PlaybackProfileConfigs(const QString &str) : 1782 PlaybackProfileConfigs::PlaybackProfileConfigs(const QString &str, 1783 PlaySettings *settings) : 1668 1784 TriggeredConfigurationGroup(false, true, true, true, 1669 1785 false, false, true, true), grouptrigger(NULL) 1670 1786 { 1671 1787 setLabel(QObject::tr("Playback Profiles") + str); 1788 if (settings) 1789 setLabel(QObject::tr("Playback group settings for ") + 1790 settings->mGroupName + " - " + 1791 getLabel()); 1672 1792 1673 1793 QString host = gCoreContext->GetHostName(); 1674 1794 QStringList profiles = VideoDisplayProfile::GetProfiles(host); … … 1696 1816 profiles = VideoDisplayProfile::GetProfiles(host); 1697 1817 } 1698 1818 1699 QString profile = VideoDisplayProfile::GetDefaultProfileName(host );1819 QString profile = VideoDisplayProfile::GetDefaultProfileName(host, settings); 1700 1820 if (!profiles.contains(profile)) 1701 1821 { 1702 1822 profile = (profiles.contains("Normal")) ? "Normal" : profiles[0]; 1703 1823 VideoDisplayProfile::SetDefaultProfileName(profile, host); 1704 1824 } 1705 1825 1706 grouptrigger = new HostComboBox("DefaultVideoPlaybackProfile"); 1826 CREATE_COMBOBOX_SETTING(gs, "DefaultVideoPlaybackProfile", settings); 1827 grouptrigger = gs; 1707 1828 grouptrigger->setLabel(QObject::tr("Current Video Playback Profile")); 1708 1829 QStringList::const_iterator it; 1709 1830 for (it = profiles.begin(); it != profiles.end(); ++it) 1710 1831 grouptrigger->addSelection(ProgramInfo::i18n(*it), *it); 1832 if (settings) 1833 { 1834 addChild(wrap(grouptrigger, settings)); 1835 return; 1836 } 1711 1837 1712 1838 HorizontalConfigurationGroup *grp = 1713 1839 new HorizontalConfigurationGroup(false, false, true, true); … … 1840 1966 return gc; 1841 1967 } 1842 1968 1843 static HostSpinBox *FFRewReposTime()1969 static Setting *FFRewReposTime(PlaySettings *settings) 1844 1970 { 1845 HostSpinBox *gs = new HostSpinBox("FFRewReposTime", 0, 200, 5);1971 CREATE_SPINBOX_SETTING(gs, "FFRewReposTime", settings, 0, 200, 5, false); 1846 1972 gs->setLabel(QObject::tr("Fast forward/rewind reposition amount")); 1847 1973 gs->setValue(100); 1848 1974 gs->setHelpText(QObject::tr("When exiting sticky keys fast forward/rewind " … … 1850 1976 "resuming normal playback. This " 1851 1977 "compensates for the reaction time between seeing " 1852 1978 "where to resume playback and actually exiting seeking.")); 1853 return gs;1979 return wrap(gs, settings); 1854 1980 } 1855 1981 1856 static HostCheckBox *FFRewReverse()1982 static Setting *FFRewReverse(PlaySettings *settings) 1857 1983 { 1858 HostCheckBox *gc = new HostCheckBox("FFRewReverse");1984 CREATE_CHECKBOX_SETTING(gc, "FFRewReverse", settings); 1859 1985 gc->setLabel(QObject::tr("Reverse direction in fast forward/rewind")); 1860 1986 gc->setValue(true); 1861 1987 gc->setHelpText(QObject::tr("If enabled, pressing the sticky rewind key " … … 1863 1989 "vice versa. If disabled, it will decrease the " 1864 1990 "current speed or switch to play mode if " 1865 1991 "the speed can't be decreased further.")); 1866 return gc;1992 return wrap(gc, settings); 1867 1993 } 1868 1994 1869 1995 static HostSpinBox *ThemeCacheSize() … … 1925 2051 return gc; 1926 2052 } 1927 2053 1928 static HostSpinBox *OSDCC708TextZoomPercentage(void)2054 static Setting *OSDCC708TextZoomPercentage(PlaySettings *settings) 1929 2055 { 1930 HostSpinBox *gs = new HostSpinBox("OSDCC708TextZoom", 50, 200, 5); 2056 CREATE_SPINBOX_SETTING(gs, "OSDCC708TextZoom", settings, 2057 50, 200, 5, false); 1931 2058 gs->setLabel(QObject::tr("ATSC caption text zoom percentage")); 1932 2059 gs->setValue(100); 1933 2060 gs->setHelpText(QObject::tr("Use this to enlarge or shrink captions.")); 1934 2061 1935 return gs;2062 return wrap(gs, settings); 1936 2063 } 1937 2064 1938 static HostComboBox *SubtitleCodec()2065 static Setting *SubtitleCodec(PlaySettings *settings) 1939 2066 { 1940 HostComboBox *gc = new HostComboBox("SubtitleCodec");2067 CREATE_COMBOBOX_SETTING(gc, "SubtitleCodec", settings); 1941 2068 1942 2069 gc->setLabel(QObject::tr("Subtitle Codec")); 1943 2070 QList<QByteArray> list = QTextCodec::availableCodecs(); … … 1959 2086 return gc; 1960 2087 } 1961 2088 1962 static HostSpinBox *VertScanPercentage()2089 static Setting *VertScanPercentage(PlaySettings *settings) 1963 2090 { 1964 HostSpinBox *gs = new HostSpinBox("VertScanPercentage", -100, 100, 1); 2091 CREATE_SPINBOX_SETTING(gs, "VertScanPercentage", settings, 2092 -100, 100, 1, false); 1965 2093 gs->setLabel(QObject::tr("Vertical scaling")); 1966 2094 gs->setValue(0); 1967 2095 gs->setHelpText(QObject::tr( 1968 2096 "Adjust this if the image does not fill your " 1969 2097 "screen vertically. Range -100% to 100%")); 1970 return gs;2098 return wrap(gs, settings); 1971 2099 } 1972 2100 1973 static HostSpinBox *HorizScanPercentage()2101 static Setting *HorizScanPercentage(PlaySettings *settings) 1974 2102 { 1975 HostSpinBox *gs = new HostSpinBox("HorizScanPercentage", -100, 100, 1); 2103 CREATE_SPINBOX_SETTING(gs, "HorizScanPercentage", settings, 2104 -100, 100, 1, false); 1976 2105 gs->setLabel(QObject::tr("Horizontal scaling")); 1977 2106 gs->setValue(0); 1978 2107 gs->setHelpText(QObject::tr( 1979 2108 "Adjust this if the image does not fill your " 1980 2109 "screen horizontally. Range -100% to 100%")); 1981 return gs;2110 return wrap(gs, settings); 1982 2111 }; 1983 2112 1984 static HostSpinBox *XScanDisplacement()2113 static Setting *XScanDisplacement(PlaySettings *settings) 1985 2114 { 1986 HostSpinBox *gs = new HostSpinBox("XScanDisplacement", -50, 50, 1); 2115 CREATE_SPINBOX_SETTING(gs, "XScanDisplacement", settings, 2116 -50, 50, 1, false); 1987 2117 gs->setLabel(QObject::tr("Scan displacement (X)")); 1988 2118 gs->setValue(0); 1989 2119 gs->setHelpText(QObject::tr("Adjust this to move the image horizontally.")); 1990 return gs;2120 return wrap(gs, settings); 1991 2121 } 1992 2122 1993 static HostSpinBox *YScanDisplacement()2123 static Setting *YScanDisplacement(PlaySettings *settings) 1994 2124 { 1995 HostSpinBox *gs = new HostSpinBox("YScanDisplacement", -50, 50, 1); 2125 CREATE_SPINBOX_SETTING(gs, "YScanDisplacement", settings, 2126 -50, 50, 1, false); 1996 2127 gs->setLabel(QObject::tr("Scan displacement (Y)")); 1997 2128 gs->setValue(0); 1998 2129 gs->setHelpText(QObject::tr("Adjust this to move the image vertically.")); 1999 return gs;2130 return wrap(gs, settings); 2000 2131 }; 2001 2132 2002 2133 static HostCheckBox *AlwaysStreamFiles() … … 2011 2142 return gc; 2012 2143 } 2013 2144 2014 static HostCheckBox *CCBackground()2145 static Setting *CCBackground(PlaySettings *settings) 2015 2146 { 2016 HostCheckBox *gc = new HostCheckBox("CCBackground");2147 CREATE_CHECKBOX_SETTING(gc, "CCBackground", settings); 2017 2148 gc->setLabel(QObject::tr("Black background for closed captioning")); 2018 2149 gc->setValue(false); 2019 2150 gc->setHelpText(QObject::tr( 2020 2151 "If enabled, captions will be displayed " 2021 2152 "as white text over a black background " 2022 2153 "for better contrast.")); 2023 return gc;2154 return wrap(gc, settings); 2024 2155 } 2025 2156 2026 static HostCheckBox *DefaultCCMode()2157 static Setting *DefaultCCMode(PlaySettings *settings) 2027 2158 { 2028 HostCheckBox *gc = new HostCheckBox("DefaultCCMode");2159 CREATE_CHECKBOX_SETTING(gc, "DefaultCCMode", settings); 2029 2160 gc->setLabel(QObject::tr("Always display closed captioning or subtitles")); 2030 2161 gc->setValue(false); 2031 2162 gc->setHelpText(QObject::tr( … … 2033 2164 "when playing back recordings or watching " 2034 2165 "Live TV. Closed Captioning can be turned on or off " 2035 2166 "by pressing \"T\" during playback.")); 2036 return gc;2167 return wrap(gc, settings); 2037 2168 } 2038 2169 2039 static HostCheckBox *PreferCC708()2170 static Setting *PreferCC708(PlaySettings *settings) 2040 2171 { 2041 HostCheckBox *gc = new HostCheckBox("Prefer708Captions");2172 CREATE_CHECKBOX_SETTING(gc, "Prefer708Captions", settings); 2042 2173 gc->setLabel(QObject::tr("Prefer EIA-708 over EIA-608 captions")); 2043 2174 gc->setValue(true); 2044 2175 gc->setHelpText( … … 2046 2177 "If enabled, the newer EIA-708 captions will be preferred over " 2047 2178 "the older EIA-608 captions in ATSC streams.")); 2048 2179 2049 return gc;2180 return wrap(gc, settings); 2050 2181 } 2051 2182 2052 static HostCheckBox *EnableMHEG()2183 static Setting *EnableMHEG(PlaySettings *settings) 2053 2184 { 2054 HostCheckBox *gc = new HostCheckBox("EnableMHEG");2185 CREATE_CHECKBOX_SETTING(gc, "EnableMHEG", settings); 2055 2186 gc->setLabel(QObject::tr("Enable interactive TV")); 2056 2187 gc->setValue(false); 2057 2188 gc->setHelpText(QObject::tr( 2058 2189 "If enabled, interactive TV applications (MHEG) will " 2059 2190 "be activated. This is used for teletext and logos for " 2060 2191 "radio and channels that are currently off-air.")); 2061 return gc;2192 return wrap(gc, settings); 2062 2193 } 2063 2194 2064 static HostCheckBox *PersistentBrowseMode()2195 static Setting *PersistentBrowseMode(PlaySettings *settings) 2065 2196 { 2066 HostCheckBox *gc = new HostCheckBox("PersistentBrowseMode");2197 CREATE_CHECKBOX_SETTING(gc, "PersistentBrowseMode", settings); 2067 2198 gc->setLabel(QObject::tr("Always use browse mode in Live TV")); 2068 2199 gc->setValue(true); 2069 2200 gc->setHelpText( 2070 2201 QObject::tr( 2071 2202 "If enabled, browse mode will automatically be activated " 2072 2203 "whenever you use channel up/down while watching Live TV.")); 2073 return gc;2204 return wrap(gc, settings); 2074 2205 } 2075 2206 2076 static HostCheckBox *BrowseAllTuners()2207 static Setting *BrowseAllTuners(PlaySettings *settings) 2077 2208 { 2078 HostCheckBox *gc = new HostCheckBox("BrowseAllTuners");2209 CREATE_CHECKBOX_SETTING(gc, "BrowseAllTuners", settings); 2079 2210 gc->setLabel(QObject::tr("Browse all channels")); 2080 2211 gc->setValue(false); 2081 2212 gc->setHelpText( … … 2083 2214 "If enabled, browse mode will shows channels on all " 2084 2215 "available recording devices, instead of showing " 2085 2216 "channels on just the current recorder.")); 2086 return gc;2217 return wrap(gc, settings); 2087 2218 } 2088 2219 2089 static HostCheckBox *ClearSavedPosition()2220 static Setting *ClearSavedPosition(PlaySettings *settings) 2090 2221 { 2091 HostCheckBox *gc = new HostCheckBox("ClearSavedPosition");2222 CREATE_CHECKBOX_SETTING(gc, "ClearSavedPosition", settings); 2092 2223 gc->setLabel(QObject::tr("Clear bookmark on playback")); 2093 2224 gc->setValue(true); 2094 2225 gc->setHelpText(QObject::tr("If enabled, automatically clear the " 2095 2226 "bookmark on a recording when the recording is played " 2096 2227 "back. If disabled, you can mark the beginning with " 2097 2228 "rewind then save position.")); 2098 return gc;2229 return wrap(gc, settings); 2099 2230 } 2100 2231 2101 static HostCheckBox *AltClearSavedPosition()2232 static Setting *AltClearSavedPosition(PlaySettings *settings) 2102 2233 { 2103 HostCheckBox *gc = new HostCheckBox("AltClearSavedPosition");2234 CREATE_CHECKBOX_SETTING(gc, "AltClearSavedPosition", settings); 2104 2235 gc->setLabel(QObject::tr("Alternate clear and save bookmark")); 2105 2236 gc->setValue(true); 2106 2237 gc->setHelpText(QObject::tr("During playback the SELECT key " … … 2108 2239 "Saved\" and \"Bookmark Cleared\". If disabled, the " 2109 2240 "SELECT key will save the current position for each " 2110 2241 "keypress.")); 2111 return gc;2242 return wrap(gc, settings); 2112 2243 } 2113 2244 2114 2245 #if defined(USING_XV) || defined(USING_OPENGL_VIDEO) || defined(USING_VDPAU) 2115 static HostCheckBox *UsePicControls()2246 static Setting *UsePicControls(PlaySettings *settings) 2116 2247 { 2117 HostCheckBox *gc = new HostCheckBox("UseOutputPictureControls");2248 CREATE_CHECKBOX_SETTING(gc, "UseOutputPictureControls", settings); 2118 2249 gc->setLabel(QObject::tr("Enable picture controls")); 2119 2250 gc->setValue(false); 2120 2251 gc->setHelpText( 2121 2252 QObject::tr( 2122 2253 "If enabled, MythTV attempts to initialize picture controls " 2123 2254 "(brightness, contrast, etc.) that are applied during playback.")); 2124 return gc;2255 return wrap(gc, settings); 2125 2256 } 2126 2257 #endif 2127 2258 2128 static HostLineEdit *UDPNotifyPort()2259 static Setting *UDPNotifyPort(PlaySettings *settings) 2129 2260 { 2130 HostLineEdit *ge = new HostLineEdit("UDPNotifyPort");2261 CREATE_LINEEDIT_SETTING(ge, "UDPNotifyPort", settings); 2131 2262 ge->setLabel(QObject::tr("UDP notify port")); 2132 2263 ge->setValue("6948"); 2133 2264 ge->setHelpText(QObject::tr("During playback, MythTV will listen for " 2134 2265 "connections from the \"mythtvosd\" or \"mythudprelay\" " 2135 2266 "programs on this port. For additional information, see " 2136 2267 "http://www.mythtv.org/wiki/MythNotify .")); 2137 return ge;2268 return wrap(ge, settings); 2138 2269 } 2139 2270 2140 static HostComboBox *PlaybackExitPrompt()2271 static Setting *PlaybackExitPrompt(PlaySettings *settings) 2141 2272 { 2142 HostComboBox *gc = new HostComboBox("PlaybackExitPrompt");2273 CREATE_COMBOBOX_SETTING(gc, "PlaybackExitPrompt", settings); 2143 2274 gc->setLabel(QObject::tr("Action on playback exit")); 2144 2275 gc->addSelection(QObject::tr("Just exit"), "0"); 2145 2276 gc->addSelection(QObject::tr("Save position and exit"), "2"); … … 2150 2281 "when you exit playback mode. The options available will " 2151 2282 "allow you to save your position, delete the " 2152 2283 "recording, or continue watching.")); 2153 return gc;2284 return wrap(gc, settings); 2154 2285 } 2155 2286 2156 static HostCheckBox *EndOfRecordingExitPrompt()2287 static Setting *EndOfRecordingExitPrompt(PlaySettings *settings) 2157 2288 { 2158 HostCheckBox *gc = new HostCheckBox("EndOfRecordingExitPrompt");2289 CREATE_CHECKBOX_SETTING(gc, "EndOfRecordingExitPrompt", settings); 2159 2290 gc->setLabel(QObject::tr("Prompt at end of recording")); 2160 2291 gc->setValue(false); 2161 2292 gc->setHelpText(QObject::tr("If enabled, a menu will be displayed allowing " 2162 2293 "you to delete the recording when it has finished " 2163 2294 "playing.")); 2164 return gc;2295 return wrap(gc, settings); 2165 2296 } 2166 2297 2167 static HostCheckBox *JumpToProgramOSD()2298 static Setting *JumpToProgramOSD(PlaySettings *settings) 2168 2299 { 2169 HostCheckBox *gc = new HostCheckBox("JumpToProgramOSD");2300 CREATE_CHECKBOX_SETTING(gc, "JumpToProgramOSD", settings); 2170 2301 gc->setLabel(QObject::tr("Jump to program OSD")); 2171 2302 gc->setValue(true); 2172 2303 gc->setHelpText(QObject::tr( … … 2175 2306 "'Watch Recording' screen when 'Jump to Program' " 2176 2307 "is activated. If enabled, the recordings are shown " 2177 2308 "in the OSD")); 2178 return gc;2309 return wrap(gc, settings); 2179 2310 } 2180 2311 2181 static HostCheckBox *ContinueEmbeddedTVPlay()2312 static Setting *ContinueEmbeddedTVPlay(PlaySettings *settings) 2182 2313 { 2183 HostCheckBox *gc = new HostCheckBox("ContinueEmbeddedTVPlay");2314 CREATE_CHECKBOX_SETTING(gc, "ContinueEmbeddedTVPlay", settings); 2184 2315 gc->setLabel(QObject::tr("Continue playback when embedded")); 2185 2316 gc->setValue(false); 2186 2317 gc->setHelpText(QObject::tr( … … 2188 2319 "is embedded in the upcoming program list or recorded " 2189 2320 "list. The default is to pause the recorded show when " 2190 2321 "embedded.")); 2191 return gc;2322 return wrap(gc, settings); 2192 2323 } 2193 2324 2194 static HostCheckBox *AutomaticSetWatched()2325 static Setting *AutomaticSetWatched(PlaySettings *settings) 2195 2326 { 2196 HostCheckBox *gc = new HostCheckBox("AutomaticSetWatched");2327 CREATE_CHECKBOX_SETTING(gc, "AutomaticSetWatched", settings); 2197 2328 gc->setLabel(QObject::tr("Automatically mark a recording as watched")); 2198 2329 gc->setValue(false); 2199 2330 gc->setHelpText(QObject::tr("If enabled, when you exit near the end of a " … … 2201 2332 "detection is not foolproof, so do not enable this " 2202 2333 "setting if you don't want an unwatched recording marked " 2203 2334 "as watched.")); 2204 return gc;2335 return wrap(gc, settings); 2205 2336 } 2206 2337 2207 2338 static HostSpinBox *LiveTVIdleTimeout() … … 2439 2570 return gc; 2440 2571 } 2441 2572 2442 static HostComboBox *LetterboxingColour()2573 static Setting *LetterboxingColour(PlaySettings *settings) 2443 2574 { 2444 HostComboBox *gc = new HostComboBox("LetterboxColour");2575 CREATE_COMBOBOX_SETTING(gc, "LetterboxColour", settings); 2445 2576 gc->setLabel(QObject::tr("Letterboxing color")); 2446 2577 for (int m = kLetterBoxColour_Black; m < kLetterBoxColour_END; ++m) 2447 2578 gc->addSelection(toString((LetterBoxColour)m), QString::number(m)); … … 2451 2582 "letterboxing, but those with plasma screens may prefer gray " 2452 2583 "to minimize burn-in.") + " " + 2453 2584 QObject::tr("Currently only works with XVideo video renderer.")); 2454 return gc;2585 return wrap(gc, settings); 2455 2586 } 2456 2587 2457 static HostComboBox *AspectOverride()2588 static Setting *AspectOverride(PlaySettings *settings) 2458 2589 { 2459 HostComboBox *gc = new HostComboBox("AspectOverride");2590 CREATE_COMBOBOX_SETTING(gc, "AspectOverride", settings); 2460 2591 gc->setLabel(QObject::tr("Video aspect override")); 2461 2592 for (int m = kAspect_Off; m < kAspect_END; ++m) 2462 2593 gc->addSelection(toString((AspectOverrideMode)m), QString::number(m)); … … 2464 2595 "When enabled, these will override the aspect " 2465 2596 "ratio specified by any broadcaster for all " 2466 2597 "video streams.")); 2467 return gc;2598 return wrap(gc, settings); 2468 2599 } 2469 2600 2470 static HostComboBox *AdjustFill()2601 static Setting *AdjustFill(PlaySettings *settings) 2471 2602 { 2472 HostComboBox *gc = new HostComboBox("AdjustFill");2603 CREATE_COMBOBOX_SETTING(gc, "AdjustFill", settings); 2473 2604 gc->setLabel(QObject::tr("Zoom")); 2474 2605 gc->addSelection(toString(kAdjustFill_AutoDetect_DefaultOff), 2475 2606 QString::number(kAdjustFill_AutoDetect_DefaultOff)); … … 2480 2611 gc->setHelpText(QObject::tr( 2481 2612 "When enabled, these will apply a predefined " 2482 2613 "zoom to all video playback in MythTV.")); 2483 return gc;2614 return wrap(gc, settings); 2484 2615 } 2485 2616 2486 2617 // Theme settings … … 2902 3033 return gc; 2903 3034 } 2904 3035 2905 ThemeSelector::ThemeSelector(QString label): 2906 HostImageSelect(label){2907 3036 static Setting *ThemeSelector(QString label, PlaySettings *settings=NULL) 3037 { 3038 CREATE_IMAGESELECT_SETTING(gs, label, settings); 2908 3039 ThemeType themetype = THEME_UI; 2909 3040 2910 3041 if (label == "Theme") 2911 3042 { 2912 3043 themetype = THEME_UI; 2913 setLabel(QObject::tr("UI theme"));3044 gs->setLabel(QObject::tr("UI theme")); 2914 3045 } 2915 3046 else if (label == "MenuTheme") 2916 3047 { 2917 3048 themetype = THEME_MENU; 2918 setLabel(QObject::tr("Menu theme"));3049 gs->setLabel(QObject::tr("Menu theme")); 2919 3050 } 2920 3051 2921 3052 QDir themes(GetThemesParentDir()); … … 2979 3110 VERBOSE(VB_IMPORTANT, QString("Problem reading theme preview image" 2980 3111 " %1").arg(preview.filePath())); 2981 3112 2982 addImageSelection(name, previewImage, theme.fileName());3113 gs->addImageSelection(name, previewImage, theme.fileName()); 2983 3114 } 2984 3115 2985 3116 if (themetype & THEME_UI) 2986 setValue(DEFAULT_UI_THEME); 3117 gs->setValue(DEFAULT_UI_THEME); 3118 3119 return wrap(gs, settings); 2987 3120 } 2988 3121 2989 3122 static HostComboBox *ChannelFormat() … … 3560 3693 return gs; 3561 3694 } 3562 3695 3563 static HostCheckBox *RealtimePriority()3696 static Setting *RealtimePriority(PlaySettings *settings) 3564 3697 { 3565 HostCheckBox *gc = new HostCheckBox("RealtimePriority");3698 CREATE_CHECKBOX_SETTING(gc, "RealtimePriority", settings); 3566 3699 gc->setLabel(QObject::tr("Enable realtime priority threads")); 3567 3700 gc->setHelpText(QObject::tr("When running mythfrontend with root " 3568 3701 "privileges, some threads can be given enhanced priority. " 3569 3702 "Disable this if mythfrontend freezes during video " 3570 3703 "playback.")); 3571 3704 gc->setValue(true); 3572 return gc;3705 return wrap(gc, settings, false); 3573 3706 } 3574 3707 3575 3708 static HostCheckBox *EnableMediaMon() … … 3725 3858 }; 3726 3859 3727 3860 #ifdef USING_OPENGL_VSYNC 3728 static HostCheckBox *UseOpenGLVSync()3861 static Setting *UseOpenGLVSync(PlaySettings *settings) 3729 3862 { 3730 HostCheckBox *gc = new HostCheckBox("UseOpenGLVSync");3863 CREATE_CHECKBOX_SETTING(gc, "UseOpenGLVSync", settings); 3731 3864 gc->setLabel(QObject::tr("Enable OpenGL vertical sync for timing")); 3732 3865 gc->setValue(false); 3733 3866 gc->setHelpText(QObject::tr( 3734 3867 "If supported by your hardware/drivers, " 3735 3868 "MythTV will use OpenGL vertical syncing for " 3736 3869 "video timing, reducing frame jitter.")); 3737 return gc;3870 return wrap(gc, settings); 3738 3871 } 3739 3872 #endif 3740 3873 … … 4160 4293 return gc; 4161 4294 } 4162 4295 4163 MainGeneralSettings::MainGeneralSettings() 4296 MainGeneralSettings::MainGeneralSettings(PlaySettings *settings, 4297 ConfigurationWizard *base) 4164 4298 { 4299 if (!settings) 4300 { 4165 4301 DatabaseSettings::addDatabaseSettings(this); 4166 4302 4167 4303 VerticalConfigurationGroup *pin = … … 4213 4349 remotecontrol->addChild(NetworkControlEnabled()); 4214 4350 remotecontrol->addChild(NetworkControlPort()); 4215 4351 addChild(remotecontrol); 4352 } 4216 4353 } 4217 4354 4218 PlaybackSettings::PlaybackSettings() 4355 PlaybackSettings::PlaybackSettings(PlaySettings *settings, 4356 ConfigurationWizard *base) 4219 4357 { 4220 4358 uint i = 0, total = 8; 4221 4359 #if CONFIG_DARWIN 4222 4360 total += 2; 4223 4361 #endif // USING_DARWIN 4362 if (settings) 4363 total -= 3; 4224 4364 4225 4365 4226 4366 VerticalConfigurationGroup* general1 = 4227 4367 new VerticalConfigurationGroup(false); 4228 4368 general1->setLabel(QObject::tr("General Playback") + 4229 4369 QString(" (%1/%2)").arg(++i).arg(total)); 4370 if (settings) 4371 general1->setLabel(QObject::tr("Playback group settings for ") + 4372 settings->mGroupName + " - " + 4373 general1->getLabel()); 4230 4374 4231 4375 HorizontalConfigurationGroup *columns = 4232 4376 new HorizontalConfigurationGroup(false, false, true, true); 4233 4377 4234 4378 VerticalConfigurationGroup *column1 = 4235 4379 new VerticalConfigurationGroup(false, false, true, true); 4236 column1->addChild(RealtimePriority()); 4237 column1->addChild(DecodeExtraAudio()); 4238 column1->addChild(JumpToProgramOSD()); 4380 if (!settings) 4381 column1->addChild(RealtimePriority(settings)); 4382 column1->addChild(DecodeExtraAudio(settings)); 4383 column1->addChild(JumpToProgramOSD(settings)); 4239 4384 columns->addChild(column1); 4240 4385 4241 4386 VerticalConfigurationGroup *column2 = 4242 4387 new VerticalConfigurationGroup(false, false, true, true); 4243 column2->addChild(ClearSavedPosition( ));4244 column2->addChild(AltClearSavedPosition( ));4245 column2->addChild(AutomaticSetWatched( ));4246 column2->addChild(ContinueEmbeddedTVPlay( ));4388 column2->addChild(ClearSavedPosition(settings)); 4389 column2->addChild(AltClearSavedPosition(settings)); 4390 column2->addChild(AutomaticSetWatched(settings)); 4391 column2->addChild(ContinueEmbeddedTVPlay(settings)); 4247 4392 columns->addChild(column2); 4248 4393 4249 4394 general1->addChild(columns); 4250 general1->addChild(LiveTVIdleTimeout()); 4251 general1->addChild(AlwaysStreamFiles()); 4395 if (!settings) 4396 general1->addChild(LiveTVIdleTimeout()); 4397 if (!settings) 4398 general1->addChild(AlwaysStreamFiles()); 4252 4399 #ifdef USING_OPENGL_VSYNC 4253 general1->addChild(UseOpenGLVSync( ));4400 general1->addChild(UseOpenGLVSync(settings)); 4254 4401 #endif // USING_OPENGL_VSYNC 4255 4402 #if defined(USING_XV) || defined(USING_OPENGL_VIDEO) || defined(USING_VDPAU) 4256 general1->addChild(UsePicControls( ));4403 general1->addChild(UsePicControls(settings)); 4257 4404 #endif // USING_XV 4258 addChild(general1); 4405 if (base) 4406 base->addChild(general1); 4407 else 4408 addChild(general1); 4259 4409 4260 4410 VerticalConfigurationGroup* general2 = 4261 4411 new VerticalConfigurationGroup(false); 4262 4412 general2->setLabel(QObject::tr("General Playback") + 4263 4413 QString(" (%1/%2)").arg(++i).arg(total)); 4414 if (settings) 4415 general2->setLabel(QObject::tr("Playback group settings for ") + 4416 settings->mGroupName + " - " + 4417 general2->getLabel()); 4264 4418 4265 4419 HorizontalConfigurationGroup* oscan = 4266 4420 new HorizontalConfigurationGroup(false, false, true, true); … … 4268 4422 new VerticalConfigurationGroup(false, false, true, true); 4269 4423 VerticalConfigurationGroup *ocol2 = 4270 4424 new VerticalConfigurationGroup(false, false, true, true); 4271 ocol1->addChild(VertScanPercentage( ));4272 ocol1->addChild(YScanDisplacement( ));4273 ocol2->addChild(HorizScanPercentage( ));4274 ocol2->addChild(XScanDisplacement( ));4425 ocol1->addChild(VertScanPercentage(settings)); 4426 ocol1->addChild(YScanDisplacement(settings)); 4427 ocol2->addChild(HorizScanPercentage(settings)); 4428 ocol2->addChild(XScanDisplacement(settings)); 4275 4429 oscan->addChild(ocol1); 4276 4430 oscan->addChild(ocol2); 4277 4431 4278 4432 HorizontalConfigurationGroup* aspect_fill = 4279 4433 new HorizontalConfigurationGroup(false, false, true, true); 4280 aspect_fill->addChild(AspectOverride( ));4281 aspect_fill->addChild(AdjustFill( ));4434 aspect_fill->addChild(AspectOverride(settings)); 4435 aspect_fill->addChild(AdjustFill(settings)); 4282 4436 4283 4437 general2->addChild(oscan); 4284 4438 general2->addChild(aspect_fill); 4285 general2->addChild(LetterboxingColour()); 4286 general2->addChild(PIPLocationComboBox()); 4287 general2->addChild(PlaybackExitPrompt()); 4288 general2->addChild(EndOfRecordingExitPrompt()); 4289 addChild(general2); 4439 general2->addChild(LetterboxingColour(settings)); 4440 general2->addChild(PIPLocationComboBox(settings)); 4441 general2->addChild(PlaybackExitPrompt(settings)); 4442 general2->addChild(EndOfRecordingExitPrompt(settings)); 4443 if (base) 4444 base->addChild(general2); 4445 else 4446 addChild(general2); 4290 4447 4291 4448 QString tmp = QString(" (%1/%2)").arg(++i).arg(total); 4292 addChild(new PlaybackProfileConfigs(tmp)); 4449 if (base) 4450 base->addChild(new PlaybackProfileConfigs(tmp, settings)); 4451 else 4452 addChild(new PlaybackProfileConfigs(tmp, settings)); 4293 4453 4454 if (!settings) 4455 { 4294 4456 VerticalConfigurationGroup* pbox = new VerticalConfigurationGroup(false); 4295 4457 pbox->setLabel(QObject::tr("View Recordings") + 4296 4458 QString(" (%1/%2)").arg(++i).arg(total)); … … 4318 4480 pbox3->addChild(DisplayGroupTitleSort()); 4319 4481 pbox3->addChild(new WatchListSettings()); 4320 4482 addChild(pbox3); 4483 } 4321 4484 4322 4485 VerticalConfigurationGroup* seek = new VerticalConfigurationGroup(false); 4323 4486 seek->setLabel(QObject::tr("Seeking") + 4324 4487 QString(" (%1/%2)").arg(++i).arg(total)); 4325 seek->addChild(SmartForward()); 4326 seek->addChild(FFRewReposTime()); 4327 seek->addChild(FFRewReverse()); 4328 seek->addChild(ExactSeeking()); 4329 addChild(seek); 4488 if (settings) 4489 seek->setLabel(QObject::tr("Playback group settings for ") + 4490 settings->mGroupName + " - " + 4491 seek->getLabel()); 4492 seek->addChild(SmartForward(settings)); 4493 seek->addChild(FFRewReposTime(settings)); 4494 seek->addChild(FFRewReverse(settings)); 4495 seek->addChild(ExactSeeking(settings)); 4496 if (base) 4497 base->addChild(seek); 4498 else 4499 addChild(seek); 4330 4500 4331 4501 VerticalConfigurationGroup* comms = new VerticalConfigurationGroup(false); 4332 4502 comms->setLabel(QObject::tr("Commercial Skip") + 4333 4503 QString(" (%1/%2)").arg(++i).arg(total)); 4334 comms->addChild(AutoCommercialSkip()); 4335 comms->addChild(CommRewindAmount()); 4336 comms->addChild(CommNotifyAmount()); 4504 if (settings) 4505 comms->setLabel(QObject::tr("Playback group settings for ") + 4506 settings->mGroupName + " - " + 4507 comms->getLabel()); 4508 comms->addChild(AutoCommercialSkip(settings)); 4509 comms->addChild(CommRewindAmount(settings)); 4510 comms->addChild(CommNotifyAmount(settings)); 4511 if (!settings) // these are global settings, not host-specific 4512 { 4337 4513 comms->addChild(MaximumCommercialSkip()); 4338 4514 comms->addChild(MergeShortCommBreaks()); 4339 4515 comms->addChild(CommSkipAllBlanks()); 4340 addChild(comms); 4516 } 4517 if (base) 4518 base->addChild(comms); 4519 else 4520 addChild(comms); 4341 4521 4342 4522 #if CONFIG_DARWIN 4343 4523 VerticalConfigurationGroup* mac1 = new VerticalConfigurationGroup(false); 4344 4524 mac1->setLabel(QObject::tr("Mac OS X Video Settings") + 4345 4525 QString(" (%1/%2)").arg(++i).arg(total)); 4526 if (settings) 4527 mac1->setLabel(QObject::tr("Playback group settings for ") + 4528 settings->mGroupName + " - " + 4529 mac1->getLabel()); 4530 if (!settings) 4531 { 4346 4532 mac1->addChild(MacGammaCorrect()); 4347 4533 mac1->addChild(MacScaleUp()); 4348 4534 mac1->addChild(MacFullSkip()); 4349 addChild(mac1); 4535 } 4536 if (base) 4537 base->addChild(mac1); 4538 else 4539 addChild(mac1); 4350 4540 4351 4541 VerticalConfigurationGroup* mac2 = new VerticalConfigurationGroup(false); 4352 4542 mac2->setLabel(QObject::tr("Mac OS X Video Settings") + 4353 4543 QString(" (%1/%2)").arg(++i).arg(total)); 4544 if (settings) 4545 mac2->setLabel(QObject::tr("Playback group settings for ") + 4546 settings->mGroupName + " - " + 4547 mac2->getLabel()); 4548 if (!setings) 4549 { 4354 4550 mac2->addChild(new MacMainSettings()); 4355 4551 mac2->addChild(new MacFloatSettings()); 4356 4552 … … 4364 4560 #endif 4365 4561 } 4366 4562 4367 OSDSettings::OSDSettings() 4563 OSDSettings::OSDSettings(PlaySettings *settings, 4564 ConfigurationWizard *base) 4368 4565 { 4369 4566 VerticalConfigurationGroup* osd = new VerticalConfigurationGroup(false); 4370 4567 osd->setLabel(QObject::tr("On-screen Display")); 4568 if (settings) 4569 osd->setLabel(QObject::tr("Playback group settings for ") + 4570 settings->mGroupName + " - " + 4571 osd->getLabel()); 4371 4572 4372 osd->addChild(EnableMHEG()); 4373 osd->addChild(PersistentBrowseMode()); 4374 osd->addChild(BrowseAllTuners()); 4375 osd->addChild(SubtitleCodec()); 4376 osd->addChild(UDPNotifyPort()); 4377 addChild(osd); 4573 if (!settings) 4574 { 4575 osd->addChild(EnableMHEG(settings)); 4576 osd->addChild(PersistentBrowseMode(settings)); 4577 osd->addChild(BrowseAllTuners(settings)); 4578 osd->addChild(SubtitleCodec(settings)); 4579 osd->addChild(UDPNotifyPort(settings)); 4580 } 4581 if (base) 4582 base->addChild(osd); 4583 else 4584 addChild(osd); 4378 4585 4379 4586 VerticalConfigurationGroup *cc = new VerticalConfigurationGroup(false); 4380 4587 cc->setLabel(QObject::tr("Closed Captions")); 4588 if (settings) 4589 cc->setLabel(QObject::tr("Playback group settings for ") + 4590 settings->mGroupName + " - " + 4591 cc->getLabel()); 4381 4592 //cc->addChild(DecodeVBIFormat()); 4382 cc->addChild(CCBackground()); 4383 cc->addChild(DefaultCCMode()); 4384 cc->addChild(PreferCC708()); 4385 cc->addChild(OSDCC708TextZoomPercentage()); 4386 addChild(cc); 4593 cc->addChild(CCBackground(settings)); 4594 cc->addChild(DefaultCCMode(settings)); 4595 cc->addChild(PreferCC708(settings)); 4596 cc->addChild(OSDCC708TextZoomPercentage(settings)); 4597 if (base) 4598 base->addChild(cc); 4599 else 4600 addChild(cc); 4387 4601 4388 4602 #if CONFIG_DARWIN 4389 4603 // Any Mac OS-specific OSD stuff would go here. … … 4535 4749 VerticalConfigurationGroup* theme = new VerticalConfigurationGroup(false); 4536 4750 theme->setLabel(QObject::tr("Theme")); 4537 4751 4538 theme->addChild( newThemeSelector("Theme"));4752 theme->addChild(ThemeSelector("Theme")); 4539 4753 4540 4754 theme->addChild(ThemeCacheSize()); 4541 4755 -
programs/mythfrontend/main.cpp
34 34 #include "globalsettings.h" 35 35 #include "profilegroup.h" 36 36 #include "playgroup.h" 37 #include "playsettings.h" 37 38 #include "networkcontrol.h" 38 39 #include "DVDRingBuffer.h" 39 40 #include "scheduledrecording.h" … … 486 487 delete statusbox; 487 488 } 488 489 490 ConfigurationWizard *createPlaybackSettingsForPlaybackGroup(PlaySettings *settings, ConfigurationWizard *base) 491 { 492 return new PlaybackSettings(settings, base); 493 } 494 495 ConfigurationWizard *createOSDSettingsForPlaybackGroup(PlaySettings *settings, ConfigurationWizard *base) 496 { 497 return new OSDSettings(settings, base); 498 } 499 500 ConfigurationWizard *createMainGeneralSettingsForPlaybackGroup(PlaySettings *settings, ConfigurationWizard *base) 501 { 502 return new MainGeneralSettings(settings, base); 503 } 504 505 static PlayGroupEditor::SettingsLookup pbgroupSetup[] = { 506 createPlaybackSettingsForPlaybackGroup, 507 createOSDSettingsForPlaybackGroup, 508 createMainGeneralSettingsForPlaybackGroup 509 }; 510 489 511 void TVMenuCallback(void *data, QString &selection) 490 512 { 491 513 (void)data; … … 578 600 } 579 601 else if (sel == "settings playgroup") 580 602 { 581 PlayGroupEditor editor; 603 PlayGroupEditor editor(pbgroupSetup, 604 sizeof(pbgroupSetup)/sizeof(*pbgroupSetup)); 582 605 editor.exec(); 583 606 } 584 607 else if (sel == "settings general") … … 770 793 } 771 794 } 772 795 delete tmprbuf; 796 pginfo->SetPlaybackGroup("Videos"); 773 797 } 774 798 else if (pginfo->IsVideo()) 799 { 775 800 pos = pginfo->QueryBookmark(); 801 pginfo->SetPlaybackGroup("Videos"); 802 } 776 803 777 804 if (pos > 0) 778 805 { -
programs/mythfrontend/globalsettings.h
13 13 14 14 class QFileInfo; 15 15 class AudioDeviceComboBox; 16 class PlaySettings; 16 17 17 18 class AudioConfigSettings : public VerticalConfigurationGroup 18 19 { … … 88 89 class PlaybackSettings : public ConfigurationWizard 89 90 { 90 91 public: 91 PlaybackSettings(); 92 PlaybackSettings(PlaySettings *settings=NULL, 93 ConfigurationWizard *base=NULL); 92 94 }; 93 95 94 96 class OSDSettings: virtual public ConfigurationWizard 95 97 { 96 98 public: 97 OSDSettings(); 99 OSDSettings(PlaySettings *settings=NULL, 100 ConfigurationWizard *base=NULL); 98 101 }; 99 102 100 103 class GeneralSettings : public ConfigurationWizard … … 118 121 class MainGeneralSettings : public ConfigurationWizard 119 122 { 120 123 public: 121 MainGeneralSettings(); 124 MainGeneralSettings(PlaySettings *settings=NULL, 125 ConfigurationWizard *base=NULL); 122 126 }; 123 127 124 128 class GeneralRecPrioritiesSettings : public ConfigurationWizard … … 206 210 Q_OBJECT 207 211 208 212 public: 209 PlaybackProfileConfigs(const QString &str );213 PlaybackProfileConfigs(const QString &str, PlaySettings *settings); 210 214 virtual ~PlaybackProfileConfigs(); 211 215 212 216 private: … … 218 222 219 223 private: 220 224 QStringList profiles; 221 HostComboBox*grouptrigger;225 ComboBoxSetting *grouptrigger; 222 226 }; 223 227 224 228 #endif -
programs/mythavtest/main.cpp
21 21 #include "mythuihelper.h" 22 22 #include "dbcheck.h" 23 23 #include "myththemebase.h" 24 #include "playsettings.h" 24 25 25 26 static void *run_priv_thread(void *data) 26 27 { … … 187 188 188 189 GetMythUI()->LoadQtConfig(); 189 190 190 #if defined(Q_OS_MACX)191 // Mac OS X doesn't define the AudioOutputDevice setting192 #else193 QString auddevice = gCoreContext->GetSetting("AudioOutputDevice");194 if (auddevice.isEmpty())195 {196 VERBOSE(VB_IMPORTANT, "Fatal Error: Audio not configured, you need "197 "to run 'mythfrontend', not 'mythtv'.");198 return TV_EXIT_NO_AUDIO;199 }200 #endif201 202 191 MythMainWindow *mainWindow = GetMythMainWindow(); 203 192 mainWindow->Init(); 204 193 MythThemeBase *theme = new MythThemeBase(); … … 212 201 return GENERIC_EXIT_DB_OUTOFDATE; 213 202 } 214 203 215 TV *tv = new TV(); 204 QString playgroup(""); 205 if (!filename.isEmpty()) 206 { 207 ProgramInfo pg(filename); 208 playgroup = pg.GetPlaybackGroup(); 209 } 210 PlaySettings settings(playgroup); 211 212 #if defined(Q_OS_MACX) 213 // Mac OS X doesn't define the AudioOutputDevice setting 214 #else 215 QString auddevice = settings.GetSetting("AudioOutputDevice", ""); 216 if (auddevice.isEmpty()) 217 { 218 VERBOSE(VB_IMPORTANT, "Fatal Error: Audio not configured, you need " 219 "to run 'mythfrontend', not 'mythtv'."); 220 return TV_EXIT_NO_AUDIO; 221 } 222 #endif 223 224 TV *tv = new TV(&settings); 216 225 if (!tv->Init()) 217 226 { 218 227 VERBOSE(VB_IMPORTANT, "Fatal Error: Could not initialize TV class.");
