/////////////////////////////////////////////////////////////////////////////
// Name:        icon.cpp
// Purpose:     wxIcon class
// Author:      AUTHOR
// Modified by:
// Created:     ??/??/98
// RCS-ID:      $Id$
// Copyright:   (c) AUTHOR
// Licence:   	wxWindows licence
/////////////////////////////////////////////////////////////////////////////

#ifdef __GNUG__
#pragma implementation "icon.h"
#endif

#include "wx/icon.h"

IMPLEMENT_DYNAMIC_CLASS(wxIcon, wxBitmap)

/*
 * Icons
 */


wxIconRefData::wxIconRefData()
{
    m_ok = FALSE;
    m_width = 0;
    m_height = 0;
    m_depth = 0;
    m_quality = 0;
    m_numColors = 0;
    m_bitmapMask = NULL;
		m_hBitmap = NULL ;
		m_hIcon = NULL ;
}

wxIconRefData::~wxIconRefData()
{
	if ( m_hIcon )
	{
		DisposeCIcon( m_hIcon ) ;
		m_hIcon = NULL ;
	}
		
  if (m_bitmapMask)
  {
    delete m_bitmapMask;
    m_bitmapMask = NULL;
  }
}

wxIcon::wxIcon()
{
}

wxIcon::wxIcon(const char WXUNUSED(bits)[], int WXUNUSED(width), int WXUNUSED(height))
{
}

wxIcon::wxIcon(const wxString& icon_file, long flags,
    int desiredWidth, int desiredHeight)

{
    LoadFile(icon_file, flags, desiredWidth, desiredHeight);
}

wxIcon::~wxIcon()
{
}

bool wxIcon::LoadFile(const wxString& filename, long type,
    int desiredWidth, int desiredHeight)
{
  UnRef();

  m_refData = new wxIconRefData;

  wxBitmapHandler *handler = FindHandler(type);

  if ( handler )
	return handler->LoadFile(this, filename, type, desiredWidth, desiredHeight);
  else
	return FALSE;
}

IMPLEMENT_DYNAMIC_CLASS(wxICONResourceHandler, wxBitmapHandler)

bool  wxICONResourceHandler::LoadFile(wxBitmap *bitmap, const wxString& name, long flags,
          int desiredWidth, int desiredHeight)
{
	Str255 theName ;
	short theId ;
	OSType theType ;
	strcpy( (char*) theName , name ) ;
	c2pstr( (char*) theName ) ;
	
	Handle resHandle = GetNamedResource( 'cicn' , theName ) ;
	GetResInfo( resHandle , &theId , &theType , theName ) ;
	ReleaseResource( resHandle ) ;
	
	CIconHandle theIcon = (CIconHandle ) GetCIcon( theId ) ;
	if ( theIcon )
	{
		M_ICONHANDLERDATA->m_hIcon = theIcon ;
		M_ICONHANDLERDATA->m_width =  32 ;
		M_ICONHANDLERDATA->m_height = 32 ;
		
		M_ICONHANDLERDATA->m_depth = 8 ;
		M_ICONHANDLERDATA->m_ok = true ;
		M_ICONHANDLERDATA->m_numColors = 256 ;
		return TRUE ;
	}
	return FALSE ;
}
