ui tweaks to make dialog more compact, add right-click action to swap options ui

This commit is contained in:
Etienne Tourigny 2012-07-24 13:53:35 -03:00
parent e3855de948
commit ce6140201d
6 changed files with 154 additions and 82 deletions

View File

@ -6,13 +6,24 @@ class QgsRasterFormatSaveOptionsWidget : QWidget
%End %End
public: public:
QgsRasterFormatSaveOptionsWidget( QWidget* parent = 0, QString format = "GTiff", QString provider = "gdal" );
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(); ~QgsRasterFormatSaveOptionsWidget();
void setFormat( QString format ); void setFormat( QString format );
void setProvider( QString provider ); void setProvider( QString provider );
QStringList options() const; QStringList options() const;
void showProfileButtons( bool show = true ); void setType( QgsRasterFormatSaveOptionsWidget::Type type = Default );
public slots: public slots:
@ -32,6 +43,7 @@ class QgsRasterFormatSaveOptionsWidget : QWidget
void optionsTableChanged(); void optionsTableChanged();
void optionsTableEnableDeleteButton(); void optionsTableEnableDeleteButton();
void updateOptions(); void updateOptions();
void swapOptionsUI( int newIndex = -1 );
private: private:

View File

@ -20,6 +20,8 @@ class GdalToolsDialog(QWidget, Ui_Widget, BasePluginWidget):
self.inSelector.setType( self.inSelector.FILE ) self.inSelector.setType( self.inSelector.FILE )
self.outSelector.setType( self.outSelector.FILE ) self.outSelector.setType( self.outSelector.FILE )
self.recurseCheck.hide() self.recurseCheck.hide()
# use this for approx. previous UI
#self.creationOptionsTable.setType(QgsRasterFormatSaveOptionsWidget.Table)
self.outputFormat = Utils.fillRasterOutputFormat() self.outputFormat = Utils.fillRasterOutputFormat()
self.extent = None self.extent = None

View File

@ -1104,9 +1104,9 @@ void QgsOptions::editGdalDriver( const QString& driverName )
label->setAlignment( Qt::AlignHCenter ); label->setAlignment( Qt::AlignHCenter );
layout->addWidget( label ); layout->addWidget( label );
QgsRasterFormatSaveOptionsWidget* optionsWidget = QgsRasterFormatSaveOptionsWidget* optionsWidget =
new QgsRasterFormatSaveOptionsWidget( &dlg, driverName, "gdal" ); new QgsRasterFormatSaveOptionsWidget( &dlg, driverName,
QgsRasterFormatSaveOptionsWidget::Full, "gdal" );
layout->addWidget( optionsWidget ); layout->addWidget( optionsWidget );
optionsWidget->showProfileButtons( true );
if ( dlg.exec() == QDialog::Accepted ) if ( dlg.exec() == QDialog::Accepted )
{ {

View File

@ -29,6 +29,7 @@
#include <QMessageBox> #include <QMessageBox>
#include <QTextEdit> #include <QTextEdit>
#include <QMouseEvent> #include <QMouseEvent>
#include <QMenu>
// todo put this somewhere else - how can we access gdal provider? // todo put this somewhere else - how can we access gdal provider?
char** papszFromStringList( const QStringList& list ) char** papszFromStringList( const QStringList& list )
@ -43,12 +44,17 @@ char** papszFromStringList( const QStringList& list )
QMap< QString, QStringList > QgsRasterFormatSaveOptionsWidget::mBuiltinProfiles; QMap< QString, QStringList > QgsRasterFormatSaveOptionsWidget::mBuiltinProfiles;
QgsRasterFormatSaveOptionsWidget::QgsRasterFormatSaveOptionsWidget( QWidget* parent, QString format, QString provider ) QgsRasterFormatSaveOptionsWidget::QgsRasterFormatSaveOptionsWidget( QWidget* parent, QString format,
QgsRasterFormatSaveOptionsWidget::Type type,
QString provider )
: QWidget( parent ), mFormat( format ), mProvider( provider ) : QWidget( parent ), mFormat( format ), mProvider( provider )
{ {
setupUi( this ); setupUi( this );
setType( type );
if ( mBuiltinProfiles.isEmpty() ) if ( mBuiltinProfiles.isEmpty() )
{ {
// key=profileKey values=format,profileName,options // key=profileKey values=format,profileName,options
@ -66,16 +72,16 @@ QgsRasterFormatSaveOptionsWidget::QgsRasterFormatSaveOptionsWidget( QWidget* par
<< "COMPRESS=JPEG" ); << "COMPRESS=JPEG" );
} }
showProfileButtons( false );
connect( mProfileComboBox, SIGNAL( currentIndexChanged( const QString & ) ), connect( mProfileComboBox, SIGNAL( currentIndexChanged( const QString & ) ),
this, SLOT( updateOptions() ) ); this, SLOT( updateOptions() ) );
connect( mOptionsTable, SIGNAL( cellChanged( int, int ) ), this, SLOT( optionsTableChanged() ) ); connect( mOptionsTable, SIGNAL( cellChanged( int, int ) ), this, SLOT( optionsTableChanged() ) );
connect( mOptionsHelpButton, SIGNAL( clicked() ), this, SLOT( helpOptions() ) ); connect( mOptionsHelpButton, SIGNAL( clicked() ), this, SLOT( helpOptions() ) );
connect( mOptionsValidateButton, SIGNAL( clicked() ), this, SLOT( validateOptions() ) ); connect( mOptionsValidateButton, SIGNAL( clicked() ), this, SLOT( validateOptions() ) );
// map options label left mouse click to optionsToggle() // create eventFilter to map right click to swapOptionsUI()
mOptionsLabel->installEventFilter( this ); // mOptionsLabel->installEventFilter( this );
mOptionsLineEdit->installEventFilter( this );
mOptionsStackedWidget->installEventFilter( this );
updateProfiles(); updateProfiles();
} }
@ -95,10 +101,40 @@ void QgsRasterFormatSaveOptionsWidget::setProvider( QString provider )
mProvider = provider; mProvider = provider;
} }
// show/hide widgets - we need this function if widget is used in creator
void QgsRasterFormatSaveOptionsWidget::showProfileButtons( bool show ) void QgsRasterFormatSaveOptionsWidget::setType( QgsRasterFormatSaveOptionsWidget::Type type )
{ {
mProfileButtons->setVisible( show ); QList< QWidget* > widgets = this->findChildren<QWidget *>();
if (( type == Table ) || ( type == LineEdit ) )
{
// hide all controls, except stacked widget
foreach( QWidget* widget, widgets )
{
widget->setVisible( false );
}
mOptionsStackedWidget->setVisible( true );
foreach( QWidget* widget, mOptionsStackedWidget->findChildren<QWidget *>() )
{
widget->setVisible( true );
}
// show page relevant page
if ( type == Table )
swapOptionsUI( 0 );
else if ( type == LineEdit )
swapOptionsUI( 1 );
}
else
{
// show all widgets, except profile buttons (unless Full)
foreach( QWidget* widget, widgets )
{
widget->setVisible( true );
}
if ( type != Full )
{
mProfileButtons->setVisible( false );
}
}
} }
void QgsRasterFormatSaveOptionsWidget::updateProfiles() void QgsRasterFormatSaveOptionsWidget::updateProfiles()
@ -152,7 +188,7 @@ void QgsRasterFormatSaveOptionsWidget::updateOptions()
QString myOptions = mOptionsMap.value( currentProfileKey() ); QString myOptions = mOptionsMap.value( currentProfileKey() );
QStringList myOptionsList = myOptions.trimmed().split( " ", QString::SkipEmptyParts ); QStringList myOptionsList = myOptions.trimmed().split( " ", QString::SkipEmptyParts );
if ( mOptionsStackedWIdget->currentIndex() == 0 ) if ( mOptionsStackedWidget->currentIndex() == 0 )
{ {
mOptionsTable->setRowCount( 0 ); mOptionsTable->setRowCount( 0 );
for ( int i = 0; i < myOptionsList.count(); i++ ) for ( int i = 0; i < myOptionsList.count(); i++ )
@ -392,19 +428,61 @@ QStringList QgsRasterFormatSaveOptionsWidget::profiles() const
return mySettings.value( mProvider + "/driverOptions/" + mFormat.toLower() + "/profiles", "" ).toString().trimmed().split( " ", QString::SkipEmptyParts ); return mySettings.value( mProvider + "/driverOptions/" + mFormat.toLower() + "/profiles", "" ).toString().trimmed().split( " ", QString::SkipEmptyParts );
} }
void QgsRasterFormatSaveOptionsWidget::swapOptionsUI( int newIndex )
{
// set new page
int oldIndex;
if ( newIndex == -1 )
{
oldIndex = mOptionsStackedWidget->currentIndex();
newIndex = ( oldIndex + 1 ) % 2;
}
else
{
oldIndex = ( newIndex + 1 ) % 2;
}
// resize pages to minimum - this works well with gdaltools merge ui, but not raster save as...
mOptionsStackedWidget->setCurrentIndex( newIndex );
mOptionsStackedWidget->widget( newIndex )->setSizePolicy(
QSizePolicy( QSizePolicy::Preferred, QSizePolicy::Preferred ) );
mOptionsStackedWidget->widget( oldIndex )->setSizePolicy(
QSizePolicy( QSizePolicy::Ignored, QSizePolicy::Ignored ) );
layout()->activate();
updateOptions();
}
// map options label left mouse click to optionsToggle() // map options label left mouse click to optionsToggle()
bool QgsRasterFormatSaveOptionsWidget::eventFilter( QObject *obj, QEvent *event ) bool QgsRasterFormatSaveOptionsWidget::eventFilter( QObject *obj, QEvent *event )
{ {
if ( event->type() == QEvent::MouseButtonPress ) if ( event->type() == QEvent::MouseButtonPress )
{ {
QMouseEvent *mouseEvent = static_cast<QMouseEvent *>( event ); QMouseEvent *mouseEvent = static_cast<QMouseEvent *>( event );
if ( mouseEvent && ( mouseEvent->button() == Qt::LeftButton ) ) if ( mouseEvent && ( mouseEvent->button() == Qt::RightButton ) )
{ {
mOptionsStackedWIdget->setCurrentIndex(( mOptionsStackedWIdget->currentIndex() + 1 ) % 2 ); QMenu* menu = 0;
updateOptions(); QString text;
if ( mOptionsStackedWidget->currentIndex() == 0 )
text = tr( "Use simple interface" );
else
text = tr( "Use table interface" );
if ( obj->objectName() == "mOptionsLineEdit" )
{
menu = mOptionsLineEdit->createStandardContextMenu();
menu->addSeparator();
}
else
menu = new QMenu( this );
QAction* action = new QAction( text, menu );
menu->addAction( action );
connect( action, SIGNAL( triggered() ), this, SLOT( swapOptionsUI() ) );
menu->exec( mouseEvent->globalPos() );
delete menu;
return true; return true;
} }
} }
// standard event processing // standard event processing
return QObject::eventFilter( obj, event ); return QObject::eventFilter( obj, event );
} }

View File

@ -23,19 +23,30 @@
/** \ingroup gui /** \ingroup gui
* A widget to select format-specific raster saving options * A widget to select format-specific raster saving options
*/ */
class GUI_EXPORT QgsRasterFormatSaveOptionsWidget: public QWidget, private Ui::QgsRasterFormatSaveOptionsWidgetBase class GUI_EXPORT QgsRasterFormatSaveOptionsWidget: public QWidget,
private Ui::QgsRasterFormatSaveOptionsWidgetBase
{ {
Q_OBJECT Q_OBJECT
public: public:
QgsRasterFormatSaveOptionsWidget( QWidget* parent = 0, QString format = "GTiff", QString provider = "gdal" ); 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(); ~QgsRasterFormatSaveOptionsWidget();
void setFormat( QString format ); void setFormat( QString format );
void setProvider( QString provider ); void setProvider( QString provider );
QStringList options() const; QStringList options() const;
void showProfileButtons( bool show = true ); void setType( QgsRasterFormatSaveOptionsWidget::Type type = Default );
public slots: public slots:
@ -54,6 +65,7 @@ class GUI_EXPORT QgsRasterFormatSaveOptionsWidget: public QWidget, private Ui::Q
void optionsTableChanged(); void optionsTableChanged();
void optionsTableEnableDeleteButton(); void optionsTableEnableDeleteButton();
void updateOptions(); void updateOptions();
void swapOptionsUI( int newIndex = -1 );
private: private:

View File

@ -6,7 +6,7 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>389</width> <width>341</width>
<height>203</height> <height>203</height>
</rect> </rect>
</property> </property>
@ -14,48 +14,9 @@
<string>Form</string> <string>Form</string>
</property> </property>
<layout class="QGridLayout" name="gridLayout"> <layout class="QGridLayout" name="gridLayout">
<item row="1" column="0"> <item row="0" column="1">
<spacer name="verticalSpacer_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>5</height>
</size>
</property>
</spacer>
</item>
<item row="2" column="0">
<widget class="QLabel" name="mOptionsLabel">
<property name="text">
<string>Options</string>
</property>
</widget>
</item>
<item row="0" column="2">
<layout class="QGridLayout" name="gridLayout_3"> <layout class="QGridLayout" name="gridLayout_3">
<item row="0" column="0"> <item row="1" column="1">
<widget class="QComboBox" name="mProfileComboBox">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>150</width>
<height>0</height>
</size>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QWidget" name="mProfileButtons" native="true"> <widget class="QWidget" name="mProfileButtons" native="true">
<layout class="QHBoxLayout" name="mProfileButtonsLayout"> <layout class="QHBoxLayout" name="mProfileButtonsLayout">
<property name="margin"> <property name="margin">
@ -85,10 +46,33 @@
</layout> </layout>
</widget> </widget>
</item> </item>
<item row="0" column="1">
<widget class="QComboBox" name="mProfileComboBox">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>150</width>
<height>0</height>
</size>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="mProfileLabel">
<property name="text">
<string>Profile</string>
</property>
</widget>
</item>
</layout> </layout>
</item> </item>
<item row="2" column="2"> <item row="2" column="1">
<widget class="QStackedWidget" name="mOptionsStackedWIdget"> <widget class="QStackedWidget" name="mOptionsStackedWidget">
<property name="currentIndex"> <property name="currentIndex">
<number>0</number> <number>0</number>
</property> </property>
@ -207,28 +191,12 @@
</widget> </widget>
</widget> </widget>
</item> </item>
<item row="0" column="0"> <item row="1" column="1">
<widget class="QLabel" name="mProfileLabel"> <widget class="Line" name="mSeparator">
<property name="text">
<string>Profile</string>
</property>
</widget>
</item>
<item row="0" column="1">
<spacer name="horizontalSpacer">
<property name="orientation"> <property name="orientation">
<enum>Qt::Horizontal</enum> <enum>Qt::Horizontal</enum>
</property> </property>
<property name="sizeType"> </widget>
<enum>QSizePolicy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>5</width>
<height>20</height>
</size>
</property>
</spacer>
</item> </item>
</layout> </layout>
</widget> </widget>