1 /**********************************************************************
2 
3   Audacity: A Digital Audio Editor
4 
5   LabelDialog.h
6 
7   Dominic Mazzoni
8 
9 **********************************************************************/
10 
11 #ifndef __AUDACITY_LABELDIALOG__
12 #define __AUDACITY_LABELDIALOG__
13 
14 #include <vector>
15 #include <wx/defs.h>
16 
17 #include "widgets/wxPanelWrapper.h" // to inherit
18 #include "ComponentInterface.h" // member variable
19 
20 class wxArrayString;
21 class wxGridEvent;
22 class AudacityProject;
23 class ChoiceEditor;
24 class Grid;
25 class NumericEditor;
26 class TrackList;
27 class RowData;
28 class EmptyLabelRenderer;
29 class LabelTrack;
30 class ViewInfo;
31 class ShuttleGui;
32 
33 typedef std::vector<RowData> RowDataArray;
34 
35 class LabelDialog final : public wxDialogWrapper
36 {
37  public:
38 
39    LabelDialog(wxWindow *parent,
40                AudacityProject &project,
41                TrackList *tracks,
42 
43                // if NULL edit all tracks, else this one only:
44                LabelTrack *selectedTrack,
45 
46                // This is nonnegative only if selectedTrack is not NULL
47                // and is the unique label to edit
48                int index,
49 
50                ViewInfo &viewinfo,
51                double rate,
52                const NumericFormatSymbol & format,
53                const NumericFormatSymbol &freqFormat);
54    ~LabelDialog();
55 
56     bool Show(bool show = true) override;
57 
58  private:
59 
60    void Populate();
61    void PopulateOrExchange( ShuttleGui & S );
62    void PopulateLabels();
63    void OnHelp(wxCommandEvent & event);
GetHelpPageName()64    ManualPageID GetHelpPageName() {return "Labels_Editor";}
65 
66    bool TransferDataToWindow() override;
67    bool TransferDataFromWindow() override;
68    bool Validate() override;
69    void FindAllLabels();
70    void AddLabels(const LabelTrack *t);
71    void FindInitialRow();
72    wxString TrackName(int & index, const wxString &dflt = _("Label Track"));
73 
74    void OnUpdate(wxCommandEvent &event);
75    void OnFreqUpdate(wxCommandEvent &event);
76    void OnInsert(wxCommandEvent &event);
77    void OnRemove(wxCommandEvent &event);
78    void OnImport(wxCommandEvent &event);
79    void OnExport(wxCommandEvent &event);
80    void OnSelectCell(wxGridEvent &event);
81    void OnCellChange(wxGridEvent &event);
82    void OnChangeTrack(wxGridEvent &event, int row, RowData *rd);
83    void OnChangeLabel(wxGridEvent &event, int row, RowData *rd);
84    void OnChangeStime(wxGridEvent &event, int row, RowData *rd);
85    void OnChangeEtime(wxGridEvent &event, int row, RowData *rd);
86    void OnChangeLfreq(wxGridEvent &event, int row, RowData *rd);
87    void OnChangeHfreq(wxGridEvent &event, int row, RowData *rd);
88    void OnOK(wxCommandEvent &event);
89    void OnCancel(wxCommandEvent &event);
90 
91    void ReadSize();
92    void WriteSize();
93 
94  private:
95 
96    AudacityProject &mProject;
97 
98    Grid *mGrid;
99    ChoiceEditor *mChoiceEditor;
100    NumericEditor *mTimeEditor;
101    NumericEditor *mFrequencyEditor;
102 
103    RowDataArray mData;
104 
105    TrackList *mTracks;
106    LabelTrack *mSelectedTrack {};
107    int mIndex { -1 };
108    ViewInfo *mViewInfo;
109    wxArrayString mTrackNames;
110    double mRate;
111    NumericFormatSymbol mFormat, mFreqFormat;
112 
113    int mInitialRow;
114 
115    DECLARE_EVENT_TABLE()
116 };
117 
118 #endif
119