Ticket #6814: 6814-v2.diff

File 6814-v2.diff, 9.9 KB (added by paulh, 10 years ago)

Fixed a bug with menu not always toggling properly

  • libs/libmythui/mythdialogbox.h

     
    8585
    8686  signals:
    8787    void Selected();
    88     void Closed();
     88    void Closed(QString, int);
    8989
    9090  protected:
    9191    void SendEvent(int res, QString text = "", QVariant data = 0);
  • libs/libmythui/mythdialogbox.cpp

     
    144144        QString action = actions[i];
    145145        handled = true;
    146146
    147         if (action == "ESCAPE" || action == "LEFT" || action == "MENU")
     147        if (action == "ESCAPE" || action == "LEFT")
    148148        {
    149149            SendEvent(-1);
    150150            Close();
    151151        }
     152        else if (action == "MENU")
     153        {
     154            SendEvent(-2);
     155            Close();
     156        }
    152157        else if (action == "RIGHT")
    153158        {
    154159            MythUIButtonListItem *item = m_buttonList->GetItemCurrent();
     
    189194
    190195void MythDialogBox::SendEvent(int res, QString text, QVariant data)
    191196{
     197    emit Closed(m_id, res);
     198
    192199    if (!m_retObject)
    193200        return;
    194201
  • programs/mythfrontend/playbackbox.cpp

     
    361361
    362362      // General m_popupMenu support
    363363      m_popupMenu(NULL),
     364      m_doToggleMenu(true),
    364365      // Main Recording List support
    365366      m_progsInDB(0),
    366367      // Other state
     
    988989
    989990    if (usedProgress)
    990991    {
    991         usedProgress->SetTotal(freeSpaceTotal);
    992         usedProgress->SetUsed(freeSpaceUsed);
     992        usedProgress->SetTotal((int)freeSpaceTotal);
     993        usedProgress->SetUsed((int)freeSpaceUsed);
    993994    }
    994995}
    995996
     
    18561857    }
    18571858}
    18581859
    1859 void PlaybackBox::popupClosed()
     1860void PlaybackBox::popupClosed(QString which, int result)
    18601861{
    18611862    m_popupMenu = NULL;
     1863
     1864    if (result == -2)
     1865    {
     1866        if (!m_doToggleMenu)
     1867        {
     1868            m_doToggleMenu = true;
     1869            return;
     1870        }
     1871
     1872        if (which == "groupmenu")
     1873        {
     1874            ProgramInfo *pginfo = CurrentItem();
     1875            if (pginfo)
     1876            {
     1877                m_helper.CheckAvailability(*pginfo, kCheckForMenuAction);
     1878
     1879                if ((asPendingDelete == pginfo->availableStatus) ||
     1880                    (asPendingDelete == pginfo->availableStatus))
     1881                {
     1882                    ShowAvailabilityPopup(*pginfo);
     1883                }
     1884                else
     1885                {
     1886                    ShowActionPopup(*pginfo);
     1887                    m_doToggleMenu = false;
     1888                }
     1889            }
     1890        }
     1891        else if (which == "actionmenu")
     1892        {
     1893            ShowGroupPopup();
     1894            m_doToggleMenu = false;
     1895        }
     1896    }
     1897    else
     1898        m_doToggleMenu = true;
    18621899}
    18631900
    1864 void PlaybackBox::ShowMenu()
     1901void PlaybackBox::ShowGroupPopup()
    18651902{
    18661903    if (m_popupMenu)
    18671904        return;
    18681905
    1869     QString label = tr("Recording List Menu");
     1906    QString label = tr("Group List Menu");
    18701907
    18711908    ProgramInfo *pginfo = CurrentItem();
    18721909
    18731910    m_popupMenu = new MythDialogBox(label, m_popupStack, "pbbmainmenupopup");
    18741911
    1875     connect(m_popupMenu, SIGNAL(Exiting()), SLOT(popupClosed()));
     1912    connect(m_popupMenu, SIGNAL(Closed(QString, int)), SLOT(popupClosed(QString, int)));
    18761913
    18771914    if (m_popupMenu->Create())
    18781915        m_popupStack->AddScreen(m_popupMenu);
     
    18801917    {
    18811918        delete m_popupMenu;
    18821919        m_popupMenu = NULL;
     1920        return;
    18831921    }
    18841922
    1885     m_popupMenu->SetReturnEvent(this, "slotmenu");
     1923    m_popupMenu->SetReturnEvent(this, "groupmenu");
    18861924
    18871925    m_popupMenu->AddButton(tr("Change Group Filter"),
    18881926                                 SLOT(showGroupFilter()));
     
    19141952    }
    19151953
    19161954    m_popupMenu->AddButton(tr("Help (Status Icons)"), SLOT(showIconHelp()));
     1955
     1956#if 0
     1957    if (GetFocusWidget() != m_groupList)
     1958    {
     1959        m_popupMenu->AddButton(tr("Recording Options Menu"),
     1960            SLOT(showActionsSelected()));
     1961    }
     1962#endif
    19171963}
    19181964
    19191965bool PlaybackBox::Play(const ProgramInfo &rec, bool inPlaylist)
     
    22332279
    22342280    m_popupMenu = new MythDialogBox(label, m_popupStack, "pbbmainmenupopup");
    22352281
    2236     connect(m_popupMenu, SIGNAL(Exiting()), SLOT(popupClosed()));
     2282    connect(m_popupMenu, SIGNAL(Closed(QString, int)), SLOT(popupClosed(QString, int)));
    22372283
    22382284    if (m_popupMenu->Create())
    22392285        m_popupStack->AddScreen(m_popupMenu);
     
    22412287    {
    22422288        delete m_popupMenu;
    22432289        m_popupMenu = NULL;
     2290        return;
    22442291    }
    22452292
    2246     m_popupMenu->SetReturnEvent(this, "slotmenu");
     2293    m_popupMenu->SetReturnEvent(this, "deletemenu");
    22472294
    22482295    QString tmpmessage;
    22492296    const char *tmpslot = NULL;
     
    25292576    if (!m_popupMenu)
    25302577        return false;
    25312578
    2532     connect(m_popupMenu, SIGNAL(Exiting()), SLOT(popupClosed()));
     2579    connect(m_popupMenu, SIGNAL(Closed(QString, int)), SLOT(popupClosed(QString, int)));
    25332580
    25342581    if (m_popupMenu->Create())
    25352582    {
     
    25432590        return false;
    25442591    }
    25452592
    2546     return m_popupMenu;
     2593    return true;
    25472594}
    25482595
    25492596bool PlaybackBox::CreatePopupMenuPlaylist(void)
     
    27342781    if (!CreatePopupMenu(label, pginfo))
    27352782        return;
    27362783
     2784    m_popupMenu->SetReturnEvent(this, "actionmenu");
     2785
    27372786    if ((asFileNotFound  == pginfo.availableStatus) ||
    27382787        (asZeroByte      == pginfo.availableStatus))
    27392788    {
     
    27782827                                        SLOT(showPlayFromPopup()), true);
    27792828        else
    27802829            m_popupMenu->AddButton(tr("Play"), SLOT(playSelected()));
    2781 
     2830                     
    27822831        if (m_playList.filter(pginfo.MakeUniqueKey()).size())
    27832832            m_popupMenu->AddButton(tr("Remove from Playlist"),
    27842833                                        SLOT(togglePlayListItem()));
    27852834        else
    27862835            m_popupMenu->AddButton(tr("Add to Playlist"),
    27872836                                        SLOT(togglePlayListItem()));
     2837        if (m_playList.size())
     2838        {
     2839            m_popupMenu->AddButton(tr("Playlist options"),
     2840                         SLOT(showPlaylistPopup()), true);
     2841        }
    27882842    }
    27892843
    27902844    if (pginfo.recstatus == rsRecording &&
     
    28212875            m_popupMenu->AddButton(tr("Delete"), SLOT(askDelete()));
    28222876        }
    28232877    }
     2878#if 0
     2879    m_popupMenu->AddButton(tr("Group List Menu"),
     2880                                SLOT(ShowGroupPopup()));
     2881#endif
    28242882}
    28252883
    28262884QString PlaybackBox::CreateProgramInfoString(const ProgramInfo &pginfo) const
     
    34443502
    34453503        if (action == "1" || action == "HELP")
    34463504            showIconHelp();
     3505        else if (action == "MENU")
     3506        {
     3507             if (GetFocusWidget() == m_groupList)
     3508                 ShowGroupPopup();
     3509             else
     3510             {
     3511                 ProgramInfo *pginfo = CurrentItem();
     3512                 if (pginfo)
     3513                 {
     3514                     m_helper.CheckAvailability(
     3515                         *pginfo, kCheckForMenuAction);
     3516
     3517                     if ((asPendingDelete == pginfo->availableStatus) ||
     3518                         (asPendingDelete == pginfo->availableStatus))
     3519                     {
     3520                         ShowAvailabilityPopup(*pginfo);
     3521                     }
     3522                     else
     3523                     {
     3524                         ShowActionPopup(*pginfo);
     3525                     }
     3526                 }
     3527             }
     3528        }
    34473529        else if (action == "NEXTFAV")
    34483530        {
    34493531            if (GetFocusWidget() == m_groupList)
     
    35033585                deleteSelected(m_recordingList->GetItemCurrent());
    35043586            else if (action == "PLAYBACK")
    35053587                playSelected(m_recordingList->GetItemCurrent());
    3506             else if (action == "INFO")
    3507             {
    3508                 if (GetFocusWidget() != m_groupList)
    3509                 {
    3510                     ProgramInfo *pginfo = CurrentItem();
    3511                     if (pginfo)
    3512                     {
    3513                         m_helper.CheckAvailability(
    3514                             *pginfo, kCheckForMenuAction);
    3515 
    3516                         if ((asPendingDelete == pginfo->availableStatus) ||
    3517                             (asPendingDelete == pginfo->availableStatus))
    3518                         {
    3519                             ShowAvailabilityPopup(*pginfo);
    3520                         }
    3521                         else
    3522                         {
    3523                             ShowActionPopup(*pginfo);
    3524                         }
    3525                     }
    3526                 }
    3527             }
    3528             else if (action == "DETAILS")
     3588            else if (action == "DETAILS" || action == "INFO")
    35293589                details();
    35303590            else if (action == "CUSTOMEDIT")
    35313591                customEdit();
  • programs/mythfrontend/playbackbox.h

     
    138138
    139139    void SwitchList(void);
    140140
     141    void ShowGroupPopup(void);
    141142    void customEdit();
    142143    void upcoming();
    143144    void details();
     
    169170    void ShowRecGroupChanger(bool use_playlist = false);
    170171    void ShowPlayGroupChanger(bool use_playlist = false);
    171172
    172     void popupClosed();
     173    void popupClosed(QString which, int reason);
    173174
    174175    void doPlayFromBeg();
    175176    void doPlayListRandom();
     
    316317
    317318    void ScheduleUpdateUIList(void);
    318319
    319     void ShowMenu(void);
    320 
    321320    bool CreatePopupMenu(const QString &title);
    322321    bool CreatePopupMenu(const QString &title, const ProgramInfo &pginfo)
    323322        { return CreatePopupMenu(title + CreateProgramInfoString(pginfo)); }
     
    385384    MythDialogBox      *m_popupMenu;
    386385    MythScreenStack    *m_popupStack;
    387386
    388     bool m_expectingPopup;
     387    bool m_doToggleMenu;
    389388
    390389    // Recording Group popup support
    391390    QMap<QString,QString> m_recGroupType;