void ComboBox::createMenu() { if (!_cascading) { _rootNode->isMenu->clear(); for (U32 i = 0; i < _rootNode->children.size(); ++i) { _rootNode->children[i]->isLeaf->setEnabled( _enabled && !_readOnly ); _rootNode->isMenu->addAction(_rootNode->children[i]->isLeaf); for (U32 j = 0; j < _separators.size(); ++j) { if (_separators[j] == (int)i) { _rootNode->isMenu->addSeparator(); break; } } } } else { setEnabledRecursive( _enabled && !_readOnly, _rootNode.get() ); } QAction* triggered = _rootNode->isMenu->exec( this->mapToGlobal( QPoint( 0, height() ) ) ); if (triggered) { QVariant data = triggered->data(); if ( data.toString() != QString::fromUtf8("New") ) { setCurrentIndex( data.toInt() ); } else { Q_EMIT itemNewSelected(); } } _clicked = false; if (focusPolicy() != Qt::NoFocus) { setFocus(); } update(); }
void setEnabledRecursive(QLayout *layout, bool enabled) { while (QLayoutItem* item = layout->takeAt(0)) { if (QWidget* widget = item->widget()) widget->setEnabled(enabled); if (QLayout* childLayout = item->layout()) setEnabledRecursive(childLayout, enabled); } }
static void setEnabledRecursive(bool enabled, ComboBoxMenuNode* node) { if (node->isLeaf) { node->isLeaf->setEnabled(enabled); } else { assert(node->isMenu); for (std::size_t i = 0; i < node->children.size(); ++i) { setEnabledRecursive( enabled, node->children[i].get() ); } } }