Ticket #10320: dependWidgets.patch

File dependWidgets.patch, 15.6 KB (added by mythtv@…, 8 years ago)
  • mythtv/libs/libmythui/mythuicheckbox.cpp

    diff --git a/mythtv/libs/libmythui/mythuicheckbox.cpp b/mythtv/libs/libmythui/mythuicheckbox.cpp
    index 97fabce..4998473 100644
    a b void MythUICheckBox::toggleCheckState() 
    6565    if (m_CheckState)
    6666        m_CheckState->DisplayState(m_currentCheckState);
    6767
     68    emit DependChanged(!onOff);
    6869    emit toggled(onOff);
    6970    emit valueChanged();
    7071}
    void MythUICheckBox::SetCheckState(MythUIStateType::StateType state) 
    7475    m_currentCheckState = state;
    7576    m_CheckState->DisplayState(state);
    7677
     78    if (state == MythUIStateType::Off)
     79        emit DependChanged(true);
     80    else
     81        emit DependChanged(false);
    7782    emit valueChanged();
    7883}
    7984
    void MythUICheckBox::SetCheckState(bool onOff) 
    9297        m_CheckState->DisplayState(m_currentCheckState);
    9398
    9499    emit toggled(onOff);
     100    emit DependChanged(!onOff);
    95101    emit valueChanged();
    96102}
    97103
  • mythtv/libs/libmythui/mythuiimage.cpp

    diff --git a/mythtv/libs/libmythui/mythuiimage.cpp b/mythtv/libs/libmythui/mythuiimage.cpp
    index 46cd241..6eca839 100644
    a b MythUIImage::MythUIImage(const QString &filepattern, 
    533533    m_EnableInitiator = true;
    534534
    535535    d = new MythUIImagePrivate(this);
    536 
     536    emit DependChanged(false);
    537537    Init();
    538538}
    539539
    MythUIImage::MythUIImage(const QString &filename, MythUIType *parent, 
    550550    m_EnableInitiator = true;
    551551
    552552    d = new MythUIImagePrivate(this);
    553 
     553    emit DependChanged(false);
    554554    Init();
    555555}
    556556
    void MythUIImage::Reset(void) 
    629629            m_HighNum = 0;
    630630            m_animatedImage = false;
    631631        }
     632            emit DependChanged(true);
    632633
    633634        d->m_UpdateLock.unlock();
    634635        Load();
    void MythUIImage::SetFilename(const QString &filename) 
    663664{
    664665    QWriteLocker updateLocker(&d->m_UpdateLock);
    665666    m_imageProperties.filename = filename;
     667    if (filename == m_OrigFilename)
     668        emit DependChanged(true);
     669    else
     670        emit DependChanged(false);
    666671}
    667672
    668673/**
    void MythUIImage::SetFilepattern(const QString &filepattern, int low, 
    676681    m_imageProperties.filename = filepattern;
    677682    m_LowNum = low;
    678683    m_HighNum = high;
     684    if (filepattern == m_OrigFilename)
     685        emit DependChanged(true);
     686    else
     687        emit DependChanged(false);
    679688}
    680689
    681690/**
  • mythtv/libs/libmythui/mythuistatetype.cpp

    diff --git a/mythtv/libs/libmythui/mythuistatetype.cpp b/mythtv/libs/libmythui/mythuistatetype.cpp
    index 016196b..a48f55f 100644
    a b void MythUIStateType::Reset() 
    222222bool MythUIStateType::ParseElement(
    223223    const QString &filename, QDomElement &element, bool showWarnings)
    224224{
     225    QMap<QString, QString> dependsMap;
    225226    if (element.tagName() == "showempty")
    226227        m_ShowEmpty = parseBool(element);
    227228    else if (element.tagName() == "state")
    bool MythUIStateType::ParseElement( 
    239240        element.setAttribute("name", statename);
    240241
    241242        MythUIGroup *uitype = dynamic_cast<MythUIGroup *>
    242                               (ParseUIType(filename, element, "group", this, NULL, showWarnings));
     243                              (ParseUIType(filename, element, "group", this, NULL, showWarnings, dependsMap));
    243244
    244245        if (!type.isEmpty())
    245246        {
  • mythtv/libs/libmythui/mythuitext.cpp

    diff --git a/mythtv/libs/libmythui/mythuitext.cpp b/mythtv/libs/libmythui/mythuitext.cpp
    index c415ca9..2c52c5b 100644
    a b void MythUIText::Reset() 
    106106    {
    107107        SetText(m_DefaultMessage);
    108108        SetRedraw();
     109            emit DependChanged(true);
    109110    }
    110111
    111112    SetFontState("default");
    void MythUIText::SetText(const QString &text) 
    121122        return;
    122123
    123124    if (newtext.isEmpty())
     125    {
    124126        m_Message = m_DefaultMessage;
     127        emit DependChanged(true);
     128    }
    125129    else
     130    {
    126131        m_Message = newtext;
    127 
     132        emit DependChanged(false); 
     133    }
    128134    m_CutMessage.clear();
    129135    FillCutMessage();
    130136
    void MythUIText::CreateCopy(MythUIType *parent) 
    13411347    text->CopyFrom(this);
    13421348}
    13431349
     1350
    13441351void MythUIText::Finalize(void)
    13451352{
    13461353    if (m_scrolling && m_Cutdown != Qt::ElideNone)
  • mythtv/libs/libmythui/mythuitype.cpp

    diff --git a/mythtv/libs/libmythui/mythuitype.cpp b/mythtv/libs/libmythui/mythuitype.cpp
    index 3da8320..0e64c42 100644
    a b MythUIType::MythUIType(QObject *parent, const QString &name) 
    4747    m_XYDestination = QPoint(0, 0);
    4848    m_XYSpeed = QPoint(0, 0);
    4949    m_deferload = false;
     50    m_IsDependDefault = false;
    5051
    5152    m_Parent = NULL;
    5253
    void MythUIType::Refresh(void) 
    10261027    SetRedraw();
    10271028}
    10281029
     1030void MythUIType::UpdateDependState(bool isDefault)
     1031{
     1032    m_IsDependDefault = isDefault;
     1033    SetVisible(!m_IsDependDefault);
     1034}
     1035
    10291036void MythUIType::SetVisible(bool visible)
    10301037{
    10311038    if (visible == m_Visible)
    10321039        return;
    10331040
     1041    if (visible && m_IsDependDefault )
     1042        return;
     1043
    10341044    m_Visible = visible;
    10351045    SetRedraw();
    10361046
    void MythUIType::SetVisible(bool visible) 
    10401050        emit Hiding();
    10411051}
    10421052
     1053void MythUIType::SetDependIsDefault(bool isDefault)
     1054{
     1055    m_IsDependDefault = isDefault;
     1056}
    10431057void MythUIType::SetEnabled(bool enable)
    10441058{
    10451059    if (m_Enabled != enable)
  • mythtv/libs/libmythui/mythuitype.h

    diff --git a/mythtv/libs/libmythui/mythuitype.h b/mythtv/libs/libmythui/mythuitype.h
    index 50196e3..4385295 100644
    a b class MUI_PUBLIC MythUIType : public QObject, public XMLParseBase 
    166166    void SetHorizontalZoom(float zoom);
    167167    void SetVerticalZoom(float zoom);
    168168    void SetAngle(float angle);
     169    void SetDependIsDefault(bool isDefault);
    169170
    170171  protected:
    171172    virtual void customEvent(QEvent *);
    class MUI_PUBLIC MythUIType : public QObject, public XMLParseBase 
    177178    void Hide(void);
    178179    void Show(void);
    179180    void Refresh(void);
     181    void UpdateDependState(bool isDefault);
    180182
    181183  signals:
    182184    void RequestUpdate();
    class MUI_PUBLIC MythUIType : public QObject, public XMLParseBase 
    190192    void Disabling();
    191193    void FinishedMoving();
    192194    void FinishedFading();
     195    void DependChanged(bool isDefault);
    193196
    194197  protected:
    195198    virtual void DrawSelf(MythPainter *p, int xoffset, int yoffset,
    class MUI_PUBLIC MythUIType : public QObject, public XMLParseBase 
    220223    bool m_Initiator;
    221224    bool m_Vanish;
    222225    bool m_Vanished;
     226    bool m_IsDependDefault;
    223227
    224228    int m_focusOrder;
    225229
  • mythtv/libs/libmythui/xmlparsebase.cpp

    diff --git a/mythtv/libs/libmythui/xmlparsebase.cpp b/mythtv/libs/libmythui/xmlparsebase.cpp
    index fc102bb..c16ee56 100644
    a b  
    4242
    4343#define LOC      QString("XMLParseBase: ")
    4444
     45
     46
    4547QString XMLParseBase::getFirstText(QDomElement &element)
    4648{
    4749    for (QDomNode dname = element.firstChild(); !dname.isNull();
    void XMLParseBase::ClearGlobalObjectStore(void) 
    342344void XMLParseBase::ParseChildren(const QString &filename,
    343345                                 QDomElement &element,
    344346                                 MythUIType *parent,
    345                                  bool showWarnings)
     347                                 bool showWarnings,
     348                                 QMap<QString, QString> &dependsMap)
    346349{
    347350    if (!parent)
    348351    {
    void XMLParseBase::ParseChildren(const QString &filename, 
    393396                     type == "editbar" ||
    394397                     type == "video")
    395398            {
    396                 ParseUIType(filename, info, type, parent, NULL, showWarnings);
     399                ParseUIType(filename, info, type, parent, NULL, showWarnings, dependsMap);
    397400            }
    398401            else
    399402            {
    MythUIType *XMLParseBase::ParseUIType( 
    409412    QDomElement &element, const QString &type,
    410413    MythUIType *parent,
    411414    MythScreenType *screen,
    412     bool showWarnings)
     415    bool showWarnings,
     416    QMap<QString, QString> &dependsMap)
    413417{
    414418    QString name = element.attribute("name", "");
    415419    if (name.isEmpty())
    MythUIType *XMLParseBase::ParseUIType( 
    538542            uitype->CopyFrom(base);
    539543    }
    540544
     545    QString dependee = element.attribute("depends", "");
     546    if (!dependee.isEmpty())
     547        dependsMap.insert(name, dependee);
     548
    541549    QFileInfo fi(filename);
    542550    uitype->SetXMLLocation(fi.fileName(), element.lineNumber());
    543551
    MythUIType *XMLParseBase::ParseUIType( 
    584592                     info.tagName() == "video")
    585593            {
    586594                ParseUIType(filename, info, info.tagName(),
    587                             uitype, screen, showWarnings);
     595                            uitype, screen, showWarnings, dependsMap);
    588596            }
    589597            else
    590598            {
    bool XMLParseBase::LoadWindowFromXML(const QString &xmlfile, 
    659667
    660668    const QStringList searchpath = GetMythUI()->GetThemeSearchPath();
    661669    QStringList::const_iterator it = searchpath.begin();
     670    QMap<QString, QString> dependsMap;
    662671    for (; it != searchpath.end(); ++it)
    663672    {
    664673        QString themefile = *it + xmlfile;
    665674        LOG(VB_GUI, LOG_INFO, LOC + "Loading window theme from " + themefile);
    666675        if (doLoad(windowname, parent, themefile,
    667                    onlyLoadWindows, showWarnings))
     676                   onlyLoadWindows, showWarnings, dependsMap))
    668677        {
    669678            return true;
    670679        }
    bool XMLParseBase::doLoad(const QString &windowname, 
    685694                          MythUIType *parent,
    686695                          const QString &filename,
    687696                          bool onlywindows,
    688                           bool showWarnings)
     697                          bool showWarnings,
     698                          QMap<QString, QString> &dependsMap)
    689699{
    690700    QDomDocument doc;
    691701    QFile f(filename);
    bool XMLParseBase::doLoad(const QString &windowname, 
    709719    }
    710720
    711721    f.close();
     722   
     723
    712724
    713725    QDomElement docElem = doc.documentElement();
    714726    QDomNode n = docElem.firstChild();
    bool XMLParseBase::doLoad(const QString &windowname, 
    722734                QString include = getFirstText(e);
    723735
    724736                if (!include.isEmpty())
    725                     LoadBaseTheme(include);
     737                    LoadBaseTheme(include, dependsMap);
    726738            }
    727739
    728740            if (onlywindows && e.tagName() == "window")
    bool XMLParseBase::doLoad(const QString &windowname, 
    737749                }
    738750
    739751                if (!include.isEmpty())
    740                     LoadBaseTheme(include);
     752                    LoadBaseTheme(include, dependsMap);
    741753
    742754                if (name == windowname)
    743755                {
    744                     ParseChildren(filename, e, parent, showWarnings);
     756                    ParseChildren(filename, e, parent, showWarnings, dependsMap);
     757                    ConnectDependants(parent, dependsMap);
    745758                    return true;
    746759                }
    747760            }
    bool XMLParseBase::doLoad(const QString &windowname, 
    782795                         type == "editbar" ||
    783796                         type == "video")
    784797                {
    785                     ParseUIType(filename, e, type, parent, NULL, showWarnings);
     798                    ParseUIType(filename, e, type, parent, NULL, showWarnings, dependsMap);
    786799                }
    787800                else
    788801                {
    bool XMLParseBase::doLoad(const QString &windowname, 
    794807        n = n.nextSibling();
    795808    }
    796809
     810   
     811    ConnectDependants(parent, dependsMap);
    797812    if (onlywindows)
    798813        return false;
    799814    return true;
    800815}
    801816
     817void XMLParseBase::ConnectDependants(MythUIType * parent,
     818                                        QMap<QString, QString> &dependsMap)
     819{
     820
     821
     822    QMapIterator<QString, QString> i(dependsMap);
     823    while(i.hasNext()) {
     824        i.next();
     825        MythUIType * dependee = parent->GetChild(i.value());
     826        MythUIType * dependant = parent->GetChild(i.key());
     827
     828        if (dependee && dependant)
     829        {   
     830            QObject::connect(dependee, SIGNAL(DependChanged(bool)),
     831                    dependant, SLOT(UpdateDependState(bool)));
     832            dependant->UpdateDependState(true);
     833        }
     834    }
     835
     836   
     837}
    802838bool XMLParseBase::LoadBaseTheme(void)
    803839{
    804840    bool ok = false;
    bool XMLParseBase::LoadBaseTheme(void) 
    806842    bool showWarnings = true;
    807843
    808844    const QStringList searchpath = GetMythUI()->GetThemeSearchPath();
    809 
     845    QMap<QString, QString> dependsMap;
    810846    QStringList::const_iterator it = searchpath.begin();
    811847    for (; it != searchpath.end(); ++it)
    812848    {
    813849        QString themefile = *it + "base.xml";
    814850        if (doLoad(QString(), GetGlobalObjectStore(), themefile,
    815                    loadOnlyWindows, showWarnings))
     851                   loadOnlyWindows, showWarnings, dependsMap))
    816852        {
    817853            LOG(VB_GUI, LOG_INFO, LOC +
    818854                QString("Loaded base theme from '%1'").arg(themefile));
    bool XMLParseBase::LoadBaseTheme(void) 
    831867    return ok;
    832868}
    833869
    834 bool XMLParseBase::LoadBaseTheme(const QString &baseTheme)
     870bool XMLParseBase::LoadBaseTheme(const QString &baseTheme,
     871                                    QMap<QString, QString> &dependsMap)
    835872{
    836873    LOG(VB_GUI, LOG_INFO, LOC +
    837874        QString("Asked to load base file from '%1'").arg(baseTheme));
    bool XMLParseBase::LoadBaseTheme(const QString &baseTheme) 
    854891    {
    855892        QString themefile = *it + baseTheme;
    856893        if (doLoad(QString(), GetGlobalObjectStore(), themefile,
    857                    loadOnlyWindows, showWarnings))
     894                   loadOnlyWindows, showWarnings, dependsMap))
    858895        {
    859896            LOG(VB_GUI, LOG_INFO, LOC +
    860897                QString("Loaded base theme from '%1'").arg(themefile));
  • mythtv/libs/libmythui/xmlparsebase.h

    diff --git a/mythtv/libs/libmythui/xmlparsebase.h b/mythtv/libs/libmythui/xmlparsebase.h
    index cabbbb0..b4ff7eb 100644
    a b  
    22#define XMLPARSEBASE_H_
    33
    44#include <QString>
    5 
     5#include <QMap>
    66#include "mythrect.h"
    77
    88class MythUIType;
    class MUI_PUBLIC XMLParseBase 
    3939
    4040    static void ParseChildren(
    4141        const QString &filename, QDomElement &element,
    42         MythUIType *parent, bool showWarnings);
     42        MythUIType *parent, bool showWarnings, QMap<QString, QString> &dependsMap);
    4343
    4444    // parse one and return it.
    4545    static MythUIType *ParseUIType(
    4646        const QString &filename,
    4747        QDomElement &element, const QString &type,
    4848        MythUIType *parent, MythScreenType *screen,
    49         bool showWarnings);
     49        bool showWarnings,
     50        QMap<QString, QString> &dependsMap);
    5051
    5152    static bool WindowExists(const QString &xmlfile, const QString &windowname);
    5253    static bool LoadWindowFromXML(const QString &xmlfile,
    class MUI_PUBLIC XMLParseBase 
    5455                                  MythUIType *parent);
    5556
    5657    static bool LoadBaseTheme(void);
    57     static bool LoadBaseTheme(const QString &baseTheme);
     58    static bool LoadBaseTheme(const QString &baseTheme,
     59                                QMap<QString, QString> &dependsMap);
    5860
    5961    static bool CopyWindowFromBase(const QString &windowname,
    6062                                   MythScreenType *win);
    class MUI_PUBLIC XMLParseBase 
    6264  private:
    6365    static bool doLoad(const QString &windowname, MythUIType *parent,
    6466                       const QString &filename,
    65                        bool onlyLoadWindows, bool showWarnings);
     67                       bool onlyLoadWindows, bool showWarnings,
     68                       QMap<QString, QString> &dependsMap);
     69    static void ConnectDependants(MythUIType * parent,
     70                                    QMap<QString, QString> &dependsMap);
     71   
    6672};
    6773
    6874#endif