void ConnectionEditor::signalChanged() { QCString signal = signalBox->currentText().latin1(); if ( !signal.data() ) return; signal = normalizeSignalSlot( signal.data() ); slotBox->clear(); if ( signalBox->currentText().isEmpty() ) return; int n = receiver->metaObject()->numSlots( TRUE ); for( int i = 0; i < n; ++i ) { // accept only public slots. For the form window, also accept protected slots QMetaData* md = receiver->metaObject()->slot( i, TRUE ); if ( ( (receiver->metaObject()->slot_access( i, TRUE ) == QMetaData::Public) || ( formWindow->isMainContainer( (QWidget*)receiver ) && receiver->metaObject()->slot_access(i, TRUE) == QMetaData::Protected) ) && !ignoreSlot( md->name ) && checkConnectArgs( signal.data(), receiver, md->name ) ) slotBox->insertItem( md->name ); } if ( formWindow->isMainContainer( (QWidget*)receiver ) ) { QValueList<MetaDataBase::Slot> moreSlots = MetaDataBase::slotList( formWindow ); if ( !moreSlots.isEmpty() ) { for ( QValueList<MetaDataBase::Slot>::Iterator it = moreSlots.begin(); it != moreSlots.end(); ++it ) { QCString s = (*it).slot; if ( !s.data() ) continue; s = normalizeSignalSlot( s.data() ); if ( checkConnectArgs( signal.data(), receiver, s ) ) slotBox->insertItem( QString( (*it).slot ) ); } } } if ( receiver->inherits( "CustomWidget" ) ) { MetaDataBase::CustomWidget *w = ( (CustomWidget*)receiver )->customWidget(); for ( QValueList<MetaDataBase::Slot>::Iterator it = w->lstSlots.begin(); it != w->lstSlots.end(); ++it ) { QCString s = (*it).slot; if ( !s.data() ) continue; s = normalizeSignalSlot( s.data() ); if ( checkConnectArgs( signal.data(), receiver, s ) ) slotBox->insertItem( QString( (*it).slot ) ); } } slotsChanged(); }
void ConnectionEditor::updateConnectButton() { bool itemsSelected = signalBox->currentItem() != -1 && slotBox->currentItem() != -1; bool notConnected = !itemsSelected || !hasConnection(m_sender->name(), signalBox->currentText(), m_receiver->name(), slotBox->currentText()); bool connectionAllowed = notConnected && checkConnectArgs(MetaDataBase::normalizeSlot(signalBox->currentText()).latin1(), m_receiver, MetaDataBase::normalizeSlot(slotBox->currentText()).latin1()); connectButton->setEnabled(itemsSelected && notConnected && connectionAllowed); }
bool ConnectionEditor::isSlotIgnored(const QMetaData* md) { if (md->access != QMetaData::Public && (md->access != QMetaData::Protected || !m_formWindow->isMainContainer((QWidget*)m_receiver))) return true; for (int i = 0; ignore_slots[i]; i++) if (!qstrcmp(md->name, ignore_slots[i])) return true; if (!m_formWindow->isMainContainer((QWidget *)m_receiver) && !qstrcmp(md->name, "close()")) return true; if (!qstrcmp(md->name, "setFocus()") && m_receiver->isWidgetType() && ((QWidget*)m_receiver)->focusPolicy() == QWidget::NoFocus) return true; for (int i = 0; i<comboSender->count(); i++) if (checkConnectArgs(MetaDataBase::normalizeSlot(signalBox->text(i)).latin1(), m_receiver, md->name)) return false; return true; }