QString QgsMapLayer::saveNamedStyle( const QString theURI, bool & theResultFlag ) { QString myErrorMessage; QDomImplementation DomImplementation; QDomDocumentType documentType = DomImplementation.createDocumentType( "qgis", "http://mrcc.com/qgis.dtd", "SYSTEM" ); QDomDocument myDocument( documentType ); QDomElement myRootNode = myDocument.createElement( "qgis" ); myRootNode.setAttribute( "version", QString( "%1" ).arg( QGis::QGIS_VERSION ) ); myDocument.appendChild( myRootNode ); // use scale dependent visibility flag myRootNode.setAttribute( "hasScaleBasedVisibilityFlag", hasScaleBasedVisibility() ? 1 : 0 ); myRootNode.setAttribute( "minimumScale", QString::number( minimumScale() ) ); myRootNode.setAttribute( "maximumScale", QString::number( maximumScale() ) ); // <transparencyLevelInt> QDomElement transparencyLevelIntElement = myDocument.createElement( "transparencyLevelInt" ); QDomText transparencyLevelIntText = myDocument.createTextNode( QString::number( getTransparency() ) ); transparencyLevelIntElement.appendChild( transparencyLevelIntText ); myRootNode.appendChild( transparencyLevelIntElement ); // now append layer node to map layer node QString errorMsg; if ( !writeSymbology( myRootNode, myDocument, errorMsg ) ) { return tr( "Could not save symbology because:\n%1" ).arg( errorMsg ); } // check if the uri is a file or ends with .qml, // which indicates that it should become one // everything else goes to the database QString filename; QgsVectorLayer *vlayer = qobject_cast<QgsVectorLayer *>( this ); if ( vlayer && vlayer->providerType() == "ogr" ) { QStringList theURIParts = theURI.split( "|" ); filename = theURIParts[0]; } else if ( vlayer && vlayer->providerType() == "delimitedtext" ) { filename = QUrl::fromEncoded( theURI.toAscii() ).toLocalFile(); } else { filename = theURI; } QFileInfo myFileInfo( filename ); if ( myFileInfo.exists() || filename.endsWith( ".qml", Qt::CaseInsensitive ) ) { QFileInfo myDirInfo( myFileInfo.path() ); //excludes file name if ( !myDirInfo.isWritable() ) { return tr( "The directory containing your dataset needs to be writable!" ); } // now construct the file name for our .qml style file QString myFileName = myFileInfo.path() + QDir::separator() + myFileInfo.completeBaseName() + ".qml"; QFile myFile( myFileName ); if ( myFile.open( QFile::WriteOnly | QFile::Truncate ) ) { QTextStream myFileStream( &myFile ); // save as utf-8 with 2 spaces for indents myDocument.save( myFileStream, 2 ); myFile.close(); theResultFlag = true; return tr( "Created default style file as %1" ).arg( myFileName ); } else { theResultFlag = false; return tr( "ERROR: Failed to created default style file as %1. Check file permissions and retry." ).arg( myFileName ); } } else { QString qml = myDocument.toString(); // read from database sqlite3 *myDatabase; sqlite3_stmt *myPreparedStatement; const char *myTail; int myResult; myResult = sqlite3_open( QDir( QgsApplication::qgisSettingsDirPath() ).absoluteFilePath( "qgis.qmldb" ).toUtf8().data(), &myDatabase ); if ( myResult != SQLITE_OK ) { return tr( "User database could not be opened." ); } QByteArray param0 = theURI.toUtf8(); QByteArray param1 = qml.toUtf8(); QString mySql = "create table if not exists tbl_styles(style varchar primary key,qml varchar)"; myResult = sqlite3_prepare( myDatabase, mySql.toUtf8().data(), mySql.toUtf8().length(), &myPreparedStatement, &myTail ); if ( myResult == SQLITE_OK ) { if ( sqlite3_step( myPreparedStatement ) != SQLITE_DONE ) { sqlite3_finalize( myPreparedStatement ); sqlite3_close( myDatabase ); theResultFlag = false; return tr( "The style table could not be created." ); } } sqlite3_finalize( myPreparedStatement ); mySql = "insert into tbl_styles(style,qml) values (?,?)"; myResult = sqlite3_prepare( myDatabase, mySql.toUtf8().data(), mySql.toUtf8().length(), &myPreparedStatement, &myTail ); if ( myResult == SQLITE_OK ) { if ( sqlite3_bind_text( myPreparedStatement, 1, param0.data(), param0.length(), SQLITE_STATIC ) == SQLITE_OK && sqlite3_bind_text( myPreparedStatement, 2, param1.data(), param1.length(), SQLITE_STATIC ) == SQLITE_OK && sqlite3_step( myPreparedStatement ) == SQLITE_DONE ) { theResultFlag = true; myErrorMessage = tr( "The style %1 was saved to database" ).arg( theURI ); } } sqlite3_finalize( myPreparedStatement ); if ( !theResultFlag ) { QString mySql = "update tbl_styles set qml=? where style=?"; myResult = sqlite3_prepare( myDatabase, mySql.toUtf8().data(), mySql.toUtf8().length(), &myPreparedStatement, &myTail ); if ( myResult == SQLITE_OK ) { if ( sqlite3_bind_text( myPreparedStatement, 2, param0.data(), param0.length(), SQLITE_STATIC ) == SQLITE_OK && sqlite3_bind_text( myPreparedStatement, 1, param1.data(), param1.length(), SQLITE_STATIC ) == SQLITE_OK && sqlite3_step( myPreparedStatement ) == SQLITE_DONE ) { theResultFlag = true; myErrorMessage = tr( "The style %1 was updated in the database." ).arg( theURI ); } else { theResultFlag = false; myErrorMessage = tr( "The style %1 could not be updated in the database." ).arg( theURI ); } } else { theResultFlag = false; myErrorMessage = tr( "The style %1 could not be inserted into database." ).arg( theURI ); } sqlite3_finalize( myPreparedStatement ); } sqlite3_close( myDatabase ); } return myErrorMessage; }
bool QgsMapLayer::writeLayerXML( QDomElement& layerElement, QDomDocument& document, const QString& relativeBasePath ) { // use scale dependent visibility flag layerElement.setAttribute( "hasScaleBasedVisibilityFlag", hasScaleBasedVisibility() ? 1 : 0 ); layerElement.setAttribute( "minimumScale", QString::number( minimumScale() ) ); layerElement.setAttribute( "maximumScale", QString::number( maximumScale() ) ); // ID QDomElement layerId = document.createElement( "id" ); QDomText layerIdText = document.createTextNode( id() ); layerId.appendChild( layerIdText ); layerElement.appendChild( layerId ); // data source QDomElement dataSource = document.createElement( "datasource" ); QString src = source(); QgsVectorLayer *vlayer = qobject_cast<QgsVectorLayer *>( this ); // TODO: what about postgres, mysql and others, they should not go through writePath() if ( vlayer && vlayer->providerType() == "spatialite" ) { QgsDataSourceURI uri( src ); QString database = QgsProject::instance()->writePath( uri.database(), relativeBasePath ); uri.setConnection( uri.host(), uri.port(), database, uri.username(), uri.password() ); src = uri.uri(); } else if ( vlayer && vlayer->providerType() == "ogr" ) { QStringList theURIParts = src.split( "|" ); theURIParts[0] = QgsProject::instance()->writePath( theURIParts[0], relativeBasePath ); src = theURIParts.join( "|" ); } else if ( vlayer && vlayer->providerType() == "gpx" ) { QStringList theURIParts = src.split( "?" ); theURIParts[0] = QgsProject::instance()->writePath( theURIParts[0], relativeBasePath ); src = theURIParts.join( "?" ); } else if ( vlayer && vlayer->providerType() == "delimitedtext" ) { QUrl urlSource = QUrl::fromEncoded( src.toAscii() ); QUrl urlDest = QUrl::fromLocalFile( QgsProject::instance()->writePath( urlSource.toLocalFile(), relativeBasePath ) ); urlDest.setQueryItems( urlSource.queryItems() ); src = QString::fromAscii( urlDest.toEncoded() ); } else { bool handled = false; if ( !vlayer ) { QgsRasterLayer *rlayer = qobject_cast<QgsRasterLayer *>( this ); // Update path for subdataset if ( rlayer && rlayer->providerType() == "gdal" ) { if ( src.startsWith( "NETCDF:" ) ) { // NETCDF:filename:variable // filename can be quoted with " as it can contain colons QRegExp r( "NETCDF:(.+):([^:]+)" ); if ( r.exactMatch( src ) ) { QString filename = r.cap( 1 ); if ( filename.startsWith( '"' ) && filename.endsWith( '"' ) ) filename = filename.mid( 1, filename.length() - 2 ); src = "NETCDF:\"" + QgsProject::instance()->writePath( filename, relativeBasePath ) + "\":" + r.cap( 2 ); handled = true; } } else if ( src.startsWith( "HDF4_SDS:" ) ) { // HDF4_SDS:subdataset_type:file_name:subdataset_index // filename can be quoted with " as it can contain colons QRegExp r( "HDF4_SDS:([^:]+):(.+):([^:]+)" ); if ( r.exactMatch( src ) ) { QString filename = r.cap( 2 ); if ( filename.startsWith( '"' ) && filename.endsWith( '"' ) ) filename = filename.mid( 1, filename.length() - 2 ); src = "HDF4_SDS:" + r.cap( 1 ) + ":\"" + QgsProject::instance()->writePath( filename, relativeBasePath ) + "\":" + r.cap( 3 ); handled = true; } } else if ( src.startsWith( "HDF5:" ) ) { // HDF5:file_name:subdataset // filename can be quoted with " as it can contain colons QRegExp r( "HDF5:(.+):([^:]+)" ); if ( r.exactMatch( src ) ) { QString filename = r.cap( 1 ); if ( filename.startsWith( '"' ) && filename.endsWith( '"' ) ) filename = filename.mid( 1, filename.length() - 2 ); src = "HDF5:\"" + QgsProject::instance()->writePath( filename, relativeBasePath ) + "\":" + r.cap( 2 ); handled = true; } } else if ( src.contains( QRegExp( "^(NITF_IM|RADARSAT_2_CALIB):" ) ) ) { // NITF_IM:0:filename // RADARSAT_2_CALIB:?:filename QRegExp r( "([^:]+):([^:]+):(.+)" ); if ( r.exactMatch( src ) ) { src = r.cap( 1 ) + ":" + r.cap( 2 ) + ":" + QgsProject::instance()->writePath( r.cap( 3 ), relativeBasePath ); handled = true; } } } } if ( !handled ) src = QgsProject::instance()->writePath( src, relativeBasePath ); } QDomText dataSourceText = document.createTextNode( src ); dataSource.appendChild( dataSourceText ); layerElement.appendChild( dataSource ); // layer name QDomElement layerName = document.createElement( "layername" ); QDomText layerNameText = document.createTextNode( originalName() ); layerName.appendChild( layerNameText ); // layer title QDomElement layerTitle = document.createElement( "title" ); QDomText layerTitleText = document.createTextNode( title() ); layerTitle.appendChild( layerTitleText ); // layer abstract QDomElement layerAbstract = document.createElement( "abstract" ); QDomText layerAbstractText = document.createTextNode( abstract() ); layerAbstract.appendChild( layerAbstractText ); layerElement.appendChild( layerName ); layerElement.appendChild( layerTitle ); layerElement.appendChild( layerAbstract ); // layer keyword list QStringList keywordStringList = keywordList().split( "," ); if ( keywordStringList.size() > 0 ) { QDomElement layerKeywordList = document.createElement( "keywordList" ); for ( int i = 0; i < keywordStringList.size(); ++i ) { QDomElement layerKeywordValue = document.createElement( "value" ); QDomText layerKeywordText = document.createTextNode( keywordStringList.at( i ).trimmed() ); layerKeywordValue.appendChild( layerKeywordText ); layerKeywordList.appendChild( layerKeywordValue ); } layerElement.appendChild( layerKeywordList ); } // layer metadataUrl QString aDataUrl = dataUrl(); if ( !aDataUrl.isEmpty() ) { QDomElement layerDataUrl = document.createElement( "dataUrl" ); QDomText layerDataUrlText = document.createTextNode( aDataUrl ); layerDataUrl.appendChild( layerDataUrlText ); layerDataUrl.setAttribute( "format", dataUrlFormat() ); layerElement.appendChild( layerDataUrl ); } // layer legendUrl QString aLegendUrl = legendUrl(); if ( !aLegendUrl.isEmpty() ) { QDomElement layerLegendUrl = document.createElement( "legendUrl" ); QDomText layerLegendUrlText = document.createTextNode( aLegendUrl ); layerLegendUrl.appendChild( layerLegendUrlText ); layerLegendUrl.setAttribute( "format", legendUrlFormat() ); layerElement.appendChild( layerLegendUrl ); } // layer attribution QString aAttribution = attribution(); if ( !aAttribution.isEmpty() ) { QDomElement layerAttribution = document.createElement( "attribution" ); QDomText layerAttributionText = document.createTextNode( aAttribution ); layerAttribution.appendChild( layerAttributionText ); layerAttribution.setAttribute( "href", attributionUrl() ); layerElement.appendChild( layerAttribution ); } // layer metadataUrl QString aMetadataUrl = metadataUrl(); if ( !aMetadataUrl.isEmpty() ) { QDomElement layerMetadataUrl = document.createElement( "metadataUrl" ); QDomText layerMetadataUrlText = document.createTextNode( aMetadataUrl ); layerMetadataUrl.appendChild( layerMetadataUrlText ); layerMetadataUrl.setAttribute( "type", metadataUrlType() ); layerMetadataUrl.setAttribute( "format", metadataUrlFormat() ); layerElement.appendChild( layerMetadataUrl ); } // timestamp if supported if ( timestamp() > QDateTime() ) { QDomElement stamp = document.createElement( "timestamp" ); QDomText stampText = document.createTextNode( timestamp().toString( Qt::ISODate ) ); stamp.appendChild( stampText ); layerElement.appendChild( stamp ); } layerElement.appendChild( layerName ); // zorder // This is no longer stored in the project file. It is superfluous since the layers // are written and read in the proper order. // spatial reference system id QDomElement mySrsElement = document.createElement( "srs" ); mCRS->writeXML( mySrsElement, document ); layerElement.appendChild( mySrsElement ); #if 0 // <transparencyLevelInt> QDomElement transparencyLevelIntElement = document.createElement( "transparencyLevelInt" ); QDomText transparencyLevelIntText = document.createTextNode( QString::number( getTransparency() ) ); transparencyLevelIntElement.appendChild( transparencyLevelIntText ); maplayer.appendChild( transparencyLevelIntElement ); #endif // now append layer node to map layer node writeCustomProperties( layerElement, document ); return writeXml( layerElement, document ); } // bool QgsMapLayer::writeXML
void MainWindow2::exportImage() { QSettings settings( PENCIL2D, PENCIL2D ); // Get the camera layer Layer *cameraLayer = mEditor->layers()->currentLayer(); if (cameraLayer->type() != Layer::CAMERA) { QMessageBox::warning( this, tr( "Error" ), tr( "You must select a Camera Layer to export an image." ), QMessageBox::Ok, QMessageBox::Ok ); return;// false; } // Options auto dialog = new ExportImageSeqDialog( this ); OnScopeExit( dialog->deleteLater() ); dialog->setExportSize( mScribbleArea->getViewRect().toRect().size() ); dialog->exec(); QSize exportSize = dialog->getExportSize(); QString exportFormat = dialog->getExportFormat(); bool useTranparency = dialog->getTransparency(); if ( dialog->result() == QDialog::Rejected ) { return; // false; } // Path QString initPath = settings.value( "lastExportPath", QDir::homePath() + "/untitled.png" ).toString(); QFileInfo info( initPath ); initPath = info.path() + "/" + info.baseName() + "." + exportFormat.toLower(); QString filePath = QFileDialog::getSaveFileName( this, tr( "Save Image" ), initPath); if ( filePath.isEmpty() ) { qDebug() << "empty file"; return;// false; } settings.setValue( "lastExportPath", QVariant( filePath ) ); // Export QTransform view = RectMapTransform( mScribbleArea->getViewRect(), QRectF( QPointF( 0, 0 ), exportSize ) ); // view = mScribbleArea->getView() * view; int projectLength = mEditor->layers()->projectLength(); if ( !mEditor->object()->exportIm( mEditor->currentFrame(), projectLength, view, exportSize, filePath, exportFormat, true, useTranparency ) ) { QMessageBox::warning( this, tr( "Warning" ), tr( "Unable to export image." ), QMessageBox::Ok, QMessageBox::Ok ); return;// false; } return; // true; }
bool QgsMapLayer::writeXML( QDomNode & layer_node, QDomDocument & document ) { // general layer metadata QDomElement maplayer = document.createElement( "maplayer" ); // use scale dependent visibility flag maplayer.setAttribute( "hasScaleBasedVisibilityFlag", hasScaleBasedVisibility() ? 1 : 0 ); maplayer.setAttribute( "minimumScale", QString::number( minimumScale() ) ); maplayer.setAttribute( "maximumScale", QString::number( maximumScale() ) ); // ID QDomElement layerId = document.createElement( "id" ); QDomText layerIdText = document.createTextNode( id() ); layerId.appendChild( layerIdText ); maplayer.appendChild( layerId ); // data source QDomElement dataSource = document.createElement( "datasource" ); QString src = source(); QgsVectorLayer *vlayer = qobject_cast<QgsVectorLayer *>( this ); // TODO: what about postgres, mysql and others, they should not go through writePath() if ( vlayer && vlayer->providerType() == "spatialite" ) { QgsDataSourceURI uri( src ); QString database = QgsProject::instance()->writePath( uri.database() ); uri.setConnection( uri.host(), uri.port(), database, uri.username(), uri.password() ); src = uri.uri(); } else if ( vlayer && vlayer->providerType() == "ogr" ) { QStringList theURIParts = src.split( "|" ); theURIParts[0] = QgsProject::instance()->writePath( theURIParts[0] ); src = theURIParts.join( "|" ); } else if ( vlayer && vlayer->providerType() == "delimitedtext" ) { QUrl urlSource = QUrl::fromEncoded( src.toAscii() ); QUrl urlDest = QUrl::fromLocalFile( QgsProject::instance()->writePath( urlSource.toLocalFile() ) ); urlDest.setQueryItems( urlSource.queryItems() ); src = QString::fromAscii( urlDest.toEncoded() ); } else { src = QgsProject::instance()->writePath( src ); } QDomText dataSourceText = document.createTextNode( src ); dataSource.appendChild( dataSourceText ); maplayer.appendChild( dataSource ); // layer name QDomElement layerName = document.createElement( "layername" ); QDomText layerNameText = document.createTextNode( name() ); layerName.appendChild( layerNameText ); // layer title QDomElement layerTitle = document.createElement( "title" ) ; QDomText layerTitleText = document.createTextNode( title() ); layerTitle.appendChild( layerTitleText ); // layer abstract QDomElement layerAbstract = document.createElement( "abstract" ); QDomText layerAbstractText = document.createTextNode( abstract() ); layerAbstract.appendChild( layerAbstractText ); maplayer.appendChild( layerName ); maplayer.appendChild( layerTitle ); maplayer.appendChild( layerAbstract ); // timestamp if supported if ( timestamp() > QDateTime() ) { QDomElement stamp = document.createElement( "timestamp" ); QDomText stampText = document.createTextNode( timestamp().toString( Qt::ISODate ) ); stamp.appendChild( stampText ); maplayer.appendChild( stamp ); } maplayer.appendChild( layerName ); // zorder // This is no longer stored in the project file. It is superfluous since the layers // are written and read in the proper order. // spatial reference system id QDomElement mySrsElement = document.createElement( "srs" ); mCRS->writeXML( mySrsElement, document ); maplayer.appendChild( mySrsElement ); // <transparencyLevelInt> QDomElement transparencyLevelIntElement = document.createElement( "transparencyLevelInt" ); QDomText transparencyLevelIntText = document.createTextNode( QString::number( getTransparency() ) ); transparencyLevelIntElement.appendChild( transparencyLevelIntText ); maplayer.appendChild( transparencyLevelIntElement ); // now append layer node to map layer node layer_node.appendChild( maplayer ); writeCustomProperties( maplayer, document ); return writeXml( maplayer, document ); } // bool QgsMapLayer::writeXML
virtual void addVertex(Vertex& vertex) { osg::Vec3Array* vertices = getOrCreateVertexArray(*_geometry); vertices->push_back(vertex._coord); if (isGouraud()) { osg::Vec4Array* colors = getOrCreateColorArray(*_geometry); if (vertex.validColor()) { colors->push_back(vertex._color); } else { // Use face color if vertex color is -1 in a gouraud polygon. // http://www.multigen-paradigm.com/ubb/Forum1/HTML/000967.html // Incorporate Face transparency per osg-users thread "Open Flight // characteristic not reflected in the current OSG" (Sept/Oct 2011) colors->push_back(osg::Vec4(_primaryColor.r(), _primaryColor.g(), _primaryColor.b(), ( 1.0 - getTransparency() ) )); } } bool strict = false; // prepare for "strict" reader option. if (strict) { if (vertex.validNormal()) { osg::Vec3Array* normals = getOrCreateNormalArray(*_geometry); normals->push_back(vertex._normal); } } else { // Add normal only if lit. if (isLit()) { osg::Vec3Array* normals = getOrCreateNormalArray(*_geometry); if (vertex.validNormal()) normals->push_back(vertex._normal); else // if lit and no normal in Vertex { // Use previous normal if available. if (normals->empty()) normals->push_back(osg::Vec3(0,0,1)); else normals->push_back(normals->back()); } } } for (int layer=0; layer<Vertex::MAX_LAYERS; layer++) { if (vertex.validUV(layer)) { osg::Vec2Array* UVs = getOrCreateTextureArray(*_geometry,layer); UVs->push_back(vertex._uv[layer]); } } }
//----------------------------------------------------------------------------- void CScrollContainer::setScrollOffset (CPoint newOffset, bool redraw) { newOffset.x = floor (newOffset.x + 0.5); newOffset.y = floor (newOffset.y + 0.5); if (containerSize.getWidth () >= getViewSize ().getWidth ()) { if (newOffset.x < containerSize.left - (containerSize.getWidth () - getViewSize ().getWidth ())) newOffset.x = containerSize.left - (containerSize.getWidth () - getViewSize ().getWidth ()); } else { if (newOffset.x < containerSize.left - containerSize.getWidth ()) newOffset.x = containerSize.left - containerSize.getWidth (); } if (newOffset.x > containerSize.right) newOffset.x = containerSize.right; if (newOffset.y < containerSize.top) newOffset.y = containerSize.top; if (newOffset.y > containerSize.bottom) newOffset.y = containerSize.bottom; CPoint diff ((int32_t)(newOffset.x - offset.x), (int32_t)(offset.y - newOffset.y)); if (diff.x == 0 && diff.y == 0) return; inScrolling = true; FOREACHSUBVIEW CRect r, mr; pV->getViewSize (r); pV->getMouseableArea (mr); r.offset (diff.x , diff.y); pV->setViewSize (r, false); mr.offset (diff.x , diff.y); pV->setMouseableArea (mr); ENDFOREACHSUBVIEW inScrolling = false; offset = newOffset; if (!isAttached ()) return; if (getTransparency ()) { invalid (); } else { CRect scrollRect (0, 0, getViewSize ().getWidth (), getViewSize ().getHeight ()); CPoint p; localToFrame (p); scrollRect.offset (p.x, p.y); CRect visibleRect = getVisibleSize (CRect (0, 0, getViewSize ().getWidth (), getViewSize ().getHeight ())); visibleRect.offset (p.x, p.y); scrollRect.bound (visibleRect); CPoint distance (diff.x, diff.y); if (distance.x > 0) scrollRect.right -= distance.x; else if (distance.x < 0) scrollRect.left -= distance.x; if (distance.y > 0) scrollRect.bottom -= distance.y; else if (distance.y < 0) scrollRect.top -= distance.y; getFrame ()->scrollRect (scrollRect, distance); } }
Transparency ScopedVariableContext::getTransparency(ScopedVariable *param){ return getTransparency(param->getContextIndex()); }
void Slider::updateView(float mouseData[2], int clickType, wchar_t keyChar, vector<string> eventCompList) { if (getVisible()) { float transparency = getTransparency(); if ((getFocusEffect() == true) && (getMouseOverContainer() == true)) transparency = 1.0f; if (!getMouseOverContainer()) slide = false; if (!getEnabled()) { setActualTex(getDisabledTex()); } else { if ((slide || isMouseOver(mouseData) || button->isMouseOver(mouseData))&&getMouseOverContainer()) setActualTex(getHighlightTex()); else { setActualTex(getNormalTex()); //slide = false; } } if (clickType == 1 && (isMouseOver(mouseData) || button->isMouseOver(mouseData))) { slide = true; } if ((clickType == -1) && (slide)) { slide = false; } if (slide) { if (horizontal) { float step = getWidth()/((getMaxValue()-getMinValue())/getValueStep()); if (mouseData[0] >= button->getPosX()+step) { if (setPosition(getPosition()+getValueStep())) sendNewValue(getPosition(), eventCompList); } if (mouseData[0] <= button->getPosX()-step) { if (setPosition(getPosition()-getValueStep())) sendNewValue(getPosition(), eventCompList); } } else { float step = getHeight()/((getMaxValue()-getMinValue())/getValueStep()); if (mouseData[1] <= button->getPosY()-step) { if (setPosition(getPosition()+getValueStep())) sendNewValue(getPosition(), eventCompList); } if (mouseData[1] >= button->getPosY()+step) { if (setPosition(getPosition()-getValueStep())) sendNewValue(getPosition(), eventCompList); } } } float posX = getPosX(); float posY = getPosY(); float height = getHeight(); float width = getWidth(); float vals[] = {posX, posY, 0, 1, posX, posY+height, 0, 0, posX+width, posY+height, 1, 0, posX+width, posY, 1, 1 }; h3dShowOverlays(vals, 4,1, 1, 1, transparency,getActualTex(), 0 ); if (slide) { button->setMouseOverIsTrue(true); button->updateView(mouseData,1,keyChar,eventCompList); } else { button->setMouseOverIsTrue(false); button->updateView(mouseData,clickType,keyChar,eventCompList); } } }
void Button::updateView(float mouseData[2], int clickType, wchar_t keyChar, vector<string> eventCompList) { if (getVisible() == true) { sentClickEvent = false; float posX = getPosX(); float posY = getPosY(); float height = getHeight(); float width = getWidth(); float transparency = getTransparency(); if ((getFocusEffect() == true) && (getMouseOverContainer() == true)) transparency = 1.0f; if (getEnabled() == false) setActualTex(getDisabledTex()); else { if ((isMouseOver(mouseData) == true) && (getMouseOverContainer())) { if (getFocusEffect() == true) transparency = 1.0f; if (clickType == 0) { if (hintCounter < 1.0f) hintCounter += 1/GameEngine::FPS(); if (getActualTex() != getPressedTex()) { setActualTex(getHighlightTex()); if (wasLeft) sendOnce = false; if ((sendOnce == false) && (wasLeft == true)) { sendOnce = true; wasOver = true; wasLeft = false; GUIEventData::sendToGUI(new GUIEventData(O_COMP_MOUSEOVER,this->getName())); sendEvents(O_COMP_MOUSEOVER, eventCompList); } if (hintCounter >= 1.0f) { if (!hint->getVisible() ) { //needed for aspect ratio (maximum width) int m_camID = GameEngine::entityWorldID("camera"); int x,y, width, height; H3DNode camID = GameEngine::entitySceneGraphID( m_camID ); x = h3dGetNodeParamI( camID, H3DCamera::ViewportXI); y = h3dGetNodeParamI( camID, H3DCamera::ViewportYI); width = h3dGetNodeParamI( camID, H3DCamera::ViewportWidthI); height = h3dGetNodeParamI( camID, H3DCamera::ViewportHeightI); float aspect = (float)width/(float)height; hint->setText(getHintText()); float posX = mouseData[0]+0.03f; if (posX+ hint->getWidth() > aspect) posX = aspect - hint->getWidth() - 0.01f; hint->setPosX(posX); float posY = mouseData[1]+0.06f; if (posY+ hint->getHeight() > 1.0f) posY = mouseData[1] - hint->getHeight() - 0.06f; hint->setPosY(posY); hint->setVisible(true); } } } } if (clickType == 1) { setActualTex(getPressedTex()); clickWasOver = true; } if ((clickType == -1) && (clickWasOver)) { setActualTex(getHighlightTex()); if (wasLeft) sendOnce = false; if ((sendOnce == false) && (wasLeft == true)) { sendOnce = true; wasOver = true; wasLeft = false; GUIEventData::sendToGUI(new GUIEventData(O_COMP_MOUSEOVER,this->getName())); sendEvents(O_COMP_MOUSEOVER, eventCompList); } //prevent sending the same event multiple times if (oldClickType != clickType) { //send event to all listed components sendEvents(O_BUTTON_CLICKED, eventCompList); //send to GUI for sound GUIEventData::sendToGUI(new GUIEventData(O_BUTTON_CLICKED,this->getName())); sentClickEvent = true; } } } else { clickWasOver = false; setActualTex(getNormalTex()); if (wasOver) sendOnce = false; if ((sendOnce == false) && (wasOver == true)) { sendOnce = true; wasOver = false; wasLeft = true; GUIEventData::sendToGUI(new GUIEventData(O_COMP_MOUSELEFT,this->getName())); sendEvents(O_COMP_MOUSELEFT, eventCompList); hint->setVisible(false); hintCounter = 0.0f; } } } oldClickType = clickType; float vals[] = { posX, posY, 0, 1, posX, posY+height, 0, 0, posX+width, posY+height, 1, 0, posX+width, posY, 1, 1 }; h3dShowOverlays(vals, 4,1, 1, 1, transparency,getActualTex(), 0 ); } else if (!wasLeft) { //if a mouseleft event wasn't sent it's done here GUIEventData::sendToGUI(new GUIEventData(O_COMP_MOUSELEFT,this->getName())); wasLeft = true; } }
void QgsMapLayer::exportNamedStyle( QDomDocument &doc, QString &errorMsg ) { QDomImplementation DomImplementation; QDomDocumentType documentType = DomImplementation.createDocumentType( "qgis", "http://mrcc.com/qgis.dtd", "SYSTEM" ); QDomDocument myDocument( documentType ); QDomElement myRootNode = myDocument.createElement( "qgis" ); myRootNode.setAttribute( "version", QString( "%1" ).arg( QGis::QGIS_VERSION ) ); myDocument.appendChild( myRootNode ); myRootNode.setAttribute( "hasScaleBasedVisibilityFlag", hasScaleBasedVisibility() ? 1 : 0 ); myRootNode.setAttribute( "minimumScale", QString::number( minimumScale() ) ); myRootNode.setAttribute( "maximumScale", QString::number( maximumScale() ) ); #if 0 // <transparencyLevelInt> QDomElement transparencyLevelIntElement = myDocument.createElement( "transparencyLevelInt" ); QDomText transparencyLevelIntText = myDocument.createTextNode( QString::number( getTransparency() ) ); transparencyLevelIntElement.appendChild( transparencyLevelIntText ); myRootNode.appendChild( transparencyLevelIntElement ); #endif if ( !writeSymbology( myRootNode, myDocument, errorMsg ) ) { errorMsg = QObject::tr( "Could not save symbology because:\n%1" ).arg( errorMsg ); return; } doc = myDocument; }
bool QgsMapLayer::writeLayerXML( QDomElement& layerElement, QDomDocument& document ) { // use scale dependent visibility flag layerElement.setAttribute( "hasScaleBasedVisibilityFlag", hasScaleBasedVisibility() ? 1 : 0 ); layerElement.setAttribute( "minimumScale", QString::number( minimumScale() ) ); layerElement.setAttribute( "maximumScale", QString::number( maximumScale() ) ); // ID QDomElement layerId = document.createElement( "id" ); QDomText layerIdText = document.createTextNode( id() ); layerId.appendChild( layerIdText ); layerElement.appendChild( layerId ); // data source QDomElement dataSource = document.createElement( "datasource" ); QString src = source(); QgsVectorLayer *vlayer = qobject_cast<QgsVectorLayer *>( this ); // TODO: what about postgres, mysql and others, they should not go through writePath() if ( vlayer && vlayer->providerType() == "spatialite" ) { QgsDataSourceURI uri( src ); QString database = QgsProject::instance()->writePath( uri.database() ); uri.setConnection( uri.host(), uri.port(), database, uri.username(), uri.password() ); src = uri.uri(); } else if ( vlayer && vlayer->providerType() == "ogr" ) { QStringList theURIParts = src.split( "|" ); theURIParts[0] = QgsProject::instance()->writePath( theURIParts[0] ); src = theURIParts.join( "|" ); } else if ( vlayer && vlayer->providerType() == "delimitedtext" ) { QUrl urlSource = QUrl::fromEncoded( src.toAscii() ); QUrl urlDest = QUrl::fromLocalFile( QgsProject::instance()->writePath( urlSource.toLocalFile() ) ); urlDest.setQueryItems( urlSource.queryItems() ); src = QString::fromAscii( urlDest.toEncoded() ); } else { src = QgsProject::instance()->writePath( src ); } QDomText dataSourceText = document.createTextNode( src ); dataSource.appendChild( dataSourceText ); layerElement.appendChild( dataSource ); // layer name QDomElement layerName = document.createElement( "layername" ); QDomText layerNameText = document.createTextNode( originalName() ); layerName.appendChild( layerNameText ); // layer title QDomElement layerTitle = document.createElement( "title" ) ; QDomText layerTitleText = document.createTextNode( title() ); layerTitle.appendChild( layerTitleText ); // layer abstract QDomElement layerAbstract = document.createElement( "abstract" ); QDomText layerAbstractText = document.createTextNode( abstract() ); layerAbstract.appendChild( layerAbstractText ); layerElement.appendChild( layerName ); layerElement.appendChild( layerTitle ); layerElement.appendChild( layerAbstract ); // layer keyword list QStringList keywordStringList = keywordList().split( "," ); if ( keywordStringList.size() > 0 ) { QDomElement layerKeywordList = document.createElement( "keywordList" ); for ( int i = 0; i < keywordStringList.size(); ++i ) { QDomElement layerKeywordValue = document.createElement( "value" ); QDomText layerKeywordText = document.createTextNode( keywordStringList.at( i ).trimmed() ); layerKeywordValue.appendChild( layerKeywordText ); layerKeywordList.appendChild( layerKeywordValue ); } layerElement.appendChild( layerKeywordList ); } // layer metadataUrl QString aDataUrl = dataUrl(); if ( !aDataUrl.isEmpty() ) { QDomElement layerDataUrl = document.createElement( "dataUrl" ) ; QDomText layerDataUrlText = document.createTextNode( aDataUrl ); layerDataUrl.appendChild( layerDataUrlText ); layerDataUrl.setAttribute( "format", dataUrlFormat() ); layerElement.appendChild( layerDataUrl ); } // layer attribution QString aAttribution = attribution(); if ( !aAttribution.isEmpty() ) { QDomElement layerAttribution = document.createElement( "attribution" ) ; QDomText layerAttributionText = document.createTextNode( aAttribution ); layerAttribution.appendChild( layerAttributionText ); layerAttribution.setAttribute( "href", attributionUrl() ); layerElement.appendChild( layerAttribution ); } // layer metadataUrl QString aMetadataUrl = metadataUrl(); if ( !aMetadataUrl.isEmpty() ) { QDomElement layerMetadataUrl = document.createElement( "metadataUrl" ) ; QDomText layerMetadataUrlText = document.createTextNode( aMetadataUrl ); layerMetadataUrl.appendChild( layerMetadataUrlText ); layerMetadataUrl.setAttribute( "type", metadataUrlType() ); layerMetadataUrl.setAttribute( "format", metadataUrlFormat() ); layerElement.appendChild( layerMetadataUrl ); } // timestamp if supported if ( timestamp() > QDateTime() ) { QDomElement stamp = document.createElement( "timestamp" ); QDomText stampText = document.createTextNode( timestamp().toString( Qt::ISODate ) ); stamp.appendChild( stampText ); layerElement.appendChild( stamp ); } layerElement.appendChild( layerName ); // zorder // This is no longer stored in the project file. It is superfluous since the layers // are written and read in the proper order. // spatial reference system id QDomElement mySrsElement = document.createElement( "srs" ); mCRS->writeXML( mySrsElement, document ); layerElement.appendChild( mySrsElement ); #if 0 // <transparencyLevelInt> QDomElement transparencyLevelIntElement = document.createElement( "transparencyLevelInt" ); QDomText transparencyLevelIntText = document.createTextNode( QString::number( getTransparency() ) ); transparencyLevelIntElement.appendChild( transparencyLevelIntText ); maplayer.appendChild( transparencyLevelIntElement ); #endif // now append layer node to map layer node writeCustomProperties( layerElement, document ); return writeXml( layerElement, document ); } // bool QgsMapLayer::writeXML