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

Reply via email to