Qtilities::Core::Interfaces::IExportable::ExportResultFlags Qtilities::Core::ObserverHints::exportBinary(QDataStream& stream) const { IExportable::ExportResultFlags version_check_result = IExportable::validateQtilitiesExportVersion(exportVersion(),exportTask()); if (version_check_result != IExportable::VersionSupported) return version_check_result; stream << (quint32) d->observer_selection_context; stream << (quint32) d->naming_control; stream << (quint32) d->activity_display; stream << (quint32) d->activity_control; stream << (quint32) d->item_selection_control; stream << (quint32) d->hierarhical_display; stream << (quint32) d->display_flags; stream << (quint32) d->item_view_column_hint; stream << (quint32) d->action_hints; stream << (quint32) d->drag_drop_flags; stream << (quint32) d->modification_state_display; // ----------------------------------- // Start of specific to Qtilities v1.1: // ----------------------------------- if (exportVersion() == Qtilities::Qtilities_1_1) { stream << (quint32) d->category_editing_flags; } // ----------------------------------- // End of specific to Qtilities v1.1: // ----------------------------------- stream << (quint32) d->displayed_categories.count(); for (int i = 0; i < d->displayed_categories.count(); i++) d->displayed_categories.at(i).exportBinary(stream); stream << d->has_inversed_category_display; stream << d->category_filter_enabled; return IExportable::Complete; }
Qtilities::Core::Interfaces::IExportable::ExportResultFlags Qtilities::Core::ObserverHints::importBinary(QDataStream& stream, QList<QPointer<QObject> >& import_list) { Q_UNUSED(import_list) IExportable::ExportResultFlags version_check_result = IExportable::validateQtilitiesImportVersion(exportVersion(),exportTask()); if (version_check_result != IExportable::VersionSupported) return version_check_result; quint32 qi32; stream >> qi32; d->observer_selection_context = ObserverHints::ObserverSelectionContext (qi32); stream >> qi32; d->naming_control = ObserverHints::NamingControl (qi32); stream >> qi32; d->activity_display = ObserverHints::ActivityDisplay (qi32); stream >> qi32; d->activity_control = ObserverHints::ActivityControl (qi32); stream >> qi32; d->item_selection_control = ObserverHints::ItemSelectionControl (qi32); stream >> qi32; d->hierarhical_display = ObserverHints::HierarchicalDisplay (qi32); stream >> qi32; d->display_flags = ObserverHints::DisplayFlags (qi32); stream >> qi32; d->item_view_column_hint = ObserverHints::ItemViewColumnFlags (qi32); stream >> qi32; d->action_hints = ObserverHints::ActionHints (qi32); stream >> qi32; d->drag_drop_flags = ObserverHints::DragDropFlags (qi32); stream >> qi32; d->modification_state_display = ObserverHints::ModificationStateDisplayHint (qi32); // ----------------------------------- // Start of specific to Qtilities v1.1: // ----------------------------------- if (exportVersion() == Qtilities::Qtilities_1_1) { stream >> qi32; d->category_editing_flags = ObserverHints::CategoryEditingFlags (qi32); }
bool QgsPGConnectionItem::handleDrop( const QMimeData *data, const QString &toSchema ) { if ( !QgsMimeDataUtils::isUriList( data ) ) return false; // TODO: probably should show a GUI with settings etc QgsDataSourceUri uri = QgsPostgresConn::connUri( mName ); QStringList importResults; bool hasError = false; QgsMimeDataUtils::UriList lst = QgsMimeDataUtils::decodeUriList( data ); const auto constLst = lst; for ( const QgsMimeDataUtils::Uri &u : constLst ) { // open the source layer bool owner; QString error; QgsVectorLayer *srcLayer = u.vectorLayer( owner, error ); if ( !srcLayer ) { importResults.append( tr( "%1: %2" ).arg( u.name, error ) ); hasError = true; continue; } if ( srcLayer->isValid() ) { uri.setDataSource( QString(), u.name, srcLayer->geometryType() != QgsWkbTypes::NullGeometry ? QStringLiteral( "geom" ) : QString() ); QgsDebugMsg( "URI " + uri.uri( false ) ); if ( !toSchema.isNull() ) { uri.setSchema( toSchema ); } QVariantMap options; options.insert( QStringLiteral( "forceSinglePartGeometryType" ), true ); std::unique_ptr< QgsVectorLayerExporterTask > exportTask( new QgsVectorLayerExporterTask( srcLayer, uri.uri( false ), QStringLiteral( "postgres" ), srcLayer->crs(), options, owner ) ); // when export is successful: connect( exportTask.get(), &QgsVectorLayerExporterTask::exportComplete, this, [ = ]() { // this is gross - TODO - find a way to get access to messageBar from data items QMessageBox::information( nullptr, tr( "Import to PostGIS database" ), tr( "Import was successful." ) ); refreshSchema( toSchema ); } ); // when an error occurs: connect( exportTask.get(), &QgsVectorLayerExporterTask::errorOccurred, this, [ = ]( int error, const QString & errorMessage ) { if ( error != QgsVectorLayerExporter::ErrUserCanceled ) { QgsMessageOutput *output = QgsMessageOutput::createMessageOutput(); output->setTitle( tr( "Import to PostGIS database" ) ); output->setMessage( tr( "Failed to import some layers!\n\n" ) + errorMessage, QgsMessageOutput::MessageText ); output->showMessage(); } refreshSchema( toSchema ); } ); QgsApplication::taskManager()->addTask( exportTask.release() ); } else { importResults.append( tr( "%1: Not a valid layer!" ).arg( u.name ) ); hasError = true; } } if ( hasError ) { QgsMessageOutput *output = QgsMessageOutput::createMessageOutput(); output->setTitle( tr( "Import to PostGIS database" ) ); output->setMessage( tr( "Failed to import some layers!\n\n" ) + importResults.join( QStringLiteral( "\n" ) ), QgsMessageOutput::MessageText ); output->showMessage(); } return true; }