Example #1
0
void RolloutBox::setExpanded(bool expanded) {
    if (m_expanded != expanded) {
        QScrollArea *sa = 0;
        QWidget *p = parentWidget();
        while (p) {
            sa = qobject_cast<QScrollArea*>(p);
            if (sa) break;
            p = p->parentWidget();
        }

        bool areUpdatesEnabled;
        if (sa) {
            areUpdatesEnabled = updatesEnabled();
            sa->setUpdatesEnabled(false);
        }
        
        m_expanded = !m_expanded;
        QList<QWidget*> L = findChildren<QWidget*>();
        for (int i = 0; i < L.size(); ++i) {
            if ((L[i] != m_toolButton) && (L[i] != m_checkBox)) L[i]->setVisible(m_expanded);
        }
        parentWidget()->updateGeometry();

        if (sa) {
            qApp->processEvents();
            if (m_expanded) sa->ensureWidgetVisible(this);
            sa->setUpdatesEnabled(true);
        }
        
        if (m_toolButton) {
            m_toolButton->setArrowType(m_expanded? Qt::DownArrow : Qt::RightArrow);
        }

        toggled(m_expanded);
    }
}