From ddd934fe0a45ed0b887e7fc074e69324c6a84cf8 Mon Sep 17 00:00:00 2001 From: timlinux Date: Mon, 28 Jul 2008 01:24:27 +0000 Subject: [PATCH] Theme related fixes: - implemented 'fall back' support so that if a theme is missing icons, the default theme icons will be used instead. - use a static function in qgisapp to get theme icons and pixmaps - updated all icon fetching code to use the new methods above - updated qgsapplication so that it differentiates between active and default themes - fixed a bug in qgsoptions that prevented themes being changed in some cases. This is a part fix for #1054 - still need to do some work to make GRASS theming work properly git-svn-id: http://svn.osgeo.org/qgis/trunk@8937 c8812cc2-4d05-0410-92ff-de0c093fc19c --- python/core/qgsapplication.sip | 11 +- src/app/composer/qgscomposer.cpp | 34 +- src/app/legend/qgslegend.cpp | 31 +- src/app/legend/qgslegend.h | 25 +- src/app/legend/qgslegendgroup.cpp | 7 +- src/app/legend/qgslegendlayer.cpp | 68 +- src/app/legend/qgslegendlayerfile.cpp | 12 +- src/app/legend/qgslegendpropertygroup.cpp | 3 +- src/app/legend/qgslegendsymbologygroup.cpp | 3 +- src/app/qgisapp.cpp | 288 +- src/app/qgisapp.h | 11 +- src/app/qgsattributetabledisplay.cpp | 17 +- src/app/qgscustomprojectiondialog.cpp | 24 +- src/app/qgsdbtablemodel.cpp | 20 +- src/app/qgsdbtablemodel.h | 3 +- src/app/qgsgeomtypedialog.cpp | 6 +- src/app/qgsidentifyresults.cpp | 4 +- src/app/qgsrasterlayerproperties.cpp | 27 +- src/core/qgsapplication.cpp | 19 +- src/core/qgsapplication.h | 11 +- src/core/raster/qgsrasterlayer.cpp | 2 +- src/plugins/georeferencer/qgspointdialog.cpp | 30 +- src/plugins/georeferencer/qgspointdialog.h | 2 + src/plugins/gps_importer/qgsgpsplugin.cpp | 2 +- src/plugins/grass/qgsgrassbrowser.cpp | 13 +- src/plugins/grass/qgsgrassbrowser.h | 2 + src/plugins/grass/qgsgrassedit.cpp | 26 +- src/plugins/grass/qgsgrassmapcalc.cpp | 20 +- src/plugins/grass/qgsgrassmodel.cpp | 12 +- src/plugins/grass/qgsgrassmodule.cpp | 4 +- src/plugins/grass/qgsgrassnewmapsetbase.ui | 3315 +++++++++++------- src/plugins/grass/qgsgrassplugin.cpp | 18 + src/plugins/grass/qgsgrassplugin.h | 3 + tests/src/core/testqgsapplication.cpp | 2 +- 34 files changed, 2532 insertions(+), 1543 deletions(-) diff --git a/python/core/qgsapplication.sip b/python/core/qgsapplication.sip index a8f10e19bc8..e9ae0dcb86e 100644 --- a/python/core/qgsapplication.sip +++ b/python/core/qgsapplication.sip @@ -82,8 +82,8 @@ static void qtgui_UpdatePyArgv(PyObject *argvlist, int argc, char **argv) virtual ~QgsApplication(); - //! Set the theme path to the specified theme. - static void selectTheme(const QString theThemeName); + //! Set the active theme path to the specified theme. + static void setTheme(const QString theThemeName); //! Returns the path to the authors file. static const QString authorsFilePath(); @@ -130,8 +130,11 @@ static void qtgui_UpdatePyArgv(PyObject *argvlist, int argc, char **argv) //! Returns the common root path of all application data directories. static const QString pkgDataPath(); - //! Returns the path to the current theme directory. - static const QString themePath(); + //! Returns the path to the currently active theme directory. + static const QString activeThemePath(); + + //! Returns the path to the default theme directory. + static const QString defaultThemePath(); //! Alters prefix path - used by 3rd party apps static void setPrefixPath(const QString thePrefixPath, bool useDefaultPaths = FALSE); diff --git a/src/app/composer/qgscomposer.cpp b/src/app/composer/qgscomposer.cpp index b8de331870f..74995d428d1 100644 --- a/src/app/composer/qgscomposer.cpp +++ b/src/app/composer/qgscomposer.cpp @@ -109,26 +109,22 @@ QgsComposer::~QgsComposer() void QgsComposer::setupTheme() { - //calculate the active theme path - QString myThemePath= QgsApplication::themePath(); - - //now set all the icons - mActionOpenTemplate->setIcon(QIcon(QPixmap(myThemePath + "/mActionFileOpen.png"))); - mActionSaveTemplateAs->setIcon(QIcon(QPixmap(myThemePath + "/mActionFileSaveAs.png"))); - mActionExportAsImage->setIcon(QIcon(QPixmap(myThemePath + "/mActionExportMapServer.png"))); - mActionExportAsSVG->setIcon(QIcon(QPixmap(myThemePath + "/mActionSaveAsSVG.png"))); - mActionPrint->setIcon(QIcon(QPixmap(myThemePath + "/mActionFilePrint.png"))); - mActionZoomAll->setIcon(QIcon(QPixmap(myThemePath + "/mActionZoomFullExtent.png"))); - mActionZoomIn->setIcon(QIcon(QPixmap(myThemePath + "/mActionZoomIn.png"))); - mActionZoomOut->setIcon(QIcon(QPixmap(myThemePath + "/mActionZoomOut.png"))); - mActionRefreshView->setIcon(QIcon(QPixmap(myThemePath + "/mActionDraw.png"))); - mActionAddImage->setIcon(QIcon(QPixmap(myThemePath + "/mActionSaveMapAsImage.png"))); - mActionAddNewMap->setIcon(QIcon(QPixmap(myThemePath + "/mActionAddRasterLayer.png"))); - mActionAddNewLabel->setIcon(QIcon(QPixmap(myThemePath + "/mActionLabel.png"))); - mActionAddNewVectLegend->setIcon(QIcon(QPixmap(myThemePath + "/mActionAddLegend.png"))); - mActionAddNewScalebar->setIcon(QIcon(QPixmap(myThemePath + "/mActionScaleBar.png"))); - mActionSelectMoveItem->setIcon(QIcon(QPixmap(myThemePath + "/mActionPan.png"))); + mActionOpenTemplate->setIcon(QgisApp::getThemeIcon("/mActionFileOpen.png")); + mActionSaveTemplateAs->setIcon(QgisApp::getThemeIcon("/mActionFileSaveAs.png")); + mActionExportAsImage->setIcon(QgisApp::getThemeIcon("/mActionExportMapServer.png")); + mActionExportAsSVG->setIcon(QgisApp::getThemeIcon("/mActionSaveAsSVG.png")); + mActionPrint->setIcon(QgisApp::getThemeIcon("/mActionFilePrint.png")); + mActionZoomAll->setIcon(QgisApp::getThemeIcon("/mActionZoomFullExtent.png")); + mActionZoomIn->setIcon(QgisApp::getThemeIcon("/mActionZoomIn.png")); + mActionZoomOut->setIcon(QgisApp::getThemeIcon("/mActionZoomOut.png")); + mActionRefreshView->setIcon(QgisApp::getThemeIcon("/mActionDraw.png")); + mActionAddImage->setIcon(QgisApp::getThemeIcon("/mActionSaveMapAsImage.png")); + mActionAddNewMap->setIcon(QgisApp::getThemeIcon("/mActionAddRasterLayer.png")); + mActionAddNewLabel->setIcon(QgisApp::getThemeIcon("/mActionLabel.png")); + mActionAddNewVectLegend->setIcon(QgisApp::getThemeIcon("/mActionAddLegend.png")); + mActionAddNewScalebar->setIcon(QgisApp::getThemeIcon("/mActionScaleBar.png")); + mActionSelectMoveItem->setIcon(QgisApp::getThemeIcon("/mActionPan.png")); } void QgsComposer::open ( void ) diff --git a/src/app/legend/qgslegend.cpp b/src/app/legend/qgslegend.cpp index 7fe14d24613..f7bec41007f 100755 --- a/src/app/legend/qgslegend.cpp +++ b/src/app/legend/qgslegend.cpp @@ -19,6 +19,7 @@ /* $Id$ */ #include "qgsapplication.h" +#include "qgisapp.h" #include "qgslogger.h" #include "qgslegend.h" #include "qgslegendgroup.h" @@ -87,8 +88,9 @@ QgsLegend::QgsLegend(QWidget * parent, const char *name) setColumnCount(1); header()->setHidden(1); setRootIsDecorated(true); - initPixmaps(); + + } @@ -400,8 +402,6 @@ void QgsLegend::handleRightClickEvent(QTreeWidgetItem* item, const QPoint& posit QMenu theMenu; - QString iconsPath = QgsApplication::themePath(); - QgsLegendItem* li = dynamic_cast(item); if (li) { @@ -422,7 +422,7 @@ void QgsLegend::handleRightClickEvent(QTreeWidgetItem* item, const QPoint& posit } else if(li->type() == QgsLegendItem::LEGEND_GROUP) { - theMenu.addAction(QPixmap(iconsPath+QString("/mActionRemove.png")), + theMenu.addAction(QgisApp::getThemeIcon("/mActionRemove.png"), tr("&Remove"), this, SLOT(legendGroupRemove())); } @@ -433,9 +433,9 @@ void QgsLegend::handleRightClickEvent(QTreeWidgetItem* item, const QPoint& posit } - theMenu.addAction(QIcon(QPixmap(iconsPath+QString("/folder_new.png"))), tr("&Add group"), this, SLOT(addGroup())); - theMenu.addAction(QIcon(QPixmap(iconsPath+QString("/mActionExpandTree.png"))), tr("&Expand all"), this, SLOT(expandAll())); - theMenu.addAction(QIcon(QPixmap(iconsPath+QString("/mActionCollapseTree.png"))), tr("&Collapse all"), this, SLOT(collapseAll())); + theMenu.addAction(QgisApp::getThemeIcon("/folder_new.png"), tr("&Add group"), this, SLOT(addGroup())); + theMenu.addAction(QgisApp::getThemeIcon("/mActionExpandTree.png"), tr("&Expand all"), this, SLOT(expandAll())); + theMenu.addAction(QgisApp::getThemeIcon("/mActionCollapseTree.png"), tr("&Collapse all"), this, SLOT(collapseAll())); QAction* showFileGroupsAction = theMenu.addAction(tr("Show file groups"), this, SLOT(showLegendLayerFileGroups())); showFileGroupsAction->setCheckable(true); @@ -445,6 +445,14 @@ void QgsLegend::handleRightClickEvent(QTreeWidgetItem* item, const QPoint& posit theMenu.exec(position); } +void QgsLegend::initPixmaps() +{ + mPixmaps.mOriginalPixmap = QgisApp::getThemePixmap("/mActionFileSmall.png"); + mPixmaps.mInOverviewPixmap = QgisApp::getThemePixmap("/mActionInOverview.png"); + mPixmaps.mEditablePixmap = QgisApp::getThemePixmap("/mIconEditable.png"); + mPixmaps.mProjectionErrorPixmap = QgisApp::getThemePixmap("/mIconProjectionProblem.png"); +} + int QgsLegend::getItemPos(QTreeWidgetItem* item) { int counter = 1; @@ -1828,15 +1836,6 @@ void QgsLegend::legendLayerAttributeTable() tr("To open an attribute table, you must select a vector layer in the legend")); } -void QgsLegend::initPixmaps() -{ - QString myThemePath = QgsApplication::themePath(); - mPixmaps.mOriginalPixmap.load(myThemePath + "/mActionFileSmall.png"); - mPixmaps.mInOverviewPixmap.load(myThemePath + "/mActionInOverview.png"); - mPixmaps.mEditablePixmap.load(myThemePath + "/mIconEditable.png"); - mPixmaps.mProjectionErrorPixmap.load(myThemePath + "/mIconProjectionProblem.png"); -} - void QgsLegend::readProject(const QDomDocument & doc) { QDomNodeList nodes = doc.elementsByTagName("legend"); diff --git a/src/app/legend/qgslegend.h b/src/app/legend/qgslegend.h index 5ab881a41a6..7c4ce132f58 100755 --- a/src/app/legend/qgslegend.h +++ b/src/app/legend/qgslegend.h @@ -177,7 +177,8 @@ class QgsLegend : public QTreeWidget /**Returns structure with legend pixmaps*/ QgsLegendPixmaps& pixmaps() { return mPixmaps; } - + + void updateCheckStates(QTreeWidgetItem* item, Qt::CheckState state) {mStateOfCheckBoxes[item] = state;} public slots: @@ -400,21 +401,23 @@ private: /** structure which holds pixmap which are used in legend */ class QgsLegendPixmaps { - public: - //! Pixmap which is shown by default - QPixmap mOriginalPixmap; - - //! Pixmap to show a bogus vertex was encoutnered in this layer (applies to vector layers only) - QPixmap mProjectionErrorPixmap; + public: + //! Pixmap which is shown by default + QPixmap mOriginalPixmap; - //! Pixmap to show if this layer is represented in overview or now - QPixmap mInOverviewPixmap; + //! Pixmap to show a bogus vertex was encoutnered in this layer (applies to vector layers only) + QPixmap mProjectionErrorPixmap; - //! Pixmap to show it this layer has currently editing turned on - QPixmap mEditablePixmap; + //! Pixmap to show if this layer is represented in overview or now + QPixmap mInOverviewPixmap; + + //! Pixmap to show it this layer has currently editing turned on + QPixmap mEditablePixmap; } mPixmaps; + + signals: void zOrderChanged(QgsLegend * lv); diff --git a/src/app/legend/qgslegendgroup.cpp b/src/app/legend/qgslegendgroup.cpp index d18c58afda4..f738878fe7f 100644 --- a/src/app/legend/qgslegendgroup.cpp +++ b/src/app/legend/qgslegendgroup.cpp @@ -18,6 +18,7 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include "qgsapplication.h" +#include "qgisapp.h" #include "qgslegendgroup.h" #include "qgslegendlayer.h" #include "qgslegendlayerfile.h" @@ -30,7 +31,7 @@ QgsLegendGroup::QgsLegendGroup(QTreeWidgetItem * theItem ,QString theName) mType=LEGEND_GROUP; setFlags(Qt::ItemIsEditable | Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsSelectable); setCheckState (0, Qt::Checked); - QIcon myIcon(QgsApplication::themePath()+"/mActionFolder.png"); + QIcon myIcon = QgisApp::getThemeIcon("/mActionFolder.png"); setIcon(0, myIcon); } QgsLegendGroup::QgsLegendGroup(QTreeWidget* theListView, QString theString) @@ -39,7 +40,7 @@ QgsLegendGroup::QgsLegendGroup(QTreeWidget* theListView, QString theString) mType=LEGEND_GROUP; setFlags(Qt::ItemIsEditable | Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsSelectable); setCheckState (0, Qt::Checked); - QIcon myIcon(QgsApplication::themePath()+"/mActionFolder.png"); + QIcon myIcon = QgisApp::getThemeIcon("/mActionFolder.png"); setIcon(0, myIcon); } @@ -48,7 +49,7 @@ QgsLegendGroup::QgsLegendGroup(QString name): QgsLegendItem() mType=LEGEND_GROUP; setFlags(Qt::ItemIsEditable | Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsSelectable); setCheckState (0, Qt::Checked); - QIcon myIcon(QgsApplication::themePath()+"/mActionFolder.png"); + QIcon myIcon = QgisApp::getThemeIcon(+"/mActionFolder.png"); setText(0, name); setIcon(0, myIcon); } diff --git a/src/app/legend/qgslegendlayer.cpp b/src/app/legend/qgslegendlayer.cpp index 50c9a05e3ec..f1073be82fd 100644 --- a/src/app/legend/qgslegendlayer.cpp +++ b/src/app/legend/qgslegendlayer.cpp @@ -19,6 +19,7 @@ ***************************************************************************/ #include "qgsapplication.h" +#include "qgisapp.h" #include "qgslegend.h" #include "qgslegendlayer.h" #include "qgslegendlayerfile.h" @@ -404,29 +405,28 @@ void QgsLegendLayer::updateIcon() QgsLegendLayerFile* theFile = firstLayerFile(); if(mapLayers().size() == 1) + { + //overview + if(theFile->isInOverview()) { - - //overview - if(theFile->isInOverview()) - { - // Overlay the overview icon on the default icon - QPixmap myPixmap(QgsApplication::themePath()+"mIconOverview.png"); - QPainter p(&newIcon); - p.drawPixmap(0,0,myPixmap); - p.end(); - } - - //editable - if(theLayer->isEditable()) - { - // Overlay the editable icon on the default icon - QPixmap myPixmap(QgsApplication::themePath()+"mIconEditable.png"); - QPainter p(&newIcon); - p.drawPixmap(0,0,myPixmap); - p.end(); - } + // Overlay the overview icon on the default icon + QPixmap myPixmap = QgisApp::getThemePixmap(+"mIconOverview.png"); + QPainter p(&newIcon); + p.drawPixmap(0,0,myPixmap); + p.end(); } + //editable + if(theLayer->isEditable()) + { + // Overlay the editable icon on the default icon + QPixmap myPixmap = QgisApp::getThemePixmap(+"mIconEditable.png"); + QPainter p(&newIcon); + p.drawPixmap(0,0,myPixmap); + p.end(); + } + } + QIcon theIcon(newIcon); setIcon(0, theIcon); } @@ -436,48 +436,34 @@ QPixmap QgsLegendLayer::getOriginalPixmap() const QgsMapLayer* firstLayer = firstMapLayer(); if(firstLayer) { - QString myThemePath = QgsApplication::themePath(); - QString myPath; - if (firstLayer->type() == QgsMapLayer::VECTOR) { QgsVectorLayer* vlayer = dynamic_cast(firstLayer); switch(vlayer->vectorType()) { case QGis::Point: - myPath = myThemePath+"/mIconPointLayer.png"; + return QgisApp::getThemePixmap("/mIconPointLayer.png"); break; case QGis::Line: - myPath = myThemePath+"/mIconLineLayer.png"; + return QgisApp::getThemePixmap("/mIconLineLayer.png"); break; case QGis::Polygon: - myPath = myThemePath+"/mIconPolygonLayer.png"; + return QgisApp::getThemePixmap("/mIconPolygonLayer.png"); break; default: - myPath = myThemePath+"/mIconLayer.png"; + return QgisApp::getThemePixmap("/mIconLayer.png"); } } else // RASTER { - myPath = myThemePath+"/mIconLayer.png"; - } - - - QFileInfo file(myPath); - if(file.exists()) - { - return QPixmap(file.absoluteFilePath()); + return QgisApp::getThemePixmap("/mIconLayer.png"); } } - - QPixmap emptyPixmap; - return emptyPixmap; } void QgsLegendLayer::addToPopupMenu(QMenu& theMenu, QAction* toggleEditingAction) { - QString iconsPath = QgsApplication::themePath(); std::list files = legendLayerFiles(); QgsMapLayer* firstLayer = NULL; if (files.size() > 0) @@ -486,7 +472,7 @@ void QgsLegendLayer::addToPopupMenu(QMenu& theMenu, QAction* toggleEditingAction } // zoom to layer extent - theMenu.addAction(QIcon(iconsPath+QString("/mActionZoomToLayer.png")), + theMenu.addAction(QgisApp::getThemeIcon("/mActionZoomToLayer.png"), tr("&Zoom to layer extent"), legend(), SLOT(legendLayerZoom())); if (firstLayer && firstLayer->type() == QgsMapLayer::RASTER) { @@ -499,7 +485,7 @@ void QgsLegendLayer::addToPopupMenu(QMenu& theMenu, QAction* toggleEditingAction showInOverviewAction->setChecked(isInOverview()); // remove from canvas - theMenu.addAction(QIcon(QPixmap(iconsPath+QString("/mActionRemove.png"))), + theMenu.addAction(QgisApp::getThemeIcon("/mActionRemove.png"), tr("&Remove"), legend(), SLOT(legendLayerRemove())); theMenu.addSeparator(); diff --git a/src/app/legend/qgslegendlayerfile.cpp b/src/app/legend/qgslegendlayerfile.cpp index 792ea5f7a40..15e26fac3d1 100644 --- a/src/app/legend/qgslegendlayerfile.cpp +++ b/src/app/legend/qgslegendlayerfile.cpp @@ -19,6 +19,7 @@ ***************************************************************************/ #include "qgsapplication.h" +#include "qgisapp.h" #include "qgslegend.h" #include "qgslegendlayer.h" #include "qgslegendlayerfile.h" @@ -104,7 +105,7 @@ QgsLegendItem::DRAG_ACTION QgsLegendLayerFile::accept(const QgsLegendItem* li) c QPixmap QgsLegendLayerFile::getOriginalPixmap() const { - QPixmap myPixmap(QgsApplication::themePath()+"mActionFileSmall.png"); + QPixmap myPixmap = QgisApp::getThemePixmap("mActionFileSmall.png"); return myPixmap; } @@ -148,7 +149,7 @@ void QgsLegendLayerFile::setIconAppearance(bool inOverview, if (inOverview) { // Overlay the overview icon on the default icon - QPixmap myPixmap(QgsApplication::themePath()+"mIconOverview.png"); + QPixmap myPixmap = QgisApp::getThemePixmap("mIconOverview.png"); QPainter p(&newIcon); p.drawPixmap(0,0,myPixmap); p.end(); @@ -157,7 +158,7 @@ void QgsLegendLayerFile::setIconAppearance(bool inOverview, if (editable) { // Overlay the editable icon on the default icon - QPixmap myPixmap(QgsApplication::themePath()+"mIconEditable.png"); + QPixmap myPixmap = QgisApp::getThemePixmap("mIconEditable.png"); QPainter p(&newIcon); p.drawPixmap(0,0,myPixmap); p.end(); @@ -494,10 +495,9 @@ void QgsLegendLayerFile::layerNameChanged() void QgsLegendLayerFile::addToPopupMenu(QMenu& theMenu, QAction* toggleEditingAction) { QgsMapLayer* lyr = layer(); - QString iconsPath = QgsApplication::themePath(); // zoom to layer extent - theMenu.addAction(QIcon(iconsPath+QString("/mActionZoomToLayer.png")), + theMenu.addAction(QgisApp::getThemeIcon("/mActionZoomToLayer.png"), tr("&Zoom to layer extent"), legend(), SLOT(legendLayerZoom())); // show in overview @@ -508,7 +508,7 @@ void QgsLegendLayerFile::addToPopupMenu(QMenu& theMenu, QAction* toggleEditingAc showInOverviewAction->blockSignals(false); // remove from canvas - theMenu.addAction(QIcon(iconsPath+QString("/mActionRemove.png")), + theMenu.addAction(QgisApp::getThemeIcon("/mActionRemove.png"), tr("&Remove"), legend(), SLOT(legendLayerRemove())); theMenu.addSeparator(); diff --git a/src/app/legend/qgslegendpropertygroup.cpp b/src/app/legend/qgslegendpropertygroup.cpp index 433a2336eeb..3515eb9533a 100644 --- a/src/app/legend/qgslegendpropertygroup.cpp +++ b/src/app/legend/qgslegendpropertygroup.cpp @@ -18,6 +18,7 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include "qgsapplication.h" +#include "qgisapp.h" #include "qgslegendpropertygroup.h" #include #include @@ -26,7 +27,7 @@ QgsLegendPropertyGroup::QgsLegendPropertyGroup(QTreeWidgetItem* theLegendItem, Q : QgsLegendItem(theLegendItem,theString ) { mType=LEGEND_PROPERTY_GROUP; - QIcon myIcon(QgsApplication::themePath()+"/mIconProperties.png"); + QIcon myIcon = QgisApp::getThemeIcon("/mIconProperties.png"); setText(0, theString); setIcon(0,myIcon); } diff --git a/src/app/legend/qgslegendsymbologygroup.cpp b/src/app/legend/qgslegendsymbologygroup.cpp index 367ba5339b7..0e8f6ad3e95 100644 --- a/src/app/legend/qgslegendsymbologygroup.cpp +++ b/src/app/legend/qgslegendsymbologygroup.cpp @@ -18,6 +18,7 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include "qgsapplication.h" +#include "qgisapp.h" #include "qgslegendlayerfile.h" #include "qgslegendlayerfilegroup.h" #include "qgslegendsymbologygroup.h" @@ -29,7 +30,7 @@ QgsLegendSymbologyGroup::QgsLegendSymbologyGroup(QTreeWidgetItem * theItem, QStr : QgsLegendItem( theItem, theString) { mType = LEGEND_SYMBOL_GROUP; - QIcon myIcon(QgsApplication::themePath()+"/mIconSymbology.png"); + QIcon myIcon = QgisApp::getThemeIcon("/mIconSymbology.png"); setText(0, theString); setIcon(0,myIcon); } diff --git a/src/app/qgisapp.cpp b/src/app/qgisapp.cpp index ca8368e9ac1..067bdb889df 100644 --- a/src/app/qgisapp.cpp +++ b/src/app/qgisapp.cpp @@ -318,7 +318,6 @@ static void customSrsValidation_(QgsSpatialRefSys* srs) mSplash->showMessage(tr("Reading settings"), Qt::AlignHCenter | Qt::AlignBottom); qApp->processEvents(); - readSettings(); mSplash->showMessage(tr("Setting up the GUI"), Qt::AlignHCenter | Qt::AlignBottom); qApp->processEvents(); @@ -327,13 +326,13 @@ static void customSrsValidation_(QgsSpatialRefSys* srs) createMenus(); createToolBars(); createStatusBar(); - setTheme(mThemeName); updateRecentProjectPaths(); createCanvas(); createLegend(); createOverview(); createMapTips(); setupProxy(); + readSettings(); mComposer = new QgsComposer(this); // Map composer mInternalClipboard = new QgsClipboard; // create clipboard @@ -520,11 +519,9 @@ void QgisApp::dropEvent(QDropEvent *event) // restore any application settings stored in QSettings void QgisApp::readSettings() { - QSettings settings; // get the users theme preference from the settings - mThemeName = settings.value("/Themes","default").toString(); - + setTheme(settings.value("/Themes","default").toString()); // Add the recently accessed project file paths to the File menu mRecentProjectPaths = settings.value("/UI/recentProjectsList").toStringList(); @@ -533,7 +530,8 @@ void QgisApp::readSettings() bool splitterRedraw = settings.value("/qgis/splitterRedraw", true).toBool(); canvasLegendSplit->setOpaqueResize(splitterRedraw); legendOverviewSplit->setOpaqueResize(splitterRedraw); -*/} +*/ +} ////////////////////////////////////////////////////////////////////// @@ -542,66 +540,65 @@ void QgisApp::readSettings() void QgisApp::createActions() { - QString myIconPath = QgsApplication::themePath(); // // File Menu Related Items // - mActionFileNew= new QAction(QIcon(myIconPath+"/mActionFileNew.png"), tr("&New Project"), this); + mActionFileNew= new QAction(getThemeIcon("/mActionFileNew.png"), tr("&New Project"), this); mActionFileNew->setShortcut(tr("Ctrl+N","New Project")); mActionFileNew->setStatusTip(tr("New Project")); connect(mActionFileNew, SIGNAL(triggered()), this, SLOT(fileNew())); // - mActionFileOpen= new QAction(QIcon(myIconPath+"/mActionFileOpen.png"), tr("&Open Project..."), this); + mActionFileOpen= new QAction(getThemeIcon("/mActionFileOpen.png"), tr("&Open Project..."), this); mActionFileOpen->setShortcut(tr("Ctrl+O","Open a Project")); mActionFileOpen->setStatusTip(tr("Open a Project")); connect(mActionFileOpen, SIGNAL(triggered()), this, SLOT(fileOpen())); // - mActionFileSave= new QAction(QIcon(myIconPath+"/mActionFileSave.png"), tr("&Save Project"), this); + mActionFileSave= new QAction(getThemeIcon("/mActionFileSave.png"), tr("&Save Project"), this); mActionFileSave->setShortcut(tr("Ctrl+S","Save Project")); mActionFileSave->setStatusTip(tr("Save Project")); connect(mActionFileSave, SIGNAL(triggered()), this, SLOT(fileSave())); // - mActionFileSaveAs= new QAction(QIcon(myIconPath+"/mActionFileSaveAs.png"), tr("Save Project &As..."), this); + mActionFileSaveAs= new QAction(getThemeIcon("/mActionFileSaveAs.png"), tr("Save Project &As..."), this); mActionFileSaveAs->setShortcut(tr("Ctrl+A","Save Project under a new name")); mActionFileSaveAs->setStatusTip(tr("Save Project under a new name")); connect(mActionFileSaveAs, SIGNAL(triggered()), this, SLOT(fileSaveAs())); // - mActionFilePrint= new QAction(QIcon(myIconPath+"/mActionFilePrint.png"), tr("&Print..."), this); + mActionFilePrint= new QAction(getThemeIcon("/mActionFilePrint.png"), tr("&Print..."), this); mActionFilePrint->setShortcut(tr("Ctrl+P","Print")); mActionFilePrint->setStatusTip(tr("Print")); connect(mActionFilePrint, SIGNAL(triggered()), this, SLOT(filePrint())); // - mActionSaveMapAsImage= new QAction(QIcon(myIconPath+"/mActionSaveMapAsImage.png"), tr("Save as Image..."), this); + mActionSaveMapAsImage= new QAction(getThemeIcon("/mActionSaveMapAsImage.png"), tr("Save as Image..."), this); mActionSaveMapAsImage->setShortcut(tr("Ctrl+I","Save map as image")); mActionSaveMapAsImage->setStatusTip(tr("Save map as image")); connect(mActionSaveMapAsImage, SIGNAL(triggered()), this, SLOT(saveMapAsImage())); // // TODO: Remove the mActionExportMapServer related code once the mapserver export plugin // is complete and tested. - /* mActionExportMapServer= new QAction(QIcon(myIconPath+"/mActionExportMapServer.png"), tr("Export to MapServer Map..."), this); + /* mActionExportMapServer= new QAction(getThemeIcon("/mActionExportMapServer.png"), tr("Export to MapServer Map..."), this); mActionExportMapServer->setShortcut(tr("M","Export as MapServer .map file")); mActionExportMapServer->setStatusTip(tr("Export as MapServer .map file")); connect(mActionExportMapServer, SIGNAL(triggered()), this, SLOT(exportMapServer())); */ // - mActionFileExit= new QAction(QIcon(myIconPath+"/mActionFileExit.png"), tr("Exit"), this); + mActionFileExit= new QAction(getThemeIcon("/mActionFileExit.png"), tr("Exit"), this); mActionFileExit->setShortcut(tr("Ctrl+Q","Exit QGIS")); mActionFileExit->setStatusTip(tr("Exit QGIS")); connect(mActionFileExit, SIGNAL(triggered()), this, SLOT(fileExit())); // // Layer Menu Related Items // - mActionAddOgrLayer= new QAction(QIcon(myIconPath+"/mActionAddOgrLayer.png"), tr("Add a Vector Layer..."), this); + mActionAddOgrLayer= new QAction(getThemeIcon("/mActionAddOgrLayer.png"), tr("Add a Vector Layer..."), this); mActionAddOgrLayer->setShortcut(tr("V","Add a Vector Layer")); mActionAddOgrLayer->setStatusTip(tr("Add a Vector Layer")); connect(mActionAddOgrLayer, SIGNAL(triggered()), this, SLOT(addVectorLayer())); // - mActionAddRasterLayer= new QAction(QIcon(myIconPath+"/mActionAddRasterLayer.png"), tr("Add a Raster Layer..."), this); + mActionAddRasterLayer= new QAction(getThemeIcon("/mActionAddRasterLayer.png"), tr("Add a Raster Layer..."), this); mActionAddRasterLayer->setShortcut(tr("R","Add a Raster Layer")); mActionAddRasterLayer->setStatusTip(tr("Add a Raster Layer")); connect(mActionAddRasterLayer, SIGNAL(triggered()), this, SLOT(addRasterLayer())); // - mActionAddLayer= new QAction(QIcon(myIconPath+"/mActionAddLayer.png"), tr("Add a PostGIS Layer..."), this); + mActionAddLayer= new QAction(getThemeIcon("/mActionAddLayer.png"), tr("Add a PostGIS Layer..."), this); mActionAddLayer->setShortcut(tr("D","Add a PostGIS Layer")); mActionAddLayer->setStatusTip(tr("Add a PostGIS Layer")); //#ifdef HAVE_POSTGRESQL @@ -613,63 +610,63 @@ void QgisApp::createActions() //#endif connect(mActionAddLayer, SIGNAL(triggered()), this, SLOT(addDatabaseLayer())); // - mActionNewVectorLayer= new QAction(QIcon(myIconPath+"/mActionNewVectorLayer.png"), tr("New Vector Layer..."), this); + mActionNewVectorLayer= new QAction(getThemeIcon("/mActionNewVectorLayer.png"), tr("New Vector Layer..."), this); mActionNewVectorLayer->setShortcut(tr("N","Create a New Vector Layer")); mActionNewVectorLayer->setStatusTip(tr("Create a New Vector Layer")); connect(mActionNewVectorLayer, SIGNAL(triggered()), this, SLOT(newVectorLayer())); // - mActionRemoveLayer= new QAction(QIcon(myIconPath+"/mActionRemoveLayer.png"), tr("Remove Layer"), this); + mActionRemoveLayer= new QAction(getThemeIcon("/mActionRemoveLayer.png"), tr("Remove Layer"), this); mActionRemoveLayer->setShortcut(tr("Ctrl+D","Remove a Layer")); mActionRemoveLayer->setStatusTip(tr("Remove a Layer")); connect(mActionRemoveLayer, SIGNAL(triggered()), this, SLOT(removeLayer())); mActionRemoveLayer->setEnabled(false); // - mActionAddAllToOverview= new QAction(QIcon(myIconPath+"/mActionAddAllToOverview.png"), tr("Add All To Overview"), this); + mActionAddAllToOverview= new QAction(getThemeIcon("/mActionAddAllToOverview.png"), tr("Add All To Overview"), this); mActionAddAllToOverview->setShortcut(tr("+","Show all layers in the overview map")); mActionAddAllToOverview->setStatusTip(tr("Show all layers in the overview map")); connect(mActionAddAllToOverview, SIGNAL(triggered()), this, SLOT(addAllToOverview())); // - mActionRemoveAllFromOverview= new QAction(QIcon(myIconPath+"/mActionRemoveAllFromOverview.png"), tr("Remove All From Overview"), this); + mActionRemoveAllFromOverview= new QAction(getThemeIcon("/mActionRemoveAllFromOverview.png"), tr("Remove All From Overview"), this); mActionRemoveAllFromOverview->setShortcut(tr("-","Remove all layers from overview map")); mActionRemoveAllFromOverview->setStatusTip(tr("Remove all layers from overview map")); connect(mActionRemoveAllFromOverview, SIGNAL(triggered()), this, SLOT(removeAllFromOverview())); // - mActionToggleFullScreen = new QAction(QIcon(myIconPath+"/mActionToggleFullScreen.png"), tr("Toggle full screen mode"), this); + mActionToggleFullScreen = new QAction(getThemeIcon("/mActionToggleFullScreen.png"), tr("Toggle full screen mode"), this); mActionToggleFullScreen->setShortcut(tr("Ctrl-F","Toggle fullscreen mode")); mActionToggleFullScreen->setStatusTip(tr("Toggle fullscreen mode")); connect(mActionToggleFullScreen, SIGNAL(triggered()), this, SLOT(toggleFullScreen())); // - mActionShowAllLayers= new QAction(QIcon(myIconPath+"/mActionShowAllLayers.png"), tr("Show All Layers"), this); + mActionShowAllLayers= new QAction(getThemeIcon("/mActionShowAllLayers.png"), tr("Show All Layers"), this); mActionShowAllLayers->setShortcut(tr("S","Show all layers")); mActionShowAllLayers->setStatusTip(tr("Show all layers")); connect(mActionShowAllLayers, SIGNAL(triggered()), this, SLOT(showAllLayers())); // - mActionHideAllLayers= new QAction(QIcon(myIconPath+"/mActionHideAllLayers.png"), tr("Hide All Layers"), this); + mActionHideAllLayers= new QAction(getThemeIcon("/mActionHideAllLayers.png"), tr("Hide All Layers"), this); mActionHideAllLayers->setShortcut(tr("H","Hide all layers")); mActionHideAllLayers->setStatusTip(tr("Hide all layers")); connect(mActionHideAllLayers, SIGNAL(triggered()), this, SLOT(hideAllLayers())); // // Settings Menu Related Items // - mActionProjectProperties= new QAction(QIcon(myIconPath+"/mActionProjectProperties.png"), tr("Project Properties..."), this); + mActionProjectProperties= new QAction(getThemeIcon("/mActionProjectProperties.png"), tr("Project Properties..."), this); mActionProjectProperties->setShortcut(tr("P","Set project properties")); mActionProjectProperties->setStatusTip(tr("Set project properties")); connect(mActionProjectProperties, SIGNAL(triggered()), this, SLOT(projectProperties())); // - mActionOptions= new QAction(QIcon(myIconPath+"/mActionOptions.png"), tr("Options..."), this); + mActionOptions= new QAction(getThemeIcon("/mActionOptions.png"), tr("Options..."), this); // mActionOptions->setShortcut(tr("Alt+O","Change various QGIS options")); mActionOptions->setStatusTip(tr("Change various QGIS options")); connect(mActionOptions, SIGNAL(triggered()), this, SLOT(options())); // - mActionCustomProjection= new QAction(QIcon(myIconPath+"/mActionCustomProjection.png"), tr("Custom Projection..."), this); + mActionCustomProjection= new QAction(getThemeIcon("/mActionCustomProjection.png"), tr("Custom Projection..."), this); // mActionCustomProjection->setShortcut(tr("Alt+I","Manage custom projections")); mActionCustomProjection->setStatusTip(tr("Manage custom projections")); connect(mActionCustomProjection, SIGNAL(triggered()), this, SLOT(customProjection())); // // Help Menu Related items // - mActionHelpContents= new QAction(QIcon(myIconPath+"/mActionHelpContents.png"), tr("Help Contents"), this); + mActionHelpContents= new QAction(getThemeIcon("/mActionHelpContents.png"), tr("Help Contents"), this); #ifdef Q_WS_MAC mActionHelpContents->setShortcut(tr("Ctrl+?","Help Documentation (Mac)")); #else @@ -678,89 +675,89 @@ void QgisApp::createActions() mActionHelpContents->setStatusTip(tr("Help Documentation")); connect(mActionHelpContents, SIGNAL(triggered()), this, SLOT(helpContents())); // - mActionQgisHomePage= new QAction(QIcon(myIconPath+"/mActionQgisHomePage.png"), tr("Qgis Home Page"), this); + mActionQgisHomePage= new QAction(getThemeIcon("/mActionQgisHomePage.png"), tr("Qgis Home Page"), this); #ifndef Q_WS_MAC mActionQgisHomePage->setShortcut(tr("Ctrl+H","QGIS Home Page")); #endif mActionQgisHomePage->setStatusTip(tr("QGIS Home Page")); connect(mActionQgisHomePage, SIGNAL(triggered()), this, SLOT(helpQgisHomePage())); // - mActionHelpAbout= new QAction(QIcon(myIconPath+"/mActionHelpAbout.png"), tr("About"), this); + mActionHelpAbout= new QAction(getThemeIcon("/mActionHelpAbout.png"), tr("About"), this); mActionHelpAbout->setStatusTip(tr("About QGIS")); connect(mActionHelpAbout, SIGNAL(triggered()), this, SLOT(about())); // - mActionCheckQgisVersion= new QAction(QIcon(myIconPath+"/mActionCheckQgisVersion.png"), tr("Check Qgis Version"), this); + mActionCheckQgisVersion= new QAction(getThemeIcon("/mActionCheckQgisVersion.png"), tr("Check Qgis Version"), this); mActionCheckQgisVersion->setStatusTip(tr("Check if your QGIS version is up to date (requires internet access)")); connect(mActionCheckQgisVersion, SIGNAL(triggered()), this, SLOT(checkQgisVersion())); // // View Menu Items // - mActionDraw= new QAction(QIcon(myIconPath+"/mActionDraw.png"), tr("Refresh"), this); + mActionDraw= new QAction(getThemeIcon("/mActionDraw.png"), tr("Refresh"), this); mActionDraw->setShortcut(tr("Ctrl+R","Refresh Map")); mActionDraw->setStatusTip(tr("Refresh Map")); connect(mActionDraw, SIGNAL(triggered()), this, SLOT(refreshMapCanvas())); // - mActionZoomIn= new QAction(QIcon(myIconPath+"/mActionZoomIn.png"), tr("Zoom In"), this); + mActionZoomIn= new QAction(getThemeIcon("/mActionZoomIn.png"), tr("Zoom In"), this); mActionZoomIn->setShortcut(tr("Ctrl++","Zoom In")); mActionZoomIn->setStatusTip(tr("Zoom In")); connect(mActionZoomIn, SIGNAL(triggered()), this, SLOT(zoomIn())); // - mActionZoomOut= new QAction(QIcon(myIconPath+"/mActionZoomOut.png"), tr("Zoom Out"), this); + mActionZoomOut= new QAction(getThemeIcon("/mActionZoomOut.png"), tr("Zoom Out"), this); mActionZoomOut->setShortcut(tr("Ctrl+-","Zoom Out")); mActionZoomOut->setStatusTip(tr("Zoom Out")); connect(mActionZoomOut, SIGNAL(triggered()), this, SLOT(zoomOut())); // - mActionZoomFullExtent= new QAction(QIcon(myIconPath+"/mActionZoomFullExtent.png"), tr("Zoom Full"), this); + mActionZoomFullExtent= new QAction(getThemeIcon("/mActionZoomFullExtent.png"), tr("Zoom Full"), this); mActionZoomFullExtent->setShortcut(tr("F","Zoom to Full Extents")); mActionZoomFullExtent->setStatusTip(tr("Zoom to Full Extents")); connect(mActionZoomFullExtent, SIGNAL(triggered()), this, SLOT(zoomFull())); // - mActionZoomToSelected= new QAction(QIcon(myIconPath+"/mActionZoomToSelected.png"), tr("Zoom To Selection"), this); + mActionZoomToSelected= new QAction(getThemeIcon("/mActionZoomToSelected.png"), tr("Zoom To Selection"), this); mActionZoomToSelected->setShortcut(tr("Ctrl+F","Zoom to selection")); mActionZoomToSelected->setStatusTip(tr("Zoom to selection")); connect(mActionZoomToSelected, SIGNAL(triggered()), this, SLOT(zoomToSelected())); // - mActionPan= new QAction(QIcon(myIconPath+"/mActionPan.png"), tr("Pan Map"), this); + mActionPan= new QAction(getThemeIcon("/mActionPan.png"), tr("Pan Map"), this); mActionPan->setStatusTip(tr("Pan the map")); connect(mActionPan, SIGNAL(triggered()), this, SLOT(pan())); // - mActionZoomLast= new QAction(QIcon(myIconPath+"/mActionZoomLast.png"), tr("Zoom Last"), this); + mActionZoomLast= new QAction(getThemeIcon("/mActionZoomLast.png"), tr("Zoom Last"), this); //mActionZoomLast->setShortcut(tr("Ctrl+O","Zoom to Last Extent")); mActionZoomLast->setStatusTip(tr("Zoom to Last Extent")); connect(mActionZoomLast, SIGNAL(triggered()), this, SLOT(zoomPrevious())); // - mActionZoomToLayer= new QAction(QIcon(myIconPath+"/mActionZoomToLayer.png"), tr("Zoom To Layer"), this); + mActionZoomToLayer= new QAction(getThemeIcon("/mActionZoomToLayer.png"), tr("Zoom To Layer"), this); //mActionZoomToLayer->setShortcut(tr("Ctrl+O","Zoom to Layer")); mActionZoomToLayer->setStatusTip(tr("Zoom to Layer")); connect(mActionZoomToLayer, SIGNAL(triggered()), this, SLOT(zoomToLayerExtent())); // - mActionIdentify= new QAction(QIcon(myIconPath+"/mActionIdentify.png"), tr("Identify Features"), this); + mActionIdentify= new QAction(getThemeIcon("/mActionIdentify.png"), tr("Identify Features"), this); mActionIdentify->setShortcut(tr("I","Click on features to identify them")); mActionIdentify->setStatusTip(tr("Click on features to identify them")); connect(mActionIdentify, SIGNAL(triggered()), this, SLOT(identify())); // - mActionSelect= new QAction(QIcon(myIconPath+"/mActionSelect.png"), tr("Select Features"), this); + mActionSelect= new QAction(getThemeIcon("/mActionSelect.png"), tr("Select Features"), this); mActionSelect->setStatusTip(tr("Select Features")); connect(mActionSelect, SIGNAL(triggered()), this, SLOT(select())); mActionSelect->setEnabled(false); // - mActionOpenTable= new QAction(QIcon(myIconPath+"/mActionOpenTable.png"), tr("Open Table"), this); + mActionOpenTable= new QAction(getThemeIcon("/mActionOpenTable.png"), tr("Open Table"), this); //mActionOpenTable->setShortcut(tr("Ctrl+O","Open Table")); mActionOpenTable->setStatusTip(tr("Open Table")); connect(mActionOpenTable, SIGNAL(triggered()), this, SLOT(attributeTable())); mActionOpenTable->setEnabled(false); // - mActionMeasure= new QAction(QIcon(myIconPath+"/mActionMeasure.png"), tr("Measure Line "), this); + mActionMeasure= new QAction(getThemeIcon("/mActionMeasure.png"), tr("Measure Line "), this); mActionMeasure->setShortcut(tr("Ctrl+M","Measure a Line")); mActionMeasure->setStatusTip(tr("Measure a Line")); connect(mActionMeasure, SIGNAL(triggered()), this, SLOT(measure())); // - mActionMeasureArea= new QAction(QIcon(myIconPath+"/mActionMeasureArea.png"), tr("Measure Area"), this); + mActionMeasureArea= new QAction(getThemeIcon("/mActionMeasureArea.png"), tr("Measure Area"), this); mActionMeasureArea->setShortcut(tr("Ctrl+J","Measure an Area")); mActionMeasureArea->setStatusTip(tr("Measure an Area")); connect(mActionMeasureArea, SIGNAL(triggered()), this, SLOT(measureArea())); // - mActionShowBookmarks= new QAction(QIcon(myIconPath+"/mActionShowBookmarks.png"), tr("Show Bookmarks"), this); + mActionShowBookmarks= new QAction(getThemeIcon("/mActionShowBookmarks.png"), tr("Show Bookmarks"), this); mActionShowBookmarks->setShortcut(tr("B","Show Bookmarks")); mActionShowBookmarks->setStatusTip(tr("Show Bookmarks")); connect(mActionShowBookmarks, SIGNAL(triggered()), this, SLOT(showBookmarks())); @@ -777,17 +774,17 @@ void QgisApp::createActions() connect(mActionHideAllToolbars, SIGNAL(triggered()), this, SLOT(hideAllToolbars())); // - mActionNewBookmark= new QAction(QIcon(myIconPath+"/mActionNewBookmark.png"), tr("New Bookmark..."), this); + mActionNewBookmark= new QAction(getThemeIcon("/mActionNewBookmark.png"), tr("New Bookmark..."), this); mActionNewBookmark->setShortcut(tr("Ctrl+B","New Bookmark")); mActionNewBookmark->setStatusTip(tr("New Bookmark")); connect(mActionNewBookmark, SIGNAL(triggered()), this, SLOT(newBookmark())); // - mActionAddWmsLayer= new QAction(QIcon(myIconPath+"/mActionAddWmsLayer.png"), tr("Add WMS Layer..."), this); + mActionAddWmsLayer= new QAction(getThemeIcon("/mActionAddWmsLayer.png"), tr("Add WMS Layer..."), this); mActionAddWmsLayer->setShortcut(tr("W","Add Web Mapping Server Layer")); mActionAddWmsLayer->setStatusTip(tr("Add Web Mapping Server Layer")); connect(mActionAddWmsLayer, SIGNAL(triggered()), this, SLOT(addWmsLayer())); // - mActionInOverview= new QAction(QIcon(myIconPath+"/mActionInOverview.png"), tr("In Overview"), this); + mActionInOverview= new QAction(getThemeIcon("/mActionInOverview.png"), tr("In Overview"), this); mActionInOverview->setShortcut(tr("O","Add current layer to overview map")); mActionInOverview->setStatusTip(tr("Add current layer to overview map")); connect(mActionInOverview, SIGNAL(triggered()), this, SLOT(inOverview())); @@ -795,7 +792,7 @@ void QgisApp::createActions() // // Plugin Menu Related Items // - mActionShowPluginManager= new QAction(QIcon(myIconPath+"/mActionShowPluginManager.png"), tr("Plugin Manager..."), this); + mActionShowPluginManager= new QAction(getThemeIcon("/mActionShowPluginManager.png"), tr("Plugin Manager..."), this); // mActionShowPluginManager->setShortcut(tr("Ctrl+P","Open the plugin manager")); mActionShowPluginManager->setStatusTip(tr("Open the plugin manager")); connect(mActionShowPluginManager, SIGNAL(triggered()), this, SLOT(showPluginManager())); @@ -807,7 +804,7 @@ void QgisApp::createActions() // Digitising Toolbar Items // - mActionToggleEditing = new QAction(QIcon(myIconPath+"/mActionToggleEditing.png"), + mActionToggleEditing = new QAction(getThemeIcon("/mActionToggleEditing.png"), tr("Toggle editing"), this); mActionToggleEditing->setStatusTip(tr("Toggles the editing state of the current layer")); mActionToggleEditing->setCheckable(true); @@ -815,81 +812,81 @@ void QgisApp::createActions() mActionToggleEditing->setEnabled(false); // - mActionCapturePoint= new QAction(QIcon(myIconPath+"/mActionCapturePoint.png"), tr("Capture Point"), this); + mActionCapturePoint= new QAction(getThemeIcon("/mActionCapturePoint.png"), tr("Capture Point"), this); mActionCapturePoint->setShortcut(tr(".","Capture Points")); mActionCapturePoint->setStatusTip(tr("Capture Points")); connect(mActionCapturePoint, SIGNAL(triggered()), this, SLOT(capturePoint())); mActionCapturePoint->setEnabled(false); // - mActionCaptureLine= new QAction(QIcon(myIconPath+"/mActionCaptureLine.png"), tr("Capture Line"), this); + mActionCaptureLine= new QAction(getThemeIcon("/mActionCaptureLine.png"), tr("Capture Line"), this); mActionCaptureLine->setShortcut(tr("/","Capture Lines")); mActionCaptureLine->setStatusTip(tr("Capture Lines")); connect(mActionCaptureLine, SIGNAL(triggered()), this, SLOT(captureLine())); mActionCaptureLine->setEnabled(false); // - mActionCapturePolygon= new QAction(QIcon(myIconPath+"/mActionCapturePolygon.png"), tr("Capture Polygon"), this); + mActionCapturePolygon= new QAction(getThemeIcon("/mActionCapturePolygon.png"), tr("Capture Polygon"), this); mActionCapturePolygon->setShortcut(tr("Ctrl+/","Capture Polygons")); mActionCapturePolygon->setStatusTip(tr("Capture Polygons")); connect(mActionCapturePolygon, SIGNAL(triggered()), this, SLOT(capturePolygon())); mActionCapturePolygon->setEnabled(false); // - mActionDeleteSelected = new QAction(QIcon(myIconPath+"/mActionDeleteSelected.png"), tr("Delete Selected"), this); + mActionDeleteSelected = new QAction(getThemeIcon("/mActionDeleteSelected.png"), tr("Delete Selected"), this); mActionDeleteSelected->setStatusTip(tr("Delete Selected")); connect(mActionDeleteSelected, SIGNAL(triggered()), this, SLOT(deleteSelected())); mActionDeleteSelected->setEnabled(false); // - mActionMoveFeature = new QAction(QIcon(myIconPath+"/mActionMoveFeature.png"), tr("Move Feature"), this); + mActionMoveFeature = new QAction(getThemeIcon("/mActionMoveFeature.png"), tr("Move Feature"), this); mActionMoveFeature->setStatusTip(tr("Move Feature")); connect(mActionMoveFeature, SIGNAL(triggered()), this, SLOT(moveFeature())); mActionMoveFeature->setEnabled(false); // - mActionSplitFeatures = new QAction(QIcon(myIconPath+"/mActionSplitFeatures.png"), tr("Split Features"), this); + mActionSplitFeatures = new QAction(getThemeIcon("/mActionSplitFeatures.png"), tr("Split Features"), this); mActionSplitFeatures->setStatusTip(tr("Split Features")); connect(mActionSplitFeatures, SIGNAL(triggered()), this, SLOT(splitFeatures())); mActionSplitFeatures->setEnabled(false); // - mActionAddVertex = new QAction(QIcon(myIconPath+"/mActionAddVertex.png"), tr("Add Vertex"), this); + mActionAddVertex = new QAction(getThemeIcon("/mActionAddVertex.png"), tr("Add Vertex"), this); mActionAddVertex->setStatusTip(tr("Add Vertex")); connect(mActionAddVertex, SIGNAL(triggered()), this, SLOT(addVertex())); mActionAddVertex->setEnabled(false); // - mActionDeleteVertex = new QAction(QIcon(myIconPath+"/mActionDeleteVertex.png"), tr("Delete Vertex"), this); + mActionDeleteVertex = new QAction(getThemeIcon("/mActionDeleteVertex.png"), tr("Delete Vertex"), this); mActionDeleteVertex->setStatusTip(tr("Delete Vertex")); connect(mActionDeleteVertex, SIGNAL(triggered()), this, SLOT(deleteVertex())); mActionDeleteVertex->setEnabled(false); // - mActionMoveVertex = new QAction(QIcon(myIconPath+"/mActionMoveVertex.png"), tr("Move Vertex"), this); + mActionMoveVertex = new QAction(getThemeIcon("/mActionMoveVertex.png"), tr("Move Vertex"), this); mActionMoveVertex->setStatusTip(tr("Move Vertex")); connect(mActionMoveVertex, SIGNAL(triggered()), this, SLOT(moveVertex())); mActionMoveVertex->setEnabled(false); - mActionAddRing = new QAction(QIcon(myIconPath+"/mActionAddRing.png"), tr("Add Ring"), this); + mActionAddRing = new QAction(getThemeIcon("/mActionAddRing.png"), tr("Add Ring"), this); mActionAddRing->setStatusTip(tr("Add Ring")); connect(mActionAddRing, SIGNAL(triggered()), this, SLOT(addRing())); mActionAddRing->setEnabled(false); - mActionAddIsland = new QAction(QIcon(myIconPath+"/mActionAddIsland.png"), tr("Add Island"), this); + mActionAddIsland = new QAction(getThemeIcon("/mActionAddIsland.png"), tr("Add Island"), this); mActionAddIsland->setStatusTip(tr("Add Island to multipolygon")); connect(mActionAddIsland, SIGNAL(triggered()), this, SLOT(addIsland())); mActionAddIsland->setEnabled(false); - mActionEditCut = new QAction(QIcon(myIconPath+"/mActionEditCut.png"), tr("Cut Features"), this); + mActionEditCut = new QAction(getThemeIcon("/mActionEditCut.png"), tr("Cut Features"), this); mActionEditCut->setStatusTip(tr("Cut selected features")); connect(mActionEditCut, SIGNAL(triggered()), this, SLOT(editCut())); mActionEditCut->setEnabled(false); - mActionEditCopy = new QAction(QIcon(myIconPath+"/mActionEditCopy.png"), tr("Copy Features"), this); + mActionEditCopy = new QAction(getThemeIcon("/mActionEditCopy.png"), tr("Copy Features"), this); mActionEditCopy->setStatusTip(tr("Copy selected features")); connect(mActionEditCopy, SIGNAL(triggered()), this, SLOT(editCopy())); mActionEditCopy->setEnabled(false); - mActionEditPaste = new QAction(QIcon(myIconPath+"/mActionEditPaste.png"), tr("Paste Features"), this); + mActionEditPaste = new QAction(getThemeIcon("/mActionEditPaste.png"), tr("Paste Features"), this); mActionEditPaste->setStatusTip(tr("Paste selected features")); connect(mActionEditPaste, SIGNAL(triggered()), this, SLOT(editPaste())); mActionEditPaste->setEnabled(false); // maptips - mActionMapTips = new QAction(QIcon(myIconPath+"/mActionMapTips.png"), tr("Map Tips"), this); + mActionMapTips = new QAction(getThemeIcon("/mActionMapTips.png"), tr("Map Tips"), this); mActionMapTips->setStatusTip(tr("Show information about a feature when the mouse is hovered over it")); connect ( mActionMapTips, SIGNAL ( triggered() ), this, SLOT ( toggleMapTips() ) ); mActionMapTips->setCheckable(true); @@ -949,7 +946,6 @@ void QgisApp::createActionGroups() void QgisApp::createMenus() { - QString myIconPath = QgsApplication::themePath(); // // File Menu mFileMenu = menuBar()->addMenu(tr("&File")); @@ -1204,14 +1200,11 @@ void QgisApp::createStatusBar() "as the mouse is moved.")); mCoordsLabel->setToolTip(tr("Map coordinates at mouse cursor position")); statusBar()->addPermanentWidget(mCoordsLabel, 0); - QString myIconPath = QgsApplication::themePath(); //stop rendering status bar widget mStopRenderButton = new QToolButton( statusBar() ); mStopRenderButton->setMaximumWidth(20); mStopRenderButton->setMaximumHeight(20); - QPixmap myStopPixmap; - myStopPixmap.load(myIconPath+"/mIconDelete.png"); - mStopRenderButton->setIcon(myStopPixmap); + mStopRenderButton->setIcon(getThemeIcon("/mIconDelete.png")); mStopRenderButton->setToolTip(tr("Stop map rendering") ); statusBar()->addPermanentWidget(mStopRenderButton, 0); // render suppression status bar widget @@ -1232,14 +1225,13 @@ void QgisApp::createStatusBar() // Maintain uniform widget height in status bar by setting button height same as labels // For Qt/Mac 3.3, the default toolbutton height is 30 and labels were expanding to match mOnTheFlyProjectionStatusButton->setMaximumHeight(mScaleLabel->height()); - QPixmap myProjPixmap; - myProjPixmap.load(myIconPath+"/mIconProjectionDisabled.png"); - mOnTheFlyProjectionStatusButton->setIcon(myProjPixmap); - QgsDebugMsg("Icon Path: " + myIconPath.toLocal8Bit()); - if (myProjPixmap.isNull()) + mOnTheFlyProjectionStatusButton->setIcon(getThemeIcon("/mIconProjectionDisabled.png")); + if (!QFile::exists(QgsApplication::defaultThemePath() + "/mIconProjectionDisabled.png")) { QMessageBox::critical(this, tr("Resource Location Error"), - tr("Error reading icon resources from: \n %1\n Quitting...").arg(myIconPath)); + tr("Error reading icon resources from: \n %1\n Quitting...").arg( + QgsApplication::defaultThemePath() + "/mIconProjectionDisabled.png" + )); exit(0); } mOnTheFlyProjectionStatusButton->setWhatsThis(tr("This icon shows whether " @@ -1268,7 +1260,7 @@ void QgisApp::setTheme(QString theThemeName) // default theme is installed in /share/qgis/themes/default. // // New core themes can be added by creating a subdirectory under src/themes - // and modifying the appropriate Makefile.am files. User contributed themes + // and modifying the appropriate CMakeLists.txt files. User contributed themes // will be installed directly into /share/qgis/themes/. // // Themes can be selected from the preferences dialog. The dialog parses @@ -1279,56 +1271,56 @@ void QgisApp::setTheme(QString theThemeName) // one from the default theme (which is installed with qgis and should // always be good) */ - QgsApplication::selectTheme(theThemeName); - QString myIconPath = QgsApplication::themePath(); - mActionFileNew->setIcon(QIcon(QPixmap(myIconPath + "/mActionFileNew.png"))); - mActionFileSave->setIcon(QIcon(QPixmap(myIconPath + "/mActionFileSave.png"))); - mActionFileSaveAs->setIcon(QIcon(QPixmap(myIconPath + "/mActionFileSaveAs.png"))); - mActionFileOpen->setIcon(QIcon(QPixmap(myIconPath + "/mActionFileOpen.png"))); - mActionFilePrint->setIcon(QIcon(QPixmap(myIconPath + "/mActionFilePrint.png"))); - mActionSaveMapAsImage->setIcon(QIcon(QPixmap(myIconPath + "/mActionSaveMapAsImage.png"))); + QgsApplication::setTheme(theThemeName); + QgsDebugMsg("Setting theme to \n" + QgsApplication::activeThemePath()); + mActionFileNew->setIcon(getThemeIcon( "/mActionFileNew.png")); + mActionFileSave->setIcon(getThemeIcon( "/mActionFileSave.png")); + mActionFileSaveAs->setIcon(getThemeIcon( "/mActionFileSaveAs.png")); + mActionFileOpen->setIcon(getThemeIcon( "/mActionFileOpen.png")); + mActionFilePrint->setIcon(getThemeIcon( "/mActionFilePrint.png")); + mActionSaveMapAsImage->setIcon(getThemeIcon( "/mActionSaveMapAsImage.png")); // TODO: Remove the mActionExportMapServer related code once the mapserver export plugin /* - mActionExportMapServer->setIcon(QIcon(QPixmap(myIconPath + "/mActionExportMapServer.png"))); + mActionExportMapServer->setIcon(getThemeIcon( "/mActionExportMapServer.png")); */ - mActionFileExit->setIcon(QIcon(QPixmap(myIconPath + "/mActionFileExit.png"))); - mActionAddOgrLayer->setIcon(QIcon(QPixmap(myIconPath + "/mActionAddOgrLayer.png"))); - mActionAddRasterLayer->setIcon(QIcon(QPixmap(myIconPath + "/mActionAddRasterLayer.png"))); - mActionAddLayer->setIcon(QIcon(QPixmap(myIconPath + "/mActionAddLayer.png"))); - mActionRemoveLayer->setIcon(QIcon(QPixmap(myIconPath + "/mActionRemoveLayer.png"))); - mActionNewVectorLayer->setIcon(QIcon(QPixmap(myIconPath + "/mActionNewVectorLayer.png"))); - mActionAddAllToOverview->setIcon(QIcon(QPixmap(myIconPath + "/mActionAddAllToOverview.png"))); - mActionHideAllLayers->setIcon(QIcon(QPixmap(myIconPath + "/mActionHideAllLayers.png"))); - mActionShowAllLayers->setIcon(QIcon(QPixmap(myIconPath + "/mActionShowAllLayers.png"))); - mActionRemoveAllFromOverview->setIcon(QIcon(QPixmap(myIconPath + "/mActionRemoveAllFromOverview.png"))); - mActionProjectProperties->setIcon(QIcon(QPixmap(myIconPath + "/mActionProjectProperties.png"))); - mActionShowPluginManager->setIcon(QIcon(QPixmap(myIconPath + "/mActionShowPluginManager.png"))); - mActionCheckQgisVersion->setIcon(QIcon(QPixmap(myIconPath + "/mActionCheckQgisVersion.png"))); - mActionOptions->setIcon(QIcon(QPixmap(myIconPath + "/mActionOptions.png"))); - mActionHelpContents->setIcon(QIcon(QPixmap(myIconPath + "/mActionHelpContents.png"))); - mActionQgisHomePage->setIcon(QIcon(QPixmap(myIconPath + "/mActionQgisHomePage.png"))); - mActionHelpAbout->setIcon(QIcon(QPixmap(myIconPath + "/mActionHelpAbout.png"))); - mActionDraw->setIcon(QIcon(QPixmap(myIconPath + "/mActionDraw.png"))); - mActionCapturePoint->setIcon(QIcon(QPixmap(myIconPath + "/mActionCapturePoint.png"))); - mActionCaptureLine->setIcon(QIcon(QPixmap(myIconPath + "/mActionCaptureLine.png"))); - mActionCapturePolygon->setIcon(QIcon(QPixmap(myIconPath + "/mActionCapturePolygon.png"))); - mActionZoomIn->setIcon(QIcon(QPixmap(myIconPath + "/mActionZoomIn.png"))); - mActionZoomOut->setIcon(QIcon(QPixmap(myIconPath + "/mActionZoomOut.png"))); - mActionZoomFullExtent->setIcon(QIcon(QPixmap(myIconPath + "/mActionZoomFullExtent.png"))); - mActionZoomToSelected->setIcon(QIcon(QPixmap(myIconPath + "/mActionZoomToSelected.png"))); - mActionPan->setIcon(QIcon(QPixmap(myIconPath + "/mActionPan.png"))); - mActionZoomLast->setIcon(QIcon(QPixmap(myIconPath + "/mActionZoomLast.png"))); - mActionZoomToLayer->setIcon(QIcon(QPixmap(myIconPath + "/mActionZoomToLayer.png"))); - mActionIdentify->setIcon(QIcon(QPixmap(myIconPath + "/mActionIdentify.png"))); - mActionSelect->setIcon(QIcon(QPixmap(myIconPath + "/mActionSelect.png"))); - mActionOpenTable->setIcon(QIcon(QPixmap(myIconPath + "/mActionOpenTable.png"))); - mActionMeasure->setIcon(QIcon(QPixmap(myIconPath + "/mActionMeasure.png"))); - mActionMeasureArea->setIcon(QIcon(QPixmap(myIconPath + "/mActionMeasureArea.png"))); - mActionShowBookmarks->setIcon(QIcon(QPixmap(myIconPath + "/mActionShowBookmarks.png"))); - mActionNewBookmark->setIcon(QIcon(QPixmap(myIconPath + "/mActionNewBookmark.png"))); - mActionCustomProjection->setIcon(QIcon(QPixmap(myIconPath + "/mActionCustomProjection.png"))); - mActionAddWmsLayer->setIcon(QIcon(QPixmap(myIconPath + "/mActionAddWmsLayer.png"))); - mActionInOverview->setIcon(QIcon(QPixmap(myIconPath + "/mActionInOverview.png"))); + mActionFileExit->setIcon(getThemeIcon( "/mActionFileExit.png")); + mActionAddOgrLayer->setIcon(getThemeIcon( "/mActionAddOgrLayer.png")); + mActionAddRasterLayer->setIcon(getThemeIcon( "/mActionAddRasterLayer.png")); + mActionAddLayer->setIcon(getThemeIcon( "/mActionAddLayer.png")); + mActionRemoveLayer->setIcon(getThemeIcon( "/mActionRemoveLayer.png")); + mActionNewVectorLayer->setIcon(getThemeIcon( "/mActionNewVectorLayer.png")); + mActionAddAllToOverview->setIcon(getThemeIcon( "/mActionAddAllToOverview.png")); + mActionHideAllLayers->setIcon(getThemeIcon( "/mActionHideAllLayers.png")); + mActionShowAllLayers->setIcon(getThemeIcon( "/mActionShowAllLayers.png")); + mActionRemoveAllFromOverview->setIcon(getThemeIcon( "/mActionRemoveAllFromOverview.png")); + mActionProjectProperties->setIcon(getThemeIcon( "/mActionProjectProperties.png")); + mActionShowPluginManager->setIcon(getThemeIcon( "/mActionShowPluginManager.png")); + mActionCheckQgisVersion->setIcon(getThemeIcon( "/mActionCheckQgisVersion.png")); + mActionOptions->setIcon(getThemeIcon( "/mActionOptions.png")); + mActionHelpContents->setIcon(getThemeIcon( "/mActionHelpContents.png")); + mActionQgisHomePage->setIcon(getThemeIcon( "/mActionQgisHomePage.png")); + mActionHelpAbout->setIcon(getThemeIcon( "/mActionHelpAbout.png")); + mActionDraw->setIcon(getThemeIcon( "/mActionDraw.png")); + mActionCapturePoint->setIcon(getThemeIcon( "/mActionCapturePoint.png")); + mActionCaptureLine->setIcon(getThemeIcon( "/mActionCaptureLine.png")); + mActionCapturePolygon->setIcon(getThemeIcon( "/mActionCapturePolygon.png")); + mActionZoomIn->setIcon(getThemeIcon( "/mActionZoomIn.png")); + mActionZoomOut->setIcon(getThemeIcon( "/mActionZoomOut.png")); + mActionZoomFullExtent->setIcon(getThemeIcon( "/mActionZoomFullExtent.png")); + mActionZoomToSelected->setIcon(getThemeIcon( "/mActionZoomToSelected.png")); + mActionPan->setIcon(getThemeIcon( "/mActionPan.png")); + mActionZoomLast->setIcon(getThemeIcon( "/mActionZoomLast.png")); + mActionZoomToLayer->setIcon(getThemeIcon( "/mActionZoomToLayer.png")); + mActionIdentify->setIcon(getThemeIcon( "/mActionIdentify.png")); + mActionSelect->setIcon(getThemeIcon( "/mActionSelect.png")); + mActionOpenTable->setIcon(getThemeIcon( "/mActionOpenTable.png")); + mActionMeasure->setIcon(getThemeIcon( "/mActionMeasure.png")); + mActionMeasureArea->setIcon(getThemeIcon( "/mActionMeasureArea.png")); + mActionShowBookmarks->setIcon(getThemeIcon( "/mActionShowBookmarks.png")); + mActionNewBookmark->setIcon(getThemeIcon( "/mActionNewBookmark.png")); + mActionCustomProjection->setIcon(getThemeIcon( "/mActionCustomProjection.png")); + mActionAddWmsLayer->setIcon(getThemeIcon( "/mActionAddWmsLayer.png")); + mActionInOverview->setIcon(getThemeIcon( "/mActionInOverview.png")); } void QgisApp::setupConnections() @@ -4661,20 +4653,15 @@ void QgisApp::projectionsEnabled(bool theFlag) QgsProject::instance()->writeEntry("SpatialRefSys","/ProjectionsEnabled", (theFlag?1:0)); // update icon - QString myIconPath = QgsApplication::themePath(); if (theFlag) { - QPixmap myProjPixmap; - myProjPixmap.load(myIconPath+"/mIconProjectionEnabled.png"); - //assert(!myProjPixmap.isNull()); - mOnTheFlyProjectionStatusButton->setIcon(myProjPixmap); + mOnTheFlyProjectionStatusButton->setIcon( + getThemeIcon("/mIconProjectionEnabled.png")); } else { - QPixmap myProjPixmap; - myProjPixmap.load(myIconPath+"/mIconProjectionDisabled.png"); - //assert(!myProjPixmap.isNull()); - mOnTheFlyProjectionStatusButton->setIcon(myProjPixmap); + mOnTheFlyProjectionStatusButton->setIcon( + getThemeIcon("/mIconProjectionDisabled.png")); } } // slot to update the progress bar in the status bar @@ -5577,3 +5564,36 @@ void QgisApp::setupProxy() } QNetworkProxy::setApplicationProxy(myProxy); } + +QIcon QgisApp::getThemeIcon(const QString theName) +{ + if (QFile::exists(QgsApplication::activeThemePath() + theName)) + { + return QIcon(QgsApplication::activeThemePath() + theName); + } + else if (QFile::exists(QgsApplication::defaultThemePath() + theName)) + { + //could still return an empty icon if it + //doesnt exist in the default theme either! + return QIcon(QgsApplication::defaultThemePath() + theName); + } + else + { + return QIcon(); + } +} + +QPixmap QgisApp::getThemePixmap(const QString theName) +{ + if (QFile::exists(QgsApplication::activeThemePath() + theName)) + { + return QPixmap(QgsApplication::activeThemePath() + theName); + } + else + { + //could still return an empty icon if it + //doesnt exist in the default theme either! + return QPixmap(QgsApplication::defaultThemePath() + theName); + } +} + diff --git a/src/app/qgisapp.h b/src/app/qgisapp.h index 49ddf87b9be..fc7ff8d9e38 100644 --- a/src/app/qgisapp.h +++ b/src/app/qgisapp.h @@ -162,6 +162,14 @@ class QgisApp : public QMainWindow * (as documented in Qt documentation. */ void setupProxy(); + //! 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); //private slots: public slots: //! About QGis @@ -589,9 +597,6 @@ class Tools QgsMapTool *mNonEditMapTool; - //!The name of the active theme - QString mThemeName; - //! Widget that will live on the statusbar to display "scale 1:" QLabel * mScaleLabel; //! Widget that will live on the statusbar to display scale value diff --git a/src/app/qgsattributetabledisplay.cpp b/src/app/qgsattributetabledisplay.cpp index 5500844dbb3..58bccb4782c 100644 --- a/src/app/qgsattributetabledisplay.cpp +++ b/src/app/qgsattributetabledisplay.cpp @@ -109,15 +109,14 @@ QgsAttributeTable *QgsAttributeTableDisplay::table() } void QgsAttributeTableDisplay::setTheme() { - QString myIconPath = QgsApplication::themePath(); - mAddAttributeButton->setIcon(QPixmap(myIconPath+"/mActionNewAttribute.png")); - mRemoveSelectionButton->setIcon(QPixmap(myIconPath+"/mActionUnselectAttributes.png")); - mSelectedToTopButton->setIcon(QPixmap(myIconPath+"/mActionSelectedToTop.png")); - mInvertSelectionButton->setIcon(QPixmap(myIconPath+"/mActionInvertSelection.png")); - mCopySelectedRowsButton->setIcon(QPixmap(myIconPath+"/mActionCopySelected.png")); - mZoomMapToSelectedRowsButton->setIcon(QPixmap(myIconPath+"/mActionZoomToSelected.png")); - mAddAttributeButton->setIcon(QPixmap(myIconPath+"/mActionNewAttribute.png")); - mDeleteAttributeButton->setIcon(QPixmap(myIconPath+"/mActionDeleteAttribute.png")); + mAddAttributeButton->setIcon(QgisApp::getThemeIcon("/mActionNewAttribute.png")); + mRemoveSelectionButton->setIcon(QgisApp::getThemeIcon("/mActionUnselectAttributes.png")); + mSelectedToTopButton->setIcon(QgisApp::getThemeIcon("/mActionSelectedToTop.png")); + mInvertSelectionButton->setIcon(QgisApp::getThemeIcon("/mActionInvertSelection.png")); + mCopySelectedRowsButton->setIcon(QgisApp::getThemeIcon("/mActionCopySelected.png")); + mZoomMapToSelectedRowsButton->setIcon(QgisApp::getThemeIcon("/mActionZoomToSelected.png")); + mAddAttributeButton->setIcon(QgisApp::getThemeIcon("/mActionNewAttribute.png")); + mDeleteAttributeButton->setIcon(QgisApp::getThemeIcon("/mActionDeleteAttribute.png")); } void QgsAttributeTableDisplay::setTitle(QString title) diff --git a/src/app/qgscustomprojectiondialog.cpp b/src/app/qgscustomprojectiondialog.cpp index a89d55e52f6..89b35ed6969 100644 --- a/src/app/qgscustomprojectiondialog.cpp +++ b/src/app/qgscustomprojectiondialog.cpp @@ -20,6 +20,7 @@ //qgis includes #include "qgis.h" //<--magick numbers +#include "qgisapp.h" //<--theme icons #include "qgsapplication.h" #include "qgslogger.h" @@ -44,16 +45,13 @@ QgsCustomProjectionDialog::QgsCustomProjectionDialog(QWidget *parent, Qt::WFlags { setupUi(this); - QString myThemePath = QgsApplication::themePath(); - pbnFirst->setIcon(QPixmap(myThemePath+"mIconFirst.png")); - QString myString = "Setting first button to : " + myThemePath+"mIconFirst.png"; - qDebug(myString.toLocal8Bit()); - pbnPrevious->setIcon(QPixmap(myThemePath+"mIconPrevious.png")); - pbnNext->setIcon(QPixmap(myThemePath+"mIconNext.png")); - pbnLast->setIcon(QPixmap(myThemePath+"mIconLast.png")); - pbnNew->setIcon(QPixmap(myThemePath+"mIconNew.png")); - pbnSave->setIcon(QPixmap(myThemePath+"mActionFileSave.png")); - pbnDelete->setIcon(QPixmap(myThemePath+"mIconDelete.png")); + 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")); // user database is created at QGIS startup in QgisApp::createDB // we just check whether there is our database [MD] QFileInfo myFileInfo; @@ -701,8 +699,7 @@ void QgsCustomProjectionDialog::on_pbnNew_clicked() if (pbnNew->text()==tr("Abort")) { //if we get here, user has aborted add record - QString myThemePath = QgsApplication::themePath(); - pbnNew->setIcon(QPixmap(myThemePath+"mIconNew.png")); + pbnNew->setIcon(QgisApp::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 @@ -724,8 +721,7 @@ void QgsCustomProjectionDialog::on_pbnNew_clicked() pbnNext->setEnabled(false); pbnLast->setEnabled(false); pbnDelete->setEnabled(false); - QString myThemePath = QgsApplication::themePath(); - pbnNew->setIcon(QPixmap(myThemePath+"mIconNew.png")); + pbnNew->setIcon(QgisApp::getThemeIcon("mIconNew.png")); //next line needed for new/abort logic pbnNew->setText(tr("Abort")); //clear the controls diff --git a/src/app/qgsdbtablemodel.cpp b/src/app/qgsdbtablemodel.cpp index da88b916730..9f96e185306 100644 --- a/src/app/qgsdbtablemodel.cpp +++ b/src/app/qgsdbtablemodel.cpp @@ -17,6 +17,7 @@ #include "qgsdbtablemodel.h" #include "qgsapplication.h" +#include "qgisapp.h" QgsDbTableModel::QgsDbTableModel(): QStandardItemModel(), mTableCount(0) { @@ -53,12 +54,10 @@ void QgsDbTableModel::addTableEntry(QString type, QString schemaName, QString ta } //path to icon for specified type - QString myThemePath = QgsApplication::themePath(); QString typeName; - QString iconFile; QGis::WKBTYPE wkbType = qgisTypeFromDbType(type); - iconFile = iconFilePathForType(wkbType); + QIcon iconFile = iconForType(wkbType); QList childItemList; QStandardItem* schemaNameItem = new QStandardItem(schemaName); @@ -197,9 +196,9 @@ void QgsDbTableModel::setGeometryTypesForTable(const QString& schema, const QStr } QGis::WKBTYPE wkbType = qgisTypeFromDbType(typeList.at(0)); - QString iconPath = iconFilePathForType(wkbType); + QIcon myIcon = iconForType(wkbType); itemFromIndex(currentTypeIndex)->setText(typeList.at(0)); //todo: add other rows - itemFromIndex(currentTypeIndex)->setIcon(QIcon(iconPath)); + itemFromIndex(currentTypeIndex)->setIcon(myIcon); if(!geomColText.contains(" AS ")) { itemFromIndex(currentGeomColumnIndex)->setText(geomColText + " AS " + typeList.at(0)); @@ -214,22 +213,21 @@ void QgsDbTableModel::setGeometryTypesForTable(const QString& schema, const QStr } } -QString QgsDbTableModel::iconFilePathForType(QGis::WKBTYPE type) const +QIcon QgsDbTableModel::iconForType(QGis::WKBTYPE type) const { - QString myThemePath = QgsApplication::themePath(); if(type == QGis::WKBPoint || type == QGis::WKBPoint25D || type == QGis::WKBMultiPoint || type == QGis::WKBMultiPoint25D) { - return myThemePath+"/mIconPointLayer.png"; + return QgisApp::getThemeIcon("/mIconPointLayer.png"); } else if(type == QGis::WKBLineString || type == QGis::WKBLineString25D || type == QGis::WKBMultiLineString || type == QGis::WKBMultiLineString25D) { - return myThemePath+"/mIconLineLayer.png"; + return QgisApp::getThemeIcon("/mIconLineLayer.png"); } else if(type == QGis::WKBPolygon || type == QGis::WKBPolygon25D || type == QGis::WKBMultiPolygon || type == QGis::WKBMultiPolygon25D) { - return myThemePath+"/mIconPolygonLayer.png"; + return QgisApp::getThemeIcon("/mIconPolygonLayer.png"); } - else return ""; + else return QIcon(); } QString QgsDbTableModel::displayStringForType(QGis::WKBTYPE type) const diff --git a/src/app/qgsdbtablemodel.h b/src/app/qgsdbtablemodel.h index 7f200351115..d10c1472484 100644 --- a/src/app/qgsdbtablemodel.h +++ b/src/app/qgsdbtablemodel.h @@ -16,6 +16,7 @@ ***************************************************************************/ #include +class QIcon; #include "qgis.h" /**A model that holds the tables of a database in a hierarchy where the @@ -41,7 +42,7 @@ class QgsDbTableModel: public QStandardItemModel /**Number of tables in the model*/ int mTableCount; - QString iconFilePathForType(QGis::WKBTYPE type) const; + QIcon iconForType(QGis::WKBTYPE type) const; QString displayStringForType(QGis::WKBTYPE type) const; /**Returns qgis wkbtype from database typename*/ QGis::WKBTYPE qgisTypeFromDbType(const QString& dbType) const; diff --git a/src/app/qgsgeomtypedialog.cpp b/src/app/qgsgeomtypedialog.cpp index eca65bf1a5d..f7335e12c34 100644 --- a/src/app/qgsgeomtypedialog.cpp +++ b/src/app/qgsgeomtypedialog.cpp @@ -18,15 +18,15 @@ #include "qgsgeomtypedialog.h" #include "qgsapplication.h" +#include "qgisapp.h" // <- for theme icons #include QgsGeomTypeDialog::QgsGeomTypeDialog(QWidget *parent, Qt::WFlags fl) : QDialog(parent, fl) { setupUi(this); - QString myThemePath = QgsApplication::themePath(); - mAddAttributeButton->setIcon(QIcon(QPixmap(myThemePath + "/mActionNewAttribute.png"))); - mRemoveAttributeButton->setIcon(QIcon(QPixmap(myThemePath + "/mActionDeleteAttribute.png"))); + mAddAttributeButton->setIcon(QgisApp::getThemeIcon("/mActionNewAttribute.png")); + mRemoveAttributeButton->setIcon(QgisApp::getThemeIcon("/mActionDeleteAttribute.png")); mTypeBox->addItem(tr("Real"),"Real"); mTypeBox->addItem(tr("Integer"),"Integer");; mTypeBox->addItem(tr("String"),"String"); diff --git a/src/app/qgsidentifyresults.cpp b/src/app/qgsidentifyresults.cpp index 609ce708970..d61d6be4f85 100644 --- a/src/app/qgsidentifyresults.cpp +++ b/src/app/qgsidentifyresults.cpp @@ -20,6 +20,7 @@ #include "qgsidentifyresults.h" #include "qgscontexthelp.h" #include "qgsapplication.h" +#include "qgisapp.h" #include #include @@ -210,8 +211,7 @@ void QgsIdentifyResults::addAction(QTreeWidgetItem * fnode, int id, QString fiel labels << field << value << "action" << QString::number(id); QTreeWidgetItem *item = new QTreeWidgetItem(fnode, labels ); - QPixmap pm ( QgsApplication::themePath() + "/mAction.png" ); - item->setIcon ( 0, QIcon(pm) ); + item->setIcon ( 0, QgisApp::getThemeIcon("/mAction.png") ); } /** Add a feature node to the list */ diff --git a/src/app/qgsrasterlayerproperties.cpp b/src/app/qgsrasterlayerproperties.cpp index 081d0f37398..197762f3505 100644 --- a/src/app/qgsrasterlayerproperties.cpp +++ b/src/app/qgsrasterlayerproperties.cpp @@ -17,6 +17,7 @@ #include "qgslogger.h" #include "qgsapplication.h" +#include "qgisapp.h" #include "qgscoordinatetransform.h" #include "qgsrasterlayerproperties.h" #include "qgslayerprojectionselector.h" @@ -280,18 +281,17 @@ QgsRasterLayerProperties::QgsRasterLayerProperties(QgsMapLayer *lyr, QWidget *pa cboxTransparencyBand->addItem(TRSTRING_NOT_SET); - QString myThemePath = QgsApplication::themePath(); - QPixmap myPyramidPixmap(myThemePath + "/mIconPyramid.png"); - QPixmap myNoPyramidPixmap(myThemePath + "/mIconNoPyramid.png"); + QIcon myPyramidPixmap(QgisApp::getThemeIcon("/mIconPyramid.png")); + QIcon myNoPyramidPixmap(QgisApp::getThemeIcon("/mIconNoPyramid.png")); - pbnAddValuesManually->setIcon(QIcon(myThemePath + "/mActionNewAttribute.png")); - pbnAddValuesFromDisplay->setIcon(QIcon(myThemePath + "/mActionContextHelp.png")); - pbnRemoveSelectedRow->setIcon(QIcon(myThemePath + "/mActionDeleteAttribute.png")); - pbnDefaultValues->setIcon(QIcon(myThemePath + "/mActionCopySelected.png")); - pbnImportTransparentPixelValues->setIcon(QIcon(myThemePath + "/mActionFileOpen.png")); - pbnExportTransparentPixelValues->setIcon(QIcon(myThemePath + "/mActionFileSave.png")); - pbtnMakeBandCombinationDefault->setIcon(QIcon(myThemePath + "/mActionFileSave.png")); - pbtnMakeContrastEnhancementAlgorithmDefault->setIcon(QIcon(myThemePath + "/mActionFileSave.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")); + pbtnMakeBandCombinationDefault->setIcon(QgisApp::getThemeIcon("/mActionFileSave.png")); + pbtnMakeContrastEnhancementAlgorithmDefault->setIcon(QgisApp::getThemeIcon("/mActionFileSave.png")); // Only do pyramids if dealing directly with GDAL. if (mRasterLayerIsGdal) @@ -1616,9 +1616,8 @@ void QgsRasterLayerProperties::on_buttonBuildPyramids_clicked() // repopulate the pyramids list // lbxPyramidResolutions->clear(); - QString myThemePath = QgsApplication::themePath(); - QPixmap myPyramidPixmap(myThemePath + "/mIconPyramid.png"); - QPixmap myNoPyramidPixmap(myThemePath + "/mIconNoPyramid.png"); + QIcon myPyramidPixmap(QgisApp::getThemeIcon("/mIconPyramid.png")); + QIcon myNoPyramidPixmap(QgisApp::getThemeIcon("/mIconNoPyramid.png")); QgsRasterLayer::RasterPyramidList::iterator myRasterPyramidIterator; for ( myRasterPyramidIterator=myPyramidList.begin(); diff --git a/src/core/qgsapplication.cpp b/src/core/qgsapplication.cpp index cb5c7908ecc..8d9a51c3992 100644 --- a/src/core/qgsapplication.cpp +++ b/src/core/qgsapplication.cpp @@ -106,7 +106,11 @@ const QString QgsApplication::pkgDataPath() { return mPkgDataPath; } -const QString QgsApplication::themePath() +const QString QgsApplication::defaultThemePath() +{ + return mPkgDataPath + QString("/themes/default/"); +} +const QString QgsApplication::activeThemePath() { return mThemePath; } @@ -114,9 +118,18 @@ const QString QgsApplication::themePath() /*! Set the theme path to the specified theme. */ -void QgsApplication::selectTheme(const QString theThemeName) +void QgsApplication::setTheme(const QString theThemeName) { - mThemePath = mPkgDataPath + QString("/themes/") + theThemeName + QString("/"); + QString myPath = mPkgDataPath + QString("/themes/") + theThemeName + QString("/"); + //check it exists and if not roll back to default theme + if (QFile::exists(myPath)) + { + mThemePath = myPath; + } + else + { + mThemePath = defaultThemePath(); + } } /*! diff --git a/src/core/qgsapplication.h b/src/core/qgsapplication.h index 6a7001c9ebd..745443fd65d 100644 --- a/src/core/qgsapplication.h +++ b/src/core/qgsapplication.h @@ -24,8 +24,8 @@ class CORE_EXPORT QgsApplication: public QApplication QgsApplication(int & argc, char ** argv, bool GUIenabled); virtual ~QgsApplication(); - //! Set the theme path to the specified theme. - static void selectTheme(const QString theThemeName); + //! Set the active theme path to the specified theme. + static void setTheme(const QString theThemeName); //! Returns the path to the authors file. static const QString authorsFilePath(); @@ -75,8 +75,11 @@ class CORE_EXPORT QgsApplication: public QApplication //! Returns the common root path of all application data directories. static const QString pkgDataPath(); - //! Returns the path to the current theme directory. - static const QString themePath(); + //! Returns the path to the currently active theme directory. + static const QString activeThemePath(); + + //! Returns the path to the default theme directory. + static const QString defaultThemePath(); //! Alters prefix path - used by 3rd party apps static void setPrefixPath(const QString thePrefixPath, bool useDefaultPaths = FALSE); diff --git a/src/core/raster/qgsrasterlayer.cpp b/src/core/raster/qgsrasterlayer.cpp index 75b95703028..9dd70f1c814 100644 --- a/src/core/raster/qgsrasterlayer.cpp +++ b/src/core/raster/qgsrasterlayer.cpp @@ -2954,7 +2954,7 @@ QPixmap QgsRasterLayer::getLegendQPixmap(bool theWithNameFlag) QPainter myQPainter(&myQPixmap2); //load up the pyramid icons - QString myThemePath = QgsApplication::themePath(); + QString myThemePath = QgsApplication::activeThemePath(); QPixmap myPyramidPixmap(myThemePath + "/mIconPyramid.png"); QPixmap myNoPyramidPixmap(myThemePath + "/mIconNoPyramid.png"); diff --git a/src/plugins/georeferencer/qgspointdialog.cpp b/src/plugins/georeferencer/qgspointdialog.cpp index ef651d7c5a0..f08467c912e 100644 --- a/src/plugins/georeferencer/qgspointdialog.cpp +++ b/src/plugins/georeferencer/qgspointdialog.cpp @@ -479,35 +479,33 @@ void QgsPointDialog::initialize() { setupUi(this); - QString myIconPath = QgsApplication::themePath(); - // setup actions // - mActionZoomIn= new QAction(QIcon(myIconPath+"/mActionZoomIn.png"), tr("Zoom In"), this); + mActionZoomIn= new QAction(getThemeIcon("/mActionZoomIn.png"), tr("Zoom In"), this); mActionZoomIn->setShortcut(tr("z")); mActionZoomIn->setStatusTip(tr("Zoom In")); connect(mActionZoomIn, SIGNAL(triggered()), this, SLOT(zoomIn())); // - mActionZoomOut= new QAction(QIcon(myIconPath+"/mActionZoomOut.png"), tr("Zoom Out"), this); + mActionZoomOut= new QAction(getThemeIcon("/mActionZoomOut.png"), tr("Zoom Out"), this); mActionZoomOut->setShortcut(tr("Z")); mActionZoomOut->setStatusTip(tr("Zoom Out")); connect(mActionZoomOut, SIGNAL(triggered()), this, SLOT(zoomOut())); // - mActionZoomToLayer= new QAction(QIcon(myIconPath+"/mActionZoomToLayer.png"), tr("Zoom To Layer"), this); + mActionZoomToLayer= new QAction(getThemeIcon("/mActionZoomToLayer.png"), tr("Zoom To Layer"), this); //mActionZoomToLayer->setShortcut(tr("Ctrl+O")); mActionZoomToLayer->setStatusTip(tr("Zoom to Layer")); connect(mActionZoomToLayer, SIGNAL(triggered()), this, SLOT(zoomToLayer())); // - mActionPan= new QAction(QIcon(myIconPath+"/mActionPan.png"), tr("Pan Map"), this); + mActionPan= new QAction(getThemeIcon("/mActionPan.png"), tr("Pan Map"), this); mActionPan->setStatusTip(tr("Pan the map")); connect(mActionPan, SIGNAL(triggered()), this, SLOT(pan())); // - mActionAddPoint= new QAction(QIcon(myIconPath+"/mActionCapturePoint.png"), tr("Add Point"), this); + mActionAddPoint= new QAction(getThemeIcon("/mActionCapturePoint.png"), tr("Add Point"), this); mActionAddPoint->setShortcut(tr(".")); mActionAddPoint->setStatusTip(tr("Capture Points")); connect(mActionAddPoint, SIGNAL(triggered()), this, SLOT(addPoint())); // - mActionDeletePoint = new QAction(QIcon(myIconPath+"/mActionDeleteSelected.png"), tr("Delete Point"), this); + mActionDeletePoint = new QAction(getThemeIcon("/mActionDeleteSelected.png"), tr("Delete Point"), this); mActionDeletePoint->setStatusTip(tr("Delete Selected")); connect(mActionDeletePoint, SIGNAL(triggered()), this, SLOT(deletePoint())); @@ -565,3 +563,19 @@ void QgsPointDialog::initialize() pbnGenerateWorldFile->setEnabled(false); pbnGenerateAndLoad->setEnabled(false); } + +// Note this code is duplicated from qgisapp.cpp because +// I didnt want to make plugins on qgsapplication [TS] +QIcon QgsPointDialog::getThemeIcon(const QString theName) +{ + if (QFile::exists(QgsApplication::activeThemePath() + theName)) + { + return QIcon(QgsApplication::activeThemePath() + theName); + } + else + { + //could still return an empty icon if it + //doesnt exist in the default theme either! + return QIcon(QgsApplication::defaultThemePath() + theName); + } +} diff --git a/src/plugins/georeferencer/qgspointdialog.h b/src/plugins/georeferencer/qgspointdialog.h index a7785a85144..dfec09e6c21 100644 --- a/src/plugins/georeferencer/qgspointdialog.h +++ b/src/plugins/georeferencer/qgspointdialog.h @@ -24,6 +24,7 @@ class QAction; class QActionGroup; +class QIcon; class QgsGeorefDataPoint; class QgsMapTool; class QgisInterface; @@ -66,6 +67,7 @@ private: QString guessWorldFileName(const QString& raster); void enableModifiedRasterControls(bool state); + QIcon getThemeIcon(const QString theName); QActionGroup* mMapToolGroup; QAction* mActionZoomIn; diff --git a/src/plugins/gps_importer/qgsgpsplugin.cpp b/src/plugins/gps_importer/qgsgpsplugin.cpp index c3bd1b42a73..1c775022df0 100644 --- a/src/plugins/gps_importer/qgsgpsplugin.cpp +++ b/src/plugins/gps_importer/qgsgpsplugin.cpp @@ -109,7 +109,7 @@ void QgsGPSPlugin::help() //implement me! } -// Slot called when the buffer menu item is activated +// Slot called when the menu item is activated void QgsGPSPlugin::run() { // find all GPX layers diff --git a/src/plugins/grass/qgsgrassbrowser.cpp b/src/plugins/grass/qgsgrassbrowser.cpp index f89fdb9340c..15f9c3d7de1 100644 --- a/src/plugins/grass/qgsgrassbrowser.cpp +++ b/src/plugins/grass/qgsgrassbrowser.cpp @@ -65,9 +65,8 @@ QgsGrassBrowser::QgsGrassBrowser ( QgisInterface *iface, QActionGroup *ag = new QActionGroup ( this ); QToolBar *tb = addToolBar(tr("Tools")); - QString myIconPath = QgsApplication::themePath() + "/grass/"; mActionAddMap = new QAction( - QIcon(myIconPath+"grass_add_map.png"), + getThemeIcon("grass_add_map.png"), tr("Add selected map to canvas"), this); mActionAddMap->setEnabled(false); ag->addAction ( mActionAddMap ); @@ -75,7 +74,7 @@ QgsGrassBrowser::QgsGrassBrowser ( QgisInterface *iface, connect ( mActionAddMap, SIGNAL(triggered()), this, SLOT(addMap()) ); mActionCopyMap = new QAction( - QIcon(myIconPath+"grass_copy_map.png"), + getThemeIcon("grass_copy_map.png"), tr("Copy selected map"), this); mActionCopyMap->setEnabled(false); ag->addAction ( mActionCopyMap ); @@ -83,7 +82,7 @@ QgsGrassBrowser::QgsGrassBrowser ( QgisInterface *iface, connect ( mActionCopyMap, SIGNAL(triggered()), this, SLOT(copyMap()) ); mActionRenameMap = new QAction( - QIcon(myIconPath+"grass_rename_map.png"), + getThemeIcon("grass_rename_map.png"), tr("Rename selected map"), this); mActionRenameMap->setEnabled(false); ag->addAction ( mActionRenameMap ); @@ -91,7 +90,7 @@ QgsGrassBrowser::QgsGrassBrowser ( QgisInterface *iface, connect ( mActionRenameMap, SIGNAL(triggered()), this, SLOT(renameMap()) ); mActionDeleteMap = new QAction( - QIcon(myIconPath+"grass_delete_map.png"), + getThemeIcon("grass_delete_map.png"), tr("Delete selected map"), this); mActionDeleteMap->setEnabled(false); ag->addAction ( mActionDeleteMap ); @@ -99,7 +98,7 @@ QgsGrassBrowser::QgsGrassBrowser ( QgisInterface *iface, connect ( mActionDeleteMap, SIGNAL(triggered()), this, SLOT(deleteMap()) ); mActionSetRegion = new QAction( - QIcon(myIconPath+"grass_set_region.png"), + getThemeIcon("grass_set_region.png"), tr("Set current region to selected map"), this); mActionSetRegion->setEnabled(false); ag->addAction ( mActionSetRegion ); @@ -107,7 +106,7 @@ QgsGrassBrowser::QgsGrassBrowser ( QgisInterface *iface, connect ( mActionSetRegion, SIGNAL(triggered()), this, SLOT(setRegion()) ); mActionRefresh = new QAction( - QIcon(myIconPath+"grass_refresh.png"), + getThemeIcon("grass_refresh.png"), tr("Refresh"), this); ag->addAction ( mActionRefresh ); tb->addAction ( mActionRefresh ); diff --git a/src/plugins/grass/qgsgrassbrowser.h b/src/plugins/grass/qgsgrassbrowser.h index 08b6fdd1294..4c592e9f327 100644 --- a/src/plugins/grass/qgsgrassbrowser.h +++ b/src/plugins/grass/qgsgrassbrowser.h @@ -22,6 +22,7 @@ class QAction; class QTreeView; class QTextBrowser; class QDirModel; +class QIcon; class QgisInterface; #include "qgsgrassmodel.h" @@ -80,6 +81,7 @@ signals: void regionChanged(); private: + QIcon getThemeIcon(const QString theName); QgisInterface *mIface; //! Current GISBASE diff --git a/src/plugins/grass/qgsgrassedit.cpp b/src/plugins/grass/qgsgrassedit.cpp index 3c4391c646c..3f96ac73fef 100644 --- a/src/plugins/grass/qgsgrassedit.cpp +++ b/src/plugins/grass/qgsgrassedit.cpp @@ -72,6 +72,7 @@ extern "C" { #include "qgsgrassedit.h" #include "qgsgrassedittools.h" #include "qgsgrassutils.h" +#include "qgsgrassplugin.h" #ifdef _MSC_VER #define round(x) ((x) >= 0 ? floor((x)+0.5) : floor((x)-0.5)) @@ -216,77 +217,76 @@ void QgsGrassEdit::init() connect ( mCanvas, SIGNAL(keyPressed(QKeyEvent *)), this, SLOT(keyPress(QKeyEvent *)) ); - QString myIconPath = QgsApplication::themePath() + "/grass/"; mToolBar = addToolBar(tr("Edit tools")); mNewPointAction = new QAction( - QIcon(myIconPath+"grass_new_point.png"), tr("New point"), this); + QgsGrassPlugin::getThemeIcon("grass_new_point.png"), tr("New point"), this); mNewPointAction->setShortcut ( QKeySequence(Qt::Key_F1) ); mToolBar->addAction ( mNewPointAction ); connect ( mNewPointAction, SIGNAL(triggered()), this, SLOT(newPoint()) ); mNewLineAction = new QAction( - QIcon(myIconPath+"grass_new_line.png"), tr("New line"), this); + QgsGrassPlugin::getThemeIcon("grass_new_line.png"), tr("New line"), this); mNewLineAction->setShortcut ( QKeySequence(Qt::Key_F2) ); mToolBar->addAction ( mNewLineAction ); connect ( mNewLineAction, SIGNAL(triggered()), this, SLOT(newLine()) ); mNewBoundaryAction = new QAction( - QIcon(myIconPath+"grass_new_boundary.png"), tr("New boundary"), this); + QgsGrassPlugin::getThemeIcon("grass_new_boundary.png"), tr("New boundary"), this); mNewBoundaryAction->setShortcut ( QKeySequence(Qt::Key_F3) ); mToolBar->addAction ( mNewBoundaryAction ); connect ( mNewBoundaryAction, SIGNAL(triggered()), this, SLOT(newBoundary()) ); mNewCentroidAction = new QAction( - QIcon(myIconPath+"grass_new_centroid.png"), tr("New centroid"), this); + QgsGrassPlugin::getThemeIcon("grass_new_centroid.png"), tr("New centroid"), this); mNewCentroidAction->setShortcut ( QKeySequence(Qt::Key_F4) ); mToolBar->addAction ( mNewCentroidAction ); connect ( mNewCentroidAction, SIGNAL(triggered()), this, SLOT(newCentroid()) ); mMoveVertexAction = new QAction( - QIcon(myIconPath+"grass_move_vertex.png"), tr("Move vertex"), this); + QgsGrassPlugin::getThemeIcon("grass_move_vertex.png"), tr("Move vertex"), this); mMoveVertexAction->setShortcut ( QKeySequence(Qt::Key_F5) ); mToolBar->addAction ( mMoveVertexAction ); connect ( mMoveVertexAction, SIGNAL(triggered()), this, SLOT(moveVertex()) ); mAddVertexAction = new QAction( - QIcon(myIconPath+"grass_add_vertex.png"), tr("Add vertex"), this); + QgsGrassPlugin::getThemeIcon("grass_add_vertex.png"), tr("Add vertex"), this); mAddVertexAction->setShortcut ( QKeySequence(Qt::Key_F6) ); mToolBar->addAction ( mAddVertexAction ); connect ( mAddVertexAction, SIGNAL(triggered()), this, SLOT(addVertex()) ); mDeleteVertexAction = new QAction( - QIcon(myIconPath+"grass_delete_vertex.png"), tr("Delete vertex"), this); + QgsGrassPlugin::getThemeIcon("grass_delete_vertex.png"), tr("Delete vertex"), this); mDeleteVertexAction->setShortcut ( QKeySequence(Qt::Key_F7) ); mToolBar->addAction ( mDeleteVertexAction ); connect ( mDeleteVertexAction, SIGNAL(triggered()), this, SLOT(deleteVertex()) ); mMoveLineAction = new QAction( - QIcon(myIconPath+"grass_move_line.png"), tr("Move element"), this); + QgsGrassPlugin::getThemeIcon("grass_move_line.png"), tr("Move element"), this); mMoveLineAction->setShortcut ( QKeySequence(Qt::Key_F9) ); mToolBar->addAction ( mMoveLineAction ); connect ( mMoveLineAction, SIGNAL(triggered()), this, SLOT(moveLine()) ); mSplitLineAction = new QAction( - QIcon(myIconPath+"grass_split_line.png"), tr("Split line"), this); + QgsGrassPlugin::getThemeIcon("grass_split_line.png"), tr("Split line"), this); mSplitLineAction->setShortcut ( QKeySequence(Qt::Key_F10) ); mToolBar->addAction ( mSplitLineAction ); connect ( mSplitLineAction, SIGNAL(triggered()), this, SLOT(splitLine()) ); mDeleteLineAction = new QAction( - QIcon(myIconPath+"grass_delete_line.png"), tr("Delete element"), this); + QgsGrassPlugin::getThemeIcon("grass_delete_line.png"), tr("Delete element"), this); mDeleteLineAction->setShortcut ( QKeySequence(Qt::Key_F11) ); mToolBar->addAction ( mDeleteLineAction ); connect ( mDeleteLineAction, SIGNAL(triggered()), this, SLOT(deleteLine()) ); mEditAttributesAction = new QAction( - QIcon(myIconPath+"grass_edit_attributes.png"), tr("Edit attributes"), this); + QgsGrassPlugin::getThemeIcon("grass_edit_attributes.png"), tr("Edit attributes"), this); mToolBar->addAction ( mEditAttributesAction ); connect ( mEditAttributesAction, SIGNAL(triggered()), this, SLOT(editAttributes()) ); mCloseEditAction = new QAction( - QIcon(myIconPath+"grass_close_edit.png"), tr("Close"), this); + QgsGrassPlugin::getThemeIcon("grass_close_edit.png"), tr("Close"), this); mToolBar->addAction ( mCloseEditAction ); connect ( mCloseEditAction, SIGNAL(triggered()), this, SLOT(closeEdit()) ); diff --git a/src/plugins/grass/qgsgrassmapcalc.cpp b/src/plugins/grass/qgsgrassmapcalc.cpp index 8d6c2afacfa..d4369c44447 100644 --- a/src/plugins/grass/qgsgrassmapcalc.cpp +++ b/src/plugins/grass/qgsgrassmapcalc.cpp @@ -53,6 +53,7 @@ #include "qgsvectorlayer.h" #include "qgsdataprovider.h" #include "qgsfield.h" +#include "qgsgrassplugin.h" extern "C" { #include @@ -105,47 +106,46 @@ QgsGrassMapcalc::QgsGrassMapcalc ( mView->setCanvas ( mCanvas ); - QString myIconPath = QgsApplication::themePath() + "/grass/"; QActionGroup *ag = new QActionGroup ( this ); QToolBar *tb = addToolBar(tr("Mapcalc tools")); - mActionAddMap = new QAction( QIcon(myIconPath+"mapcalc_add_map.png"), + mActionAddMap = new QAction( QgsGrassPlugin::getThemeIcon("mapcalc_add_map.png"), tr("Add map"), this); mActionAddMap->setCheckable ( true ); ag->addAction ( mActionAddMap ); tb->addAction ( mActionAddMap ); connect ( mActionAddMap, SIGNAL(triggered()), this, SLOT(addMap()) ); - mActionAddConstant = new QAction( QIcon(myIconPath+"mapcalc_add_constant.png"), + mActionAddConstant = new QAction( QgsGrassPlugin::getThemeIcon("mapcalc_add_constant.png"), tr("Add constant value"), this); mActionAddConstant->setCheckable ( true ); ag->addAction ( mActionAddConstant ); tb->addAction ( mActionAddConstant ); connect ( mActionAddConstant, SIGNAL(triggered()), this, SLOT(addConstant()) ); - mActionAddFunction = new QAction( QIcon(myIconPath+"mapcalc_add_function.png"), + mActionAddFunction = new QAction( QgsGrassPlugin::getThemeIcon("mapcalc_add_function.png"), tr("Add operator or function"), this); mActionAddFunction->setCheckable ( true ); ag->addAction ( mActionAddFunction ); tb->addAction ( mActionAddFunction ); connect ( mActionAddFunction, SIGNAL(triggered()), this, SLOT(addFunction()) ); - mActionAddConnection = new QAction( QIcon(myIconPath+"mapcalc_add_connection.png"), + mActionAddConnection = new QAction( QgsGrassPlugin::getThemeIcon("mapcalc_add_connection.png"), tr("Add connection"), this); mActionAddConnection->setCheckable ( true ); ag->addAction ( mActionAddConnection ); tb->addAction ( mActionAddConnection ); connect ( mActionAddConnection, SIGNAL(triggered()), this, SLOT(addConnection()) ); - mActionSelectItem = new QAction( QIcon(myIconPath+"mapcalc_select.png"), + mActionSelectItem = new QAction( QgsGrassPlugin::getThemeIcon("mapcalc_select.png"), tr("Select item"), this); mActionSelectItem->setCheckable ( true ); ag->addAction ( mActionSelectItem ); tb->addAction ( mActionSelectItem ); connect ( mActionSelectItem, SIGNAL(triggered()), this, SLOT(selectItem()) ); - mActionDeleteItem = new QAction( QIcon(myIconPath+"mapcalc_delete.png"), + mActionDeleteItem = new QAction( QgsGrassPlugin::getThemeIcon("mapcalc_delete.png"), tr("Delete selected item"), this); mActionDeleteItem->setCheckable ( true ); mActionDeleteItem->setEnabled ( false ); @@ -155,18 +155,18 @@ QgsGrassMapcalc::QgsGrassMapcalc ( mActionAddMap->setOn(true); - mActionLoad = new QAction( QIcon(myIconPath+"mapcalc_open.png"), + mActionLoad = new QAction( QgsGrassPlugin::getThemeIcon("mapcalc_open.png"), tr("Open"), this); tb->addAction ( mActionLoad ); connect ( mActionLoad, SIGNAL(triggered()), this, SLOT(load()) ); - mActionSave = new QAction( QIcon(myIconPath+"mapcalc_save.png"), + mActionSave = new QAction( QgsGrassPlugin::getThemeIcon("mapcalc_save.png"), tr("Save"), this); tb->addAction ( mActionSave ); connect ( mActionSave, SIGNAL(triggered()), this, SLOT(save()) ); mActionSave->setEnabled(false); - mActionSaveAs = new QAction( QIcon(myIconPath+"mapcalc_save_as.png"), + mActionSaveAs = new QAction( QgsGrassPlugin::getThemeIcon("mapcalc_save_as.png"), tr("Save as"), this); tb->addAction ( mActionSaveAs ); connect ( mActionSaveAs, SIGNAL(triggered()), this, SLOT(saveAs()) ); diff --git a/src/plugins/grass/qgsgrassmodel.cpp b/src/plugins/grass/qgsgrassmodel.cpp index d7c82a86e49..422fadec231 100644 --- a/src/plugins/grass/qgsgrassmodel.cpp +++ b/src/plugins/grass/qgsgrassmodel.cpp @@ -36,6 +36,7 @@ #include "qgis.h" #include "qgsapplication.h" #include "qgslogger.h" +#include "qgsgrassplugin.h" extern "C" { #include @@ -488,12 +489,11 @@ QgsGrassModel::QgsGrassModel ( QObject * parent ) mIconFile = QIcon(style->standardPixmap(QStyle::SP_FileIcon)); - QString iconPath = QgsApplication::themePath(); - mIconPointLayer = QIcon ( iconPath+"/mIconPointLayer.png" ); - mIconLineLayer = QIcon ( iconPath+"/mIconLineLayer.png" ); - mIconPolygonLayer = QIcon ( iconPath+"/mIconPolygonLayer.png" ); - mIconVectorLayer = QIcon ( iconPath+"/grass/grass_browser_vector_layer.png" ); - mIconRasterLayer = QIcon ( iconPath+"/grass/grass_browser_raster_layer.png" ); + mIconPointLayer = QgsGrassPlugin::getThemeIcon("/mIconPointLayer.png" ); + mIconLineLayer = QgsGrassPlugin::getThemeIcon("/mIconLineLayer.png" ); + mIconPolygonLayer = QgsGrassPlugin::getThemeIcon("/mIconPolygonLayer.png" ); + mIconVectorLayer = QgsGrassPlugin::getThemeIcon("/grass/grass_browser_vector_layer.png" ); + mIconRasterLayer = QgsGrassPlugin::getThemeIcon("/grass/grass_browser_raster_layer.png" ); mRoot = new QgsGrassModelItem(); mRoot->mType = QgsGrassModel::Location; diff --git a/src/plugins/grass/qgsgrassmodule.cpp b/src/plugins/grass/qgsgrassmodule.cpp index 438fae19309..a941681359f 100644 --- a/src/plugins/grass/qgsgrassmodule.cpp +++ b/src/plugins/grass/qgsgrassmodule.cpp @@ -90,6 +90,7 @@ extern "C" { #include "qgsgrassmapcalc.h" #include "qgsgrasstools.h" #include "qgsgrassselect.h" +#include "qgsgrassplugin.h" #include // to collect version information @@ -2102,10 +2103,9 @@ QgsGrassModuleInput::QgsGrassModuleInput ( QgsGrassModule *module, && region != "no" ) { - QString iconPath = QgsApplication::themePath() + "/grass/"; mRegionButton = new QPushButton( - QIcon(iconPath+"grass_set_region.png"), "" ); + QgsGrassPlugin::getThemeIcon("grass_set_region.png"), "" ); mRegionButton->setToolTip ( tr("Use region of this map") ); mRegionButton->setCheckable ( true ); diff --git a/src/plugins/grass/qgsgrassnewmapsetbase.ui b/src/plugins/grass/qgsgrassnewmapsetbase.ui index ed9a6ec333f..28b3e9de462 100644 --- a/src/plugins/grass/qgsgrassnewmapsetbase.ui +++ b/src/plugins/grass/qgsgrassnewmapsetbase.ui @@ -1,21 +1,16 @@ - - - QgsGrassNewMapsetBase 0 0 - 312 - 359 + 803 + 607 - - 7 - 1 + 0 0 @@ -26,25 +21,35 @@ - 0 - 0 - 621 - 507 + 6 + 38 + 349 + 324 - + 9 - + + 9 + + + 9 + + + 9 + + + 6 + + 6 - - 3 - 7 + 0 0 @@ -77,9 +82,7 @@ - - 5 - 5 + 0 0 @@ -92,16 +95,18 @@ - <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">GRASS data are stored in tree directory structure.</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">The GRASS database is the top-level directory in this tree structure.</p></body></html> + <html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Verdana'; font-size:10pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;">GRASS data are stored in tree directory structure.</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;">The GRASS database is the top-level directory in this tree structure.</p></body></html> - - 7 - 0 + 0 0 @@ -123,9 +128,7 @@ - - 7 - 5 + 0 0 @@ -133,265 +136,469 @@ - - 255 - 0 - 0 - - - 221 - 223 - 228 - - - 255 - 255 - 255 - - - 255 - 255 - 255 - - - 85 - 85 - 85 - - - 199 - 199 - 199 - - - 0 - 0 - 0 - - - 255 - 255 - 255 - - - 0 - 0 - 0 - - - 255 - 255 - 255 - - - 239 - 239 - 239 - - - 0 - 0 - 0 - - - 103 - 141 - 178 - - - 255 - 255 - 255 - - - 0 - 0 - 238 - - - 82 - 24 - 139 - - - 232 - 232 - 232 - + + + + 255 + 0 + 0 + + + + + + + 221 + 223 + 228 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 85 + 85 + 85 + + + + + + + 199 + 199 + 199 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 239 + 239 + 239 + + + + + + + 0 + 0 + 0 + + + + + + + 103 + 141 + 178 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 238 + + + + + + + 82 + 24 + 139 + + + + + + + 232 + 232 + 232 + + + - - 255 - 0 - 0 - - - 221 - 223 - 228 - - - 255 - 255 - 255 - - - 255 - 255 - 255 - - - 85 - 85 - 85 - - - 199 - 199 - 199 - - - 0 - 0 - 0 - - - 255 - 255 - 255 - - - 0 - 0 - 0 - - - 255 - 255 - 255 - - - 239 - 239 - 239 - - - 0 - 0 - 0 - - - 103 - 141 - 178 - - - 255 - 255 - 255 - - - 0 - 0 - 238 - - - 82 - 24 - 139 - - - 232 - 232 - 232 - + + + + 255 + 0 + 0 + + + + + + + 221 + 223 + 228 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 85 + 85 + 85 + + + + + + + 199 + 199 + 199 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 239 + 239 + 239 + + + + + + + 0 + 0 + 0 + + + + + + + 103 + 141 + 178 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 238 + + + + + + + 82 + 24 + 139 + + + + + + + 232 + 232 + 232 + + + - - 128 - 128 - 128 - - - 221 - 223 - 228 - - - 255 - 255 - 255 - - - 255 - 255 - 255 - - - 85 - 85 - 85 - - - 199 - 199 - 199 - - - 199 - 199 - 199 - - - 255 - 255 - 255 - - - 128 - 128 - 128 - - - 239 - 239 - 239 - - - 239 - 239 - 239 - - - 0 - 0 - 0 - - - 86 - 117 - 148 - - - 255 - 255 - 255 - - - 0 - 0 - 238 - - - 82 - 24 - 139 - - - 232 - 232 - 232 - + + + + 128 + 128 + 128 + + + + + + + 221 + 223 + 228 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 85 + 85 + 85 + + + + + + + 199 + 199 + 199 + + + + + + + 199 + 199 + 199 + + + + + + + 255 + 255 + 255 + + + + + + + 128 + 128 + 128 + + + + + + + 239 + 239 + 239 + + + + + + + 239 + 239 + 239 + + + + + + + 0 + 0 + 0 + + + + + + + 86 + 117 + 148 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 238 + + + + + + + 82 + 24 + 139 + + + + + + + 232 + 232 + 232 + + + @@ -418,12 +625,21 @@ - - 0 - 6 + + 0 + + + 0 + + + 0 + + + 0 + @@ -445,12 +661,21 @@ - - 0 - 6 + + 0 + + + 0 + + + 0 + + + 0 + @@ -481,25 +706,32 @@ - 0 - 0 - 621 - 507 + 6 + 38 + 349 + 324 - - 9 - 6 + + 9 + + + 9 + + + 9 + + + 9 + - - 7 - 1 + 0 0 @@ -511,18 +743,28 @@ true - + 10 - + + 10 + + + 10 + + + 10 + + + 6 + + 6 - - 7 - 0 + 0 0 @@ -556,9 +798,7 @@ - - 7 - 5 + 0 0 @@ -566,265 +806,469 @@ - - 255 - 0 - 0 - - - 221 - 223 - 228 - - - 255 - 255 - 255 - - - 255 - 255 - 255 - - - 85 - 85 - 85 - - - 199 - 199 - 199 - - - 0 - 0 - 0 - - - 255 - 255 - 255 - - - 0 - 0 - 0 - - - 255 - 255 - 255 - - - 239 - 239 - 239 - - - 0 - 0 - 0 - - - 103 - 141 - 178 - - - 255 - 255 - 255 - - - 0 - 0 - 238 - - - 82 - 24 - 139 - - - 232 - 232 - 232 - + + + + 255 + 0 + 0 + + + + + + + 221 + 223 + 228 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 85 + 85 + 85 + + + + + + + 199 + 199 + 199 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 239 + 239 + 239 + + + + + + + 0 + 0 + 0 + + + + + + + 103 + 141 + 178 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 238 + + + + + + + 82 + 24 + 139 + + + + + + + 232 + 232 + 232 + + + - - 255 - 0 - 0 - - - 221 - 223 - 228 - - - 255 - 255 - 255 - - - 255 - 255 - 255 - - - 85 - 85 - 85 - - - 199 - 199 - 199 - - - 0 - 0 - 0 - - - 255 - 255 - 255 - - - 0 - 0 - 0 - - - 255 - 255 - 255 - - - 239 - 239 - 239 - - - 0 - 0 - 0 - - - 103 - 141 - 178 - - - 255 - 255 - 255 - - - 0 - 0 - 238 - - - 82 - 24 - 139 - - - 232 - 232 - 232 - + + + + 255 + 0 + 0 + + + + + + + 221 + 223 + 228 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 85 + 85 + 85 + + + + + + + 199 + 199 + 199 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 239 + 239 + 239 + + + + + + + 0 + 0 + 0 + + + + + + + 103 + 141 + 178 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 238 + + + + + + + 82 + 24 + 139 + + + + + + + 232 + 232 + 232 + + + - - 128 - 128 - 128 - - - 221 - 223 - 228 - - - 255 - 255 - 255 - - - 255 - 255 - 255 - - - 85 - 85 - 85 - - - 199 - 199 - 199 - - - 199 - 199 - 199 - - - 255 - 255 - 255 - - - 128 - 128 - 128 - - - 239 - 239 - 239 - - - 239 - 239 - 239 - - - 0 - 0 - 0 - - - 86 - 117 - 148 - - - 255 - 255 - 255 - - - 0 - 0 - 238 - - - 82 - 24 - 139 - - - 232 - 232 - 232 - + + + + 128 + 128 + 128 + + + + + + + 221 + 223 + 228 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 85 + 85 + 85 + + + + + + + 199 + 199 + 199 + + + + + + + 199 + 199 + 199 + + + + + + + 255 + 255 + 255 + + + + + + + 128 + 128 + 128 + + + + + + + 239 + 239 + 239 + + + + + + + 239 + 239 + 239 + + + + + + + 0 + 0 + 0 + + + + + + + 86 + 117 + 148 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 238 + + + + + + + 82 + 24 + 139 + + + + + + + 232 + 232 + 232 + + + @@ -845,7 +1289,10 @@ - <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">The GRASS location is a collection of maps for a particular territory or project.</p></body></html> + <html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Verdana'; font-size:10pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;">The GRASS location is a collection of maps for a particular territory or project.</p></body></html> @@ -867,25 +1314,35 @@ - 0 - 0 - 300 - 279 + 6 + 38 + 349 + 324 - + 9 - + + 9 + + + 9 + + + 9 + + + 6 + + 6 - - 7 - 5 + 0 0 @@ -893,265 +1350,469 @@ - - 255 - 0 - 0 - - - 221 - 223 - 228 - - - 255 - 255 - 255 - - - 255 - 255 - 255 - - - 85 - 85 - 85 - - - 199 - 199 - 199 - - - 0 - 0 - 0 - - - 255 - 255 - 255 - - - 0 - 0 - 0 - - - 255 - 255 - 255 - - - 239 - 239 - 239 - - - 0 - 0 - 0 - - - 103 - 141 - 178 - - - 255 - 255 - 255 - - - 0 - 0 - 238 - - - 82 - 24 - 139 - - - 232 - 232 - 232 - + + + + 255 + 0 + 0 + + + + + + + 221 + 223 + 228 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 85 + 85 + 85 + + + + + + + 199 + 199 + 199 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 239 + 239 + 239 + + + + + + + 0 + 0 + 0 + + + + + + + 103 + 141 + 178 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 238 + + + + + + + 82 + 24 + 139 + + + + + + + 232 + 232 + 232 + + + - - 255 - 0 - 0 - - - 221 - 223 - 228 - - - 255 - 255 - 255 - - - 255 - 255 - 255 - - - 85 - 85 - 85 - - - 199 - 199 - 199 - - - 0 - 0 - 0 - - - 255 - 255 - 255 - - - 0 - 0 - 0 - - - 255 - 255 - 255 - - - 239 - 239 - 239 - - - 0 - 0 - 0 - - - 103 - 141 - 178 - - - 255 - 255 - 255 - - - 0 - 0 - 238 - - - 82 - 24 - 139 - - - 232 - 232 - 232 - + + + + 255 + 0 + 0 + + + + + + + 221 + 223 + 228 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 85 + 85 + 85 + + + + + + + 199 + 199 + 199 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 239 + 239 + 239 + + + + + + + 0 + 0 + 0 + + + + + + + 103 + 141 + 178 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 238 + + + + + + + 82 + 24 + 139 + + + + + + + 232 + 232 + 232 + + + - - 128 - 128 - 128 - - - 221 - 223 - 228 - - - 255 - 255 - 255 - - - 255 - 255 - 255 - - - 85 - 85 - 85 - - - 199 - 199 - 199 - - - 199 - 199 - 199 - - - 255 - 255 - 255 - - - 128 - 128 - 128 - - - 239 - 239 - 239 - - - 239 - 239 - 239 - - - 0 - 0 - 0 - - - 86 - 117 - 148 - - - 255 - 255 - 255 - - - 0 - 0 - 238 - - - 82 - 24 - 139 - - - 232 - 232 - 232 - + + + + 128 + 128 + 128 + + + + + + + 221 + 223 + 228 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 85 + 85 + 85 + + + + + + + 199 + 199 + 199 + + + + + + + 199 + 199 + 199 + + + + + + + 255 + 255 + 255 + + + + + + + 128 + 128 + 128 + + + + + + + 239 + 239 + 239 + + + + + + + 239 + 239 + 239 + + + + + + + 0 + 0 + 0 + + + + + + + 86 + 117 + 148 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 238 + + + + + + + 82 + 24 + 139 + + + + + + + 232 + 232 + 232 + + + @@ -1163,9 +1824,7 @@ - - 7 - 7 + 0 0 @@ -1174,10 +1833,22 @@ Coordinate system - + 0 - + + 0 + + + 0 + + + 0 + + + 5 + + 5 @@ -1200,9 +1871,7 @@ - - 7 - 7 + 0 0 @@ -1227,19 +1896,23 @@ - - - 0 - 0 - 301 - 246 - - - + 9 - + + 9 + + + 9 + + + 9 + + + 6 + + 6 @@ -1270,7 +1943,11 @@ - <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">The GRASS region defines a workspace for raster modules. The default region is valid for one location. It is possible to set a different region in each mapset. </p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">It is possible to change the default location region later.</p></body></html> + <html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Verdana'; font-size:10pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;">The GRASS region defines a workspace for raster modules. The default region is valid for one location. It is possible to set a different region in each mapset. </p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;">It is possible to change the default location region later.</p></body></html> @@ -1293,9 +1970,7 @@ - - 0 - 0 + 0 0 @@ -1313,7 +1988,7 @@ - images/world.png + :/grass/world.png true @@ -1322,12 +1997,21 @@ - - 0 - 6 + + 0 + + + 0 + + + 0 + + + 0 + @@ -1338,9 +2022,7 @@ - - 7 - 5 + 0 0 @@ -1352,18 +2034,25 @@ QFrame::Plain - - 3 - 6 + + 3 + + + 3 + + + 3 + + + 3 + - - 7 - 0 + 0 0 @@ -1385,9 +2074,7 @@ - - 7 - 5 + 0 0 @@ -1399,12 +2086,21 @@ - - 0 - 6 + + 0 + + + 0 + + + 0 + + + 0 + @@ -1424,9 +2120,7 @@ - - 0 - 5 + 0 0 @@ -1445,9 +2139,7 @@ - - 7 - 0 + 0 0 @@ -1474,18 +2166,25 @@ - - 0 - 6 + + 0 + + + 0 + + + 0 + + + 0 + - - 0 - 5 + 0 0 @@ -1504,9 +2203,7 @@ - - 7 - 0 + 0 0 @@ -1538,9 +2235,7 @@ - - 0 - 5 + 0 0 @@ -1559,9 +2254,7 @@ - - 7 - 0 + 0 0 @@ -1572,12 +2265,21 @@ - - 0 - 6 + + 0 + + + 0 + + + 0 + + + 0 + @@ -1597,9 +2299,7 @@ - - 0 - 5 + 0 0 @@ -1618,9 +2318,7 @@ - - 7 - 0 + 0 0 @@ -1679,20 +2377,38 @@ - - 9 - 6 + + 9 + + + 9 + + + 9 + + + 9 + - - 0 - 6 + + 0 + + + 0 + + + 0 + + + 0 + @@ -1712,9 +2428,7 @@ - - 7 - 5 + 0 0 @@ -1722,265 +2436,469 @@ - - 255 - 0 - 0 - - - 221 - 223 - 228 - - - 255 - 255 - 255 - - - 255 - 255 - 255 - - - 85 - 85 - 85 - - - 199 - 199 - 199 - - - 0 - 0 - 0 - - - 255 - 255 - 255 - - - 0 - 0 - 0 - - - 255 - 255 - 255 - - - 239 - 239 - 239 - - - 0 - 0 - 0 - - - 103 - 141 - 178 - - - 255 - 255 - 255 - - - 0 - 0 - 238 - - - 82 - 24 - 139 - - - 232 - 232 - 232 - + + + + 255 + 0 + 0 + + + + + + + 221 + 223 + 228 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 85 + 85 + 85 + + + + + + + 199 + 199 + 199 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 239 + 239 + 239 + + + + + + + 0 + 0 + 0 + + + + + + + 103 + 141 + 178 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 238 + + + + + + + 82 + 24 + 139 + + + + + + + 232 + 232 + 232 + + + - - 255 - 0 - 0 - - - 221 - 223 - 228 - - - 255 - 255 - 255 - - - 255 - 255 - 255 - - - 85 - 85 - 85 - - - 199 - 199 - 199 - - - 0 - 0 - 0 - - - 255 - 255 - 255 - - - 0 - 0 - 0 - - - 255 - 255 - 255 - - - 239 - 239 - 239 - - - 0 - 0 - 0 - - - 103 - 141 - 178 - - - 255 - 255 - 255 - - - 0 - 0 - 238 - - - 82 - 24 - 139 - - - 232 - 232 - 232 - + + + + 255 + 0 + 0 + + + + + + + 221 + 223 + 228 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 85 + 85 + 85 + + + + + + + 199 + 199 + 199 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 239 + 239 + 239 + + + + + + + 0 + 0 + 0 + + + + + + + 103 + 141 + 178 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 238 + + + + + + + 82 + 24 + 139 + + + + + + + 232 + 232 + 232 + + + - - 128 - 128 - 128 - - - 221 - 223 - 228 - - - 255 - 255 - 255 - - - 255 - 255 - 255 - - - 85 - 85 - 85 - - - 199 - 199 - 199 - - - 199 - 199 - 199 - - - 255 - 255 - 255 - - - 128 - 128 - 128 - - - 239 - 239 - 239 - - - 239 - 239 - 239 - - - 0 - 0 - 0 - - - 86 - 117 - 148 - - - 255 - 255 - 255 - - - 0 - 0 - 238 - - - 82 - 24 - 139 - - - 232 - 232 - 232 - + + + + 128 + 128 + 128 + + + + + + + 221 + 223 + 228 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 85 + 85 + 85 + + + + + + + 199 + 199 + 199 + + + + + + + 199 + 199 + 199 + + + + + + + 255 + 255 + 255 + + + + + + + 128 + 128 + 128 + + + + + + + 239 + 239 + 239 + + + + + + + 239 + 239 + 239 + + + + + + + 0 + 0 + 0 + + + + + + + 86 + 117 + 148 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 238 + + + + + + + 82 + 24 + 139 + + + + + + + 232 + 232 + 232 + + + @@ -1992,9 +2910,7 @@ - - 7 - 7 + 0 0 @@ -2009,12 +2925,21 @@ 0 - - 10 - 0 + + 10 + + + 10 + + + 10 + + + 10 + @@ -2034,9 +2959,7 @@ - - 7 - 1 + 0 0 @@ -2098,7 +3021,12 @@ - <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">The GRASS mapset is a collection of maps used by one user. </p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">A user can read maps from all mapsets in the location but </p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">he can open for writing only his mapset (owned by user).</p></body></html> + <html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Verdana'; font-size:10pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;">The GRASS mapset is a collection of maps used by one user. </p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;">A user can read maps from all mapsets in the location but </p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;">he can open for writing only his mapset (owned by user).</p></body></html> @@ -2127,18 +3055,25 @@ - - 0 - 6 + + 0 + + + 0 + + + 0 + + + 0 + - - 7 - 5 + 0 0 @@ -2157,9 +3092,7 @@ - - 7 - 5 + 0 0 @@ -2178,9 +3111,7 @@ - - 7 - 5 + 0 0 @@ -2216,37 +3147,33 @@ - Q3Frame - + QFrame
Qt3Support/Q3Frame
1 -
Q3Wizard - + QDialog
q3wizard.h
1 -
Q3ButtonGroup - + Q3GroupBox
Qt3Support/Q3ButtonGroup
1 -
Q3ListView - + Q3Frame
q3listview.h
- 0 -
- + + +
diff --git a/src/plugins/grass/qgsgrassplugin.cpp b/src/plugins/grass/qgsgrassplugin.cpp index fdd0d4af1de..9609692f148 100644 --- a/src/plugins/grass/qgsgrassplugin.cpp +++ b/src/plugins/grass/qgsgrassplugin.cpp @@ -16,6 +16,7 @@ /* $Id$ */ // includes +#include "qgsapplication.h" #include "qgsmaplayer.h" #include "qgisinterface.h" #include "qgsmapcanvas.h" @@ -39,6 +40,7 @@ #include #include #include +#include //Added by qt3to4: #include #include @@ -810,6 +812,22 @@ void QgsGrassPlugin::unload() disconnect( qgis, SIGNAL( projectRead() ), this, SLOT( projectRead())); disconnect( qgis, SIGNAL( newProject() ), this, SLOT(newProject())); } +// Note this code is duplicated from qgisapp.cpp because +// I didnt want to make plugins dependent on qgsapplication +// and because it needs grass specific path [TS] +QIcon QgsGrassPlugin::getThemeIcon(const QString theName) +{ + if (QFile::exists(QgsApplication::activeThemePath() + "/grass/" + theName)) + { + return QIcon(QgsApplication::activeThemePath() + theName); + } + else + { + //could still return an empty icon if it + //doesnt exist in the default theme either! + return QIcon(QgsApplication::defaultThemePath() + "/grass/" + theName); + } +} /** * Required extern functions needed for every plugin diff --git a/src/plugins/grass/qgsgrassplugin.h b/src/plugins/grass/qgsgrassplugin.h index ba591408e99..d2b83044d56 100644 --- a/src/plugins/grass/qgsgrassplugin.h +++ b/src/plugins/grass/qgsgrassplugin.h @@ -31,6 +31,7 @@ class QgsGrassTools; class QgsGrassNewMapset; class QgsGrassRegion; class QToolBar; +class QIcon; /** * \class QgsGrassPlugin * \brief OpenModeller plugin for QGIS @@ -69,6 +70,8 @@ Q_OBJECT public: QPen & regionPen(void); //! Set Region Pen void setRegionPen(QPen &); + //! Get a plugin icon resource using the active theme + static QIcon getThemeIcon(const QString theName); public slots: //! init the gui diff --git a/tests/src/core/testqgsapplication.cpp b/tests/src/core/testqgsapplication.cpp index 27fcefc75b1..a4e9774732e 100644 --- a/tests/src/core/testqgsapplication.cpp +++ b/tests/src/core/testqgsapplication.cpp @@ -46,7 +46,7 @@ void TestQgsApplication::initTestCase() void TestQgsApplication::checkTheme() { - QString myIconPath = QgsApplication::themePath(); + QString myIconPath = QgsApplication::defaultThemePath(); QPixmap myPixmap; myPixmap.load(myIconPath+"/mIconProjectionDisabled.png"); qDebug("Checking if a theme icon exists:");