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

📄 qgscomposervectorlegend.cpp

📁 一个非常好的GIS开源新版本
💻 CPP
📖 第 1 页 / 共 2 页
字号:
  }  return QRectF ( 0, 0, width, height);}void QgsComposerVectorLegend::cache ( void ){    std::cout << "QgsComposerVectorLegend::cache()" << std::endl;//typical boundingRect size is 15 units wide,    mCachePixmap.resize ((int)QGraphicsRectItem::rect().width(), (int)QGraphicsRectItem::rect().height() );    QPainter p(&mCachePixmap);        mCachePixmap.fill(QColor(255,255,255));    render ( &p );    p.end();    mNumCachedLayers = mMapCanvas->layerCount();    mCacheUpdated = true;    }void QgsComposerVectorLegend::paint( QPainter* painter, const QStyleOptionGraphicsItem* itemStyle, QWidget* pWidget ){#ifdef QGISDEBUG  std::cout << "paint mPlotStyle = " << plotStyle() << " mPreviewMode = " << mPreviewMode << std::endl;#endif  if ( plotStyle() == QgsComposition::Preview && mPreviewMode == Cache )  {    if ( !mCacheUpdated || mMapCanvas->layerCount() != mNumCachedLayers ) //If the cache is out of date, update it.    {      cache();    }    painter->drawPixmap(0,0, mCachePixmap);  }  else if(plotStyle() == QgsComposition::Preview && mPreviewMode == Rectangle)  {    QPen pen(QColor(0,0,0), 0.5);    painter->setPen( pen );    painter->setBrush( QBrush( QColor(255,255,255), Qt::NoBrush)); //use SolidPattern instead?    painter->drawRect(QRectF(0, 0, QGraphicsRectItem::rect().width(), QGraphicsRectItem::rect().height()));  }  else if ( (plotStyle() == QgsComposition::Preview && mPreviewMode == Render) ||               plotStyle() == QgsComposition::Print ||              plotStyle() == QgsComposition::Postscript )   //We're in render preview mode or printing, so do a full render of the legend.   {    painter->save();    render(painter);    painter->restore();  }  // Draw the "selected highlight" boxes  if ( mSelected && plotStyle() == QgsComposition::Preview ) {    painter->setPen( mComposition->selectionPen() );    painter->setBrush( mComposition->selectionBrush() );      double s = mComposition->selectionBoxSize();    painter->drawRect(QRectF(0, 0, s, s)); //top left    painter->drawRect(QRectF(QGraphicsRectItem::rect().width()-s, 0, s, s)); //top right    painter->drawRect(QRectF(QGraphicsRectItem::rect().width()-s, QGraphicsRectItem::rect().height()-s, s, s)); //bottom right    painter->drawRect(QRectF(0, QGraphicsRectItem::rect().height()-s, s, s)); //bottom left  }}void QgsComposerVectorLegend::on_mFontButton_clicked ( void ) {  bool result;  mFont = QFontDialog::getFont(&result, mFont, this );  if ( result ) {    recalculate();    QGraphicsRectItem::update();    QGraphicsRectItem::scene()->update();    writeSettings();  }}void QgsComposerVectorLegend::on_mTitleLineEdit_editingFinished ( void ){    mTitle = mTitleLineEdit->text();    recalculate();    QGraphicsRectItem::update();    QGraphicsRectItem::scene()->update();    writeSettings();}void QgsComposerVectorLegend::on_mPreviewModeComboBox_activated ( int i ){    mPreviewMode = (PreviewMode) i;    std::cout << "mPreviewMode = " << mPreviewMode << std::endl;    writeSettings();}void QgsComposerVectorLegend::on_mMapComboBox_activated ( int i ){    mMap = mMaps[i];    recalculate();    QGraphicsRectItem::update();    QGraphicsRectItem::scene()->update();    writeSettings();}void QgsComposerVectorLegend::mapChanged ( int id ){    if ( id != mMap ) return;    recalculate();    QGraphicsRectItem::update();    QGraphicsRectItem::scene()->update();}void QgsComposerVectorLegend::on_mFrameCheckBox_stateChanged ( int ){    mFrame = mFrameCheckBox->isChecked();    QGraphicsRectItem::update();    QGraphicsRectItem::scene()->update();    writeSettings();}void QgsComposerVectorLegend::recalculate ( void ) {    std::cout << "QgsComposerVectorLegend::recalculate" << std::endl;        // Recalculate sizes according to current font size        // Title and section font     mTitleFont = mFont;    mTitleFont.setPointSizeFloat ( 1.4 * mFont.pointSizeFloat());    mSectionFont = mFont;    mSectionFont.setPointSizeFloat ( 1.2 * mFont.pointSizeFloat() );        std::cout << "font size = " << mFont.pointSizeFloat() << std::endl;    std::cout << "title font size = " << mTitleFont.pointSizeFloat() << std::endl;    // Font size in canvas units    float size = 25.4 * mComposition->scale() * mFont.pointSizeFloat() / 72;    mMargin = 0.9 * size;    mSymbolHeight = 1.3 * size;    mSymbolWidth = 3.5 * size;    mSymbolSpace = 0.4 * size;    std::cout << "mMargin = " << mMargin << " mSymbolHeight = " << mSymbolHeight              << "mSymbolWidth = " << mSymbolWidth << " mSymbolSpace = " << mSymbolSpace << std::endl;         QRectF r = render(0);    QGraphicsRectItem::setRect(0, 0, r.width(), r.height() );        mCacheUpdated = false;}void QgsComposerVectorLegend::setOptions ( void ){   mTitleLineEdit->setText( mTitle );      // Maps  mMapComboBox->clear();  std::vector<QgsComposerMap*> maps = mComposition->maps();  mMaps.clear();      bool found = false;  mMapComboBox->insertItem ( "", 0 );  mMaps.push_back ( 0 );  for ( int i = 0; i < (int)maps.size(); i++ ) {    mMapComboBox->insertItem ( maps[i]->name(), i+1 );    mMaps.push_back ( maps[i]->id() );    if ( maps[i]->id() == mMap ) {      found = true;      mMapComboBox->setCurrentItem ( i+1 );    }  }  if ( ! found ) {    mMap = 0;    mMapComboBox->setCurrentItem ( 0 );  }  mFrameCheckBox->setChecked ( mFrame );      // Layers  mLayersListView->clear();  if ( mMap != 0 ) {    QgsComposerMap *map = mComposition->map ( mMap );    if ( map ) {      int nlayers = mMapCanvas->layerCount();      for ( int i = 0; i < nlayers; i++ ) {        QgsMapLayer *layer = mMapCanvas->getZpos(i);    //        if ( !layer->visible() ) continue;        //if ( layer->type() != QgsMapLayer::VECTOR ) continue;        Q3CheckListItem *li = new Q3CheckListItem ( mLayersListView, layer->name(), Q3CheckListItem::CheckBox );        QString id = layer->getLayerID();        li->setText(2, id );        li->setOn ( layerOn(id) );            int group = layerGroup(id);        if ( group > 0 ) {          li->setText(1, QString::number(group) );        }        mLayersListView->insertItem ( li );      }    }  }  mPreviewModeComboBox->setCurrentItem( mPreviewMode );}void QgsComposerVectorLegend::setSelected (  bool s ) {    mSelected = s;    QGraphicsRectItem::update(); // show highlight}    bool QgsComposerVectorLegend::selected( void ){    return mSelected;}void QgsComposerVectorLegend::showLayersPopupMenu ( Q3ListViewItem * lvi, const QPoint & pt, int ){    std::cout << "QgsComposerVectorLegend::showLayersPopupMenu" << std::endl;    mLayersPopupMenu->exec(pt);}bool QgsComposerVectorLegend::layerOn ( QString id ) {  std::map<QString,bool>::iterator it = mLayersOn.find(id);  if(it != mLayersOn.end() ) {    return ( it->second );  }    return true;}void QgsComposerVectorLegend::setLayerOn ( QString id, bool on ) {  std::map<QString,bool>::iterator it = mLayersOn.find(id);  if(it != mLayersOn.end() ) {    it->second = on;  } else {    mLayersOn.insert(std::make_pair(id,on));  }}int QgsComposerVectorLegend::layerGroup ( QString id ) {  std::map<QString,int>::iterator it = mLayersGroups.find(id);  if(it != mLayersGroups.end() ) {    return ( it->second );  }  return 0;}void QgsComposerVectorLegend::setLayerGroup ( QString id, int group ) {  std::map<QString,int>::iterator it = mLayersGroups.find(id);  if(it != mLayersGroups.end() ) {    it->second = group;  } else {    mLayersGroups.insert(std::make_pair(id,group));  }}void QgsComposerVectorLegend::layerChanged ( Q3ListViewItem *lvi ){    std::cout << "QgsComposerVectorLegend::layerChanged" << std::endl;    if ( lvi == 0 ) return;         QString id = lvi->text(2);    Q3CheckListItem *cli = dynamic_cast <Q3CheckListItem *>(lvi);    setLayerOn ( id, cli->isOn() );    writeSettings();    recalculate();    QGraphicsRectItem::update();    QGraphicsRectItem::scene()->update();}void QgsComposerVectorLegend::groupLayers ( void ) {  std::cout << "QgsComposerVectorLegend::groupLayers" << std::endl;  Q3ListViewItemIterator it( mLayersListView );  int count = 0;  Q3ListViewItem *lastItem = NULL;  QString id;  while ( it.current() ) {    if ( it.current()->isSelected() ) {      std::cout << "selected: " << it.current()->text(0).toLocal8Bit().data() << " " << it.current()->text(2).toLocal8Bit().data() << std::endl;      id = it.current()->text(2);      setLayerGroup ( id, mNextLayerGroup );      it.current()->setText(1,QString::number(mNextLayerGroup) );      lastItem = it.current();      count++;    }    ++it;  }  if ( count == 1 ) { // one item only    setLayerGroup ( id, 0 );    lastItem->setText(1,"" );  }  std::cout << "Groups:" << std::endl;  for ( std::map<QString,int>::iterator it3 = mLayersGroups.begin(); it3 != mLayersGroups.end(); ++it3 ) {    std::cout << "layer: " << (it3->first).toLocal8Bit().data() << " group: " << it3->second << std::endl;  }      mNextLayerGroup++;      writeSettings();  recalculate();  QGraphicsRectItem::update();  QGraphicsRectItem::scene()->update();}    QWidget *QgsComposerVectorLegend::options ( void ){    setOptions ();    return ( dynamic_cast <QWidget *> (this) ); }bool QgsComposerVectorLegend::writeSettings ( void )  {  std::cout << "QgsComposerVectorLegend::writeSettings" << std::endl;  QString path;  path.sprintf("/composition_%d/vectorlegend_%d/", mComposition->id(), mId );   QgsProject::instance()->writeEntry( "Compositions", path+"x", mComposition->toMM((int)QGraphicsRectItem::x()) );  QgsProject::instance()->writeEntry( "Compositions", path+"y", mComposition->toMM((int)QGraphicsRectItem::y()) );  QgsProject::instance()->writeEntry( "Compositions", path+"map", mMap );  QgsProject::instance()->writeEntry( "Compositions", path+"title", mTitle );  QgsProject::instance()->writeEntry( "Compositions", path+"font/size", mFont.pointSize() );  QgsProject::instance()->writeEntry( "Compositions", path+"font/family", mFont.family() );  QgsProject::instance()->writeEntry( "Compositions", path+"font/weight", mFont.weight() );  QgsProject::instance()->writeEntry( "Compositions", path+"font/underline", mFont.underline() );  QgsProject::instance()->writeEntry( "Compositions", path+"font/strikeout", mFont.strikeOut() );  QgsProject::instance()->writeEntry( "Compositions", path+"frame", mFrame );  // Layers: remove all, write new  path.sprintf("/composition_%d/vectorlegend_%d/layers/", mComposition->id(), mId );   QgsProject::instance()->removeEntry ( "Compositions", path );      if ( mMap != 0 ) {    QgsComposerMap *map = mComposition->map ( mMap );    if ( map ) {      int nlayers = mMapCanvas->layerCount();      for ( int i = 0; i < nlayers; i++ ) {        QgsMapLayer *layer = mMapCanvas->getZpos(i);    //        if ( !layer->visible() ) continue;        QString id = layer->getLayerID();        path.sprintf("/composition_%d/vectorlegend_%d/layers/layer_%s/", mComposition->id(), mId, id.toLocal8Bit().data() );         QgsProject::instance()->writeEntry( "Compositions", path+"on", layerOn(id) );        QgsProject::instance()->writeEntry( "Compositions", path+"group", layerGroup(id) );      }    }  }  QgsProject::instance()->writeEntry( "Compositions", path+"previewmode", mPreviewMode );      return true; }bool QgsComposerVectorLegend::readSettings ( void ){  bool ok;  QString path;  path.sprintf("/composition_%d/vectorlegend_%d/", mComposition->id(), mId );  double x = mComposition->fromMM(QgsProject::instance()->readDoubleEntry( "Compositions", path+"x", 0, &ok));  double y = mComposition->fromMM(QgsProject::instance()->readDoubleEntry( "Compositions", path+"y", 0, &ok));  QGraphicsRectItem::setPos(x, y);  mMap = QgsProject::instance()->readNumEntry("Compositions", path+"map", 0, &ok);  mTitle = QgsProject::instance()->readEntry("Compositions", path+"title", "???", &ok);       mFont.setFamily ( QgsProject::instance()->readEntry("Compositions", path+"font/family", "", &ok) );  mFont.setPointSize ( QgsProject::instance()->readNumEntry("Compositions", path+"font/size", 10, &ok) );  mFont.setWeight(  QgsProject::instance()->readNumEntry("Compositions", path+"font/weight", (int)QFont::Normal, &ok) );  mFont.setUnderline(  QgsProject::instance()->readBoolEntry("Compositions", path+"font/underline", false, &ok) );  mFont.setStrikeOut(  QgsProject::instance()->readBoolEntry("Compositions", path+"font/strikeout", false, &ok) );  mFrame = QgsProject::instance()->readBoolEntry("Compositions", path+"frame", true, &ok);  // Preview mode  mPreviewMode = (PreviewMode) QgsProject::instance()->readNumEntry("Compositions", path+"previewmode", Render, &ok);      // Layers  path.sprintf("/composition_%d/vectorlegend_%d/layers/", mComposition->id(), mId );  QStringList el = QgsProject::instance()->subkeyList ( "Compositions", path );      for ( QStringList::iterator it = el.begin(); it != el.end(); ++it ) {    int idx = (*it).find('_');    QString id = (*it).right( (*it).length() - (idx+1) );      path.sprintf("/composition_%d/vectorlegend_%d/layers/layer_%s/", mComposition->id(), mId, id.toLocal8Bit().data() );    bool on = QgsProject::instance()->readBoolEntry("Compositions", path+"on", true, &ok);    int group = QgsProject::instance()->readNumEntry("Compositions", path+"group", 0, &ok);    setLayerOn ( id , on );    setLayerGroup ( id, group );    if ( group >= mNextLayerGroup ) mNextLayerGroup = group+1;  }          recalculate();      return true;}bool QgsComposerVectorLegend::removeSettings( void ){    std::cerr << "QgsComposerVectorLegend::deleteSettings" << std::endl;    QString path;    path.sprintf("/composition_%d/vectorlegend_%d", mComposition->id(), mId );     return QgsProject::instance()->removeEntry ( "Compositions", path );}bool QgsComposerVectorLegend::writeXML( QDomNode & node, QDomDocument & document, bool temp ){    return true;}bool QgsComposerVectorLegend::readXML( QDomNode & node ){    return true;}

⌨️ 快捷键说明

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