Do without some friend declarations in LabelTrack...
... and leave "updated" alone, it's only for use in interactive dragging
This commit is contained in:
parent
0750f62e88
commit
8ff5a4b345
|
@ -148,6 +148,15 @@ LabelTrack::LabelTrack(const LabelTrack &orig) :
|
|||
ResetFlags();
|
||||
}
|
||||
|
||||
void LabelTrack::SetLabel( size_t iLabel, const LabelStruct &newLabel )
|
||||
{
|
||||
if( iLabel >= mLabels.size() ) {
|
||||
wxASSERT( false );
|
||||
mLabels.resize( iLabel + 1 );
|
||||
}
|
||||
mLabels[ iLabel ] = newLabel;
|
||||
}
|
||||
|
||||
LabelTrack::~LabelTrack()
|
||||
{
|
||||
}
|
||||
|
@ -937,6 +946,14 @@ void LabelTrack::Draw
|
|||
}
|
||||
}
|
||||
|
||||
void LabelTrack::SetSelectedIndex( int index )
|
||||
{
|
||||
if ( index >= 0 && index < mLabels.size() )
|
||||
mSelIndex = index;
|
||||
else
|
||||
mSelIndex = -1;
|
||||
}
|
||||
|
||||
/// uses GetTextExtent to find the character position
|
||||
/// corresponding to the x pixel position.
|
||||
int LabelTrack::FindCurrentCursorPosition(int xPos)
|
||||
|
|
|
@ -38,6 +38,7 @@ struct TrackPanelDrawingContext;
|
|||
class LabelStruct
|
||||
{
|
||||
public:
|
||||
LabelStruct() = default;
|
||||
// Copies region
|
||||
LabelStruct(const SelectedRegion& region, const wxString &aTitle);
|
||||
// Copies region but then overwrites other times
|
||||
|
@ -84,15 +85,15 @@ public:
|
|||
public:
|
||||
SelectedRegion selectedRegion;
|
||||
wxString title; /// Text of the label.
|
||||
mutable int width; /// width of the text in pixels.
|
||||
mutable int width{}; /// width of the text in pixels.
|
||||
|
||||
// Working storage for on-screen layout.
|
||||
mutable int x; /// Pixel position of left hand glyph
|
||||
mutable int x1; /// Pixel position of right hand glyph
|
||||
mutable int xText; /// Pixel position of left hand side of text box
|
||||
mutable int y; /// Pixel position of label.
|
||||
mutable int x{}; /// Pixel position of left hand glyph
|
||||
mutable int x1{}; /// Pixel position of right hand glyph
|
||||
mutable int xText{}; /// Pixel position of left hand side of text box
|
||||
mutable int y{}; /// Pixel position of label.
|
||||
|
||||
bool updated; /// flag to tell if the label times were updated
|
||||
bool updated{}; /// flag to tell if the label times were updated
|
||||
};
|
||||
|
||||
using LabelArray = std::vector<LabelStruct>;
|
||||
|
@ -121,6 +122,8 @@ class AUDACITY_DLL_API LabelTrack final : public Track
|
|||
|
||||
virtual ~ LabelTrack();
|
||||
|
||||
void SetLabel( size_t iLabel, const LabelStruct &newLabel );
|
||||
|
||||
void SetOffset(double dOffset) override;
|
||||
|
||||
static const int DefaultFontSize = 12;
|
||||
|
@ -131,6 +134,7 @@ class AUDACITY_DLL_API LabelTrack final : public Track
|
|||
void Draw( TrackPanelDrawingContext &context, const wxRect & r ) const;
|
||||
|
||||
int GetSelectedIndex() const;
|
||||
void SetSelectedIndex( int index );
|
||||
|
||||
double GetOffset() const override;
|
||||
double GetStartTime() const override;
|
||||
|
@ -297,9 +301,6 @@ private:
|
|||
protected:
|
||||
std::shared_ptr<TrackView> DoGetView() override;
|
||||
std::shared_ptr<TrackControls> DoGetControls() override;
|
||||
|
||||
friend class GetInfoCommand; // to get labels.
|
||||
friend class SetLabelCommand; // to set labels.
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
@ -610,8 +610,7 @@ bool GetInfoCommand::SendLabels(const CommandContext &context)
|
|||
context.StartArray();
|
||||
context.AddItem( (double)i ); // Track number.
|
||||
context.StartArray();
|
||||
for (int nn = 0; nn< (int)labelTrack->mLabels.size(); nn++) {
|
||||
const auto &label = labelTrack->mLabels[nn];
|
||||
for ( const auto &label : labelTrack->GetLabels() ) {
|
||||
context.StartArray();
|
||||
context.AddItem( label.getT0() ); // start
|
||||
context.AddItem( label.getT1() ); // end
|
||||
|
|
|
@ -68,49 +68,50 @@ bool SetLabelCommand::Apply(const CommandContext & context)
|
|||
AudacityProject * p = &context.project;
|
||||
auto &tracks = TrackList::Get( *p );
|
||||
auto &selectedRegion = ViewInfo::Get( *p ).selectedRegion;
|
||||
LabelStruct * pLabel = NULL;
|
||||
int i=0;
|
||||
int nn=0;
|
||||
|
||||
LabelTrack *labelTrack {};
|
||||
for (auto lt : tracks.Any<LabelTrack>()) {
|
||||
if( i > mLabelIndex )
|
||||
break;
|
||||
labelTrack = lt;
|
||||
for (nn = 0;
|
||||
(nn< (int)labelTrack->mLabels.size()) && i<=mLabelIndex;
|
||||
nn++) {
|
||||
i++;
|
||||
pLabel = &labelTrack->mLabels[nn];
|
||||
const LabelStruct * pLabel = nullptr;
|
||||
LabelTrack *labelTrack = nullptr;
|
||||
auto ii = mLabelIndex;
|
||||
if ( mLabelIndex >= 0 ) {
|
||||
for (auto lt : tracks.Any<LabelTrack>()) {
|
||||
const auto &labels = lt->GetLabels();
|
||||
const auto nLabels = labels.size();
|
||||
if( ii >= nLabels )
|
||||
ii -= nLabels;
|
||||
else {
|
||||
labelTrack = lt;
|
||||
pLabel = &labels[ ii ];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( (i< mLabelIndex) || (pLabel == NULL))
|
||||
if ( !pLabel )
|
||||
{
|
||||
context.Error(wxT("LabelIndex was invalid."));
|
||||
return false;
|
||||
}
|
||||
auto newLabel = *pLabel;
|
||||
if( bHasText )
|
||||
pLabel->title = mText;
|
||||
newLabel.title = mText;
|
||||
if( bHasT0 )
|
||||
pLabel->selectedRegion.setT0(mT0, false);
|
||||
newLabel.selectedRegion.setT0(mT0, false);
|
||||
if( bHasT1 )
|
||||
pLabel->selectedRegion.setT1(mT1, false);
|
||||
newLabel.selectedRegion.setT1(mT1, false);
|
||||
if( bHasT0 || bHasT1 )
|
||||
pLabel->selectedRegion.ensureOrdering();
|
||||
pLabel->updated = true;
|
||||
newLabel.selectedRegion.ensureOrdering();
|
||||
labelTrack->SetLabel( ii, newLabel );
|
||||
|
||||
// Only one label can be selected.
|
||||
if( bHasSelected ){
|
||||
if( bHasSelected ) {
|
||||
if( mbSelected )
|
||||
{
|
||||
labelTrack->mSelIndex = nn-1;
|
||||
labelTrack->SetSelectedIndex( ii );
|
||||
double t0 = pLabel->selectedRegion.t0();
|
||||
double t1 = pLabel->selectedRegion.t1();
|
||||
selectedRegion.setTimes( t0, t1);
|
||||
}
|
||||
else if( labelTrack->mSelIndex == (nn-1) )
|
||||
labelTrack->mSelIndex = -1;
|
||||
else if( labelTrack->GetSelectedIndex() == ii )
|
||||
labelTrack->SetSelectedIndex( -1 );
|
||||
}
|
||||
|
||||
labelTrack->SortLabels();
|
||||
|
|
|
@ -37,6 +37,8 @@ public:
|
|||
bool Apply(const CommandContext & context) override;
|
||||
|
||||
public:
|
||||
// zero-based index of the desired label, within the concatenation of the
|
||||
// arrays of labels of all label tracks
|
||||
int mLabelIndex;
|
||||
wxString mText;
|
||||
double mT0;
|
||||
|
|
Loading…
Reference in New Issue
Block a user