257 changes: 111 additions & 146 deletions src/app/qgisapp.cpp

Large diffs are not rendered by default.

9 changes: 0 additions & 9 deletions src/app/qgisapp.h
Original file line number Diff line number Diff line change
Expand Up @@ -183,15 +183,6 @@ class QgisApp : public QMainWindow, private Ui::MainWindow
//! update proxy settings
void namUpdate();

//! Helper to get a theme icon. It will fall back to the
//default theme if the active theme does not have the required
//icon.
static QIcon getThemeIcon( const QString theName );
//! Helper to get a theme icon as a pixmap. It will fall back to the
//default theme if the active theme does not have the required
//icon.
static QPixmap getThemePixmap( const QString theName );

/** Add a dock widget to the main window. Overloaded from QMainWindow.
* After adding the dock widget to the ui (by delegating to the QMainWindow
* parent class, it will also add it to the View menu list of docks.*/
Expand Down
24 changes: 12 additions & 12 deletions src/app/qgsattributetabledialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -86,18 +86,18 @@ QgsAttributeTableDialog::QgsAttributeTableDialog( QgsVectorLayer *theLayer, QWid

updateTitle();

mRemoveSelectionButton->setIcon( QgisApp::getThemeIcon( "/mActionUnselectAttributes.png" ) );
mSelectedToTopButton->setIcon( QgisApp::getThemeIcon( "/mActionSelectedToTop.png" ) );
mCopySelectedRowsButton->setIcon( QgisApp::getThemeIcon( "/mActionCopySelected.png" ) );
mZoomMapToSelectedRowsButton->setIcon( QgisApp::getThemeIcon( "/mActionZoomToSelected.png" ) );
mPanMapToSelectedRowsButton->setIcon( QgisApp::getThemeIcon( "/mActionPanToSelected.png" ) );
mInvertSelectionButton->setIcon( QgisApp::getThemeIcon( "/mActionInvertSelection.png" ) );
mToggleEditingButton->setIcon( QgisApp::getThemeIcon( "/mActionToggleEditing.png" ) );
mSaveEditsButton->setIcon( QgisApp::getThemeIcon( "/mActionSaveEdits.png" ) );
mDeleteSelectedButton->setIcon( QgisApp::getThemeIcon( "/mActionDeleteSelected.png" ) );
mOpenFieldCalculator->setIcon( QgisApp::getThemeIcon( "/mActionCalculateField.png" ) );
mAddAttribute->setIcon( QgisApp::getThemeIcon( "/mActionNewAttribute.png" ) );
mRemoveAttribute->setIcon( QgisApp::getThemeIcon( "/mActionDeleteAttribute.png" ) );
mRemoveSelectionButton->setIcon( QgsApplication::getThemeIcon( "/mActionUnselectAttributes.png" ) );
mSelectedToTopButton->setIcon( QgsApplication::getThemeIcon( "/mActionSelectedToTop.png" ) );
mCopySelectedRowsButton->setIcon( QgsApplication::getThemeIcon( "/mActionCopySelected.png" ) );
mZoomMapToSelectedRowsButton->setIcon( QgsApplication::getThemeIcon( "/mActionZoomToSelected.png" ) );
mPanMapToSelectedRowsButton->setIcon( QgsApplication::getThemeIcon( "/mActionPanToSelected.png" ) );
mInvertSelectionButton->setIcon( QgsApplication::getThemeIcon( "/mActionInvertSelection.png" ) );
mToggleEditingButton->setIcon( QgsApplication::getThemeIcon( "/mActionToggleEditing.png" ) );
mSaveEditsButton->setIcon( QgsApplication::getThemeIcon( "/mActionSaveEdits.png" ) );
mDeleteSelectedButton->setIcon( QgsApplication::getThemeIcon( "/mActionDeleteSelected.png" ) );
mOpenFieldCalculator->setIcon( QgsApplication::getThemeIcon( "/mActionCalculateField.png" ) );
mAddAttribute->setIcon( QgsApplication::getThemeIcon( "/mActionNewAttribute.png" ) );
mRemoveAttribute->setIcon( QgsApplication::getThemeIcon( "/mActionDeleteAttribute.png" ) );

// toggle editing
bool canChangeAttributes = mLayer->dataProvider()->capabilities() & QgsVectorDataProvider::ChangeAttributeValues;
Expand Down
6 changes: 3 additions & 3 deletions src/app/qgsbrowserdockwidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ QgsBrowserDockWidget::QgsBrowserDockWidget( QWidget * parent ) :
mBrowserView = new QgsBrowserTreeView( this );

QToolButton* refreshButton = new QToolButton( this );
refreshButton->setIcon( QgisApp::instance()->getThemeIcon( "mActionDraw.png" ) );
refreshButton->setIcon( QgsApplication::getThemeIcon( "mActionDraw.png" ) );
// remove this to save space
refreshButton->setToolButtonStyle( Qt::ToolButtonTextBesideIcon );
refreshButton->setText( tr( "Refresh" ) );
Expand All @@ -97,7 +97,7 @@ QgsBrowserDockWidget::QgsBrowserDockWidget( QWidget * parent ) :
connect( refreshButton, SIGNAL( clicked() ), this, SLOT( refresh() ) );

QToolButton* addLayersButton = new QToolButton( this );
addLayersButton->setIcon( QgisApp::instance()->getThemeIcon( "mActionAddLayer.png" ) );
addLayersButton->setIcon( QgsApplication::getThemeIcon( "mActionAddLayer.png" ) );
// remove this to save space
addLayersButton->setToolButtonStyle( Qt::ToolButtonTextBesideIcon );
addLayersButton->setText( tr( "Add Selection" ) );
Expand All @@ -106,7 +106,7 @@ QgsBrowserDockWidget::QgsBrowserDockWidget( QWidget * parent ) :
connect( addLayersButton, SIGNAL( clicked() ), this, SLOT( addSelectedLayers() ) );

QToolButton* collapseButton = new QToolButton( this );
collapseButton->setIcon( QgisApp::instance()->getThemeIcon( "mActionCollapseTree.png" ) );
collapseButton->setIcon( QgsApplication::getThemeIcon( "mActionCollapseTree.png" ) );
collapseButton->setToolTip( tr( "Collapse All" ) );
collapseButton->setAutoRaise( true );
connect( collapseButton, SIGNAL( clicked() ), mBrowserView, SLOT( collapseAll() ) );
Expand Down
18 changes: 9 additions & 9 deletions src/app/qgscustomprojectiondialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -49,13 +49,13 @@ QgsCustomProjectionDialog::QgsCustomProjectionDialog( QWidget *parent, Qt::WFlag
QSettings settings;
restoreGeometry( settings.value( "/Windows/CustomProjection/geometry" ).toByteArray() );

pbnFirst->setIcon( QgisApp::getThemeIcon( "mIconFirst.png" ) );
pbnPrevious->setIcon( QgisApp::getThemeIcon( "mIconPrevious.png" ) );
pbnNext->setIcon( QgisApp::getThemeIcon( "mIconNext.png" ) );
pbnLast->setIcon( QgisApp::getThemeIcon( "mIconLast.png" ) );
pbnNew->setIcon( QgisApp::getThemeIcon( "mIconNew.png" ) );
pbnSave->setIcon( QgisApp::getThemeIcon( "mActionFileSave.png" ) );
pbnDelete->setIcon( QgisApp::getThemeIcon( "mIconDelete.png" ) );
pbnFirst->setIcon( QgsApplication::getThemeIcon( "mIconFirst.png" ) );
pbnPrevious->setIcon( QgsApplication::getThemeIcon( "mIconPrevious.png" ) );
pbnNext->setIcon( QgsApplication::getThemeIcon( "mIconNext.png" ) );
pbnLast->setIcon( QgsApplication::getThemeIcon( "mIconLast.png" ) );
pbnNew->setIcon( QgsApplication::getThemeIcon( "mIconNew.png" ) );
pbnSave->setIcon( QgsApplication::getThemeIcon( "mActionFileSave.png" ) );
pbnDelete->setIcon( QgsApplication::getThemeIcon( "mIconDelete.png" ) );
// user database is created at QGIS startup in QgisApp::createDB
// we just check whether there is our database [MD]
QFileInfo myFileInfo;
Expand Down Expand Up @@ -594,7 +594,7 @@ void QgsCustomProjectionDialog::on_pbnNew_clicked()
if ( pbnNew->text() == tr( "Abort" ) )
{
//if we get here, user has aborted add record
pbnNew->setIcon( QgisApp::getThemeIcon( "mIconNew.png" ) );
pbnNew->setIcon( QgsApplication::getThemeIcon( "mIconNew.png" ) );
//next line needed for new/abort logic
pbnNew->setText( tr( "New" ) );
//get back to the last used record before insert was pressed
Expand All @@ -616,7 +616,7 @@ void QgsCustomProjectionDialog::on_pbnNew_clicked()
pbnNext->setEnabled( false );
pbnLast->setEnabled( false );
pbnDelete->setEnabled( false );
pbnNew->setIcon( QgisApp::getThemeIcon( "mIconNew.png" ) );
pbnNew->setIcon( QgsApplication::getThemeIcon( "mIconNew.png" ) );
//next line needed for new/abort logic
pbnNew->setText( tr( "Abort" ) );
//clear the controls
Expand Down
4 changes: 3 additions & 1 deletion src/app/qgsembedlayerdialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
#include "qgsembedlayerdialog.h"
#include "qgsproject.h"
#include "qgisapp.h"
#include "qgsapplication.h"

#include <QDomDocument>
#include <QFileDialog>
#include <QFileInfo>
Expand Down Expand Up @@ -172,7 +174,7 @@ void QgsEmbedLayerDialog::addLegendGroupToTreeWidget( const QDomElement& groupEl
{
groupItem = new QTreeWidgetItem( parent );
}
groupItem->setIcon( 0, QgisApp::getThemeIcon( "mActionFolder.png" ) );
groupItem->setIcon( 0, QgsApplication::getThemeIcon( "mActionFolder.png" ) );
groupItem->setText( 0, groupElem.attribute( "name" ) );
groupItem->setData( 0, Qt::UserRole, "group" );

Expand Down
10 changes: 5 additions & 5 deletions src/app/qgsidentifyresults.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -226,7 +226,7 @@ void QgsIdentifyResults::addFeature( QgsVectorLayer *vlayer,
if ( vlayer->pendingFields().size() > 0 )
{
QTreeWidgetItem *editItem = new QTreeWidgetItem( QStringList() << "" << ( vlayer->isEditable() ? tr( "Edit feature form" ) : tr( "View feature form" ) ) );
editItem->setIcon( 0, QgisApp::getThemeIcon( vlayer->isEditable() ? "/mIconEditable.png" : "/mIconEditable.png" ) );
editItem->setIcon( 0, QgsApplication::getThemeIcon( vlayer->isEditable() ? "/mIconEditable.png" : "/mIconEditable.png" ) );
editItem->setData( 0, Qt::UserRole, "edit" );
actionItem->addChild( editItem );
}
Expand All @@ -239,7 +239,7 @@ void QgsIdentifyResults::addFeature( QgsVectorLayer *vlayer,
continue;

QTreeWidgetItem *twi = new QTreeWidgetItem( QStringList() << "" << action.name() );
twi->setIcon( 0, QgisApp::getThemeIcon( "/mAction.png" ) );
twi->setIcon( 0, QgsApplication::getThemeIcon( "/mAction.png" ) );
twi->setData( 0, Qt::UserRole, "action" );
twi->setData( 0, Qt::UserRole + 1, QVariant::fromValue( i ) );
actionItem->addChild( twi );
Expand Down Expand Up @@ -329,7 +329,7 @@ void QgsIdentifyResults::editingToggled()
continue;

QTreeWidgetItem *editItem = actions->child( j );
editItem->setIcon( 0, QgisApp::getThemeIcon( vlayer->isEditable() ? "/mIconEditable.png" : "/mIconEditable.png" ) );
editItem->setIcon( 0, QgsApplication::getThemeIcon( vlayer->isEditable() ? "/mIconEditable.png" : "/mIconEditable.png" ) );
editItem->setText( 1, vlayer->isEditable() ? tr( "Edit feature form" ) : tr( "View feature form" ) );
}
}
Expand Down Expand Up @@ -434,7 +434,7 @@ void QgsIdentifyResults::contextMenuEvent( QContextMenuEvent* event )
if ( featItem )
{
mActionPopup->addAction(
QgisApp::getThemeIcon( vlayer->isEditable() ? "/mIconEditable.png" : "/mIconEditable.png" ),
QgsApplication::getThemeIcon( vlayer->isEditable() ? "/mIconEditable.png" : "/mIconEditable.png" ),
vlayer->isEditable() ? tr( "Edit feature form" ) : tr( "View feature form" ),
this, SLOT( featureForm() ) );
mActionPopup->addAction( tr( "Zoom to feature" ), this, SLOT( zoomToFeature() ) );
Expand Down Expand Up @@ -474,7 +474,7 @@ void QgsIdentifyResults::contextMenuEvent( QContextMenuEvent* event )
continue;

QgsFeatureAction *a = new QgsFeatureAction( action.name(), mFeatures[ featIdx ], vlayer, i, idx, this );
mActionPopup->addAction( QgisApp::getThemeIcon( "/mAction.png" ), action.name(), a, SLOT( execute() ) );
mActionPopup->addAction( QgsApplication::getThemeIcon( "/mAction.png" ), action.name(), a, SLOT( execute() ) );
}
}

Expand Down
3 changes: 2 additions & 1 deletion src/app/qgsmaptoolrotatelabel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
#include <QMouseEvent>

#include "qgisapp.h"
#include "qgsapplication.h"

QgsMapToolRotateLabel::QgsMapToolRotateLabel( QgsMapCanvas* canvas ): QgsMapToolLabel( canvas ), mRotationItem( 0 ), mRotationPreviewBox( 0 )
{
Expand Down Expand Up @@ -76,7 +77,7 @@ void QgsMapToolRotateLabel::canvasPressEvent( QMouseEvent *e )

mRotationItem = new QgsPointRotationItem( mCanvas );
mRotationItem->setOrientation( QgsPointRotationItem::Counterclockwise );
mRotationItem->setSymbol( QgisApp::instance()->getThemePixmap( "mActionRotatePointSymbols.png" ).toImage() );
mRotationItem->setSymbol( QgsApplication::getThemePixmap( "mActionRotatePointSymbols.png" ).toImage() );
mRotationItem->setPointLocation( mRotationPoint );
mRotationItem->setSymbolRotation( mCurrentRotation );
}
Expand Down
5 changes: 3 additions & 2 deletions src/app/qgsmergeattributesdialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@

#include "qgsmergeattributesdialog.h"
#include "qgisapp.h"
#include "qgsapplication.h"
#include "qgsfield.h"
#include "qgsmapcanvas.h"
#include "qgsrubberband.h"
Expand Down Expand Up @@ -46,8 +47,8 @@ QgsMergeAttributesDialog::QgsMergeAttributesDialog( const QgsFeatureList &featur
mTableWidget->setSelectionBehavior( QAbstractItemView::SelectRows );
mTableWidget->setSelectionMode( QAbstractItemView::SingleSelection );

mFromSelectedPushButton->setIcon( QgisApp::getThemeIcon( "mActionFromSelectedFeature.png" ) );
mRemoveFeatureFromSelectionButton->setIcon( QgisApp::getThemeIcon( "mActionRemoveSelectedFeature.png" ) );
mFromSelectedPushButton->setIcon( QgsApplication::getThemeIcon( "mActionFromSelectedFeature.png" ) );
mRemoveFeatureFromSelectionButton->setIcon( QgsApplication::getThemeIcon( "mActionRemoveSelectedFeature.png" ) );

QSettings settings;
restoreGeometry( settings.value( "/Windows/MergeAttributes/geometry" ).toByteArray() );
Expand Down
4 changes: 2 additions & 2 deletions src/app/qgsnewspatialitelayerdialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,8 @@ QgsNewSpatialiteLayerDialog::QgsNewSpatialiteLayerDialog( QWidget *parent, Qt::W
QSettings settings;
restoreGeometry( settings.value( "/Windows/NewSpatiaLiteLayer/geometry" ).toByteArray() );

mAddAttributeButton->setIcon( QgisApp::getThemeIcon( "/mActionNewAttribute.png" ) );
mRemoveAttributeButton->setIcon( QgisApp::getThemeIcon( "/mActionDeleteAttribute.png" ) );
mAddAttributeButton->setIcon( QgsApplication::getThemeIcon( "/mActionNewAttribute.png" ) );
mRemoveAttributeButton->setIcon( QgsApplication::getThemeIcon( "/mActionDeleteAttribute.png" ) );
mTypeBox->addItem( tr( "Text data" ), "text" );
mTypeBox->addItem( tr( "Whole number" ), "integer" );
mTypeBox->addItem( tr( "Decimal number" ), "real" );
Expand Down
20 changes: 10 additions & 10 deletions src/app/qgsrasterlayerproperties.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -105,15 +105,15 @@ QgsRasterLayerProperties::QgsRasterLayerProperties( QgsMapLayer* lyr, QgsMapCanv
leNoDataValue->setValidator( new QDoubleValidator( -std::numeric_limits<double>::max(), std::numeric_limits<double>::max(), 1000, this ) );

// build GUI components
QIcon myPyramidPixmap( QgisApp::getThemeIcon( "/mIconPyramid.png" ) );
QIcon myNoPyramidPixmap( QgisApp::getThemeIcon( "/mIconNoPyramid.png" ) );
QIcon myPyramidPixmap( QgsApplication::getThemeIcon( "/mIconPyramid.png" ) );
QIcon myNoPyramidPixmap( QgsApplication::getThemeIcon( "/mIconNoPyramid.png" ) );

pbnAddValuesManually->setIcon( QgisApp::getThemeIcon( "/mActionNewAttribute.png" ) );
pbnAddValuesFromDisplay->setIcon( QgisApp::getThemeIcon( "/mActionContextHelp.png" ) );
pbnRemoveSelectedRow->setIcon( QgisApp::getThemeIcon( "/mActionDeleteAttribute.png" ) );
pbnDefaultValues->setIcon( QgisApp::getThemeIcon( "/mActionCopySelected.png" ) );
pbnImportTransparentPixelValues->setIcon( QgisApp::getThemeIcon( "/mActionFileOpen.png" ) );
pbnExportTransparentPixelValues->setIcon( QgisApp::getThemeIcon( "/mActionFileSave.png" ) );
pbnAddValuesManually->setIcon( QgsApplication::getThemeIcon( "/mActionNewAttribute.png" ) );
pbnAddValuesFromDisplay->setIcon( QgsApplication::getThemeIcon( "/mActionContextHelp.png" ) );
pbnRemoveSelectedRow->setIcon( QgsApplication::getThemeIcon( "/mActionDeleteAttribute.png" ) );
pbnDefaultValues->setIcon( QgsApplication::getThemeIcon( "/mActionCopySelected.png" ) );
pbnImportTransparentPixelValues->setIcon( QgsApplication::getThemeIcon( "/mActionFileOpen.png" ) );
pbnExportTransparentPixelValues->setIcon( QgsApplication::getThemeIcon( "/mActionFileSave.png" ) );

mSaveAsImageButton->setIcon( QgisApp::getThemeIcon( "/mActionFileSave.png" ) );

Expand Down Expand Up @@ -1043,8 +1043,8 @@ void QgsRasterLayerProperties::on_buttonBuildPyramids_clicked()
lbxPyramidResolutions->clear();
// Need to rebuild list as some or all pyramids may have failed to build
myPyramidList = mRasterLayer->buildPyramidList();
QIcon myPyramidPixmap( QgisApp::getThemeIcon( "/mIconPyramid.png" ) );
QIcon myNoPyramidPixmap( QgisApp::getThemeIcon( "/mIconNoPyramid.png" ) );
QIcon myPyramidPixmap( QgsApplication::getThemeIcon( "/mIconPyramid.png" ) );
QIcon myNoPyramidPixmap( QgsApplication::getThemeIcon( "/mIconNoPyramid.png" ) );

QgsRasterLayer::RasterPyramidList::iterator myRasterPyramidIterator;
for ( myRasterPyramidIterator = myPyramidList.begin();
Expand Down
5 changes: 3 additions & 2 deletions src/app/qgsundowidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
#include "qgslegend.h"

#include "qgisapp.h"
#include "qgsapplication.h"

QgsUndoWidget::QgsUndoWidget( QWidget * parent, QgsMapCanvas * mapCanvas )
: QDockWidget( parent )
Expand Down Expand Up @@ -148,13 +149,13 @@ void QgsUndoWidget::setupUi( QDockWidget *UndoWidget )

undoButton = new QPushButton( dockWidgetContents );
undoButton->setObjectName( QString::fromUtf8( "undoButton" ) );
undoButton->setIcon( QgisApp::instance()->getThemeIcon( "mActionUndo.png" ) );
undoButton->setIcon( QgsApplication::getThemeIcon( "mActionUndo.png" ) );

gridLayout->addWidget( undoButton, 1, 0, 1, 1 );

redoButton = new QPushButton( dockWidgetContents );
redoButton->setObjectName( QString::fromUtf8( "redoButton" ) );
redoButton->setIcon( QgisApp::instance()->getThemeIcon( "mActionRedo.png" ) );
redoButton->setIcon( QgsApplication::getThemeIcon( "mActionRedo.png" ) );

gridLayout->addWidget( redoButton, 1, 1, 1, 1 );

Expand Down
10 changes: 5 additions & 5 deletions src/app/qgsvectorlayerproperties.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -95,10 +95,10 @@ QgsVectorLayerProperties::QgsVectorLayerProperties(
connect( layer, SIGNAL( attributeAdded( int ) ), this, SLOT( attributeAdded( int ) ) );
connect( layer, SIGNAL( attributeDeleted( int ) ), this, SLOT( attributeDeleted( int ) ) );

mAddAttributeButton->setIcon( QgisApp::getThemeIcon( "/mActionNewAttribute.png" ) );
mDeleteAttributeButton->setIcon( QgisApp::getThemeIcon( "/mActionDeleteAttribute.png" ) );
mToggleEditingButton->setIcon( QgisApp::getThemeIcon( "/mActionToggleEditing.png" ) );
mCalculateFieldButton->setIcon( QgisApp::getThemeIcon( "/mActionCalculateField.png" ) );
mAddAttributeButton->setIcon( QgsApplication::getThemeIcon( "/mActionNewAttribute.png" ) );
mDeleteAttributeButton->setIcon( QgsApplication::getThemeIcon( "/mActionDeleteAttribute.png" ) );
mToggleEditingButton->setIcon( QgsApplication::getThemeIcon( "/mActionToggleEditing.png" ) );
mCalculateFieldButton->setIcon( QgsApplication::getThemeIcon( "/mActionCalculateField.png" ) );

connect( btnUseNewSymbology, SIGNAL( clicked() ), this, SLOT( useNewSymbology() ) );

Expand Down Expand Up @@ -179,7 +179,7 @@ QgsVectorLayerProperties::QgsVectorLayerProperties(
for ( ; it != overlayPluginList.constEnd(); ++it )
{
QgsApplyDialog* d = ( *it )->dialog( lyr );
position = tabWidget->insertTab( tabWidget->count(), qobject_cast<QDialog*>( d ), QgisApp::getThemeIcon( "propertyicons/diagram.png" ), tr( "Overlay" ) );
position = tabWidget->insertTab( tabWidget->count(), qobject_cast<QDialog*>( d ), QgsApplication::getThemeIcon( "propertyicons/diagram.png" ), tr( "Overlay" ) );
tabWidget->setCurrentIndex( position ); //ugly, but otherwise the properties dialog is a mess
mOverlayDialogs.push_back( d );
}
Expand Down
39 changes: 39 additions & 0 deletions src/core/qgsapplication.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@
#include <QMessageBox>
#include <QPalette>
#include <QSettings>
#include <QIcon>
#include <QPixmap>

#ifndef Q_WS_WIN
#include <netinet/in.h>
Expand Down Expand Up @@ -329,6 +331,43 @@ QString QgsApplication::iconPath( QString iconFile )
return defaultThemePath() + iconFile;
}

QIcon QgsApplication::getThemeIcon( const QString theName )
{
QString myPreferredPath = activeThemePath() + QDir::separator() + theName;
QString myDefaultPath = defaultThemePath() + QDir::separator() + theName;
if ( QFile::exists( myPreferredPath ) )
{
return QIcon( myPreferredPath );
}
else if ( QFile::exists( myDefaultPath ) )
{
//could still return an empty icon if it
//doesnt exist in the default theme either!
return QIcon( myDefaultPath );
}
else
{
return QIcon();
}
}

// TODO: add some caching mechanism ?
QPixmap QgsApplication::getThemePixmap( const QString theName )
{
QString myPreferredPath = activeThemePath() + QDir::separator() + theName;
QString myDefaultPath = defaultThemePath() + QDir::separator() + theName;
if ( QFile::exists( myPreferredPath ) )
{
return QPixmap( myPreferredPath );
}
else
{
//could still return an empty icon if it
//doesnt exist in the default theme either!
return QPixmap( myDefaultPath );
}
}

/*!
Set the theme path to the specified theme.
*/
Expand Down
10 changes: 10 additions & 0 deletions src/core/qgsapplication.h
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,16 @@ class CORE_EXPORT QgsApplication: public QApplication
//! @note Added in 1.5
static QString iconPath( QString iconFile );

//! Helper to get a theme icon. It will fall back to the
//! default theme if the active theme does not have the required icon.
//! @note Added in 2.0
static QIcon getThemeIcon( const QString theName );

//! Helper to get a theme icon as a pixmap. It will fall back to the
//! default theme if the active theme does not have the required icon.
//! @note Added in 2.0
static QPixmap getThemePixmap( const QString theName );

//! Returns the path to user's style. Added in QGIS 1.4
static const QString userStyleV2Path();

Expand Down
43 changes: 10 additions & 33 deletions src/core/qgsdataitem.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@
#include <QSettings>

#include "qgis.h"
#include "qgsapplication.h"
#include "qgsdataitem.h"

#include "qgsdataprovider.h"
Expand All @@ -46,7 +45,7 @@ const QIcon &QgsLayerItem::iconPoint()
static QIcon icon;

if ( icon.isNull() )
icon = QIcon( getThemePixmap( "/mIconPointLayer.png" ) );
icon = QgsApplication::getThemeIcon( "/mIconPointLayer.png" );

return icon;
}
Expand All @@ -56,7 +55,7 @@ const QIcon &QgsLayerItem::iconLine()
static QIcon icon;

if ( icon.isNull() )
icon = QIcon( getThemePixmap( "/mIconLineLayer.png" ) );
icon = QgsApplication::getThemeIcon( "/mIconLineLayer.png" );

return icon;
}
Expand All @@ -66,7 +65,7 @@ const QIcon &QgsLayerItem::iconPolygon()
static QIcon icon;

if ( icon.isNull() )
icon = QIcon( getThemePixmap( "/mIconPolygonLayer.png" ) );
icon = QgsApplication::getThemeIcon( "/mIconPolygonLayer.png" );

return icon;
}
Expand All @@ -76,7 +75,7 @@ const QIcon &QgsLayerItem::iconTable()
static QIcon icon;

if ( icon.isNull() )
icon = QIcon( getThemePixmap( "/mIconTableLayer.png" ) );
icon = QgsApplication::getThemeIcon( "/mIconTableLayer.png" );

return icon;
}
Expand All @@ -86,7 +85,7 @@ const QIcon &QgsLayerItem::iconRaster()
static QIcon icon;

if ( icon.isNull() )
icon = QIcon( getThemePixmap( "/mIconRaster.png" ) );
icon = QgsApplication::getThemeIcon( "/mIconRaster.png" );

return icon;
}
Expand All @@ -96,7 +95,7 @@ const QIcon &QgsLayerItem::iconDefault()
static QIcon icon;

if ( icon.isNull() )
icon = QIcon( getThemePixmap( "/mIconLayer.png" ) );
icon = QgsApplication::getThemeIcon( "/mIconLayer.png" );

return icon;
}
Expand All @@ -106,7 +105,7 @@ const QIcon &QgsDataCollectionItem::iconDataCollection()
static QIcon icon;

if ( icon.isNull() )
icon = QIcon( getThemePixmap( "/mIconDbSchema.png" ) );
icon = QgsApplication::getThemeIcon( "/mIconDbSchema.png" );

return icon;
}
Expand All @@ -132,7 +131,7 @@ const QIcon &QgsFavouritesItem::iconFavourites()
static QIcon icon;

if ( icon.isNull() )
icon = QIcon( getThemePixmap( "/mIconFavourites.png" ) );
icon = QgsApplication::getThemeIcon( "/mIconFavourites.png" );

return icon;
}
Expand All @@ -142,7 +141,7 @@ const QIcon &QgsZipItem::iconZip()
static QIcon icon;

if ( icon.isNull() )
icon = QIcon( getThemePixmap( "/mIconZip.png" ) );
icon = QgsApplication::getThemeIcon( "/mIconZip.png" );
// icon from http://www.softicons.com/free-icons/application-icons/mega-pack-icons-1-by-nikolay-verin/winzip-folder-icon

return icon;
Expand All @@ -160,28 +159,6 @@ QgsDataItem::~QgsDataItem()
QgsDebugMsg( "mName = " + mName + " mPath = " + mPath );
}

// TODO: This is copy from QgisApp, bad
// TODO: add some caching mechanism ?
QPixmap QgsDataItem::getThemePixmap( const QString theName )
{
QString myPreferredPath = QgsApplication::activeThemePath() + QDir::separator() + theName;
QString myDefaultPath = QgsApplication::defaultThemePath() + QDir::separator() + theName;

// QgsDebugMsg( "theName = " + theName );
// QgsDebugMsg( "myPreferredPath = " + myPreferredPath );
// QgsDebugMsg( "myDefaultPath = " + myDefaultPath );
if ( QFile::exists( myPreferredPath ) )
{
return QPixmap( myPreferredPath );
}
else
{
//could still return an empty icon if it
//doesnt exist in the default theme either!
return QPixmap( myDefaultPath );
}
}

void QgsDataItem::emitBeginInsertItems( QgsDataItem* parent, int first, int last )
{
emit beginInsertItems( parent, first, last );
Expand Down Expand Up @@ -698,7 +675,7 @@ void QgsDirectoryParamWidget::showHideColumn()
QgsErrorItem::QgsErrorItem( QgsDataItem* parent, QString error, QString path )
: QgsDataItem( QgsDataItem::Error, parent, error, path )
{
mIcon = QIcon( getThemePixmap( "/mIconDelete.png" ) );
mIcon = QIcon( QgsApplication::getThemePixmap( "/mIconDelete.png" ) );

mPopulated = true; // no more children
}
Expand Down
3 changes: 1 addition & 2 deletions src/core/qgsdataitem.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
#include <QVector>
#include <QTreeWidget>

#include "qgsapplication.h"
#include "qgsmaplayer.h"
#include "qgscoordinatereferencesystem.h"

Expand Down Expand Up @@ -107,8 +108,6 @@ class CORE_EXPORT QgsDataItem : public QObject

// static methods

static QPixmap getThemePixmap( const QString theName );

// Find child index in vector of items using '==' operator
static int findItem( QVector<QgsDataItem*> items, QgsDataItem * item );

Expand Down
8 changes: 4 additions & 4 deletions src/providers/gdal/qgsgdaldataitems.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,7 @@ QString QgsGdalLayerItem::layerName() const
QgsWCSConnectionItem::QgsWCSConnectionItem( QgsDataItem* parent, QString name, QString path )
: QgsDataCollectionItem( parent, name, path )
{
mIcon = QIcon( getThemePixmap( "mIconWcs.png" ) );
mIcon = QIcon( QgsApplication::getThemePixmap( "mIconWcs.png" ) );
}

QgsWCSConnectionItem::~QgsWCSConnectionItem()
Expand Down Expand Up @@ -245,7 +245,7 @@ QgsWCSLayerItem::QgsWCSLayerItem( QgsDataItem* parent, QString name, QString pat
if ( mChildren.size() == 0 )
{
//mIcon = iconRaster();
mIcon = QIcon( getThemePixmap( "mIconWcs.png" ) );
mIcon = QgsApplication::getThemeIcon( "mIconWcs.png" );
}
mPopulated = true;
}
Expand Down Expand Up @@ -323,7 +323,7 @@ QString QgsWCSLayerItem::createUri()
QgsWCSRootItem::QgsWCSRootItem( QgsDataItem* parent, QString name, QString path )
: QgsDataCollectionItem( parent, name, path )
{
mIcon = QIcon( getThemePixmap( "mIconWcs.png" ) );
mIcon = QgsApplication::getThemeIcon( "mIconWcs.png" );

populate();
}
Expand All @@ -341,7 +341,7 @@ QVector<QgsDataItem*>QgsWCSRootItem::createChildren()
QgsOWSConnection connection( "WCS", connName );
QgsDataItem * conn = new QgsWCSConnectionItem( this, connName, connection.uri().encodedUri() );

conn->setIcon( QIcon( getThemePixmap( "mIconConnect.png" ) ) );
conn->setIcon( QgsApplication::getThemeIcon( "mIconConnect.png" ) );
connections.append( conn );
}
return connections;
Expand Down
6 changes: 3 additions & 3 deletions src/providers/mssql/qgsmssqldataitems.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
QgsMssqlConnectionItem::QgsMssqlConnectionItem( QgsDataItem* parent, QString name, QString path )
: QgsDataCollectionItem( parent, name, path )
{
mIcon = QIcon( getThemePixmap( "mIconConnect.png" ) );
mIcon = QgsApplication::getThemeIcon( "mIconConnect.png" );
QSettings settings;
QString key = "/MSSQL/connections/" + mName;
mService = settings.value( key + "/service" ).toString();
Expand Down Expand Up @@ -438,7 +438,7 @@ QString QgsMssqlLayerItem::createUri()
QgsMssqlSchemaItem::QgsMssqlSchemaItem( QgsDataItem* parent, QString name, QString path )
: QgsDataCollectionItem( parent, name, path )
{
mIcon = QIcon( getThemePixmap( "mIconDbSchema.png" ) );
mIcon = QgsApplication::getThemeIcon( "mIconDbSchema.png" );
}

QVector<QgsDataItem*> QgsMssqlSchemaItem::createChildren()
Expand Down Expand Up @@ -518,7 +518,7 @@ QgsMssqlLayerItem* QgsMssqlSchemaItem::addLayer( QgsMssqlLayerProperty layerProp
QgsMssqlRootItem::QgsMssqlRootItem( QgsDataItem* parent, QString name, QString path )
: QgsDataCollectionItem( parent, name, path )
{
mIcon = QIcon( getThemePixmap( "mIconMssql.png" ) );
mIcon = QgsApplication::getThemeIcon( "mIconMssql.png" );
populate();
}

Expand Down
10 changes: 5 additions & 5 deletions src/providers/mssql/qgsmssqltablemodel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -296,23 +296,23 @@ QIcon QgsMssqlTableModel::iconForWkbType( QGis::WkbType type )
case QGis::WKBPoint25D:
case QGis::WKBMultiPoint:
case QGis::WKBMultiPoint25D:
return QIcon( QgsDataItem::getThemePixmap( "/mIconPointLayer.png" ) );
return QgsApplication::getThemeIcon( "/mIconPointLayer.png" );
case QGis::WKBLineString:
case QGis::WKBLineString25D:
case QGis::WKBMultiLineString:
case QGis::WKBMultiLineString25D:
return QIcon( QgsDataItem::getThemePixmap( "/mIconLineLayer.png" ) );
return QgsApplication::getThemeIcon( "/mIconLineLayer.png" );
case QGis::WKBPolygon:
case QGis::WKBPolygon25D:
case QGis::WKBMultiPolygon:
case QGis::WKBMultiPolygon25D:
return QIcon( QgsDataItem::getThemePixmap( "/mIconPolygonLayer.png" ) );
return QgsApplication::getThemeIcon( "/mIconPolygonLayer.png" );
case QGis::WKBNoGeometry:
return QIcon( QgsDataItem::getThemePixmap( "/mIconTableLayer.png" ) );
return QgsApplication::getThemeIcon( "/mIconTableLayer.png" );
case QGis::WKBUnknown:
break;
}
return QIcon( QgsDataItem::getThemePixmap( "/mIconLayer.png" ) );
return QgsApplication::getThemeIcon( "/mIconLayer.png" );
}

bool QgsMssqlTableModel::setData( const QModelIndex &idx, const QVariant &value, int role )
Expand Down
6 changes: 4 additions & 2 deletions src/providers/ows/qgsowsdataitems.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,15 @@
#include "qgsowsconnection.h"
#include "qgsnewhttpconnection.h"

#include "qgsapplication.h"

#include <QFileInfo>

// ---------------------------------------------------------------------------
QgsOWSConnectionItem::QgsOWSConnectionItem( QgsDataItem* parent, QString name, QString path )
: QgsDataCollectionItem( parent, name, path )
{
mIcon = QIcon( getThemePixmap( "mIconConnect.png" ) );
mIcon = QgsApplication::getThemeIcon( "mIconConnect.png" );
}

QgsOWSConnectionItem::~QgsOWSConnectionItem()
Expand Down Expand Up @@ -134,7 +136,7 @@ void QgsOWSConnectionItem::deleteConnection()
QgsOWSRootItem::QgsOWSRootItem( QgsDataItem* parent, QString name, QString path )
: QgsDataCollectionItem( parent, name, path )
{
mIcon = QIcon( getThemePixmap( "mIconOws.png" ) );
mIcon = QgsApplication::getThemeIcon( "mIconOws.png" );

populate();
}
Expand Down
10 changes: 5 additions & 5 deletions src/providers/postgres/qgspgtablemodel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -285,23 +285,23 @@ QIcon QgsPgTableModel::iconForWkbType( QGis::WkbType type )
case QGis::WKBPoint25D:
case QGis::WKBMultiPoint:
case QGis::WKBMultiPoint25D:
return QIcon( QgsDataItem::getThemePixmap( "/mIconPointLayer.png" ) );
return QgsApplication::getThemeIcon( "/mIconPointLayer.png" );
case QGis::WKBLineString:
case QGis::WKBLineString25D:
case QGis::WKBMultiLineString:
case QGis::WKBMultiLineString25D:
return QIcon( QgsDataItem::getThemePixmap( "/mIconLineLayer.png" ) );
return QgsApplication::getThemeIcon( "/mIconLineLayer.png" );
case QGis::WKBPolygon:
case QGis::WKBPolygon25D:
case QGis::WKBMultiPolygon:
case QGis::WKBMultiPolygon25D:
return QIcon( QgsDataItem::getThemePixmap( "/mIconPolygonLayer.png" ) );
return QgsApplication::getThemeIcon( "/mIconPolygonLayer.png" );
case QGis::WKBNoGeometry:
return QIcon( QgsDataItem::getThemePixmap( "/mIconTableLayer.png" ) );
return QgsApplication::getThemeIcon( "/mIconTableLayer.png" );
case QGis::WKBUnknown:
break;
}
return QIcon( QgsDataItem::getThemePixmap( "/mIconLayer.png" ) );
return QgsApplication::getThemeIcon( "/mIconLayer.png" );
}

bool QgsPgTableModel::setData( const QModelIndex &idx, const QVariant &value, int role )
Expand Down
7 changes: 4 additions & 3 deletions src/providers/postgres/qgspostgresdataitems.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
#include "qgscolumntypethread.h"
#include "qgslogger.h"
#include "qgsdatasourceuri.h"
#include "qgsapplication.h"

#include <QMessageBox>

Expand All @@ -28,7 +29,7 @@ QGISEXTERN bool deleteLayer( const QString& uri, QString& errCause );
QgsPGConnectionItem::QgsPGConnectionItem( QgsDataItem* parent, QString name, QString path )
: QgsDataCollectionItem( parent, name, path )
{
mIcon = QIcon( getThemePixmap( "mIconConnect.png" ) );
mIcon = QgsApplication::getThemeIcon( "mIconConnect.png" );
}

QgsPGConnectionItem::~QgsPGConnectionItem()
Expand Down Expand Up @@ -304,7 +305,7 @@ QString QgsPGLayerItem::createUri()
QgsPGSchemaItem::QgsPGSchemaItem( QgsDataItem* parent, QString name, QString path )
: QgsDataCollectionItem( parent, name, path )
{
mIcon = QIcon( getThemePixmap( "mIconDbSchema.png" ) );
mIcon = QgsApplication::getThemeIcon( "mIconDbSchema.png" );
}

QVector<QgsDataItem*> QgsPGSchemaItem::createChildren()
Expand Down Expand Up @@ -364,7 +365,7 @@ void QgsPGSchemaItem::addLayer( QgsPostgresLayerProperty layerProperty )
QgsPGRootItem::QgsPGRootItem( QgsDataItem* parent, QString name, QString path )
: QgsDataCollectionItem( parent, name, path )
{
mIcon = QIcon( getThemePixmap( "mIconPostgis.png" ) );
mIcon = QgsApplication::getThemeIcon( "mIconPostgis.png" );
populate();
}

Expand Down
2 changes: 1 addition & 1 deletion src/providers/spatialite/qgsspatialitedataitems.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -244,7 +244,7 @@ bool QgsSLConnectionItem::handleDrop( const QMimeData * data, Qt::DropAction )
QgsSLRootItem::QgsSLRootItem( QgsDataItem* parent, QString name, QString path )
: QgsDataCollectionItem( parent, name, path )
{
mIcon = QIcon( getThemePixmap( "mIconSpatialite.png" ) );
mIcon = QgsApplication::getThemeIcon( "mIconSpatialite.png" );
populate();
}

Expand Down
8 changes: 4 additions & 4 deletions src/providers/wfs/qgswfsdataitems.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ QgsWFSLayerItem::QgsWFSLayerItem( QgsDataItem* parent, QString name, QgsDataSour
mUri = QgsWFSCapabilities( uri.encodedUri() ).uriGetFeature( featureType );
mPopulated = true;
//mIcon = QIcon( getThemePixmap( "mIconVectorLayer.png" ) );
mIcon = QIcon( getThemePixmap( "mIconWfs.png" ) );
mIcon = QgsApplication::getThemeIcon( "mIconWfs.png" );
}

QgsWFSLayerItem::~QgsWFSLayerItem()
Expand All @@ -42,7 +42,7 @@ QgsWFSLayerItem::~QgsWFSLayerItem()
QgsWFSConnectionItem::QgsWFSConnectionItem( QgsDataItem* parent, QString name, QString path )
: QgsDataCollectionItem( parent, name, path ), mName( name ), mCapabilities( NULL )
{
mIcon = QIcon( getThemePixmap( "mIconWfs.png" ) );
mIcon = QgsApplication::getThemeIcon( "mIconWfs.png" );
}

QgsWFSConnectionItem::~QgsWFSConnectionItem()
Expand Down Expand Up @@ -138,7 +138,7 @@ void QgsWFSConnectionItem::deleteConnection()
QgsWFSRootItem::QgsWFSRootItem( QgsDataItem* parent, QString name, QString path )
: QgsDataCollectionItem( parent, name, path )
{
mIcon = QIcon( getThemePixmap( "mIconWfs.png" ) );
mIcon = QgsApplication::getThemeIcon( "mIconWfs.png" );

populate();
}
Expand All @@ -155,7 +155,7 @@ QVector<QgsDataItem*> QgsWFSRootItem::createChildren()
{
QgsOWSConnection connection( "WF", connName );
QgsDataItem * conn = new QgsWFSConnectionItem( this, connName, connection.uri().encodedUri() );
conn->setIcon( QIcon( getThemePixmap( "mIconConnect.png" ) ) );
conn->setIcon( QgsApplication::getThemeIcon( "mIconConnect.png" ) );
connections.append( conn );
}
return connections;
Expand Down
10 changes: 6 additions & 4 deletions src/providers/wms/qgswmsdataitems.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,13 @@

#include "qgstilescalewidget.h"

#include "qgsapplication.h"

// ---------------------------------------------------------------------------
QgsWMSConnectionItem::QgsWMSConnectionItem( QgsDataItem* parent, QString name, QString path )
: QgsDataCollectionItem( parent, name, path )
{
mIcon = QIcon( getThemePixmap( "mIconWms.png" ) );
mIcon = QgsApplication::getThemeIcon( "mIconWms.png" );
}

QgsWMSConnectionItem::~QgsWMSConnectionItem()
Expand Down Expand Up @@ -163,7 +165,7 @@ QgsWMSLayerItem::QgsWMSLayerItem( QgsDataItem* parent, QString name, QString pat
if ( mChildren.size() == 0 )
{
//mIcon = iconRaster();
mIcon = QIcon( getThemePixmap( "mIconWms.png" ) );
mIcon = QgsApplication::getThemeIcon( "mIconWms.png" );
}
mPopulated = true;
}
Expand Down Expand Up @@ -221,7 +223,7 @@ QString QgsWMSLayerItem::createUri()
QgsWMSRootItem::QgsWMSRootItem( QgsDataItem* parent, QString name, QString path )
: QgsDataCollectionItem( parent, name, path )
{
mIcon = QIcon( getThemePixmap( "mIconWms.png" ) );
mIcon = QgsApplication::getThemeIcon( "mIconWms.png" );

populate();
}
Expand All @@ -240,7 +242,7 @@ QVector<QgsDataItem*>QgsWMSRootItem::createChildren()
QgsWMSConnection connection( connName );
QgsDataItem * conn = new QgsWMSConnectionItem( this, connName, connection.uri().encodedUri() );

conn->setIcon( QIcon( getThemePixmap( "mIconConnect.png" ) ) );
conn->setIcon( QgsApplication::getThemeIcon( "mIconConnect.png" ) );
connections.append( conn );
}
return connections;
Expand Down