- commit
- 9eb2cd7ac283da36a0c0395074769435552d42e3
- parent
- a5425704a7273f2e45bba4ad1d10562b13b8700c
- Author
- Tobias Bengfort <tobias.bengfort@gmx.net>
- Date
- 2010-11-01 21:14
marker handling
Diffstat
| M | gui/a.out | 0 | |
| M | gui/xiRTMainFrame.cpp | 58 | ++++++++++++++++++++++++++++++++++++++++++++++++++++------ |
| M | gui/xiRTMainFrame.h | 31 | ++++++++++++++++++------------- |
| M | gui/xiRetimer_wxfb.cpp | 4 | ++++ |
| M | gui/xiRetimer_wxfb.fbp | 4 | ++-- |
| M | gui/xiRetimer_wxfb.h | 2 | ++ |
| M | src/curve.cpp | 13 | +++++++++---- |
| M | src/marker.cpp | 56 | +++++++++++++++++++++++++++++++++++++++++--------------- |
| M | src/marker.h | 3 | ++- |
9 files changed, 130 insertions, 41 deletions
diff --git a/gui/a.out b/gui/a.out
Binary files differ.diff --git a/gui/xiRTMainFrame.cpp b/gui/xiRTMainFrame.cpp
@@ -19,19 +19,55 @@ xiRTMainFrame::xiRTMainFrame( wxWindow* parent ) : MainFrame( parent ) {
19 19 curve->addMarker();
20 20 curve->setSeeker(0.3);
21 21 width=100; // anything greater than 2
-1 22 Marker_move=false;
22 23 }
23 24
24 -1 xiRTMainFrame::~xiRTMainFrame() {
25 -1 delete[] curve;
26 -1 }
-1 25 xiRTMainFrame::~xiRTMainFrame() {}
27 26
-1 27 // ************ mouse **************
28 28 void xiRTMainFrame::OnLeftDown( wxMouseEvent& event ) {
29 -1 std::cout << event.m_x << " " << event.m_x/(float)width <<std::endl;
-1 29 // check for Marker Select
-1 30 if (event.m_y<=MARKERWIDTH*4/5) {
-1 31 for (int i=0; i<curve->getMarkerLength(); ++i) {
-1 32 int n=int(curve->getMarker(i)*(width-1));
-1 33 if (event.m_x<=n+MARKERWIDTH/2 && event.m_x>=n-MARKERWIDTH/2) {
-1 34 curve->selectMarker(i);
-1 35 Marker_move=true;
-1 36 return;
-1 37 }
-1 38 }
-1 39 }
-1 40 // if not returned set Seeker
-1 41 curve->setSeeker(event.m_x/(float)width);
-1 42 curve->selectMarker(-1); //deselct
-1 43 }
-1 44
-1 45 void xiRTMainFrame::OnLeftUp( wxMouseEvent& event ) {
-1 46 Marker_move=false;
-1 47 }
-1 48
-1 49 void xiRTMainFrame::OnLeftDClick( wxMouseEvent& event ) {
-1 50 // check for Marker Select
-1 51 if (event.m_y<=MARKERWIDTH*4/5) {
-1 52 for (int i=0; i<curve->getMarkerLength(); ++i) {
-1 53 int n=int(curve->getMarker(i)*(width-1));
-1 54 if (event.m_x<=n+MARKERWIDTH/2 && event.m_x>=n-MARKERWIDTH/2) {
-1 55 curve->selectMarker(i);
-1 56 curve->removeMarker();
-1 57 return;
-1 58 }
-1 59 }
-1 60 }
30 61 curve->setSeeker(event.m_x/(float)width);
-1 62 curve->addMarker();
31 63 }
32 64
33 -1 void xiRTMainFrame::OnLeftUp( wxMouseEvent& event ) {}
-1 65 void xiRTMainFrame::OnMotion( wxMouseEvent& event ) {
-1 66 if (Marker_move)
-1 67 curve->setMarker(event.m_x/(float)width);
-1 68 }
34 69
-1 70 // ************ menu **************
35 71 void xiRTMainFrame::OnOpenClick( wxCommandEvent& event )
36 72 {
37 73 wxFileDialog* dialog = new wxFileDialog( (wxWindow*)NULL );
@@ -50,6 +86,7 @@ void xiRTMainFrame::OnExportClick( wxCommandEvent& event )
50 86
51 87 if (dialog->ShowModal()==wxID_OK) {
52 88 wxString filename=dialog->GetPath();
-1 89 sample->process();
53 90 sample->writeFile(filename.mb_str());
54 91 }
55 92 }
@@ -62,7 +99,8 @@ void xiRTMainFrame::OnPrefsClick( wxCommandEvent& event )
62 99
63 100 void xiRTMainFrame::OnExitClick( wxCommandEvent& event )
64 101 {
65 -1 Destroy();
-1 102 delete[] curve;
-1 103 Destroy();
66 104 }
67 105
68 106 void xiRTMainFrame::OnHelpClick( wxCommandEvent& event )
@@ -116,6 +154,14 @@ void xiRTMainFrame::paint() {
116 154 for (int i=0; i<curve->getMarkerLength(); ++i) {
117 155 int n=int(curve->getMarker(i)*(width-1));
118 156 dc.DrawLine(n,0,n,h);
-1 157 wxPoint ps[3];
-1 158 wxPoint p0(n-MARKERWIDTH/2,0);
-1 159 ps[0]=p0;
-1 160 wxPoint p1(n+MARKERWIDTH/2,0);
-1 161 ps[1]=p1;
-1 162 wxPoint p2(n+0,MARKERWIDTH*4/5);
-1 163 ps[2]=p2;
-1 164 dc.DrawPolygon(3,ps);
119 165 }
120 166 dc.SetPen(penSeeker);
121 167 int seek=int(curve->getSeeker()*(width-1));
diff --git a/gui/xiRTMainFrame.h b/gui/xiRTMainFrame.h
@@ -15,23 +15,28 @@ Subclass of MainFrame, which is generated by wxFormBuilder. 15 15 class xiRTMainFrame : public MainFrame 16 16 { 17 17 protected:18 -1 // Handlers for MainFrame events.19 -1 void OnLeftDown( wxMouseEvent& event );20 -1 void OnLeftUp( wxMouseEvent& event );21 -1 void OnOpenClick( wxCommandEvent& event );22 -1 void OnExportClick( wxCommandEvent& event );23 -1 void OnPrefsClick( wxCommandEvent& event );24 -1 void OnExitClick( wxCommandEvent& event );25 -1 void OnHelpClick( wxCommandEvent& event );26 -1 void OnAboutClick( wxCommandEvent& event );-1 18 // Handlers for MainFrame events. -1 19 void OnLeftDown( wxMouseEvent& event ); -1 20 void OnLeftUp( wxMouseEvent& event ); -1 21 void OnLeftDClick( wxMouseEvent& event ); -1 22 void OnMotion( wxMouseEvent& event ); -1 23 void OnOpenClick( wxCommandEvent& event ); -1 24 void OnExportClick( wxCommandEvent& event ); -1 25 void OnPrefsClick( wxCommandEvent& event ); -1 26 void OnExitClick( wxCommandEvent& event ); -1 27 void OnHelpClick( wxCommandEvent& event ); -1 28 void OnAboutClick( wxCommandEvent& event ); 27 29 void OnProcessClick( wxCommandEvent& event );28 -1 void OnMSetClick( wxCommandEvent& event );29 -1 void OnMRmClick( wxCommandEvent& event );30 -1 void OnUpdateUI( wxUpdateUIEvent& event );31 -1 void paint();-1 30 void OnMSetClick( wxCommandEvent& event ); -1 31 void OnMRmClick( wxCommandEvent& event ); -1 32 void OnUpdateUI( wxUpdateUIEvent& event ); -1 33 void paint(); -1 34 static const int MARKERWIDTH=15; -1 35 32 36 Sample* sample; 33 37 Curve* curve; 34 38 int width; -1 39 bool Marker_move; 35 40 36 41 public: 37 42 /** Constructor */
diff --git a/gui/xiRetimer_wxfb.cpp b/gui/xiRetimer_wxfb.cpp
@@ -65,8 +65,10 @@ MainFrame::MainFrame( wxWindow* parent, wxWindowID id, const wxString& title, co 65 65 m_statusBar1 = this->CreateStatusBar( 1, wxST_SIZEGRIP, wxID_ANY ); 66 66 67 67 // Connect Events -1 68 this->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( MainFrame::OnLeftDClick ) ); 68 69 this->Connect( wxEVT_LEFT_DOWN, wxMouseEventHandler( MainFrame::OnLeftDown ) ); 69 70 this->Connect( wxEVT_LEFT_UP, wxMouseEventHandler( MainFrame::OnLeftUp ) ); -1 71 this->Connect( wxEVT_MOTION, wxMouseEventHandler( MainFrame::OnMotion ) ); 70 72 this->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( MainFrame::OnUpdateUI ) ); 71 73 this->Connect( m_open->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainFrame::OnOpenClick ) ); 72 74 this->Connect( m_export->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainFrame::OnExportClick ) ); @@ -79,8 +81,10 @@ MainFrame::MainFrame( wxWindow* parent, wxWindowID id, const wxString& title, co 79 81 MainFrame::~MainFrame() 80 82 { 81 83 // Disconnect Events -1 84 this->Disconnect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( MainFrame::OnLeftDClick ) ); 82 85 this->Disconnect( wxEVT_LEFT_DOWN, wxMouseEventHandler( MainFrame::OnLeftDown ) ); 83 86 this->Disconnect( wxEVT_LEFT_UP, wxMouseEventHandler( MainFrame::OnLeftUp ) ); -1 87 this->Disconnect( wxEVT_MOTION, wxMouseEventHandler( MainFrame::OnMotion ) ); 84 88 this->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( MainFrame::OnUpdateUI ) ); 85 89 this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainFrame::OnOpenClick ) ); 86 90 this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainFrame::OnExportClick ) );
diff --git a/gui/xiRetimer_wxfb.fbp b/gui/xiRetimer_wxfb.fbp
@@ -59,13 +59,13 @@ 59 59 <event name="OnKeyUp"></event> 60 60 <event name="OnKillFocus"></event> 61 61 <event name="OnLeaveWindow"></event>62 -1 <event name="OnLeftDClick"></event>-1 62 <event name="OnLeftDClick">OnLeftDClick</event> 63 63 <event name="OnLeftDown">OnLeftDown</event> 64 64 <event name="OnLeftUp">OnLeftUp</event> 65 65 <event name="OnMiddleDClick"></event> 66 66 <event name="OnMiddleDown"></event> 67 67 <event name="OnMiddleUp"></event>68 -1 <event name="OnMotion"></event>-1 68 <event name="OnMotion">OnMotion</event> 69 69 <event name="OnMouseEvents"></event> 70 70 <event name="OnMouseWheel"></event> 71 71 <event name="OnPaint"></event>
diff --git a/gui/xiRetimer_wxfb.h b/gui/xiRetimer_wxfb.h
@@ -43,8 +43,10 @@ class MainFrame : public wxFrame 43 43 wxStatusBar* m_statusBar1; 44 44 45 45 // Virtual event handlers, overide them in your derived class -1 46 virtual void OnLeftDClick( wxMouseEvent& event ) { event.Skip(); } 46 47 virtual void OnLeftDown( wxMouseEvent& event ) { event.Skip(); } 47 48 virtual void OnLeftUp( wxMouseEvent& event ) { event.Skip(); } -1 49 virtual void OnMotion( wxMouseEvent& event ) { event.Skip(); } 48 50 virtual void OnUpdateUI( wxUpdateUIEvent& event ) { event.Skip(); } 49 51 virtual void OnOpenClick( wxCommandEvent& event ) { event.Skip(); } 50 52 virtual void OnExportClick( wxCommandEvent& event ) { event.Skip(); }
diff --git a/src/curve.cpp b/src/curve.cpp
@@ -9,7 +9,7 @@ Curve::Curve() {
9 9 sample=new Sample(marker);
10 10 seeker=0;
11 11 tempo=90;
12 -1 selMarker=0;
-1 12 selMarker=-1;
13 13 }
14 14
15 15 Curve::~Curve() {
@@ -34,24 +34,29 @@ void Curve::addMarker() {
34 34 float n=marker->nnew2new(seeker);
35 35 marker->add(marker->new2old(n),n);
36 36 // update selMarker
-1 37 /*
37 38 if (n<selMarker) --selMarker;
38 39 if (selMarker>=getMarkerLength()) --selMarker;
-1 40 */
-1 41 selMarker=marker->getAreaNew(n);
39 42 }
40 43
41 44 void Curve::removeMarker() {
-1 45 if (selMarker<0) return;
42 46 marker->remove(selMarker);
43 47 // update selMarker
44 -1 if (selMarker>=getMarkerLength()) --selMarker;
-1 48 // if (selMarker>=getMarkerLength()) --selMarker;
-1 49 selMarker=-1;
45 50 }
46 51
47 52 void Curve::setMarker(float nn) {
-1 53 if (selMarker<0) return;
48 54 int i=marker->getAreaNew(marker->nnew2new(nn));
49 -1 if (i!=selMarker || i!=selMarker-1) return;
-1 55 if (i!=selMarker && i!=selMarker-1) return;
50 56 marker->setNew(selMarker,marker->nnew2new(nn));
51 57 }
52 58
53 59 void Curve::selectMarker(int i) {
54 -1 if (i<0 || i>=getMarkerLength()) return;
55 60 selMarker=i;
56 61 }
57 62
diff --git a/src/marker.cpp b/src/marker.cpp
@@ -10,17 +10,37 @@ Marker::Marker() {
10 10 Marker::~Marker() {
11 11 }
12 12
-1 13 void Marker::reset() {
-1 14 for (int i=0; i<getLength(); ++i) {
-1 15 anew.remove(i);
-1 16 aold.remove(i);
-1 17 }
-1 18 add(0,0);
-1 19 add(1,1);
-1 20 }
-1 21
13 22 void Marker::add(float pold, float pnew) {
14 -1 if (pold<0 || pold>1) return;
15 -1 if (getAreaOld(pold)!=getAreaNew(pnew)) return;
-1 23 print();
-1 24 if (pold<0 || pold>1) {
-1 25 std::cerr << "Error in Marker::add" << std::endl;
-1 26 std::cerr << " pold not in range" << std::endl;
-1 27 return;
-1 28 }
-1 29 if (getAreaOld(pold)!=getAreaNew(pnew)) {
-1 30 std::cerr << "Error in Marker::add" << std::endl;
-1 31 std::cerr << " Areas not Fitting: ";
-1 32 std::cerr << getAreaOld(pold) << " " << getAreaNew(pnew) << std::endl;
-1 33 return;
-1 34 }
16 35 anew.add(pnew);
17 36 aold.add(pold);
18 37 }
19 38
20 39 void Marker::remove(int pi) {
21 40 if (getLength()<=2) return;
22 -1 anew.remove(resort(pi));
23 -1 anew.remove(resort(pi));
-1 41 int i=resort(pi);
-1 42 anew.remove(i);
-1 43 aold.remove(i);
24 44 }
25 45
26 46 float Marker::getNew(int pi) {
@@ -53,11 +73,6 @@ int Marker::getLength() {
53 73 return anew.getLength();
54 74 }
55 75
56 -1 void Marker::println() {
57 -1 aold.println();
58 -1 anew.println();
59 -1 }
60 -1
61 76 int Marker::resort(int pi) {
62 77 if (!(pi>=0 && pi<getLength())) return -1;
63 78 // write anew and indices into arrays
@@ -112,15 +127,26 @@ float Marker::nnew2new(float nn) {
112 127 }
113 128
114 129 int Marker::getAreaNew(float n) {
115 -1 int i=0;
116 -1 while (i<getLength()-1 && n<getNew(i+1)) ++i; // TODO n=getNew(i)
117 -1 return i;
-1 130 // TODO n=getNew(i)
-1 131 for (int i=0; i<getLength(); ++i)
-1 132 if (n<getNew(i)) return i-1;
-1 133 return getLength()-1;
118 134 }
119 135
120 136 int Marker::getAreaOld(float o) {
121 -1 int i=0;
122 -1 while (i<getLength()-1 && o<getOld(i+1)) ++i; // TODO o=getOld(i)
123 -1 return i;
-1 137 // TODO n=getNew(i)
-1 138 for (int i=0; i<getLength(); ++i)
-1 139 if (o<getOld(i)) return i-1;
-1 140 return getLength()-1;
-1 141 }
-1 142
-1 143 void Marker::print() {
-1 144 std::cout << "Marker" << std::endl;
-1 145 for (int i=0; i<getLength(); ++i) {
-1 146 std::cout << i << " ";
-1 147 std::cout << getOld(i) << " ";
-1 148 std::cout << getNew(i) << std::endl;
-1 149 }
124 150 }
125 151
126 152
diff --git a/src/marker.h b/src/marker.h
@@ -15,6 +15,7 @@ class Marker {
15 15 public:
16 16 Marker();
17 17 ~Marker();
-1 18 void reset();
18 19 void add(float pold, float pnew);
19 20 void remove(int pi);
20 21 float getNew(int pi);
@@ -23,7 +24,7 @@ public:
23 24 float getRatio(); // factor by wich the whole sample is stretched; used to guess the length of the output array;
24 25 float getRatio(int i); // factor by wich the is area is stretched;
25 26 int getLength();
26 -1 void println();
-1 27 void print();
27 28 // 0-1 conversion
28 29 float old2new(float o);
29 30 float new2old(float n);