Skip to content

Commit 14b472d

Browse files
committedNov 3, 2012
browser filter
1 parent 3c07dd0 commit 14b472d

File tree

6 files changed

+473
-50
lines changed

6 files changed

+473
-50
lines changed
 

‎images/images.qrc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,8 @@
7777
<file>themes/default/mActionFileSaveAs.png</file>
7878
<file>themes/default/mActionFileSave.png</file>
7979
<file>themes/default/mActionFileSmall.png</file>
80+
<file>themes/default/mActionFilter.png</file>
81+
<file>themes/default/mActionFilterDelete.png</file>
8082
<file>themes/default/mActionFolder.png</file>
8183
<file>themes/default/mActionFormAnnotation.png</file>
8284
<file>themes/default/mActionFromSelectedFeature.png</file>
1.69 KB
Loading
2.11 KB
Loading

‎src/app/qgsbrowserdockwidget.cpp

Lines changed: 232 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@
2020
#include <QSettings>
2121
#include <QToolButton>
2222
#include <QFileDialog>
23+
#include <QSortFilterProxyModel>
2324

2425
#include "qgsbrowsermodel.h"
25-
#include "qgsdataitem.h"
2626
#include "qgslogger.h"
2727
#include "qgsmaplayerregistry.h"
2828
#include "qgsrasterlayer.h"
@@ -81,8 +81,141 @@ class QgsBrowserTreeView : public QTreeView
8181
}
8282
};
8383

84+
class QgsBrowserTreeFilterProxyModel : public QSortFilterProxyModel
85+
{
86+
public:
87+
88+
QgsBrowserTreeFilterProxyModel( QObject *parent )
89+
: QSortFilterProxyModel( parent ), mModel( 0 ),
90+
mFilter( "" ), mPatternSyntax( QRegExp::Wildcard )
91+
{
92+
setDynamicSortFilter( true );
93+
}
94+
95+
void setBrowserModel( QgsBrowserModel* model )
96+
{
97+
mModel = model;
98+
setSourceModel( model );
99+
}
100+
101+
void setFilterSyntax( const QRegExp::PatternSyntax & syntax )
102+
{
103+
QgsDebugMsg( QString( "syntax = %1" ).arg(( int ) mPatternSyntax ) );
104+
if ( mPatternSyntax == syntax )
105+
return;
106+
mPatternSyntax = syntax;
107+
updateFilter();
108+
}
109+
110+
void setFilter( const QString & filter )
111+
{
112+
QgsDebugMsg( QString( "filter = %1" ).arg( mFilter ) );
113+
if ( mFilter == filter )
114+
return;
115+
mFilter = filter;
116+
updateFilter();
117+
}
118+
119+
void updateFilter( )
120+
{
121+
QgsDebugMsg( QString( "filter = %1 syntax = %2" ).arg( mFilter ).arg(( int ) mPatternSyntax ) );
122+
mREList.clear();
123+
if ( mPatternSyntax == QRegExp::Wildcard ||
124+
mPatternSyntax == QRegExp::WildcardUnix )
125+
{
126+
foreach( QString f, mFilter.split( "|" ) )
127+
{
128+
QRegExp rx( f.trimmed() );
129+
rx.setPatternSyntax( mPatternSyntax );
130+
mREList.append( rx );
131+
}
132+
}
133+
else
134+
{
135+
QRegExp rx( mFilter.trimmed() );
136+
rx.setPatternSyntax( mPatternSyntax );
137+
mREList.append( rx );
138+
}
139+
invalidateFilter();
140+
}
141+
142+
protected:
143+
144+
QgsBrowserModel* mModel;
145+
QString mFilter; //filter string provided
146+
QVector<QRegExp> mREList; //list of filters, seperated by "|"
147+
QRegExp::PatternSyntax mPatternSyntax;
148+
149+
bool filterAcceptsString( const QString & value ) const
150+
{
151+
// return ( filterRegExp().exactMatch( fileInfo.fileName() ) );
152+
if ( mPatternSyntax == QRegExp::Wildcard ||
153+
mPatternSyntax == QRegExp::WildcardUnix )
154+
{
155+
foreach( QRegExp rx, mREList )
156+
{
157+
QgsDebugMsg( QString( "value: [%1] rx: [%2] match: %3" ).arg( value ).arg( rx.pattern() ).arg( rx.exactMatch( value ) ) );
158+
if ( rx.exactMatch( value ) )
159+
return true;
160+
}
161+
}
162+
else
163+
{
164+
foreach( QRegExp rx, mREList )
165+
{
166+
QgsDebugMsg( QString( "value: [%1] rx: [%2] match: %3" ).arg( value ).arg( rx.pattern() ).arg( rx.indexIn( value ) ) );
167+
QRegExp rx2( "\\b(mail|letter|correspondence)\\b" );
168+
QgsDebugMsg( QString( "value: [%1] rx2: [%2] match: %3" ).arg( value ).arg( rx2.pattern() ).arg( rx2.indexIn( value ) ) );
169+
QgsDebugMsg( QString( "T1 %1" ).arg( rx2.indexIn( "I sent you an email" ) ) ); // returns -1 (no match)
170+
QgsDebugMsg( QString( "T2 %2" ).arg( rx2.indexIn( "Please write the letter" ) ) ); // returns -1 (no match)
171+
QgsDebugMsg( QString( "T3 %2" ).arg( rx.indexIn( "Please write the letter" ) ) ); // returns -1 (no match)
172+
173+
if ( rx.indexIn( value ) != -1 )
174+
return true;
175+
}
176+
}
177+
return false;
178+
}
179+
180+
bool filterAcceptsRow( int sourceRow,
181+
const QModelIndex &sourceParent ) const
182+
{
183+
// if ( filterRegExp().pattern() == QString( "" ) ) return true;
184+
if ( mFilter == "" ) return true;
185+
186+
QModelIndex index = sourceModel()->index( sourceRow, 0, sourceParent );
187+
QgsDataItem* item = mModel->dataItem( index );
188+
QgsDataItem* parentItem = mModel->dataItem( sourceParent );
189+
190+
// accept "invalid" items and data collections
191+
if ( ! item )
192+
return true;
193+
if ( qobject_cast<QgsDataCollectionItem*>( item ) )
194+
return true;
195+
196+
// filter layer items - this could be delegated to the providers but a little overkill
197+
if ( parentItem && qobject_cast<QgsLayerItem*>( item ) )
198+
{
199+
// filter normal files by extension
200+
if ( qobject_cast<QgsDirectoryItem*>( parentItem ) )
201+
{
202+
QFileInfo fileInfo( item->path() );
203+
return filterAcceptsString( fileInfo.fileName() );
204+
}
205+
// filter other items (postgis, etc.) by name
206+
else if ( qobject_cast<QgsDataCollectionItem*>( parentItem ) )
207+
{
208+
return filterAcceptsString( item->name() );
209+
}
210+
}
211+
212+
// accept anything else
213+
return true;
214+
}
215+
216+
};
84217
QgsBrowserDockWidget::QgsBrowserDockWidget( QWidget * parent ) :
85-
QDockWidget( parent ), mModel( NULL )
218+
QDockWidget( parent ), mModel( NULL ), mProxyModel( NULL )
86219
{
87220
setupUi( this );
88221

@@ -95,11 +228,44 @@ QgsBrowserDockWidget::QgsBrowserDockWidget( QWidget * parent ) :
95228
mBtnAddLayers->setIcon( QgisApp::instance()->getThemeIcon( "mActionAdd.png" ) );
96229
mBtnCollapse->setIcon( QgisApp::instance()->getThemeIcon( "mActionCollapseTree.png" ) );
97230

98-
connect( mBrowserView, SIGNAL( customContextMenuRequested( const QPoint & ) ), this, SLOT( showContextMenu( const QPoint & ) ) );
99-
connect( mBrowserView, SIGNAL( doubleClicked( const QModelIndex& ) ), this, SLOT( addLayerAtIndex( const QModelIndex& ) ) );
231+
mWidgetFilter->hide();
232+
// icons from http://www.fatcow.com/free-icons License: CC Attribution 3.0
233+
mBtnFilterShow->setIcon( QgisApp::instance()->getThemeIcon( "mActionFilter.png" ) );
234+
mBtnFilter->setIcon( QgisApp::instance()->getThemeIcon( "mActionFilter.png" ) );
235+
mBtnFilterClear->setIcon( QgisApp::instance()->getThemeIcon( "mActionFilterDelete.png" ) );
236+
237+
QMenu* menu = new QMenu( this );
238+
menu->setSeparatorsCollapsible( false );
239+
mBtnFilterOptions->setMenu( menu );
240+
QActionGroup* group = new QActionGroup( menu );
241+
QAction* action = new QAction( tr( "Filter Pattern Syntax" ), group );
242+
action->setSeparator( true );
243+
menu->addAction( action );
244+
// group->addAction( action );
245+
action = new QAction( tr( "Wildcard(s)" ), group );
246+
action->setData( QVariant(( int ) QRegExp::Wildcard ) );
247+
action->setCheckable( true );
248+
action->setChecked( true );
249+
menu->addAction( action );
250+
// group->addAction( action );
251+
// menu->addSeparator()->setText( tr( "Pattern Syntax" ) );
252+
action = new QAction( tr( "Regular Expression" ), group );
253+
action->setData( QVariant(( int ) QRegExp::RegExp ) );
254+
action->setCheckable( true );
255+
menu->addAction( action );
256+
// group->addAction( action );
257+
100258
connect( mBtnRefresh, SIGNAL( clicked() ), this, SLOT( refresh() ) );
101259
connect( mBtnAddLayers, SIGNAL( clicked() ), this, SLOT( addSelectedLayers() ) );
102260
connect( mBtnCollapse, SIGNAL( clicked() ), mBrowserView, SLOT( collapseAll() ) );
261+
connect( mBtnFilterShow, SIGNAL( toggled( bool ) ), this, SLOT( showFilterWidget( bool ) ) );
262+
connect( mBtnFilter, SIGNAL( clicked() ), this, SLOT( setFilter() ) );
263+
connect( mLeFilter, SIGNAL( returnPressed() ), this, SLOT( setFilter() ) );
264+
connect( mBtnFilterClear, SIGNAL( clicked() ), this, SLOT( clearFilter() ) );
265+
connect( group, SIGNAL( triggered( QAction * ) ), this, SLOT( setFilterSyntax( QAction * ) ) );
266+
267+
connect( mBrowserView, SIGNAL( customContextMenuRequested( const QPoint & ) ), this, SLOT( showContextMenu( const QPoint & ) ) );
268+
connect( mBrowserView, SIGNAL( doubleClicked( const QModelIndex& ) ), this, SLOT( addLayerAtIndex( const QModelIndex& ) ) );
103269
}
104270

105271
void QgsBrowserDockWidget::showEvent( QShowEvent * e )
@@ -108,8 +274,19 @@ void QgsBrowserDockWidget::showEvent( QShowEvent * e )
108274
if ( mModel == NULL )
109275
{
110276
mModel = new QgsBrowserModel( mBrowserView );
111-
mBrowserView->setModel( mModel );
112277

278+
bool useFilter = true;
279+
if ( useFilter ) // enable proxy model
280+
{
281+
// mBrowserView->setModel( mModel );
282+
mProxyModel = new QgsBrowserTreeFilterProxyModel( this );
283+
mProxyModel->setBrowserModel( mModel );
284+
mBrowserView->setModel( mProxyModel );
285+
}
286+
else
287+
{
288+
mBrowserView->setModel( mModel );
289+
}
113290
// provide a horizontal scroll bar instead of using ellipse (...) for longer items
114291
mBrowserView->setTextElideMode( Qt::ElideNone );
115292
mBrowserView->header()->setResizeMode( 0, QHeaderView::ResizeToContents );
@@ -131,7 +308,7 @@ void QgsBrowserDockWidget::showEvent( QShowEvent * e )
131308
void QgsBrowserDockWidget::showContextMenu( const QPoint & pt )
132309
{
133310
QModelIndex idx = mBrowserView->indexAt( pt );
134-
QgsDataItem* item = mModel->dataItem( idx );
311+
QgsDataItem* item = dataItem( idx );
135312
if ( !item )
136313
return;
137314

@@ -188,7 +365,7 @@ void QgsBrowserDockWidget::showContextMenu( const QPoint & pt )
188365

189366
void QgsBrowserDockWidget::addFavourite()
190367
{
191-
QgsDataItem* item = mModel->dataItem( mBrowserView->currentIndex() );
368+
QgsDataItem* item = dataItem( mBrowserView->currentIndex() );
192369
if ( !item )
193370
return;
194371

@@ -220,7 +397,8 @@ void QgsBrowserDockWidget::addFavouriteDirectory( QString favDir )
220397

221398
void QgsBrowserDockWidget::removeFavourite()
222399
{
223-
QgsDataItem* item = mModel->dataItem( mBrowserView->currentIndex() );
400+
QgsDataItem* item = dataItem( mBrowserView->currentIndex() );
401+
224402
if ( !item )
225403
return;
226404
if ( item->type() != QgsDataItem::Directory )
@@ -249,7 +427,7 @@ void QgsBrowserDockWidget::refreshModel( const QModelIndex& index )
249427
QgsDebugMsg( "Entered" );
250428
if ( index.isValid() )
251429
{
252-
QgsDataItem *item = mModel->dataItem( index );
430+
QgsDataItem *item = dataItem( index );
253431
if ( item )
254432
{
255433
QgsDebugMsg( "path = " + item->path() );
@@ -297,11 +475,11 @@ void QgsBrowserDockWidget::addLayer( QgsLayerItem *layerItem )
297475

298476
void QgsBrowserDockWidget::addLayerAtIndex( const QModelIndex& index )
299477
{
300-
QgsDataItem *dataItem = mModel->dataItem( index );
478+
QgsDataItem *item = dataItem( index );
301479

302-
if ( dataItem != NULL && dataItem->type() == QgsDataItem::Layer )
480+
if ( item != NULL && item->type() == QgsDataItem::Layer )
303481
{
304-
QgsLayerItem *layerItem = qobject_cast<QgsLayerItem*>( dataItem );
482+
QgsLayerItem *layerItem = qobject_cast<QgsLayerItem*>( item );
305483
if ( layerItem != NULL )
306484
{
307485
QApplication::setOverrideCursor( Qt::WaitCursor );
@@ -328,10 +506,10 @@ void QgsBrowserDockWidget::addSelectedLayers()
328506
for ( int i = list.size() - 1; i >= 0; i-- )
329507
{
330508
QModelIndex index = list[i];
331-
QgsDataItem *dataItem = mModel->dataItem( index );
332-
if ( dataItem && dataItem->type() == QgsDataItem::Layer )
509+
QgsDataItem *item = dataItem( index );
510+
if ( item && item->type() == QgsDataItem::Layer )
333511
{
334-
QgsLayerItem *layerItem = qobject_cast<QgsLayerItem*>( dataItem );
512+
QgsLayerItem *layerItem = qobject_cast<QgsLayerItem*>( item );
335513
if ( layerItem )
336514
addLayer( layerItem );
337515
}
@@ -343,11 +521,12 @@ void QgsBrowserDockWidget::addSelectedLayers()
343521
void QgsBrowserDockWidget::showProperties( )
344522
{
345523
QgsDebugMsg( "Entered" );
346-
QgsDataItem* dataItem = mModel->dataItem( mBrowserView->currentIndex() );
524+
QModelIndex index = mBrowserView->currentIndex();
525+
QgsDataItem* item = dataItem( index );
347526

348-
if ( dataItem != NULL && dataItem->type() == QgsDataItem::Layer )
527+
if ( item != NULL && item->type() == QgsDataItem::Layer )
349528
{
350-
QgsLayerItem *layerItem = qobject_cast<QgsLayerItem*>( dataItem );
529+
QgsLayerItem *layerItem = qobject_cast<QgsLayerItem*>( item );
351530
if ( layerItem != NULL )
352531
{
353532
QgsMapLayer::LayerType type = layerItem->mapLayerType();
@@ -424,3 +603,38 @@ void QgsBrowserDockWidget::showProperties( )
424603
}
425604
}
426605

606+
void QgsBrowserDockWidget::showFilterWidget( bool visible )
607+
{
608+
mWidgetFilter->setVisible( visible );
609+
if ( ! visible )
610+
clearFilter();
611+
}
612+
613+
void QgsBrowserDockWidget::setFilter( )
614+
{
615+
QString filter = mLeFilter->text();
616+
if ( mProxyModel )
617+
mProxyModel->setFilter( filter );
618+
}
619+
620+
void QgsBrowserDockWidget::setFilterSyntax( QAction * action )
621+
{
622+
if ( !action || ! mProxyModel )
623+
return;
624+
mProxyModel->setFilterSyntax(( QRegExp::PatternSyntax ) action->data().toInt() );
625+
}
626+
627+
void QgsBrowserDockWidget::clearFilter( )
628+
{
629+
mLeFilter->setText( "" );
630+
setFilter();
631+
}
632+
633+
QgsDataItem* QgsBrowserDockWidget::dataItem( const QModelIndex& index )
634+
{
635+
if ( ! mProxyModel )
636+
return mModel->dataItem( index );
637+
else
638+
return mModel->dataItem( mProxyModel->mapToSource( index ) );
639+
}
640+

‎src/app/qgsbrowserdockwidget.h

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,10 @@
2020

2121
class QgsBrowserModel;
2222
class QModelIndex;
23-
class QTreeView;
23+
class QgsBrowserTreeView;
2424
class QgsLayerItem;
25+
class QgsDataItem;
26+
class QgsBrowserTreeFilterProxyModel;
2527

2628
class QgsBrowserDockWidget : public QDockWidget, private Ui::QgsBrowserDockWidgetBase
2729
{
@@ -41,6 +43,11 @@ class QgsBrowserDockWidget : public QDockWidget, private Ui::QgsBrowserDockWidge
4143

4244
void refresh();
4345

46+
void showFilterWidget( bool visible );
47+
void setFilterSyntax( QAction * );
48+
void setFilter();
49+
void clearFilter();
50+
4451
// layer menu items
4552
void addCurrentLayer();
4653
void addSelectedLayers();
@@ -55,8 +62,10 @@ class QgsBrowserDockWidget : public QDockWidget, private Ui::QgsBrowserDockWidge
5562

5663
void addLayer( QgsLayerItem *layerItem );
5764

58-
QTreeView* mBrowserView;
65+
QgsDataItem* dataItem( const QModelIndex& index );
66+
QgsBrowserTreeView* mBrowserView;
5967
QgsBrowserModel* mModel;
68+
QgsBrowserTreeFilterProxyModel* mProxyModel;
6069
};
6170

6271
#endif // QGSBROWSERDOCKWIDGET_H

‎src/ui/qgsbrowserdockwidgetbase.ui

Lines changed: 228 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
<rect>
77
<x>0</x>
88
<y>0</y>
9-
<width>274</width>
10-
<height>76</height>
9+
<width>216</width>
10+
<height>115</height>
1111
</rect>
1212
</property>
1313
<property name="windowTitle">
@@ -42,22 +42,12 @@
4242
<property name="spacing">
4343
<number>5</number>
4444
</property>
45-
<item>
46-
<spacer name="horizontalSpacer_2">
47-
<property name="orientation">
48-
<enum>Qt::Horizontal</enum>
49-
</property>
50-
<property name="sizeType">
51-
<enum>QSizePolicy::Fixed</enum>
52-
</property>
53-
<property name="sizeHint" stdset="0">
54-
<size>
55-
<width>5</width>
56-
<height>1</height>
57-
</size>
58-
</property>
59-
</spacer>
60-
</item>
45+
<property name="leftMargin">
46+
<number>5</number>
47+
</property>
48+
<property name="rightMargin">
49+
<number>5</number>
50+
</property>
6151
<item>
6252
<widget class="QToolButton" name="mBtnRefresh">
6353
<property name="toolTip">
@@ -71,20 +61,27 @@
7161
<normaloff>:/images/themes/default/mActionRefresh.png</normaloff>:/images/themes/default/mActionRefresh.png</iconset>
7262
</property>
7363
<property name="toolButtonStyle">
74-
<enum>Qt::ToolButtonTextBesideIcon</enum>
64+
<enum>Qt::ToolButtonIconOnly</enum>
7565
</property>
7666
<property name="autoRaise">
7767
<bool>true</bool>
7868
</property>
7969
</widget>
8070
</item>
71+
<item>
72+
<widget class="Line" name="line_3">
73+
<property name="orientation">
74+
<enum>Qt::Vertical</enum>
75+
</property>
76+
</widget>
77+
</item>
8178
<item>
8279
<widget class="QToolButton" name="mBtnAddLayers">
8380
<property name="toolTip">
8481
<string>Add Selected Layers</string>
8582
</property>
8683
<property name="text">
87-
<string> Selection</string>
84+
<string>Add</string>
8885
</property>
8986
<property name="icon">
9087
<iconset resource="../../images/images.qrc">
@@ -99,17 +96,11 @@
9996
</widget>
10097
</item>
10198
<item>
102-
<spacer name="horizontalSpacer">
99+
<widget class="Line" name="line">
103100
<property name="orientation">
104-
<enum>Qt::Horizontal</enum>
105-
</property>
106-
<property name="sizeHint" stdset="0">
107-
<size>
108-
<width>40</width>
109-
<height>20</height>
110-
</size>
101+
<enum>Qt::Vertical</enum>
111102
</property>
112-
</spacer>
103+
</widget>
113104
</item>
114105
<item>
115106
<widget class="QToolButton" name="mBtnCollapse">
@@ -128,10 +119,217 @@
128119
</property>
129120
</widget>
130121
</item>
122+
<item>
123+
<widget class="Line" name="line_2">
124+
<property name="orientation">
125+
<enum>Qt::Vertical</enum>
126+
</property>
127+
</widget>
128+
</item>
129+
<item>
130+
<widget class="QToolButton" name="mBtnFilterShow">
131+
<property name="toolTip">
132+
<string>FIlter Files</string>
133+
</property>
134+
<property name="text">
135+
<string>...</string>
136+
</property>
137+
<property name="icon">
138+
<iconset resource="../../images/images.qrc">
139+
<normaloff>:/images/themes/default/mActionFilter.png</normaloff>:/images/themes/default/mActionFilter.png</iconset>
140+
</property>
141+
<property name="checkable">
142+
<bool>true</bool>
143+
</property>
144+
<property name="checked">
145+
<bool>false</bool>
146+
</property>
147+
<property name="autoRaise">
148+
<bool>true</bool>
149+
</property>
150+
</widget>
151+
</item>
152+
<item>
153+
<spacer name="horizontalSpacer">
154+
<property name="orientation">
155+
<enum>Qt::Horizontal</enum>
156+
</property>
157+
<property name="sizeType">
158+
<enum>QSizePolicy::MinimumExpanding</enum>
159+
</property>
160+
<property name="sizeHint" stdset="0">
161+
<size>
162+
<width>0</width>
163+
<height>1</height>
164+
</size>
165+
</property>
166+
</spacer>
167+
</item>
131168
</layout>
132169
</item>
133170
<item>
134-
<layout class="QHBoxLayout" name="mLayoutBrowser"/>
171+
<widget class="QWidget" name="mWidgetFilter" native="true">
172+
<layout class="QHBoxLayout" name="horizontalLayout">
173+
<property name="spacing">
174+
<number>0</number>
175+
</property>
176+
<property name="margin">
177+
<number>0</number>
178+
</property>
179+
<item>
180+
<widget class="QFrame" name="frame">
181+
<property name="sizePolicy">
182+
<sizepolicy hsizetype="Expanding" vsizetype="Minimum">
183+
<horstretch>0</horstretch>
184+
<verstretch>0</verstretch>
185+
</sizepolicy>
186+
</property>
187+
<property name="frameShape">
188+
<enum>QFrame::StyledPanel</enum>
189+
</property>
190+
<property name="frameShadow">
191+
<enum>QFrame::Raised</enum>
192+
</property>
193+
<layout class="QHBoxLayout" name="horizontalLayout_3">
194+
<property name="spacing">
195+
<number>5</number>
196+
</property>
197+
<property name="leftMargin">
198+
<number>5</number>
199+
</property>
200+
<property name="topMargin">
201+
<number>0</number>
202+
</property>
203+
<property name="rightMargin">
204+
<number>5</number>
205+
</property>
206+
<property name="bottomMargin">
207+
<number>0</number>
208+
</property>
209+
<item>
210+
<widget class="QLineEdit" name="mLeFilter">
211+
<property name="sizePolicy">
212+
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
213+
<horstretch>0</horstretch>
214+
<verstretch>0</verstretch>
215+
</sizepolicy>
216+
</property>
217+
<property name="minimumSize">
218+
<size>
219+
<width>50</width>
220+
<height>0</height>
221+
</size>
222+
</property>
223+
<property name="maximumSize">
224+
<size>
225+
<width>200</width>
226+
<height>16777215</height>
227+
</size>
228+
</property>
229+
<property name="baseSize">
230+
<size>
231+
<width>0</width>
232+
<height>0</height>
233+
</size>
234+
</property>
235+
</widget>
236+
</item>
237+
<item>
238+
<widget class="QToolButton" name="mBtnFilter">
239+
<property name="maximumSize">
240+
<size>
241+
<width>16777215</width>
242+
<height>16777215</height>
243+
</size>
244+
</property>
245+
<property name="toolTip">
246+
<string>Filter files</string>
247+
</property>
248+
<property name="text">
249+
<string/>
250+
</property>
251+
<property name="icon">
252+
<iconset resource="../../images/images.qrc">
253+
<normaloff>:/images/themes/default/mActionFilter.png</normaloff>:/images/themes/default/mActionFilter.png</iconset>
254+
</property>
255+
<property name="autoRaise">
256+
<bool>true</bool>
257+
</property>
258+
</widget>
259+
</item>
260+
<item>
261+
<widget class="QToolButton" name="mBtnFilterClear">
262+
<property name="toolTip">
263+
<string>Clear Filter</string>
264+
</property>
265+
<property name="text">
266+
<string/>
267+
</property>
268+
<property name="icon">
269+
<iconset resource="../../images/images.qrc">
270+
<normaloff>:/images/themes/default/mActionFilterDelete.png</normaloff>:/images/themes/default/mActionFilterDelete.png</iconset>
271+
</property>
272+
<property name="autoRaise">
273+
<bool>true</bool>
274+
</property>
275+
</widget>
276+
</item>
277+
<item>
278+
<widget class="QToolButton" name="mBtnFilterOptions">
279+
<property name="toolTip">
280+
<string>Options</string>
281+
</property>
282+
<property name="text">
283+
<string/>
284+
</property>
285+
<property name="icon">
286+
<iconset resource="../../images/images.qrc">
287+
<normaloff>:/images/themes/default/mActionOptions.png</normaloff>:/images/themes/default/mActionOptions.png</iconset>
288+
</property>
289+
<property name="popupMode">
290+
<enum>QToolButton::InstantPopup</enum>
291+
</property>
292+
<property name="toolButtonStyle">
293+
<enum>Qt::ToolButtonIconOnly</enum>
294+
</property>
295+
<property name="autoRaise">
296+
<bool>true</bool>
297+
</property>
298+
</widget>
299+
</item>
300+
</layout>
301+
<zorder>mBtnFilter</zorder>
302+
<zorder>mBtnFilter</zorder>
303+
<zorder>mLeFilter</zorder>
304+
<zorder>mBtnFilterClear</zorder>
305+
<zorder>mBtnFilterOptions</zorder>
306+
</widget>
307+
</item>
308+
<item>
309+
<spacer name="horizontalSpacer_3">
310+
<property name="orientation">
311+
<enum>Qt::Horizontal</enum>
312+
</property>
313+
<property name="sizeType">
314+
<enum>QSizePolicy::MinimumExpanding</enum>
315+
</property>
316+
<property name="sizeHint" stdset="0">
317+
<size>
318+
<width>0</width>
319+
<height>20</height>
320+
</size>
321+
</property>
322+
</spacer>
323+
</item>
324+
</layout>
325+
</widget>
326+
</item>
327+
<item>
328+
<layout class="QHBoxLayout" name="mLayoutBrowser">
329+
<property name="spacing">
330+
<number>5</number>
331+
</property>
332+
</layout>
135333
</item>
136334
</layout>
137335
</widget>

0 commit comments

Comments
 (0)
Please sign in to comment.