mirror of
https://github.com/cookiengineer/audacity
synced 2025-12-12 15:46:25 +01:00
Locate and position the current Audacity source code, and clear a variety of old junk out of the way into junk-branches
This commit is contained in:
245
src/LabelTrack.h
Normal file
245
src/LabelTrack.h
Normal file
@@ -0,0 +1,245 @@
|
||||
/**********************************************************************
|
||||
|
||||
Audacity: A Digital Audio Editor
|
||||
|
||||
LabelTrack.h
|
||||
|
||||
Dominic Mazzoni
|
||||
James Crook
|
||||
Jun Wan
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
#ifndef _LABELTRACK_
|
||||
#define _LABELTRACK_
|
||||
|
||||
#include "Track.h"
|
||||
|
||||
#include <wx/brush.h>
|
||||
#include <wx/event.h>
|
||||
#include <wx/font.h>
|
||||
#include <wx/pen.h>
|
||||
#include <wx/dynarray.h>
|
||||
#include <wx/string.h>
|
||||
#include <wx/clipbrd.h>
|
||||
|
||||
|
||||
class wxKeyEvent;
|
||||
class wxMouseEvent;
|
||||
class wxTextFile;
|
||||
class wxWindow;
|
||||
class wxIcon;
|
||||
class wxBitmap;
|
||||
class TrackList;
|
||||
|
||||
class AudacityProject;
|
||||
class DirManager;
|
||||
class TimeWarper;
|
||||
|
||||
|
||||
class LabelStruct
|
||||
{
|
||||
public:
|
||||
LabelStruct();
|
||||
void DrawLines( wxDC & dc, const wxRect & r);
|
||||
void DrawGlyphs( wxDC & dc, const wxRect & r, int GlyphLeft, int GlyphRight);
|
||||
void DrawText( wxDC & dc, const wxRect & r);
|
||||
void DrawTextBox( wxDC & dc, const wxRect & r);
|
||||
void DrawHighlight( wxDC & dc, int xPos1, int xPos2, int charHeight);
|
||||
void getXPos( wxDC & dc, int * xPos1, int cursorPos);
|
||||
|
||||
public:
|
||||
double t; /// Time for left hand of label.
|
||||
double t1; /// Time for right hand of label.
|
||||
wxString title; /// Text of the label.
|
||||
int width; /// width of the text in pixels.
|
||||
|
||||
// Working storage for on-screen layout.
|
||||
int x; /// Pixel position of left hand glyph
|
||||
int x1; /// Pixel position of right hand glyph
|
||||
int xText; /// Pixel position of left hand side of text box
|
||||
int y; /// Pixel position of label.
|
||||
|
||||
bool highlighted; /// if the text is highlighted
|
||||
bool changeInitialMouseXPos; /// flag to change initial mouse X pos
|
||||
bool updated; /// flag to tell if the label times were updated
|
||||
};
|
||||
|
||||
WX_DEFINE_ARRAY(LabelStruct *, LabelArray);
|
||||
|
||||
const int NUM_GLYPH_CONFIGS = 3;
|
||||
const int NUM_GLYPH_HIGHLIGHTS = 4;
|
||||
const int MAX_NUM_ROWS =80;
|
||||
|
||||
|
||||
class LabelTrack:public Track {
|
||||
friend class LabelStruct;
|
||||
|
||||
public:
|
||||
bool IsGoodLabelCharacter(int keyCode, wxChar charCode);
|
||||
bool IsGoodLabelFirstCharacter(int keyCode, wxChar charCode);
|
||||
bool IsTextSelected();
|
||||
|
||||
void CreateCustomGlyphs();
|
||||
LabelTrack(DirManager * projDirManager);
|
||||
LabelTrack(const LabelTrack &orig);
|
||||
|
||||
virtual ~ LabelTrack();
|
||||
virtual void SetOffset(double dOffset);
|
||||
|
||||
static void ResetFont();
|
||||
|
||||
void Draw(wxDC & dc, const wxRect & r, double h, double pps,
|
||||
double sel0, double sel1);
|
||||
|
||||
int getSelectedIndex() const { return mSelIndex; }
|
||||
|
||||
virtual int GetKind() const { return Label; }
|
||||
|
||||
virtual double GetStartTime();
|
||||
virtual double GetEndTime();
|
||||
|
||||
virtual Track *Duplicate() { return new LabelTrack(*this); }
|
||||
|
||||
virtual bool HandleXMLTag(const wxChar *tag, const wxChar **attrs);
|
||||
virtual XMLTagHandler *HandleXMLChild(const wxChar *tag);
|
||||
virtual void WriteXML(XMLWriter &xmlFile);
|
||||
|
||||
#if LEGACY_PROJECT_FILE_SUPPORT
|
||||
virtual bool Load(wxTextFile * in, DirManager * dirManager);
|
||||
virtual bool Save(wxTextFile * out, bool overwrite);
|
||||
#endif
|
||||
|
||||
virtual bool Cut (double t0, double t1, Track ** dest);
|
||||
// JKC Do not add the const modifier to Copy(), Clear()
|
||||
// or Paste() because then it
|
||||
// is no longer recognised as a virtual function matching the
|
||||
// one in Track.
|
||||
virtual bool Copy (double t0, double t1, Track ** dest);// const;
|
||||
virtual bool Clear(double t0, double t1);
|
||||
virtual bool Paste(double t, Track * src);
|
||||
bool Repeat(double t0, double t1, int n);
|
||||
|
||||
virtual bool Silence(double t0, double t1);
|
||||
virtual bool InsertSilence(double t, double len);
|
||||
int OverGlyph(int x, int y);
|
||||
static wxBitmap & GetGlyph( int i);
|
||||
|
||||
|
||||
void ResetFlags();
|
||||
bool OverTextBox(const LabelStruct *pLabel, int x, int y);
|
||||
bool CutSelectedText();
|
||||
bool CopySelectedText();
|
||||
bool PasteSelectedText(double sel0, double sel1);
|
||||
static bool IsTextClipSupported();
|
||||
|
||||
// methods to set flags
|
||||
void SetDragXPos(const int d) { mDragXPos = d; };
|
||||
void SetInBox(bool inTextBox) { mInBox = inTextBox; };
|
||||
void SetResetCursorPos(bool resetFlag) { mResetCursorPos = resetFlag; };
|
||||
void SetWrongDragging(bool rightFlag) { mRightDragging = rightFlag; };
|
||||
void SetDrawCursor(bool drawCursorFlag) { mDrawCursor = drawCursorFlag; };
|
||||
|
||||
bool HandleMouse(const wxMouseEvent & evt, wxRect & r, double h, double pps,
|
||||
double *newSel0, double *newSel1);
|
||||
|
||||
bool CaptureKey(wxKeyEvent & event);
|
||||
bool OnKeyDown(double & sel0, double & sel1, wxKeyEvent & event);
|
||||
bool OnChar(double & sel0, double & sel1, wxKeyEvent & event);
|
||||
|
||||
void Import(wxTextFile & f);
|
||||
void Export(wxTextFile & f);
|
||||
|
||||
void Unselect();
|
||||
|
||||
bool IsSelected() const;
|
||||
|
||||
int GetNumLabels() const;
|
||||
const LabelStruct *GetLabel(int index) const;
|
||||
|
||||
//This returns the index of the label we just added.
|
||||
int AddLabel(double t, double t1, const wxString &title = wxT(""));
|
||||
//And this tells us the index, if there is a label already there.
|
||||
int GetLabelIndex(double t, double t1);
|
||||
|
||||
//This deletes the label at given index.
|
||||
void DeleteLabel(int index);
|
||||
|
||||
//get current cursor position
|
||||
bool CalcCursorX(wxWindow * parent, int * x);
|
||||
int getCurrentCursorPosition() const { return mCurrentCursorPos; };
|
||||
|
||||
void ShiftLabelsOnClear(double b, double e);
|
||||
void ChangeLabelsOnClear(double b, double e);
|
||||
void ShiftLabelsOnInsert(double length, double pt);
|
||||
void ChangeLabelsOnReverse(double b, double e);
|
||||
void ScaleLabels(double b, double e, double change);
|
||||
double AdjustTimeStampOnScale(double t, double b, double e, double change);
|
||||
void WarpLabels(const TimeWarper &warper);
|
||||
|
||||
// Returns tab-separated text of all labels completely within given region
|
||||
wxString GetTextOfLabels(double t0, double t1);
|
||||
|
||||
public:
|
||||
void SortLabels();
|
||||
//These two are used by a TrackPanel KLUDGE, which is why they are public.
|
||||
bool mbHitCenter;
|
||||
//The edge variable tells us what state the icon is in.
|
||||
//mOldEdge is useful for telling us when there has been a state change.
|
||||
int mOldEdge;
|
||||
private:
|
||||
|
||||
int mSelIndex; /// Keeps track of the currently selected label
|
||||
int mMouseOverLabelLeft; /// Keeps track of which left label the mouse is currently over.
|
||||
int mMouseOverLabelRight; /// Keeps track of which right label the mouse is currently over.
|
||||
int mxMouseDisplacement; /// Displacement of mouse cursor from the centre being dragged.
|
||||
LabelArray mLabels;
|
||||
|
||||
static int mIconHeight;
|
||||
static int mIconWidth;
|
||||
static int mTextHeight;
|
||||
static bool mbGlyphsReady;
|
||||
static wxBitmap mBoundaryGlyphs[NUM_GLYPH_CONFIGS * NUM_GLYPH_HIGHLIGHTS];
|
||||
|
||||
int xUsed[MAX_NUM_ROWS];
|
||||
|
||||
static int mFontHeight;
|
||||
int mXPos1; /// left X pos of highlighted area
|
||||
int mXPos2; /// right X pos of highlighted area
|
||||
int mCurrentCursorPos; /// current cursor position
|
||||
int mInitialCursorPos; /// initial cursor position
|
||||
double mMouseXPos; /// mouse X pos
|
||||
int mDragXPos; /// end X pos of dragging
|
||||
bool mInBox; /// flag to tell if the mouse is in text box
|
||||
bool mResetCursorPos; /// flag to reset cursor position(used in the dragging the glygh)
|
||||
bool mRightDragging; /// flag to tell if it's a valid dragging
|
||||
bool mDrawCursor; /// flag to tell if drawing the cursor or not
|
||||
|
||||
// Used only for a LabelTrack on the clipboard
|
||||
double mClipLen;
|
||||
|
||||
void ComputeLayout(const wxRect & r, double h, double pps);
|
||||
void ComputeTextPosition(const wxRect & r, int index);
|
||||
void SetCurrentCursorPosition(wxDC & dc, int xPos);
|
||||
|
||||
void calculateFontHeight(wxDC & dc);
|
||||
void RemoveSelectedText();
|
||||
|
||||
bool mIsAdjustingLabel;
|
||||
|
||||
static wxFont msFont;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
// Indentation settings for Vim and Emacs and unique identifier for Arch, a
|
||||
// version control system. Please do not modify past this point.
|
||||
//
|
||||
// Local Variables:
|
||||
// c-basic-offset: 3
|
||||
// indent-tabs-mode: nil
|
||||
// End:
|
||||
//
|
||||
// vim: et sts=3 sw=3
|
||||
// arch-tag: fa157f82-b858-406d-9d4b-120d89410f11
|
||||
|
||||
Reference in New Issue
Block a user