mirror of
https://github.com/qgis/QGIS.git
synced 2025-10-06 00:07:29 -04:00
Zen minimalism for raster graphing page
git-svn-id: http://svn.osgeo.org/qgis/trunk@14296 c8812cc2-4d05-0410-92ff-de0c093fc19c
This commit is contained in:
parent
c087a660fe
commit
8ecc563b5b
@ -52,6 +52,7 @@
|
||||
#include "qgslogger.h"
|
||||
|
||||
// QWT Charting widget
|
||||
#include <qwt_plot_canvas.h>
|
||||
#include <qwt_array.h>
|
||||
#include <qwt_legend.h>
|
||||
#include <qwt_plot.h>
|
||||
@ -167,97 +168,23 @@ QgsRasterLayerProperties::QgsRasterLayerProperties( QgsMapLayer* lyr, QgsMapCanv
|
||||
|
||||
QgsDebugMsg( "Populating band combo boxes" );
|
||||
|
||||
//
|
||||
// Get a list of band names
|
||||
//
|
||||
QStringList myBandNameList;
|
||||
|
||||
int myBandCountInt = mRasterLayer->bandCount();
|
||||
|
||||
QgsDebugMsg( QString( "Looping though %1 image layers to get their names " ).arg( myBandCountInt ) );
|
||||
|
||||
for ( int myIteratorInt = 1;
|
||||
myIteratorInt <= myBandCountInt;
|
||||
++myIteratorInt )
|
||||
{
|
||||
//find out the name of this band
|
||||
QString myRasterBandNameQString = mRasterLayer->bandName( myIteratorInt ) ;
|
||||
|
||||
//add the band to the histogram tab
|
||||
//
|
||||
QPixmap myPixmap( 10, 10 );
|
||||
|
||||
if ( myBandCountInt == 1 ) //draw single band images with black
|
||||
{
|
||||
myPixmap.fill( Qt::black );
|
||||
}
|
||||
else if ( myIteratorInt == 1 )
|
||||
{
|
||||
myPixmap.fill( Qt::red );
|
||||
}
|
||||
else if ( myIteratorInt == 2 )
|
||||
{
|
||||
myPixmap.fill( Qt::green );
|
||||
}
|
||||
else if ( myIteratorInt == 3 )
|
||||
{
|
||||
myPixmap.fill( Qt::blue );
|
||||
}
|
||||
else if ( myIteratorInt == 4 )
|
||||
{
|
||||
myPixmap.fill( Qt::magenta );
|
||||
}
|
||||
else if ( myIteratorInt == 5 )
|
||||
{
|
||||
myPixmap.fill( Qt::darkRed );
|
||||
}
|
||||
else if ( myIteratorInt == 6 )
|
||||
{
|
||||
myPixmap.fill( Qt::darkGreen );
|
||||
}
|
||||
else if ( myIteratorInt == 7 )
|
||||
{
|
||||
myPixmap.fill( Qt::darkBlue );
|
||||
}
|
||||
else
|
||||
{
|
||||
myPixmap.fill( Qt::gray );
|
||||
}
|
||||
lstHistogramLabels->addItem( new QListWidgetItem( myPixmap, myRasterBandNameQString ) );
|
||||
//keep a list of band names for later use
|
||||
//! @note band names should not be translated!
|
||||
myBandNameList.append( myRasterBandNameQString );
|
||||
}
|
||||
|
||||
//select all histogram layers list items by default
|
||||
for ( int myIteratorInt = 1;
|
||||
myIteratorInt <= myBandCountInt;
|
||||
++myIteratorInt )
|
||||
{
|
||||
QListWidgetItem *myItem = lstHistogramLabels->item( myIteratorInt - 1 );
|
||||
myItem->setSelected( true );
|
||||
}
|
||||
|
||||
for ( QStringList::Iterator myIterator = myBandNameList.begin();
|
||||
myIterator != myBandNameList.end();
|
||||
++myIterator )
|
||||
{
|
||||
QString myQString = *myIterator;
|
||||
|
||||
QgsDebugMsg( QString( "Inserting : %1" ).arg( myQString ) );
|
||||
|
||||
cboGray->addItem( myQString );
|
||||
cboRed->addItem( myQString );
|
||||
cboGreen->addItem( myQString );
|
||||
cboBlue->addItem( myQString );
|
||||
cboxColorMapBand->addItem( myQString );
|
||||
QString myRasterBandName = mRasterLayer->bandName( myIteratorInt ) ;
|
||||
cboGray->addItem( myRasterBandName );
|
||||
cboRed->addItem( myRasterBandName );
|
||||
cboGreen->addItem( myRasterBandName );
|
||||
cboBlue->addItem( myRasterBandName );
|
||||
cboxColorMapBand->addItem( myRasterBandName );
|
||||
}
|
||||
|
||||
cboRed->addItem( TRSTRING_NOT_SET );
|
||||
cboGreen->addItem( TRSTRING_NOT_SET );
|
||||
cboBlue->addItem( TRSTRING_NOT_SET );
|
||||
cboGray->addItem( TRSTRING_NOT_SET );
|
||||
|
||||
cboxTransparencyBand->addItem( TRSTRING_NOT_SET );
|
||||
|
||||
QIcon myPyramidPixmap( QgisApp::getThemeIcon( "/mIconPyramid.png" ) );
|
||||
@ -1911,13 +1838,40 @@ void QgsRasterLayerProperties::on_pbnExportTransparentPixelValues_clicked()
|
||||
}
|
||||
}
|
||||
|
||||
void QgsRasterLayerProperties::on_pbnHistRefresh_clicked()
|
||||
void QgsRasterLayerProperties::on_tabBar_currentChanged( int theTab )
|
||||
{
|
||||
int myHistogramTab = 6;
|
||||
if ( theTab == myHistogramTab )
|
||||
{
|
||||
refreshHistogram();
|
||||
}
|
||||
}
|
||||
|
||||
void QgsRasterLayerProperties::refreshHistogram()
|
||||
{
|
||||
mHistogramProgress->show();
|
||||
connect( mRasterLayer, SIGNAL( progressUpdate( int ) ), mHistogramProgress, SLOT( setValue( int ) ) );
|
||||
QApplication::setOverrideCursor( Qt::WaitCursor );
|
||||
QgsDebugMsg( "entered." );
|
||||
int myBandCountInt = mRasterLayer->bandCount();
|
||||
|
||||
QwtPlot * mypPlot = new QwtPlot( mChartWidget );
|
||||
mypPlot->canvas()->setCursor(Qt::ArrowCursor);
|
||||
//ensure all children get removed
|
||||
mypPlot->setAutoDelete( true );
|
||||
QVBoxLayout *mpHistogramLayout = new QVBoxLayout( mChartWidget );
|
||||
mpHistogramLayout->setContentsMargins( 0, 0, 0, 0 );
|
||||
mpHistogramLayout->addWidget( mypPlot );
|
||||
mChartWidget->setLayout( mpHistogramLayout );
|
||||
mypPlot->setTitle( QObject::tr( "Raster Histogram") );
|
||||
mypPlot->insertLegend( new QwtLegend(), QwtPlot::BottomLegend );
|
||||
// Set axis titles
|
||||
mypPlot->setAxisTitle( QwtPlot::xBottom, QObject::tr("Pixel Value") );
|
||||
mypPlot->setAxisTitle( QwtPlot::yLeft, QObject::tr("Frequency") );
|
||||
mypPlot->setAxisAutoScale( QwtPlot::xBottom );
|
||||
mypPlot->setAxisAutoScale( QwtPlot::yLeft );
|
||||
// add a grid
|
||||
QwtPlotGrid * myGrid = new QwtPlotGrid();
|
||||
myGrid->attach(mypPlot);
|
||||
// Explanation:
|
||||
// We use the gdal histogram creation routine is called for each selected
|
||||
// layer. Currently the hist is hardcoded
|
||||
@ -1928,125 +1882,48 @@ void QgsRasterLayerProperties::on_pbnHistRefresh_clicked()
|
||||
// bin in all selected layers, and the min. It then draws a scaled line between min
|
||||
// and max - scaled to image height. 1 line drawn per selected band
|
||||
//
|
||||
const int BINCOUNT = spinHistBinCount->value();
|
||||
const int BINCOUNT = 255;
|
||||
enum GRAPH_TYPE { BAR_CHART, LINE_CHART } myGraphType;
|
||||
if ( radHistTypeBar->isChecked() ) myGraphType = BAR_CHART; else myGraphType = LINE_CHART;
|
||||
bool myIgnoreOutOfRangeFlag = chkHistIgnoreOutOfRange->isChecked();
|
||||
bool myThoroughBandScanFlag = chkHistAllowApproximation->isChecked();
|
||||
|
||||
#ifdef QGISDEBUG
|
||||
long myCellCount = mRasterLayer->width() * mRasterLayer->height();
|
||||
#endif
|
||||
|
||||
QgsDebugMsg( "Computing histogram minima and maxima" );
|
||||
//somtimes there are more bins than needed
|
||||
//we find out the last on that actually has data in it
|
||||
//so we can discard the rest adn the x-axis scales correctly
|
||||
myGraphType = BAR_CHART;
|
||||
bool myIgnoreOutOfRangeFlag = true;
|
||||
bool myThoroughBandScanFlag = false;
|
||||
int myLastBinWithData = 0;
|
||||
//
|
||||
// First scan through to get max and min cell counts from among selected layers' histograms
|
||||
//
|
||||
double myYAxisMax = 0;
|
||||
double myYAxisMin = 0;
|
||||
int myXAxisMin = 0;
|
||||
int myXAxisMax = 0;
|
||||
bool myFirstItemFlag = true;
|
||||
for ( int myIteratorInt = 1;
|
||||
myIteratorInt <= myBandCountInt;
|
||||
++myIteratorInt )
|
||||
{
|
||||
QgsRasterBandStats myRasterBandStats = mRasterLayer->bandStatistics( myIteratorInt );
|
||||
//calculate the x axis min max
|
||||
if ( myRasterBandStats.minimumValue < myXAxisMin || myIteratorInt == 1 )
|
||||
{
|
||||
myXAxisMin = static_cast < unsigned int >( myRasterBandStats.minimumValue );
|
||||
}
|
||||
if ( myRasterBandStats.maximumValue < myXAxisMax || myIteratorInt == 1 )
|
||||
{
|
||||
myXAxisMax = static_cast < unsigned int >( myRasterBandStats.maximumValue );
|
||||
}
|
||||
QListWidgetItem *myItem = lstHistogramLabels->item( myIteratorInt - 1 );
|
||||
if ( myItem->isSelected() )
|
||||
{
|
||||
QgsDebugMsg( "Ensuring hist is populated for this layer" );
|
||||
mRasterLayer->populateHistogram( myIteratorInt, BINCOUNT, myIgnoreOutOfRangeFlag, myThoroughBandScanFlag );
|
||||
|
||||
QgsDebugMsg( QString( "...done...%1 bins filled" ).arg( myRasterBandStats.histogramVector->size() ) );
|
||||
for ( int myBin = 0; myBin < BINCOUNT; myBin++ )
|
||||
{
|
||||
int myBinValue = myRasterBandStats.histogramVector->at( myBin );
|
||||
if ( myBinValue > 0 && myBin > myLastBinWithData )
|
||||
{
|
||||
myLastBinWithData = myBin;
|
||||
}
|
||||
QgsDebugMsg( QString( "Testing if %1 is less than %2or greater then %3" ).arg( myBinValue ).arg( myYAxisMin ).arg( myYAxisMax ) );
|
||||
if ( myBin == 0 && myFirstItemFlag )
|
||||
{
|
||||
myYAxisMin = myBinValue;
|
||||
myYAxisMax = myBinValue;
|
||||
}
|
||||
|
||||
if ( myBinValue > myYAxisMax )
|
||||
{
|
||||
myYAxisMax = myBinValue;
|
||||
}
|
||||
if ( myBinValue < myYAxisMin )
|
||||
{
|
||||
myYAxisMin = myBinValue;
|
||||
}
|
||||
}
|
||||
myFirstItemFlag = false;
|
||||
}
|
||||
}
|
||||
disconnect( mRasterLayer, SIGNAL( progressUpdate( int ) ), mHistogramProgress, SLOT( setValue( int ) ) );
|
||||
QgsDebugMsg( QString( "max %1" ).arg( myYAxisMax ) );
|
||||
QgsDebugMsg( QString( "min %1" ).arg( myYAxisMin ) );
|
||||
|
||||
QwtPlot * mypPlot = new QwtPlot( mChartWidget );
|
||||
//ensure all children get removed
|
||||
mypPlot->setAutoDelete( true );
|
||||
QVBoxLayout *mpHistogramLayout = new QVBoxLayout( mChartWidget );
|
||||
mpHistogramLayout->setContentsMargins( 0, 0, 0, 0 );
|
||||
mpHistogramLayout->addWidget( mypPlot );
|
||||
mChartWidget->setLayout( mpHistogramLayout );
|
||||
mypPlot->setTitle(QObject::tr("Raster Histogram"));
|
||||
mypPlot->insertLegend(new QwtLegend(), QwtPlot::BottomLegend);
|
||||
// Set axis titles
|
||||
mypPlot->setAxisTitle(QwtPlot::xBottom, QObject::tr("Pixel Value"));
|
||||
mypPlot->setAxisTitle(QwtPlot::yLeft, QObject::tr("Frequency"));
|
||||
//
|
||||
// add a grid
|
||||
//
|
||||
QwtPlotGrid * myGrid = new QwtPlotGrid();
|
||||
myGrid->attach(mypPlot);
|
||||
int myBandCountInt = mRasterLayer->bandCount();
|
||||
QList<QColor> myColors;
|
||||
myColors << Qt::black << Qt::red << Qt::green << Qt::blue << Qt::magenta << Qt::darkRed << Qt::darkGreen << Qt::darkBlue;
|
||||
//
|
||||
//now draw actual graphs
|
||||
//
|
||||
QList<QColor> myColors;
|
||||
myColors << Qt::black << Qt::red << Qt::green << Qt::blue << Qt::magenta << Qt::darkRed << Qt::darkGreen << Qt::darkBlue;
|
||||
|
||||
//somtimes there are more bins than needed
|
||||
//we find out the last one that actually has data in it
|
||||
//so we can discard the rest and set the x-axis scales correctly
|
||||
//
|
||||
// scan through to get counts from layers' histograms
|
||||
//
|
||||
for ( int myIteratorInt = 1;
|
||||
myIteratorInt <= myBandCountInt;
|
||||
++myIteratorInt )
|
||||
{
|
||||
QgsRasterBandStats myRasterBandStats = mRasterLayer->bandStatistics( myIteratorInt );
|
||||
QListWidgetItem *myItem = lstHistogramLabels->item( myIteratorInt - 1 );
|
||||
if ( myItem->isSelected() )
|
||||
mRasterLayer->populateHistogram( myIteratorInt, BINCOUNT, myIgnoreOutOfRangeFlag, myThoroughBandScanFlag );
|
||||
QwtPlotCurve * mypCurve = new QwtPlotCurve( tr( "Band %1" ).arg( myIteratorInt ) );
|
||||
mypCurve->setRenderHint( QwtPlotItem::RenderAntialiased );
|
||||
mypCurve->setPen(QPen( myColors.at( myIteratorInt ) ) );
|
||||
QwtArray<double> myX2Data;//qwtarray is just a wrapped qvector
|
||||
QwtArray<double> myY2Data;//qwtarray is just a wrapped qvector
|
||||
for ( int myBin = 0; myBin < BINCOUNT; myBin++ )
|
||||
{
|
||||
QwtPlotCurve * mypCurve = new QwtPlotCurve( tr( "Band %i" ).arg( myIteratorInt ) );
|
||||
mypCurve->setRenderHint( QwtPlotItem::RenderAntialiased );
|
||||
mypCurve->setPen(QPen( myColors.at( myIteratorInt ) ) );
|
||||
QwtArray<double> myX2Data;//qwtarray is just a wrapped qvector
|
||||
QwtArray<double> myY2Data;//qwtarray is just a wrapped qvector
|
||||
for ( int myBin = 0; myBin < myLastBinWithData; myBin++ )
|
||||
{
|
||||
double myBinValue = myRasterBandStats.histogramVector->at( myBin );
|
||||
myX2Data.append(myBin);
|
||||
myY2Data.append(myBinValue);
|
||||
}
|
||||
mypCurve->setData(myX2Data,myY2Data);
|
||||
mypCurve->attach(mypPlot);
|
||||
int myBinValue = myRasterBandStats.histogramVector->at( myBin );
|
||||
myX2Data.append( double( myBin) );
|
||||
myY2Data.append( double( myBinValue) );
|
||||
}
|
||||
mypCurve->setData(myX2Data,myY2Data);
|
||||
mypCurve->attach(mypPlot);
|
||||
}
|
||||
mypPlot->replot();
|
||||
disconnect( mRasterLayer, SIGNAL( progressUpdate( int ) ), mHistogramProgress, SLOT( setValue( int ) ) );
|
||||
mHistogramProgress->hide();
|
||||
QApplication::restoreOverrideCursor();
|
||||
}
|
||||
|
||||
|
@ -68,8 +68,10 @@ class QgsRasterLayerProperties : public QDialog, private Ui::QgsRasterLayerPrope
|
||||
void on_pbnDefaultValues_clicked();
|
||||
/** \brief slot executed when user wishes to export transparency values */
|
||||
void on_pbnExportTransparentPixelValues_clicked();
|
||||
/** \brief auto slot executed when the active page in the main widget stack is changed */
|
||||
void on_tabBar_currentChanged( int theTab );
|
||||
/** \brief slot executed when user wishes to refresh raster histogram */
|
||||
void on_pbnHistRefresh_clicked();
|
||||
void refreshHistogram();
|
||||
/** \brief slow executed when user wishes to import transparency values */
|
||||
void on_pbnImportTransparentPixelValues_clicked();
|
||||
/** \brief slot executed when user presses "Remove Selected Row" button on the transparency page */
|
||||
|
@ -6,8 +6,8 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>757</width>
|
||||
<height>638</height>
|
||||
<width>755</width>
|
||||
<height>618</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
@ -25,175 +25,42 @@
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="0" column="0">
|
||||
<widget class="QListWidget" name="listWidget">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>110</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
<item row="1" column="0" colspan="2">
|
||||
<widget class="QPushButton" name="pbnLoadDefaultStyle">
|
||||
<property name="text">
|
||||
<string>Restore Default Style</string>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>110</width>
|
||||
<height>16777215</height>
|
||||
</size>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="2">
|
||||
<widget class="QPushButton" name="pbnSaveDefaultStyle">
|
||||
<property name="text">
|
||||
<string>Save As Default</string>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::NoFrame</enum>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="3">
|
||||
<widget class="QPushButton" name="pbnLoadStyle">
|
||||
<property name="text">
|
||||
<string>Load Style ...</string>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Plain</enum>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="4">
|
||||
<widget class="QPushButton" name="pbnSaveStyleAs">
|
||||
<property name="text">
|
||||
<string>Save Style ...</string>
|
||||
</property>
|
||||
<property name="horizontalScrollBarPolicy">
|
||||
<enum>Qt::ScrollBarAlwaysOff</enum>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0" colspan="5">
|
||||
<widget class="QDialogButtonBox" name="buttonBox">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="editTriggers">
|
||||
<set>QAbstractItemView::NoEditTriggers</set>
|
||||
<property name="standardButtons">
|
||||
<set>QDialogButtonBox::Apply|QDialogButtonBox::Cancel|QDialogButtonBox::Help|QDialogButtonBox::Ok</set>
|
||||
</property>
|
||||
<property name="showDropIndicator" stdset="0">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="iconSize">
|
||||
<size>
|
||||
<width>64</width>
|
||||
<height>64</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="textElideMode">
|
||||
<enum>Qt::ElideNone</enum>
|
||||
</property>
|
||||
<property name="flow">
|
||||
<enum>QListView::TopToBottom</enum>
|
||||
</property>
|
||||
<property name="isWrapping" stdset="0">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="resizeMode">
|
||||
<enum>QListView::Adjust</enum>
|
||||
</property>
|
||||
<property name="spacing">
|
||||
<number>9</number>
|
||||
</property>
|
||||
<property name="viewMode">
|
||||
<enum>QListView::IconMode</enum>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Symbology</string>
|
||||
</property>
|
||||
<property name="textAlignment">
|
||||
<set>AlignHCenter|AlignVCenter|AlignCenter</set>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../images/images.qrc">
|
||||
<normaloff>:/images/themes/default/propertyicons/symbology.png</normaloff>:/images/themes/default/propertyicons/symbology.png</iconset>
|
||||
</property>
|
||||
<property name="flags">
|
||||
<set>ItemIsSelectable|ItemIsUserCheckable|ItemIsEnabled</set>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Transparency</string>
|
||||
</property>
|
||||
<property name="textAlignment">
|
||||
<set>AlignHCenter|AlignVCenter|AlignCenter</set>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../images/images.qrc">
|
||||
<normaloff>:/images/themes/default/propertyicons/transparency.png</normaloff>:/images/themes/default/propertyicons/transparency.png</iconset>
|
||||
</property>
|
||||
<property name="flags">
|
||||
<set>ItemIsSelectable|ItemIsUserCheckable|ItemIsEnabled</set>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Colormap</string>
|
||||
</property>
|
||||
<property name="textAlignment">
|
||||
<set>AlignHCenter|AlignVCenter|AlignCenter</set>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../images/images.qrc">
|
||||
<normaloff>:/images/themes/default/propertyicons/colormap.png</normaloff>:/images/themes/default/propertyicons/colormap.png</iconset>
|
||||
</property>
|
||||
<property name="flags">
|
||||
<set>ItemIsSelectable|ItemIsUserCheckable|ItemIsEnabled</set>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>General</string>
|
||||
</property>
|
||||
<property name="textAlignment">
|
||||
<set>AlignHCenter|AlignVCenter|AlignCenter</set>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../images/images.qrc">
|
||||
<normaloff>:/images/themes/default/propertyicons/general.png</normaloff>:/images/themes/default/propertyicons/general.png</iconset>
|
||||
</property>
|
||||
<property name="flags">
|
||||
<set>ItemIsSelectable|ItemIsUserCheckable|ItemIsEnabled</set>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Metadata</string>
|
||||
</property>
|
||||
<property name="textAlignment">
|
||||
<set>AlignHCenter|AlignVCenter|AlignCenter</set>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../images/images.qrc">
|
||||
<normaloff>:/images/themes/default/propertyicons/metadata.png</normaloff>:/images/themes/default/propertyicons/metadata.png</iconset>
|
||||
</property>
|
||||
<property name="flags">
|
||||
<set>ItemIsSelectable|ItemIsUserCheckable|ItemIsEnabled</set>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Pyramids</string>
|
||||
</property>
|
||||
<property name="textAlignment">
|
||||
<set>AlignHCenter|AlignVCenter|AlignCenter</set>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../images/images.qrc">
|
||||
<normaloff>:/images/themes/default/propertyicons/pyramids.png</normaloff>:/images/themes/default/propertyicons/pyramids.png</iconset>
|
||||
</property>
|
||||
<property name="flags">
|
||||
<set>ItemIsSelectable|ItemIsUserCheckable|ItemIsEnabled</set>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Histogram</string>
|
||||
</property>
|
||||
<property name="textAlignment">
|
||||
<set>AlignHCenter|AlignVCenter|AlignCenter</set>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../images/images.qrc">
|
||||
<normaloff>:/images/themes/default/propertyicons/histogram.png</normaloff>:/images/themes/default/propertyicons/histogram.png</iconset>
|
||||
</property>
|
||||
<property name="flags">
|
||||
<set>ItemIsSelectable|ItemIsUserCheckable|ItemIsEnabled</set>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string notr="true"/>
|
||||
</property>
|
||||
<property name="flags">
|
||||
<set>NoItemFlags</set>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1" colspan="4">
|
||||
@ -1893,6 +1760,8 @@ p, li { white-space: pre-wrap; }
|
||||
<td style="border: none;">
|
||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
|
||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
|
||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
|
||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
|
||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p></td></tr></table></body></html></string>
|
||||
</property>
|
||||
</widget>
|
||||
@ -1963,159 +1832,201 @@ p, li { white-space: pre-wrap; }
|
||||
<widget class="QWidget" name="tabPageHistogram">
|
||||
<layout class="QGridLayout" name="gridLayout_4">
|
||||
<item row="0" column="0" colspan="3">
|
||||
<widget class="QWidget" name="mChartWidget" native="true"/>
|
||||
</item>
|
||||
<item row="1" column="0" rowspan="3">
|
||||
<widget class="QListWidget" name="lstHistogramLabels">
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>99999</width>
|
||||
<height>32767</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="selectionMode">
|
||||
<enum>QAbstractItemView::MultiSelection</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1" colspan="2">
|
||||
<widget class="QGroupBox" name="grpHistCharType">
|
||||
<widget class="QWidget" name="mChartWidget" native="true">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
|
||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string>Chart Type</string>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>16777215</width>
|
||||
<height>16777215</height>
|
||||
</size>
|
||||
</property>
|
||||
<layout class="QGridLayout">
|
||||
<property name="margin">
|
||||
<number>11</number>
|
||||
</property>
|
||||
<item row="0" column="1">
|
||||
<widget class="QRadioButton" name="radHistTypeLine">
|
||||
<property name="text">
|
||||
<string>Line graph</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QRadioButton" name="radHistTypeBar">
|
||||
<property name="text">
|
||||
<string>Bar chart</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1" colspan="2">
|
||||
<widget class="QGroupBox" name="groupBox">
|
||||
<property name="title">
|
||||
<string>Options</string>
|
||||
</property>
|
||||
<layout class="QGridLayout">
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="textLabel1_2">
|
||||
<property name="text">
|
||||
<string>Column count</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QSpinBox" name="spinHistBinCount">
|
||||
<property name="minimum">
|
||||
<number>8</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>1024</number>
|
||||
</property>
|
||||
<property name="singleStep">
|
||||
<number>8</number>
|
||||
</property>
|
||||
<property name="value">
|
||||
<number>64</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0" colspan="2">
|
||||
<widget class="QCheckBox" name="chkHistIgnoreOutOfRange">
|
||||
<property name="text">
|
||||
<string>Out of range OK?</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0" colspan="2">
|
||||
<widget class="QCheckBox" name="chkHistAllowApproximation">
|
||||
<property name="text">
|
||||
<string>Allow approximation</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<item row="1" column="1">
|
||||
<widget class="QProgressBar" name="mHistogramProgress">
|
||||
<property name="value">
|
||||
<number>0</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="2">
|
||||
<widget class="QPushButton" name="pbnHistRefresh">
|
||||
<property name="text">
|
||||
<string>Refresh</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0" colspan="2">
|
||||
<widget class="QPushButton" name="pbnLoadDefaultStyle">
|
||||
<property name="text">
|
||||
<string>Restore Default Style</string>
|
||||
<item row="0" column="0">
|
||||
<widget class="QListWidget" name="listWidget">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>110</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="2">
|
||||
<widget class="QPushButton" name="pbnSaveDefaultStyle">
|
||||
<property name="text">
|
||||
<string>Save As Default</string>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>110</width>
|
||||
<height>16777215</height>
|
||||
</size>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="3">
|
||||
<widget class="QPushButton" name="pbnLoadStyle">
|
||||
<property name="text">
|
||||
<string>Load Style ...</string>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::NoFrame</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="4">
|
||||
<widget class="QPushButton" name="pbnSaveStyleAs">
|
||||
<property name="text">
|
||||
<string>Save Style ...</string>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Plain</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0" colspan="5">
|
||||
<widget class="QDialogButtonBox" name="buttonBox">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
<property name="horizontalScrollBarPolicy">
|
||||
<enum>Qt::ScrollBarAlwaysOff</enum>
|
||||
</property>
|
||||
<property name="standardButtons">
|
||||
<set>QDialogButtonBox::Apply|QDialogButtonBox::Cancel|QDialogButtonBox::Help|QDialogButtonBox::Ok</set>
|
||||
<property name="editTriggers">
|
||||
<set>QAbstractItemView::NoEditTriggers</set>
|
||||
</property>
|
||||
<property name="showDropIndicator" stdset="0">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="iconSize">
|
||||
<size>
|
||||
<width>64</width>
|
||||
<height>64</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="textElideMode">
|
||||
<enum>Qt::ElideNone</enum>
|
||||
</property>
|
||||
<property name="flow">
|
||||
<enum>QListView::TopToBottom</enum>
|
||||
</property>
|
||||
<property name="isWrapping" stdset="0">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="resizeMode">
|
||||
<enum>QListView::Adjust</enum>
|
||||
</property>
|
||||
<property name="spacing">
|
||||
<number>9</number>
|
||||
</property>
|
||||
<property name="viewMode">
|
||||
<enum>QListView::IconMode</enum>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Symbology</string>
|
||||
</property>
|
||||
<property name="textAlignment">
|
||||
<set>AlignHCenter|AlignVCenter|AlignCenter</set>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../images/images.qrc">
|
||||
<normaloff>:/images/themes/default/propertyicons/symbology.png</normaloff>:/images/themes/default/propertyicons/symbology.png</iconset>
|
||||
</property>
|
||||
<property name="flags">
|
||||
<set>ItemIsSelectable|ItemIsUserCheckable|ItemIsEnabled</set>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Transparency</string>
|
||||
</property>
|
||||
<property name="textAlignment">
|
||||
<set>AlignHCenter|AlignVCenter|AlignCenter</set>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../images/images.qrc">
|
||||
<normaloff>:/images/themes/default/propertyicons/transparency.png</normaloff>:/images/themes/default/propertyicons/transparency.png</iconset>
|
||||
</property>
|
||||
<property name="flags">
|
||||
<set>ItemIsSelectable|ItemIsUserCheckable|ItemIsEnabled</set>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Colormap</string>
|
||||
</property>
|
||||
<property name="textAlignment">
|
||||
<set>AlignHCenter|AlignVCenter|AlignCenter</set>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../images/images.qrc">
|
||||
<normaloff>:/images/themes/default/propertyicons/colormap.png</normaloff>:/images/themes/default/propertyicons/colormap.png</iconset>
|
||||
</property>
|
||||
<property name="flags">
|
||||
<set>ItemIsSelectable|ItemIsUserCheckable|ItemIsEnabled</set>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>General</string>
|
||||
</property>
|
||||
<property name="textAlignment">
|
||||
<set>AlignHCenter|AlignVCenter|AlignCenter</set>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../images/images.qrc">
|
||||
<normaloff>:/images/themes/default/propertyicons/general.png</normaloff>:/images/themes/default/propertyicons/general.png</iconset>
|
||||
</property>
|
||||
<property name="flags">
|
||||
<set>ItemIsSelectable|ItemIsUserCheckable|ItemIsEnabled</set>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Metadata</string>
|
||||
</property>
|
||||
<property name="textAlignment">
|
||||
<set>AlignHCenter|AlignVCenter|AlignCenter</set>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../images/images.qrc">
|
||||
<normaloff>:/images/themes/default/propertyicons/metadata.png</normaloff>:/images/themes/default/propertyicons/metadata.png</iconset>
|
||||
</property>
|
||||
<property name="flags">
|
||||
<set>ItemIsSelectable|ItemIsUserCheckable|ItemIsEnabled</set>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Pyramids</string>
|
||||
</property>
|
||||
<property name="textAlignment">
|
||||
<set>AlignHCenter|AlignVCenter|AlignCenter</set>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../images/images.qrc">
|
||||
<normaloff>:/images/themes/default/propertyicons/pyramids.png</normaloff>:/images/themes/default/propertyicons/pyramids.png</iconset>
|
||||
</property>
|
||||
<property name="flags">
|
||||
<set>ItemIsSelectable|ItemIsUserCheckable|ItemIsEnabled</set>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Histogram</string>
|
||||
</property>
|
||||
<property name="textAlignment">
|
||||
<set>AlignHCenter|AlignVCenter|AlignCenter</set>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../images/images.qrc">
|
||||
<normaloff>:/images/themes/default/propertyicons/histogram.png</normaloff>:/images/themes/default/propertyicons/histogram.png</iconset>
|
||||
</property>
|
||||
<property name="flags">
|
||||
<set>ItemIsSelectable|ItemIsUserCheckable|ItemIsEnabled</set>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string notr="true"/>
|
||||
</property>
|
||||
<property name="flags">
|
||||
<set>NoItemFlags</set>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
@ -2145,18 +2056,11 @@ p, li { white-space: pre-wrap; }
|
||||
<tabstop>tePyramidDescription</tabstop>
|
||||
<tabstop>cboResamplingMethod</tabstop>
|
||||
<tabstop>buttonBuildPyramids</tabstop>
|
||||
<tabstop>radHistTypeBar</tabstop>
|
||||
<tabstop>radHistTypeLine</tabstop>
|
||||
<tabstop>spinHistBinCount</tabstop>
|
||||
<tabstop>chkHistIgnoreOutOfRange</tabstop>
|
||||
<tabstop>chkHistAllowApproximation</tabstop>
|
||||
<tabstop>pbnHistRefresh</tabstop>
|
||||
<tabstop>leGrayMin</tabstop>
|
||||
<tabstop>cboGray</tabstop>
|
||||
<tabstop>lbxPyramidResolutions</tabstop>
|
||||
<tabstop>leGrayMax</tabstop>
|
||||
<tabstop>cboxColorMap</tabstop>
|
||||
<tabstop>lstHistogramLabels</tabstop>
|
||||
<tabstop>sboxSingleBandStdDev</tabstop>
|
||||
</tabstops>
|
||||
<resources>
|
||||
@ -2170,8 +2074,8 @@ p, li { white-space: pre-wrap; }
|
||||
<slot>reject()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>476</x>
|
||||
<y>620</y>
|
||||
<x>485</x>
|
||||
<y>608</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>3</x>
|
||||
|
Loading…
x
Reference in New Issue
Block a user