home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / wxos2233.zip / wxOS2-2_3_3.zip / wxWindows-2.3.3 / docs / tech / tn0015.txt < prev   
Text File  |  2002-04-17  |  4KB  |  94 lines

  1.                 How to add new bitmaps to wxWindows UI elements
  2.                 ===============================================
  3.  
  4. 0. Introduction
  5. ---------------
  6.  
  7. Since the introduction of wxArtProvider class, it is no longer desired to
  8. hardcode art resources (e.g. icons and toolbar or button bitmaps) into the
  9. code. This was previously done either by including the bitmap in win32
  10. resource file (include/wx/msw/wx.rc) or by including XPM files in the code.
  11.  
  12. wxArtProvider should be used instead, to allow users to customize the look of
  13. their wxWindows app. This technote is a detailed description of steps needed
  14. when adding new bitmap/icon.
  15.  
  16. 1. Adding new resource
  17. ----------------------
  18.  
  19. (Please see wxArtProvider reference documentation for explanation of "art ID"
  20.  and "art client" terms.)
  21.  
  22. First of all, you have to add new wxArtID constant to include/wx/artprov.h.
  23. Look for "Art IDs" and add new definition to the list, e.g.
  24.     #define wxART_MY_BITMAP     _T("my_bitmap")
  25.     
  26. Add it to docs/latex/wx/artprov.tex, too.
  27.  
  28. It may happen that the intended use of the new resource doesn't fit into any
  29. of defined client categories (search for "Art clients" in the header). In case
  30. the new resource is part of a larger category, you need to define a new
  31. client. Just add it to the list of existing clients (and don't forget to
  32. update artprov.tex):
  33.     #define wxART_MY_CLIENT _T("my_client_C")
  34. (Note that you *have* to add the trailing "_C"!)
  35.  
  36. Alternatively, you may use wxART_OTHER when accessing the resource if the
  37. bitmap is standalone.
  38.  
  39. Once the header is updated, it's time to add XPM file with the bitmap to
  40. $(wx)/art. Add it to $(wx)/art if it is platform-independent or to
  41. $(wx)/art/$(toolkit) if it is something specific to one of the toolkits. Note
  42. that "specific to one of the toolkits" doesn't mean that the bitmap is *used*
  43. by only one toolkit, but that it doesn't make sense for any of the others! For
  44. example, a GTK wxART_WARNING icon ($(wx)/art/gtk/warning.xpm) is specific to
  45. wxGTK, but new_dir.xpm makes sense even under wxMSW even though it is
  46. currently only used by the generic file dialog. Remember that wxArtProvider
  47. can be used by users, not only the library.
  48.  
  49. Finally, wxDefaultArtProvider in $(wx)/src/common/artstd.cpp must be updated.
  50. This consists of two steps: 
  51.  
  52.   a) add #include line for your XPM file, e.g. #include "../../art/my_bmp.xpm"
  53.   b) add ART(...) line to wxDefaultArtProvider::CreateBitmap(). The first
  54.      argument is wxArtID, the other is XPM file name (w/o extension), e.g.
  55.      ART(wxART_MY_BITMAP, my_bmp)
  56.  
  57. That's all. The bitmap is now available to wxArtProvider users.
  58.  
  59. Note: there's no difference between icons and bitmaps, always treat them as
  60. bitmaps inside wx(Default)ArtProvider.
  61.  
  62. 2. Accessing the resource
  63. -------------------------
  64.  
  65. The file that will use the bitmap needs to include "wx/artprov.h". The code to
  66. access the bitmap (or icon) is trivial:
  67.  
  68.     wxBitmap bmp = wxArtProvider::GetBitmap(wxART_MY_BITMAP, wxART_MY_CLIENT);
  69.         // this would be "wxBitmap bmp(my_bmp_xpm);" before
  70.     wxIcon icon = wxArtProvider::GetIcon(wxART_MY_ICON, wxART_MY_CLIENT);
  71.  
  72. Substitute wxART_MY_CLIENT in the example with a suitable client ID. If the
  73. client is wxART_OTHER you may write only
  74.  
  75.     wxArtProvider::GetBitmap(wxART_MY_BITMAP).
  76.  
  77. 3. Providing a demo
  78. -------------------
  79.  
  80. It is highly desirable to let the users know what stock bitmaps are available
  81. in wxWindows. The "artprov" sample serves this purpose: it contains a browser
  82. dialog that displays all available art resources.
  83.  
  84. It has to be updated to accomodate for new bitmaps. Fortunately, this is
  85. trivial: open $(wx)/samples/artprov/artbrows.cpp in text editor and
  86. ART_ICON(wxART_MY_BITMAP) line to the FillBitmaps() function.
  87.  
  88. Similarly, if you add a new client, please update FillClients() by adding new
  89. client to the end of the list.
  90.  
  91. === EOF ===
  92.  
  93. Version: $Id: tn0015.txt,v 1.3 2002/04/16 23:03:35 VS Exp $
  94.