コード例 #1
0
ファイル: ObserverHints.cpp プロジェクト: austinsc/Qtilities
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;
}
コード例 #2
0
ファイル: ObserverHints.cpp プロジェクト: austinsc/Qtilities
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);
    }
コード例 #3
0
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;
}