Skip to content

Commit

Permalink
Merge branch 'raster-pipes-2'
Browse files Browse the repository at this point in the history
  • Loading branch information
mhugent committed Jul 25, 2012
2 parents d039c3f + 1bcd947 commit 42aed66
Show file tree
Hide file tree
Showing 65 changed files with 4,990 additions and 1,225 deletions.
25 changes: 7 additions & 18 deletions python/core/qgsrasterrenderer.sip
Expand Up @@ -29,9 +29,9 @@ class QgsRasterRenderer
virtual ~QgsRasterRenderer();

virtual QString type() const;
virtual void draw( QPainter* p, QgsRasterViewPort* viewPort, const QgsMapToPixel* theQgsMapToPixel ) = 0;
virtual void * readBlock( int bandNo, const QgsRectangle & extent, int width, int height );

bool usesTransparency( QgsCoordinateReferenceSystem& srcSRS, QgsCoordinateReferenceSystem& dstSRS ) const;
bool usesTransparency() const;

void setOpacity( double opacity );
double opacity() const;
Expand All @@ -45,17 +45,6 @@ class QgsRasterRenderer
void setInvertColor( bool invert );
bool invertColor() const;

/**Set resampler for zoomed in scales. Takes ownership of the object*/
void setZoomedInResampler( QgsRasterResampler* r );
const QgsRasterResampler* zoomedInResampler();

/**Set resampler for zoomed out scales. Takes ownership of the object*/
void setZoomedOutResampler( QgsRasterResampler* r );
const QgsRasterResampler* zoomedOutResampler() const;

void setMaxOversampling( double os );
double maxOversampling() const;

/**Get symbology items if provided by renderer*/
virtual void legendSymbologyItems( QList< QPair< QString, QColor > >& symbolItems ) const;

Expand All @@ -76,7 +65,7 @@ class QgsPalettedRasterRenderer: QgsRasterRenderer
~QgsPalettedRasterRenderer();
static QgsRasterRenderer* create( const QDomElement& elem, QgsRasterDataProvider* provider );

void draw( QPainter* p, QgsRasterViewPort* viewPort, const QgsMapToPixel* theQgsMapToPixel );
void * readBlock( int bandNo, const QgsRectangle & extent, int width, int height );

/**Returns number of colors*/
int nColors() const;
Expand All @@ -101,7 +90,7 @@ class QgsMultiBandColorRenderer: QgsRasterRenderer

static QgsRasterRenderer* create( const QDomElement& elem, QgsRasterDataProvider* provider );

void draw( QPainter* p, QgsRasterViewPort* viewPort, const QgsMapToPixel* theQgsMapToPixel );
void * readBlock( int bandNo, const QgsRectangle & extent, int width, int height );

int redBand() const;
void setRedBand( int band );
Expand Down Expand Up @@ -137,7 +126,7 @@ class QgsSingleBandPseudoColorRenderer: QgsRasterRenderer

static QgsRasterRenderer* create( const QDomElement& elem, QgsRasterDataProvider* provider );

virtual void draw( QPainter* p, QgsRasterViewPort* viewPort, const QgsMapToPixel* theQgsMapToPixel );
void * readBlock( int bandNo, const QgsRectangle & extent, int width, int height );

/**Takes ownership of the shader*/
void setShader( QgsRasterShader* shader );
Expand All @@ -159,7 +148,7 @@ class QgsSingleBandGrayRenderer: QgsRasterRenderer

static QgsRasterRenderer* create( const QDomElement& elem, QgsRasterDataProvider* provider );

virtual void draw( QPainter* p, QgsRasterViewPort* viewPort, const QgsMapToPixel* theQgsMapToPixel );
void * readBlock( int bandNo, const QgsRectangle & extent, int width, int height );

int grayBand() const;
void setGrayBand( int band );
Expand All @@ -183,7 +172,7 @@ class QgsSingleBandColorDataRenderer: QgsRasterRenderer

static QgsRasterRenderer* create( const QDomElement& elem, QgsRasterDataProvider* provider );

virtual void draw( QPainter* p, QgsRasterViewPort* viewPort, const QgsMapToPixel* theQgsMapToPixel );
void * readBlock( int bandNo, const QgsRectangle & extent, int width, int height );

void writeXML( QDomDocument& doc, QDomElement& parentElem ) const;
};
29 changes: 29 additions & 0 deletions python/core/qgsrasterresamplefilter.sip
@@ -0,0 +1,29 @@
class QgsRasterResampleFilter
{
%TypeHeaderCode
#include "qgsrasterresamplefilter.h"
%End

public:
QgsRasterResampleFilter( QgsRasterFace* input = 0 );
~QgsRasterResampleFilter();

void * readBlock( int bandNo, const QgsRectangle & extent, int width, int height );

/**Set resampler for zoomed in scales. Takes ownership of the object*/
void setZoomedInResampler( QgsRasterResampler* r );
const QgsRasterResampler* zoomedInResampler();

/**Set resampler for zoomed out scales. Takes ownership of the object*/
void setZoomedOutResampler( QgsRasterResampler* r );
const QgsRasterResampler* zoomedOutResampler() const;

void setMaxOversampling( double os );
double maxOversampling() const;

virtual void writeXML( QDomDocument& doc, QDomElement& parentElem ) const = 0;

/**Sets base class members from xml. Usually called from create() methods of subclasses*/
void readXML( const QDomElement& rendererElem );
};

2 changes: 2 additions & 0 deletions python/gui/gui.sip
Expand Up @@ -37,5 +37,7 @@
%Include qgsattributeeditor.sip
%Include qgsfieldvalidator.sip
%Include qgsquerybuilder.sip
%Include qgsrasterformatsaveoptionswidget.sip

%Include symbology-ng-gui.sip

61 changes: 61 additions & 0 deletions python/gui/qgsrasterformatsaveoptionswidget.sip
@@ -0,0 +1,61 @@

class QgsRasterFormatSaveOptionsWidget : QWidget
{
%TypeHeaderCode
#include <qgsrasterformatsaveoptionswidget.h>
%End

public:

enum Type
{
Default, // everything except profile buttons (save as dlg)
Full, // everything (options dlg)
Table, // just table
LineEdit // just the line edit
};

QgsRasterFormatSaveOptionsWidget( QWidget* parent = 0, QString format = "GTiff",
QgsRasterFormatSaveOptionsWidget::Type type = Default,
QString provider = "gdal" );
~QgsRasterFormatSaveOptionsWidget();

void setFormat( QString format );
void setProvider( QString provider );
QStringList options() const;
void setType( QgsRasterFormatSaveOptionsWidget::Type type = Default );

public slots:

void apply();
void helpOptions();
bool validateOptions( bool gui = true );

private slots:

void on_mProfileNewButton_clicked();
void on_mProfileDeleteButton_clicked();
void on_mProfileResetButton_clicked();
void on_mOptionsAddButton_clicked();
void on_mOptionsDeleteButton_clicked();
void on_mOptionsLabel_clicked();
void on_mOptionsLineEdit_editingFinished();
void optionsTableChanged();
void optionsTableEnableDeleteButton();
void updateOptions();
void swapOptionsUI( int newIndex = -1 );

private:

QString settingsKey( QString profile ) const;
QString currentProfileKey() const;
QString createOptions( QString profile ) const;
void deleteCreateOptions( QString profile );
void setCreateOptions( );
void setCreateOptions( QString profile, QString options );
void setCreateOptions( QString profile, QStringList list );
QStringList profiles() const;
void updateProfiles();
bool eventFilter(QObject *obj, QEvent *event);

};
5 changes: 3 additions & 2 deletions python/plugins/GdalTools/tools/doMerge.py
Expand Up @@ -20,6 +20,8 @@ def __init__(self, iface):
self.inSelector.setType( self.inSelector.FILE )
self.outSelector.setType( self.outSelector.FILE )
self.recurseCheck.hide()
# use this for approx. previous UI
#self.creationOptionsTable.setType(QgsRasterFormatSaveOptionsWidget.Table)

self.outputFormat = Utils.fillRasterOutputFormat()
self.extent = None
Expand All @@ -33,8 +35,7 @@ def __init__(self, iface):
(self.recurseCheck, SIGNAL("stateChanged(int)"), self.inputDirCheck),
( self.separateCheck, SIGNAL( "stateChanged( int )" ) ),
( self.pctCheck, SIGNAL( "stateChanged( int )" ) ),
( self.intersectCheck, SIGNAL( "stateChanged( int )" ) ),
(self.creationOptionsTable, [SIGNAL("cellValueChanged(int, int)"), SIGNAL("rowRemoved()")], self.creationGroupBox)
( self.intersectCheck, SIGNAL( "stateChanged( int )" ) )
]
)

Expand Down
12 changes: 6 additions & 6 deletions python/plugins/GdalTools/tools/widgetMerge.ui
Expand Up @@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>345</width>
<height>276</height>
<width>371</width>
<height>284</height>
</rect>
</property>
<property name="sizePolicy">
Expand Down Expand Up @@ -117,11 +117,11 @@
<bool>false</bool>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<property name="bottomMargin">
<property name="margin">
<number>0</number>
</property>
<item>
<widget class="GdalToolsOptionsTable" name="creationOptionsTable" native="true"/>
<widget class="QgsRasterFormatSaveOptionsWidget" name="creationOptionsTable" native="true"/>
</item>
</layout>
</widget>
Expand All @@ -136,9 +136,9 @@
<container>1</container>
</customwidget>
<customwidget>
<class>GdalToolsOptionsTable</class>
<class>QgsRasterFormatSaveOptionsWidget</class>
<extends>QWidget</extends>
<header>optionsTable</header>
<header>qgis.gui</header>
<container>1</container>
</customwidget>
</customwidgets>
Expand Down
4 changes: 4 additions & 0 deletions src/app/legend/qgslegendlayer.cpp
Expand Up @@ -480,6 +480,10 @@ void QgsLegendLayer::addToPopupMenu( QMenu& theMenu )
theMenu.addAction( showNFeaturesAction );
theMenu.addSeparator();
}
else if ( lyr->type() == QgsMapLayer::RasterLayer )
{
theMenu.addAction( tr( "Save As..." ), QgisApp::instance(), SLOT( saveAsRasterFile() ) );
}

// properties goes on bottom of menu for consistency with normal ui standards
// e.g. kde stuff
Expand Down
60 changes: 56 additions & 4 deletions src/app/qgisapp.cpp
Expand Up @@ -159,9 +159,12 @@
#include "qgspythonrunner.h"
#include "qgsquerybuilder.h"
#include "qgsrastercalcdialog.h"
#include "qgsrasterfilewriter.h"
#include "qgsrasteriterator.h"
#include "qgsrasterlayer.h"
#include "qgsrasterlayerproperties.h"
#include "qgsrasterrenderer.h"
#include "qgsrasterlayersaveasdialog.h"
#include "qgsrectangle.h"
#include "qgsrenderer.h"
#include "qgsscalecombobox.h"
Expand Down Expand Up @@ -909,7 +912,7 @@ void QgisApp::createActions()
connect( mActionOpenTable, SIGNAL( triggered() ), this, SLOT( attributeTable() ) );
connect( mActionToggleEditing, SIGNAL( triggered() ), this, SLOT( toggleEditing() ) );
connect( mActionSaveEdits, SIGNAL( triggered() ), this, SLOT( saveEdits() ) );
connect( mActionLayerSaveAs, SIGNAL( triggered() ), this, SLOT( saveAsVectorFile() ) );
connect( mActionLayerSaveAs, SIGNAL( triggered() ), this, SLOT( saveAsFile() ) );
connect( mActionLayerSelectionSaveAs, SIGNAL( triggered() ), this, SLOT( saveSelectionAsVectorFile() ) );
connect( mActionRemoveLayer, SIGNAL( triggered() ), this, SLOT( removeLayer() ) );
connect( mActionSetLayerCRS, SIGNAL( triggered() ), this, SLOT( setLayerCRS() ) );
Expand Down Expand Up @@ -3865,8 +3868,56 @@ void QgisApp::attributeTable()
// the dialog will be deleted by itself on close
}

void QgisApp::saveAsVectorFile()
void QgisApp::saveAsRasterFile()
{
QgsRasterLayer* rasterLayer = qobject_cast<QgsRasterLayer *>( activeLayer() );
if ( !rasterLayer )
{
return;
}

QgsRasterLayerSaveAsDialog d( rasterLayer->dataProvider(), mMapCanvas->extent() );
if ( d.exec() == QDialog::Accepted )
{
QgsRasterFileWriter fileWriter( d.outputFileName() );
if ( d.tileMode() )
{
fileWriter.setTiledMode( true );
fileWriter.setMaxTileWidth( d.maximumTileSizeX() );
fileWriter.setMaxTileHeight( d.maximumTileSizeY() );
}

QProgressDialog pd( 0, tr( "Abort..." ), 0, 0 );
pd.setWindowModality( Qt::WindowModal );
QgsRasterDataProvider* provider = rasterLayer->dataProvider();
if ( !provider )
{
return;
}
QgsRasterIterator iterator( provider );
int nRows = -1; //calculate number of rows such that pixels are squares
if ( provider->capabilities() & QgsRasterDataProvider::ExactResolution )
{
nRows = d.nRows();
}
fileWriter.setCreateOptions( d.createOptions() );

fileWriter.writeRaster( &iterator, d.nColumns(), nRows, d.outputRectangle(), rasterLayer->crs(), &pd );
}
}

void QgisApp::saveAsFile()
{
QgsMapLayer* layer = activeLayer();
if ( layer )
{
QgsMapLayer::LayerType layerType = layer->type();
if ( layerType == QgsMapLayer::RasterLayer )
{
saveAsRasterFile();
}
return;
}
saveAsVectorFileGeneral( false );
}

Expand Down Expand Up @@ -6929,7 +6980,8 @@ void QgisApp::activateDeactivateLayerRelatedActions( QgsMapLayer* layer )
else if ( layer->type() == QgsMapLayer::RasterLayer )
{
const QgsRasterLayer *rlayer = qobject_cast<const QgsRasterLayer *>( layer );
if ( rlayer->dataProvider()->dataType( 1 ) != QgsRasterDataProvider::ARGBDataType )
if ( rlayer->dataProvider()->dataType( 1 ) != QgsRasterDataProvider::ARGB32
&& rlayer->dataProvider()->dataType( 1 ) != QgsRasterDataProvider::ARGB32_Premultiplied )
{
if ( rlayer->dataProvider()->capabilities() & QgsRasterDataProvider::Size )
{
Expand Down Expand Up @@ -6958,7 +7010,7 @@ void QgisApp::activateDeactivateLayerRelatedActions( QgsMapLayer* layer )
mActionOpenTable->setEnabled( false );
mActionToggleEditing->setEnabled( false );
mActionSaveEdits->setEnabled( false );
mActionLayerSaveAs->setEnabled( false );
mActionLayerSaveAs->setEnabled( true );
mActionLayerSelectionSaveAs->setEnabled( false );
mActionAddFeature->setEnabled( false );
mActionDeleteSelected->setEnabled( false );
Expand Down
5 changes: 4 additions & 1 deletion src/app/qgisapp.h
Expand Up @@ -819,9 +819,12 @@ class QgisApp : public QMainWindow, private Ui::MainWindow
void saveEdits( QgsMapLayer *layer );

//! save current vector layer
void saveAsVectorFile();
void saveAsFile();
void saveSelectionAsVectorFile();

//! save current raster layer
void saveAsRasterFile();

//! show python console
void showPythonDialog();

Expand Down

0 comments on commit 42aed66

Please sign in to comment.