QWidgetList OrderDialog::pagesOfContainer(const QDesignerFormEditorInterface *core, QWidget *container) { QWidgetList rc; if (QDesignerContainerExtension* ce = qt_extension<QDesignerContainerExtension*>(core->extensionManager(), container)) { const int count = ce->count(); for (int i = 0; i < count ;i ++) rc.push_back(ce->widget(i)); } return rc; }
Qt::DropAction QDesignerMimeData::execDrag(const QDesignerDnDItems &items, QWidget * dragSource) { if (items.empty()) return Qt::IgnoreAction; QDrag *drag = new QDrag(dragSource); QDesignerMimeData *mimeData = new QDesignerMimeData(items, drag); // Store pointers to widgets that are to be re-shown if a move operation is canceled QWidgetList reshowWidgets; const QDesignerDnDItems::const_iterator cend = items.constEnd(); for (QDesignerDnDItems::const_iterator it = items.constBegin(); it != cend; ++it ) if (QWidget *w = (*it)->widget()) if ((*it)->type() == QDesignerDnDItemInterface::MoveDrop) reshowWidgets.push_back(w); const Qt::DropAction executedAction = drag->exec(Qt::CopyAction|Qt::MoveAction, mimeData->proposedDropAction()); if (executedAction == Qt::IgnoreAction && !reshowWidgets.empty()) foreach (QWidget *w, reshowWidgets) w->show(); return executedAction; }
/// ///returns a widget ///it supports repeated widget names /// QWidget* getAbsoluteWidget(QStringList path) { _log::misc << "(QWidgetUtils::getAbsoluteWidget)" << std::endl; ///update the view QWidgetUtils::updateAppView(); ///get all the widgets QWidgetList qwl = qApp->allWidgets(); ///get the widget name assert ( path.size() ); QString name = path.back(); if ( name == "" ) { std::cout << "(QWidgetUtils::getAbsoluteWidget) ERROR. The name of the widget is empty." << std::endl; return NULL; } path.pop_back(); //_log::misc << "(QWidgetUtils::getAbsoluteWidget) Name = " << name.toStdString() << std::endl; ///get all widgets with this name QWidgetList qws; foreach ( QWidget *w, qwl ) { if ( getWidgetName ( w ) == name ) { qws.push_back ( w ); } } //_log::misc << "(QWidgetUtils::getAbsoluteWidget) OK" << std::endl; //if there are no selected widgets... if ( qws.size() == 0 ) { _log::misc << "(QWidgetUtils::getAbsoluteWidget) ERROR. There are no selected widgets." << std::endl; return NULL; } //_log::misc << "(QWidgetUtils::getAbsoluteWidget) OK" << std::endl; ///get the concrete widget we are looking for... int level = 1; bool onTopLevel = false; int onTopLevelCount = 0; QWidgetList::iterator qit; /*for (qit = qws.begin(); qit != qws.end(); qit++) { QWidget* w = static_cast<QWidget*> ( *qit ); _log::misc << getWidgetPath(w).toStdString() << std::endl; }*/ // while more than 1 widget remaining // or every widget has been analyzed... while ( qws.size() > 1 && onTopLevelCount < qws.size() ) { //_log::misc << "(QWidgetUtils::getAbsoluteWidget) OK -> " << qws.size() << std::endl; //for the remaining widgets... qit = qws.begin(); while ( qit != qws.end() ) { //get the parent widget QWidget* w = static_cast<QWidget*> ( *qit ); QWidget* wParent = w; assert ( wParent ); onTopLevel = false; for ( int i = 0; i < level; i++ ) { //if we are in a top level widget (with no parent node) //we have to avoid this widget if ( wParent->parent() == NULL ) { onTopLevel = true; onTopLevelCount++; break; } //if not, we go on looking for up else { wParent = static_cast<QWidget*> ( wParent->parent() ); } } //if not at top level... if ( !onTopLevel ) { //we chech the parent name and delete the //widgets whose parent name does not mach if ( getWidgetName ( wParent ) != path.back() ) { qit = qws.erase ( qit ); } else { qit++; } } else { qit++; } } //update the values level++; path.pop_back(); //stop condition (end of the search path) if ( path.size() == 0 ) break; } //_log::misc << "(QWidgetUtils::getAbsoluteWidget) OK" << std::endl; //there has to be only one element at the list if ( qws.size() != 1 ) { std::cout << "(QWidgetUtils::getAbsoluteWidget) ERROR. None or more than one widget selected. Result = " << qws.size() << std::endl; return NULL; } //if not, return the widget return qws.first(); }