Ticket #10332: MythUIButtonListItem_disable.diff

File MythUIButtonListItem_disable.diff, 9.4 KB (added by Xavier Hervy <xavier.hervy@…>, 15 years ago)
  • mythtv/libs/libmythui/mythuibuttonlist.cpp

    diff --git a/mythtv/libs/libmythui/mythuibuttonlist.cpp b/mythtv/libs/libmythui/mythuibuttonlist.cpp
    index 3601fab..d61ee24 100644
    a b void MythUIButtonList::SetValueByData(QVariant data)  
    14981498
    14991499void MythUIButtonList::SetItemCurrent(MythUIButtonListItem *item)
    15001500{
     1501    if (!item->isEnabled()) return;
    15011502    int newIndex = m_itemList.indexOf(item);
    15021503    SetItemCurrent(newIndex);
    15031504}
    void MythUIButtonList::SetItemCurrent(int current, int topPosition)  
    15101511    if (current == -1 || current >= m_itemList.size())
    15111512        return;
    15121513
     1514    if (!m_itemList.at(current)->isEnabled()) return;
     1515
    15131516    if (current == m_selPosition &&
    15141517        (topPosition == -1 || topPosition == m_topPosition))
    15151518        return;
    bool MythUIButtonList::MoveUp(MovementUnit unit, uint amount)  
    18861889            else if (m_wrapStyle == WrapCaptive)
    18871890                return true;
    18881891
     1892            findEnabledUp(unit);
     1893
    18891894            break;
    18901895
    18911896        case MoveColumn:
    bool MythUIButtonList::MoveUp(MovementUnit unit, uint amount)  
    19001905                m_selPosition = pos + (m_columns - 1);
    19011906            else if (m_wrapStyle == WrapCaptive)
    19021907                return true;
     1908            findEnabledUp(unit);
    19031909
    19041910            break;
    19051911
    bool MythUIButtonList::MoveUp(MovementUnit unit, uint amount)  
    19281934            }
    19291935            else if (m_wrapStyle == WrapCaptive)
    19301936                return true;
     1937            findEnabledUp(unit);
    19311938
    19321939            break;
    19331940
    bool MythUIButtonList::MoveUp(MovementUnit unit, uint amount)  
    19361943                m_selPosition = qMax(0, m_selPosition - (int)m_itemsVisible);
    19371944            else
    19381945                m_selPosition = PageUp();
     1946            findEnabledUp(unit);
    19391947
    19401948            break;
    19411949
    19421950        case MoveMid:
    19431951            m_selPosition = (int)(m_itemList.size() / 2);
     1952            findEnabledDown(unit);
    19441953            break;
    19451954
    19461955        case MoveMax:
    19471956            m_selPosition = 0;
     1957            findEnabledDown(unit);
    19481958            break;
    19491959
    19501960        case MoveByAmount:
    bool MythUIButtonList::MoveUp(MovementUnit unit, uint amount)  
    19551965                else if (m_wrapStyle > WrapNone)
    19561966                    m_selPosition = m_itemList.size() - 1;
    19571967            }
     1968            findEnabledUp(unit);
    19581969
    19591970            break;
    19601971    }
    bool MythUIButtonList::MoveUp(MovementUnit unit, uint amount)  
    19721983    return true;
    19731984}
    19741985
     1986
     1987/**
     1988 * If the current item is not enabled, find the next enabled one
     1989 */
     1990void MythUIButtonList::findEnabledDown(MovementUnit unit)
     1991{
     1992    if (m_selPosition<0 || m_selPosition >= m_itemList.size()
     1993            || m_itemList.at(m_selPosition)->isEnabled())
     1994        return;
     1995
     1996    int step = (unit=MoveRow)?m_columns:1;
     1997    if (unit == MoveRow && m_wrapStyle == WrapFlowing)unit=MoveItem;
     1998    if (unit == MoveColumn)
     1999    {
     2000        while ((m_selPosition + 1) % m_columns > 0 && !m_itemList.at(m_selPosition)->isEnabled())
     2001            ++m_selPosition;
     2002
     2003        if (m_itemList.at(m_selPosition)->isEnabled()) return;
     2004        if (m_wrapStyle > WrapNone)
     2005        {
     2006            m_selPosition = m_selPosition - (m_columns - 1);
     2007            while ((m_selPosition + 1) % m_columns > 0 && !m_itemList.at(m_selPosition)->isEnabled())
     2008                ++m_selPosition;
     2009        }
     2010    }
     2011    else
     2012    {
     2013
     2014        while (!m_itemList.at(m_selPosition)->isEnabled()
     2015                &&  (m_selPosition < m_itemList.size() - step))
     2016            m_selPosition+=step;
     2017
     2018        if (!m_itemList.at(m_selPosition)->isEnabled() && m_wrapStyle > WrapNone)
     2019        {
     2020            m_selPosition=(m_selPosition+step)%m_itemList.size();
     2021
     2022            while (!m_itemList.at(m_selPosition)->isEnabled()
     2023                                &&  (m_selPosition < m_itemList.size() - step))
     2024                m_selPosition+=step;
     2025        }
     2026    }
     2027}
     2028
     2029void MythUIButtonList::findEnabledUp(MovementUnit unit)
     2030{
     2031    if (m_selPosition<0 || m_selPosition >= m_itemList.size()
     2032            || m_itemList.at(m_selPosition)->isEnabled())
     2033        return;
     2034
     2035    int step = (unit=MoveRow)?m_columns:1;
     2036    if (unit == MoveRow && m_wrapStyle == WrapFlowing)unit=MoveItem;
     2037    if (unit == MoveColumn)
     2038    {
     2039        while ((m_selPosition + 1) % m_columns > 0 && !m_itemList.at(m_selPosition)->isEnabled())
     2040            ++m_selPosition;
     2041
     2042        if (m_itemList.at(m_selPosition)->isEnabled()) return;
     2043        if (m_wrapStyle > WrapNone)
     2044        {
     2045            m_selPosition = m_selPosition - (m_columns - 1);
     2046            while ((m_selPosition + 1) % m_columns > 0 && !m_itemList.at(m_selPosition)->isEnabled())
     2047                ++m_selPosition;
     2048        }
     2049    }
     2050    else
     2051    {
     2052        while (!m_itemList.at(m_selPosition)->isEnabled()
     2053                &&  (m_selPosition < m_itemList.size() - step))
     2054            m_selPosition-=step;
     2055
     2056        if (!m_itemList.at(m_selPosition)->isEnabled() && m_wrapStyle > WrapNone)
     2057        {
     2058            m_selPosition=(m_selPosition+step)%m_itemList.size();
     2059
     2060            while (!m_itemList.at(m_selPosition)->isEnabled()
     2061                                &&  (m_selPosition < m_itemList.size() - step))
     2062                m_selPosition+=step;
     2063        }
     2064    }
     2065}
     2066
     2067
    19752068bool MythUIButtonList::MoveDown(MovementUnit unit, uint amount)
    19762069{
    19772070    int pos = m_selPosition;
    bool MythUIButtonList::MoveDown(MovementUnit unit, uint amount)  
    19882081                m_selPosition = 0;
    19892082            else if (m_wrapStyle == WrapCaptive)
    19902083                return true;
     2084            findEnabledDown(unit);
    19912085
    19922086            break;
    19932087
    bool MythUIButtonList::MoveDown(MovementUnit unit, uint amount)  
    20032097                m_selPosition = pos - (m_columns - 1);
    20042098            else if (m_wrapStyle == WrapCaptive)
    20052099                return true;
     2100            findEnabledDown(unit);
    20062101
    20072102            break;
    20082103
    bool MythUIButtonList::MoveDown(MovementUnit unit, uint amount)  
    20232118                m_selPosition = (pos % m_columns);
    20242119            else if (m_wrapStyle == WrapCaptive)
    20252120                return true;
    2026 
     2121            findEnabledDown(unit);
    20272122            break;
    20282123
    20292124        case MovePage:
    bool MythUIButtonList::MoveDown(MovementUnit unit, uint amount)  
    20322127                                     m_selPosition + (int)m_itemsVisible);
    20332128            else
    20342129                m_selPosition = PageDown();
    2035 
     2130            findEnabledDown(unit);
    20362131            break;
    20372132
    20382133        case MoveMax:
    20392134            m_selPosition = m_itemCount - 1;
     2135            findEnabledUp(unit);
    20402136            break;
    20412137
    20422138        case MoveByAmount:
    bool MythUIButtonList::MoveDown(MovementUnit unit, uint amount)  
    20472143                else if (m_wrapStyle > WrapNone)
    20482144                    m_selPosition = 0;
    20492145            }
     2146            findEnabledDown(unit);
    20502147
    20512148            break;
    20522149    }
    bool MythUIButtonList::keyPressEvent(QKeyEvent *e)  
    23852482        {
    23862483            MythUIButtonListItem *item = GetItemCurrent();
    23872484
    2388             if (item)
     2485            if (item && item->isEnabled())
    23892486                emit itemClicked(item);
    23902487        }
    23912488        else if (action == "SEARCH")
    MythUIButtonListItem::MythUIButtonListItem(MythUIButtonList *lbtype,  
    28862983    m_checkable = checkable;
    28872984    m_state     = state;
    28882985    m_showArrow = showArrow;
     2986    m_enabled   = true;
     2987
    28892988    m_data      = 0;
    28902989
    28912990    if (state >= NotChecked)
    MythUIButtonListItem::MythUIButtonListItem(MythUIButtonList *lbtype,  
    29113010    m_checkable = false;
    29123011    m_state     = CantCheck;
    29133012    m_showArrow = false;
     3013    m_enabled   = true;
    29143014
    29153015    if (m_parent)
    29163016        m_parent->InsertItem(this, listPosition);
    void MythUIButtonListItem::setDrawArrow(bool flag)  
    32253325    m_showArrow = flag;
    32263326}
    32273327
     3328bool MythUIButtonListItem::isEnabled() const
     3329{
     3330    return m_enabled;
     3331}
     3332void MythUIButtonListItem::setEnabled(bool flag)
     3333{
     3334    m_enabled = flag;
     3335}
     3336
    32283337void MythUIButtonListItem::SetData(QVariant data)
    32293338{
    32303339    m_data = data;
    void MythUIButtonListItem::SetToRealButton(MythUIStateType *button, bool selecte  
    32503359
    32513360    QString state;
    32523361
    3253     if (selected)
     3362    if (!m_enabled)
     3363    {
     3364        state = m_parent->m_active ? "disabledactive" : "disabledinactive";
     3365    }
     3366    else if (selected)
    32543367    {
    32553368        button->MoveToTop();
    32563369        state = m_parent->m_active ? "selectedactive" : "selectedinactive";
  • mythtv/libs/libmythui/mythuibuttonlist.h

    diff --git a/mythtv/libs/libmythui/mythuibuttonlist.h b/mythtv/libs/libmythui/mythuibuttonlist.h
    index 81115ee..bf6e850 100644
    a b class MUI_PUBLIC MythUIButtonListItem  
    7272    bool checkable() const;
    7373    void setCheckable(bool flag);
    7474
     75    bool isEnabled() const;
     76    void setEnabled(bool flag);
     77
    7578    CheckState state() const;
    7679    void setChecked(CheckState state);
    7780
    class MUI_PUBLIC MythUIButtonListItem  
    9497    CheckState      m_state;
    9598    QVariant        m_data;
    9699    bool            m_showArrow;
     100    bool            m_enabled;
    97101
    98102    QMap<QString, TextProperties> m_strings;
    99103    QMap<QString, MythImage*> m_images;
    class MUI_PUBLIC MythUIButtonList : public MythUIType  
    234238
    235239    bool DoFind(bool doMove, bool searchForward);
    236240
     241    void findEnabledUp(MovementUnit unit);
     242    void findEnabledDown(MovementUnit unit);
     243
    237244    /* methods for subclasses to override */
    238245    virtual void CalculateVisibleItems(void);
    239246    virtual QPoint GetButtonPosition(int column, int row) const;