Ticket #4492: playspeeds_config.patch

File playspeeds_config.patch, 9.3 KB (added by Ron Frazier <ron@…>, 4 years ago)

gui config page for adjusting settings

  • programs/mythfrontend/globalsettings.h

     
    149149    HostComboBox *grouptrigger; 
    150150}; 
    151151 
     152class PlaybackSpeedsConfigWizard : public QObject, public ConfigurationWizard 
     153{ 
     154    Q_OBJECT 
     155 
     156  public: 
     157    PlaybackSpeedsConfigWizard(vector<int> &_ff_rew, vector<int> &_repos, 
     158                               vector<int> &_slowmo); 
     159    virtual void save(void); 
     160 
     161  private: 
     162    TransComboBoxSetting* slowmoCombo(uint value); 
     163 
     164    vector<int> &ff_rew; 
     165    vector<int> &repos; 
     166    vector<int> &slowmo; 
     167 
     168    vector<TransSpinBoxSetting*> ff_rew_spins; 
     169    vector<TransSpinBoxSetting*> repos_spins; 
     170    vector<TransComboBoxSetting*> slowmo_combos; 
     171}; 
     172 
     173class PlaybackSpeedsConfig : public VerticalConfigurationGroup 
     174{ 
     175    Q_OBJECT 
     176 
     177  public: 
     178    PlaybackSpeedsConfig(); 
     179    virtual void save(void); 
     180 
     181  private slots: 
     182    void pressed(QString); 
     183 
     184  private: 
     185    void InitLabels(); 
     186    void InitUI(void); 
     187 
     188  private: 
     189    bool        needs_save; 
     190    vector<int> ff_rew_speeds; 
     191    vector<int> ff_rew_repos; 
     192    vector<int> slowmo_speeds; 
     193 
     194    TransLabelSetting*          ff_rew_label; 
     195    TransLabelSetting*          slowmo_label; 
     196    TransButtonSetting*         edit; 
     197}; 
     198 
    152199#ifdef USING_IVTV 
    153200class PVR350VideoDevice : public PathSetting, public HostDBStorage 
    154201{ 
  • programs/mythfrontend/globalsettings.cpp

     
    13751375    TriggeredConfigurationGroup::triggerChanged(trig); 
    13761376} 
    13771377 
     1378TransLabelSetting* makeLabel(const QString &value) 
     1379{ 
     1380    TransLabelSetting* l = new TransLabelSetting(); 
     1381    l->setValue(value); 
     1382    return l; 
     1383} 
     1384 
     1385PlaybackSpeedsConfigWizard::PlaybackSpeedsConfigWizard(vector<int> &_ff_rew,  
     1386                    vector<int> &_repos, vector<int> &_slowmo) : 
     1387                    ff_rew(_ff_rew), repos(_repos), slowmo(_slowmo) 
     1388{ 
     1389    for (uint i = 0; i < ff_rew.size(); i++) 
     1390    { 
     1391        TransSpinBoxSetting* spin = new TransSpinBoxSetting(0, 360, 5, true,  
     1392                                                "(" + tr("disabled") + ")"); 
     1393        spin->setValue(ff_rew[i]); 
     1394        ff_rew_spins.push_back(spin); 
     1395 
     1396        spin = new TransSpinBoxSetting(-5, 200, 5, false, 
     1397                                        "(" + tr("default") + ")"); 
     1398        spin->setValue(repos[i]); 
     1399        spin->setHelpText(tr( 
     1400                    "When exiting sticky keys fast forward/rewind " 
     1401                    "mode, reposition this many 1/100th seconds before " 
     1402                    "resuming normal playback. This " 
     1403                    "compensates for the reaction time between seeing " 
     1404                    "where to resume playback and actually exiting seeking.")); 
     1405        repos_spins.push_back(spin); 
     1406    }; 
     1407    for (uint i = 0; i < slowmo.size(); i++) 
     1408    { 
     1409        slowmo_combos.push_back(slowmoCombo(slowmo[i])); 
     1410    }; 
     1411 
     1412    VerticalConfigurationGroup *ff_rew_rows = 
     1413        new VerticalConfigurationGroup(true, true, false, true); 
     1414    ff_rew_rows->setLabel(tr("Fast forward/rewind")); 
     1415 
     1416    HorizontalConfigurationGroup *row = 
     1417        new HorizontalConfigurationGroup(false, false, true, true); 
     1418    row->addChild(makeLabel("")); 
     1419    row->addChild(makeLabel(tr("Speed"))); 
     1420    row->addChild(makeLabel(tr("Reposition"))); 
     1421    ff_rew_rows->addChild(row); 
     1422 
     1423    for (uint i = 0; i < ff_rew_spins.size(); i++) 
     1424    { 
     1425        QString str = (i == ff_rew_spins.size()-1) ? tr("Fastest") : 
     1426                      (i == 0) ? tr("Slowest") : "" ; 
     1427        row = new HorizontalConfigurationGroup(false, false, true, true); 
     1428        row->addChild(makeLabel(str)); 
     1429        row->addChild(ff_rew_spins[i]); 
     1430        row->addChild(repos_spins[i]); 
     1431        ff_rew_rows->addChild(row); 
     1432    }; 
     1433    
     1434    HorizontalConfigurationGroup *slowmo_rows = 
     1435        new HorizontalConfigurationGroup(true, true, false, true); 
     1436    VerticalConfigurationGroup *column1 =  
     1437        new VerticalConfigurationGroup(false, false, true, true); 
     1438    VerticalConfigurationGroup *column2 =  
     1439        new VerticalConfigurationGroup(false, false, true, true); 
     1440 
     1441    slowmo_rows->setLabel(tr("Slow motion")); 
     1442 
     1443    column1->addChild(makeLabel("")); 
     1444    column2->addChild(makeLabel(tr("Speed"))); 
     1445 
     1446    for (uint i = 0; i < slowmo_combos.size(); i++) 
     1447    { 
     1448        QString str = (i == slowmo_combos.size()-1) ? tr("Slowest") : 
     1449                      (i == 0) ? tr("Fastest") : "" ; 
     1450        column1->addChild(makeLabel(str)); 
     1451        column2->addChild(slowmo_combos[i]); 
     1452    }; 
     1453 
     1454    for (uint i = slowmo_combos.size(); i < ff_rew_spins.size(); i++) 
     1455    { 
     1456        column1->addChild(makeLabel("")); 
     1457        column2->addChild(makeLabel("")); 
     1458    }; 
     1459 
     1460    slowmo_rows->addChild(column1); 
     1461    slowmo_rows->addChild(column2); 
     1462 
     1463    HorizontalConfigurationGroup *main = 
     1464        new HorizontalConfigurationGroup(false, false, true, true); 
     1465    main->setLabel(tr("Playback Speed Configuration")); 
     1466    main->addChild(ff_rew_rows); 
     1467    main->addChild(slowmo_rows); 
     1468     
     1469    addChild(main); 
     1470} 
     1471 
     1472void PlaybackSpeedsConfigWizard::save(void) 
     1473{ 
     1474    for (uint i = 0; i < ff_rew.size(); i++) 
     1475    { 
     1476        ff_rew[i] = ff_rew_spins[i]->getValue().toInt(); 
     1477        repos[i] = repos_spins[i]->getValue().toInt(); 
     1478    }; 
     1479 
     1480    for (uint i = 0; i < slowmo.size(); i++) 
     1481    { 
     1482        slowmo[i] = slowmo_combos[i]->getValue().toInt(); 
     1483    }; 
     1484} 
     1485 
     1486TransComboBoxSetting* PlaybackSpeedsConfigWizard::slowmoCombo(uint value) 
     1487{ 
     1488    TransComboBoxSetting* combo = new TransComboBoxSetting(); 
     1489    combo->addSelection("(" + tr("disabled") + ")", "0", (value == 0)); 
     1490    for (uint i = 2; i <= 64; i++) 
     1491    { 
     1492        combo->addSelection(QString("1/%1").arg(i), QString::number(i),  
     1493                            (i == value)); 
     1494    }; 
     1495    return combo; 
     1496}; 
     1497 
     1498PlaybackSpeedsConfig::PlaybackSpeedsConfig() : 
     1499    VerticalConfigurationGroup(false, false, true, true), 
     1500    needs_save(false) 
     1501{ 
     1502    int def1[8] = {3, 5, 10, 20, 30, 60, 120, 180}; 
     1503    for (uint i = 0; i < sizeof(def1)/sizeof(def1[0]); i++) 
     1504    { 
     1505        int speed = gContext->GetNumSetting(QString("FFRewSpeed%1").arg(i), 
     1506                                            def1[i]); 
     1507        ff_rew_speeds.push_back(speed); 
     1508         
     1509        int repos = gContext->GetNumSetting(QString("FFRewReposTime%1"). 
     1510                                                arg(i), -5); 
     1511        ff_rew_repos.push_back(repos); 
     1512    }; 
     1513 
     1514    int def2[4] = {3, 8, 16, 0}; 
     1515    for (uint i = 0; i < sizeof(def2)/sizeof(def2[0]); i++) 
     1516    { 
     1517        int speed = gContext->GetNumSetting(QString("SlowMotionSpeed%1"). 
     1518                                            arg(i), def2[i]); 
     1519        slowmo_speeds.push_back(speed); 
     1520    }; 
     1521 
     1522    InitUI(); 
     1523} 
     1524 
     1525void PlaybackSpeedsConfig::InitLabels() 
     1526{ 
     1527    QString str = tr("Fast forward/rewind") + ":"; 
     1528    for (uint i = 0; i < ff_rew_speeds.size(); i++) 
     1529        if (ff_rew_speeds[i] > 0 ) 
     1530            str += QString("   %1x").arg(ff_rew_speeds[i]); 
     1531            
     1532    ff_rew_label->setValue(str); 
     1533 
     1534    str = tr("Slow motion") + ":"; 
     1535    for (uint i = 0; i < slowmo_speeds.size(); i++) 
     1536        if (slowmo_speeds[i] > 0 ) 
     1537            str += QString("   1/%1x").arg(slowmo_speeds[i]); 
     1538            
     1539    slowmo_label->setValue(str); 
     1540} 
     1541 
     1542void PlaybackSpeedsConfig::InitUI(void) 
     1543{ 
     1544    VerticalConfigurationGroup *rows = 
     1545        new VerticalConfigurationGroup(true, true, false, true); 
     1546    rows->setLabel(tr("Playback Speeds")); 
     1547 
     1548    ff_rew_label = new TransLabelSetting(); 
     1549    slowmo_label = new TransLabelSetting(); 
     1550    InitLabels(); 
     1551    rows->addChild(ff_rew_label); 
     1552    rows->addChild(slowmo_label); 
     1553 
     1554    edit = new TransButtonSetting("edit"); 
     1555    edit->setLabel(QObject::tr("Edit Playback Speeds")); 
     1556    rows->addChild(edit); 
     1557    connect(edit, SIGNAL(pressed(QString)), 
     1558            this, SLOT  (pressed(QString))); 
     1559 
     1560    addChild(rows); 
     1561} 
     1562 
     1563void PlaybackSpeedsConfig::save(void) 
     1564{ 
     1565    if (!needs_save) 
     1566        return; // nothing to do.. 
     1567 
     1568    for (uint i = 0; i < ff_rew_speeds.size(); i++) 
     1569    { 
     1570        gContext->SaveSetting(QString("FFRewSpeed%1").arg(i), 
     1571                              QString::number(ff_rew_speeds[i])); 
     1572        gContext->SaveSetting(QString("FFRewReposTime%1").arg(i), 
     1573                              QString::number(ff_rew_repos[i])); 
     1574    }; 
     1575    for (uint i = 0; i < slowmo_speeds.size(); i++) 
     1576    { 
     1577        gContext->SaveSetting(QString("SlowMotionSpeed%1").arg(i), 
     1578                              QString::number(slowmo_speeds[i])); 
     1579    }; 
     1580} 
     1581 
     1582void PlaybackSpeedsConfig::pressed(QString cmd) 
     1583{ 
     1584    PlaybackSpeedsConfigWizard cfg(ff_rew_speeds, ff_rew_repos, slowmo_speeds); 
     1585    if (cfg.exec() != QDialog::Accepted) 
     1586        VERBOSE(VB_IMPORTANT, "playback speeds rejected"); 
     1587 
     1588    InitLabels(); 
     1589    needs_save = true; 
     1590 
     1591    repaint(); 
     1592} 
     1593 
    13781594static HostComboBox *PlayBoxOrdering() 
    13791595{ 
    13801596    QString str[4] = 
     
    44944710    seek->addChild(SmartForward()); 
    44954711    seek->addChild(StickyKeys()); 
    44964712    seek->addChild(FFRewReposTime()); 
     4713    seek->addChild(new PlaybackSpeedsConfig()); 
    44974714    seek->addChild(FFRewReverse()); 
    44984715    seek->addChild(ExactSeeking()); 
    44994716    addChild(seek);