⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qgslegendlayerfile.cpp

📁 一个非常好的GIS开源新版本
💻 CPP
📖 第 1 页 / 共 2 页
字号:
      // Give the table the most recent copy of the actions for this layer.      mTableDisplay->table()->setAttributeActions(actions);      // select rows which should be selected      selectionChanged();      // etablish the necessary connections between the table and the vector layer      connect(mTableDisplay->table(), SIGNAL(selected(int, bool)), mLyr.layer(), SLOT(select(int, bool)));      connect(mTableDisplay->table(), SIGNAL(selectionRemoved(bool)), mLyr.layer(), SLOT(removeSelection(bool)));      connect(mTableDisplay->table(), SIGNAL(repaintRequested()), mLyr.layer(), SLOT(triggerRepaint()));      QApplication::restoreOverrideCursor();  }}void QgsLegendLayerFile::invalidateTableDisplay(){  // from signal deleted() - table doesn't exist anymore, just erase our pointer  mTableDisplay = 0;}void QgsLegendLayerFile::selectionChanged(){  if (!mTableDisplay)    return;  QgsVectorLayer* vlayer = dynamic_cast<QgsVectorLayer*>(mLyr.layer());  const QgsFeatureIds& ids = vlayer->selectedFeaturesIds();  mTableDisplay->table()->selectRowsWithId(ids);}void QgsLegendLayerFile::closeTable(bool onlyGeometryWasChanged){  if (mTableDisplay)  {    mTableDisplay->close();    delete mTableDisplay;    mTableDisplay = NULL;  }}void QgsLegendLayerFile::saveAsShapefile(){  saveAsShapefileGeneral(FALSE);}void QgsLegendLayerFile::saveSelectionAsShapefile(){  saveAsShapefileGeneral(TRUE);}void QgsLegendLayerFile::saveAsShapefileGeneral(bool saveOnlySelection){  if (mLyr.layer()->type() != QgsMapLayer::VECTOR)    return;  QgsVectorLayer* vlayer = dynamic_cast<QgsVectorLayer*>(mLyr.layer());    // get a name for the shapefile  // Get a file to process, starting at the current directory  QSettings settings;  QString filter =  QString("Shapefiles (*.shp)");  QString dirName = settings.readEntry("/UI/lastShapefileDir", ".");  QgsEncodingFileDialog* openFileDialog = new QgsEncodingFileDialog(0,      tr("Save layer as..."),      dirName,      filter,      QString("UTF-8"));  openFileDialog->setAcceptMode(QFileDialog::AcceptSave);  // allow for selection of more than one file  //openFileDialog->setMode(QFileDialog::AnyFile);  if (openFileDialog->exec() != QDialog::Accepted)    return;        QString encoding = openFileDialog->encoding();  QString shapefileName = openFileDialog->selectedFile();  settings.writeEntry("/UI/lastShapefileDir", QFileInfo(shapefileName).absolutePath());      if (shapefileName.isNull())    return;  // add the extension if not present  if (shapefileName.find(".shp") == -1)  {    shapefileName += ".shp";  }    // overwrite the file - user will already have been prompted  // to verify they want to overwrite by the file dialog above  if (QFile::exists(shapefileName))  {      if (!QgsVectorFileWriter::deleteShapeFile(shapefileName))      {        return;      }  }  // ok if the file existed it should be deleted now so we can continue...  QApplication::setOverrideCursor(Qt::waitCursor);    QgsVectorFileWriter::WriterError error;  error = QgsVectorFileWriter::writeAsShapefile(vlayer, shapefileName, encoding, saveOnlySelection);    QApplication::restoreOverrideCursor();    switch (error)  {    case QgsVectorFileWriter::NoError:      QMessageBox::information(0, tr("Saving done"), tr("Export to Shapefile has been completed"));      break;        case QgsVectorFileWriter::ErrDriverNotFound:      QMessageBox::warning(0, tr("Driver not found"), tr("ESRI Shapefile driver is not available"));      break;      case QgsVectorFileWriter::ErrCreateDataSource:      QMessageBox::warning(0, tr("Error creating shapefile"),                           tr("The shapefile could not be created (") + shapefileName + ")");      break;        case QgsVectorFileWriter::ErrCreateLayer:      QMessageBox::warning(0, tr("Error"), tr("Layer creation failed"));      break;    case QgsVectorFileWriter::ErrAttributeTypeUnsupported:      QMessageBox::warning(0, tr("Error"),           tr("Layer attribute table contains unsupported datatype(s)"));      break;  }}void QgsLegendLayerFile::toggleEditing(){  QgsVectorLayer* vlayer = dynamic_cast<QgsVectorLayer*>(mLyr.layer());  if (!vlayer)    return;  if (!vlayer->isEditable())  {    vlayer->startEditing();    if(!(vlayer->getDataProvider()->capabilities() & QgsVectorDataProvider::AddFeatures))    {      QMessageBox::information(0,tr("Start editing failed"),        tr("Provider cannot be opened for editing"));    }    else    {      vlayer->triggerRepaint();    }  }  else  {    if(vlayer->isModified())    {      // commit or roll back?      QMessageBox::StandardButton commit = QMessageBox::information(0,tr("Stop editing"), tr("Do you want to save the changes?"), QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);        if(commit==QMessageBox::Save)      {        if(!vlayer->commitChanges())        {          QMessageBox::information(0,tr("Error"),tr("Could not commit changes"));          // Leave the in-memory editing state alone,          // to give the user a chance to enter different values          // and try the commit again later        }      }      else if(commit==QMessageBox::Discard)      {        if(!vlayer->rollBack())        {          QMessageBox::information(0,tr("Error"),            tr("Problems during roll back"));        }      }      else //cancel	{	  return;	}    }    else //layer not modified    {      vlayer->rollBack();    }    vlayer->triggerRepaint();  }  updateLegendItem();}bool QgsLegendLayerFile::isEditing(){  QgsVectorLayer* vlayer = dynamic_cast<QgsVectorLayer*>(mLyr.layer());  return vlayer && vlayer->isEditable();} void QgsLegendLayerFile::layerNameChanged(){  QString name = mLyr.layer()->name();  setText(0, name);  // set also parent's name  legend()->setName(this, name);}void QgsLegendLayerFile::addToPopupMenu(QMenu& theMenu, QAction* toggleEditingAction){  QgsMapLayer* lyr = layer();  QString iconsPath = QgsApplication::themePath();  // zoom to layer extent  theMenu.addAction(QIcon(iconsPath+QString("/mActionZoomToLayer.png")),                    tr("&Zoom to layer extent"), legend(), SLOT(legendLayerZoom()));    // show in overview  QAction* showInOverviewAction = theMenu.addAction(tr("&Show in overview"), this, SLOT(showInOverview()));  showInOverviewAction->setCheckable(true);  showInOverviewAction->blockSignals(true);  showInOverviewAction->setChecked(mLyr.inOverview());  showInOverviewAction->blockSignals(false);    // remove from canvas  theMenu.addAction(QIcon(iconsPath+QString("/mActionRemove.png")),                    tr("&Remove"), legend(), SLOT(legendLayerRemove()));  theMenu.addSeparator();  if (lyr->type() == QgsMapLayer::VECTOR)  {    QgsVectorLayer* vlayer = dynamic_cast<QgsVectorLayer*>(lyr);        // attribute table    theMenu.addAction(tr("&Open attribute table"), this, SLOT(table()));        // editing    int cap = vlayer->getDataProvider()->capabilities();    if ((cap & QgsVectorDataProvider::AddFeatures)        ||(cap & QgsVectorDataProvider::DeleteFeatures))    {      if(toggleEditingAction)	{	  theMenu.addAction(toggleEditingAction);	}    }        // save as shapefile    theMenu.addAction(tr("Save as shapefile..."), this, SLOT(saveAsShapefile()));    QAction* saveSelectionAction = theMenu.addAction(tr("Save selection as shapefile..."), this, SLOT(saveSelectionAsShapefile()));    if (vlayer->selectedFeatureCount() == 0)    {      saveSelectionAction->setEnabled(false);    }    theMenu.addSeparator();  }  else if (lyr->type() == QgsMapLayer::RASTER)  {    // TODO: what was this for?    //QgsRasterLayer* rlayer = dynamic_cast<QgsRasterLayer*>(lyr);    //theMenu.addAction(tr("&Convert to..."), rlayer, SLOT(convertTo()));  }       // properties goes on bottom of menu for consistency with normal ui standards  // e.g. kde stuff  theMenu.addAction(tr("&Properties"), legend(), SLOT(legendLayerShowProperties()));}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -