void QgsComposerAttributeTableV2::setDisplayedFields( const QStringList& fields, bool refresh ) { QgsVectorLayer* source = sourceLayer(); if ( !source ) { return; } //rebuild columns list, taking only fields contained in supplied list qDeleteAll( mColumns ); mColumns.clear(); QgsFields layerFields = source->fields(); if ( !fields.isEmpty() ) { Q_FOREACH ( const QString& field, fields ) { int attrIdx = layerFields.lookupField( field ); if ( attrIdx < 0 ) continue; QString currentAlias = source->attributeDisplayName( attrIdx ); QgsComposerTableColumn* col = new QgsComposerTableColumn; col->setAttribute( layerFields.at( attrIdx ).name() ); col->setHeading( currentAlias ); mColumns.append( col ); }
bool QgsComposerTableSortColumnsProxyModelV2::setData( const QModelIndex& index, const QVariant& value, int role ) { if ( !index.isValid() || role != Qt::EditRole ) return false; if ( !mComposerTable ) { return false; } QgsComposerTableColumn* column = columnFromIndex( index ); if ( !column ) { return false; } if ( index.column() == 1 ) { column->setSortOrder(( Qt::SortOrder )value.toInt() ); emit dataChanged( index, index ); return true; } return false; }
void QgsComposerAttributeTableV2::resetColumns() { QgsVectorLayer *source = sourceLayer(); if ( !source ) { return; } //remove existing columns qDeleteAll( mColumns ); mColumns.clear(); //rebuild columns list from vector layer fields int idx = 0; const QgsFields sourceFields = source->fields(); for ( const auto &field : sourceFields ) { QString currentAlias = source->attributeDisplayName( idx ); QgsComposerTableColumn *col = new QgsComposerTableColumn; col->setAttribute( field.name() ); col->setHeading( currentAlias ); mColumns.append( col ); idx++; } }
QVariant QgsComposerAttributeTableColumnModelV2::data( const QModelIndex &index, int role ) const { if ( !index.isValid() || ( role != Qt::DisplayRole && role != Qt::EditRole && role != Qt::UserRole ) ) { return QVariant(); } if ( index.row() >= mComposerTable->columns()->length() ) { return QVariant(); } //get column for index QgsComposerTableColumn* column = columnFromIndex( index ); if ( !column ) { return QVariant(); } if ( role == Qt::UserRole ) { //user role stores reference in column object return qVariantFromValue( qobject_cast<QObject *>( column ) ); } switch ( index.column() ) { case 0: return column->attribute(); case 1: return column->heading(); case 2: { if ( role == Qt::DisplayRole ) { switch ( column->hAlignment() ) { case Qt::AlignHCenter: return tr( "Center" ); case Qt::AlignRight: return tr( "Right" ); case Qt::AlignLeft: default: return tr( "Left" ); } } else { //edit role return column->hAlignment(); } } default: return QVariant(); } }
bool QgsComposerTable::tableReadXML( const QDomElement& itemElem, const QDomDocument& doc ) { if ( itemElem.isNull() ) { return false; } mHeaderFont.fromString( itemElem.attribute( "headerFont", "" ) ); mHeaderFontColor = QgsSymbolLayerV2Utils::decodeColor( itemElem.attribute( "headerFontColor", "0,0,0,255" ) ); mHeaderHAlignment = QgsComposerTable::HeaderHAlignment( itemElem.attribute( "headerHAlignment", "0" ).toInt() ); mContentFont.fromString( itemElem.attribute( "contentFont", "" ) ); mContentFontColor = QgsSymbolLayerV2Utils::decodeColor( itemElem.attribute( "contentFontColor", "0,0,0,255" ) ); mLineTextDistance = itemElem.attribute( "lineTextDist", "1.0" ).toDouble(); mGridStrokeWidth = itemElem.attribute( "gridStrokeWidth", "0.5" ).toDouble(); mShowGrid = itemElem.attribute( "showGrid", "1" ).toInt(); //grid color if ( itemElem.hasAttribute( "gridColor" ) ) { mGridColor = QgsSymbolLayerV2Utils::decodeColor( itemElem.attribute( "gridColor", "0,0,0,255" ) ); } else { //old style grid color int gridRed = itemElem.attribute( "gridColorRed", "0" ).toInt(); int gridGreen = itemElem.attribute( "gridColorGreen", "0" ).toInt(); int gridBlue = itemElem.attribute( "gridColorBlue", "0" ).toInt(); int gridAlpha = itemElem.attribute( "gridColorAlpha", "255" ).toInt(); mGridColor = QColor( gridRed, gridGreen, gridBlue, gridAlpha ); } //restore column specifications qDeleteAll( mColumns ); mColumns.clear(); QDomNodeList columnsList = itemElem.elementsByTagName( "displayColumns" ); if ( columnsList.size() > 0 ) { QDomElement columnsElem = columnsList.at( 0 ).toElement(); QDomNodeList columnEntryList = columnsElem.elementsByTagName( "column" ); for ( int i = 0; i < columnEntryList.size(); ++i ) { QDomElement columnElem = columnEntryList.at( i ).toElement(); QgsComposerTableColumn* column = new QgsComposerTableColumn; column->readXML( columnElem ); mColumns.append( column ); } } //restore general composer item properties QDomNodeList composerItemList = itemElem.elementsByTagName( "ComposerItem" ); if ( composerItemList.size() > 0 ) { QDomElement composerItemElem = composerItemList.at( 0 ).toElement(); _readXML( composerItemElem, doc ); } return true; }
bool QgsComposerTableV2::readXML( const QDomElement &itemElem, const QDomDocument &doc, bool ignoreFrames ) { deleteFrames(); //first create the frames if ( !_readXML( itemElem, doc, ignoreFrames ) ) { return false; } if ( itemElem.isNull() ) { return false; } mEmptyTableMode = QgsComposerTableV2::EmptyTableMode( itemElem.attribute( "emptyTableMode", "0" ).toInt() ); mEmptyTableMessage = itemElem.attribute( "emptyTableMessage", tr( "No matching records" ) ); mShowEmptyRows = itemElem.attribute( "showEmptyRows", "0" ).toInt(); if ( !QgsFontUtils::setFromXmlChildNode( mHeaderFont, itemElem, "headerFontProperties" ) ) { mHeaderFont.fromString( itemElem.attribute( "headerFont", "" ) ); } mHeaderFontColor = QgsSymbolLayerV2Utils::decodeColor( itemElem.attribute( "headerFontColor", "0,0,0,255" ) ); mHeaderHAlignment = QgsComposerTableV2::HeaderHAlignment( itemElem.attribute( "headerHAlignment", "0" ).toInt() ); mHeaderMode = QgsComposerTableV2::HeaderMode( itemElem.attribute( "headerMode", "0" ).toInt() ); if ( !QgsFontUtils::setFromXmlChildNode( mContentFont, itemElem, "contentFontProperties" ) ) { mContentFont.fromString( itemElem.attribute( "contentFont", "" ) ); } mContentFontColor = QgsSymbolLayerV2Utils::decodeColor( itemElem.attribute( "contentFontColor", "0,0,0,255" ) ); mCellMargin = itemElem.attribute( "cellMargin", "1.0" ).toDouble(); mGridStrokeWidth = itemElem.attribute( "gridStrokeWidth", "0.5" ).toDouble(); mShowGrid = itemElem.attribute( "showGrid", "1" ).toInt(); mGridColor = QgsSymbolLayerV2Utils::decodeColor( itemElem.attribute( "gridColor", "0,0,0,255" ) ); mBackgroundColor = QgsSymbolLayerV2Utils::decodeColor( itemElem.attribute( "backgroundColor", "255,255,255,0" ) ); mWrapBehaviour = QgsComposerTableV2::WrapBehaviour( itemElem.attribute( "wrapBehaviour", "0" ).toInt() ); //restore column specifications qDeleteAll( mColumns ); mColumns.clear(); QDomNodeList columnsList = itemElem.elementsByTagName( "displayColumns" ); if ( columnsList.size() > 0 ) { QDomElement columnsElem = columnsList.at( 0 ).toElement(); QDomNodeList columnEntryList = columnsElem.elementsByTagName( "column" ); for ( int i = 0; i < columnEntryList.size(); ++i ) { QDomElement columnElem = columnEntryList.at( i ).toElement(); QgsComposerTableColumn* column = new QgsComposerTableColumn; column->readXML( columnElem ); mColumns.append( column ); } } return true; }
bool QgsComposerAttributeTableColumnModelV2::moveColumnInSortRank( QgsComposerTableColumn * column, ShiftDirection direction ) { if ( !mComposerTable || !column ) { return false; } if (( direction == ShiftUp && column->sortByRank() <= 1 ) || ( direction == ShiftDown && column->sortByRank() <= 0 ) ) { //already at start/end of list or not being used for sort return false; } //find column before this one in sort order QList<QgsComposerTableColumn*> sortedColumns; QList<QgsComposerTableColumn*>::iterator columnIt = mComposerTable->columns()->begin(); for ( ; columnIt != mComposerTable->columns()->end(); ++columnIt ) { if (( *columnIt )->sortByRank() > 0 ) { sortedColumns.append( *columnIt ); } } qStableSort( sortedColumns.begin(), sortedColumns.end(), columnsBySortRank ); int columnPos = sortedColumns.indexOf( column ); if (( columnPos == 0 && direction == ShiftUp ) || (( columnPos == sortedColumns.length() - 1 ) && direction == ShiftDown ) ) { //column already at start/end return false; } QgsComposerTableColumn* swapColumn = direction == ShiftUp ? sortedColumns[ columnPos - 1] : sortedColumns[ columnPos + 1]; QModelIndex idx = indexFromColumn( column ); QModelIndex idxSwap = indexFromColumn( swapColumn ); //now swap sort ranks int oldSortRank = column->sortByRank(); column->setSortByRank( swapColumn->sortByRank() ); emit dataChanged( idx, idx ); swapColumn->setSortByRank( oldSortRank ); emit dataChanged( idxSwap, idxSwap ); return true; }
QgsComposerTableColumn *QgsComposerTableColumn::clone() { QgsComposerTableColumn *newColumn = new QgsComposerTableColumn; newColumn->setAttribute( mAttribute ); newColumn->setHeading( mHeading ); newColumn->setHAlignment( mHAlignment ); newColumn->setVAlignment( mVAlignment ); newColumn->setSortByRank( mSortByRank ); newColumn->setSortOrder( mSortOrder ); newColumn->setWidth( mWidth ); return newColumn; }
void QgsComposerTextTable::setHeaderLabels( const QStringList& labels ) { //update existing column headings, or add new columns if required QStringList::const_iterator labelIt = labels.constBegin(); int idx = 0; for ( ; labelIt != labels.constEnd(); ++labelIt ) { QgsComposerTableColumn* col; if ( idx < mColumns.count() ) { col = mColumns.at( idx ); } else { col = new QgsComposerTableColumn; mColumns.append( col ); } col->setHeading(( *labelIt ) ); idx++; } }
void QgsComposerAttributeTable::resetColumns() { if ( !mVectorLayer ) { return; } //remove existing columns qDeleteAll( mColumns ); mColumns.clear(); //rebuild columns list from vector layer fields const QgsFields& fields = mVectorLayer->fields(); for ( int idx = 0; idx < fields.count(); ++idx ) { QString currentAlias = mVectorLayer->attributeDisplayName( idx ); QgsComposerTableColumn* col = new QgsComposerTableColumn; col->setAttribute( fields[idx].name() ); col->setHeading( currentAlias ); mColumns.append( col ); } }
QVariant QgsComposerTableSortColumnsProxyModelV2::data( const QModelIndex &index, int role ) const { if (( role != Qt::DisplayRole && role != Qt::EditRole ) || !index.isValid() ) { return QVariant(); } QgsComposerTableColumn* column = columnFromIndex( index ); if ( !column ) { return QVariant(); } switch ( index.column() ) { case 0: return column->attribute(); case 1: if ( role == Qt::DisplayRole ) { switch ( column->sortOrder() ) { case Qt::DescendingOrder: return tr( "Descending" ); case Qt::AscendingOrder: default: return tr( "Ascending" ); } } else { //edit role return column->sortOrder(); } default: return QVariant(); } }
bool QgsComposerTableSortColumnsProxyModelV2::filterAcceptsRow( int source_row, const QModelIndex &source_parent ) const { //get QgsComposerTableColumn corresponding to row QModelIndex index = sourceModel()->index( source_row, 0, source_parent ); QgsComposerTableColumn* column = columnFromSourceIndex( index ); if ( !column ) { return false; } if (( column->sortByRank() > 0 && mFilterType == ShowSortedColumns ) || ( column->sortByRank() <= 0 && mFilterType == ShowUnsortedColumns ) ) { //column matches filter type return true; } else { return false; } }
bool QgsComposerAttributeTableColumnModelV2::setData( const QModelIndex& index, const QVariant& value, int role ) { if ( !index.isValid() || role != Qt::EditRole || !mComposerTable ) { return false; } if ( index.row() >= mComposerTable->columns()->length() ) { return false; } //get column for index QgsComposerTableColumn* column = columnFromIndex( index ); if ( !column ) { return false; } switch ( index.column() ) { case 0: // also update column's heading, if it hasn't been customised if ( column->heading().isEmpty() || ( column->heading() == column->attribute() ) ) { column->setHeading( value.toString() ); emit dataChanged( createIndex( index.row(), 1, 0 ), createIndex( index.row(), 1, 0 ) ); } column->setAttribute( value.toString() ); emit dataChanged( index, index ); return true; case 1: column->setHeading( value.toString() ); emit dataChanged( index, index ); return true; case 2: column->setHAlignment(( Qt::AlignmentFlag )value.toInt() ); emit dataChanged( index, index ); return true; default: break; } return false; }
void QgsComposerAttributeTableV2::setDisplayAttributes( const QSet<int>& attr, bool refresh ) { QgsVectorLayer* source = sourceLayer(); if ( !source ) { return; } //rebuild columns list, taking only attributes with index in supplied QSet qDeleteAll( mColumns ); mColumns.clear(); const QgsFields& fields = source->pendingFields(); if ( !attr.empty() ) { QSet<int>::const_iterator attIt = attr.constBegin(); for ( ; attIt != attr.constEnd(); ++attIt ) { int attrIdx = ( *attIt ); if ( !fields.exists( attrIdx ) ) { continue; } QString currentAlias = source->attributeDisplayName( attrIdx ); QgsComposerTableColumn* col = new QgsComposerTableColumn; col->setAttribute( fields[attrIdx].name() ); col->setHeading( currentAlias ); mColumns.append( col ); } } else { //resetting, so add all attributes to columns for ( int idx = 0; idx < fields.count(); ++idx ) { QString currentAlias = source->attributeDisplayName( idx ); QgsComposerTableColumn* col = new QgsComposerTableColumn; col->setAttribute( fields[idx].name() ); col->setHeading( currentAlias ); mColumns.append( col ); } } if ( refresh ) { refreshAttributes(); } }
bool QgsComposerTableV2::readXml( const QDomElement &itemElem, const QDomDocument &doc, bool ignoreFrames ) { deleteFrames(); //first create the frames if ( !_readXml( itemElem, doc, ignoreFrames ) ) { return false; } if ( itemElem.isNull() ) { return false; } mEmptyTableMode = QgsComposerTableV2::EmptyTableMode( itemElem.attribute( QStringLiteral( "emptyTableMode" ), QStringLiteral( "0" ) ).toInt() ); mEmptyTableMessage = itemElem.attribute( QStringLiteral( "emptyTableMessage" ), tr( "No matching records" ) ); mShowEmptyRows = itemElem.attribute( QStringLiteral( "showEmptyRows" ), QStringLiteral( "0" ) ).toInt(); if ( !QgsFontUtils::setFromXmlChildNode( mHeaderFont, itemElem, QStringLiteral( "headerFontProperties" ) ) ) { mHeaderFont.fromString( itemElem.attribute( QStringLiteral( "headerFont" ), QLatin1String( "" ) ) ); } mHeaderFontColor = QgsSymbolLayerUtils::decodeColor( itemElem.attribute( QStringLiteral( "headerFontColor" ), QStringLiteral( "0,0,0,255" ) ) ); mHeaderHAlignment = QgsComposerTableV2::HeaderHAlignment( itemElem.attribute( QStringLiteral( "headerHAlignment" ), QStringLiteral( "0" ) ).toInt() ); mHeaderMode = QgsComposerTableV2::HeaderMode( itemElem.attribute( QStringLiteral( "headerMode" ), QStringLiteral( "0" ) ).toInt() ); if ( !QgsFontUtils::setFromXmlChildNode( mContentFont, itemElem, QStringLiteral( "contentFontProperties" ) ) ) { mContentFont.fromString( itemElem.attribute( QStringLiteral( "contentFont" ), QLatin1String( "" ) ) ); } mContentFontColor = QgsSymbolLayerUtils::decodeColor( itemElem.attribute( QStringLiteral( "contentFontColor" ), QStringLiteral( "0,0,0,255" ) ) ); mCellMargin = itemElem.attribute( QStringLiteral( "cellMargin" ), QStringLiteral( "1.0" ) ).toDouble(); mGridStrokeWidth = itemElem.attribute( QStringLiteral( "gridStrokeWidth" ), QStringLiteral( "0.5" ) ).toDouble(); mHorizontalGrid = itemElem.attribute( QStringLiteral( "horizontalGrid" ), QStringLiteral( "1" ) ).toInt(); mVerticalGrid = itemElem.attribute( QStringLiteral( "verticalGrid" ), QStringLiteral( "1" ) ).toInt(); mShowGrid = itemElem.attribute( QStringLiteral( "showGrid" ), QStringLiteral( "1" ) ).toInt(); mGridColor = QgsSymbolLayerUtils::decodeColor( itemElem.attribute( QStringLiteral( "gridColor" ), QStringLiteral( "0,0,0,255" ) ) ); mBackgroundColor = QgsSymbolLayerUtils::decodeColor( itemElem.attribute( QStringLiteral( "backgroundColor" ), QStringLiteral( "255,255,255,0" ) ) ); mWrapBehavior = QgsComposerTableV2::WrapBehavior( itemElem.attribute( QStringLiteral( "wrapBehavior" ), QStringLiteral( "0" ) ).toInt() ); //restore column specifications qDeleteAll( mColumns ); mColumns.clear(); QDomNodeList columnsList = itemElem.elementsByTagName( QStringLiteral( "displayColumns" ) ); if ( !columnsList.isEmpty() ) { QDomElement columnsElem = columnsList.at( 0 ).toElement(); QDomNodeList columnEntryList = columnsElem.elementsByTagName( QStringLiteral( "column" ) ); for ( int i = 0; i < columnEntryList.size(); ++i ) { QDomElement columnElem = columnEntryList.at( i ).toElement(); QgsComposerTableColumn *column = new QgsComposerTableColumn; column->readXml( columnElem ); mColumns.append( column ); } } //restore cell styles QDomNodeList stylesList = itemElem.elementsByTagName( QStringLiteral( "cellStyles" ) ); if ( !stylesList.isEmpty() ) { QDomElement stylesElem = stylesList.at( 0 ).toElement(); QMap< CellStyleGroup, QString >::const_iterator it = mCellStyleNames.constBegin(); for ( ; it != mCellStyleNames.constEnd(); ++it ) { QString styleName = it.value(); QDomNodeList styleList = stylesElem.elementsByTagName( styleName ); if ( !styleList.isEmpty() ) { QDomElement styleElem = styleList.at( 0 ).toElement(); QgsComposerTableStyle *style = mCellStyles.value( it.key() ); if ( style ) style->readXml( styleElem ); } } } return true; }