// Handle the getting of a lazy attribute, ie. a native Qt signal. int qpycore_get_lazy_attr(const sipTypeDef *td, PyObject *dict) { pyqt4ClassTypeDef *ctd = (pyqt4ClassTypeDef *)td; const pyqt4QtSignal *sigs = ctd->qt4_signals; // Handle the trvial case. if (!sigs) return 0; QByteArray curr_name; qpycore_pyqtSignal *curr = 0; do { // See if we have come to the end of the current signal. if (curr && !is_signal_name(sigs->signature, curr_name.constData(), curr_name.size())) { if (PyDict_SetItemString(dict, curr_name.constData(), (PyObject *)curr) < 0) return -1; curr = 0; } // See if we need to create a new signal. if (!curr) { // Get the name. curr_name = sigs->signature; curr_name.truncate(curr_name.indexOf('(')); curr = (qpycore_pyqtSignal *)PyType_GenericAlloc(&qpycore_pyqtSignal_Type, 0); if (!curr) return -1; curr->master = curr; curr->non_signals = sigs->non_signals; curr->overloads = new QList<Chimera::Signature *>; } // Add the new overload. if (add_overload(curr, sigs->signature, sigs->docstring) < 0) { Py_DECREF((PyObject *)curr); return -1; } } while ((++sigs)->signature); // Save the last one. return PyDict_SetItemString(dict, curr_name.constData(), (PyObject *)curr); }
// Handle the getting of a lazy attribute, ie. a native Qt signal. int qpycore_get_lazy_attr(const sipTypeDef *td, PyObject *dict) { const pyqt5QtSignal *sigs = reinterpret_cast<const pyqt5ClassPluginDef *>( sipTypePluginData(td))->qt_signals; // Handle the trvial case. if (!sigs) return 0; QByteArray default_name; qpycore_pyqtSignal *default_signal = 0; do { // See if we have come to the end of the current signal. if (default_signal && !is_signal_name(sigs->signature, default_name)) { if (PyDict_SetItemString(dict, default_name.constData(), (PyObject *)default_signal) < 0) return -1; default_signal = 0; } bool fatal; qpycore_pyqtSignal *sig = qpycore_pyqtSignal_New(sigs->signature, &fatal); if (!sig) { if (fatal) return -1; PyErr_Clear(); continue; } sig->docstring = sigs->docstring; sig->emitter = sigs->emitter; // See if this is a new default. if (default_signal) { sig->default_signal = default_signal; append_overload(sig); } else { sig->non_signals = sigs->non_signals; default_signal = sig->default_signal = sig; default_name = sigs->signature; default_name.truncate(default_name.indexOf('(')); } } while ((++sigs)->signature); // Save the last one, if any (in case of a non-fatal error). if (!default_signal) return 0; return PyDict_SetItemString(dict, default_name.constData(), (PyObject *)default_signal); }
// Handle the getting of a lazy attribute, ie. a native Qt signal. int qpycore_get_lazy_attr(const sipTypeDef *td, PyObject *dict) { pyqt4ClassTypeDef *ctd = (pyqt4ClassTypeDef *)td; const pyqt4QtSignal *sigs = ctd->qt4_signals; // Handle the trvial case. if (!sigs) return 0; QByteArray default_name; qpycore_pyqtSignal *default_signal = 0; do { // See if we have come to the end of the current signal. if (default_signal && !is_signal_name(sigs->signature, default_name.constData(), default_name.size())) { if (PyDict_SetItemString(dict, default_name.constData(), (PyObject *)default_signal) < 0) return -1; default_signal = 0; } bool fatal; qpycore_pyqtSignal *sig = qpycore_pyqtSignal_New(sigs->signature, &fatal); if (!sig) { if (fatal) return -1; PyErr_Clear(); continue; } sig->docstring = sigs->docstring; // See if this is a new default. if (default_signal) { sig->default_signal = default_signal; append_overload(sig); } else { sig->non_signals = sigs->non_signals; default_signal = sig->default_signal = sig; // Get the name. default_name = sig->signature->name().mid(1); } } while ((++sigs)->signature); // Save the last one, if any (in case of a non-fatal error). if (!default_signal) return 0; return PyDict_SetItemString(dict, default_name.constData(), (PyObject *)default_signal); }