PieDock 1.6.0

src/IconMap.h

00001 /*
00002  *   O         ,-
00003  *  ° o    . -´  '     ,-
00004  *   °  .´        ` . ´,´
00005  *     ( °   ))     . (
00006  *      `-;_    . -´ `.`.
00007  *          `._'       ´
00008  *
00009  * Copyright (c) 2007-2010 Markus Fisch <mf@markusfisch.de>
00010  *
00011  * Licensed under the MIT license:
00012  * http://www.opensource.org/licenses/mit-license.php
00013  */
00014 #ifndef _PieDock_IconMap_
00015 #define _PieDock_IconMap_
00016 
00017 #include "Icon.h"
00018 
00019 #include <string>
00020 #include <vector>
00021 #include <map>
00022 
00023 namespace PieDock
00024 {
00030     class IconMap
00031     {
00032         public:
00033             typedef std::vector<std::string> Paths;
00034 
00035             IconMap() :
00036                 missingSurface( 0 ),
00037                 fillerSurface( 0 ) {}
00038             virtual ~IconMap();
00039             virtual inline void addPath( const std::string p ) {
00040                 paths.push_back( p ); }
00041             virtual inline const Paths &getPath() const {
00042                 return paths; }
00043             virtual inline void setFileForMissing( const std::string f ) {
00044                 fileForMissing = f; }
00045             virtual inline const std::string &getFileForMissing() const {
00046                 return fileForMissing; }
00047             virtual inline void setFileForFiller( const std::string f ) {
00048                 fileForFiller = f; }
00049             virtual inline const std::string &getFileForFiller() const {
00050                 return fileForFiller; }
00051             virtual void reset();
00052             virtual void addNameAlias( std::string, std::string );
00053             virtual void addClassAlias( std::string, std::string );
00054             virtual void addTitleAlias( std::string, std::string );
00055             virtual Icon *getIcon( std::string, std::string, std::string );
00056             virtual Icon *getIconByName( std::string );
00057             virtual Icon *getIconByClass( const std::string );
00058             virtual Icon *getIconByTitle( const std::string );
00059             virtual Icon *getMissingIcon( const std::string );
00060             virtual Icon *getFillerIcon();
00061             virtual Icon *createIcon( const ArgbSurface *, const std::string,
00062                 Icon::Type );
00063             virtual void saveIcon( const ArgbSurface *,
00064                 const std::string ) const;
00065 
00066         protected:
00067             typedef std::map<std::string, std::string> AliasToFile;
00068             typedef std::map<std::string, Icon *> FileToIcon;
00069 
00070             virtual void freeIcons();
00071 
00072         private:
00073             Paths paths;
00074             AliasToFile nameToFile;
00075             AliasToFile classToFile;
00076             AliasToFile titleToFile;
00077             FileToIcon cache;
00078             static const char fallbackPng[];
00079             ArgbSurface *missingSurface;
00080             ArgbSurface *fillerSurface;
00081             std::string fileForMissing;
00082             std::string fileForFiller;
00083     };
00084 }
00085 
00086 #endif