|
MythTV
0.26-pre
|
00001 00002 // -*- Mode: c++ -*- 00003 00004 // Standard UNIX C headers 00005 #include <unistd.h> 00006 #include <fcntl.h> 00007 #include <sys/types.h> 00008 #include <sys/stat.h> 00009 00010 // Qt headers 00011 #include <QCoreApplication> 00012 #include <QEvent> 00013 #include <QFileInfo> 00014 #include <QFile> 00015 #include <QDialog> 00016 #include <QCursor> 00017 #include <QDir> 00018 #include <QImage> 00019 #include <QTextCodec> 00020 #include <QFontDatabase> 00021 00022 // MythTV headers 00023 #include "mythconfig.h" 00024 #include "mythcorecontext.h" 00025 #include "mythdbcon.h" 00026 #include "mythlogging.h" 00027 #include "dbsettings.h" 00028 #include "mythtranslation.h" 00029 #include "iso639.h" 00030 #include "playbackbox.h" 00031 #include "globalsettings.h" 00032 #include "recordingprofile.h" 00033 #include "mythdisplay.h" 00034 #include "DisplayRes.h" 00035 #include "uitypes.h" 00036 #include "cardutil.h" 00037 #include "themeinfo.h" 00038 #include "mythconfig.h" 00039 #include "mythdirs.h" 00040 #include "mythuihelper.h" 00041 00042 #if defined(Q_OS_MACX) 00043 #include "privatedecoder_vda.h" 00044 #endif 00045 00046 static HostCheckBox *DecodeExtraAudio() 00047 { 00048 HostCheckBox *gc = new HostCheckBox("DecodeExtraAudio"); 00049 gc->setLabel(QObject::tr("Extra audio buffering")); 00050 gc->setValue(true); 00051 gc->setHelpText(QObject::tr("Enable this setting if MythTV is playing " 00052 "\"crackly\" audio. This setting affects digital tuners " 00053 "(QAM/DVB/ATSC) and hardware encoders. It will have no " 00054 "effect on framegrabbers (MPEG-4/RTJPEG). MythTV will " 00055 "keep extra audio data in its internal buffers to " 00056 "workaround this bug.")); 00057 return gc; 00058 } 00059 00060 static HostComboBox *PIPLocationComboBox() 00061 { 00062 HostComboBox *gc = new HostComboBox("PIPLocation"); 00063 gc->setLabel(QObject::tr("PIP video location")); 00064 for (uint loc = 0; loc < kPIP_END; ++loc) 00065 gc->addSelection(toString((PIPLocation) loc), QString::number(loc)); 00066 gc->setHelpText(QObject::tr("Location of PIP Video window.")); 00067 return gc; 00068 } 00069 00070 static HostComboBox *DisplayRecGroup() 00071 { 00072 HostComboBox *gc = new HostComboBox("DisplayRecGroup"); 00073 gc->setLabel(QObject::tr("Default group filter to apply")); 00074 00075 gc->addSelection(QObject::tr("All Programs"), QString("All Programs")); 00076 gc->addSelection(QObject::tr("Default"), QString("Default")); 00077 00078 MSqlQuery query(MSqlQuery::InitCon()); 00079 query.prepare("SELECT DISTINCT recgroup from recorded;"); 00080 00081 if (query.exec()) 00082 { 00083 while (query.next()) 00084 { 00085 if (query.value(0).toString() != "Default") 00086 { 00087 QString recgroup = query.value(0).toString(); 00088 gc->addSelection(recgroup, recgroup); 00089 } 00090 } 00091 } 00092 00093 query.prepare("SELECT DISTINCT category from recorded;"); 00094 00095 if (query.exec()) 00096 { 00097 while (query.next()) 00098 { 00099 QString key = query.value(0).toString(); 00100 gc->addSelection(key, key); 00101 } 00102 } 00103 00104 gc->setHelpText(QObject::tr("Default group filter to apply " 00105 "on the View Recordings screen.")); 00106 return gc; 00107 } 00108 00109 static HostCheckBox *QueryInitialFilter() 00110 { 00111 HostCheckBox *gc = new HostCheckBox("QueryInitialFilter"); 00112 gc->setLabel(QObject::tr("Always prompt for initial group filter")); 00113 gc->setValue(false); 00114 gc->setHelpText(QObject::tr("If enabled, always prompt the user for the " 00115 "initial filter to apply when entering the " 00116 "Watch Recordings screen.")); 00117 return gc; 00118 } 00119 00120 static HostCheckBox *RememberRecGroup() 00121 { 00122 HostCheckBox *gc = new HostCheckBox("RememberRecGroup"); 00123 gc->setLabel(QObject::tr("Save current group filter when changed")); 00124 gc->setValue(true); 00125 gc->setHelpText(QObject::tr("If enabled, remember the last selected filter " 00126 "instead of displaying the default filter " 00127 "whenever you enter the playback screen.")); 00128 return gc; 00129 } 00130 00131 static HostCheckBox *UseGroupNameAsAllPrograms() 00132 { 00133 HostCheckBox *gc = new HostCheckBox("DispRecGroupAsAllProg"); 00134 gc->setLabel(QObject::tr("Show filter name instead of \"All Programs\"")); 00135 gc->setValue(false); 00136 gc->setHelpText(QObject::tr("If enabled, use the name of the display " 00137 "filter currently applied in place of the term \"All " 00138 "Programs\" in the playback screen.")); 00139 return gc; 00140 } 00141 00142 static HostCheckBox *PBBStartInTitle() 00143 { 00144 HostCheckBox *gc = new HostCheckBox("PlaybackBoxStartInTitle"); 00145 gc->setLabel(QObject::tr("Start in group list")); 00146 gc->setValue(true); 00147 gc->setHelpText(QObject::tr("If enabled, the focus will " 00148 "start on the group list, otherwise the " 00149 "focus will default to the recordings.")); 00150 return gc; 00151 } 00152 00153 static HostCheckBox *SmartForward() 00154 { 00155 HostCheckBox *gc = new HostCheckBox("SmartForward"); 00156 gc->setLabel(QObject::tr("Smart fast forwarding")); 00157 gc->setValue(false); 00158 gc->setHelpText(QObject::tr("If enabled, then immediately after " 00159 "rewinding, only skip forward the same amount as " 00160 "skipping backwards.")); 00161 return gc; 00162 } 00163 00164 static GlobalComboBox *CommercialSkipMethod() 00165 { 00166 GlobalComboBox *bc = new GlobalComboBox("CommercialSkipMethod"); 00167 bc->setLabel(QObject::tr("Commercial detection method")); 00168 bc->setHelpText(QObject::tr( 00169 "This determines the method used by MythTV to " 00170 "detect when commercials start and end.")); 00171 00172 deque<int> tmp = GetPreferredSkipTypeCombinations(); 00173 for (uint i = 0; i < tmp.size(); ++i) 00174 bc->addSelection(SkipTypeToString(tmp[i]), QString::number(tmp[i])); 00175 00176 return bc; 00177 } 00178 00179 static GlobalCheckBox *CommFlagFast() 00180 { 00181 GlobalCheckBox *gc = new GlobalCheckBox("CommFlagFast"); 00182 gc->setLabel(QObject::tr("Enable experimental speedup of commercial detection")); 00183 gc->setValue(false); 00184 gc->setHelpText(QObject::tr("If enabled, experimental commercial detection " 00185 "speedups will be enabled.")); 00186 return gc; 00187 } 00188 00189 static HostComboBox *AutoCommercialSkip() 00190 { 00191 HostComboBox *gc = new HostComboBox("AutoCommercialSkip"); 00192 gc->setLabel(QObject::tr("Automatically skip commercials")); 00193 gc->addSelection(QObject::tr("Off"), "0"); 00194 gc->addSelection(QObject::tr("Notify, but do not skip"), "2"); 00195 gc->addSelection(QObject::tr("Automatically Skip"), "1"); 00196 gc->setHelpText(QObject::tr("Automatically skip commercial breaks that " 00197 "have been flagged during automatic commercial detection " 00198 "or by the mythcommflag program, or just notify that a " 00199 "commercial has been detected.")); 00200 return gc; 00201 } 00202 00203 static GlobalSpinBox *DeferAutoTranscodeDays() 00204 { 00205 GlobalSpinBox *gs = new GlobalSpinBox("DeferAutoTranscodeDays", 0, 365, 1); 00206 gs->setLabel(QObject::tr("Deferral days for auto transcode jobs")); 00207 gs->setHelpText(QObject::tr("If non-zero, automatic transcode jobs will " 00208 "be scheduled to run this many days after a recording " 00209 "completes instead of immediately afterwards.")); 00210 gs->setValue(0); 00211 return gs; 00212 } 00213 00214 static GlobalCheckBox *AggressiveCommDetect() 00215 { 00216 GlobalCheckBox *bc = new GlobalCheckBox("AggressiveCommDetect"); 00217 bc->setLabel(QObject::tr("Strict commercial detection")); 00218 bc->setValue(true); 00219 bc->setHelpText(QObject::tr("Enable stricter commercial detection code. " 00220 "Disable if some commercials are not being detected.")); 00221 return bc; 00222 } 00223 00224 static HostSpinBox *CommRewindAmount() 00225 { 00226 HostSpinBox *gs = new HostSpinBox("CommRewindAmount", 0, 10, 1); 00227 gs->setLabel(QObject::tr("Commercial skip automatic rewind amount (secs)")); 00228 gs->setHelpText(QObject::tr("MythTV will automatically rewind " 00229 "this many seconds after performing a commercial skip.")); 00230 gs->setValue(0); 00231 return gs; 00232 } 00233 00234 static HostSpinBox *CommNotifyAmount() 00235 { 00236 HostSpinBox *gs = new HostSpinBox("CommNotifyAmount", 0, 10, 1); 00237 gs->setLabel(QObject::tr("Commercial skip notify amount (secs)")); 00238 gs->setHelpText(QObject::tr("MythTV will act like a commercial " 00239 "begins this many seconds early. This can be useful " 00240 "when commercial notification is used in place of " 00241 "automatic skipping.")); 00242 gs->setValue(0); 00243 return gs; 00244 } 00245 00246 static GlobalSpinBox *MaximumCommercialSkip() 00247 { 00248 GlobalSpinBox *bs = new GlobalSpinBox("MaximumCommercialSkip", 0, 3600, 10); 00249 bs->setLabel(QObject::tr("Maximum commercial skip (secs)")); 00250 bs->setHelpText(QObject::tr("MythTV will discourage long manual commercial " 00251 "skips. Skips which are longer than this will require the " 00252 "user to hit the SKIP key twice. Automatic commercial " 00253 "skipping is not affected by this limit.")); 00254 bs->setValue(3600); 00255 return bs; 00256 } 00257 00258 static GlobalSpinBox *MergeShortCommBreaks() 00259 { 00260 GlobalSpinBox *bs = new GlobalSpinBox("MergeShortCommBreaks", 0, 3600, 5); 00261 bs->setLabel(QObject::tr("Merge short commercial breaks (secs)")); 00262 bs->setHelpText(QObject::tr("Treat consecutive commercial breaks shorter " 00263 "than this as one break when skipping forward. Useful if " 00264 "you have to skip a few times during breaks. Applies to " 00265 "automatic skipping as well. Set to 0 to disable.")); 00266 bs->setValue(0); 00267 return bs; 00268 } 00269 00270 static GlobalSpinBox *AutoExpireExtraSpace() 00271 { 00272 GlobalSpinBox *bs = new GlobalSpinBox("AutoExpireExtraSpace", 0, 200, 1); 00273 bs->setLabel(QObject::tr("Extra disk space (GB)")); 00274 bs->setHelpText(QObject::tr("Extra disk space (in gigabytes) beyond what " 00275 "MythTV requires that you want to keep free on the " 00276 "recording file systems.")); 00277 bs->setValue(1); 00278 return bs; 00279 }; 00280 00281 #if 0 00282 static GlobalCheckBox *AutoExpireInsteadOfDelete() 00283 { 00284 GlobalCheckBox *cb = new GlobalCheckBox("AutoExpireInsteadOfDelete"); 00285 cb->setLabel(QObject::tr("Auto-Expire instead of delete recording")); 00286 cb->setValue(false); 00287 cb->setHelpText(QObject::tr("If enabled, move deleted recordings to the " 00288 "'Deleted' recgroup and turn on autoexpire " 00289 "instead of deleting immediately.")); 00290 return cb; 00291 } 00292 #endif 00293 00294 static GlobalSpinBox *DeletedMaxAge() 00295 { 00296 GlobalSpinBox *bs = new GlobalSpinBox("DeletedMaxAge", -1, 365, 1); 00297 bs->setLabel(QObject::tr("Time to retain deleted recordings (days)")); 00298 bs->setHelpText(QObject::tr("Determines the maximum number of days before " 00299 "undeleting a recording will become impossible. " 00300 "A value of zero means the recording will be " 00301 "permanently deleted between 5 and 20 minutes " 00302 "later. A value of minus one means recordings " 00303 "will be retained until space is required. " 00304 "A recording will always be removed before this " 00305 "time if the space is needed for a new recording.")); 00306 bs->setValue(0); 00307 return bs; 00308 }; 00309 00310 #if 0 00311 class DeletedExpireOptions : public TriggeredConfigurationGroup 00312 { 00313 public: 00314 DeletedExpireOptions() : 00315 TriggeredConfigurationGroup(false, false, false, false) 00316 { 00317 setLabel(QObject::tr("DeletedExpireOptions")); 00318 Setting* enabled = AutoExpireInsteadOfDelete(); 00319 addChild(enabled); 00320 setTrigger(enabled); 00321 00322 HorizontalConfigurationGroup* settings = 00323 new HorizontalConfigurationGroup(false); 00324 settings->addChild(DeletedMaxAge()); 00325 addTarget("1", settings); 00326 00327 // show nothing if fillEnabled is off 00328 addTarget("0", new HorizontalConfigurationGroup(true)); 00329 }; 00330 }; 00331 #endif 00332 00333 static GlobalComboBox *AutoExpireMethod() 00334 { 00335 GlobalComboBox *bc = new GlobalComboBox("AutoExpireMethod"); 00336 bc->setLabel(QObject::tr("Auto-Expire method")); 00337 bc->addSelection(QObject::tr("Oldest show first"), "1"); 00338 bc->addSelection(QObject::tr("Lowest priority first"), "2"); 00339 bc->addSelection(QObject::tr("Weighted time/priority combination"), "3"); 00340 bc->setHelpText(QObject::tr("Method used to determine which recorded " 00341 "shows to delete first. Live TV recordings will always " 00342 "expire before normal recordings.")); 00343 bc->setValue(1); 00344 return bc; 00345 } 00346 00347 static GlobalCheckBox *AutoExpireWatchedPriority() 00348 { 00349 GlobalCheckBox *bc = new GlobalCheckBox("AutoExpireWatchedPriority"); 00350 bc->setLabel(QObject::tr("Watched before unwatched")); 00351 bc->setValue(false); 00352 bc->setHelpText(QObject::tr("If enabled, programs that have been marked as " 00353 "watched will be expired before programs that have not " 00354 "been watched.")); 00355 return bc; 00356 } 00357 00358 static GlobalSpinBox *AutoExpireDayPriority() 00359 { 00360 GlobalSpinBox *bs = new GlobalSpinBox("AutoExpireDayPriority", 1, 400, 1); 00361 bs->setLabel(QObject::tr("Priority weight")); 00362 bs->setHelpText(QObject::tr("The number of days bonus a program gets for " 00363 "each priority point. This is only used when the Weighted " 00364 "time/priority Auto-Expire method is selected.")); 00365 bs->setValue(3); 00366 return bs; 00367 }; 00368 00369 static GlobalSpinBox *AutoExpireLiveTVMaxAge() 00370 { 00371 GlobalSpinBox *bs = new GlobalSpinBox("AutoExpireLiveTVMaxAge", 1, 365, 1); 00372 bs->setLabel(QObject::tr("Live TV max age (days)")); 00373 bs->setHelpText(QObject::tr("Auto-Expire will force expiration of Live " 00374 "TV recordings when they are this many days old. Live TV " 00375 "recordings may also be expired early if necessary to " 00376 "free up disk space.")); 00377 bs->setValue(1); 00378 return bs; 00379 }; 00380 00381 #if 0 00382 static GlobalSpinBox *MinRecordDiskThreshold() 00383 { 00384 GlobalSpinBox *bs = new GlobalSpinBox("MinRecordDiskThreshold", 00385 0, 1000000, 100); 00386 bs->setLabel(QObject::tr("New recording free disk space threshold " 00387 "(MB)")); 00388 bs->setHelpText(QObject::tr("MythTV will stop scheduling new recordings on " 00389 "a backend when its free disk space (in megabytes) falls " 00390 "below this value.")); 00391 bs->setValue(300); 00392 return bs; 00393 } 00394 #endif 00395 00396 static GlobalCheckBox *RerecordWatched() 00397 { 00398 GlobalCheckBox *bc = new GlobalCheckBox("RerecordWatched"); 00399 bc->setLabel(QObject::tr("Re-record watched")); 00400 bc->setValue(false); 00401 bc->setHelpText(QObject::tr("If enabled, programs that have been marked as " 00402 "watched and are Auto-Expired will be re-recorded if " 00403 "they are shown again.")); 00404 return bc; 00405 } 00406 00407 static GlobalSpinBox *RecordPreRoll() 00408 { 00409 GlobalSpinBox *bs = new GlobalSpinBox("RecordPreRoll", 0, 600, 60, true); 00410 bs->setLabel(QObject::tr("Time to record before start of show " 00411 "(secs)")); 00412 bs->setHelpText(QObject::tr("This global setting allows the recorder " 00413 "to start before the scheduled start time. It does " 00414 "not affect the scheduler. It is ignored when two shows " 00415 "have been scheduled without enough time in between.")); 00416 bs->setValue(0); 00417 return bs; 00418 } 00419 00420 static GlobalSpinBox *RecordOverTime() 00421 { 00422 GlobalSpinBox *bs = new GlobalSpinBox("RecordOverTime", 0, 1800, 60, true); 00423 bs->setLabel(QObject::tr("Time to record past end of show (secs)")); 00424 bs->setValue(0); 00425 bs->setHelpText(QObject::tr("This global setting allows the recorder " 00426 "to record beyond the scheduled end time. It does " 00427 "not affect the scheduler. It is ignored when two shows " 00428 "have been scheduled without enough time in between.")); 00429 return bs; 00430 } 00431 00432 static GlobalComboBox *OverTimeCategory() 00433 { 00434 GlobalComboBox *gc = new GlobalComboBox("OverTimeCategory"); 00435 gc->setLabel(QObject::tr("Category of shows to be extended")); 00436 gc->setHelpText(QObject::tr("For a special category (e.g. " 00437 "\"Sports event\"), request that shows be autoextended. " 00438 "Only works if a show's category can be determined.")); 00439 00440 MSqlQuery query(MSqlQuery::InitCon()); 00441 query.prepare("SELECT DISTINCT category FROM program GROUP BY category;"); 00442 00443 gc->addSelection("", ""); 00444 if (query.exec()) 00445 { 00446 while (query.next()) 00447 { 00448 QString key = query.value(0).toString(); 00449 if (!key.trimmed().isEmpty()) 00450 gc->addSelection(key, key); 00451 } 00452 } 00453 00454 return gc; 00455 } 00456 00457 static GlobalSpinBox *CategoryOverTime() 00458 { 00459 GlobalSpinBox *bs = new GlobalSpinBox("CategoryOverTime", 00460 0, 180, 60, true); 00461 bs->setLabel(QObject::tr("Record past end of show (mins)")); 00462 bs->setValue(30); 00463 bs->setHelpText(QObject::tr("For the specified category, an attempt " 00464 "will be made to extend the recording by the specified " 00465 "number of minutes. It is ignored when two shows have " 00466 "been scheduled without enough time in-between.")); 00467 return bs; 00468 } 00469 00470 static VerticalConfigurationGroup *CategoryOverTimeSettings() 00471 { 00472 VerticalConfigurationGroup *vcg = 00473 new VerticalConfigurationGroup(false, false); 00474 00475 vcg->setLabel(QObject::tr("Category record over-time")); 00476 vcg->setUseLabel(true); 00477 vcg->addChild(OverTimeCategory()); 00478 vcg->addChild(CategoryOverTime()); 00479 return vcg; 00480 } 00481 00482 static QString trunc(const QString &str, int len) 00483 { 00484 if (str.length() > len) 00485 return str.mid(0, len - 5) + " . . . "; 00486 return str; 00487 } 00488 00489 static QString pad(const QString &str, int len) 00490 { 00491 QString tmp = str; 00492 00493 while (tmp.length() + 4 < len) 00494 tmp += " "; 00495 00496 while (tmp.length() < len) 00497 tmp += " "; 00498 00499 return tmp; 00500 } 00501 00502 PlaybackProfileItemConfig::PlaybackProfileItemConfig(ProfileItem &_item) : 00503 item(_item) 00504 { 00505 setLabel(QObject::tr("Profile Item")); 00506 00507 HorizontalConfigurationGroup *row[2]; 00508 00509 row[0] = new HorizontalConfigurationGroup(false, false, true, true); 00510 cmp[0] = new TransComboBoxSetting(); 00511 width[0] = new TransSpinBoxSetting(0, 1920, 64, true); 00512 height[0] = new TransSpinBoxSetting(0, 1088, 64, true); 00513 row[1] = new HorizontalConfigurationGroup(false, false, true, true); 00514 cmp[1] = new TransComboBoxSetting(); 00515 width[1] = new TransSpinBoxSetting(0, 1920, 64, true); 00516 height[1] = new TransSpinBoxSetting(0, 1088, 64, true); 00517 decoder = new TransComboBoxSetting(); 00518 max_cpus = new TransSpinBoxSetting(1, HAVE_THREADS ? 4 : 1, 1, true); 00519 skiploop = new TransCheckBoxSetting(); 00520 vidrend = new TransComboBoxSetting(); 00521 osdrend = new TransComboBoxSetting(); 00522 osdfade = new TransCheckBoxSetting(); 00523 deint0 = new TransComboBoxSetting(); 00524 deint1 = new TransComboBoxSetting(); 00525 filters = new TransLineEditSetting(true); 00526 00527 for (uint i = 0; i < 2; ++i) 00528 { 00529 const QString kCMP[6] = { "", "<", "<=", "==", ">=", ">" }; 00530 for (uint j = 0; j < 6; ++j) 00531 cmp[i]->addSelection(kCMP[j]); 00532 00533 cmp[i]->setLabel(tr("Match criteria")); 00534 width[i]->setName(QString("w%1").arg(i)); 00535 width[i]->setLabel(tr("W", "Width")); 00536 height[i]->setName(QString("h%1").arg(i)); 00537 height[i]->setLabel(tr("H", "Height")); 00538 00539 row[i]->addChild(cmp[i]); 00540 row[i]->addChild(width[i]); 00541 row[i]->addChild(height[i]); 00542 } 00543 00544 HorizontalConfigurationGroup *vid_row = 00545 new HorizontalConfigurationGroup(false, false, true, true); 00546 HorizontalConfigurationGroup *osd_row = 00547 new HorizontalConfigurationGroup(false, false, true, true); 00548 00549 decoder->setLabel(tr("Decoder")); 00550 max_cpus->setLabel(tr("Max CPUs")); 00551 skiploop->setLabel(tr("Deblocking filter")); 00552 vidrend->setLabel(tr("Video renderer")); 00553 osdrend->setLabel(tr("OSD renderer")); 00554 osdfade->setLabel(tr("OSD fade")); 00555 deint0->setLabel(tr("Primary deinterlacer")); 00556 deint1->setLabel(tr("Fallback deinterlacer")); 00557 filters->setLabel(tr("Custom filters")); 00558 00559 max_cpus->setHelpText( 00560 tr("Maximum number of CPU cores used for video decoding and filtering.") + 00561 (HAVE_THREADS ? "" : 00562 tr(" Multithreaded decoding disabled-only one CPU " 00563 "will be used, please recompile with " 00564 "--enable-ffmpeg-pthreads to enable."))); 00565 00566 filters->setHelpText( 00567 QObject::tr("Example custom filter list: 'ivtc,denoise3d'")); 00568 00569 skiploop->setHelpText( 00570 tr("When unchecked the deblocking loopfilter will be disabled ") + "\n" + 00571 tr("Disabling will significantly reduce the load on the CPU " 00572 "when watching HD H.264 but may significantly reduce video quality.")); 00573 00574 osdfade->setHelpText( 00575 tr("When unchecked the OSD will not fade away but instead " 00576 "will disappear abruptly.") + '\n' + 00577 tr("Uncheck this if the video studders while the OSD is " 00578 "fading away.")); 00579 00580 vid_row->addChild(decoder); 00581 vid_row->addChild(max_cpus); 00582 vid_row->addChild(skiploop); 00583 osd_row->addChild(vidrend); 00584 osd_row->addChild(osdrend); 00585 osd_row->addChild(osdfade); 00586 00587 VerticalConfigurationGroup *grp = 00588 new VerticalConfigurationGroup(false, false, true, true); 00589 grp->addChild(row[0]); 00590 grp->addChild(row[1]); 00591 grp->addChild(vid_row); 00592 grp->addChild(osd_row); 00593 addChild(grp); 00594 00595 VerticalConfigurationGroup *page2 = 00596 new VerticalConfigurationGroup(false, false, true, true); 00597 page2->addChild(deint0); 00598 page2->addChild(deint1); 00599 page2->addChild(filters); 00600 addChild(page2); 00601 00602 connect(decoder, SIGNAL(valueChanged(const QString&)), 00603 this, SLOT(decoderChanged(const QString&)));\ 00604 connect(vidrend, SIGNAL(valueChanged(const QString&)), 00605 this, SLOT(vrenderChanged(const QString&))); 00606 connect(osdrend, SIGNAL(valueChanged(const QString&)), 00607 this, SLOT(orenderChanged(const QString&))); 00608 connect(deint0, SIGNAL(valueChanged(const QString&)), 00609 this, SLOT(deint0Changed(const QString&))); 00610 connect(deint1, SIGNAL(valueChanged(const QString&)), 00611 this, SLOT(deint1Changed(const QString&))); 00612 } 00613 00614 void PlaybackProfileItemConfig::Load(void) 00615 { 00616 for (uint i = 0; i < 2; ++i) 00617 { 00618 QString pcmp = item.Get(QString("pref_cmp%1").arg(i)); 00619 QStringList clist = pcmp.split(" "); 00620 00621 if (clist.size() == 0) 00622 clist<<((i) ? "" : ">"); 00623 if (clist.size() == 1) 00624 clist<<"0"; 00625 if (clist.size() == 2) 00626 clist<<"0"; 00627 00628 cmp[i]->setValue(clist[0]); 00629 width[i]->setValue(clist[1].toInt()); 00630 height[i]->setValue(clist[2].toInt()); 00631 } 00632 00633 QString pdecoder = item.Get("pref_decoder"); 00634 QString pmax_cpus = item.Get("pref_max_cpus"); 00635 QString pskiploop = item.Get("pref_skiploop"); 00636 QString prenderer = item.Get("pref_videorenderer"); 00637 QString posd = item.Get("pref_osdrenderer"); 00638 QString posdfade = item.Get("pref_osdfade"); 00639 QString pdeint0 = item.Get("pref_deint0"); 00640 QString pdeint1 = item.Get("pref_deint1"); 00641 QString pfilter = item.Get("pref_filters"); 00642 bool found = false; 00643 00644 QString dech = VideoDisplayProfile::GetDecoderHelp(); 00645 QStringList decr = VideoDisplayProfile::GetDecoders(); 00646 QStringList decn = VideoDisplayProfile::GetDecoderNames(); 00647 QStringList::const_iterator itr = decr.begin(); 00648 QStringList::const_iterator itn = decn.begin(); 00649 for (; (itr != decr.end()) && (itn != decn.end()); ++itr, ++itn) 00650 { 00651 decoder->addSelection(*itn, *itr, (*itr == pdecoder)); 00652 found |= (*itr == pdecoder); 00653 } 00654 if (!found && !pdecoder.isEmpty()) 00655 { 00656 decoder->SelectSetting::addSelection( 00657 VideoDisplayProfile::GetDecoderName(pdecoder), pdecoder, true); 00658 } 00659 decoder->setHelpText(VideoDisplayProfile::GetDecoderHelp(pdecoder)); 00660 00661 if (!pmax_cpus.isEmpty()) 00662 max_cpus->setValue(pmax_cpus.toUInt()); 00663 00664 skiploop->setValue((!pskiploop.isEmpty()) ? (bool) pskiploop.toInt() : true); 00665 00666 if (!prenderer.isEmpty()) 00667 vidrend->setValue(prenderer); 00668 if (!posd.isEmpty()) 00669 osdrend->setValue(posd); 00670 00671 osdfade->setValue((!posdfade.isEmpty()) ? (bool) posdfade.toInt() : true); 00672 00673 if (!pdeint0.isEmpty()) 00674 deint0->setValue(pdeint0); 00675 if (!pdeint1.isEmpty()) 00676 deint1->setValue(pdeint1); 00677 if (!pfilter.isEmpty()) 00678 filters->setValue(pfilter); 00679 } 00680 00681 void PlaybackProfileItemConfig::Save(void) 00682 { 00683 for (uint i = 0; i < 2; ++i) 00684 { 00685 QString val = QString("pref_cmp%1").arg(i); 00686 QString data; 00687 if (!cmp[i]->getValue().isEmpty()) 00688 { 00689 data = QString("%1 %2 %3") 00690 .arg(cmp[i]->getValue()) 00691 .arg(width[i]->intValue()) 00692 .arg(height[i]->intValue()); 00693 } 00694 item.Set(val, data); 00695 } 00696 00697 item.Set("pref_decoder", decoder->getValue()); 00698 item.Set("pref_max_cpus", max_cpus->getValue()); 00699 item.Set("pref_skiploop", (skiploop->boolValue()) ? "1" : "0"); 00700 item.Set("pref_videorenderer", vidrend->getValue()); 00701 item.Set("pref_osdrenderer", osdrend->getValue()); 00702 item.Set("pref_osdfade", (osdfade->boolValue()) ? "1" : "0"); 00703 item.Set("pref_deint0", deint0->getValue()); 00704 item.Set("pref_deint1", deint1->getValue()); 00705 00706 QString tmp0 = filters->getValue(); 00707 QString tmp1 = vidrend->getValue(); 00708 QString tmp3 = VideoDisplayProfile::IsFilterAllowed(tmp1) ? tmp0 : ""; 00709 item.Set("pref_filters", tmp3); 00710 } 00711 00712 void PlaybackProfileItemConfig::decoderChanged(const QString &dec) 00713 { 00714 QString vrenderer = vidrend->getValue(); 00715 QStringList renderers = VideoDisplayProfile::GetVideoRenderers(dec); 00716 QStringList::const_iterator it; 00717 00718 QString prenderer; 00719 for (it = renderers.begin(); it != renderers.end(); ++it) 00720 prenderer = (*it == vrenderer) ? vrenderer : prenderer; 00721 if (prenderer.isEmpty()) 00722 prenderer = VideoDisplayProfile::GetPreferredVideoRenderer(dec); 00723 00724 vidrend->clearSelections(); 00725 for (it = renderers.begin(); it != renderers.end(); ++it) 00726 { 00727 if (*it != "null") 00728 vidrend->addSelection(*it, *it, (*it == prenderer)); 00729 } 00730 00731 decoder->setHelpText(VideoDisplayProfile::GetDecoderHelp(dec)); 00732 } 00733 00734 void PlaybackProfileItemConfig::vrenderChanged(const QString &renderer) 00735 { 00736 QStringList osds = VideoDisplayProfile::GetOSDs(renderer); 00737 QStringList deints = VideoDisplayProfile::GetDeinterlacers(renderer); 00738 QString losd = osdrend->getValue(); 00739 QString ldeint0 = deint0->getValue(); 00740 QString ldeint1 = deint1->getValue(); 00741 QStringList::const_iterator it; 00742 00743 osdrend->clearSelections(); 00744 for (it = osds.begin(); it != osds.end(); ++it) 00745 osdrend->addSelection(*it, *it, (*it == losd)); 00746 00747 deint0->clearSelections(); 00748 for (it = deints.begin(); it != deints.end(); ++it) 00749 { 00750 deint0->addSelection(VideoDisplayProfile::GetDeinterlacerName(*it), 00751 *it, (*it == ldeint0)); 00752 } 00753 00754 deint1->clearSelections(); 00755 for (it = deints.begin(); it != deints.end(); ++it) 00756 { 00757 if (!(*it).contains("bobdeint") && !(*it).contains("doublerate") && 00758 !(*it).contains("doubleprocess")) 00759 deint1->addSelection(VideoDisplayProfile::GetDeinterlacerName(*it), 00760 *it, (*it == ldeint1)); 00761 } 00762 00763 filters->setEnabled(VideoDisplayProfile::IsFilterAllowed(renderer)); 00764 vidrend->setHelpText(VideoDisplayProfile::GetVideoRendererHelp(renderer)); 00765 } 00766 00767 void PlaybackProfileItemConfig::orenderChanged(const QString &renderer) 00768 { 00769 osdrend->setHelpText(VideoDisplayProfile::GetOSDHelp(renderer)); 00770 } 00771 00772 void PlaybackProfileItemConfig::deint0Changed(const QString &deint) 00773 { 00774 deint0->setHelpText( 00775 QObject::tr("Main deinterlacing method.") + ' ' + 00776 VideoDisplayProfile::GetDeinterlacerHelp(deint)); 00777 } 00778 00779 void PlaybackProfileItemConfig::deint1Changed(const QString &deint) 00780 { 00781 deint1->setHelpText( 00782 QObject::tr("Fallback deinterlacing method.") + ' ' + 00783 VideoDisplayProfile::GetDeinterlacerHelp(deint)); 00784 } 00785 00786 PlaybackProfileConfig::PlaybackProfileConfig(const QString &profilename) : 00787 VerticalConfigurationGroup(false, false, true, true), 00788 profile_name(profilename), needs_save(false), 00789 groupid(0), last_main(NULL) 00790 { 00791 groupid = VideoDisplayProfile::GetProfileGroupID( 00792 profilename, gCoreContext->GetHostName()); 00793 00794 items = VideoDisplayProfile::LoadDB(groupid); 00795 00796 InitUI(); 00797 } 00798 00799 PlaybackProfileConfig::~PlaybackProfileConfig() 00800 { 00801 } 00802 00803 void PlaybackProfileConfig::InitLabel(uint i) 00804 { 00805 if (!labels[i]) 00806 return; 00807 00808 QString andStr = QObject::tr("&", "and"); 00809 QString cmp0 = items[i].Get("pref_cmp0"); 00810 QString cmp1 = items[i].Get("pref_cmp1"); 00811 QString str = QObject::tr("if rez") + ' ' + cmp0; 00812 00813 if (!cmp1.isEmpty()) 00814 str += " " + andStr + ' ' + cmp1; 00815 00816 str += " -> "; 00817 str += items[i].Get("pref_decoder"); 00818 str += " " + andStr + ' '; 00819 str += items[i].Get("pref_videorenderer"); 00820 str.replace("-blit", ""); 00821 str.replace("ivtv " + andStr + " ivtv", "ivtv"); 00822 str.replace("xvmc " + andStr + " xvmc", "xvmc"); 00823 str.replace("xvmc", "XvMC"); 00824 str.replace("xv", "XVideo"); 00825 00826 labels[i]->setValue(pad(trunc(str, 48), 48)); 00827 } 00828 00829 void PlaybackProfileConfig::InitUI(void) 00830 { 00831 VerticalConfigurationGroup *main = 00832 new VerticalConfigurationGroup(false, false, true, true); 00833 00834 HorizontalConfigurationGroup *rows = 00835 new HorizontalConfigurationGroup(false, false, true, true); 00836 VerticalConfigurationGroup *column1 = 00837 new VerticalConfigurationGroup(false, false, true, true); 00838 VerticalConfigurationGroup *column2 = 00839 new VerticalConfigurationGroup(false, false, true, true); 00840 00841 labels.resize(items.size()); 00842 00843 for (uint i = 0; i < items.size(); ++i) 00844 { 00845 labels[i] = new TransLabelSetting(); 00846 InitLabel(i); 00847 column1->addChild(labels[i]); 00848 } 00849 00850 editProf.resize(items.size()); 00851 delProf.resize(items.size()); 00852 priority.resize(items.size()); 00853 00854 for (uint i = 0; i < items.size(); ++i) 00855 { 00856 HorizontalConfigurationGroup *grp = 00857 new HorizontalConfigurationGroup(false, false, true, true); 00858 00859 editProf[i] = new TransButtonSetting(QString("edit%1").arg(i)); 00860 delProf[i] = new TransButtonSetting(QString("del%1").arg(i)); 00861 priority[i] = new TransSpinBoxSetting(1, items.size(), 1); 00862 priority[i]->setName(QString("pri%1").arg(i)); 00863 00864 editProf[i]->setLabel(QObject::tr("Edit")); 00865 delProf[i]->setLabel(QObject::tr("Delete")); 00866 priority[i]->setValue(i + 1); 00867 items[i].Set("pref_priority", QString::number(i + 1)); 00868 00869 grp->addChild(editProf[i]); 00870 grp->addChild(delProf[i]); 00871 grp->addChild(priority[i]); 00872 00873 connect(editProf[i], SIGNAL(pressed(QString)), 00874 this, SLOT (pressed(QString))); 00875 connect(delProf[i], SIGNAL(pressed(QString)), 00876 this, SLOT (pressed(QString))); 00877 connect(priority[i], SIGNAL(valueChanged( const QString&, int)), 00878 this, SLOT( priorityChanged(const QString&, int))); 00879 00880 column2->addChild(grp); 00881 } 00882 00883 rows->addChild(column1); 00884 rows->addChild(column2); 00885 00886 TransButtonSetting *addEntry = new TransButtonSetting("addentry"); 00887 addEntry->setLabel(QObject::tr("Add New Entry")); 00888 00889 main->addChild(rows); 00890 main->addChild(addEntry); 00891 00892 connect(addEntry, SIGNAL(pressed(QString)), 00893 this, SLOT (pressed(QString))); 00894 00895 if (last_main) 00896 replaceChild(last_main, main); 00897 else 00898 addChild(main); 00899 00900 last_main = main; 00901 } 00902 00903 void PlaybackProfileConfig::Load(void) 00904 { 00905 // Already loaded data in constructor... 00906 } 00907 00908 void PlaybackProfileConfig::Save(void) 00909 { 00910 if (!needs_save) 00911 return; // nothing to do.. 00912 00913 bool ok = VideoDisplayProfile::DeleteDB(groupid, del_items); 00914 if (!ok) 00915 { 00916 LOG(VB_GENERAL, LOG_ERR, 00917 "PlaybackProfileConfig::Save() -- failed to delete items"); 00918 return; 00919 } 00920 00921 ok = VideoDisplayProfile::SaveDB(groupid, items); 00922 if (!ok) 00923 { 00924 LOG(VB_GENERAL, LOG_ERR, 00925 "PlaybackProfileConfig::Save() -- failed to save items"); 00926 return; 00927 } 00928 } 00929 00930 void PlaybackProfileConfig::pressed(QString cmd) 00931 { 00932 if (cmd.left(4) == "edit") 00933 { 00934 uint i = cmd.mid(4).toUInt(); 00935 PlaybackProfileItemConfig itemcfg(items[i]); 00936 00937 if (itemcfg.exec() != kDialogCodeAccepted) 00938 LOG(VB_GENERAL, LOG_ERR, QString("edit #%1").arg(i) + " rejected"); 00939 00940 InitLabel(i); 00941 needs_save = true; 00942 } 00943 else if (cmd.left(3) == "del") 00944 { 00945 uint i = cmd.mid(3).toUInt(); 00946 del_items.push_back(items[i]); 00947 items.erase(items.begin() + i); 00948 00949 InitUI(); 00950 needs_save = true; 00951 } 00952 else if (cmd == "addentry") 00953 { 00954 ProfileItem item; 00955 PlaybackProfileItemConfig itemcfg(item); 00956 00957 if (itemcfg.exec() != kDialogCodeAccepted) 00958 LOG(VB_GENERAL, LOG_ERR, "addentry rejected"); 00959 00960 items.push_back(item); 00961 InitUI(); 00962 needs_save = true; 00963 } 00964 00965 repaint(); 00966 } 00967 00968 void PlaybackProfileConfig::priorityChanged(const QString &name, int val) 00969 { 00970 uint i = name.mid(3).toInt(); 00971 uint j = i; 00972 00973 priority[i]->SetRelayEnabled(false); 00974 00975 if (((int)items[i].GetPriority() < val) && 00976 (i + 1 < priority.size()) && 00977 ((int)items[i+1].GetPriority() == val)) 00978 { 00979 j++; 00980 priority[j]->SetRelayEnabled(false); 00981 00982 swap(i, j); 00983 priority[j]->setFocus(); 00984 } 00985 else if (((int)items[i].GetPriority() > val) && 00986 (i > 0) && 00987 ((int)items[i-1].GetPriority() == val)) 00988 { 00989 j--; 00990 priority[j]->SetRelayEnabled(false); 00991 00992 swap(i, j); 00993 00994 priority[j]->setFocus(); 00995 } 00996 else 00997 { 00998 priority[i]->setValue((int) items[i].GetPriority()); 00999 } 01000 01001 needs_save = true; 01002 01003 repaint(); 01004 01005 priority[i]->SetRelayEnabled(true); 01006 if (i != j) 01007 priority[j]->SetRelayEnabled(true); 01008 } 01009 01010 void PlaybackProfileConfig::swap(int i, int j) 01011 { 01012 int pri_i = items[i].GetPriority(); 01013 int pri_j = items[j].GetPriority(); 01014 01015 ProfileItem item = items[j]; 01016 items[j] = items[i]; 01017 items[i] = item; 01018 01019 priority[i]->setValue(pri_i); 01020 priority[j]->setValue(pri_j); 01021 01022 items[i].Set("pref_priority", QString::number(pri_i)); 01023 items[j].Set("pref_priority", QString::number(pri_j)); 01024 01025 const QString label_i = labels[i]->getValue(); 01026 const QString label_j = labels[j]->getValue(); 01027 labels[i]->setValue(label_j); 01028 labels[j]->setValue(label_i); 01029 } 01030 01031 PlaybackProfileConfigs::PlaybackProfileConfigs(const QString &str) : 01032 TriggeredConfigurationGroup(false, true, true, true, 01033 false, false, true, true), grouptrigger(NULL) 01034 { 01035 setLabel(QObject::tr("Playback Profiles") + str); 01036 01037 QString host = gCoreContext->GetHostName(); 01038 QStringList profiles = VideoDisplayProfile::GetProfiles(host); 01039 if (profiles.empty()) 01040 { 01041 VideoDisplayProfile::CreateProfiles(host); 01042 profiles = VideoDisplayProfile::GetProfiles(host); 01043 } 01044 if (profiles.empty()) 01045 return; 01046 01047 if (!profiles.contains("Normal") && 01048 !profiles.contains("High Quality") && 01049 !profiles.contains("Slim")) 01050 { 01051 VideoDisplayProfile::CreateNewProfiles(host); 01052 profiles = VideoDisplayProfile::GetProfiles(host); 01053 } 01054 01055 #ifdef USING_VDPAU 01056 if (!profiles.contains("VDPAU Normal") && 01057 !profiles.contains("VDPAU High Quality") && 01058 !profiles.contains("VDPAU Slim")) 01059 { 01060 VideoDisplayProfile::CreateVDPAUProfiles(host); 01061 profiles = VideoDisplayProfile::GetProfiles(host); 01062 } 01063 #endif 01064 01065 #if defined(Q_OS_MACX) 01066 if (VDALibrary::GetVDALibrary() != NULL) 01067 { 01068 if (!profiles.contains("VDA Normal") && 01069 !profiles.contains("VDA High Quality") && 01070 !profiles.contains("VDA Slim")) 01071 { 01072 VideoDisplayProfile::CreateVDAProfiles(host); 01073 profiles = VideoDisplayProfile::GetProfiles(host); 01074 } 01075 } 01076 #endif 01077 01078 #ifdef USING_OPENGL_VIDEO 01079 if (!profiles.contains("OpenGL Normal") && 01080 !profiles.contains("OpenGL High Quality") && 01081 !profiles.contains("OpenGL Slim")) 01082 { 01083 VideoDisplayProfile::CreateOpenGLProfiles(host); 01084 profiles = VideoDisplayProfile::GetProfiles(host); 01085 } 01086 #endif 01087 01088 #ifdef USING_GLVAAPI 01089 if (!profiles.contains("VAAPI Normal")) 01090 { 01091 VideoDisplayProfile::CreateVAAPIProfiles(host); 01092 profiles = VideoDisplayProfile::GetProfiles(host); 01093 } 01094 #endif 01095 01096 QString profile = VideoDisplayProfile::GetDefaultProfileName(host); 01097 if (!profiles.contains(profile)) 01098 { 01099 profile = (profiles.contains("Normal")) ? "Normal" : profiles[0]; 01100 VideoDisplayProfile::SetDefaultProfileName(profile, host); 01101 } 01102 01103 grouptrigger = new HostComboBox("DefaultVideoPlaybackProfile"); 01104 grouptrigger->setLabel(QObject::tr("Current Video Playback Profile")); 01105 QStringList::const_iterator it; 01106 for (it = profiles.begin(); it != profiles.end(); ++it) 01107 grouptrigger->addSelection(ProgramInfo::i18n(*it), *it); 01108 01109 HorizontalConfigurationGroup *grp = 01110 new HorizontalConfigurationGroup(false, false, true, true); 01111 TransButtonSetting *addProf = new TransButtonSetting("add"); 01112 TransButtonSetting *delProf = new TransButtonSetting("del"); 01113 01114 addProf->setLabel(QObject::tr("Add New")); 01115 delProf->setLabel(QObject::tr("Delete")); 01116 01117 grp->addChild(grouptrigger); 01118 grp->addChild(addProf); 01119 grp->addChild(delProf); 01120 01121 addChild(grp); 01122 01123 setTrigger(grouptrigger); 01124 for (it = profiles.begin(); it != profiles.end(); ++it) 01125 addTarget(*it, new PlaybackProfileConfig(*it)); 01126 setSaveAll(true); 01127 01128 connect(addProf, SIGNAL(pressed( QString)), 01129 this, SLOT (btnPress(QString))); 01130 connect(delProf, SIGNAL(pressed( QString)), 01131 this, SLOT (btnPress(QString))); 01132 } 01133 01134 PlaybackProfileConfigs::~PlaybackProfileConfigs() 01135 { 01136 #if 0 01137 LOG(VB_GENERAL, LOG_DEBUG, "~PlaybackProfileConfigs()"); 01138 #endif 01139 } 01140 01141 void PlaybackProfileConfigs::btnPress(QString cmd) 01142 { 01143 if (cmd == "add") 01144 { 01145 QString name; 01146 01147 QString host = gCoreContext->GetHostName(); 01148 QStringList not_ok_list = VideoDisplayProfile::GetProfiles(host); 01149 01150 bool ok = true; 01151 while (ok) 01152 { 01153 QString msg = QObject::tr("Enter Playback Group Name"); 01154 01155 ok = MythPopupBox::showGetTextPopup( 01156 GetMythMainWindow(), msg, msg, name); 01157 01158 if (!ok) 01159 return; 01160 01161 if (not_ok_list.contains(name) || name.isEmpty()) 01162 { 01163 msg = (name.isEmpty()) ? 01164 QObject::tr( 01165 "Sorry, playback group\nname cannot be blank.") : 01166 QObject::tr( 01167 "Sorry, playback group name\n" 01168 "'%1' is already being used.").arg(name); 01169 01170 MythPopupBox::showOkPopup( 01171 GetMythMainWindow(), QObject::tr("Error"), msg); 01172 01173 continue; 01174 } 01175 01176 break; 01177 } 01178 01179 VideoDisplayProfile::CreateProfileGroup(name, gCoreContext->GetHostName()); 01180 addTarget(name, new PlaybackProfileConfig(name)); 01181 01182 if (grouptrigger) 01183 grouptrigger->addSelection(name, name, true); 01184 } 01185 else if ((cmd == "del") && grouptrigger) 01186 { 01187 const QString name = grouptrigger->getSelectionLabel(); 01188 if (!name.isEmpty()) 01189 { 01190 removeTarget(name); 01191 VideoDisplayProfile::DeleteProfileGroup( 01192 name, gCoreContext->GetHostName()); 01193 } 01194 } 01195 01196 repaint(); 01197 } 01198 01199 void PlaybackProfileConfigs::triggerChanged(const QString &trig) 01200 { 01201 TriggeredConfigurationGroup::triggerChanged(trig); 01202 } 01203 01204 static HostComboBox *PlayBoxOrdering() 01205 { 01206 QString str[4] = 01207 { 01208 QObject::tr("Sort all sub-titles/multi-titles Ascending"), 01209 QObject::tr("Sort all sub-titles/multi-titles Descending"), 01210 QObject::tr("Sort sub-titles Descending, multi-titles Ascending"), 01211 QObject::tr("Sort sub-titles Ascending, multi-titles Descending"), 01212 }; 01213 QString help = QObject::tr( 01214 "Selects how to sort show episodes. Sub-titles refers to the " 01215 "episodes listed under a specific show title. Multi-title " 01216 "refers to sections (e.g. \"All Programs\") which list " 01217 "multiple titles. Sections in parentheses are not affected."); 01218 01219 HostComboBox *gc = new HostComboBox("PlayBoxOrdering"); 01220 gc->setLabel(QObject::tr("Episode sort orderings")); 01221 01222 for (int i = 0; i < 4; ++i) 01223 gc->addSelection(str[i], QString::number(i)); 01224 01225 gc->setValue(1); 01226 gc->setHelpText(help); 01227 01228 return gc; 01229 } 01230 01231 static HostComboBox *PlayBoxEpisodeSort() 01232 { 01233 HostComboBox *gc = new HostComboBox("PlayBoxEpisodeSort"); 01234 gc->setLabel(QObject::tr("Sort episodes")); 01235 gc->addSelection(QObject::tr("Record date"), "Date"); 01236 gc->addSelection(QObject::tr("Season/Episode"), "Season"); 01237 gc->addSelection(QObject::tr("Original air date"), "OrigAirDate"); 01238 gc->addSelection(QObject::tr("Program ID"), "Id"); 01239 gc->setHelpText(QObject::tr("Selects how to sort a shows episodes")); 01240 return gc; 01241 } 01242 01243 static HostSpinBox *FFRewReposTime() 01244 { 01245 HostSpinBox *gs = new HostSpinBox("FFRewReposTime", 0, 200, 5); 01246 gs->setLabel(QObject::tr("Fast forward/rewind reposition amount")); 01247 gs->setValue(100); 01248 gs->setHelpText(QObject::tr("When exiting sticky keys fast forward/rewind " 01249 "mode, reposition this many 1/100th seconds before " 01250 "resuming normal playback. This " 01251 "compensates for the reaction time between seeing " 01252 "where to resume playback and actually exiting seeking.")); 01253 return gs; 01254 } 01255 01256 static HostCheckBox *FFRewReverse() 01257 { 01258 HostCheckBox *gc = new HostCheckBox("FFRewReverse"); 01259 gc->setLabel(QObject::tr("Reverse direction in fast forward/rewind")); 01260 gc->setValue(true); 01261 gc->setHelpText(QObject::tr("If enabled, pressing the sticky rewind key " 01262 "in fast forward mode switches to rewind mode, and " 01263 "vice versa. If disabled, it will decrease the " 01264 "current speed or switch to play mode if " 01265 "the speed can't be decreased further.")); 01266 return gc; 01267 } 01268 01269 static HostComboBox *MenuTheme() 01270 { 01271 HostComboBox *gc = new HostComboBox("MenuTheme"); 01272 gc->setLabel(QObject::tr("Menu theme")); 01273 01274 QList<ThemeInfo> themelist = GetMythUI()->GetThemes(THEME_MENU); 01275 01276 QList<ThemeInfo>::iterator it; 01277 for( it = themelist.begin(); it != themelist.end(); ++it ) 01278 { 01279 gc->addSelection((*it).GetName(), (*it).GetDirectoryName(), 01280 (*it).GetDirectoryName() == "defaultmenu"); 01281 } 01282 01283 return gc; 01284 } 01285 01286 static HostComboBox MUNUSED *DecodeVBIFormat() 01287 { 01288 QString beVBI = gCoreContext->GetSetting("VbiFormat"); 01289 QString fmt = beVBI.toLower().left(4); 01290 int sel = (fmt == "pal ") ? 1 : ((fmt == "ntsc") ? 2 : 0); 01291 01292 HostComboBox *gc = new HostComboBox("DecodeVBIFormat"); 01293 gc->setLabel(QObject::tr("Decode VBI format")); 01294 gc->addSelection(QObject::tr("None"), "none", 0 == sel); 01295 gc->addSelection(QObject::tr("PAL teletext"), "pal_txt", 1 == sel); 01296 gc->addSelection(QObject::tr("NTSC closed caption"), "ntsc_cc", 2 == sel); 01297 gc->setHelpText( 01298 QObject::tr("If enabled, this overrides the mythtv-setup setting " 01299 "used during recording when decoding captions.")); 01300 01301 return gc; 01302 } 01303 01304 static HostComboBox *SubtitleCodec() 01305 { 01306 HostComboBox *gc = new HostComboBox("SubtitleCodec"); 01307 01308 gc->setLabel(QObject::tr("Subtitle Codec")); 01309 QList<QByteArray> list = QTextCodec::availableCodecs(); 01310 for (uint i = 0; i < (uint) list.size(); ++i) 01311 { 01312 QString val = QString(list[i]); 01313 gc->addSelection(val, val, val.toLower() == "utf-8"); 01314 } 01315 01316 return gc; 01317 } 01318 01319 static HostComboBox *ChannelOrdering() 01320 { 01321 HostComboBox *gc = new HostComboBox("ChannelOrdering"); 01322 gc->setLabel(QObject::tr("Channel ordering")); 01323 gc->addSelection(QObject::tr("channel number"), "channum"); 01324 gc->addSelection(QObject::tr("callsign"), "callsign"); 01325 return gc; 01326 } 01327 01328 static HostSpinBox *VertScanPercentage() 01329 { 01330 HostSpinBox *gs = new HostSpinBox("VertScanPercentage", -100, 100, 1); 01331 gs->setLabel(QObject::tr("Vertical scaling")); 01332 gs->setValue(0); 01333 gs->setHelpText(QObject::tr( 01334 "Adjust this if the image does not fill your " 01335 "screen vertically. Range -100% to 100%")); 01336 return gs; 01337 } 01338 01339 static HostSpinBox *HorizScanPercentage() 01340 { 01341 HostSpinBox *gs = new HostSpinBox("HorizScanPercentage", -100, 100, 1); 01342 gs->setLabel(QObject::tr("Horizontal scaling")); 01343 gs->setValue(0); 01344 gs->setHelpText(QObject::tr( 01345 "Adjust this if the image does not fill your " 01346 "screen horizontally. Range -100% to 100%")); 01347 return gs; 01348 }; 01349 01350 static HostSpinBox *XScanDisplacement() 01351 { 01352 HostSpinBox *gs = new HostSpinBox("XScanDisplacement", -50, 50, 1); 01353 gs->setLabel(QObject::tr("Scan displacement (X)")); 01354 gs->setValue(0); 01355 gs->setHelpText(QObject::tr("Adjust this to move the image horizontally.")); 01356 return gs; 01357 } 01358 01359 static HostSpinBox *YScanDisplacement() 01360 { 01361 HostSpinBox *gs = new HostSpinBox("YScanDisplacement", -50, 50, 1); 01362 gs->setLabel(QObject::tr("Scan displacement (Y)")); 01363 gs->setValue(0); 01364 gs->setHelpText(QObject::tr("Adjust this to move the image vertically.")); 01365 return gs; 01366 }; 01367 01368 static HostCheckBox *DefaultCCMode() 01369 { 01370 HostCheckBox *gc = new HostCheckBox("DefaultCCMode"); 01371 gc->setLabel(QObject::tr("Always display closed captioning or subtitles")); 01372 gc->setValue(false); 01373 gc->setHelpText(QObject::tr( 01374 "If enabled, captions will be displayed " 01375 "when playing back recordings or watching " 01376 "Live TV. Closed Captioning can be turned on or off " 01377 "by pressing \"T\" during playback.")); 01378 return gc; 01379 } 01380 01381 static HostCheckBox *EnableMHEG() 01382 { 01383 HostCheckBox *gc = new HostCheckBox("EnableMHEG"); 01384 gc->setLabel(QObject::tr("Enable interactive TV")); 01385 gc->setValue(false); 01386 gc->setHelpText(QObject::tr( 01387 "If enabled, interactive TV applications (MHEG) will " 01388 "be activated. This is used for teletext and logos for " 01389 "radio and channels that are currently off-air.")); 01390 return gc; 01391 } 01392 01393 static HostCheckBox *PersistentBrowseMode() 01394 { 01395 HostCheckBox *gc = new HostCheckBox("PersistentBrowseMode"); 01396 gc->setLabel(QObject::tr("Always use browse mode in Live TV")); 01397 gc->setValue(true); 01398 gc->setHelpText( 01399 QObject::tr( 01400 "If enabled, browse mode will automatically be activated " 01401 "whenever you use channel up/down while watching Live TV.")); 01402 return gc; 01403 } 01404 01405 static HostCheckBox *BrowseAllTuners() 01406 { 01407 HostCheckBox *gc = new HostCheckBox("BrowseAllTuners"); 01408 gc->setLabel(QObject::tr("Browse all channels")); 01409 gc->setValue(false); 01410 gc->setHelpText( 01411 QObject::tr( 01412 "If enabled, browse mode will shows channels on all " 01413 "available recording devices, instead of showing " 01414 "channels on just the current recorder.")); 01415 return gc; 01416 } 01417 01418 static HostCheckBox *ClearSavedPosition() 01419 { 01420 HostCheckBox *gc = new HostCheckBox("ClearSavedPosition"); 01421 gc->setLabel(QObject::tr("Clear bookmark on playback")); 01422 gc->setValue(true); 01423 gc->setHelpText(QObject::tr("If enabled, automatically clear the " 01424 "bookmark on a recording when the recording is played " 01425 "back. If disabled, you can mark the beginning with " 01426 "rewind then save position.")); 01427 return gc; 01428 } 01429 01430 static HostCheckBox *AltClearSavedPosition() 01431 { 01432 HostCheckBox *gc = new HostCheckBox("AltClearSavedPosition"); 01433 gc->setLabel(QObject::tr("Alternate clear and save bookmark")); 01434 gc->setValue(true); 01435 gc->setHelpText(QObject::tr("During playback the SELECT key " 01436 "(Enter or Space) will alternate between \"Bookmark " 01437 "Saved\" and \"Bookmark Cleared\". If disabled, the " 01438 "SELECT key will save the current position for each " 01439 "keypress.")); 01440 return gc; 01441 } 01442 01443 static HostComboBox *PlaybackExitPrompt() 01444 { 01445 HostComboBox *gc = new HostComboBox("PlaybackExitPrompt"); 01446 gc->setLabel(QObject::tr("Action on playback exit")); 01447 gc->addSelection(QObject::tr("Just exit"), "0"); 01448 gc->addSelection(QObject::tr("Save position and exit"), "2"); 01449 gc->addSelection(QObject::tr("Always prompt (excluding Live TV)"), "1"); 01450 gc->addSelection(QObject::tr("Always prompt (including Live TV)"), "4"); 01451 gc->addSelection(QObject::tr("Prompt for Live TV only"), "8"); 01452 gc->setHelpText(QObject::tr("If set to prompt, a menu will be displayed " 01453 "when you exit playback mode. The options available will " 01454 "allow you to save your position, delete the " 01455 "recording, or continue watching.")); 01456 return gc; 01457 } 01458 01459 static HostCheckBox *EndOfRecordingExitPrompt() 01460 { 01461 HostCheckBox *gc = new HostCheckBox("EndOfRecordingExitPrompt"); 01462 gc->setLabel(QObject::tr("Prompt at end of recording")); 01463 gc->setValue(false); 01464 gc->setHelpText(QObject::tr("If enabled, a menu will be displayed allowing " 01465 "you to delete the recording when it has finished " 01466 "playing.")); 01467 return gc; 01468 } 01469 01470 static HostCheckBox *JumpToProgramOSD() 01471 { 01472 HostCheckBox *gc = new HostCheckBox("JumpToProgramOSD"); 01473 gc->setLabel(QObject::tr("Jump to program OSD")); 01474 gc->setValue(true); 01475 gc->setHelpText(QObject::tr( 01476 "Set the choice between viewing the current " 01477 "recording group in the OSD, or showing the " 01478 "'Watch Recording' screen when 'Jump to Program' " 01479 "is activated. If enabled, the recordings are shown " 01480 "in the OSD")); 01481 return gc; 01482 } 01483 01484 static HostCheckBox *ContinueEmbeddedTVPlay() 01485 { 01486 HostCheckBox *gc = new HostCheckBox("ContinueEmbeddedTVPlay"); 01487 gc->setLabel(QObject::tr("Continue playback when embedded")); 01488 gc->setValue(false); 01489 gc->setHelpText(QObject::tr( 01490 "If enabled, TV playback continues when the TV window " 01491 "is embedded in the upcoming program list or recorded " 01492 "list. The default is to pause the recorded show when " 01493 "embedded.")); 01494 return gc; 01495 } 01496 01497 static HostCheckBox *AutomaticSetWatched() 01498 { 01499 HostCheckBox *gc = new HostCheckBox("AutomaticSetWatched"); 01500 gc->setLabel(QObject::tr("Automatically mark a recording as watched")); 01501 gc->setValue(false); 01502 gc->setHelpText(QObject::tr("If enabled, when you exit near the end of a " 01503 "recording it will be marked as watched. The automatic " 01504 "detection is not foolproof, so do not enable this " 01505 "setting if you don't want an unwatched recording marked " 01506 "as watched.")); 01507 return gc; 01508 } 01509 01510 static HostSpinBox *LiveTVIdleTimeout() 01511 { 01512 HostSpinBox *gs = new HostSpinBox("LiveTVIdleTimeout", 0, 3600, 1); 01513 gs->setLabel(QObject::tr("Live TV idle timeout (mins)")); 01514 gs->setValue(0); 01515 gs->setHelpText(QObject::tr( 01516 "Exit Live TV automatically if left idle for the " 01517 "specified number of minutes. " 01518 "0 disables the timeout.")); 01519 return gs; 01520 } 01521 01522 // static HostCheckBox *PlaybackPreview() 01523 // { 01524 // HostCheckBox *gc = new HostCheckBox("PlaybackPreview"); 01525 // gc->setLabel(QObject::tr("Display live preview of recordings")); 01526 // gc->setValue(true); 01527 // gc->setHelpText(QObject::tr("If enabled, a preview of the recording " 01528 // "will play in a small window on the \"Watch a " 01529 // "Recording\" menu.")); 01530 // return gc; 01531 // } 01532 // 01533 // static HostCheckBox *HWAccelPlaybackPreview() 01534 // { 01535 // HostCheckBox *gc = new HostCheckBox("HWAccelPlaybackPreview"); 01536 // gc->setLabel(QObject::tr("Use HW Acceleration for live recording preview")); 01537 // gc->setValue(false); 01538 // gc->setHelpText( 01539 // QObject::tr( 01540 // "If enabled, live recording preview will use hardware " 01541 // "acceleration. The video renderer used is determined by the " 01542 // "selected CPU profile. Disable if playback is sluggish or " 01543 // "causes high CPU load")); 01544 // return gc; 01545 // } 01546 01547 static HostCheckBox *UseVirtualKeyboard() 01548 { 01549 HostCheckBox *gc = new HostCheckBox("UseVirtualKeyboard"); 01550 gc->setLabel(QObject::tr("Use line edit virtual keyboards")); 01551 gc->setValue(true); 01552 gc->setHelpText(QObject::tr("If enabled, you can use a virtual keyboard " 01553 "in MythTV's line edit boxes. To use, hit SELECT (Enter " 01554 "or Space) while a line edit is in focus.")); 01555 return gc; 01556 } 01557 01558 static HostSpinBox *FrontendIdleTimeout() 01559 { 01560 HostSpinBox *gs = new HostSpinBox("FrontendIdleTimeout", 0, 360, 15); 01561 gs->setLabel(QObject::tr("Idle time before entering standby mode (minutes)")); 01562 gs->setValue(90); 01563 gs->setHelpText(QObject::tr("Number of minutes to wait when the frontend " 01564 "is idle before entering standby mode. Standby " 01565 "mode allows the backend to power down if " 01566 "configured to do so. Any remote or mouse input " 01567 "will cause the countdown to start again and/or " 01568 "exit idle mode. Video playback suspends the " 01569 "countdown. A value of zero prevents the " 01570 "frontend automatically entering standby.")); 01571 return gs; 01572 } 01573 01574 static HostComboBox *OverrideExitMenu() 01575 { 01576 HostComboBox *gc = new HostComboBox("OverrideExitMenu"); 01577 gc->setLabel(QObject::tr("Customize exit menu options")); 01578 gc->addSelection(QObject::tr("Default"), "0"); 01579 gc->addSelection(QObject::tr("Show quit"), "1"); 01580 gc->addSelection(QObject::tr("Show quit and shutdown"), "2"); 01581 gc->addSelection(QObject::tr("Show quit, reboot and shutdown"), "3"); 01582 gc->addSelection(QObject::tr("Show shutdown"), "4"); 01583 gc->addSelection(QObject::tr("Show reboot"), "5"); 01584 gc->addSelection(QObject::tr("Show reboot and shutdown"), "6"); 01585 gc->setHelpText(QObject::tr("By default, only remote frontends are shown " 01586 "the shutdown option on the exit menu. Here you can force " 01587 "specific shutdown and reboot options to be displayed.")); 01588 return gc; 01589 } 01590 01591 static HostLineEdit *RebootCommand() 01592 { 01593 HostLineEdit *ge = new HostLineEdit("RebootCommand"); 01594 ge->setLabel(QObject::tr("Reboot command")); 01595 ge->setValue(""); 01596 ge->setHelpText(QObject::tr("Optional. Script to run if you select " 01597 "the reboot option from the exit menu, if the option " 01598 "is displayed. You must configure an exit key to " 01599 "display the exit menu.")); 01600 return ge; 01601 } 01602 01603 static HostLineEdit *HaltCommand() 01604 { 01605 HostLineEdit *ge = new HostLineEdit("HaltCommand"); 01606 ge->setLabel(QObject::tr("Halt command")); 01607 ge->setValue(""); 01608 ge->setHelpText(QObject::tr("Optional. Script to run if you select " 01609 "the shutdown option from the exit menu, if the option " 01610 "is displayed. You must configure an exit key to " 01611 "display the exit menu.")); 01612 return ge; 01613 } 01614 01615 static HostLineEdit *LircDaemonDevice() 01616 { 01617 HostLineEdit *ge = new HostLineEdit("LircSocket"); 01618 ge->setLabel(QObject::tr("LIRC daemon socket")); 01619 01620 /* lircd socket moved from /dev/ to /var/run/lirc/ in lirc 0.8.6 */ 01621 QString lirc_socket = "/dev/lircd"; 01622 if (!QFile::exists(lirc_socket)) 01623 lirc_socket = "/var/run/lirc/lircd"; 01624 ge->setValue(lirc_socket); 01625 QString help = QObject::tr( 01626 "UNIX socket or IP address[:port] to connect in " 01627 "order to communicate with the LIRC Daemon."); 01628 ge->setHelpText(help); 01629 return ge; 01630 } 01631 01632 static HostLineEdit *ScreenShotPath() 01633 { 01634 HostLineEdit *ge = new HostLineEdit("ScreenShotPath"); 01635 ge->setLabel(QObject::tr("Screen shot path")); 01636 ge->setValue("/tmp/"); 01637 ge->setHelpText(QObject::tr("Path to screenshot storage location. Should be writable by the frontend")); 01638 return ge; 01639 } 01640 01641 static HostLineEdit *SetupPinCode() 01642 { 01643 HostLineEdit *ge = new HostLineEdit("SetupPinCode"); 01644 ge->setLabel(QObject::tr("Setup PIN code")); 01645 ge->setHelpText(QObject::tr("This PIN is used to control access to the " 01646 "setup menus. If you want to use this feature, then " 01647 "setting the value to all numbers will make your life " 01648 "much easier. Set it to blank to disable.")); 01649 return ge; 01650 } 01651 01652 static HostCheckBox *SetupPinCodeRequired() 01653 { 01654 HostCheckBox *gc = new HostCheckBox("SetupPinCodeRequired"); 01655 gc->setLabel(QObject::tr("Require setup PIN") + " "); 01656 gc->setValue(false); 01657 gc->setHelpText(QObject::tr("If enabled, you will not be able to return " 01658 "to this screen and reset the Setup PIN without first " 01659 "entering the current PIN.")); 01660 return gc; 01661 } 01662 01663 static HostComboBox *XineramaScreen() 01664 { 01665 HostComboBox *gc = new HostComboBox("XineramaScreen", false); 01666 int num = MythDisplay::GetNumberXineramaScreens(); 01667 for (int i=0; i<num; ++i) 01668 gc->addSelection(QString::number(i), QString::number(i)); 01669 gc->addSelection(QObject::tr("All"), QString::number(-1)); 01670 gc->setLabel(QObject::tr("Display on screen")); 01671 gc->setValue(0); 01672 gc->setHelpText(QObject::tr("Run on the specified screen or " 01673 "spanning all screens.")); 01674 return gc; 01675 } 01676 01677 01678 static HostComboBox *XineramaMonitorAspectRatio() 01679 { 01680 HostComboBox *gc = new HostComboBox("XineramaMonitorAspectRatio"); 01681 gc->setLabel(QObject::tr("Monitor aspect ratio")); 01682 gc->addSelection(QObject::tr("4:3"), "1.3333"); 01683 gc->addSelection(QObject::tr("16:9"), "1.7777"); 01684 gc->addSelection(QObject::tr("16:10"), "1.6"); 01685 gc->setHelpText(QObject::tr( 01686 "The aspect ratio of a Xinerama display cannot be " 01687 "queried from the display, so it must be specified.")); 01688 return gc; 01689 } 01690 01691 static HostComboBox *LetterboxingColour() 01692 { 01693 HostComboBox *gc = new HostComboBox("LetterboxColour"); 01694 gc->setLabel(QObject::tr("Letterboxing color")); 01695 for (int m = kLetterBoxColour_Black; m < kLetterBoxColour_END; ++m) 01696 gc->addSelection(toString((LetterBoxColour)m), QString::number(m)); 01697 gc->setHelpText( 01698 QObject::tr( 01699 "By default MythTV uses black letterboxing to match broadcaster " 01700 "letterboxing, but those with plasma screens may prefer gray " 01701 "to minimize burn-in.") + " " + 01702 QObject::tr("Currently only works with XVideo video renderer.")); 01703 return gc; 01704 } 01705 01706 static HostComboBox *AspectOverride() 01707 { 01708 HostComboBox *gc = new HostComboBox("AspectOverride"); 01709 gc->setLabel(QObject::tr("Video aspect override")); 01710 for (int m = kAspect_Off; m < kAspect_END; ++m) 01711 gc->addSelection(toString((AspectOverrideMode)m), QString::number(m)); 01712 gc->setHelpText(QObject::tr( 01713 "When enabled, these will override the aspect " 01714 "ratio specified by any broadcaster for all " 01715 "video streams.")); 01716 return gc; 01717 } 01718 01719 static HostComboBox *AdjustFill() 01720 { 01721 HostComboBox *gc = new HostComboBox("AdjustFill"); 01722 gc->setLabel(QObject::tr("Zoom")); 01723 for (int m = kAdjustFill_Off; m < kAdjustFill_END; ++m) 01724 gc->addSelection(toString((AdjustFillMode)m), QString::number(m)); 01725 gc->addSelection(toString(kAdjustFill_AutoDetect_DefaultOff), 01726 QString::number(kAdjustFill_AutoDetect_DefaultOff)); 01727 gc->addSelection(toString(kAdjustFill_AutoDetect_DefaultHalf), 01728 QString::number(kAdjustFill_AutoDetect_DefaultHalf)); 01729 gc->setHelpText(QObject::tr( 01730 "When enabled, these will apply a predefined " 01731 "zoom to all video playback in MythTV.")); 01732 return gc; 01733 } 01734 01735 // Theme settings 01736 01737 static HostSpinBox *GuiWidth() 01738 { 01739 HostSpinBox *gs = new HostSpinBox("GuiWidth", 0, 1920, 8, true); 01740 gs->setLabel(QObject::tr("GUI width (pixels)")); 01741 gs->setValue(0); 01742 gs->setHelpText(QObject::tr("The width of the GUI. Do not make the GUI " 01743 "wider than your actual screen resolution. Set to 0 to " 01744 "automatically scale to fullscreen.")); 01745 return gs; 01746 } 01747 01748 static HostSpinBox *GuiHeight() 01749 { 01750 HostSpinBox *gs = new HostSpinBox("GuiHeight", 0, 1600, 8, true); 01751 gs->setLabel(QObject::tr("GUI height (pixels)")); 01752 gs->setValue(0); 01753 gs->setHelpText(QObject::tr("The height of the GUI. Do not make the GUI " 01754 "taller than your actual screen resolution. Set to 0 to " 01755 "automatically scale to fullscreen.")); 01756 return gs; 01757 } 01758 01759 static HostSpinBox *GuiOffsetX() 01760 { 01761 HostSpinBox *gs = new HostSpinBox("GuiOffsetX", -3840, 3840, 32, true); 01762 gs->setLabel(QObject::tr("GUI X offset")); 01763 gs->setValue(0); 01764 gs->setHelpText(QObject::tr("The horizontal offset where the GUI will be " 01765 "displayed. May only work if run in a window.")); 01766 return gs; 01767 } 01768 01769 static HostSpinBox *GuiOffsetY() 01770 { 01771 HostSpinBox *gs = new HostSpinBox("GuiOffsetY", -1600, 1600, 8, true); 01772 gs->setLabel(QObject::tr("GUI Y offset")); 01773 gs->setValue(0); 01774 gs->setHelpText(QObject::tr("The vertical offset where the GUI will be " 01775 "displayed.")); 01776 return gs; 01777 } 01778 01779 #if 0 01780 static HostSpinBox *DisplaySizeWidth() 01781 { 01782 HostSpinBox *gs = new HostSpinBox("DisplaySizeWidth", 0, 10000, 1); 01783 gs->setLabel(QObject::tr("Display size - width")); 01784 gs->setValue(0); 01785 gs->setHelpText(QObject::tr("Horizontal size of the monitor or TV. Used " 01786 "to calculate the actual aspect ratio of the display. This " 01787 "will override the DisplaySize from the system.")); 01788 return gs; 01789 } 01790 01791 static HostSpinBox *DisplaySizeHeight() 01792 { 01793 HostSpinBox *gs = new HostSpinBox("DisplaySizeHeight", 0, 10000, 1); 01794 gs->setLabel(QObject::tr("Display size - height")); 01795 gs->setValue(0); 01796 gs->setHelpText(QObject::tr("Vertical size of the monitor or TV. Used " 01797 "to calculate the actual aspect ratio of the display. This " 01798 "will override the DisplaySize from the system.")); 01799 return gs; 01800 } 01801 #endif 01802 01803 static HostCheckBox *GuiSizeForTV() 01804 { 01805 HostCheckBox *gc = new HostCheckBox("GuiSizeForTV"); 01806 gc->setLabel(QObject::tr("Use GUI size for TV playback")); 01807 gc->setValue(true); 01808 gc->setHelpText(QObject::tr("If enabled, use the above size for TV, " 01809 "otherwise use full screen.")); 01810 return gc; 01811 } 01812 01813 #if defined(USING_XRANDR) || CONFIG_DARWIN 01814 static HostCheckBox *UseVideoModes() 01815 { 01816 HostCheckBox *gc = new HostCheckBox("UseVideoModes"); 01817 gc->setLabel(QObject::tr("Separate video modes for GUI and TV playback")); 01818 gc->setValue(false); 01819 gc->setHelpText(QObject::tr("Switch X Window video modes for TV. " 01820 "Requires \"xrandr\" support.")); 01821 return gc; 01822 } 01823 01824 static HostSpinBox *VidModeWidth(int idx) 01825 { 01826 HostSpinBox *gs = new HostSpinBox(QString("VidModeWidth%1").arg(idx), 01827 0, 1920, 16, true); 01828 gs->setLabel((idx<1) ? QObject::tr("In X"): ""); 01829 gs->setLabelAboveWidget(idx<1); 01830 gs->setValue(0); 01831 gs->setHelpText(QObject::tr("Horizontal resolution of video " 01832 "which needs a special output resolution.")); 01833 return gs; 01834 } 01835 01836 static HostSpinBox *VidModeHeight(int idx) 01837 { 01838 HostSpinBox *gs = new HostSpinBox(QString("VidModeHeight%1").arg(idx), 01839 0, 1080, 16, true); 01840 gs->setLabel((idx<1) ? QObject::tr("In Y"): ""); 01841 gs->setLabelAboveWidget(idx<1); 01842 gs->setValue(0); 01843 gs->setHelpText(QObject::tr("Vertical resolution of video " 01844 "which needs a special output resolution.")); 01845 return gs; 01846 } 01847 01848 static HostComboBox *GuiVidModeResolution() 01849 { 01850 HostComboBox *gc = new HostComboBox("GuiVidModeResolution"); 01851 gc->setLabel(QObject::tr("GUI")); 01852 gc->setLabelAboveWidget(true); 01853 gc->setHelpText(QObject::tr("Resolution of screen " 01854 "when not watching a video.")); 01855 01856 const vector<DisplayResScreen> scr = GetVideoModes(); 01857 for (uint i=0; i<scr.size(); ++i) 01858 { 01859 int w = scr[i].Width(), h = scr[i].Height(); 01860 QString sel = QString("%1x%2").arg(w).arg(h); 01861 gc->addSelection(sel, sel); 01862 } 01863 01864 // if no resolution setting, set it with a reasonable initial value 01865 if (scr.size() && (gCoreContext->GetSetting("GuiVidModeResolution").isEmpty())) 01866 { 01867 int w = 0, h = 0; 01868 gCoreContext->GetResolutionSetting("GuiVidMode", w, h); 01869 if ((w <= 0) || (h <= 0)) 01870 (w = 640), (h = 480); 01871 01872 DisplayResScreen dscr(w, h, -1, -1, -1.0, 0); 01873 double rate = -1.0; 01874 int i = DisplayResScreen::FindBestMatch(scr, dscr, rate); 01875 gc->setValue((i >= 0) ? i : scr.size()-1); 01876 } 01877 01878 return gc; 01879 } 01880 01881 static HostComboBox *TVVidModeResolution(int idx=-1) 01882 { 01883 QString dhelp = QObject::tr("Default screen resolution " 01884 "when watching a video."); 01885 QString ohelp = QObject::tr("Screen resolution when watching a " 01886 "video at a specific resolution."); 01887 01888 QString qstr = (idx<0) ? "TVVidModeResolution" : 01889 QString("TVVidModeResolution%1").arg(idx); 01890 HostComboBox *gc = new HostComboBox(qstr); 01891 QString lstr = (idx<0) ? QObject::tr("Video output") : 01892 ((idx<1) ? QObject::tr("Output") : ""); 01893 QString hstr = (idx<0) ? dhelp : ohelp; 01894 01895 gc->setLabel(lstr); 01896 gc->setLabelAboveWidget(idx<1); 01897 gc->setHelpText(hstr); 01898 01899 const vector<DisplayResScreen> scr = GetVideoModes(); 01900 for (uint i=0; i<scr.size(); ++i) 01901 { 01902 QString sel = QString("%1x%2").arg(scr[i].Width()).arg(scr[i].Height()); 01903 gc->addSelection(sel, sel); 01904 } 01905 return gc; 01906 } 01907 01908 static HostRefreshRateComboBox *TVVidModeRefreshRate(int idx=-1) 01909 { 01910 QString dhelp = QObject::tr("Default refresh rate " 01911 "when watching a video. " 01912 "Leave at \"Auto\" to automatically use the best available"); 01913 QString ohelp = QObject::tr("Refresh rate when watching a " 01914 "video at a specific resolution. " 01915 "Leave at \"Auto\" to automatically use the best available"); 01916 QString qstr = (idx<0) ? "TVVidModeRefreshRate" : 01917 QString("TVVidModeRefreshRate%1").arg(idx); 01918 HostRefreshRateComboBox *gc = new HostRefreshRateComboBox(qstr); 01919 QString lstr = (idx<1) ? QObject::tr("Rate") : ""; 01920 QString hstr = (idx<0) ? dhelp : ohelp; 01921 01922 gc->setLabel(lstr); 01923 gc->setLabelAboveWidget(idx<1); 01924 gc->setHelpText(hstr); 01925 gc->setEnabled(false); 01926 return gc; 01927 } 01928 01929 static HostComboBox *TVVidModeForceAspect(int idx=-1) 01930 { 01931 QString dhelp = QObject::tr("Aspect ratio when watching a video."); 01932 QString ohelp = QObject::tr("Aspect ratio when watching a " 01933 "video at a specific resolution."); 01934 01935 QString qstr = (idx<0) ? "TVVidModeForceAspect" : 01936 QString("TVVidModeForceAspect%1").arg(idx); 01937 HostComboBox *gc = new HostComboBox(qstr); 01938 gc->setLabel( (idx<1) ? QObject::tr("Aspect") : "" ); 01939 gc->setLabelAboveWidget(idx<1); 01940 01941 QString hstr = (idx<0) ? dhelp : ohelp; 01942 gc->setHelpText(hstr+" "+ 01943 QObject::tr("Leave at \"Default\" to use ratio reported by " 01944 "the monitor. Set to 16:9 or 4:3 to " 01945 "force a specific aspect ratio.")); 01946 gc->addSelection(QObject::tr("Default"), "0.0"); 01947 gc->addSelection("16:9", "1.77777777777"); 01948 gc->addSelection("4:3", "1.33333333333"); 01949 return gc; 01950 } 01951 01952 class VideoModeSettings : public TriggeredConfigurationGroup 01953 { 01954 public: 01955 VideoModeSettings() : 01956 TriggeredConfigurationGroup(false, true, false, false) 01957 { 01958 setLabel(QObject::tr("Video Mode Settings")); 01959 setUseLabel(false); 01960 01961 Setting *videomode = UseVideoModes(); 01962 addChild(videomode); 01963 setTrigger(videomode); 01964 01965 ConfigurationGroup* defaultsettings = 01966 new HorizontalConfigurationGroup(false, false); 01967 01968 HostComboBox *res = TVVidModeResolution(); 01969 HostRefreshRateComboBox *rate = TVVidModeRefreshRate(); 01970 defaultsettings->addChild(GuiVidModeResolution()); 01971 defaultsettings->addChild(res); 01972 defaultsettings->addChild(rate); 01973 defaultsettings->addChild(TVVidModeForceAspect()); 01974 connect(res, SIGNAL(valueChanged(const QString&)), 01975 rate, SLOT(ChangeResolution(const QString&))); 01976 01977 ConfigurationGroup* overrides = 01978 new GridConfigurationGroup(5, true, true, false, true); 01979 overrides->setLabel(QObject::tr("Overrides for specific video sizes")); 01980 01981 for (int idx = 0; idx < 3; ++idx) 01982 { 01983 //input side 01984 overrides->addChild(VidModeWidth(idx)); 01985 overrides->addChild(VidModeHeight(idx)); 01986 // output side 01987 overrides->addChild(res = TVVidModeResolution(idx)); 01988 overrides->addChild(rate = TVVidModeRefreshRate(idx)); 01989 overrides->addChild(TVVidModeForceAspect(idx)); 01990 connect(res, SIGNAL(valueChanged(const QString&)), 01991 rate, SLOT(ChangeResolution(const QString&))); 01992 } 01993 01994 ConfigurationGroup* settings = new VerticalConfigurationGroup(false); 01995 settings->addChild(defaultsettings); 01996 settings->addChild(overrides); 01997 01998 addTarget("1", settings); 01999 addTarget("0", new VerticalConfigurationGroup(true)); 02000 } 02001 }; 02002 #endif 02003 02004 static HostCheckBox *HideMouseCursor() 02005 { 02006 HostCheckBox *gc = new HostCheckBox("HideMouseCursor"); 02007 gc->setLabel(QObject::tr("Hide mouse cursor in MythTV")); 02008 gc->setValue(false); 02009 gc->setHelpText(QObject::tr("Toggles mouse cursor visibility for touchscreens. " 02010 "By default MythTV will auto-hide the cursor if the mouse doesn't " 02011 "move for a period, this setting disables the cursor entirely.")); 02012 return gc; 02013 }; 02014 02015 02016 static HostCheckBox *RunInWindow() 02017 { 02018 HostCheckBox *gc = new HostCheckBox("RunFrontendInWindow"); 02019 gc->setLabel(QObject::tr("Use window border")); 02020 gc->setValue(false); 02021 gc->setHelpText(QObject::tr("Toggles between windowed and " 02022 "borderless operation.")); 02023 return gc; 02024 } 02025 02026 static HostCheckBox *UseFixedWindowSize() 02027 { 02028 { 02029 HostCheckBox *gc = new HostCheckBox("UseFixedWindowSize"); 02030 gc->setLabel(QObject::tr("Use fixed window size")); 02031 gc->setValue(true); 02032 gc->setHelpText(QObject::tr( 02033 "If disabled, the video playback " 02034 "window can be resized")); 02035 return gc; 02036 } 02037 } 02038 02039 static HostComboBox *MythDateFormatCB() 02040 { 02041 HostComboBox *gc = new HostComboBox("DateFormat"); 02042 gc->setLabel(QObject::tr("Date format")); 02043 02044 QDate sampdate = QDate::currentDate(); 02045 QString sampleStr = 02046 QObject::tr("Samples are shown using today's date."); 02047 02048 if (sampdate.month() == sampdate.day()) 02049 { 02050 sampdate = sampdate.addDays(1); 02051 sampleStr = 02052 QObject::tr("Samples are shown using tomorrow's date."); 02053 } 02054 02055 QLocale locale = gCoreContext->GetQLocale(); 02056 02057 gc->addSelection(locale.toString(sampdate, "ddd MMM d"), "ddd MMM d"); 02058 gc->addSelection(locale.toString(sampdate, "ddd d MMM"), "ddd d MMM"); 02059 gc->addSelection(locale.toString(sampdate, "ddd MMMM d"), "ddd MMMM d"); 02060 gc->addSelection(locale.toString(sampdate, "ddd d MMMM"), "ddd d MMMM"); 02061 gc->addSelection(locale.toString(sampdate, "dddd MMM d"), "dddd MMM d"); 02062 gc->addSelection(locale.toString(sampdate, "dddd d MMM"), "dddd d MMM"); 02063 gc->addSelection(locale.toString(sampdate, "MMM d"), "MMM d"); 02064 gc->addSelection(locale.toString(sampdate, "d MMM"), "d MMM"); 02065 gc->addSelection(locale.toString(sampdate, "MM/dd"), "MM/dd"); 02066 gc->addSelection(locale.toString(sampdate, "dd/MM"), "dd/MM"); 02067 gc->addSelection(locale.toString(sampdate, "MM.dd"), "MM.dd"); 02068 gc->addSelection(locale.toString(sampdate, "dd.MM"), "dd.MM"); 02069 gc->addSelection(locale.toString(sampdate, "M/d/yyyy"), "M/d/yyyy"); 02070 gc->addSelection(locale.toString(sampdate, "d/M/yyyy"), "d/M/yyyy"); 02071 gc->addSelection(locale.toString(sampdate, "MM.dd.yyyy"), "MM.dd.yyyy"); 02072 gc->addSelection(locale.toString(sampdate, "dd.MM.yyyy"), "dd.MM.yyyy"); 02073 gc->addSelection(locale.toString(sampdate, "yyyy-MM-dd"), "yyyy-MM-dd"); 02074 gc->addSelection(locale.toString(sampdate, "ddd MMM d yyyy"), "ddd MMM d yyyy"); 02075 gc->addSelection(locale.toString(sampdate, "ddd d MMM yyyy"), "ddd d MMM yyyy"); 02076 gc->addSelection(locale.toString(sampdate, "ddd yyyy-MM-dd"), "ddd yyyy-MM-dd"); 02077 gc->addSelection(locale.toString(sampdate, 02078 QString::fromUtf8("dddd yyyy\u5E74M\u6708d\u65E5")), 02079 QString::fromUtf8("dddd yyyy\u5E74M\u6708d\u65E5")); 02080 gc->addSelection(locale.toString(sampdate, 02081 QString::fromUtf8("ddd M\u6708d\u65E5")), 02082 QString::fromUtf8("ddd M\u6708d\u65E5")); 02083 gc->setHelpText(QObject::tr("Your preferred date format.") + ' ' + 02084 sampleStr); 02085 return gc; 02086 } 02087 02088 static HostComboBox *MythShortDateFormat() 02089 { 02090 HostComboBox *gc = new HostComboBox("ShortDateFormat"); 02091 gc->setLabel(QObject::tr("Short date format")); 02092 02093 QDate sampdate = QDate::currentDate(); 02094 QString sampleStr = 02095 QObject::tr("Samples are shown using today's date."); 02096 02097 if (sampdate.month() == sampdate.day()) 02098 { 02099 sampdate = sampdate.addDays(1); 02100 sampleStr = 02101 QObject::tr("Samples are shown using tomorrow's date."); 02102 } 02103 QLocale locale = gCoreContext->GetQLocale(); 02104 02105 gc->addSelection(locale.toString(sampdate, "M/d"), "M/d"); 02106 gc->addSelection(locale.toString(sampdate, "d/M"), "d/M"); 02107 gc->addSelection(locale.toString(sampdate, "MM/dd"), "MM/dd"); 02108 gc->addSelection(locale.toString(sampdate, "dd/MM"), "dd/MM"); 02109 gc->addSelection(locale.toString(sampdate, "MM.dd"), "MM.dd"); 02110 gc->addSelection(locale.toString(sampdate, "dd.MM."), "dd.MM."); 02111 gc->addSelection(locale.toString(sampdate, "M.d."), "M.d."); 02112 gc->addSelection(locale.toString(sampdate, "d.M."), "d.M."); 02113 gc->addSelection(locale.toString(sampdate, "MM-dd"), "MM-dd"); 02114 gc->addSelection(locale.toString(sampdate, "dd-MM"), "dd-MM"); 02115 gc->addSelection(locale.toString(sampdate, "MMM d"), "MMM d"); 02116 gc->addSelection(locale.toString(sampdate, "d MMM"), "d MMM"); 02117 gc->addSelection(locale.toString(sampdate, "ddd d"), "ddd d"); 02118 gc->addSelection(locale.toString(sampdate, "d ddd"), "d ddd"); 02119 gc->addSelection(locale.toString(sampdate, "ddd M/d"), "ddd M/d"); 02120 gc->addSelection(locale.toString(sampdate, "ddd d/M"), "ddd d/M"); 02121 gc->addSelection(locale.toString(sampdate, "M/d ddd"), "M/d ddd"); 02122 gc->addSelection(locale.toString(sampdate, "d/M ddd"), "d/M ddd"); 02123 gc->addSelection(locale.toString(sampdate, 02124 QString::fromUtf8("M\u6708d\u65E5")), 02125 QString::fromUtf8("M\u6708d\u65E5")); 02126 gc->setHelpText(QObject::tr("Your preferred short date format.") + ' ' + 02127 sampleStr); 02128 return gc; 02129 } 02130 02131 static HostComboBox *MythTimeFormat() 02132 { 02133 HostComboBox *gc = new HostComboBox("TimeFormat"); 02134 gc->setLabel(QObject::tr("Time format")); 02135 02136 QTime samptime = QTime::currentTime(); 02137 02138 QLocale locale = gCoreContext->GetQLocale(); 02139 02140 gc->addSelection(locale.toString(samptime, "h:mm AP"), "h:mm AP"); 02141 gc->addSelection(locale.toString(samptime, "h:mm ap"), "h:mm ap"); 02142 gc->addSelection(locale.toString(samptime, "hh:mm AP"), "hh:mm AP"); 02143 gc->addSelection(locale.toString(samptime, "hh:mm ap"), "hh:mm ap"); 02144 gc->addSelection(locale.toString(samptime, "h:mm"), "h:mm"); 02145 gc->addSelection(locale.toString(samptime, "hh:mm"), "hh:mm"); 02146 gc->addSelection(locale.toString(samptime, "hh.mm"), "hh.mm"); 02147 gc->addSelection(locale.toString(samptime, "AP h:mm"), "AP h:mm"); 02148 gc->setHelpText(QObject::tr("Your preferred time format. You must choose " 02149 "a format with \"AM\" or \"PM\" in it, otherwise your " 02150 "time display will be 24-hour or \"military\" time.")); 02151 return gc; 02152 } 02153 02154 static HostComboBox *ThemePainter() 02155 { 02156 HostComboBox *gc = new HostComboBox("ThemePainter"); 02157 gc->setLabel(QObject::tr("Paint engine")); 02158 gc->addSelection(QObject::tr("Qt"), "qt"); 02159 gc->addSelection(QObject::tr("Auto"), "auto"); 02160 #ifdef USING_OPENGL 02161 gc->addSelection(QObject::tr("OpenGL"), "opengl"); 02162 #endif 02163 #ifdef USING_MINGW 02164 gc->addSelection(QObject::tr("Direct3D"), "d3d9"); 02165 #endif 02166 gc->setHelpText(QObject::tr("This selects what MythTV uses to draw. " 02167 "Choosing 'Auto' is recommended, unless running on systems " 02168 "with broken OpenGL implementations (broken hardware or " 02169 "drivers or windowing systems) where only Qt works.")); 02170 return gc; 02171 } 02172 02173 static HostComboBox *ChannelFormat() 02174 { 02175 HostComboBox *gc = new HostComboBox("ChannelFormat"); 02176 gc->setLabel(QObject::tr("Channel format")); 02177 gc->addSelection(QObject::tr("number"), "<num>"); 02178 gc->addSelection(QObject::tr("number callsign"), "<num> <sign>"); 02179 gc->addSelection(QObject::tr("number name"), "<num> <name>"); 02180 gc->addSelection(QObject::tr("callsign"), "<sign>"); 02181 gc->addSelection(QObject::tr("name"), "<name>"); 02182 gc->setHelpText(QObject::tr("Your preferred channel format.")); 02183 gc->setValue(1); 02184 return gc; 02185 } 02186 02187 static HostComboBox *LongChannelFormat() 02188 { 02189 HostComboBox *gc = new HostComboBox("LongChannelFormat"); 02190 gc->setLabel(QObject::tr("Long channel format")); 02191 gc->addSelection(QObject::tr("number"), "<num>"); 02192 gc->addSelection(QObject::tr("number callsign"), "<num> <sign>"); 02193 gc->addSelection(QObject::tr("number name"), "<num> <name>"); 02194 gc->addSelection(QObject::tr("callsign"), "<sign>"); 02195 gc->addSelection(QObject::tr("name"), "<name>"); 02196 gc->setHelpText(QObject::tr("Your preferred long channel format.")); 02197 gc->setValue(2); 02198 return gc; 02199 } 02200 02201 static GlobalCheckBox *LiveTVPriority() 02202 { 02203 GlobalCheckBox *bc = new GlobalCheckBox("LiveTVPriority"); 02204 bc->setLabel(QObject::tr("Allow Live TV to move scheduled shows")); 02205 bc->setValue(false); 02206 bc->setHelpText(QObject::tr("If enabled, scheduled recordings will " 02207 "be moved to other cards (where possible), so that " 02208 "Live TV will not be interrupted.")); 02209 return bc; 02210 } 02211 02212 static HostCheckBox *ChannelGroupRememberLast() 02213 { 02214 HostCheckBox *gc = new HostCheckBox("ChannelGroupRememberLast"); 02215 gc->setLabel(QObject::tr("Remember last channel group")); 02216 gc->setHelpText(QObject::tr("If enabled, the EPG will initially display " 02217 "only the channels from the last channel group selected. Pressing " 02218 "\"4\" will toggle channel group.")); 02219 gc->setValue(false); 02220 return gc; 02221 } 02222 02223 static HostComboBox *ChannelGroupDefault() 02224 { 02225 HostComboBox *gc = new HostComboBox("ChannelGroupDefault"); 02226 gc->setLabel(QObject::tr("Default channel group")); 02227 02228 ChannelGroupList changrplist; 02229 02230 changrplist = ChannelGroup::GetChannelGroups(); 02231 02232 gc->addSelection(QObject::tr("All Channels"), "-1"); 02233 02234 ChannelGroupList::iterator it; 02235 02236 for (it = changrplist.begin(); it < changrplist.end(); ++it) 02237 gc->addSelection(it->name, QString("%1").arg(it->grpid)); 02238 02239 gc->setHelpText(QObject::tr("Default channel group to be shown in the the EPG" 02240 "Pressing GUIDE key will toggle channel group.")); 02241 gc->setValue(false); 02242 return gc; 02243 } 02244 02245 static HostCheckBox *BrowseChannelGroup() 02246 { 02247 HostCheckBox *gc = new HostCheckBox("BrowseChannelGroup"); 02248 gc->setLabel(QObject::tr("Browse/change channels from Channel Group")); 02249 gc->setHelpText(QObject::tr("If enabled, Live TV will browse or change " 02250 "channels from the selected channel group. The \"All " 02251 "Channels\" channel group may be selected to browse all " 02252 "channels.")); 02253 gc->setValue(false); 02254 return gc; 02255 } 02256 02257 // Channel Group Settings 02258 class ChannelGroupSettings : public TriggeredConfigurationGroup 02259 { 02260 public: 02261 ChannelGroupSettings() : TriggeredConfigurationGroup(false, true, false, false) 02262 { 02263 setLabel(QObject::tr("Remember last channel group")); 02264 setUseLabel(false); 02265 02266 Setting* RememberChanGrpEnabled = ChannelGroupRememberLast(); 02267 addChild(RememberChanGrpEnabled); 02268 setTrigger(RememberChanGrpEnabled); 02269 02270 ConfigurationGroup* settings = new VerticalConfigurationGroup(false,false); 02271 settings->addChild(ChannelGroupDefault()); 02272 addTarget("0", settings); 02273 02274 // show nothing if RememberChanGrpEnabled is on 02275 addTarget("1", new VerticalConfigurationGroup(true,false)); 02276 }; 02277 }; 02278 02279 // General RecPriorities settings 02280 02281 static GlobalCheckBox *GRSchedMoveHigher() 02282 { 02283 GlobalCheckBox *bc = new GlobalCheckBox("SchedMoveHigher"); 02284 bc->setLabel(QObject::tr("Reschedule higher priorities")); 02285 bc->setHelpText(QObject::tr("Move higher priority programs to other " 02286 "cards and showings when resolving conflicts. This " 02287 "can be used to record lower priority programs that " 02288 "would otherwise not be recorded, but risks missing " 02289 "a higher priority program if the schedule changes.")); 02290 bc->setValue(true); 02291 return bc; 02292 } 02293 02294 static GlobalComboBox *GRSchedOpenEnd() 02295 { 02296 GlobalComboBox *bc = new GlobalComboBox("SchedOpenEnd"); 02297 bc->setLabel(QObject::tr("Avoid back to back recordings")); 02298 bc->setHelpText(QObject::tr("Selects the situations where the scheduler " 02299 "will avoid assigning shows to the same card if their " 02300 "end time and start time match. This will be allowed " 02301 "when necessary in order to resolve conflicts.")); 02302 bc->addSelection(QObject::tr("Never"), "0"); 02303 bc->addSelection(QObject::tr("Different Channels"), "1"); 02304 bc->addSelection(QObject::tr("Always"), "2"); 02305 bc->setValue(0); 02306 return bc; 02307 } 02308 02309 static GlobalSpinBox *GRPrefInputRecPriority() 02310 { 02311 GlobalSpinBox *bs = new GlobalSpinBox("PrefInputPriority", 1, 99, 1); 02312 bs->setLabel(QObject::tr("Preferred input priority")); 02313 bs->setHelpText(QObject::tr("Additional priority when a showing " 02314 "matches the preferred input selected in the 'Scheduling " 02315 "Options' section of the recording rule.")); 02316 bs->setValue(2); 02317 return bs; 02318 } 02319 02320 static GlobalSpinBox *GRHDTVRecPriority() 02321 { 02322 GlobalSpinBox *bs = new GlobalSpinBox("HDTVRecPriority", -99, 99, 1); 02323 bs->setLabel(QObject::tr("HDTV recording priority")); 02324 bs->setHelpText(QObject::tr("Additional priority when a showing " 02325 "is marked as an HDTV broadcast in the TV listings.")); 02326 bs->setValue(0); 02327 return bs; 02328 } 02329 02330 static GlobalSpinBox *GRWSRecPriority() 02331 { 02332 GlobalSpinBox *bs = new GlobalSpinBox("WSRecPriority", -99, 99, 1); 02333 bs->setLabel(QObject::tr("Widescreen recording priority")); 02334 bs->setHelpText(QObject::tr("Additional priority when a showing " 02335 "is marked as widescreen in the TV listings.")); 02336 bs->setValue(0); 02337 return bs; 02338 } 02339 02340 static GlobalSpinBox *GRAutoRecPriority() 02341 { 02342 GlobalSpinBox *bs = new GlobalSpinBox("AutoRecPriority", -99, 99, 1); 02343 bs->setLabel(QObject::tr("Automatic priority range (+/-)")); 02344 bs->setHelpText(QObject::tr("Up to this number of priority points may " 02345 "be added for titles that are usually watched soon after " 02346 "recording or subtracted for titles that are often " 02347 "watched several days or weeks later.")); 02348 bs->setValue(0); 02349 return bs; 02350 } 02351 02352 static GlobalSpinBox *GRSignLangRecPriority() 02353 { 02354 GlobalSpinBox *bs = new GlobalSpinBox("SignLangRecPriority", 02355 -99, 99, 1); 02356 bs->setLabel(QObject::tr("Sign language recording priority")); 02357 bs->setHelpText(QObject::tr("Additional priority when a showing " 02358 "is marked as having in-vision sign language.")); 02359 bs->setValue(0); 02360 return bs; 02361 } 02362 02363 static GlobalSpinBox *GROnScrSubRecPriority() 02364 { 02365 GlobalSpinBox *bs = new GlobalSpinBox("OnScrSubRecPriority", 02366 -99, 99, 1); 02367 bs->setLabel(QObject::tr("In-vision Subtitles Recording Priority")); 02368 bs->setHelpText(QObject::tr("Additional priority when a showing " 02369 "is marked as having in-vision subtitles.")); 02370 bs->setValue(0); 02371 return bs; 02372 } 02373 02374 static GlobalSpinBox *GRCCRecPriority() 02375 { 02376 GlobalSpinBox *bs = new GlobalSpinBox("CCRecPriority", 02377 -99, 99, 1); 02378 bs->setLabel(QObject::tr("Subtitles/CC recording priority")); 02379 bs->setHelpText(QObject::tr("Additional priority when a showing " 02380 "is marked as having subtitles or closed captioning " 02381 "(CC) available.")); 02382 bs->setValue(0); 02383 return bs; 02384 } 02385 02386 static GlobalSpinBox *GRHardHearRecPriority() 02387 { 02388 GlobalSpinBox *bs = new GlobalSpinBox("HardHearRecPriority", 02389 -99, 99, 1); 02390 bs->setLabel(QObject::tr("Hard of hearing priority")); 02391 bs->setHelpText(QObject::tr("Additional priority when a showing " 02392 "is marked as having support for viewers with impaired " 02393 "hearing.")); 02394 bs->setValue(0); 02395 return bs; 02396 } 02397 02398 static GlobalSpinBox *GRAudioDescRecPriority() 02399 { 02400 GlobalSpinBox *bs = new GlobalSpinBox("AudioDescRecPriority", 02401 -99, 99, 1); 02402 bs->setLabel(QObject::tr("Audio described priority")); 02403 bs->setHelpText(QObject::tr("Additional priority when a showing " 02404 "is marked as being Audio Described.")); 02405 bs->setValue(0); 02406 return bs; 02407 } 02408 02409 static GlobalSpinBox *GRSingleRecordRecPriority() 02410 { 02411 GlobalSpinBox *bs = new GlobalSpinBox("SingleRecordRecPriority", 02412 -99, 99, 1); 02413 bs->setLabel(QObject::tr("Single recordings priority")); 02414 bs->setHelpText(QObject::tr("Single recordings will receive this " 02415 "additional recording priority value.")); 02416 bs->setValue(1); 02417 return bs; 02418 } 02419 02420 static GlobalSpinBox *GRWeekslotRecordRecPriority() 02421 { 02422 GlobalSpinBox *bs = new GlobalSpinBox("WeekslotRecordRecPriority", 02423 -99, 99, 1); 02424 bs->setLabel(QObject::tr("Weekslot recordings priority")); 02425 bs->setHelpText(QObject::tr("Weekslot recordings will receive this " 02426 "additional recording priority value.")); 02427 bs->setValue(0); 02428 return bs; 02429 } 02430 02431 static GlobalSpinBox *GRTimeslotRecordRecPriority() 02432 { 02433 GlobalSpinBox *bs = new GlobalSpinBox("TimeslotRecordRecPriority", 02434 -99, 99, 1); 02435 bs->setLabel(QObject::tr("Timeslot recordings priority")); 02436 bs->setHelpText(QObject::tr("Timeslot recordings will receive this " 02437 "additional recording priority value.")); 02438 bs->setValue(0); 02439 return bs; 02440 } 02441 02442 static GlobalSpinBox *GRChannelRecordRecPriority() 02443 { 02444 GlobalSpinBox *bs = new GlobalSpinBox("ChannelRecordRecPriority", 02445 -99, 99, 1); 02446 bs->setLabel(QObject::tr("Channel recordings priority")); 02447 bs->setHelpText(QObject::tr("Channel recordings will receive this " 02448 "additional recording priority value.")); 02449 bs->setValue(0); 02450 return bs; 02451 } 02452 02453 static GlobalSpinBox *GRAllRecordRecPriority() 02454 { 02455 GlobalSpinBox *bs = new GlobalSpinBox("AllRecordRecPriority", 02456 -99, 99, 1); 02457 bs->setLabel(QObject::tr("All recordings priority")); 02458 bs->setHelpText(QObject::tr("The 'All' recording type will receive this " 02459 "additional recording priority value.")); 02460 bs->setValue(0); 02461 return bs; 02462 } 02463 02464 static GlobalSpinBox *GRFindOneRecordRecPriority() 02465 { 02466 GlobalSpinBox *bs = new GlobalSpinBox("FindOneRecordRecPriority", 02467 -99, 99, 1); 02468 bs->setLabel(QObject::tr("Find one recordings priority")); 02469 bs->setHelpText(QObject::tr("Find One, Find Weekly and Find Daily " 02470 "recording types will receive this " 02471 "additional recording priority value.")); 02472 bs->setValue(-1); 02473 return bs; 02474 } 02475 02476 static GlobalSpinBox *GROverrideRecordRecPriority() 02477 { 02478 GlobalSpinBox *bs = new GlobalSpinBox("OverrideRecordRecPriority", 02479 -99, 99, 1); 02480 bs->setLabel(QObject::tr("Override recordings priority")); 02481 bs->setHelpText(QObject::tr("Override recordings will receive this " 02482 "additional recording priority value.")); 02483 bs->setValue(0); 02484 return bs; 02485 } 02486 02487 static HostLineEdit *DefaultTVChannel() 02488 { 02489 HostLineEdit *ge = new HostLineEdit("DefaultTVChannel"); 02490 ge->setLabel(QObject::tr("Guide starts at channel")); 02491 ge->setValue("3"); 02492 ge->setHelpText(QObject::tr("The program guide starts on this channel if " 02493 "it is run from outside of Live TV mode.")); 02494 return ge; 02495 } 02496 02497 static HostSpinBox *EPGRecThreshold() 02498 { 02499 HostSpinBox *gs = new HostSpinBox("SelChangeRecThreshold", 1, 600, 1); 02500 gs->setLabel(QObject::tr("Record threshold")); 02501 gs->setValue(16); 02502 gs->setHelpText(QObject::tr("Pressing SELECT on a show that is at least " 02503 "this many minutes into the future will schedule a " 02504 "recording.")); 02505 return gs; 02506 } 02507 02508 static HostComboBox *MythLanguage() 02509 { 02510 HostComboBox *gc = new HostComboBox("Language"); 02511 gc->setLabel(QObject::tr("Language")); 02512 02513 QMap<QString, QString> langMap = MythTranslation::getLanguages(); 02514 QStringList langs = langMap.values(); 02515 langs.sort(); 02516 QString langCode = gCoreContext->GetSetting("Language").toLower(); 02517 if (langCode.isEmpty()) 02518 langCode = "en_US"; 02519 gc->clearSelections(); 02520 for (QStringList::Iterator it = langs.begin(); it != langs.end(); ++it) 02521 { 02522 QString label = *it; 02523 QString value = langMap.key(label); 02524 gc->addSelection(label, value, (value.toLower() == langCode)); 02525 } 02526 02527 gc->setHelpText( 02528 QObject::tr("Your preferred language for the user interface.")); 02529 return gc; 02530 } 02531 02532 static void ISO639_fill_selections(SelectSetting *widget, uint i) 02533 { 02534 widget->clearSelections(); 02535 QString q = QString("ISO639Language%1").arg(i); 02536 QString lang = gCoreContext->GetSetting(q, "").toLower(); 02537 02538 if ((lang.isEmpty() || lang == "aar") && 02539 !gCoreContext->GetSetting("Language", "").isEmpty()) 02540 { 02541 lang = iso639_str2_to_str3(gCoreContext->GetLanguage().toLower()); 02542 } 02543 02544 QMap<int,QString>::iterator it = _iso639_key_to_english_name.begin(); 02545 QMap<int,QString>::iterator ite = _iso639_key_to_english_name.end(); 02546 02547 for (; it != ite; ++it) 02548 { 02549 QString desc = (*it); 02550 int idx = desc.indexOf(";"); 02551 if (idx > 0) 02552 desc = desc.left(idx); 02553 02554 const QString il = iso639_key_to_str3(it.key()); 02555 widget->addSelection(desc, il, il == lang); 02556 } 02557 } 02558 02559 static GlobalComboBox *ISO639PreferredLanguage(uint i) 02560 { 02561 GlobalComboBox *gc = new GlobalComboBox(QString("ISO639Language%1").arg(i)); 02562 gc->setLabel(QObject::tr("Guide language #%1").arg(i+1)); 02563 // We should try to get language from "MythLanguage" 02564 // then use code 2 to code 3 map in iso639.h 02565 ISO639_fill_selections(gc, i); 02566 gc->setHelpText( 02567 QObject::tr("Your #%1 preferred language for " 02568 "Program Guide data and captions.").arg(i+1)); 02569 return gc; 02570 } 02571 02572 static HostCheckBox *NetworkControlEnabled() 02573 { 02574 HostCheckBox *gc = new HostCheckBox("NetworkControlEnabled"); 02575 gc->setLabel(QObject::tr("Enable Network Remote Control interface")); 02576 gc->setHelpText(QObject::tr("This enables support for controlling " 02577 "mythfrontend over the network.")); 02578 gc->setValue(false); 02579 return gc; 02580 } 02581 02582 static HostSpinBox *NetworkControlPort() 02583 { 02584 HostSpinBox *gs = new HostSpinBox("NetworkControlPort", 1025, 65535, 1); 02585 gs->setLabel(QObject::tr("Network Remote Control port")); 02586 gs->setValue(6546); 02587 gs->setHelpText(QObject::tr("This specifies what port the network remote " 02588 "Control interface will listen on for new connections.")); 02589 return gs; 02590 } 02591 02592 static HostLineEdit *UDPNotifyPort() 02593 { 02594 HostLineEdit *ge = new HostLineEdit("UDPNotifyPort"); 02595 ge->setLabel(QObject::tr("UDP notify port")); 02596 ge->setValue("6948"); 02597 ge->setHelpText(QObject::tr("MythTV will listen for connections " 02598 "from the \"mythutil\" program on this port.")); 02599 return ge; 02600 } 02601 02602 static HostCheckBox *RealtimePriority() 02603 { 02604 HostCheckBox *gc = new HostCheckBox("RealtimePriority"); 02605 gc->setLabel(QObject::tr("Enable realtime priority threads")); 02606 gc->setHelpText(QObject::tr("When running mythfrontend with root " 02607 "privileges, some threads can be given enhanced priority. " 02608 "Disable this if mythfrontend freezes during video " 02609 "playback.")); 02610 gc->setValue(true); 02611 return gc; 02612 } 02613 02614 static HostCheckBox *EnableMediaMon() 02615 { 02616 HostCheckBox *gc = new HostCheckBox("MonitorDrives"); 02617 gc->setLabel(QObject::tr("Monitor CD/DVD") + 02618 QObject::tr(" (and other removable devices)")); 02619 gc->setHelpText(QObject::tr("This enables support for monitoring your " 02620 "CD/DVD drives for new disks and launching the proper " 02621 "plugin to handle them. Requires restart.")); 02622 gc->setValue(false); 02623 return gc; 02624 } 02625 02626 static HostLineEdit *IgnoreMedia() 02627 { 02628 HostLineEdit *ge = new HostLineEdit("IgnoreDevices"); 02629 ge->setLabel(QObject::tr("Ignore devices")); 02630 ge->setValue(""); 02631 ge->setHelpText(QObject::tr("If there are any devices that you do not want " 02632 "to be monitored, list them here with commas " 02633 "in-between. The plugins will ignore them. " 02634 "Requires restart.")); 02635 return ge; 02636 } 02637 02638 class MythMediaSettings : public TriggeredConfigurationGroup 02639 { 02640 public: 02641 MythMediaSettings() : 02642 TriggeredConfigurationGroup(false, false, true, true) 02643 { 02644 setLabel(QObject::tr("MythMediaMonitor")); 02645 setUseLabel(false); 02646 02647 Setting* enabled = EnableMediaMon(); 02648 addChild(enabled); 02649 setTrigger(enabled); 02650 02651 ConfigurationGroup* settings = new VerticalConfigurationGroup(false); 02652 settings->addChild(IgnoreMedia()); 02653 addTarget("1", settings); 02654 02655 // show nothing if fillEnabled is off 02656 addTarget("0", new VerticalConfigurationGroup(true)); 02657 }; 02658 }; 02659 02660 02661 static HostComboBox *DisplayGroupTitleSort() 02662 { 02663 HostComboBox *gc = new HostComboBox("DisplayGroupTitleSort"); 02664 gc->setLabel(QObject::tr("Sort titles")); 02665 gc->addSelection(QObject::tr("Alphabetically"), 02666 QString::number(PlaybackBox::TitleSortAlphabetical)); 02667 gc->addSelection(QObject::tr("By recording priority"), 02668 QString::number(PlaybackBox::TitleSortRecPriority)); 02669 gc->setHelpText(QObject::tr("Sets the title sorting order when the " 02670 "view is set to Titles only.")); 02671 return gc; 02672 } 02673 02674 static HostCheckBox *PlaybackWatchList() 02675 { 02676 HostCheckBox *gc = new HostCheckBox("PlaybackWatchList"); 02677 gc->setLabel(QObject::tr("Include the 'Watch List' group")); 02678 gc->setValue(true); 02679 gc->setHelpText(QObject::tr("The 'Watch List' is an abbreviated list of " 02680 "recordings sorted to highlight series and " 02681 "shows that need attention in order to " 02682 "keep up to date.")); 02683 return gc; 02684 } 02685 02686 static HostCheckBox *PlaybackWLStart() 02687 { 02688 HostCheckBox *gc = new HostCheckBox("PlaybackWLStart"); 02689 gc->setLabel(QObject::tr("Start from the Watch List view")); 02690 gc->setValue(false); 02691 gc->setHelpText(QObject::tr("If enabled, the 'Watch List' will be the " 02692 "initial view each time you enter the " 02693 "Watch Recordings screen")); 02694 return gc; 02695 } 02696 02697 static HostCheckBox *PlaybackWLAutoExpire() 02698 { 02699 HostCheckBox *gc = new HostCheckBox("PlaybackWLAutoExpire"); 02700 gc->setLabel(QObject::tr("Exclude recordings not set for Auto-Expire")); 02701 gc->setValue(false); 02702 gc->setHelpText(QObject::tr("Set this if you turn off Auto-Expire only " 02703 "for recordings that you've seen and intend " 02704 "to keep. This option will exclude these " 02705 "recordings from the 'Watch List'.")); 02706 return gc; 02707 } 02708 02709 static HostSpinBox *PlaybackWLMaxAge() 02710 { 02711 HostSpinBox *gs = new HostSpinBox("PlaybackWLMaxAge", 30, 180, 10); 02712 gs->setLabel(QObject::tr("Maximum days counted in the score")); 02713 gs->setValue(60); 02714 gs->setHelpText(QObject::tr("The 'Watch List' scores are based on 1 point " 02715 "equals one day since recording. This option " 02716 "limits the maximum score due to age and " 02717 "affects other weighting factors.")); 02718 return gs; 02719 } 02720 02721 static HostSpinBox *PlaybackWLBlackOut() 02722 { 02723 HostSpinBox *gs = new HostSpinBox("PlaybackWLBlackOut", 0, 5, 1); 02724 gs->setLabel(QObject::tr("Days to exclude weekly episodes after delete")); 02725 gs->setValue(2); 02726 gs->setHelpText(QObject::tr("When an episode is deleted or marked as " 02727 "watched, other episodes of the series are " 02728 "excluded from the 'Watch List' for this " 02729 "interval of time. Daily shows also have a " 02730 "smaller interval based on this setting.")); 02731 return gs; 02732 } 02733 02734 class WatchListSettings : public TriggeredConfigurationGroup 02735 { 02736 public: 02737 WatchListSettings() : 02738 TriggeredConfigurationGroup(false, false, true, true) 02739 { 02740 02741 Setting* watchList = PlaybackWatchList(); 02742 addChild(watchList); 02743 setTrigger(watchList); 02744 02745 ConfigurationGroup* settings = new VerticalConfigurationGroup(false); 02746 settings->addChild(PlaybackWLStart()); 02747 settings->addChild(PlaybackWLAutoExpire()); 02748 settings->addChild(PlaybackWLMaxAge()); 02749 settings->addChild(PlaybackWLBlackOut()); 02750 addTarget("1", settings); 02751 02752 addTarget("0", new VerticalConfigurationGroup(true)); 02753 }; 02754 }; 02755 02756 static HostCheckBox *LCDShowTime() 02757 { 02758 HostCheckBox *gc = new HostCheckBox("LCDShowTime"); 02759 gc->setLabel(QObject::tr("Display time")); 02760 gc->setHelpText(QObject::tr("Display current time on idle LCD display. ")); 02761 gc->setValue(true); 02762 return gc; 02763 } 02764 02765 static HostCheckBox *LCDShowRecStatus() 02766 { 02767 HostCheckBox *gc = new HostCheckBox("LCDShowRecStatus"); 02768 gc->setLabel(QObject::tr("Display recording status")); 02769 gc->setHelpText(QObject::tr("Display current recordings information on " 02770 "LCD display.")); 02771 gc->setValue(false); 02772 return gc; 02773 } 02774 02775 static HostCheckBox *LCDShowMenu() 02776 { 02777 HostCheckBox *gc = new HostCheckBox("LCDShowMenu"); 02778 gc->setLabel(QObject::tr("Display menus")); 02779 gc->setHelpText(QObject::tr("Display selected menu on LCD display. ")); 02780 gc->setValue(true); 02781 return gc; 02782 } 02783 02784 static HostSpinBox *LCDPopupTime() 02785 { 02786 HostSpinBox *gs = new HostSpinBox("LCDPopupTime", 1, 300, 1, true); 02787 gs->setLabel(QObject::tr("Menu pop-up time")); 02788 gs->setHelpText(QObject::tr("How many seconds the menu will " 02789 "remain visible after navigation.")); 02790 gs->setValue(5); 02791 return gs; 02792 } 02793 02794 static HostCheckBox *LCDShowMusic() 02795 { 02796 HostCheckBox *gc = new HostCheckBox("LCDShowMusic"); 02797 gc->setLabel(QObject::tr("Display music artist and title")); 02798 gc->setHelpText(QObject::tr("Display playing artist and song title in " 02799 "MythMusic on LCD display.")); 02800 gc->setValue(true); 02801 return gc; 02802 } 02803 02804 static HostComboBox *LCDShowMusicItems() 02805 { 02806 HostComboBox *gc = new HostComboBox("LCDShowMusicItems"); 02807 gc->setLabel(QObject::tr("Items")); 02808 gc->addSelection(QObject::tr("Artist - Title"), "ArtistTitle"); 02809 gc->addSelection(QObject::tr("Artist [Album] Title"), "ArtistAlbumTitle"); 02810 gc->setHelpText(QObject::tr("Which items to show when playing music.")); 02811 return gc; 02812 } 02813 02814 static HostCheckBox *LCDShowChannel() 02815 { 02816 HostCheckBox *gc = new HostCheckBox("LCDShowChannel"); 02817 gc->setLabel(QObject::tr("Display channel information")); 02818 gc->setHelpText(QObject::tr("Display tuned channel information on LCD display.")); 02819 gc->setValue(true); 02820 return gc; 02821 } 02822 02823 static HostCheckBox *LCDShowVolume() 02824 { 02825 HostCheckBox *gc = new HostCheckBox("LCDShowVolume"); 02826 gc->setLabel(QObject::tr("Display volume information")); 02827 gc->setHelpText(QObject::tr("Display volume level information " 02828 "on LCD display.")); 02829 gc->setValue(true); 02830 return gc; 02831 } 02832 02833 static HostCheckBox *LCDShowGeneric() 02834 { 02835 HostCheckBox *gc = new HostCheckBox("LCDShowGeneric"); 02836 gc->setLabel(QObject::tr("Display generic information")); 02837 gc->setHelpText(QObject::tr("Display generic information on LCD display.")); 02838 gc->setValue(true); 02839 return gc; 02840 } 02841 02842 static HostCheckBox *LCDBacklightOn() 02843 { 02844 HostCheckBox *gc = new HostCheckBox("LCDBacklightOn"); 02845 gc->setLabel(QObject::tr("Backlight always on")); 02846 gc->setHelpText(QObject::tr("Turn on the backlight permanently " 02847 "on the LCD display.")); 02848 gc->setValue(true); 02849 return gc; 02850 } 02851 02852 static HostCheckBox *LCDHeartBeatOn() 02853 { 02854 HostCheckBox *gc = new HostCheckBox("LCDHeartBeatOn"); 02855 gc->setLabel(QObject::tr("Heartbeat always on")); 02856 gc->setHelpText(QObject::tr("Turn on the LCD heartbeat.")); 02857 gc->setValue(false); 02858 return gc; 02859 } 02860 02861 static HostCheckBox *LCDBigClock() 02862 { 02863 HostCheckBox *gc = new HostCheckBox("LCDBigClock"); 02864 gc->setLabel(QObject::tr("Display large clock")); 02865 gc->setHelpText(QObject::tr("On multiline displays try and display the time as large as possible.")); 02866 gc->setValue(false); 02867 return gc; 02868 } 02869 02870 static HostLineEdit *LCDKeyString() 02871 { 02872 HostLineEdit *ge = new HostLineEdit("LCDKeyString"); 02873 ge->setLabel(QObject::tr("LCD key order")); 02874 ge->setValue("ABCDEF"); 02875 ge->setHelpText(QObject::tr("Enter the 6 Keypad Return Codes for your " 02876 "LCD keypad in the order in which you want the functions " 02877 "up/down/left/right/yes/no to operate. " 02878 "(See lcdproc/server/drivers/hd44780.c/keyMapMatrix[] " 02879 "or the matrix for your display)")); 02880 return ge; 02881 } 02882 02883 static HostCheckBox *LCDEnable() 02884 { 02885 HostCheckBox *gc = new HostCheckBox("LCDEnable"); 02886 gc->setLabel(QObject::tr("Enable LCD device")); 02887 gc->setHelpText(QObject::tr("Use an LCD display to view MythTV status " 02888 "information.")); 02889 gc->setValue(false); 02890 return gc; 02891 } 02892 02893 class LcdSettings : public TriggeredConfigurationGroup 02894 { 02895 public: 02896 LcdSettings() : TriggeredConfigurationGroup(false, false, false, false, 02897 false, false, false, false) 02898 { 02899 setLabel(QObject::tr("LCD device display")); 02900 setUseLabel(false); 02901 02902 Setting* lcd_enable = LCDEnable(); 02903 addChild(lcd_enable); 02904 setTrigger(lcd_enable); 02905 02906 ConfigurationGroup *settings = 02907 new VerticalConfigurationGroup(false, true, false, false); 02908 ConfigurationGroup *setHoriz = 02909 new HorizontalConfigurationGroup(false, false, false, false); 02910 02911 ConfigurationGroup* setLeft = 02912 new VerticalConfigurationGroup(false, false, false, false); 02913 ConfigurationGroup* setRight = 02914 new VerticalConfigurationGroup(false, false, false, false); 02915 02916 setLeft->addChild(LCDShowTime()); 02917 setLeft->addChild(LCDShowMenu()); 02918 setLeft->addChild(LCDShowMusic()); 02919 setLeft->addChild(LCDShowMusicItems()); 02920 setLeft->addChild(LCDShowChannel()); 02921 setLeft->addChild(LCDShowRecStatus()); 02922 setRight->addChild(LCDShowVolume()); 02923 setRight->addChild(LCDShowGeneric()); 02924 setRight->addChild(LCDBacklightOn()); 02925 setRight->addChild(LCDHeartBeatOn()); 02926 setRight->addChild(LCDBigClock()); 02927 setRight->addChild(LCDKeyString()); 02928 setHoriz->addChild(setLeft); 02929 setHoriz->addChild(setRight); 02930 settings->addChild(setHoriz); 02931 settings->addChild(LCDPopupTime()); 02932 02933 addTarget("1", settings); 02934 02935 addTarget("0", new VerticalConfigurationGroup(true)); 02936 }; 02937 }; 02938 02939 02940 #if CONFIG_DARWIN 02941 static HostCheckBox *MacGammaCorrect() 02942 { 02943 HostCheckBox *gc = new HostCheckBox("MacGammaCorrect"); 02944 gc->setLabel(QObject::tr("Enable gamma correction for video")); 02945 gc->setValue(false); 02946 gc->setHelpText(QObject::tr("If enabled, QuickTime will correct the gamma " 02947 "of the video to match your monitor. Turning this off can " 02948 "save some CPU cycles.")); 02949 return gc; 02950 } 02951 02952 static HostCheckBox *MacScaleUp() 02953 { 02954 HostCheckBox *gc = new HostCheckBox("MacScaleUp"); 02955 gc->setLabel(QObject::tr("Scale video as necessary")); 02956 gc->setValue(true); 02957 gc->setHelpText(QObject::tr("If enabled, video will be scaled to fit your " 02958 "window or screen. If unchecked, video will never be made " 02959 "larger than its actual pixel size.")); 02960 return gc; 02961 } 02962 02963 static HostSpinBox *MacFullSkip() 02964 { 02965 HostSpinBox *gs = new HostSpinBox("MacFullSkip", 0, 30, 1, true); 02966 gs->setLabel(QObject::tr("Frames to skip in fullscreen mode")); 02967 gs->setValue(0); 02968 gs->setHelpText(QObject::tr("Video displayed in fullscreen or non-windowed " 02969 "mode will skip this many frames for each frame drawn. " 02970 "Set to 0 to show every frame. Only valid when either " 02971 "\"Use GUI size for TV playback\" or \"Run the frontend " 02972 "in a window\" is not checked.")); 02973 return gs; 02974 } 02975 02976 static HostCheckBox *MacMainEnabled() 02977 { 02978 HostCheckBox *gc = new HostCheckBox("MacMainEnabled"); 02979 gc->setLabel(QObject::tr("Video in main window")); 02980 gc->setValue(true); 02981 gc->setHelpText(QObject::tr("If enabled, video will be displayed in the " 02982 "main GUI window. Disable this when you only want video " 02983 "on the desktop or in a floating window. Only valid when " 02984 "\"Use GUI size for TV playback\" and \"Run the " 02985 "frontend in a window\" are checked.")); 02986 return gc; 02987 } 02988 02989 static HostSpinBox *MacMainSkip() 02990 { 02991 HostSpinBox *gs = new HostSpinBox("MacMainSkip", 0, 30, 1, true); 02992 gs->setLabel(QObject::tr("Frames to skip")); 02993 gs->setValue(0); 02994 gs->setHelpText(QObject::tr("Video in the main window will skip this many " 02995 "frames for each frame drawn. Set to 0 to show " 02996 "every frame.")); 02997 return gs; 02998 } 02999 03000 static HostSpinBox *MacMainOpacity() 03001 { 03002 HostSpinBox *gs = new HostSpinBox("MacMainOpacity", 0, 100, 5, false); 03003 gs->setLabel(QObject::tr("Opacity")); 03004 gs->setValue(100); 03005 gs->setHelpText(QObject::tr("The opacity of the main window. Set to " 03006 "100 for completely opaque, set to 0 for completely " 03007 "transparent.")); 03008 return gs; 03009 } 03010 03011 class MacMainSettings : public TriggeredConfigurationGroup 03012 { 03013 public: 03014 MacMainSettings() : TriggeredConfigurationGroup(false) 03015 { 03016 setLabel(QObject::tr("Video in main window")); 03017 setUseLabel(false); 03018 Setting *gc = MacMainEnabled(); 03019 addChild(gc); 03020 setTrigger(gc); 03021 03022 VerticalConfigurationGroup *opts = 03023 new VerticalConfigurationGroup(false, false); 03024 opts->addChild(MacMainSkip()); 03025 opts->addChild(MacMainOpacity()); 03026 03027 addTarget("1", opts); 03028 addTarget("0", new VerticalConfigurationGroup(false, false)); 03029 } 03030 }; 03031 03032 static HostCheckBox *MacFloatEnabled() 03033 { 03034 HostCheckBox *gc = new HostCheckBox("MacFloatEnabled"); 03035 gc->setLabel(QObject::tr("Video in floating window")); 03036 gc->setValue(false); 03037 gc->setHelpText(QObject::tr("If enabled, video will be displayed in a " 03038 "floating window. Only valid when \"Use GUI size for TV " 03039 "playback\" and \"Run the frontend in a window\" are " 03040 "checked.")); 03041 return gc; 03042 } 03043 03044 static HostSpinBox *MacFloatSkip() 03045 { 03046 HostSpinBox *gs = new HostSpinBox("MacFloatSkip", 0, 30, 1, true); 03047 gs->setLabel(QObject::tr("Frames to skip")); 03048 gs->setValue(0); 03049 gs->setHelpText(QObject::tr("Video in the floating window will skip " 03050 "this many frames for each frame drawn. Set to 0 to show " 03051 "every frame.")); 03052 return gs; 03053 } 03054 03055 static HostSpinBox *MacFloatOpacity() 03056 { 03057 HostSpinBox *gs = new HostSpinBox("MacFloatOpacity", 0, 100, 5, false); 03058 gs->setLabel(QObject::tr("Opacity")); 03059 gs->setValue(100); 03060 gs->setHelpText(QObject::tr("The opacity of the floating window. Set to " 03061 "100 for completely opaque, set to 0 for completely " 03062 "transparent.")); 03063 return gs; 03064 } 03065 03066 class MacFloatSettings : public TriggeredConfigurationGroup 03067 { 03068 public: 03069 MacFloatSettings() : TriggeredConfigurationGroup(false) 03070 { 03071 setLabel(QObject::tr("Video in floating window")); 03072 setUseLabel(false); 03073 Setting *gc = MacFloatEnabled(); 03074 addChild(gc); 03075 setTrigger(gc); 03076 03077 VerticalConfigurationGroup *opts = 03078 new VerticalConfigurationGroup(false, false); 03079 opts->addChild(MacFloatSkip()); 03080 opts->addChild(MacFloatOpacity()); 03081 03082 addTarget("1", opts); 03083 addTarget("0", new VerticalConfigurationGroup(false, false)); 03084 } 03085 }; 03086 03087 static HostCheckBox *MacDockEnabled() 03088 { 03089 HostCheckBox *gc = new HostCheckBox("MacDockEnabled"); 03090 gc->setLabel(QObject::tr("Video in the dock")); 03091 gc->setValue(true); 03092 gc->setHelpText(QObject::tr("If enabled, video will be displayed in the " 03093 "application's dock icon. Only valid when \"Use GUI size " 03094 "for TV playback\" and \"Run the frontend in a window\" " 03095 "are checked.")); 03096 return gc; 03097 } 03098 03099 static HostSpinBox *MacDockSkip() 03100 { 03101 HostSpinBox *gs = new HostSpinBox("MacDockSkip", 0, 30, 1, true); 03102 gs->setLabel(QObject::tr("Frames to skip")); 03103 gs->setValue(3); 03104 gs->setHelpText(QObject::tr("Video in the dock icon will skip this many " 03105 "frames for each frame drawn. Set to 0 to show " 03106 "every frame.")); 03107 return gs; 03108 } 03109 03110 class MacDockSettings : public TriggeredConfigurationGroup 03111 { 03112 public: 03113 MacDockSettings() : TriggeredConfigurationGroup(false) 03114 { 03115 setLabel(QObject::tr("Video in the dock")); 03116 setUseLabel(false); 03117 Setting *gc = MacDockEnabled(); 03118 addChild(gc); 03119 setTrigger(gc); 03120 03121 Setting *skip = MacDockSkip(); 03122 addTarget("1", skip); 03123 addTarget("0", new HorizontalConfigurationGroup(false, false)); 03124 } 03125 }; 03126 03127 static HostCheckBox *MacDesktopEnabled() 03128 { 03129 HostCheckBox *gc = new HostCheckBox("MacDesktopEnabled"); 03130 gc->setLabel(QObject::tr("Video on the desktop")); 03131 gc->setValue(false); 03132 gc->setHelpText(QObject::tr("If enabled, video will be displayed on the " 03133 "desktop, behind the Finder icons. Only valid when \"Use " 03134 "GUI size for TV playback\" and \"Run the frontend in a " 03135 "window\" are checked.")); 03136 return gc; 03137 } 03138 03139 static HostSpinBox *MacDesktopSkip() 03140 { 03141 HostSpinBox *gs = new HostSpinBox("MacDesktopSkip", 0, 30, 1, true); 03142 gs->setLabel(QObject::tr("Frames to skip")); 03143 gs->setValue(0); 03144 gs->setHelpText(QObject::tr("Video on the desktop will skip this many " 03145 "frames for each frame drawn. Set to 0 to show " 03146 "every frame.")); 03147 return gs; 03148 } 03149 03150 class MacDesktopSettings : public TriggeredConfigurationGroup 03151 { 03152 public: 03153 MacDesktopSettings() : TriggeredConfigurationGroup(false) 03154 { 03155 setLabel(QObject::tr("Video on the desktop")); 03156 setUseLabel(false); 03157 Setting *gc = MacDesktopEnabled(); 03158 addChild(gc); 03159 setTrigger(gc); 03160 03161 Setting *skip = MacDesktopSkip(); 03162 addTarget("1", skip); 03163 addTarget("0", new HorizontalConfigurationGroup(false, false)); 03164 } 03165 }; 03166 #endif 03167 03168 static HostCheckBox *WatchTVGuide() 03169 { 03170 HostCheckBox *gc = new HostCheckBox("WatchTVGuide"); 03171 gc->setLabel(QObject::tr("Show the program guide when starting Live TV")); 03172 gc->setHelpText(QObject::tr("This starts the program guide immediately " 03173 "upon starting to watch Live TV.")); 03174 gc->setValue(false); 03175 return gc; 03176 } 03177 03178 MainGeneralSettings::MainGeneralSettings() 03179 { 03180 DatabaseSettings::addDatabaseSettings(this); 03181 03182 VerticalConfigurationGroup *pin = 03183 new VerticalConfigurationGroup(false, true, false, false); 03184 pin->setLabel(QObject::tr("Settings Access")); 03185 pin->addChild(SetupPinCodeRequired()); 03186 pin->addChild(SetupPinCode()); 03187 addChild(pin); 03188 03189 VerticalConfigurationGroup *general = 03190 new VerticalConfigurationGroup(false, true, false, false); 03191 general->setLabel(QObject::tr("General")); 03192 general->addChild(UseVirtualKeyboard()); 03193 general->addChild(ScreenShotPath()); 03194 addChild(general); 03195 03196 VerticalConfigurationGroup *media = 03197 new VerticalConfigurationGroup(false, true, false, false); 03198 media->setLabel(QObject::tr("Media Monitor")); 03199 MythMediaSettings *mediaMon = new MythMediaSettings(); 03200 media->addChild(mediaMon); 03201 addChild(media); 03202 03203 VerticalConfigurationGroup *shutdownSettings = 03204 new VerticalConfigurationGroup(true, true, false, false); 03205 shutdownSettings->setLabel(QObject::tr("Shutdown/Reboot Settings")); 03206 shutdownSettings->addChild(FrontendIdleTimeout()); 03207 shutdownSettings->addChild(OverrideExitMenu()); 03208 shutdownSettings->addChild(HaltCommand()); 03209 shutdownSettings->addChild(RebootCommand()); 03210 addChild(shutdownSettings); 03211 03212 VerticalConfigurationGroup *remotecontrol = 03213 new VerticalConfigurationGroup(false, true, false, false); 03214 remotecontrol->setLabel(QObject::tr("Remote Control")); 03215 remotecontrol->addChild(LircDaemonDevice()); 03216 remotecontrol->addChild(NetworkControlEnabled()); 03217 remotecontrol->addChild(NetworkControlPort()); 03218 remotecontrol->addChild(UDPNotifyPort()); 03219 addChild(remotecontrol); 03220 } 03221 03222 PlaybackSettings::PlaybackSettings() 03223 { 03224 uint i = 0, total = 8; 03225 #if CONFIG_DARWIN 03226 total += 2; 03227 #endif // USING_DARWIN 03228 03229 03230 VerticalConfigurationGroup* general1 = 03231 new VerticalConfigurationGroup(false); 03232 general1->setLabel(QObject::tr("General Playback") + 03233 QString(" (%1/%2)").arg(++i).arg(total)); 03234 03235 HorizontalConfigurationGroup *columns = 03236 new HorizontalConfigurationGroup(false, false, true, true); 03237 03238 VerticalConfigurationGroup *column1 = 03239 new VerticalConfigurationGroup(false, false, true, true); 03240 column1->addChild(RealtimePriority()); 03241 column1->addChild(DecodeExtraAudio()); 03242 column1->addChild(JumpToProgramOSD()); 03243 columns->addChild(column1); 03244 03245 VerticalConfigurationGroup *column2 = 03246 new VerticalConfigurationGroup(false, false, true, true); 03247 column2->addChild(ClearSavedPosition()); 03248 column2->addChild(AltClearSavedPosition()); 03249 column2->addChild(AutomaticSetWatched()); 03250 column2->addChild(ContinueEmbeddedTVPlay()); 03251 columns->addChild(column2); 03252 03253 general1->addChild(columns); 03254 general1->addChild(LiveTVIdleTimeout()); 03255 addChild(general1); 03256 03257 VerticalConfigurationGroup* general2 = 03258 new VerticalConfigurationGroup(false); 03259 general2->setLabel(QObject::tr("General Playback") + 03260 QString(" (%1/%2)").arg(++i).arg(total)); 03261 03262 HorizontalConfigurationGroup* oscan = 03263 new HorizontalConfigurationGroup(false, false, true, true); 03264 VerticalConfigurationGroup *ocol1 = 03265 new VerticalConfigurationGroup(false, false, true, true); 03266 VerticalConfigurationGroup *ocol2 = 03267 new VerticalConfigurationGroup(false, false, true, true); 03268 ocol1->addChild(VertScanPercentage()); 03269 ocol1->addChild(YScanDisplacement()); 03270 ocol2->addChild(HorizScanPercentage()); 03271 ocol2->addChild(XScanDisplacement()); 03272 oscan->addChild(ocol1); 03273 oscan->addChild(ocol2); 03274 03275 HorizontalConfigurationGroup* aspect_fill = 03276 new HorizontalConfigurationGroup(false, false, true, true); 03277 aspect_fill->addChild(AspectOverride()); 03278 aspect_fill->addChild(AdjustFill()); 03279 03280 general2->addChild(oscan); 03281 general2->addChild(aspect_fill); 03282 general2->addChild(LetterboxingColour()); 03283 general2->addChild(PIPLocationComboBox()); 03284 general2->addChild(PlaybackExitPrompt()); 03285 general2->addChild(EndOfRecordingExitPrompt()); 03286 addChild(general2); 03287 03288 QString tmp = QString(" (%1/%2)").arg(++i).arg(total); 03289 addChild(new PlaybackProfileConfigs(tmp)); 03290 03291 VerticalConfigurationGroup* pbox = new VerticalConfigurationGroup(false); 03292 pbox->setLabel(QObject::tr("View Recordings") + 03293 QString(" (%1/%2)").arg(++i).arg(total)); 03294 pbox->addChild(PlayBoxOrdering()); 03295 pbox->addChild(PlayBoxEpisodeSort()); 03296 // Disabled until we re-enable live previews 03297 // pbox->addChild(PlaybackPreview()); 03298 // pbox->addChild(HWAccelPlaybackPreview()); 03299 pbox->addChild(PBBStartInTitle()); 03300 addChild(pbox); 03301 03302 VerticalConfigurationGroup* pbox2 = new VerticalConfigurationGroup(false); 03303 pbox2->setLabel(QObject::tr("Recording Groups") + 03304 QString(" (%1/%2)").arg(++i).arg(total)); 03305 pbox2->addChild(DisplayRecGroup()); 03306 pbox2->addChild(QueryInitialFilter()); 03307 pbox2->addChild(RememberRecGroup()); 03308 pbox2->addChild(UseGroupNameAsAllPrograms()); 03309 addChild(pbox2); 03310 03311 VerticalConfigurationGroup* pbox3 = new VerticalConfigurationGroup(false); 03312 pbox3->setLabel(QObject::tr("View Recordings") + 03313 QString(" (%1/%2)").arg(++i).arg(total)); 03314 pbox3->addChild(DisplayGroupTitleSort()); 03315 pbox3->addChild(new WatchListSettings()); 03316 addChild(pbox3); 03317 03318 VerticalConfigurationGroup* seek = new VerticalConfigurationGroup(false); 03319 seek->setLabel(QObject::tr("Seeking") + 03320 QString(" (%1/%2)").arg(++i).arg(total)); 03321 seek->addChild(SmartForward()); 03322 seek->addChild(FFRewReposTime()); 03323 seek->addChild(FFRewReverse()); 03324 addChild(seek); 03325 03326 VerticalConfigurationGroup* comms = new VerticalConfigurationGroup(false); 03327 comms->setLabel(QObject::tr("Commercial Skip") + 03328 QString(" (%1/%2)").arg(++i).arg(total)); 03329 comms->addChild(AutoCommercialSkip()); 03330 comms->addChild(CommRewindAmount()); 03331 comms->addChild(CommNotifyAmount()); 03332 comms->addChild(MaximumCommercialSkip()); 03333 comms->addChild(MergeShortCommBreaks()); 03334 addChild(comms); 03335 03336 #if CONFIG_DARWIN 03337 VerticalConfigurationGroup* mac1 = new VerticalConfigurationGroup(false); 03338 mac1->setLabel(QObject::tr("Mac OS X Video Settings") + 03339 QString(" (%1/%2)").arg(++i).arg(total)); 03340 mac1->addChild(MacGammaCorrect()); 03341 mac1->addChild(MacScaleUp()); 03342 mac1->addChild(MacFullSkip()); 03343 addChild(mac1); 03344 03345 VerticalConfigurationGroup* mac2 = new VerticalConfigurationGroup(false); 03346 mac2->setLabel(QObject::tr("Mac OS X Video Settings") + 03347 QString(" (%1/%2)").arg(++i).arg(total)); 03348 mac2->addChild(new MacMainSettings()); 03349 mac2->addChild(new MacFloatSettings()); 03350 03351 HorizontalConfigurationGroup *row = 03352 new HorizontalConfigurationGroup(false, false, true, true); 03353 row->addChild(new MacDockSettings()); 03354 row->addChild(new MacDesktopSettings()); 03355 mac2->addChild(row); 03356 03357 addChild(mac2); 03358 #endif 03359 } 03360 03361 OSDSettings::OSDSettings() 03362 { 03363 VerticalConfigurationGroup* osd = new VerticalConfigurationGroup(false); 03364 osd->setLabel(QObject::tr("On-screen Display")); 03365 03366 osd->addChild(EnableMHEG()); 03367 osd->addChild(PersistentBrowseMode()); 03368 osd->addChild(BrowseAllTuners()); 03369 osd->addChild(DefaultCCMode()); 03370 osd->addChild(SubtitleCodec()); 03371 addChild(osd); 03372 03373 //VerticalConfigurationGroup *cc = new VerticalConfigurationGroup(false); 03374 //cc->setLabel(QObject::tr("Closed Captions")); 03375 //cc->addChild(DecodeVBIFormat()); 03376 //addChild(cc); 03377 03378 #if CONFIG_DARWIN 03379 // Any Mac OS-specific OSD stuff would go here. 03380 // Note that this define should be Q_WS_MACX 03381 #endif 03382 } 03383 03384 GeneralSettings::GeneralSettings() 03385 { 03386 VerticalConfigurationGroup* general = new VerticalConfigurationGroup(false); 03387 general->setLabel(QObject::tr("General (Basic)")); 03388 general->addChild(ChannelOrdering()); 03389 general->addChild(ChannelFormat()); 03390 general->addChild(LongChannelFormat()); 03391 general->addChild(LiveTVPriority()); 03392 addChild(general); 03393 03394 VerticalConfigurationGroup* autoexp = new VerticalConfigurationGroup(false); 03395 autoexp->setLabel(QObject::tr("General (Auto-Expire)")); 03396 autoexp->addChild(AutoExpireMethod()); 03397 03398 VerticalConfigurationGroup *expgrp0 = 03399 new VerticalConfigurationGroup(false, false, true, true); 03400 expgrp0->addChild(RerecordWatched()); 03401 expgrp0->addChild(AutoExpireWatchedPriority()); 03402 03403 VerticalConfigurationGroup *expgrp1 = 03404 new VerticalConfigurationGroup(false, false, true, true); 03405 expgrp1->addChild(AutoExpireLiveTVMaxAge()); 03406 expgrp1->addChild(AutoExpireDayPriority()); 03407 expgrp1->addChild(AutoExpireExtraSpace()); 03408 03409 HorizontalConfigurationGroup *expgrp = 03410 new HorizontalConfigurationGroup(false, false, true, true); 03411 expgrp->addChild(expgrp0); 03412 expgrp->addChild(expgrp1); 03413 03414 autoexp->addChild(expgrp); 03415 // autoexp->addChild(new DeletedExpireOptions()); 03416 autoexp->addChild(DeletedMaxAge()); 03417 03418 addChild(autoexp); 03419 03420 VerticalConfigurationGroup* jobs = new VerticalConfigurationGroup(false); 03421 jobs->setLabel(QObject::tr("General (Jobs)")); 03422 jobs->addChild(CommercialSkipMethod()); 03423 jobs->addChild(CommFlagFast()); 03424 jobs->addChild(AggressiveCommDetect()); 03425 jobs->addChild(DeferAutoTranscodeDays()); 03426 03427 addChild(jobs); 03428 03429 VerticalConfigurationGroup* general2 = new VerticalConfigurationGroup(false); 03430 general2->setLabel(QObject::tr("General (Advanced)")); 03431 general2->addChild(RecordPreRoll()); 03432 general2->addChild(RecordOverTime()); 03433 general2->addChild(CategoryOverTimeSettings()); 03434 addChild(general2); 03435 03436 VerticalConfigurationGroup* changrp = new VerticalConfigurationGroup(false); 03437 changrp->setLabel(QObject::tr("General (Channel Groups)")); 03438 ChannelGroupSettings *changroupsettings = new ChannelGroupSettings(); 03439 changrp->addChild(changroupsettings); 03440 changrp->addChild(BrowseChannelGroup()); 03441 addChild(changrp); 03442 } 03443 03444 EPGSettings::EPGSettings() 03445 { 03446 VerticalConfigurationGroup* epg = new VerticalConfigurationGroup(false); 03447 epg->setLabel(QObject::tr("Program Guide") + " 1/1"); 03448 epg->addChild(WatchTVGuide()); 03449 epg->addChild(DefaultTVChannel()); 03450 epg->addChild(EPGRecThreshold()); 03451 addChild(epg); 03452 } 03453 03454 GeneralRecPrioritiesSettings::GeneralRecPrioritiesSettings() 03455 { 03456 VerticalConfigurationGroup* sched = new VerticalConfigurationGroup(false); 03457 sched->setLabel(QObject::tr("Scheduler Options")); 03458 03459 sched->addChild(GRSchedMoveHigher()); 03460 sched->addChild(GRSchedOpenEnd()); 03461 sched->addChild(GRPrefInputRecPriority()); 03462 sched->addChild(GRHDTVRecPriority()); 03463 sched->addChild(GRWSRecPriority()); 03464 sched->addChild(GRAutoRecPriority()); 03465 addChild(sched); 03466 03467 VerticalConfigurationGroup* access = new VerticalConfigurationGroup(false); 03468 access->setLabel(QObject::tr("Accessibility Options")); 03469 03470 access->addChild(GRSignLangRecPriority()); 03471 access->addChild(GROnScrSubRecPriority()); 03472 access->addChild(GRCCRecPriority()); 03473 access->addChild(GRHardHearRecPriority()); 03474 access->addChild(GRAudioDescRecPriority()); 03475 addChild(access); 03476 03477 VerticalConfigurationGroup* rtype = new VerticalConfigurationGroup(false); 03478 rtype->setLabel(QObject::tr("Recording Type Priority Settings")); 03479 03480 rtype->addChild(GRSingleRecordRecPriority()); 03481 rtype->addChild(GROverrideRecordRecPriority()); 03482 rtype->addChild(GRFindOneRecordRecPriority()); 03483 rtype->addChild(GRWeekslotRecordRecPriority()); 03484 rtype->addChild(GRTimeslotRecordRecPriority()); 03485 rtype->addChild(GRChannelRecordRecPriority()); 03486 rtype->addChild(GRAllRecordRecPriority()); 03487 addChild(rtype); 03488 } 03489 03490 AppearanceSettings::AppearanceSettings() 03491 { 03492 VerticalConfigurationGroup* screen = new VerticalConfigurationGroup(false); 03493 screen->setLabel(QObject::tr("Theme") + " / " + QObject::tr("Screen Settings")); 03494 03495 screen->addChild(ThemePainter()); 03496 screen->addChild(MenuTheme()); 03497 03498 if (MythDisplay::GetNumberXineramaScreens() > 1) 03499 { 03500 screen->addChild(XineramaScreen()); 03501 screen->addChild(XineramaMonitorAspectRatio()); 03502 } 03503 03504 // screen->addChild(DisplaySizeHeight()); 03505 // screen->addChild(DisplaySizeWidth()); 03506 03507 VerticalConfigurationGroup *column1 = 03508 new VerticalConfigurationGroup(false, false, false, false); 03509 03510 column1->addChild(GuiWidth()); 03511 column1->addChild(GuiHeight()); 03512 column1->addChild(GuiOffsetX()); 03513 column1->addChild(GuiOffsetY()); 03514 03515 VerticalConfigurationGroup *column2 = 03516 new VerticalConfigurationGroup(false, false, false, false); 03517 03518 column2->addChild(GuiSizeForTV()); 03519 column2->addChild(HideMouseCursor()); 03520 column2->addChild(RunInWindow()); 03521 column2->addChild(UseFixedWindowSize()); 03522 03523 HorizontalConfigurationGroup *columns = 03524 new HorizontalConfigurationGroup(false, false, false, false); 03525 03526 columns->addChild(column1); 03527 columns->addChild(column2); 03528 03529 screen->addChild(columns); 03530 03531 addChild(screen); 03532 03533 #if defined(USING_XRANDR) || CONFIG_DARWIN 03534 const vector<DisplayResScreen> scr = GetVideoModes(); 03535 if (!scr.empty()) 03536 addChild(new VideoModeSettings()); 03537 #endif 03538 VerticalConfigurationGroup* dates = new VerticalConfigurationGroup(false); 03539 dates->setLabel(QObject::tr("Localization")); 03540 dates->addChild(MythLanguage()); 03541 dates->addChild(ISO639PreferredLanguage(0)); 03542 dates->addChild(ISO639PreferredLanguage(1)); 03543 dates->addChild(MythDateFormatCB()); 03544 dates->addChild(MythShortDateFormat()); 03545 dates->addChild(MythTimeFormat()); 03546 addChild(dates); 03547 03548 addChild(new LcdSettings()); 03549 } 03550 03551 // vim:set sw=4 ts=4 expandtab:
1.7.6.1