Update of /cvsroot/audacity/audacity-src/src/widgets In directory sfp-cvsdas-1.v30.ch3.sourceforge.com:/tmp/cvs-serv15328/src/widgets
Modified Files: ASlider.cpp ASlider.h Log Message: Grey-out input volume slider instead of hiding it. The new graphics are not very pretty, and perhaps someone that's good at drawing icons should change them. Index: ASlider.cpp =================================================================== RCS file: /cvsroot/audacity/audacity-src/src/widgets/ASlider.cpp,v retrieving revision 1.83 retrieving revision 1.84 diff -u -d -r1.83 -r1.84 --- ASlider.cpp 21 Aug 2009 19:11:37 -0000 1.83 +++ ASlider.cpp 24 Nov 2009 20:08:22 -0000 1.84 @@ -87,10 +87,12 @@ #include "../AllThemeResources.h" //#include "../../images/SliderThumb.xpm" -//#include "../../images/SliderThumbAlpha.xpm" +#include "../../images/SliderThumbAlpha.xpm" +#include "../../images/SliderThumbDisabled.xpm" #include "../../images/SliderThumb_Vertical.xpm" - +#include "../../images/SliderThumb_VerticalAlpha.xpm" +#include "../../images/SliderThumb_VerticalDisabled.xpm" #if defined __WXMSW__ const int sliderFontSize = 10; @@ -425,6 +427,7 @@ float speed, int orientation /* = wxHORIZONTAL */) // wxHORIZONTAL or wxVERTICAL. wxVERTICAL is currently only for DB_SLIDER. { + mEnabled = true; mName = name; mStyle = style; mOrientation = orientation; @@ -447,19 +450,6 @@ mScrollLine = 1.0f; mScrollPage = 5.0f; - // Get the Thumb bitmap. Generic version for now... - if (mOrientation == wxHORIZONTAL) - mThumbBitmap = &theTheme.Bitmap( bmpSliderThumb ); - else - //vvv \todo Convert this to an image in AllThemeResources, as bmpSliderThumb. Make an alpha also, as for horizontal slider thumb? - { - wxImage thumbImage(wxBitmap(SliderThumb_Vertical).ConvertToImage()); - mThumbBitmap = new wxBitmap(thumbImage); - } - - // mThumbBitmap = new wxBitmap( SliderThumb ); - // mThumbBitmap->SetMask( new wxMask( wxBitmap( SliderThumbAlpha ), *wxBLACK ) ); - mpRuler = NULL; // Do this and Move() before Draw(). Move(pos); Draw(); @@ -605,6 +595,42 @@ void LWSlider::Draw() { + // + // Get the thumb slider bitmap + // + + if (mEnabled && mOrientation == wxHORIZONTAL) + mThumbBitmap = &theTheme.Bitmap( bmpSliderThumb ); + //vvv \todo Convert this to an image in AllThemeResources, as bmpSliderThumb. Make an alpha also, as for horizontal slider thumb? + else if (mOrientation == wxHORIZONTAL) + { + wxImage thumbImage(wxBitmap(SliderThumbDisabled).ConvertToImage()); + mThumbBitmap = new wxBitmap(thumbImage); + mThumbBitmap->SetMask(new wxMask(wxBitmap(SliderThumbAlpha), *wxBLACK)); + } + else if (mEnabled) + { + wxImage thumbImage(wxBitmap(SliderThumb_Vertical).ConvertToImage()); + mThumbBitmap = new wxBitmap(thumbImage); + mThumbBitmap->SetMask( + new wxMask(wxBitmap(SliderThumb_VerticalAlpha), *wxBLACK)); + } + else + { + wxImage thumbImage(wxBitmap( + SliderThumb_VerticalDisabled).ConvertToImage()); + mThumbBitmap = new wxBitmap(thumbImage); + mThumbBitmap->SetMask( + new wxMask(wxBitmap(SliderThumb_VerticalAlpha), *wxBLACK)); + } + + // mThumbBitmap = new wxBitmap( SliderThumb ); + // mThumbBitmap->SetMask( new wxMask( wxBitmap( SliderThumbAlpha ), *wxBLACK ) ); + + // + // Now the background bitmap + // + if( mBitmap ) { delete mBitmap; @@ -652,7 +678,11 @@ dc->Clear(); // Draw the line along which the thumb moves. - AColor::Dark(dc, false); + if (mEnabled) + AColor::Dark(dc, false); + else + AColor::Medium(dc, false); + if (mOrientation == wxHORIZONTAL) AColor::Line(*dc, mLeftX, mCenterY+1, mRightX+2, mCenterY+1); else //vvvvv if (mStyle != DB_SLIDER) // Let the ruler do it for vertical DB_SLIDER. @@ -771,7 +801,11 @@ else AColor::Line(*dc, mCenterX-tickLength, mTopY+p, mCenterX-1, mTopY+p); // ticks at left - AColor::Dark(dc, false); + if (mEnabled) + AColor::Dark(dc, false); + else + AColor::Medium(dc, false); + if (mOrientation == wxHORIZONTAL) AColor::Line(*dc, mLeftX+p+1, mCenterY-tickLength+1, mLeftX+p+1, mCenterY-1); // ticks above else @@ -891,6 +925,10 @@ Refresh(); } + // Events other than mouse-overs are ignored when we are disabled + if (!mEnabled) + return; + float prevValue = mCurrentValue; // Figure out the thumb position @@ -1021,71 +1059,74 @@ void LWSlider::OnKeyEvent(wxKeyEvent & event) { - switch( event.GetKeyCode() ) + if (mEnabled) { - case WXK_RIGHT: - case WXK_UP: - Increase( mScrollLine ); - SendUpdate( mCurrentValue ); - break; + switch( event.GetKeyCode() ) + { + case WXK_RIGHT: + case WXK_UP: + Increase( mScrollLine ); + SendUpdate( mCurrentValue ); + break; - case WXK_LEFT: - case WXK_DOWN: - Decrease( mScrollLine ); - SendUpdate( mCurrentValue ); - break; + case WXK_LEFT: + case WXK_DOWN: + Decrease( mScrollLine ); + SendUpdate( mCurrentValue ); + break; - case WXK_PAGEUP: + case WXK_PAGEUP: #if !wxCHECK_VERSION(2,7,0) - case WXK_PRIOR: + case WXK_PRIOR: #endif - Increase( mScrollPage ); - SendUpdate( mCurrentValue ); - break; + Increase( mScrollPage ); + SendUpdate( mCurrentValue ); + break; - case WXK_PAGEDOWN: + case WXK_PAGEDOWN: #if !wxCHECK_VERSION(2,7,0) - case WXK_NEXT: + case WXK_NEXT: #endif - Decrease( mScrollPage ); - SendUpdate( mCurrentValue ); - break; + Decrease( mScrollPage ); + SendUpdate( mCurrentValue ); + break; - case WXK_HOME: - SendUpdate( mMinValue ); - break; + case WXK_HOME: + SendUpdate( mMinValue ); + break; - case WXK_END: - SendUpdate( mMaxValue ); - break; + case WXK_END: + SendUpdate( mMaxValue ); + break; - case WXK_TAB: - { - wxNavigationKeyEvent nevent; - nevent.SetWindowChange( event.ControlDown() ); - nevent.SetDirection( !event.ShiftDown() ); - nevent.SetEventObject( mParent ); - nevent.SetCurrentFocus( mParent ); - mParent->GetParent()->ProcessEvent( nevent ); - } - break; + case WXK_TAB: + { + wxNavigationKeyEvent nevent; + nevent.SetWindowChange( event.ControlDown() ); + nevent.SetDirection( !event.ShiftDown() ); + nevent.SetEventObject( mParent ); + nevent.SetCurrentFocus( mParent ); + mParent->GetParent()->ProcessEvent( nevent ); + } + break; - case WXK_RETURN: - case WXK_NUMPAD_ENTER: - { - wxTopLevelWindow *tlw = wxDynamicCast(wxGetTopLevelParent(mParent), wxTopLevelWindow); - wxWindow *def = tlw->GetDefaultItem(); - if (def && def->IsEnabled()) { - wxCommandEvent cevent(wxEVT_COMMAND_BUTTON_CLICKED, - def->GetId()); - mParent->ProcessEvent(cevent); - } - } + case WXK_RETURN: + case WXK_NUMPAD_ENTER: + { + wxTopLevelWindow *tlw = wxDynamicCast(wxGetTopLevelParent(mParent), wxTopLevelWindow); + wxWindow *def = tlw->GetDefaultItem(); + if (def && def->IsEnabled()) { + wxCommandEvent cevent(wxEVT_COMMAND_BUTTON_CLICKED, + def->GetId()); + mParent->ProcessEvent(cevent); + } + } - default: - // Allow it to propagate - event.Skip(); - break; + default: + // Allow it to propagate + event.Skip(); + break; + } } event.Skip(); @@ -1273,6 +1314,18 @@ mParent->Refresh(false); } +bool LWSlider::GetEnabled() +{ + return mEnabled; +} + +void LWSlider::SetEnabled(bool enabled) +{ + mEnabled = enabled; + Draw(); + Refresh(); +} + // // ASlider // @@ -1448,6 +1501,20 @@ mLWSlider->SetSpeed(speed); } +bool ASlider::Enable(bool enable) +{ + if (mLWSlider->GetEnabled() == enable) + return false; + + mLWSlider->SetEnabled(enable); + return true; +} + +bool ASlider::IsEnabled() const +{ + return mLWSlider->GetEnabled(); +} + #if wxUSE_ACCESSIBILITY ASliderAx::ASliderAx( wxWindow * window ) : Index: ASlider.h =================================================================== RCS file: /cvsroot/audacity/audacity-src/src/widgets/ASlider.h,v retrieving revision 1.36 retrieving revision 1.37 diff -u -d -r1.36 -r1.37 --- ASlider.h 22 Aug 2009 00:00:42 -0000 1.36 +++ ASlider.h 24 Nov 2009 20:08:22 -0000 1.37 @@ -132,6 +132,9 @@ bool ShowDialog(); bool ShowDialog(wxPoint pos); + void SetEnabled(bool enabled); + bool GetEnabled(); + private: void FormatPopWin(); @@ -214,6 +217,7 @@ wxString mName; + bool mEnabled; }; class ASlider :public wxPanel @@ -257,6 +261,10 @@ void RecreateTipWin(); + // Overrides of the wxWindow functions with the same semantics + bool Enable(bool enable = true); + bool IsEnabled() const; + private: LWSlider *mLWSlider; bool mSliderIsFocused; ------------------------------------------------------------------------------ Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day trial. Simplify your report design, integration and deployment - and focus on what you do best, core application coding. Discover what's new with Crystal Reports now. http://p.sf.net/sfu/bobj-july _______________________________________________ Audacity-cvs mailing list Audacity-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/audacity-cvs