Ticket #4492: playspeeds_config.patch

File playspeeds_config.patch, 9.3 KB (added by Ron Frazier <ron@…>, 13 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);