Applied patch [ 791573 ] New feature for FL toorbar buttons
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@25125 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -74,6 +74,7 @@ protected:
|
|||||||
bool mDragStarted;
|
bool mDragStarted;
|
||||||
bool mIsPressed;
|
bool mIsPressed;
|
||||||
bool mIsInFocus;
|
bool mIsInFocus;
|
||||||
|
bool mIsToggled;
|
||||||
|
|
||||||
bool mHasFocusedBmp;
|
bool mHasFocusedBmp;
|
||||||
|
|
||||||
@@ -106,6 +107,10 @@ protected:
|
|||||||
// Returns TRUE if the given point is in the window.
|
// Returns TRUE if the given point is in the window.
|
||||||
bool IsInWindow( int x, int y );
|
bool IsInWindow( int x, int y );
|
||||||
|
|
||||||
|
virtual void OnIdle(wxIdleEvent& event);
|
||||||
|
// (EVT_UPDATE_UI handler)
|
||||||
|
virtual void DoButtonUpdate();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
// Constructor.
|
// Constructor.
|
||||||
@@ -176,6 +181,9 @@ public:
|
|||||||
// Enables/disables button
|
// Enables/disables button
|
||||||
virtual bool Enable(bool enable);
|
virtual bool Enable(bool enable);
|
||||||
|
|
||||||
|
// Depress button
|
||||||
|
virtual bool Toggle(bool enable);
|
||||||
|
|
||||||
// Responds to a left mouse button down event.
|
// Responds to a left mouse button down event.
|
||||||
void OnLButtonDown( wxMouseEvent& event );
|
void OnLButtonDown( wxMouseEvent& event );
|
||||||
|
|
||||||
|
@@ -222,13 +222,15 @@ BEGIN_EVENT_TABLE( wxNewBitmapButton, wxPanel )
|
|||||||
|
|
||||||
EVT_ERASE_BACKGROUND( wxNewBitmapButton::OnEraseBackground )
|
EVT_ERASE_BACKGROUND( wxNewBitmapButton::OnEraseBackground )
|
||||||
|
|
||||||
|
EVT_IDLE(wxNewBitmapButton::OnIdle)
|
||||||
|
|
||||||
END_EVENT_TABLE()
|
END_EVENT_TABLE()
|
||||||
|
|
||||||
wxNewBitmapButton::wxNewBitmapButton( const wxBitmap& labelBitmap,
|
wxNewBitmapButton::wxNewBitmapButton( const wxBitmap& labelBitmap,
|
||||||
const wxString& labelText,
|
const wxString& labelText,
|
||||||
int alignText,
|
int alignText,
|
||||||
bool isFlat,
|
bool isFlat,
|
||||||
int firedEventType,
|
int firedEventType,
|
||||||
int marginX,
|
int marginX,
|
||||||
int marginY,
|
int marginY,
|
||||||
int textToLabelGap,
|
int textToLabelGap,
|
||||||
@@ -249,9 +251,10 @@ wxNewBitmapButton::wxNewBitmapButton( const wxBitmap& labelBitmap,
|
|||||||
mpFocusedImg ( NULL ),
|
mpFocusedImg ( NULL ),
|
||||||
|
|
||||||
|
|
||||||
mDragStarted ( FALSE ),
|
mDragStarted ( FALSE ),
|
||||||
mIsPressed ( FALSE ),
|
mIsPressed ( FALSE ),
|
||||||
mIsInFocus( FALSE ),
|
mIsInFocus ( FALSE ),
|
||||||
|
mIsToggled ( FALSE ),
|
||||||
mHasFocusedBmp( FALSE ),
|
mHasFocusedBmp( FALSE ),
|
||||||
mFiredEventType( firedEventType ),
|
mFiredEventType( firedEventType ),
|
||||||
|
|
||||||
@@ -292,9 +295,10 @@ wxNewBitmapButton::wxNewBitmapButton( const wxString& bitmapFileName,
|
|||||||
mpDisabledImg ( NULL ),
|
mpDisabledImg ( NULL ),
|
||||||
mpFocusedImg ( NULL ),
|
mpFocusedImg ( NULL ),
|
||||||
|
|
||||||
mDragStarted ( FALSE ),
|
mDragStarted ( FALSE ),
|
||||||
mIsPressed ( FALSE ),
|
mIsPressed ( FALSE ),
|
||||||
mIsInFocus ( FALSE ),
|
mIsInFocus ( FALSE ),
|
||||||
|
mIsToggled ( FALSE ),
|
||||||
mHasFocusedBmp( FALSE ),
|
mHasFocusedBmp( FALSE ),
|
||||||
mFiredEventType( wxEVT_COMMAND_MENU_SELECTED ),
|
mFiredEventType( wxEVT_COMMAND_MENU_SELECTED ),
|
||||||
|
|
||||||
@@ -321,11 +325,11 @@ void wxNewBitmapButton::DrawShade( int outerLevel,
|
|||||||
{
|
{
|
||||||
wxBitmap* pBmp = GetStateLabel();
|
wxBitmap* pBmp = GetStateLabel();
|
||||||
|
|
||||||
int x = mMarginX - (outerLevel + 1);
|
int x = mMarginX - (outerLevel + 2);
|
||||||
int y = mMarginY - (outerLevel + 1);
|
int y = mMarginY - (outerLevel + 2);
|
||||||
|
|
||||||
int height = pBmp->GetHeight() + (outerLevel + 1)*2 - 1;
|
int height = pBmp->GetHeight() + (outerLevel + 2)*2 - 1;
|
||||||
int width = pBmp->GetWidth() + (outerLevel + 1)*2 - 1;
|
int width = pBmp->GetWidth() + (outerLevel + 2)*2 - 1;
|
||||||
|
|
||||||
dc.SetPen( upperLeftSidePen );
|
dc.SetPen( upperLeftSidePen );
|
||||||
dc.DrawLine( x,y, x + width, y );
|
dc.DrawLine( x,y, x + width, y );
|
||||||
@@ -410,7 +414,7 @@ void wxNewBitmapButton::RenderLabelImage( wxBitmap*& destBmp, wxBitmap* srcBmp,
|
|||||||
{
|
{
|
||||||
destDim.x = srcBmp->GetWidth() + 2*mTextToLabelGap + txtWidth;
|
destDim.x = srcBmp->GetWidth() + 2*mTextToLabelGap + txtWidth;
|
||||||
|
|
||||||
destDim.y =
|
destDim.y =
|
||||||
wxMax( srcBmp->GetHeight(), txtHeight );
|
wxMax( srcBmp->GetHeight(), txtHeight );
|
||||||
|
|
||||||
txtPos.x = srcBmp->GetWidth() + mTextToLabelGap;
|
txtPos.x = srcBmp->GetWidth() + mTextToLabelGap;
|
||||||
@@ -421,7 +425,7 @@ void wxNewBitmapButton::RenderLabelImage( wxBitmap*& destBmp, wxBitmap* srcBmp,
|
|||||||
else
|
else
|
||||||
if ( mTextAlignment == NB_ALIGN_TEXT_BOTTOM )
|
if ( mTextAlignment == NB_ALIGN_TEXT_BOTTOM )
|
||||||
{
|
{
|
||||||
destDim.x =
|
destDim.x =
|
||||||
wxMax( srcBmp->GetWidth(), txtWidth );
|
wxMax( srcBmp->GetWidth(), txtWidth );
|
||||||
|
|
||||||
destDim.y = srcBmp->GetHeight() + mTextToLabelGap + txtHeight;
|
destDim.y = srcBmp->GetHeight() + mTextToLabelGap + txtHeight;
|
||||||
@@ -431,7 +435,7 @@ void wxNewBitmapButton::RenderLabelImage( wxBitmap*& destBmp, wxBitmap* srcBmp,
|
|||||||
imgPos.x = (destDim.x - srcBmp->GetWidth())/2;
|
imgPos.x = (destDim.x - srcBmp->GetWidth())/2;
|
||||||
imgPos.y = 0;
|
imgPos.y = 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
wxFAIL_MSG(wxT("Unsupported FL alignment type detected in wxNewBitmapButton::RenderLabelImage()"));
|
wxFAIL_MSG(wxT("Unsupported FL alignment type detected in wxNewBitmapButton::RenderLabelImage()"));
|
||||||
}
|
}
|
||||||
@@ -466,7 +470,7 @@ void wxNewBitmapButton::RenderLabelImage( wxBitmap*& destBmp, wxBitmap* srcBmp,
|
|||||||
if ( hasImage )
|
if ( hasImage )
|
||||||
{
|
{
|
||||||
|
|
||||||
destDc.Blit( imgPos.x, imgPos.y,
|
destDc.Blit( imgPos.x, imgPos.y,
|
||||||
srcBmp->GetWidth()+1,
|
srcBmp->GetWidth()+1,
|
||||||
srcBmp->GetHeight()+1,
|
srcBmp->GetHeight()+1,
|
||||||
&srcDc, 0,0, wxCOPY,TRUE );
|
&srcDc, 0,0, wxCOPY,TRUE );
|
||||||
@@ -502,7 +506,7 @@ void wxNewBitmapButton::RenderLabelImage( wxBitmap*& destBmp, wxBitmap* srcBmp,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ( !isEnabled ){
|
if ( !isEnabled ){
|
||||||
|
|
||||||
#ifdef __WXMSW__ // This is currently MSW specific
|
#ifdef __WXMSW__ // This is currently MSW specific
|
||||||
gray_out_image_on_dc( destDc, destDim.x, destDim.y );
|
gray_out_image_on_dc( destDc, destDim.x, destDim.y );
|
||||||
#else
|
#else
|
||||||
@@ -515,18 +519,18 @@ void wxNewBitmapButton::RenderLabelImage( wxBitmap*& destBmp, wxBitmap* srcBmp,
|
|||||||
// adjust button size to fit the new dimensions of the label
|
// adjust button size to fit the new dimensions of the label
|
||||||
if ( !mSizeIsSet && 0 )
|
if ( !mSizeIsSet && 0 )
|
||||||
{
|
{
|
||||||
mSizeIsSet = TRUE;
|
mSizeIsSet = TRUE;
|
||||||
SetSize( -1,-1,
|
SetSize( -1,-1,
|
||||||
destBmp->GetWidth() + mMarginX*2,
|
destBmp->GetWidth() + mMarginX*2,
|
||||||
destBmp->GetHeight() + mMarginY*2, 0
|
destBmp->GetHeight() + mMarginY*2, 0
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
destDc.SelectObject( wxNullBitmap );
|
destDc.SelectObject( wxNullBitmap );
|
||||||
|
|
||||||
#if defined(__WXMSW__) && !defined(__WXUNIVERSAL__)
|
#if defined(__WXMSW__) && !defined(__WXUNIVERSAL__)
|
||||||
// Map to system colours
|
// Map to system colours
|
||||||
(void) wxToolBar::MapBitmap(destBmp->GetHBITMAP(), destBmp->GetWidth(), destBmp->GetHeight());
|
(void) wxToolBar::MapBitmap(destBmp->GetHBITMAP(), destBmp->GetWidth(), destBmp->GetHeight());
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxNewBitmapButton::RenderAllLabelImages()
|
void wxNewBitmapButton::RenderAllLabelImages()
|
||||||
@@ -541,7 +545,7 @@ void wxNewBitmapButton::RenderAllLabelImages()
|
|||||||
RenderLabelImage( mpFocusedImg, &mFocusedBmp, TRUE, FALSE );
|
RenderLabelImage( mpFocusedImg, &mFocusedBmp, TRUE, FALSE );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void wxNewBitmapButton::RenderLabelImages()
|
void wxNewBitmapButton::RenderLabelImages()
|
||||||
{
|
{
|
||||||
@@ -554,7 +558,7 @@ void wxNewBitmapButton::RenderLabelImages()
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
||||||
if ( mIsPressed )
|
if ( mIsPressed )
|
||||||
|
|
||||||
RenderLabelImage( mpPressedImg, &mDepressedBmp, TRUE, TRUE );
|
RenderLabelImage( mpPressedImg, &mDepressedBmp, TRUE, TRUE );
|
||||||
else
|
else
|
||||||
@@ -571,6 +575,19 @@ void wxNewBitmapButton::RenderLabelImages()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool wxNewBitmapButton::Toggle(bool enable)
|
||||||
|
{
|
||||||
|
if ( mIsToggled == enable )
|
||||||
|
{
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
mIsToggled = enable;
|
||||||
|
Refresh();
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
bool wxNewBitmapButton::Enable(bool enable)
|
bool wxNewBitmapButton::Enable(bool enable)
|
||||||
{
|
{
|
||||||
if ( enable != m_isEnabled )
|
if ( enable != m_isEnabled )
|
||||||
@@ -596,8 +613,11 @@ void wxNewBitmapButton::DrawDecorations( wxDC& dc )
|
|||||||
if ( mIsFlat )
|
if ( mIsFlat )
|
||||||
{
|
{
|
||||||
DrawShade( 1, dc, mGrayPen, mGrayPen );
|
DrawShade( 1, dc, mGrayPen, mGrayPen );
|
||||||
|
if ( mIsToggled )
|
||||||
if ( mIsInFocus )
|
{
|
||||||
|
DrawShade( 0, dc, mDarkPen, mLightPen );
|
||||||
|
}
|
||||||
|
else if ( mIsInFocus )
|
||||||
{
|
{
|
||||||
if ( mIsPressed )
|
if ( mIsPressed )
|
||||||
DrawShade( 0, dc, mDarkPen, mLightPen );
|
DrawShade( 0, dc, mDarkPen, mLightPen );
|
||||||
@@ -609,7 +629,7 @@ void wxNewBitmapButton::DrawDecorations( wxDC& dc )
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ( mIsPressed )
|
if ( mIsPressed || mIsToggled )
|
||||||
{
|
{
|
||||||
DrawShade( 0, dc, mDarkPen, mGrayPen );
|
DrawShade( 0, dc, mDarkPen, mGrayPen );
|
||||||
DrawShade( 1, dc, mBlackPen, mLightPen );
|
DrawShade( 1, dc, mBlackPen, mLightPen );
|
||||||
@@ -622,7 +642,7 @@ void wxNewBitmapButton::DrawDecorations( wxDC& dc )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxNewBitmapButton::SetLabel(const wxBitmap& labelBitmap,
|
void wxNewBitmapButton::SetLabel(const wxBitmap& labelBitmap,
|
||||||
const wxString& labelText )
|
const wxString& labelText )
|
||||||
{
|
{
|
||||||
DestroyLabels();
|
DestroyLabels();
|
||||||
@@ -799,3 +819,32 @@ void wxNewBitmapButton::OnKillFocus( wxFocusEvent& WXUNUSED(event) )
|
|||||||
wxMessageBox(wxT("kill-focus for button!"));
|
wxMessageBox(wxT("kill-focus for button!"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// UI updates
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void wxNewBitmapButton::OnIdle(wxIdleEvent& event)
|
||||||
|
{
|
||||||
|
DoButtonUpdate();
|
||||||
|
|
||||||
|
event.Skip();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Do the toolbar button updates (check for EVT_UPDATE_UI handlers)
|
||||||
|
void wxNewBitmapButton::DoButtonUpdate()
|
||||||
|
{
|
||||||
|
wxUpdateUIEvent event(GetId());
|
||||||
|
event.SetEventObject(this);
|
||||||
|
|
||||||
|
if ( GetParent()->ProcessEvent(event) )
|
||||||
|
{
|
||||||
|
if ( event.GetSetEnabled() )
|
||||||
|
{
|
||||||
|
bool enabled = event.GetEnabled();
|
||||||
|
if ( enabled != IsEnabled() )
|
||||||
|
Enable( enabled );
|
||||||
|
}
|
||||||
|
if ( event.GetSetChecked() )
|
||||||
|
Toggle( event.GetChecked() );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user