Skip to content

Commit 706300c

Browse files
author
rblazek
committedMay 13, 2009
fixed ticket #1133: title adjusted on resize, use of option label; description used as tooltip; layout of vector fields combobox; dont use empty not required option
git-svn-id: http://svn.osgeo.org/qgis/trunk/qgis@10787 c8812cc2-4d05-0410-92ff-de0c093fc19c

File tree

2 files changed

+152
-127
lines changed

2 files changed

+152
-127
lines changed
 

‎src/plugins/grass/qgsgrassmodule.cpp

Lines changed: 100 additions & 117 deletions
Original file line numberDiff line numberDiff line change
@@ -1557,8 +1557,7 @@ QDomNode QgsGrassModule::nodeByKey( QDomElement elem, QString key )
15571557
QgsGrassModuleOption::QgsGrassModuleOption( QgsGrassModule *module, QString key,
15581558
QDomElement &qdesc, QDomElement &gdesc, QDomNode &gnode,
15591559
QWidget * parent )
1560-
: QGroupBox( parent ),
1561-
QgsGrassModuleItem( module, key, qdesc, gdesc, gnode ),
1560+
: QgsGrassModuleGroupBoxItem( module, key, qdesc, gdesc, gnode, parent ),
15621561
mControlType( NoControl ), mValueType( String ), mOutputType( None ), mHaveLimits( false ), mIsOutput( false )
15631562
{
15641563
QgsDebugMsg( "called." );
@@ -1568,18 +1567,6 @@ QgsGrassModuleOption::QgsGrassModuleOption( QgsGrassModule *module, QString key,
15681567

15691568
mLayout = new QVBoxLayout();
15701569

1571-
QString tit;
1572-
if ( mDescription.length() > 40 )
1573-
{
1574-
tit = mDescription.left( 40 ) + " ...";
1575-
}
1576-
else
1577-
{
1578-
tit = mDescription;
1579-
}
1580-
1581-
setTitle( " " + tit + " " );
1582-
15831570
// Is it output?
15841571
QDomNode promptNode = gnode.namedItem( "gisprompt" );
15851572
if ( !promptNode.isNull() )
@@ -1925,8 +1912,11 @@ QStringList QgsGrassModuleOption::options()
19251912
list.push_back( mKey + "=" + mAnswer );
19261913
}
19271914
else
1928-
{
1929-
list.push_back( mKey + "=" + value() );
1915+
{
1916+
QString val = value();
1917+
if ( !val.isEmpty() ) {
1918+
list.push_back( mKey + "=" + val );
1919+
}
19301920
}
19311921
return list;
19321922
}
@@ -1939,7 +1929,7 @@ QString QgsGrassModuleOption::ready()
19391929

19401930
if ( mControlType == LineEdit )
19411931
{
1942-
if ( mLineEdits.at( 0 )->text().trimmed().length() == 0 )
1932+
if ( mLineEdits.at( 0 )->text().trimmed().length() == 0 && mRequired )
19431933
{
19441934
error.append( tr( "%1: missing value" ).arg( title() ) );
19451935
}
@@ -1965,7 +1955,7 @@ QgsGrassModuleFlag::QgsGrassModuleFlag( QgsGrassModule *module, QString key,
19651955
else
19661956
setChecked( false );
19671957

1968-
setText( mDescription );
1958+
setText( mTitle );
19691959
}
19701960

19711961
QStringList QgsGrassModuleFlag::options()
@@ -1982,39 +1972,37 @@ QgsGrassModuleFlag::~QgsGrassModuleFlag()
19821972
{
19831973
}
19841974

1975+
void QgsGrassModuleFlag::resizeEvent ( QResizeEvent * event )
1976+
{
1977+
adjustText();
1978+
}
1979+
1980+
void QgsGrassModuleFlag::adjustText()
1981+
{
1982+
QString t = fontMetrics().elidedText ( mTitle , Qt::ElideRight, width() - iconSize().width() - 20 );
1983+
1984+
setText( t );
1985+
}
1986+
19851987
/************************** QgsGrassModuleInput ***************************/
19861988

19871989
QgsGrassModuleInput::QgsGrassModuleInput( QgsGrassModule *module,
19881990
QgsGrassModuleStandardOptions *options, QString key,
19891991
QDomElement &qdesc, QDomElement &gdesc, QDomNode &gnode,
19901992
QWidget * parent )
1991-
: QGroupBox( parent ),
1992-
QgsGrassModuleItem( module, key, qdesc, gdesc, gnode ),
1993+
: QgsGrassModuleGroupBoxItem( module, key, qdesc, gdesc, gnode, parent ),
19931994
mModuleStandardOptions( options ),
19941995
mGeometryTypeOption( 0 ), mVectorLayerOption( 0 ),
19951996
mRegionButton( 0 ), mUpdate( false )
19961997
{
19971998
QgsDebugMsg( "called." );
19981999
mGeometryTypeMask = GV_POINT | GV_LINE | GV_AREA;
19992000

2000-
QString tit;
2001-
if ( mDescription.isEmpty() )
2001+
if ( mTitle.isEmpty() )
20022002
{
2003-
tit = "Input";
2003+
mTitle = tr( "Input" );
20042004
}
2005-
else
2006-
{
2007-
if ( mDescription.length() > 40 )
2008-
{
2009-
tit = mDescription.left( 40 ) + " ...";
2010-
}
2011-
else
2012-
{
2013-
tit = mDescription;
2014-
}
2015-
}
2016-
2017-
setTitle( " " + tit + " " );
2005+
adjustTitle();
20182006

20192007
QDomNode promptNode = gnode.namedItem( "gisprompt" );
20202008
QDomElement promptElem = promptNode.toElement();
@@ -2517,7 +2505,8 @@ QgsGrassModuleItem::QgsGrassModuleItem( QgsGrassModule *module, QString key,
25172505
QDomElement &qdesc, QDomElement &gdesc, QDomNode &gnode )
25182506
: mModule( module ),
25192507
mKey( key ),
2520-
mHidden( false )
2508+
mHidden( false ),
2509+
mRequired (false)
25212510
{
25222511
//mAnswer = qdesc.attribute("answer", "");
25232512

@@ -2540,20 +2529,40 @@ QgsGrassModuleItem::QgsGrassModuleItem( QgsGrassModule *module, QString key,
25402529
mHidden = true;
25412530
}
25422531

2532+
QString label, description;
25432533
if ( !qdesc.attribute( "label" ).isEmpty() )
25442534
{
2545-
mDescription = qdesc.attribute( "label" );
2535+
label = qdesc.attribute( "label" );
25462536
}
2547-
else
2537+
if ( label.isEmpty() )
25482538
{
2549-
QDomNode n = gnode.namedItem( "description" );
2539+
QDomNode n = gnode.namedItem( "label" );
25502540
if ( !n.isNull() )
25512541
{
25522542
QDomElement e = n.toElement();
2553-
mDescription = e.text().trimmed();
2554-
mDescription.replace( 0, 1, mDescription.left( 1 ).toUpper() );
2543+
label = e.text().trimmed();
2544+
label.replace( 0, 1, label.left( 1 ).toUpper() );
25552545
}
25562546
}
2547+
QDomNode n = gnode.namedItem( "description" );
2548+
if ( !n.isNull() )
2549+
{
2550+
QDomElement e = n.toElement();
2551+
description = e.text().trimmed();
2552+
description.replace( 0, 1, description.left( 1 ).toUpper() );
2553+
}
2554+
2555+
if ( !label.isEmpty() ) {
2556+
mTitle = label;
2557+
mToolTip = description;
2558+
} else {
2559+
mTitle = description;
2560+
}
2561+
2562+
if ( gnode.toElement().attribute( "required" ) == "yes" )
2563+
{
2564+
mRequired = true;
2565+
}
25572566

25582567
mId = qdesc.attribute( "id" );
25592568
}
@@ -2564,33 +2573,47 @@ QStringList QgsGrassModuleItem::options() { return QStringList(); }
25642573

25652574
QgsGrassModuleItem::~QgsGrassModuleItem() {}
25662575

2576+
/***************** QgsGrassModuleGroupBoxItem *********************/
2577+
2578+
QgsGrassModuleGroupBoxItem::QgsGrassModuleGroupBoxItem( QgsGrassModule *module, QString key,
2579+
QDomElement &qdesc, QDomElement &gdesc, QDomNode &gnode,
2580+
QWidget * parent )
2581+
: QGroupBox( parent ),
2582+
QgsGrassModuleItem( module, key, qdesc, gdesc, gnode )
2583+
{
2584+
adjustTitle();
2585+
2586+
setToolTip ( mToolTip );
2587+
}
2588+
2589+
QgsGrassModuleGroupBoxItem::~QgsGrassModuleGroupBoxItem() {}
2590+
2591+
void QgsGrassModuleGroupBoxItem::resizeEvent ( QResizeEvent * event )
2592+
{
2593+
adjustTitle();
2594+
setToolTip ( mToolTip );
2595+
}
2596+
2597+
void QgsGrassModuleGroupBoxItem::adjustTitle()
2598+
{
2599+
QString tit = fontMetrics().elidedText ( mTitle, Qt::ElideRight, width() - 20 );
2600+
2601+
setTitle( tit );
2602+
}
2603+
25672604
/***************** QgsGrassModuleGdalInput *********************/
25682605

25692606
QgsGrassModuleGdalInput::QgsGrassModuleGdalInput(
25702607
QgsGrassModule *module, int type, QString key, QDomElement &qdesc,
25712608
QDomElement &gdesc, QDomNode &gnode, QWidget * parent )
2572-
: QGroupBox( parent ),
2573-
QgsGrassModuleItem( module, key, qdesc, gdesc, gnode ),
2609+
: QgsGrassModuleGroupBoxItem( module, key, qdesc, gdesc, gnode, parent ),
25742610
mType( type ), mOgrLayerOption( 0 ), mOgrWhereOption( 0 )
25752611
{
2576-
QString tit;
2577-
if ( mDescription.isEmpty() )
2612+
if ( mTitle.isEmpty() )
25782613
{
2579-
tit = "OGR/PostGIS/GDAL Input";
2614+
mTitle = "OGR/PostGIS/GDAL Input";
25802615
}
2581-
else
2582-
{
2583-
if ( mDescription.length() > 40 )
2584-
{
2585-
tit = mDescription.left( 40 ) + " ...";
2586-
}
2587-
else
2588-
{
2589-
tit = mDescription;
2590-
}
2591-
}
2592-
2593-
setTitle( " " + tit + " " );
2616+
adjustTitle();
25942617

25952618
QDomNode promptNode = gnode.namedItem( "gisprompt" );
25962619
QDomElement promptElem = promptNode.toElement();
@@ -2614,7 +2637,7 @@ QgsGrassModuleGdalInput::QgsGrassModuleGdalInput(
26142637
}
26152638

26162639
// Read "whereoption" if defined
2617-
opt = qdesc.attribute( "whereoption" );
2640+
opt = qdesc.attribute( "where" );
26182641
if ( !opt.isNull() )
26192642
{
26202643
QDomNode optNode = QgsGrassModule::nodeByKey( gdesc, opt );
@@ -2797,28 +2820,14 @@ QgsGrassModuleField::QgsGrassModuleField(
27972820
QgsGrassModule *module, QgsGrassModuleStandardOptions *options,
27982821
QString key, QDomElement &qdesc,
27992822
QDomElement &gdesc, QDomNode &gnode, QWidget * parent )
2800-
: QGroupBox( parent ),
2801-
QgsGrassModuleItem( module, key, qdesc, gdesc, gnode ),
2823+
: QgsGrassModuleGroupBoxItem( module, key, qdesc, gdesc, gnode, parent ),
28022824
mModuleStandardOptions( options ), mLayerInput( 0 )
28032825
{
2804-
QString tit;
2805-
if ( mDescription.isEmpty() )
2826+
if ( mTitle.isEmpty() )
28062827
{
2807-
tit = tr( "Attribute field" );
2808-
}
2809-
else
2810-
{
2811-
if ( mDescription.length() > 40 )
2812-
{
2813-
tit = mDescription.left( 40 ) + " ...";
2814-
}
2815-
else
2816-
{
2817-
tit = mDescription;
2818-
}
2828+
mTitle = tr( "Attribute field" );
28192829
}
2820-
2821-
setTitle( " " + tit + " " );
2830+
adjustTitle();
28222831

28232832
QDomNode promptNode = gnode.namedItem( "gisprompt" );
28242833
QDomElement promptElem = promptNode.toElement();
@@ -2836,7 +2845,9 @@ QgsGrassModuleField::QgsGrassModuleField(
28362845
connect( mLayerInput, SIGNAL( valueChanged() ), this, SLOT( updateFields() ) );
28372846
}
28382847

2839-
mFieldComboBox = new QComboBox( this );
2848+
QHBoxLayout *l = new QHBoxLayout( this );
2849+
mFieldComboBox = new QComboBox( );
2850+
l->addWidget( mFieldComboBox );
28402851

28412852
// Fill in layer current fields
28422853
updateFields();
@@ -2888,29 +2899,15 @@ QgsGrassModuleSelection::QgsGrassModuleSelection(
28882899
QgsGrassModule *module, QgsGrassModuleStandardOptions *options,
28892900
QString key, QDomElement &qdesc,
28902901
QDomElement &gdesc, QDomNode &gnode, QWidget * parent )
2891-
: QGroupBox( parent ),
2892-
QgsGrassModuleItem( module, key, qdesc, gdesc, gnode ),
2902+
: QgsGrassModuleGroupBoxItem( module, key, qdesc, gdesc, gnode, parent ),
28932903
mModuleStandardOptions( options ), mLayerInput( 0 ),
28942904
mVectorLayer( 0 )
28952905
{
2896-
QString tit;
2897-
if ( mDescription.isEmpty() )
2898-
{
2899-
tit = tr( "Attribute field" );
2900-
}
2901-
else
2906+
if ( mTitle.isEmpty() )
29022907
{
2903-
if ( mDescription.length() > 40 )
2904-
{
2905-
tit = mDescription.left( 40 ) + " ...";
2906-
}
2907-
else
2908-
{
2909-
tit = mDescription;
2910-
}
2908+
mTitle = tr( "Selected categories" );
29112909
}
2912-
2913-
setTitle( " " + tit + " " );
2910+
adjustTitle();
29142911

29152912
QDomNode promptNode = gnode.namedItem( "gisprompt" );
29162913
QDomElement promptElem = promptNode.toElement();
@@ -3005,28 +3002,14 @@ QgsGrassModuleFile::QgsGrassModuleFile(
30053002
QgsGrassModule *module,
30063003
QString key, QDomElement &qdesc,
30073004
QDomElement &gdesc, QDomNode &gnode, QWidget * parent )
3008-
: QGroupBox( parent ),
3009-
QgsGrassModuleItem( module, key, qdesc, gdesc, gnode ),
3005+
: QgsGrassModuleGroupBoxItem( module, key, qdesc, gdesc, gnode, parent ),
30103006
mType( Old )
30113007
{
3012-
QString tit;
3013-
if ( mDescription.isEmpty() )
3008+
if ( mTitle.isEmpty() )
30143009
{
3015-
tit = tr( "File" );
3010+
mTitle = tr( "File" );
30163011
}
3017-
else
3018-
{
3019-
if ( mDescription.length() > 40 )
3020-
{
3021-
tit = mDescription.left( 40 ) + " ...";
3022-
}
3023-
else
3024-
{
3025-
tit = mDescription;
3026-
}
3027-
}
3028-
3029-
setTitle( " " + tit + " " );
3012+
adjustTitle();
30303013

30313014
QDomNode promptNode = gnode.namedItem( "gisprompt" );
30323015
QDomElement promptElem = promptNode.toElement();
@@ -3126,7 +3109,7 @@ QString QgsGrassModuleFile::ready()
31263109
QString path = mLineEdit->text().trimmed();
31273110

31283111

3129-
if ( path.length() == 0 )
3112+
if ( path.length() == 0 && mRequired )
31303113
{
31313114
error.append( tr( "%1: missing value" ).arg( title() ) );
31323115
return error;

‎src/plugins/grass/qgsgrassmodule.h

Lines changed: 52 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -325,25 +325,61 @@ class QgsGrassModuleItem
325325
//! Optional option id used by other options which depend on this
326326
QString mId;
327327

328-
//! GRASS description
329-
QString mDescription;
328+
//! Item title, GRASS label or description
329+
QString mTitle;
330+
331+
//! Item tooltip, GRASS description if defined
332+
QString mToolTip;
330333

331334
//! Hidden option or displayed
332335
bool mHidden;
333336

334337
//! Predefined answer from config
335338
QString mAnswer;
336339

340+
//! Is it required
341+
bool mRequired;
342+
337343
private:
338344

339345
};
340346

347+
/****************** QgsGrassModuleGroupBoxItem ************************/
348+
349+
/*! \class QgsGrassModuleGroupBoxItem
350+
* \brief GRASS module option box
351+
*/
352+
class QgsGrassModuleGroupBoxItem: public QGroupBox, public QgsGrassModuleItem
353+
{
354+
Q_OBJECT
355+
356+
public:
357+
/*! \brief Constructor
358+
* \param qdesc option element in QGIS module description XML file
359+
* \param gdesc GRASS module XML description file
360+
* \param gnode option node in GRASS module XML description file
361+
*/
362+
QgsGrassModuleGroupBoxItem( QgsGrassModule *module, QString key,
363+
QDomElement &qdesc, QDomElement &gdesc, QDomNode &gnode,
364+
QWidget * parent = 0 );
365+
366+
//! Destructor
367+
virtual ~QgsGrassModuleGroupBoxItem();
368+
369+
void resizeEvent ( QResizeEvent * event );
370+
371+
public slots:
372+
//! Adjust title size, called on resize
373+
void adjustTitle();
374+
375+
};
376+
341377
/****************** QgsGrassModuleOption ************************/
342378

343379
/*! \class QgsGrassModuleOption
344380
* \brief GRASS option
345381
*/
346-
class QgsGrassModuleOption: public QGroupBox, public QgsGrassModuleItem
382+
class QgsGrassModuleOption: public QgsGrassModuleGroupBoxItem
347383
{
348384
Q_OBJECT
349385

@@ -458,17 +494,23 @@ class QgsGrassModuleFlag: public QCheckBox, public QgsGrassModuleItem
458494

459495
//! Destructor
460496
~QgsGrassModuleFlag();
497+
461498
//! Retruns list of options which will be passed to module
462499
virtual QStringList options();
463-
private:
500+
501+
void resizeEvent ( QResizeEvent * event );
502+
503+
public slots:
504+
//! Adjust title size, called on resize
505+
void adjustText();
464506
};
465507

466508
/************************ QgsGrassModuleInput **********************/
467509

468510
/*! \class QgsGrassModuleInput
469511
* \brief Class representing raster or vector module input
470512
*/
471-
class QgsGrassModuleInput: public QGroupBox, public QgsGrassModuleItem
513+
class QgsGrassModuleInput: public QgsGrassModuleGroupBoxItem
472514
{
473515
Q_OBJECT
474516

@@ -575,7 +617,7 @@ class QgsGrassModuleInput: public QGroupBox, public QgsGrassModuleItem
575617
/*! \class QgsGrassModuleGdalInput
576618
* \brief GDAL/OGR module input
577619
*/
578-
class QgsGrassModuleGdalInput: public QGroupBox, public QgsGrassModuleItem
620+
class QgsGrassModuleGdalInput: public QgsGrassModuleGroupBoxItem
579621
{
580622
Q_OBJECT
581623

@@ -629,7 +671,7 @@ class QgsGrassModuleGdalInput: public QGroupBox, public QgsGrassModuleItem
629671
/*! \class QgsGrassModuleField
630672
* \brief GRASS vector attribute column.
631673
*/
632-
class QgsGrassModuleField: public QGroupBox, public QgsGrassModuleItem
674+
class QgsGrassModuleField: public QgsGrassModuleGroupBoxItem
633675
{
634676
Q_OBJECT
635677

@@ -676,7 +718,7 @@ class QgsGrassModuleField: public QGroupBox, public QgsGrassModuleItem
676718
/*! \class QgsGrassModuleSelection
677719
* \brief List of categories taken from current layer selection.
678720
*/
679-
class QgsGrassModuleSelection: public QGroupBox, public QgsGrassModuleItem
721+
class QgsGrassModuleSelection: public QgsGrassModuleGroupBoxItem
680722
{
681723
Q_OBJECT
682724

@@ -724,10 +766,10 @@ class QgsGrassModuleSelection: public QGroupBox, public QgsGrassModuleItem
724766

725767
/*********************** QgsGrassModuleFile **********************/
726768

727-
/*! \class QgsGrassModuleSelection
769+
/*! \class QgsGrassModuleFile
728770
* \brief Input/output file.
729771
*/
730-
class QgsGrassModuleFile: public QGroupBox, public QgsGrassModuleItem
772+
class QgsGrassModuleFile: public QgsGrassModuleGroupBoxItem
731773
{
732774
Q_OBJECT
733775

0 commit comments

Comments
 (0)
Please sign in to comment.