| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,116 @@ | ||
| /*************************************************************************** | ||
| qgslayertreeembeddedconfigwidget.cpp | ||
| -------------------------------------- | ||
| Date : May 2016 | ||
| Copyright : (C) 2016 by Martin Dobias | ||
| Email : wonder dot sk at gmail dot com | ||
| *************************************************************************** | ||
| * * | ||
| * This program is free software; you can redistribute it and/or modify * | ||
| * it under the terms of the GNU General Public License as published by * | ||
| * the Free Software Foundation; either version 2 of the License, or * | ||
| * (at your option) any later version. * | ||
| * * | ||
| ***************************************************************************/ | ||
|
|
||
| #include "qgslayertreeembeddedconfigwidget.h" | ||
|
|
||
| #include "qgsmaplayer.h" | ||
| #include "qgslayertreeembeddedwidgetregistry.h" | ||
|
|
||
| #include <QStringListModel> | ||
| #include <QStandardItemModel> | ||
|
|
||
| QgsLayerTreeEmbeddedConfigWidget::QgsLayerTreeEmbeddedConfigWidget( QWidget* parent ) | ||
| : QWidget( parent ) | ||
| , mLayer( nullptr ) | ||
| { | ||
| setupUi( this ); | ||
| } | ||
|
|
||
| void QgsLayerTreeEmbeddedConfigWidget::setLayer( QgsMapLayer* layer ) | ||
| { | ||
| mLayer = layer; | ||
|
|
||
| connect( mBtnAdd, SIGNAL( clicked( bool ) ), this, SLOT( onAddClicked() ) ); | ||
| connect( mBtnRemove, SIGNAL( clicked( bool ) ), this, SLOT( onRemoveClicked() ) ); | ||
|
|
||
| QStandardItemModel* modelAvailable = new QStandardItemModel( this ); | ||
| QStandardItemModel* modelUsed = new QStandardItemModel( this ); | ||
|
|
||
| // populate available | ||
| Q_FOREACH ( const QString& providerId, QgsLayerTreeEmbeddedWidgetRegistry::instance()->providers() ) | ||
| { | ||
| QgsLayerTreeEmbeddedWidgetProvider* provider = QgsLayerTreeEmbeddedWidgetRegistry::instance()->provider( providerId ); | ||
| QStandardItem* item = new QStandardItem( provider->name() ); | ||
| item->setFlags( Qt::ItemIsEnabled | Qt::ItemIsSelectable ); | ||
| item->setData( provider->id(), Qt::UserRole + 1 ); | ||
| modelAvailable->appendRow( item ); | ||
| } | ||
| mListAvailable->setModel( modelAvailable ); | ||
|
|
||
| // populate used | ||
| int widgetsCount = layer->customProperty( "embeddedWidgets/count", 0 ).toInt(); | ||
| for ( int i = 0; i < widgetsCount; ++i ) | ||
| { | ||
| QString providerId = layer->customProperty( QString( "embeddedWidgets/%1/id" ).arg( i ) ).toString(); | ||
| if ( QgsLayerTreeEmbeddedWidgetProvider* provider = QgsLayerTreeEmbeddedWidgetRegistry::instance()->provider( providerId ) ) | ||
| { | ||
| QStandardItem* item = new QStandardItem( provider->name() ); | ||
| item->setFlags( Qt::ItemIsEnabled | Qt::ItemIsSelectable ); | ||
| item->setData( provider->id(), Qt::UserRole + 1 ); | ||
| modelUsed->appendRow( item ); | ||
| } | ||
| } | ||
| mListUsed->setModel( modelUsed ); | ||
| } | ||
|
|
||
| void QgsLayerTreeEmbeddedConfigWidget::onAddClicked() | ||
| { | ||
| if ( !mListAvailable->currentIndex().isValid() ) | ||
| return; | ||
|
|
||
| QString providerId = mListAvailable->model()->data( mListAvailable->currentIndex(), Qt::UserRole + 1 ).toString(); | ||
| QgsLayerTreeEmbeddedWidgetProvider* provider = QgsLayerTreeEmbeddedWidgetRegistry::instance()->provider( providerId ); | ||
| if ( !provider ) | ||
| return; | ||
|
|
||
| if ( QStandardItemModel* model = qobject_cast<QStandardItemModel*>( mListUsed->model() ) ) | ||
| { | ||
| QStandardItem* item = new QStandardItem( provider->name() ); | ||
| item->setFlags( Qt::ItemIsEnabled | Qt::ItemIsSelectable ); | ||
| item->setData( provider->id(), Qt::UserRole + 1 ); | ||
| model->appendRow( item ); | ||
| } | ||
| } | ||
|
|
||
| void QgsLayerTreeEmbeddedConfigWidget::onRemoveClicked() | ||
| { | ||
| if ( !mListUsed->currentIndex().isValid() ) | ||
| return; | ||
|
|
||
| int row = mListUsed->currentIndex().row(); | ||
| mListUsed->model()->removeRow( row ); | ||
| } | ||
|
|
||
| void QgsLayerTreeEmbeddedConfigWidget::applyToLayer() | ||
| { | ||
| if ( !mLayer ) | ||
| return; | ||
|
|
||
| // clear old properties | ||
| int widgetsCount = mLayer->customProperty( "embeddedWidgets/count", 0 ).toInt(); | ||
| for ( int i = 0; i < widgetsCount; ++i ) | ||
| { | ||
| mLayer->removeCustomProperty( QString( "embeddedWidgets/%1/id" ).arg( i ) ); | ||
| } | ||
|
|
||
| // setup new properties | ||
| int newCount = mListUsed->model()->rowCount(); | ||
| mLayer->setCustomProperty( "embeddedWidgets/count", newCount ); | ||
| for ( int i = 0; i < newCount; ++i ) | ||
| { | ||
| QString providerId = mListUsed->model()->data( mListUsed->model()->index( i, 0 ), Qt::UserRole + 1 ).toString(); | ||
| mLayer->setCustomProperty( QString( "embeddedWidgets/%1/id" ).arg( i ), providerId ); | ||
| } | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,48 @@ | ||
| /*************************************************************************** | ||
| qgslayertreeembeddedconfigwidget.h | ||
| -------------------------------------- | ||
| Date : May 2016 | ||
| Copyright : (C) 2016 by Martin Dobias | ||
| Email : wonder dot sk at gmail dot com | ||
| *************************************************************************** | ||
| * * | ||
| * This program is free software; you can redistribute it and/or modify * | ||
| * it under the terms of the GNU General Public License as published by * | ||
| * the Free Software Foundation; either version 2 of the License, or * | ||
| * (at your option) any later version. * | ||
| * * | ||
| ***************************************************************************/ | ||
|
|
||
| #ifndef QGSLAYERTREEEMBEDDEDCONFIGWIDGET_H | ||
| #define QGSLAYERTREEEMBEDDEDCONFIGWIDGET_H | ||
|
|
||
| #include "ui_qgslayertreeembeddedconfigwidget.h" | ||
|
|
||
| class QgsMapLayer; | ||
|
|
||
| /** \ingroup gui | ||
| * \class QgsLayerTreeEmbeddedConfigWidget | ||
| * A widget to configure layer tree embedded widgets for a particular map layer. | ||
| * @note introduced in QGIS 2.16 | ||
| */ | ||
| class GUI_EXPORT QgsLayerTreeEmbeddedConfigWidget : public QWidget, protected Ui::QgsLayerTreeEmbeddedConfigWidget | ||
| { | ||
| Q_OBJECT | ||
| public: | ||
| QgsLayerTreeEmbeddedConfigWidget( QWidget* parent = nullptr ); | ||
|
|
||
| //! Initialize widget with a map layer | ||
| void setLayer( QgsMapLayer* layer ); | ||
|
|
||
| //! Store changes made in the widget to the layer | ||
| void applyToLayer(); | ||
|
|
||
| private slots: | ||
| void onAddClicked(); | ||
| void onRemoveClicked(); | ||
|
|
||
| private: | ||
| QgsMapLayer* mLayer; | ||
| }; | ||
|
|
||
| #endif // QGSLAYERTREEEMBEDDEDCONFIGWIDGET_H |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,68 @@ | ||
| /*************************************************************************** | ||
| qgslayertreeembeddedwidgetregistry.cpp | ||
| -------------------------------------- | ||
| Date : May 2016 | ||
| Copyright : (C) 2016 by Martin Dobias | ||
| Email : wonder dot sk at gmail dot com | ||
| *************************************************************************** | ||
| * * | ||
| * This program is free software; you can redistribute it and/or modify * | ||
| * it under the terms of the GNU General Public License as published by * | ||
| * the Free Software Foundation; either version 2 of the License, or * | ||
| * (at your option) any later version. * | ||
| * * | ||
| ***************************************************************************/ | ||
|
|
||
| #include "qgslayertreeembeddedwidgetregistry.h" | ||
|
|
||
| #include "qgslayertreeembeddedwidgetsimpl.h" | ||
|
|
||
|
|
||
|
|
||
| QgsLayerTreeEmbeddedWidgetRegistry* QgsLayerTreeEmbeddedWidgetRegistry::instance() | ||
| { | ||
| static QgsLayerTreeEmbeddedWidgetRegistry* sInstance( new QgsLayerTreeEmbeddedWidgetRegistry() ); | ||
| return sInstance; | ||
| } | ||
|
|
||
| QgsLayerTreeEmbeddedWidgetRegistry::QgsLayerTreeEmbeddedWidgetRegistry() | ||
| { | ||
| // populate with default implementations | ||
| addProvider( new QgsLayerTreeTransparencyWidget::Provider() ); | ||
| } | ||
|
|
||
| QgsLayerTreeEmbeddedWidgetRegistry::~QgsLayerTreeEmbeddedWidgetRegistry() | ||
| { | ||
| Q_FOREACH ( QgsLayerTreeEmbeddedWidgetProvider* provider, mProviders ) | ||
| { | ||
| removeProvider( provider->id() ); | ||
| } | ||
| } | ||
|
|
||
| QStringList QgsLayerTreeEmbeddedWidgetRegistry::providers() const | ||
| { | ||
| return mProviders.keys(); | ||
| } | ||
|
|
||
| QgsLayerTreeEmbeddedWidgetProvider* QgsLayerTreeEmbeddedWidgetRegistry::provider( const QString& providerId ) const | ||
| { | ||
| return mProviders.value( providerId ); | ||
| } | ||
|
|
||
| bool QgsLayerTreeEmbeddedWidgetRegistry::addProvider( QgsLayerTreeEmbeddedWidgetProvider* provider ) | ||
| { | ||
| if ( mProviders.contains( provider->id() ) ) | ||
| return false; | ||
|
|
||
| mProviders.insert( provider->id(), provider ); | ||
| return true; | ||
| } | ||
|
|
||
| bool QgsLayerTreeEmbeddedWidgetRegistry::removeProvider( const QString& providerId ) | ||
| { | ||
| if ( !mProviders.contains( providerId ) ) | ||
| return false; | ||
|
|
||
| delete mProviders.take( providerId ); | ||
| return true; | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,93 @@ | ||
| /*************************************************************************** | ||
| qgslayertreeembeddedwidgetregistry.h | ||
| -------------------------------------- | ||
| Date : May 2016 | ||
| Copyright : (C) 2016 by Martin Dobias | ||
| Email : wonder dot sk at gmail dot com | ||
| *************************************************************************** | ||
| * * | ||
| * This program is free software; you can redistribute it and/or modify * | ||
| * it under the terms of the GNU General Public License as published by * | ||
| * the Free Software Foundation; either version 2 of the License, or * | ||
| * (at your option) any later version. * | ||
| * * | ||
| ***************************************************************************/ | ||
|
|
||
| #ifndef QGSLAYERTREEEMBEDDEDWIDGETREGISTRY_H | ||
| #define QGSLAYERTREEEMBEDDEDWIDGETREGISTRY_H | ||
|
|
||
| #include <QMap> | ||
| #include <QWidget> | ||
|
|
||
|
|
||
| class QgsMapLayer; | ||
|
|
||
| /** \ingroup gui | ||
| * \class QgsLayerTreeEmbeddedWidgetProvider | ||
| * Provider interface to be implemented in order to introduce new kinds of embedded widgets for use in layer tree. | ||
| * Embedded widgets are assigned per individual map layers and they are shown before any legend entries. | ||
| * @see QgsLayerTreeEmbeddedWidgetRegistry | ||
| * @note introduced in QGIS 2.16 | ||
| */ | ||
| class GUI_EXPORT QgsLayerTreeEmbeddedWidgetProvider | ||
| { | ||
| public: | ||
| virtual ~QgsLayerTreeEmbeddedWidgetProvider() {} | ||
|
|
||
| //! Unique name of the provider (among other providers) | ||
| virtual QString id() const = 0; | ||
|
|
||
| //! Human readable name - may be translatable with tr() | ||
| virtual QString name() const = 0; | ||
|
|
||
| //! Factory to create widgets. The returned widget is owned by the caller. | ||
| //! The widgetIndex argument may be used to identify which widget is being | ||
| //! created (useful when using multiple widgets from the same provider for one layer). | ||
| virtual QWidget* createWidget( QgsMapLayer* layer, int widgetIndex ) = 0; | ||
|
|
||
| //! Whether it makes sense to use this widget for a particular layer | ||
| virtual bool supportsLayer( QgsMapLayer* layer ) = 0; | ||
| }; | ||
|
|
||
| /** \ingroup gui | ||
| * \class QgsLayerTreeEmbeddedWidgetRegistry | ||
| * Registry of widgets that may be embedded into layer tree view. | ||
| * Embedded widgets are assigned per individual map layers and they are shown before any legend entries. | ||
| * Layer tree must have UseEmbeddedWidgets flag enabled in order to show assigned widgets. | ||
| * | ||
| * @see QgsLayerTreeEmbeddedWidgetRegistry | ||
| * @note introduced in QGIS 2.16 | ||
| */ | ||
| class GUI_EXPORT QgsLayerTreeEmbeddedWidgetRegistry | ||
| { | ||
| public: | ||
|
|
||
| /** Means of accessing canonical single instance */ | ||
| static QgsLayerTreeEmbeddedWidgetRegistry* instance(); | ||
|
|
||
| ~QgsLayerTreeEmbeddedWidgetRegistry(); | ||
|
|
||
| /** Return list of all registered providers */ | ||
| QStringList providers() const; | ||
|
|
||
| /** Get provider object from the provider's ID */ | ||
| QgsLayerTreeEmbeddedWidgetProvider* provider( const QString& providerId ) const; | ||
|
|
||
| /** Register a provider, takes ownership of the object. | ||
| * Returns true on success, false if the provider is already registered. */ | ||
| bool addProvider( QgsLayerTreeEmbeddedWidgetProvider* provider ); | ||
|
|
||
| /** Unregister a provider, the provider object is deleted. | ||
| * Returns true on success, false if the provider was not registered. */ | ||
| bool removeProvider( const QString& providerId ); | ||
|
|
||
| protected: | ||
| //! Protected constructor - use instance() to access the registry. | ||
| QgsLayerTreeEmbeddedWidgetRegistry(); | ||
|
|
||
| //! storage of all the providers | ||
| QMap<QString, QgsLayerTreeEmbeddedWidgetProvider*> mProviders; | ||
| }; | ||
|
|
||
|
|
||
| #endif // QGSLAYERTREEEMBEDDEDWIDGETREGISTRY_H |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,122 @@ | ||
| /*************************************************************************** | ||
| qgslayertreeembeddedwidgetsimpl.h | ||
| -------------------------------------- | ||
| Date : May 2016 | ||
| Copyright : (C) 2016 by Martin Dobias | ||
| Email : wonder dot sk at gmail dot com | ||
| *************************************************************************** | ||
| * * | ||
| * This program is free software; you can redistribute it and/or modify * | ||
| * it under the terms of the GNU General Public License as published by * | ||
| * the Free Software Foundation; either version 2 of the License, or * | ||
| * (at your option) any later version. * | ||
| * * | ||
| ***************************************************************************/ | ||
|
|
||
| #include "qgslayertreeembeddedwidgetsimpl.h" | ||
|
|
||
| #include <QHBoxLayout> | ||
| #include <QLabel> | ||
| #include <QSlider> | ||
| #include <QTimer> | ||
|
|
||
| #include "qgsrasterlayer.h" | ||
| #include "qgsrasterrenderer.h" | ||
| #include "qgsvectorlayer.h" | ||
|
|
||
|
|
||
|
|
||
|
|
||
| QgsLayerTreeTransparencyWidget::QgsLayerTreeTransparencyWidget( QgsMapLayer* layer ) | ||
| : mLayer( layer ) | ||
| { | ||
| setAutoFillBackground( true ); // override the content from model | ||
| QLabel* l = new QLabel( "Transparency", this ); | ||
| mSlider = new QSlider( Qt::Horizontal, this ); | ||
| mSlider->setRange( 0, 100 ); | ||
| QHBoxLayout* lay = new QHBoxLayout(); | ||
| lay->addWidget( l ); | ||
| lay->addWidget( mSlider ); | ||
| setLayout( lay ); | ||
|
|
||
| // timer for delayed transparency update - for more responsive GUI | ||
| mTimer = new QTimer( this ); | ||
| mTimer->setSingleShot( true ); | ||
| mTimer->setInterval( 100 ); | ||
| connect( mTimer, SIGNAL( timeout() ), this, SLOT( updateTransparencyFromSlider() ) ); | ||
|
|
||
| connect( mSlider, SIGNAL( valueChanged( int ) ), this, SLOT( sliderValueChanged( int ) ) ); | ||
|
|
||
| // init from layer | ||
| if ( mLayer->type() == QgsMapLayer::VectorLayer ) | ||
| { | ||
| mSlider->setValue( qobject_cast<QgsVectorLayer*>( mLayer )->layerTransparency() ); | ||
| connect( mLayer, SIGNAL( layerTransparencyChanged( int ) ), this, SLOT( layerTrChanged() ) ); | ||
| } | ||
| else if ( mLayer->type() == QgsMapLayer::RasterLayer ) | ||
| { | ||
| mSlider->setValue( 100 - qobject_cast<QgsRasterLayer*>( mLayer )->renderer()->opacity() * 100 ); | ||
| // TODO: there is no signal for raster layers | ||
| } | ||
| } | ||
|
|
||
| QSize QgsLayerTreeTransparencyWidget::sizeHint() const | ||
| { | ||
| return QWidget::sizeHint(); | ||
| //return QSize(200,200); // horizontal seems ignored, vertical is used for spacing | ||
| } | ||
|
|
||
| void QgsLayerTreeTransparencyWidget::sliderValueChanged( int value ) | ||
| { | ||
| Q_UNUSED( value ); | ||
|
|
||
| if ( mTimer->isActive() ) | ||
| return; | ||
| mTimer->start(); | ||
| } | ||
|
|
||
| void QgsLayerTreeTransparencyWidget::updateTransparencyFromSlider() | ||
| { | ||
| int value = mSlider->value(); | ||
|
|
||
| if ( mLayer->type() == QgsMapLayer::VectorLayer ) | ||
| { | ||
| qobject_cast<QgsVectorLayer*>( mLayer )->setLayerTransparency( value ); | ||
| } | ||
| else if ( mLayer->type() == QgsMapLayer::RasterLayer ) | ||
| { | ||
| qobject_cast<QgsRasterLayer*>( mLayer )->renderer()->setOpacity( 1 - value / 100. ); | ||
| } | ||
|
|
||
| mLayer->triggerRepaint(); | ||
| } | ||
|
|
||
| void QgsLayerTreeTransparencyWidget::layerTrChanged() | ||
| { | ||
| mSlider->blockSignals( true ); | ||
| mSlider->setValue( qobject_cast<QgsVectorLayer*>( mLayer )->layerTransparency() ); | ||
| mSlider->blockSignals( false ); | ||
| } | ||
|
|
||
| // | ||
|
|
||
| QString QgsLayerTreeTransparencyWidget::Provider::id() const | ||
| { | ||
| return "transparency"; | ||
| } | ||
|
|
||
| QString QgsLayerTreeTransparencyWidget::Provider::name() const | ||
| { | ||
| return tr( "Transparency slider" ); | ||
| } | ||
|
|
||
| QgsLayerTreeTransparencyWidget* QgsLayerTreeTransparencyWidget::Provider::createWidget( QgsMapLayer* layer, int widgetIndex ) | ||
| { | ||
| Q_UNUSED( widgetIndex ); | ||
| return new QgsLayerTreeTransparencyWidget( layer ); | ||
| } | ||
|
|
||
| bool QgsLayerTreeTransparencyWidget::Provider::supportsLayer( QgsMapLayer* layer ) | ||
| { | ||
| return layer->type() == QgsMapLayer::VectorLayer || layer->type() == QgsMapLayer::RasterLayer; | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,60 @@ | ||
| /*************************************************************************** | ||
| qgslayertreeembeddedwidgetsimpl.h | ||
| -------------------------------------- | ||
| Date : May 2016 | ||
| Copyright : (C) 2016 by Martin Dobias | ||
| Email : wonder dot sk at gmail dot com | ||
| *************************************************************************** | ||
| * * | ||
| * This program is free software; you can redistribute it and/or modify * | ||
| * it under the terms of the GNU General Public License as published by * | ||
| * the Free Software Foundation; either version 2 of the License, or * | ||
| * (at your option) any later version. * | ||
| * * | ||
| ***************************************************************************/ | ||
|
|
||
| #ifndef QGSLAYERTREEEMBEDDEDWIDGETSIMPL_H | ||
| #define QGSLAYERTREEEMBEDDEDWIDGETSIMPL_H | ||
|
|
||
| #include <QWidget> | ||
| #include "qgslayertreeembeddedwidgetregistry.h" | ||
|
|
||
|
|
||
| class QSlider; | ||
| class QTimer; | ||
| class QgsMapLayer; | ||
|
|
||
| /** | ||
| * @brief Implementation of simple transparency widget to be used in layer tree view | ||
| * | ||
| * @note private class - not in QGIS API | ||
| */ | ||
| class QgsLayerTreeTransparencyWidget : public QWidget | ||
| { | ||
| Q_OBJECT | ||
| public: | ||
| QgsLayerTreeTransparencyWidget( QgsMapLayer* layer ); | ||
|
|
||
| virtual QSize sizeHint() const override; | ||
|
|
||
| class Provider : public QgsLayerTreeEmbeddedWidgetProvider | ||
| { | ||
| public: | ||
| virtual QString id() const override; | ||
| virtual QString name() const override; | ||
| virtual QgsLayerTreeTransparencyWidget* createWidget( QgsMapLayer* layer, int widgetIndex ) override; | ||
| virtual bool supportsLayer( QgsMapLayer *layer ) override; | ||
| }; | ||
|
|
||
| public slots: | ||
| void sliderValueChanged( int value ); | ||
| void updateTransparencyFromSlider(); | ||
| void layerTrChanged(); | ||
|
|
||
| private: | ||
| QgsMapLayer* mLayer; | ||
| QSlider* mSlider; | ||
| QTimer* mTimer; | ||
| }; | ||
|
|
||
| #endif // QGSLAYERTREEEMBEDDEDWIDGETSIMPL_H |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,95 @@ | ||
| <?xml version="1.0" encoding="UTF-8"?> | ||
| <ui version="4.0"> | ||
| <class>QgsLayerTreeEmbeddedConfigWidget</class> | ||
| <widget class="QWidget" name="QgsLayerTreeEmbeddedConfigWidget"> | ||
| <property name="geometry"> | ||
| <rect> | ||
| <x>0</x> | ||
| <y>0</y> | ||
| <width>580</width> | ||
| <height>300</height> | ||
| </rect> | ||
| </property> | ||
| <property name="windowTitle"> | ||
| <string>Form</string> | ||
| </property> | ||
| <layout class="QGridLayout" name="gridLayout"> | ||
| <item row="0" column="0"> | ||
| <widget class="QLabel" name="label"> | ||
| <property name="text"> | ||
| <string>Available widgets</string> | ||
| </property> | ||
| </widget> | ||
| </item> | ||
| <item row="0" column="2"> | ||
| <widget class="QLabel" name="label_2"> | ||
| <property name="text"> | ||
| <string>Used widgets</string> | ||
| </property> | ||
| </widget> | ||
| </item> | ||
| <item row="1" column="0"> | ||
| <widget class="QListView" name="mListAvailable"/> | ||
| </item> | ||
| <item row="1" column="1"> | ||
| <layout class="QVBoxLayout" name="verticalLayout"> | ||
| <item> | ||
| <spacer name="verticalSpacer_2"> | ||
| <property name="orientation"> | ||
| <enum>Qt::Vertical</enum> | ||
| </property> | ||
| <property name="sizeHint" stdset="0"> | ||
| <size> | ||
| <width>20</width> | ||
| <height>40</height> | ||
| </size> | ||
| </property> | ||
| </spacer> | ||
| </item> | ||
| <item> | ||
| <widget class="QToolButton" name="mBtnAdd"> | ||
| <property name="text"> | ||
| <string>-></string> | ||
| </property> | ||
| <property name="icon"> | ||
| <iconset resource="../../images/images.qrc"> | ||
| <normaloff>:/images/themes/default/mActionArrowRight.png</normaloff>:/images/themes/default/mActionArrowRight.png</iconset> | ||
| </property> | ||
| </widget> | ||
| </item> | ||
| <item> | ||
| <widget class="QToolButton" name="mBtnRemove"> | ||
| <property name="text"> | ||
| <string><-</string> | ||
| </property> | ||
| <property name="icon"> | ||
| <iconset resource="../../images/images.qrc"> | ||
| <normaloff>:/images/themes/default/mActionArrowLeft.png</normaloff>:/images/themes/default/mActionArrowLeft.png</iconset> | ||
| </property> | ||
| </widget> | ||
| </item> | ||
| <item> | ||
| <spacer name="verticalSpacer"> | ||
| <property name="orientation"> | ||
| <enum>Qt::Vertical</enum> | ||
| </property> | ||
| <property name="sizeHint" stdset="0"> | ||
| <size> | ||
| <width>20</width> | ||
| <height>40</height> | ||
| </size> | ||
| </property> | ||
| </spacer> | ||
| </item> | ||
| </layout> | ||
| </item> | ||
| <item row="1" column="2"> | ||
| <widget class="QListView" name="mListUsed"/> | ||
| </item> | ||
| </layout> | ||
| </widget> | ||
| <resources> | ||
| <include location="../../images/images.qrc"/> | ||
| </resources> | ||
| <connections/> | ||
| </ui> |