]> git.saurik.com Git - wxWidgets.git/commitdiff
Applied [ 516382 ] FL toolbar patch
authorJulian Smart <julian@anthemion.co.uk>
Wed, 6 Mar 2002 19:05:25 +0000 (19:05 +0000)
committerJulian Smart <julian@anthemion.co.uk>
Wed, 6 Mar 2002 19:05:25 +0000 (19:05 +0000)
This patch addresses following issues on FL dynamic
toolbar:

* Removes duplicate code in
wxNewBitmapButton::RenderLabelImage(). (The code
between line 452-500 and 502-550 is the same.)

* Adds wxNewBitmapButton::Enable() own method to proper
drawing of enabled/disabled buttons.

* Changes "focused" state (of wxNewBitmapButton)
implementation from EVT_MOTION to
EVT_ENTER/LEAVE_WINDOW pair, because capturing mouse in
EVT_MOTION handler blocks some key events (control
characters, function keys), so underlynig app doesn't
receive all key events when mouse pointer is above
toolbar button.
Also "prev" state member variables are removed by this
patch (and IMHO they should be removed regardles on
accepting this patch - they are initalized and used
only in wxNewBitmapButton::OnMouseMove() method).
(Note: Blocking some keys can be only MSW problem, but
I can't verify it.)

* Adds EVT_LEFT_DCLICK handler to wxNewBitmapButton -
without this handler, toolbar button loses second
clicks if user presses left mouse button "fast enough".
Unfortunately, it doesn't handle drawing of
pressed/released button - it's only one event in
contrast to EVT_LEFT_UP/DOWN.

* Enables tooltips (in proper
wxDynamicToolBar::AddTool() method).

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@14467 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

contrib/include/wx/fl/newbmpbtn.h
contrib/src/fl/dyntbar.cpp
contrib/src/fl/newbmpbtn.cpp

index 609923f41797dc6fe2dec5a1427e007af6170014..455b54aad5c15dc2ec30a3b92641be20747d2876 100644 (file)
@@ -70,8 +70,6 @@ protected:
     bool      mDragStarted;
     bool      mIsPressed;
     bool      mIsInFocus;
-    bool      mPrevPressedState;
-    bool      mPrevInFocusState;
 
     bool      mHasFocusedBmp;
 
@@ -166,14 +164,23 @@ public:
         // Renders label images.
     virtual void RenderAllLabelImages();
 
+        // Enables/disables button
+    virtual bool Enable(bool enable);
+
         // Responds to a left mouse button down event.
     void OnLButtonDown( wxMouseEvent& event );
 
         // Responds to a left mouse button up event.
     void OnLButtonUp( wxMouseEvent& event );
 
-        // Responds to a mouse move event.
-    void OnMouseMove( wxMouseEvent& event );
+        // Responds to a left mouse button double click.
+    void OnLButtonDClick( wxMouseEvent& event );
+
+        // Responds to mouse enter to window.
+    void OnMouseEnter( wxMouseEvent& event );
+
+        // Responds to mouse leave from window.
+    void OnMouseLeave( wxMouseEvent& event );
 
         // Responds to a size event.
     void OnSize( wxSizeEvent& event );
index 549d6899167f311227cdb58179c21d55af002cf5..865c73686bc7efe9b5a4a40404a64e64ed9617e5 100644 (file)
@@ -185,6 +185,10 @@ wxToolBarToolBase*
 
     pBmpBtn->Reshape();
 
+#if wxUSE_TOOLTIPS
+    pBmpBtn->SetToolTip( helpString1 );
+#endif  // wxUSE_TOOLTIPS
+
     AddTool( toolIndex, pBmpBtn );
 
     return NULL;
index 968302b68f585333b625b2ea0792b7143b33da6f..b811e40c124e5e6e4f8b49fb63c7b9c137c5c8d8 100644 (file)
@@ -204,9 +204,11 @@ IMPLEMENT_DYNAMIC_CLASS(wxNewBitmapButton, wxPanel)
 
 BEGIN_EVENT_TABLE( wxNewBitmapButton, wxPanel )
 
-    EVT_LEFT_DOWN( wxNewBitmapButton::OnLButtonDown )
-    EVT_LEFT_UP  ( wxNewBitmapButton::OnLButtonUp   )
-    EVT_MOTION   ( wxNewBitmapButton::OnMouseMove   )
+    EVT_LEFT_DOWN   ( wxNewBitmapButton::OnLButtonDown   )
+    EVT_LEFT_UP     ( wxNewBitmapButton::OnLButtonUp     )
+    EVT_LEFT_DCLICK ( wxNewBitmapButton::OnLButtonDClick )
+    EVT_ENTER_WINDOW( wxNewBitmapButton::OnMouseEnter    )
+    EVT_LEAVE_WINDOW( wxNewBitmapButton::OnMouseLeave    )
 
     EVT_SIZE ( wxNewBitmapButton::OnSize  )
     EVT_PAINT( wxNewBitmapButton::OnPaint )
@@ -245,8 +247,6 @@ wxNewBitmapButton::wxNewBitmapButton( const wxBitmap& labelBitmap,
         mDragStarted     ( FALSE ),
         mIsPressed       ( FALSE ),
         mIsInFocus( FALSE ),
-        mPrevPressedState( FALSE ),
-        mPrevInFocusState( FALSE ),
         mHasFocusedBmp( FALSE ),
         mFiredEventType( firedEventType ),
 
@@ -290,8 +290,6 @@ wxNewBitmapButton::wxNewBitmapButton( const wxString& bitmapFileName,
         mDragStarted     ( FALSE ),
         mIsPressed       ( FALSE ),
         mIsInFocus       ( FALSE ),
-        mPrevPressedState( FALSE ),
-        mPrevInFocusState( FALSE ),
         mHasFocusedBmp( FALSE ),
         mFiredEventType( wxEVT_COMMAND_MENU_SELECTED ),
 
@@ -449,56 +447,6 @@ void wxNewBitmapButton::RenderLabelImage( wxBitmap*& destBmp, wxBitmap* srcBmp,
     wxBrush grayBrush( wxSystemSettings::GetColour( wxSYS_COLOUR_3DFACE), wxSOLID );
     wxPen   nullPen( wxColour(0,0,0), 1, wxTRANSPARENT );
 
-    destDc.SetBrush( grayBrush );
-    destDc.SetPen( nullPen );
-
-    destDc.DrawRectangle( 0,0, destDim.x+1, destDim.y+1 );
-
-    if ( isPressed )
-    {
-        ++imgPos.x; ++imgPos.y;
-        ++txtPos.x; ++txtPos.y;
-    }
-
-    if ( hasImage )
-    {
-
-        destDc.Blit( imgPos.x, imgPos.y, 
-                 srcBmp->GetWidth()+1,
-                 srcBmp->GetHeight()+1,
-                 &srcDc, 0,0, wxCOPY,TRUE );
-    }
-
-    if ( hasText )
-    {
-        wxWindow* pTopWnd = this;
-
-        do
-        {
-            wxWindow* pParent = pTopWnd->GetParent();
-
-            if ( pParent == 0 )
-                break;
-
-            pTopWnd = pParent;
-        } while (1);
-
-        destDc.SetFont( wxSystemSettings::GetFont( wxSYS_DEFAULT_GUI_FONT) );
-
-        if ( isEnabled )
-        {
-            destDc.SetTextForeground( wxSystemSettings::GetColour(wxSYS_COLOUR_BTNTEXT) );
-        }
-        else
-        {
-            destDc.SetTextForeground( wxSystemSettings::GetColour(wxSYS_COLOUR_3DSHADOW) );
-        }
-        destDc.SetTextBackground( wxSystemSettings::GetColour(wxSYS_COLOUR_BTNFACE) );
-
-        destDc.DrawText( mLabelText, txtPos.x, txtPos.y );
-    }
-
-
     destDc.SetBrush( grayBrush );
     destDc.SetPen( nullPen );
 
@@ -611,6 +559,26 @@ void wxNewBitmapButton::RenderLabelImages()
     }
 }
 
+bool wxNewBitmapButton::Enable(bool enable)
+{
+    if ( enable != m_isEnabled )
+    {
+        if ( mIsInFocus )
+        {
+            mIsInFocus = FALSE;
+        }
+
+        if ( mIsPressed )
+        {
+            mIsPressed = FALSE;
+        }
+
+        Refresh();
+    }
+
+    return wxPanel::Enable( enable );
+}
+
 void wxNewBitmapButton::DrawDecorations( wxDC& dc )
 {
     if ( mIsFlat )
@@ -674,13 +642,9 @@ void wxNewBitmapButton::SetAlignments( int alignText,
 
 void wxNewBitmapButton::OnLButtonDown( wxMouseEvent& event )
 {
-    mPrevPressedState = FALSE;   
     mDragStarted      = TRUE;
     mIsPressed        = TRUE;
     Refresh();
-
-    if ( !mIsInFocus )
-            CaptureMouse();
 }
 
 void wxNewBitmapButton::OnLButtonUp( wxMouseEvent& event )
@@ -690,17 +654,29 @@ void wxNewBitmapButton::OnLButtonUp( wxMouseEvent& event )
 
     mDragStarted = FALSE;
     mIsPressed   = FALSE;
-    mIsInFocus   = FALSE;
     Refresh();
 
-    ReleaseMouse();
+    if ( IsInWindow( event.m_x, event.m_y ) ) 
+    {
+        // fire event, if mouse was released
+        // within the bounds of button
+        wxCommandEvent cmd( mFiredEventType, GetId() );
+        GetParent()->ProcessEvent( cmd );
+    }
+}
 
+void wxNewBitmapButton::OnLButtonDClick( wxMouseEvent& event )
+{
     if ( IsInWindow( event.m_x, event.m_y ) ) 
     {
         // fire event, if mouse was released
         // within the bounds of button
         wxCommandEvent cmd( mFiredEventType, GetId() );
         GetParent()->ProcessEvent( cmd );
+
+        mDragStarted = FALSE;
+        mIsPressed   = FALSE;
+        Refresh();
     }
 }
 
@@ -714,37 +690,30 @@ bool wxNewBitmapButton::IsInWindow( int x, int y )
              y < height );
 }
 
-void wxNewBitmapButton::OnMouseMove( wxMouseEvent& event )
+void wxNewBitmapButton::OnMouseEnter( wxMouseEvent& event )
 {
-    mPrevPressedState=mIsPressed;
-    mPrevInFocusState=mIsInFocus;
-    if ( !mIsInFocus && IsInWindow( event.m_x, event.m_y ) )
-    {
-        if ( !mDragStarted )
-            CaptureMouse();
+    bool prevIsInFocus = mIsInFocus;
 
+    if ( !mIsInFocus )
+    {
         mIsInFocus = TRUE;
     }
-    else
-    if ( mIsInFocus && !IsInWindow( event.m_x, event.m_y ) )
+    if ( prevIsInFocus != mIsInFocus )
     {
-        mIsInFocus = FALSE;
-
-        if ( !mDragStarted )
-            ReleaseMouse();
+        Refresh();
     }
+}
 
-    if ( mDragStarted )
+void wxNewBitmapButton::OnMouseLeave( wxMouseEvent& event )
+{
+    bool prevIsInFocus = mIsInFocus;
+    bool prevIsPressed = mIsPressed;
+    if ( mIsInFocus )
     {
-        if ( IsInWindow( event.m_x, event.m_y ) )
-
-            mIsPressed = TRUE;
-        else
-            mIsPressed = FALSE;
+        mIsInFocus = FALSE;
+        mIsPressed = FALSE;
     }
-
-    if ((mIsPressed != mPrevPressedState) ||
-        (mIsInFocus!=mPrevInFocusState))
+    if ( prevIsInFocus != mIsInFocus || prevIsPressed != mIsPressed )
     {
         Refresh();
     }