Update of /cvsroot/audacity/audacity-src/src/effects
In directory 23jxhf1.ch3.sourceforge.com:/tmp/cvs-serv30536/effects

Modified Files:
        Contrast.cpp Contrast.h 
Log Message:
Reduce invasiveness of Contrast, whilst increasing functionality.  See 
Audacity-devel for more details.

Index: Contrast.cpp
===================================================================
RCS file: /cvsroot/audacity/audacity-src/src/effects/Contrast.cpp,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- Contrast.cpp        10 Nov 2008 20:29:00 -0000      1.4
+++ Contrast.cpp        21 Nov 2008 01:29:38 -0000      1.5
@@ -56,6 +56,8 @@
 
 EffectContrast::EffectContrast()
 {
+   bFGset = false;
+   bBGset = false;
 }
 
 EffectContrast::~EffectContrast()
@@ -65,10 +67,48 @@
 
 bool EffectContrast::PromptUser()
 {
-   ContrastDialog dlog(this, mParent);
+   if( !bFGset )
+   {
+      SaveTimes(true, mT0, mT1);
+      bFGset = true;
+      if( !bBGset )
+      {
+         wxMessageDialog m(NULL, _("Foreground times selected.\nNow select 
background and use Ctrl+Alt+C or menu again."), _("Contrast Tool Foreground"), 
wxOK);
+         m.ShowModal();
+      }
+   }
+   else
+   {
+      if( !bBGset )
+      {
+         SaveTimes(false, mT0, mT1);
+         bBGset = true;
+      }
+   }
 
-   dlog.CentreOnParent();
-   dlog.ShowModal();
+   if( bFGset && bBGset )
+   {
+      ContrastDialog dlog(this, mParent);
+
+      // Copy parameters into dialog from effect
+      dlog.startTimeF = mStartTimeF;
+      dlog.endTimeF = mEndTimeF;
+      dlog.startTimeB = mStartTimeB;
+      dlog.endTimeB = mEndTimeB;
+
+      wxCommandEvent dummyEvt;
+      dlog.OnGetForegroundDB(dummyEvt);
+      dlog.OnGetBackgroundDB(dummyEvt);
+
+      dlog.CentreOnParent();
+      dlog.ShowModal();
+
+      // Copy parameters from dialog back into effect
+      mStartTimeF = dlog.startTimeF;
+      mEndTimeF = dlog.endTimeF;
+      mStartTimeB = dlog.startTimeB;
+      mEndTimeB = dlog.endTimeB;
+   }
 
    return false;
 }
@@ -80,14 +120,21 @@
    TrackListIterator iter(mWaveTracks);
    Track *t = iter.First();
    if(mT0 >= mT1)
-   {  // do something 'reasonable' in this case
-      mT0 = (mT0 - mT1)/2 - 0.25;
-      mT1 = mT0 + 0.5;
+   {
+      wxMessageDialog m(NULL, _("Start time after after end time!\nPlease 
enter reasonable times."), _("Error"), wxOK);
+      m.ShowModal();
+      return 1234.0;
    }
    if(mT0 < t->GetStartTime())
       mT0 = t->GetStartTime();
    if(mT1 > t->GetEndTime())
       mT1 = t->GetEndTime();
+   if(mT0 >= mT1)
+   {
+      wxMessageDialog m(NULL, _("Times are not reasonable!\nPlease enter 
reasonable times."), _("Error"), wxOK);
+      m.ShowModal();
+      return 1234.0;
+   }
    while(t) {  // this isn't quite right.  What to do if more than one track 
selected?
       ((WaveTrack *)t)->GetRMS(&rms, mT0, mT1);
       t = iter.Next();
@@ -115,6 +162,21 @@
    mT1 = t;
 }
 
+void EffectContrast::SaveTimes(bool isForeground, double start, double end)
+{
+   if(isForeground)
+   {
+      mStartTimeF = start;
+      mEndTimeF = end;
+   }
+   else
+   {
+      mStartTimeB = start;
+      mEndTimeB = end;
+   }
+   return;
+}
+
 bool EffectContrast::Process()
 {
    wxMessageBox(_("Hello.\n"));  // you should never see this!
@@ -137,6 +199,8 @@
 enum {
    ID_BUTTON_GETFOREGROUND = 10001,
    ID_BUTTON_GETBACKGROUND,
+   ID_BUTTON_USECURRENTF,
+   ID_BUTTON_USECURRENTB,
    ID_BUTTON_GETURL,
    ID_BACKGROUNDSTART_TEXT,
    ID_BACKGROUNDEND_TEXT,
@@ -152,6 +216,8 @@
    EVT_BUTTON(wxID_OK, ContrastDialog::OnOK)
    EVT_BUTTON(ID_BUTTON_GETFOREGROUND, ContrastDialog::OnGetForegroundDB)
    EVT_BUTTON(ID_BUTTON_GETBACKGROUND, ContrastDialog::OnGetBackgroundDB)
+   EVT_BUTTON(ID_BUTTON_USECURRENTF, ContrastDialog::OnUseSelectionF)
+   EVT_BUTTON(ID_BUTTON_USECURRENTB, ContrastDialog::OnUseSelectionB)
    EVT_BUTTON(ID_BUTTON_GETURL, ContrastDialog::OnGetURL)
    EVT_TEXT(ID_FOREGROUNDSTART_TEXT, ContrastDialog::OnForegroundStartText)
    EVT_TEXT(ID_FOREGROUNDEND_TEXT, ContrastDialog::OnForegroundEndText)
@@ -169,17 +235,9 @@
    m_pButton_GetForeground = NULL;
    m_pButton_GetBackground = NULL;
 
-   gPrefs->Read(wxT("/Contrast/startTimeF"), &startTimeF, 0.0);
-   gPrefs->Read(wxT("/Contrast/endTimeF"), &endTimeF, 0.0);
-   gPrefs->Read(wxT("/Contrast/startTimeB"), &startTimeB, 0.0);
-   gPrefs->Read(wxT("/Contrast/endTimeB"), &endTimeB, 0.0);
+   mT0orig = m_pEffect->GetStartTime();  // keep copy of selection times
+   mT1orig = m_pEffect->GetEndTime();
 
-   m_pEffect->SetStartTime(startTimeF);
-   m_pEffect->SetEndTime(endTimeF);
-   foregrounddB = m_pEffect->GetDB();
-   m_pEffect->SetStartTime(startTimeB);
-   m_pEffect->SetEndTime(endTimeB);
-   backgrounddB = m_pEffect->GetDB();
    Init();
 }
 
@@ -188,7 +246,10 @@
    m_pEffect->SetStartTime(startTimeF);
    m_pEffect->SetEndTime(endTimeF);
    foregrounddB = m_pEffect->GetDB();
-   mForegroundRMSText->SetLabel(wxString::Format(_("%.1f dB"), foregrounddB));
+   if(foregrounddB == 1234.0) // magic number, is there a better way?
+      mForegroundRMSText->SetLabel(wxString::Format(_(" ")));
+   else
+      mForegroundRMSText->SetLabel(wxString::Format(_("%.1f dB"), 
foregrounddB));
    m_pButton_GetForeground->Enable(false);
    m_pButton_GetForeground->SetLabel(_("Measured"));
    results();
@@ -199,7 +260,10 @@
    m_pEffect->SetStartTime(startTimeB);
    m_pEffect->SetEndTime(endTimeB);
    backgrounddB = m_pEffect->GetDB();
-   mBackgroundRMSText->SetLabel(wxString::Format(_("%.1f dB"), backgrounddB));
+   if(backgrounddB == 1234.0) // magic number, is there a better way?
+      mBackgroundRMSText->SetLabel(wxString::Format(_(" ")));
+   else
+      mBackgroundRMSText->SetLabel(wxString::Format(_("%.1f dB"), 
backgrounddB));
    m_pButton_GetBackground->Enable(false);
    m_pButton_GetBackground->SetLabel(_("Measured"));
    results();
@@ -213,11 +277,6 @@
 
 void ContrastDialog::OnOK(wxCommandEvent &event)
 {
-   gPrefs->Write(wxT("/Contrast/startTimeF"), startTimeF);
-   gPrefs->Write(wxT("/Contrast/endTimeF"), endTimeF);
-   gPrefs->Write(wxT("/Contrast/startTimeB"), startTimeB);
-   gPrefs->Write(wxT("/Contrast/endTimeB"), endTimeB);
-
    EndModal(0);
 }
 
@@ -234,14 +293,15 @@
    
    S.StartStatic( _("Parameters") );
    {
-      S.StartMultiColumn(5, wxEXPAND);
+      S.StartMultiColumn(6, wxEXPAND);
       {
 
          // Headings
-         S.AddFixedText(wxT(" "), false);
+         S.AddFixedText(wxT(""), false); // spacer
          S.AddFixedText(_("Start"), false);
          S.AddFixedText(_("End"), false);
          S.AddFixedText(wxT(""), false); // spacer
+         S.AddFixedText(wxT(""), false); // spacer
          S.AddFixedText(_("Volume"), false);
 
          //Foreground
@@ -265,6 +325,7 @@
          S.EndMultiColumn();
          m_pButton_GetForeground = 
S.Id(ID_BUTTON_GETFOREGROUND).AddButton(_("Measured"));
          m_pButton_GetForeground->Enable(false);   // Disabled as we do the 
measurement as we put up the dialog
+         m_pButton_UseCurrentF = S.Id(ID_BUTTON_USECURRENTF).AddButton(_("Use 
selection"));
          
mForegroundRMSText=S.Id(ID_FOREGROUNDDB_TEXT).AddVariableText(wxString::Format(wxT("%.1f
 dB"), foregrounddB));
 
          //Background
@@ -288,6 +349,7 @@
          S.EndMultiColumn();
          m_pButton_GetBackground = 
S.Id(ID_BUTTON_GETBACKGROUND).AddButton(_("Measured"));
          m_pButton_GetBackground->Enable(false);
+         m_pButton_UseCurrentB = S.Id(ID_BUTTON_USECURRENTB).AddButton(_("Use 
selection"));
          
mBackgroundRMSText=S.Id(ID_BACKGROUNDDB_TEXT).AddVariableText(wxString::Format(wxT("%.1f
 dB"), backgrounddB));
       }
       S.EndMultiColumn();
@@ -312,12 +374,17 @@
    //Information
    S.StartStatic( _("Information") );
    {
-      S.AddFixedText(_("Before you open this tool,"));
-      S.AddFixedText(_("   Ctrl+Alt+F sets the 'foreground' times."));
-      S.AddFixedText(_("   Ctrl+Alt+B sets the 'background' times."));
+      S.AddFixedText(_("Before you use this tool,"));
+      S.AddFixedText(_("   Ctrl+Alt+C sets the 'foreground' times."));
+      S.AddFixedText(_("   Ctrl+Alt+C (again) sets the 'background' times and 
opens the tool."));
+      S.AddFixedText(_("After you've used this tool,"));
+      S.AddFixedText(_("   Select a region then use Ctrl+Alt+C to open it."));
+      S.AddFixedText(_("   Click 'Use Selected' above to set the 
fore/background times."));
+      S.AddFixedText(_("   Or enter the times manually and click 'Measure'."));
       m_pButton_GetURL = S.Id(ID_BUTTON_GETURL).AddButton(_("WCAG Information 
on web"));
    }
    S.EndStatic();
+   Fit();
 }
 
 void ContrastDialog::OnForegroundStartText(wxCommandEvent & event)
@@ -352,6 +419,40 @@
    m_pButton_GetBackground->SetLabel(_("Measure"));
 }
 
+void ContrastDialog::OnUseSelectionF(wxCommandEvent & event)
+{
+   wxString number;
+
+   startTimeF = mT0orig;
+   endTimeF = mT1orig;
+   number = wxString::Format(wxT("%.2f"), startTimeF);
+   mForegroundStartText->ChangeValue(number);
+   number = wxString::Format(wxT("%.2f"), endTimeF);
+   mForegroundEndText->ChangeValue(number);
+
+   m_pEffect->SetStartTime(startTimeB);
+   m_pEffect->SetEndTime(endTimeB);
+   OnGetForegroundDB(event);
+   results();
+}
+
+void ContrastDialog::OnUseSelectionB(wxCommandEvent & event)
+{
+   wxString number;
+
+   startTimeB = mT0orig;
+   endTimeB = mT1orig;
+   number = wxString::Format(wxT("%.2f"), startTimeB);
+   mBackgroundStartText->ChangeValue(number);
+   number = wxString::Format(wxT("%.2f"), endTimeB);
+   mBackgroundEndText->ChangeValue(number);
+
+   m_pEffect->SetStartTime(startTimeB);
+   m_pEffect->SetEndTime(endTimeB);
+   OnGetBackgroundDB(event);
+   results();
+}
+
 void ContrastDialog::results()
 {
    if(foregrounddB - backgrounddB > 20)

Index: Contrast.h
===================================================================
RCS file: /cvsroot/audacity/audacity-src/src/effects/Contrast.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- Contrast.h  9 Nov 2008 18:39:41 -0000       1.3
+++ Contrast.h  21 Nov 2008 01:29:38 -0000      1.4
@@ -22,14 +22,14 @@
 class WaveTrack;
 
 class EffectContrast: public Effect {
-   
+
 public:
    
    EffectContrast();
    virtual ~EffectContrast();
 
    virtual wxString GetEffectName() {
-      return wxString(_("Contrast..."));
+      return wxString(_("Contrast...\tCtrl+Alt+C"));
    }
 
    virtual int GetEffectFlags() {
@@ -57,6 +57,7 @@
    
    virtual bool CheckWhetherSkipEffect();
    virtual bool Process();
+   void SaveTimes(bool, double, double);
    
 private:
    bool      mDoBackground;
@@ -65,6 +66,12 @@
    void SetStartTime(double);
    double GetEndTime();
    void SetEndTime(double);
+   double mStartTimeF;
+   double mEndTimeF;
+   bool bFGset;
+   double mStartTimeB;
+   double mEndTimeB;
+   bool bBGset;
 
 friend class ContrastDialog;
 };
@@ -84,21 +91,20 @@
    ContrastDialog(EffectContrast * effect,
                       wxWindow *parent);
 
-//   wxSizer *MakeContrastDialog(bool call_fit = true,
-//                                   bool set_sizer = true);
-
    void PopulateOrExchange(ShuttleGui & S);
-//   void UpdateDisplay();
 
-private:
-   // handlers
    void OnGetForegroundDB( wxCommandEvent &event );
    void OnGetBackgroundDB( wxCommandEvent &event );
+
+private:
+   // handlers
    void OnGetURL(wxCommandEvent &event);
    void OnForegroundStartText(wxCommandEvent & event);
    void OnForegroundEndText(wxCommandEvent & event);
    void OnBackgroundStartText(wxCommandEvent & event);
    void OnBackgroundEndText(wxCommandEvent & event);
+   void OnUseSelectionF(wxCommandEvent & event);
+   void OnUseSelectionB(wxCommandEvent & event);
    void results();
    void OnOK( wxCommandEvent &event );
 
@@ -112,11 +118,9 @@
    wxStaticText *mDiffText;
 
    double foregrounddB;
-   double startTimeF;
-   double endTimeF;
    double backgrounddB;
-   double startTimeB;
-   double endTimeB;
+   double mT0orig;
+   double mT1orig;
 
  public:
 
@@ -124,8 +128,15 @@
 
    wxButton * m_pButton_GetBackground;
    wxButton * m_pButton_GetForeground;
+   wxButton * m_pButton_UseCurrentF;
+   wxButton * m_pButton_UseCurrentB;
    wxButton * m_pButton_GetURL;
 
+   double startTimeF;
+   double endTimeF;
+   double startTimeB;
+   double endTimeB;
+
 private:
    DECLARE_EVENT_TABLE()
 


-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Audacity-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/audacity-cvs

Reply via email to