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 / src / common / iconbndl.cpp < prev    next >
C/C++ Source or Header  |  2002-06-18  |  3KB  |  132 lines

  1. /////////////////////////////////////////////////////////////////////////////
  2. // Name:        iconbndl.cpp
  3. // Purpose:     wxIconBundle
  4. // Author:      Mattia Barbon
  5. // Created:     23.03.2002
  6. // RCS-ID:      $Id: iconbndl.cpp,v 1.5 2002/06/15 15:04:07 MBN Exp $
  7. // Copyright:   (c) Mattia barbon
  8. // Licence:     wxWindows licence
  9. /////////////////////////////////////////////////////////////////////////////
  10.  
  11. #ifdef __GNUG__
  12.     #pragma implementation "iconbndl.h"
  13. #endif
  14.  
  15. // For compilers that support precompilation, includes "wx.h".
  16. #include "wx/wxprec.h"
  17.  
  18. #ifdef __BORLANDC__
  19.     #pragma hdrstop
  20. #endif
  21.  
  22. #ifndef WX_PRECOMP
  23.     #include "wx/settings.h"
  24.     #include "wx/icon.h"
  25.     #include "wx/log.h"
  26.     #include "wx/intl.h"
  27. #endif
  28.  
  29. #ifndef _WX_IMAGE_H_
  30.     #include "wx/image.h"
  31. #endif
  32.  
  33. #include "wx/iconbndl.h"
  34. #include "wx/arrimpl.cpp"
  35.  
  36. WX_DEFINE_OBJARRAY(wxIconArray)
  37.  
  38. const wxIconBundle& wxIconBundle::operator =( const wxIconBundle& ic )
  39. {
  40.     if( this == &ic ) return *this;
  41.  
  42.     size_t i, max = ic.m_icons.GetCount();
  43.  
  44.     DeleteIcons();
  45.     for( i = 0; i < max; ++i )
  46.         m_icons.Add( ic.m_icons[i] );
  47.  
  48.     return *this;
  49. }
  50.  
  51. void wxIconBundle::DeleteIcons()
  52. {
  53.     m_icons.Empty();
  54. }
  55.  
  56. void wxIconBundle::AddIcon( const wxString& file, long type )
  57. {
  58.     size_t count = wxImage::GetImageCount( file, type );
  59.     size_t i;
  60.     wxImage image;
  61.  
  62.     for( i = 0; i < count; ++i )
  63.     {
  64.         if( !image.LoadFile( file, type, i ) )
  65.         {
  66.             wxLogError( _("Failed to load image %d from file '%s'."),
  67.                         i, file.c_str() );
  68.             continue;
  69.         }
  70.  
  71.         wxIcon* tmp = new wxIcon();
  72.         tmp->CopyFromBitmap( wxBitmap( image ) );
  73.         AddIcon( *tmp );
  74.         delete tmp;
  75.     }
  76. }
  77.  
  78. const wxIcon& wxIconBundle::GetIcon( const wxSize& size ) const
  79. {
  80.     size_t i, max = m_icons.GetCount();
  81.     wxCoord sysX = wxSystemSettings::GetMetric( wxSYS_ICON_X ),
  82.             sysY = wxSystemSettings::GetMetric( wxSYS_ICON_Y );
  83.  
  84.     wxIcon *sysIcon = 0;
  85.     // temp. variable needed to fix Borland C++ 5.5.1 problem
  86.     // with passing a return value through two functions
  87.     wxIcon *tmp;
  88.  
  89.     for( i = 0; i < max; i++ )
  90.     {
  91.         if( !m_icons[i].Ok() )
  92.             continue;
  93.         wxCoord sx = m_icons[i].GetWidth(), sy = m_icons[i].GetHeight();
  94.         // requested size
  95.         if( sx == size.x && sy == size.y )
  96.         {
  97.             tmp = &m_icons[i]; // fix for broken BCC
  98.             return *tmp;
  99.         }
  100.         // keep track if there is a system-size icon
  101.         if( sx == sysX && sy == sysY )
  102.             sysIcon = &m_icons[i];
  103.     }
  104.  
  105.     // return the system-sized icon if we've got one
  106.     if( sysIcon ) return *sysIcon;
  107.     // return the first icon, if we have one
  108.     if( max > 0 ) // fix for broken BCC
  109.         tmp = &m_icons[0];
  110.     else
  111.         tmp = &wxNullIcon;
  112.     return *tmp;
  113. }
  114.  
  115. void wxIconBundle::AddIcon( const wxIcon& icon )
  116. {
  117.     size_t i, max = m_icons.GetCount();
  118.  
  119.     for( i = 0; i < max; ++i )
  120.     {
  121.         wxIcon& tmp = m_icons[i];
  122.         if( tmp.Ok() && tmp.GetWidth() == icon.GetWidth() &&
  123.             tmp.GetHeight() == icon.GetHeight() )
  124.         {
  125.             tmp = icon;
  126.             return;
  127.         }
  128.     }
  129.  
  130.     m_icons.Add( icon );
  131. }
  132.