Update of /cvsroot/audacity/audacity-src/src
In directory sc8-pr-cvs11.sourceforge.net:/tmp/cvs-serv6436

Modified Files:
        Tags.cpp 
Log Message:
I forgot that the metadata editor was supposed to be modeless and the last 
changes did not respect that.

This also completes the Load/Save functions.

Index: Tags.cpp
===================================================================
RCS file: /cvsroot/audacity/audacity-src/src/Tags.cpp,v
retrieving revision 1.45
retrieving revision 1.46
diff -u -d -r1.45 -r1.46
--- Tags.cpp    20 May 2007 07:25:20 -0000      1.45
+++ Tags.cpp    24 May 2007 05:45:19 -0000      1.46
@@ -42,12 +42,14 @@
 
 #include "Audacity.h"
 #include "FileDialog.h"
+#include "FileNames.h"
 #include "Internat.h"
 #include "Prefs.h"
 #include "xml/XMLFileReader.h"
 
 #include <wx/button.h>
 #include <wx/choice.h>
+#include <wx/filename.h>
 #include <wx/intl.h>
 #include <wx/msgdlg.h>
 #include <wx/radiobox.h>
@@ -122,7 +124,10 @@
    while (cont) {
       gPrefs->Read(name, &value, wxT(""));
 
-      if (name == wxT("Title")) {
+      if (name == wxT("ID3V2")) {
+         mID3V2 = wxAtoi(value) != 0;
+      }
+      else if (name == wxT("Title")) {
          mTitle = value;
       }
       else if (name == wxT("Artist")) {
@@ -775,7 +780,7 @@
 {
    mTransfering = true; // avoid endless update loop
 
-   // Make local copies of metadata
+   // Make local backup copies of metadata
    mTitle       = mTags->mTitle;
    mArtist      = mTags->mArtist;
    mAlbum       = mTags->mAlbum;
@@ -789,11 +794,12 @@
 
    BuildMainPanel();
    BuildExtraPanel();
+   GetMainPanel()->Layout();
+   GetMainPanel()->Fit();
    Layout();
    Fit();
 
-   wxSize sz = GetMainPanel()->GetSize();
-   GetExtraPanel()->SetSize(sz.GetWidth(), -1);
+   GetExtraPanel()->SetSize(GetMainPanel()->GetSize().GetWidth(), -1);
 
    if (!editTitle)
       mTitleText->Enable(false);
@@ -808,8 +814,14 @@
 
 TagsEditor::~TagsEditor()
 {
-   delete[] mExtraNameTexts;
-   delete[] mExtraValueTexts;
+   if (mExtraNameTexts) {
+      delete[] mExtraNameTexts;
+   }
+
+   if (mExtraValueTexts) {
+      delete[] mExtraValueTexts;
+   }
+
    mTags->EditorIsClosing();
 }
 
@@ -818,53 +830,53 @@
    wxString errorString =
       _("Maximum length of attribute '%s' is %d characters. Data was 
truncated.");
 
-   if(!mID3V2)
+   if(!mTags->mID3V2)
    {
-      if(mTitle.Length() > 30)
+      if(mTags->mTitle.Length() > 30)
       {
          wxMessageBox(wxString::Format(errorString, _("Title"), 30));
 
-         mTitle = mTitle.Left(30);
+         mTags->mTitle = mTags->mTitle.Left(30);
          TransferDataToWindow();
 
          return FALSE;
       }
 
-      if(mArtist.Length() > 30)
+      if(mTags->mArtist.Length() > 30)
       {
          wxMessageBox(wxString::Format(errorString, _("Artist"), 30));
 
-         mArtist = mArtist.Left(30);
+         mTags->mArtist = mTags->mArtist.Left(30);
          TransferDataToWindow();
 
          return FALSE;
       }
 
-      if(mAlbum.Length() > 30)
+      if(mTags->mAlbum.Length() > 30)
       {
          wxMessageBox(wxString::Format(errorString, _("Album"), 30));
 
-         mAlbum = mAlbum.Left(30);
+         mTags->mAlbum = mTags->mAlbum.Left(30);
          TransferDataToWindow();
 
          return FALSE;
       }
 
-      if(mYear.Length() > 4)
+      if(mTags->mYear.Length() > 4)
       {
          wxMessageBox(wxString::Format(errorString, _("Year"), 4));
 
-         mYear = mYear.Left(4);
+         mTags->mYear = mTags->mYear.Left(4);
          TransferDataToWindow();
 
          return FALSE;
       }
 
-      if(mComments.Length() > 30)
+      if(mTags->mComments.Length() > 30)
       {
          wxMessageBox(wxString::Format(errorString, _("Comments"), 30));
 
-         mComments = mComments.Left(30);
+         mTags->mComments = mTags->mComments.Left(30);
          TransferDataToWindow();
 
          return FALSE;
@@ -876,28 +888,28 @@
 
 bool TagsEditor::TransferDataToWindow()
 {
-   mTitleText->SetValue(mTitle);
-   mArtistText->SetValue(mArtist);   
-   mAlbumText->SetValue(mAlbum);
-   mYearText->SetValue(mYear);
-   mCommentsText->SetValue(mComments);
+   mTitleText->SetValue(mTags->mTitle);
+   mArtistText->SetValue(mTags->mArtist);   
+   mAlbumText->SetValue(mTags->mAlbum);
+   mYearText->SetValue(mTags->mYear);
+   mCommentsText->SetValue(mTags->mComments);
    
-   if (mTrackNum != -1) {
+   if (mTags->mTrackNum != -1) {
       wxString numStr;
-      numStr.Printf(wxT("%d"), mTrackNum);
+      numStr.Printf(wxT("%d"), mTags->mTrackNum);
       mTrackNumText->SetValue(numStr);
    }
    
-   if (mGenre >= 0 && mGenre < GetNumGenres())
-       mGenreChoice->SetStringSelection(GetGenreNum(mGenre));
+   if (mTags->mGenre >= 0 && mTags->mGenre < GetNumGenres())
+       mGenreChoice->SetStringSelection(GetGenreNum(mTags->mGenre));
    
-   mFormatRadioBox->SetSelection((int)mID3V2);
+   mFormatRadioBox->SetSelection((int)mTags->mID3V2);
 
    int i;
 
-   for(i=0; i<(int)mExtraNames.GetCount(); i++) {
-      mExtraNameTexts[i]->SetValue(mExtraNames[i]);
-      mExtraValueTexts[i]->SetValue(mExtraValues[i]);
+   for(i=0; i<(int)mTags->mExtraNames.GetCount(); i++) {
+      mExtraNameTexts[i]->SetValue(mTags->mExtraNames[i]);
+      mExtraValueTexts[i]->SetValue(mTags->mExtraValues[i]);
    }
 
    return TRUE;
@@ -905,34 +917,34 @@
 
 bool TagsEditor::TransferDataFromWindow()
 {
-   mTitle = mTitleText->GetValue();
-   mArtist = mArtistText->GetValue();
-   mAlbum = mAlbumText->GetValue();
+   mTags->mTitle = mTitleText->GetValue();
+   mTags->mArtist = mArtistText->GetValue();
+   mTags->mAlbum = mAlbumText->GetValue();
 
    wxString str = mTrackNumText->GetValue();
    if (str == wxT(""))
-      mTrackNum = -1;
+      mTags->mTrackNum = -1;
    else {
       long i;
       str.ToLong(&i);
-      mTrackNum = i;
+      mTags->mTrackNum = i;
    }
 
-   mYear = mYearText->GetValue();
-   mComments = mCommentsText->GetValue();
-   mID3V2 = (mFormatRadioBox->GetSelection())?true:false;
+   mTags->mYear = mYearText->GetValue();
+   mTags->mComments = mCommentsText->GetValue();
+   mTags->mID3V2 = (mFormatRadioBox->GetSelection())?true:false;
 
    int i;
    
    for(i=0; i<GetNumGenres(); i++)
        if (GetGenreNum(i) == mGenreChoice->GetStringSelection()) {
-               mGenre = i;
+               mTags->mGenre = i;
                break;
        }
        
-   for(i=0; i<(int)mExtraNames.GetCount(); i++) {
-      mExtraNames[i] = mExtraNameTexts[i]->GetValue();
-      mExtraValues[i] = mExtraValueTexts[i]->GetValue();
+   for(i=0; i<(int)mTags->mExtraNames.GetCount(); i++) {
+      mTags->mExtraNames[i] = mExtraNameTexts[i]->GetValue();
+      mTags->mExtraValues[i] = mExtraValueTexts[i]->GetValue();
    }
 
    return TRUE;
@@ -949,15 +961,9 @@
 
 void TagsEditor::OnCancel(wxCommandEvent & event)
 {
-   GetParent()->Destroy();
-}
-
-void TagsEditor::OnClose(wxCommandEvent & event)
-{
-   if (!TransferDataFromWindow()) {
-      return;
-   }
-
+   // Restore original values
+   mTags->mExtraNames.Clear();
+   mTags->mExtraValues.Clear();
    mTags->mTitle       = mTitle;
    mTags->mArtist      = mArtist;
    mTags->mAlbum       = mAlbum;
@@ -972,78 +978,171 @@
    GetParent()->Destroy();
 }
 
+void TagsEditor::OnClose(wxCommandEvent & event)
+{
+   if (!TransferDataFromWindow()) {
+      return;
+   }
+
+   GetParent()->Destroy();
+}
+
 void TagsEditor::OnMore(wxCommandEvent & event)
 {
    TransferDataFromWindow();
 
-   mExtraNames.Add(wxT(""));
-   mExtraValues.Add(wxT(""));
+   mTags->mExtraNames.Add(wxT(""));
+   mTags->mExtraValues.Add(wxT(""));
 
    RebuildMainPanel();
-
-   mTransfering = true;
-   TransferDataToWindow();
-   mTransfering = false;
 }
 
 void TagsEditor::OnFewer(wxCommandEvent & event)
 {
    TransferDataFromWindow();
 
-   int len = (int)mExtraNames.GetCount();
+   int len = (int)mTags->mExtraNames.GetCount();
    if (len > 0) {
-      mExtraNames.RemoveAt(len-1);
-      mExtraValues.RemoveAt(len-1);
+      mTags->mExtraNames.RemoveAt(len-1);
+      mTags->mExtraValues.RemoveAt(len-1);
 
       RebuildMainPanel();
-
-      mTransfering = true;
-      TransferDataToWindow();
-      mTransfering = false;
    }
 }
 
 void TagsEditor::OnClear(wxCommandEvent & event)
 {
-   mTitle.Clear();
-   mArtist.Clear();
-   mAlbum.Clear();
-   mTrackNum = -1;
-   mYear.Clear();
-   mGenre = -1;
-   mComments.Clear();
-   mID3V2 = true;;
-   mExtraNames.Clear();
-   mExtraValues.Clear();
+   mTags->mTitle.Clear();
+   mTags->mArtist.Clear();
+   mTags->mAlbum.Clear();
+   mTags->mTrackNum = -1;
+   mTags->mYear.Clear();
+   mTags->mGenre = -1;
+   mTags->mComments.Clear();
+   mTags->mID3V2 = true;;
+   mTags->mExtraNames.Clear();
+   mTags->mExtraValues.Clear();
 
    RebuildMainPanel();
-
-   mTransfering = true;
-   TransferDataToWindow();
-   mTransfering = false;
 }
 
 void TagsEditor::OnLoad(wxCommandEvent & event)
 {
+   wxString fn;
+
+   // For drawer to remain visible while dialog is displayed since the mouse
+   // position is still tracked.
+   Expand();
+
+   // Ask the user for the real name
+   fn = FileSelector(_("Save Metadata As:"),
+                     FileNames::DataDir(),
+                     wxT("Tags.xml"),
+                     wxT("xml"),
+                     wxT("*.xml"),
+                     wxOPEN,
+                     this);
+
+   // Now, allow the drawer to be active again.
+   Collapse();
+   TryAutoExpand();
+   Fit();
+
+   // User canceled...
+   if (fn.IsEmpty()) {
+      return;
+   }
+
+   // Clear current contents
+   mTags->mTitle.Clear();
+   mTags->mArtist.Clear();
+   mTags->mAlbum.Clear();
+   mTags->mTrackNum = -1;
+   mTags->mYear.Clear();
+   mTags->mGenre = -1;
+   mTags->mComments.Clear();
+   mTags->mID3V2 = true;;
+   mTags->mExtraNames.Clear();
+   mTags->mExtraValues.Clear();
+
+   // Load the metadata
+   XMLFileReader reader;
+   if (!reader.Parse(mTags, fn)) {
+      // Inform user of load failure
+      wxMessageBox(reader.GetErrorStr(),
+                   _("Error loading metadata"),
+                   wxOK | wxCENTRE,
+                   this);
+   }
+
+   // Refresh the dialog
+   RebuildMainPanel();
+
+   return;
 }
 
 void TagsEditor::OnSave(wxCommandEvent & event)
 {
+   wxString fn;
+
+   // For drawer to remain visible while dialog is displayed since the mouse
+   // position is still tracked.
+   Expand();
+
+   // Ask the user for the real name
+   fn = FileSelector(_("Save Metadata As:"),
+                     FileNames::DataDir(),
+                     wxT("Tags.xml"),
+                     wxT("xml"),
+                     wxT("*.xml"),
+                     wxSAVE | wxOVERWRITE_PROMPT,
+                     this);
+
+   // Now, allow the drawer to be active again.
+   Collapse();
+   TryAutoExpand();
+   Fit();
+
+   // User canceled...
+   if (fn.IsEmpty()) {
+      return;
+   }
+
+   // Create/Open the file
+   XMLFileWriter writer;
+   writer.Open(fn, wxT("wb"));
+
+   // Complain if open failed
+   if (!writer.IsOpened())
+   {
+      // Constructor will emit message
+      return;
+   }
+
+   // Write the metadata
+   mTags->WriteXML(writer);
+
+   // Close the file
+   writer.Close();
+
+   return;
 }
 
 void TagsEditor::OnSaveDefaults(wxCommandEvent & event)
 {
-   gPrefs->Write(wxT("/Tags/Title"), mTitle);
-   gPrefs->Write(wxT("/Tags/Artist"), mArtist);
-   gPrefs->Write(wxT("/Tags/Album"), mAlbum);
-   gPrefs->Write(wxT("/Tags/Year"), mYear);
-   gPrefs->Write(wxT("/Tags/Comments"), mComments);
-   gPrefs->Write(wxT("/Tags/TrackNumber"), mTrackNum);
-   gPrefs->Write(wxT("/Tags/Genre"), mGenre);
+   gPrefs->DeleteGroup(wxT("/Tags"));
+   gPrefs->Write(wxT("/Tags/ID3V2"), mTags->mID3V2);
+   gPrefs->Write(wxT("/Tags/Title"), mTags->mTitle);
+   gPrefs->Write(wxT("/Tags/Artist"), mTags->mArtist);
+   gPrefs->Write(wxT("/Tags/Album"), mTags->mAlbum);
+   gPrefs->Write(wxT("/Tags/Year"), mTags->mYear);
+   gPrefs->Write(wxT("/Tags/Comments"), mTags->mComments);
+   gPrefs->Write(wxT("/Tags/TrackNumber"), mTags->mTrackNum);
+   gPrefs->Write(wxT("/Tags/Genre"), mTags->mGenre);
 
-   for (size_t i = 0; i < mExtraNames.GetCount(); i++) {
-      gPrefs->Write(wxT("/Tags/") + mExtraNames[i],
-                    mExtraValues[i]);
+   for (size_t i = 0; i < mTags->mExtraNames.GetCount(); i++) {
+      gPrefs->Write(wxT("/Tags/") + mTags->mExtraNames[i],
+                    mTags->mExtraValues[i]);
    }
 }
 
@@ -1051,15 +1150,29 @@
 {
    GetMainPanel()->DestroyChildren();
 
-   delete[] mExtraNameTexts;
-   delete[] mExtraValueTexts;
+   if (mExtraNameTexts) {
+      delete[] mExtraNameTexts;
+      mExtraNameTexts = NULL;
+   }
+
+   if (mExtraNameTexts) {
+      delete[] mExtraValueTexts;
+      mExtraValueTexts = NULL;
+   }
 
    BuildMainPanel();
+   GetMainPanel()->Layout();
+   GetMainPanel()->Fit();
    Layout();
    Fit();
 
-   wxSize sz = GetMainPanel()->GetSize();
-   GetExtraPanel()->SetSize(sz.GetWidth(), -1);
+   GetExtraPanel()->SetSize(GetMainPanel()->GetSize().GetWidth(), -1);
+
+   TryAutoExpand();
+
+   mTransfering = true;
+   TransferDataToWindow();
+   mTransfering = false;
 }
 
 void TagsEditor::BuildMainPanel()
@@ -1177,7 +1290,7 @@
 
    /***/
 
-   int len = (int)mExtraNames.GetCount();
+   int len = (int)mTags->mExtraNames.GetCount();
    int i;
 
    mExtraNameTexts = new wxTextCtrl*[len];
@@ -1198,11 +1311,10 @@
    }
 
    mainSizer->Add(gridSizer, 0, wxEXPAND | wxALL, 7);
-   
-   parent->SetAutoLayout(TRUE);
+
    parent->SetSizer(mainSizer);
-   mainSizer->Fit(parent);
-   mainSizer->SetSizeHints(parent);
+   parent->Layout();
+   parent->Fit();
 }
 
 void TagsEditor::BuildExtraPanel()
@@ -1287,10 +1399,9 @@
 
    mainSizer->Add(1, 5, wxEXPAND);
 
-   parent->SetAutoLayout(TRUE);
    parent->SetSizer(mainSizer);
-   mainSizer->Fit(parent);
-   mainSizer->SetSizeHints(parent);
+   parent->Layout();
+   parent->Fit();
 }
 
 // Indentation settings for Vim and Emacs and unique identifier for Arch, a


-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
Audacity-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/audacity-cvs

Reply via email to