Quantum GIS API Documentation  master-693a1fe
src/core/raster/qgsrasterrendererregistry.h
Go to the documentation of this file.
00001 /***************************************************************************
00002                          qgsrasterrendererregistry.h
00003                          ---------------------------
00004     begin                : January 2012
00005     copyright            : (C) 2012 by Marco Hugentobler
00006     email                : marco at sourcepole dot ch
00007  ***************************************************************************/
00008 
00009 /***************************************************************************
00010  *                                                                         *
00011  *   This program is free software; you can redistribute it and/or modify  *
00012  *   it under the terms of the GNU General Public License as published by  *
00013  *   the Free Software Foundation; either version 2 of the License, or     *
00014  *   (at your option) any later version.                                   *
00015  *                                                                         *
00016  ***************************************************************************/
00017 
00018 #ifndef QGSRASTERRENDERERREGISTRY_H
00019 #define QGSRASTERRENDERERREGISTRY_H
00020 
00021 #include "qgsrasterlayer.h" //for DrawingStyle enum
00022 #include <QHash>
00023 #include <QString>
00024 
00025 class QDomElement;
00026 class QgsRasterInterface;
00027 class QgsRasterLayer;
00028 class QgsRasterRenderer;
00029 class QgsRasterRendererWidget;
00030 
00031 typedef QgsRasterRenderer*( *QgsRasterRendererCreateFunc )( const QDomElement&, QgsRasterInterface* input );
00032 typedef QgsRasterRendererWidget*( *QgsRasterRendererWidgetCreateFunc )( QgsRasterLayer*, const QgsRectangle &extent );
00033 
00037 struct CORE_EXPORT QgsRasterRendererRegistryEntry
00038 {
00039   QgsRasterRendererRegistryEntry( const QString& theName, const QString& theVisibleName, QgsRasterRendererCreateFunc rendererFunction,
00040                                   QgsRasterRendererWidgetCreateFunc widgetFunction );
00041   QgsRasterRendererRegistryEntry();
00042   QString name;
00043   QString visibleName; //visible (and translatable) name
00044   QgsRasterRendererCreateFunc rendererCreateFunction; //pointer to create function
00045   QgsRasterRendererWidgetCreateFunc widgetCreateFunction; //pointer to create function for renderer widget
00046 };
00047 
00051 class CORE_EXPORT QgsRasterRendererRegistry
00052 {
00053   public:
00054     static QgsRasterRendererRegistry* instance();
00055     ~QgsRasterRendererRegistry();
00056 
00057     void insert( QgsRasterRendererRegistryEntry entry );
00058     void insertWidgetFunction( const QString& rendererName, QgsRasterRendererWidgetCreateFunc func );
00059     bool rendererData( const QString& rendererName, QgsRasterRendererRegistryEntry& data ) const;
00060     QStringList renderersList() const;
00061     QList< QgsRasterRendererRegistryEntry > entries() const;
00062 
00065     QgsRasterRenderer* defaultRendererForDrawingStyle( const QgsRasterLayer::DrawingStyle&  theDrawingStyle, QgsRasterDataProvider* provider ) const;
00066 
00067   protected:
00068     QgsRasterRendererRegistry();
00069 
00070   private:
00071     static QgsRasterRendererRegistry* mInstance;
00072     QHash< QString, QgsRasterRendererRegistryEntry > mEntries;
00073     QStringList mSortedEntries;
00074 
00075     //read min/max values from
00076     bool minMaxValuesForBand( int band, QgsRasterDataProvider* provider, double& minValue, double& maxValue ) const;
00077 };
00078 
00079 #endif // QGSRASTERRENDERERREGISTRY_H
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines