resource_manager.hpp
上传用户:yhdzpy8989
上传日期:2007-06-13
资源大小:13604k
文件大小:6k
源码类别:

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: resource_manager.hpp,v $
  4.  * PRODUCTION Revision 1000.0  2004/06/01 19:56:47  gouriano
  5.  * PRODUCTION PRODUCTION: IMPORTED [GCC34_MSVC7] Dev-tree R1.5
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef __GUI_WIDGETS_FL___RESOURCE_MANAGER__HPP
  10. #define __GUI_WIDGETS_FL___RESOURCE_MANAGER__HPP
  11. /*  $Id: resource_manager.hpp,v 1000.0 2004/06/01 19:56:47 gouriano Exp $
  12.  * ===========================================================================
  13.  *
  14.  *                            PUBLIC DOMAIN NOTICE
  15.  *               National Center for Biotechnology Information
  16.  *
  17.  *  This software/database is a "United States Government Work" under the
  18.  *  terms of the United States Copyright Act.  It was written as part of
  19.  *  the author's official duties as a United States Government employee and
  20.  *  thus cannot be copyrighted.  This software/database is freely available
  21.  *  to the public for use. The National Library of Medicine and the U.S.
  22.  *  Government have not placed any restriction on its use or reproduction.
  23.  *
  24.  *  Although all reasonable efforts have been taken to ensure the accuracy
  25.  *  and reliability of the software and data, the NLM and the U.S.
  26.  *  Government do not and cannot warrant the performance or results that
  27.  *  may be obtained by using this software or data. The NLM and the U.S.
  28.  *  Government disclaim all warranties, express or implied, including
  29.  *  warranties of performance, merchantability or fitness for any particular
  30.  *  purpose.
  31.  *
  32.  *  Please cite the author in any work or product based on this material.
  33.  *
  34.  * ===========================================================================
  35.  *
  36.  * Authors:  Andrey Yazhuk
  37.  *
  38.  * File Description:
  39.  *
  40.  */
  41. #include <corelib/ncbiobj.hpp>
  42. #include <gui/gui.hpp>
  43. #include <FL/Fl_Image.H>
  44. #include <FL/Fl_PNG_Image.H>
  45. /** @addtogroup GUI_FltkWidgets
  46.  *
  47.  * @{
  48.  */
  49. BEGIN_NCBI_SCOPE
  50. ////////////////////////////////////////////////////////////////////////////////
  51. ///
  52. class CFLTKImageHandle
  53. {
  54. public:
  55.     typedef Fl_Image    TImage;
  56.     typedef CObjectFor<TImage*>     TObjForImage;
  57.     typedef CRef<TObjForImage>      TImageRef;
  58.     CFLTKImageHandle()  {};
  59.     CFLTKImageHandle(TImage* image) // takes ownership of the image
  60.     {
  61.         if(image)   {
  62.             m_Ref = new TObjForImage;
  63.             *m_Ref = image;
  64.         } else m_Ref = NULL;
  65.     }
  66.     inline TImage& operator*()
  67.     {
  68.         return *(*m_Ref).GetData();
  69.     }
  70.     inline TImage* operator->()
  71.     {
  72.         return (*m_Ref).GetData();
  73.     }
  74.     inline operator bool() 
  75.     {
  76.         return (bool) m_Ref;
  77.     }
  78.         
  79. protected:
  80.     
  81.     TImageRef  m_Ref;
  82. };
  83. ////////////////////////////////////////////////////////////////////////////////
  84. /// CPNGImageExt - this class provides a way to draw transparent PNGs (what is not
  85. /// supported in FLTK 1.5). Image is blended with given background color using 
  86. /// alpha-channel data present in the image and then result is drawn on screen 
  87. /// as non-transperent.
  88. class CPNGImageExt : public Fl_PNG_Image
  89. {
  90. public:
  91.     typedef uchar    TByte;
  92.     CPNGImageExt(const char* filename);
  93.     
  94.     virtual void    DrawTransparent(Fl_Color back_color, int X, int Y, int W, int H, 
  95.                                     bool disabled = false, int cx = 0, int cy = 0);
  96. };
  97. ////////////////////////////////////////////////////////////////////////////////
  98. /// CResourceManager
  99. ///
  100. /// Provides access to application-specific resources such images and icons.
  101. /// Resources are stored as files in repository which is a directory in file
  102. /// system. Resources are identified by local paths inside repository or aliases.
  103. /// Aliases are symbolic names of resources making programming GUI independent from
  104. /// the actual filenames.
  105. class NCBI_GUIWIDGETS_FL_EXPORT CResourceManager : public CObject
  106. {
  107. public: 
  108.     typedef CFLTKImageHandle::TImage    TImage;
  109.     /// Specifies ";" - separated list of directorries where resources are located.
  110.     /// When CResourceManager is loading a resource it concatenates local path 
  111.     /// corresponding to a resource with directories from this list and tries to 
  112.     /// resolve the resultant path. If path exists - resource is loaded using this path
  113.     CResourceManager(const string& dir_list);
  114.     /// register symbolic name (alias) for a resource identified by "local_path"
  115.     void    RegisterAlias(const string& alias, const string& local_path);
  116.     CFLTKImageHandle    GetImage(const string& alias);
  117. protected:
  118.     typedef list<string>    TDirList;
  119.     typedef map<string, string>     TAliasToPathMap;
  120.     typedef map<string, CFLTKImageHandle>   TAliasToImageMap;
  121.     TDirList    m_DirList; // directories where resources are located
  122.     TAliasToPathMap     m_AliasToPath;
  123.     TAliasToImageMap    m_AliasToImage;
  124. };
  125. END_NCBI_SCOPE
  126. /* @} */
  127. /*
  128.  * ===========================================================================
  129.  * $Log: resource_manager.hpp,v $
  130.  * Revision 1000.0  2004/06/01 19:56:47  gouriano
  131.  * PRODUCTION: IMPORTED [GCC34_MSVC7] Dev-tree R1.5
  132.  *
  133.  * Revision 1.5  2004/05/13 17:24:22  yazhuk
  134.  * Added "disabled" argument to CPNGImageExt::DrawTransparent()
  135.  *
  136.  * Revision 1.4  2004/05/11 18:55:14  dicuccio
  137.  * Added doxygen modules info
  138.  *
  139.  * Revision 1.3  2004/05/03 19:48:31  yazhuk
  140.  * Added Fl_PNG_Image class, implemented support for "standard" directories
  141.  *
  142.  * Revision 1.2  2004/05/03 12:47:08  dicuccio
  143.  * Added #include for gui/gui.hpp.  gui/utils ->gui/objutils where needed.
  144.  *
  145.  * Revision 1.1  2004/04/22 16:53:18  yazhuk
  146.  * Initial revision: menu_window.hpp
  147.  *
  148.  * ===========================================================================
  149.  */
  150. #endif  // __GUI_WIDGETS_FL___RESOURCE_MANAGER__HPP