class WXDLLEXPORT wxToolBar: public wxToolBarBase
{
- DECLARE_DYNAMIC_CLASS(wxToolBar)
- public:
- /*
- * Public interface
- */
-
- wxToolBar();
-
- inline wxToolBar(wxWindow *parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,
- long style = wxNO_BORDER|wxTB_HORIZONTAL,
- const wxString& name = wxToolBarNameStr)
- {
- Create(parent, id, pos, size, style, name);
- }
- ~wxToolBar();
-
- bool Create(wxWindow *parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,
- long style = wxNO_BORDER|wxTB_HORIZONTAL,
- const wxString& name = wxToolBarNameStr);
-
- // Call default behaviour
- void OnMouseEvent(wxMouseEvent& event);
-
- // If pushedBitmap is NULL, a reversed version of bitmap is
- // created and used as the pushed/toggled image.
- // If toggle is TRUE, the button toggles between the two states.
- wxToolBarTool *AddTool(int toolIndex, const wxBitmap& bitmap, const wxBitmap& pushedBitmap = wxNullBitmap,
- bool toggle = FALSE, long xPos = -1, long yPos = -1, wxObject *clientData = NULL,
- const wxString& helpString1 = "", const wxString& helpString2 = "");
- //Virtual function hiding suppression
- inline wxToolBarTool *AddTool(int toolIndex, const wxBitmap& bitmap, const wxBitmap& pushedBitmap = wxNullBitmap,
- bool toggle = FALSE, wxCoord xPos = -1, wxCoord yPos = -1, wxObject *clientData = NULL,
- const wxString& helpString1 = "", const wxString& helpString2 = "")
- { return(AddTool(toolIndex, bitmap, pushedBitmap, toggle, (long)xPos, (long)yPos, clientData, helpString1, helpString2)); }
-
- // Set default bitmap size
- void SetToolBitmapSize(const wxSize& size);
- void EnableTool(int toolIndex, bool enable); // additional drawing on enabling
- void ToggleTool(int toolIndex, bool toggle); // toggle is TRUE if toggled on
- void ClearTools();
-
- // The button size is bigger than the bitmap size
- wxSize GetToolSize() const;
-
- wxSize GetMaxSize() const;
-
- virtual bool GetToolState(int toolIndex) const;
-
- // Add all the buttons
- virtual bool CreateTools();
- virtual void SetRows(int nRows);
- virtual void LayoutButtons() {}
-
- // The post-tool-addition call
- bool Realize() { return CreateTools(); };
-
- // IMPLEMENTATION
- virtual bool OS2Command(WXUINT param, WXWORD id);
- virtual bool OS2OnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result);
-
- // Responds to colour changes
- void OnSysColourChanged(wxSysColourChangedEvent& event);
+public:
+ /*
+ * Public interface
+ */
+
+ wxToolBar() { Init(); }
+
+ inline wxToolBar( wxWindow* pParent
+ ,wxWindowID vId
+ ,const wxPoint& rPos = wxDefaultPosition
+ ,const wxSize& rSize = wxDefaultSize
+ ,long lStyle = wxNO_BORDER|wxTB_HORIZONTAL
+ ,const wxString& rName = wxToolBarNameStr
+ )
+ {
+ Create( pParent
+ ,vId
+ ,rPos
+ ,rSize
+ ,lStyle
+ ,rName
+ );
+ }
+ bool Create( wxWindow* pParent
+ ,wxWindowID vId
+ ,const wxPoint& rPos = wxDefaultPosition
+ ,const wxSize& rSize = wxDefaultSize
+ ,long lStyle = wxNO_BORDER|wxTB_HORIZONTAL
+ ,const wxString& rName = wxToolBarNameStr
+ );
+
+ virtual ~wxToolBar();
+
+ // override/implement base class virtuals
+ virtual wxToolBarToolBase* FindToolForPosition( wxCoord x
+ ,wxCoord y
+ ) const;
+
+ // The post-tool-addition call
+ virtual bool Realize(void);
+
+ virtual void SetToolBitmapSize(const wxSize& rSize);
+ virtual wxSize GetToolSize(void) const;
+
+ virtual void SetRows(int nRows);
+
+ // IMPLEMENTATION
+ virtual bool OS2Command( WXUINT uParam
+ ,WXWORD wId
+ );
+ virtual bool OS2OnNotify( int nCtrl
+ ,WXLPARAM lParam
+ ,WXLPARAM* pResult
+ );
+ void OnMouseEvent(wxMouseEvent& rEvent);
+ void OnSysColourChanged(wxSysColourChangedEvent& rEvent);
protected:
- WXHBITMAP m_hBitmap;
-
-DECLARE_EVENT_TABLE()
+ void Init(void);
+ // implement base class pure virtuals
+ virtual bool DoInsertTool(size_t pos, wxToolBarToolBase *tool);
+ virtual bool DoDeleteTool(size_t pos, wxToolBarToolBase *tool);
+
+ virtual void DoEnableTool(wxToolBarToolBase *tool, bool enable);
+ virtual void DoToggleTool(wxToolBarToolBase *tool, bool toggle);
+ virtual void DoSetToggle(wxToolBarToolBase *tool, bool toggle);
+
+ virtual wxToolBarToolBase* CreateTool( int vId
+ ,const wxBitmap& rBitmap1
+ ,const wxBitmap& rBitmap2
+ ,bool bToggle
+ ,wxObject* pClientData
+ ,const wxString& rShortHelpString
+ ,const wxString& rLongHelpString
+ );
+ virtual wxToolBarToolBase* CreateTool(wxControl* pControl);
+
+ // should be called whenever the toolbar size changes
+ void UpdateSize(void);
+
+ // override WndProc to process WM_SIZE
+ virtual MRESULT OS2WindowProc( HWND hWnd
+ ,WXUINT ulMsg
+ ,WXWPARAM wParam
+ ,WXLPARAM lParam
+ );
+
+ // the big bitmap containing all bitmaps of the toolbar buttons
+ WXHBITMAP m_hBitmap;
+
+ // the total number of toolbar elements
+ size_t m_nButtons;
+
+private:
+ DECLARE_EVENT_TABLE()
+ DECLARE_DYNAMIC_CLASS(wxToolBar)
};
#endif // wxUSE_TOOLBAR
wxImageRefData::~wxImageRefData()
{
- if (m_data)
+ if (m_data)
free( m_data );
}
wxBufferedInputStream bstream( stream );
return LoadFile(bstream, type);
}
- else
+ else
{
wxLogError( _("Can't load image from file '%s': file does not exist."), filename.c_str() );
wxBufferedInputStream bstream( stream );
return LoadFile(bstream, mimetype);
}
- else
+ else
{
wxLogError( _("Can't load image from file '%s': file does not exist."), filename.c_str() );
int height = GetHeight();
// Create picture
-
+
wxBitmap bitmap( width , height , wxDisplayDepth() ) ;
-
+
// Create mask
-
+
if (HasMask())
{
/*
unsigned char *mask_data = (unsigned char*)malloc( ((width >> 3)+8) * height );
-
+
mask_image = gdk_image_new_bitmap( gdk_visual_get_system(), mask_data, width, height );
-
+
wxMask *mask = new wxMask();
mask->m_bitmap = gdk_pixmap_new( (GdkWindow*)&gdk_root_parent, width, height, 1 );
-
+
bitmap.SetMask( mask );
*/
}
-
+
// Render
-
+
int r_mask = GetMaskRed();
int g_mask = GetMaskGreen();
int b_mask = GetMaskBlue();
-
+
CGrafPtr origPort ;
GDHandle origDevice ;
SetGWorld( bitmap.GetHBITMAP() , NULL ) ;
register unsigned char* data = GetData();
-
+
int index = 0;
for (int y = 0; y < height; y++)
{
unsigned char r = data[index++];
unsigned char g = data[index++];
unsigned char b = data[index++];
-
+
if ( r != lastr || g != lastg || b != lastb )
{
lastcolor.red = ( lastr << 8 ) + lastr ;
} // for height
SetGWorld( origPort , origDevice ) ;
-
+
return bitmap;
-
+
}
wxImage::wxImage( const wxBitmap &bitmap )
wxFAIL_MSG( "invalid bitmap" );
return;
}
-
+
// create an wxImage object
int width = bitmap.GetWidth();
int height = bitmap.GetHeight();
- Create( width, height );
+ Create( width, height );
/*
unsigned char *data = GetData();
if( !data )
wxFAIL_MSG( "could not allocate data for image" );
return;
}
-
+
// calc the number of bytes per scanline and padding in the DIB
int bytePerLine = width*3;
int sizeDWORD = sizeof( DWORD );
div_t lineBoundary = div( bytePerLine, sizeDWORD );
int padding = 0;
- if( lineBoundary.rem > 0 )
+ if( lineBoundary.rem > 0 )
{
padding = sizeDWORD - lineBoundary.rem;
bytePerLine += padding;
}
-
+
// create a DIB header
int headersize = sizeof(BITMAPINFOHEADER);
LPBITMAPINFO lpDIBh = (BITMAPINFO *) malloc( headersize );
free( lpDIBh );
return;
}
-
+
// copy data from the device-dependent bitmap to the DIB
HDC hdc = ::GetDC(NULL);
HBITMAP hbitmap;
hbitmap = (HBITMAP) bitmap.GetHBITMAP();
::GetDIBits( hdc, hbitmap, 0, height, lpBits, lpDIBh, DIB_RGB_COLORS );
-
+
// copy DIB data into the wxImage object
int i, j;
unsigned char *ptdata = data;
}
ptbits += padding;
}
-
+
// similarly, set data according to the possible mask bitmap
if( bitmap.GetMask() && bitmap.GetMask()->GetMaskBitmap() )
{
::SetTextColor( memdc, RGB( 0, 0, 0 ) );
::SetBkColor( memdc, RGB( 255, 255, 255 ) );
::GetDIBits( memdc, hbitmap, 0, height, lpBits, lpDIBh, DIB_RGB_COLORS );
- ::DeleteDC( memdc );
+ ::DeleteDC( memdc );
// background color set to RGB(16,16,16) in consistent with wxGTK
- unsigned char r=16, g=16, b=16;
+ unsigned char r=16, g=16, b=16;
ptdata = data;
ptbits = lpBits;
for( i=0; i<height; i++ )
ptbits += 3;
}
ptbits += padding;
- }
+ }
SetMaskColour( r, g, b );
SetMask( TRUE );
}
{
SetMask( FALSE );
}
- // free allocated resources
- ::ReleaseDC(NULL, hdc);
+ // free allocated resources
+ ::ReleaseDC(NULL, hdc);
free(lpDIBh);
free(lpBits);
*/
else
{
hnode = new wxHNode();
- hnode->index = nentries++;
+ hnode->index = nentries++;
hnode->value = 1;
h.Put(key, (wxObject *)hnode);