You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

673 lines
19KB

  1. /* SpiralPlugin
  2. * Copyleft (C) 2000 David Griffiths <dave@pawfal.org>
  3. *
  4. * This program is free software; you can redistribute it and/or modify
  5. * it under the terms of the GNU General Public License as published by
  6. * the Free Software Foundation; either version 2 of the License, or
  7. * (at your option) any later version.
  8. *
  9. * This program is distributed in the hope that it will be useful,
  10. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. * GNU General Public License for more details.
  13. *
  14. * You should have received a copy of the GNU General Public License
  15. * along with this program; if not, write to the Free Software
  16. * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  17. */
  18. #include "PoshSamplerPluginGUI.h"
  19. #include <FL/fl_draw.h>
  20. #include <FL/fl_draw.H>
  21. #include <FL/fl_file_chooser.h>
  22. static const int GUI_COLOUR = 179;
  23. static const int GUIBG_COLOUR = 144;
  24. static const int GUIBG2_COLOUR = 145;
  25. ////////////////////////////////////////////
  26. Fl_WaveDisplay::Fl_WaveDisplay(int x,int y,int w,int h, char *Name) :
  27. Fl_Widget(x,y,w,h,Name),
  28. m_Sample(NULL),
  29. m_StartPos(1),
  30. m_EndPos(10),
  31. m_ViewStart(0),
  32. m_ViewEnd(INT_MAX),
  33. m_PlayPos(0),
  34. m_PlayStart(0),
  35. m_LoopStart(0),
  36. m_LoopEnd(INT_MAX),
  37. m_PosMarker(true)
  38. {
  39. }
  40. Fl_WaveDisplay::~Fl_WaveDisplay()
  41. {
  42. }
  43. void Fl_WaveDisplay::SetSample(const float* s, long len)
  44. {
  45. if (m_Sample) delete m_Sample;
  46. m_Sample = new Sample(s,len);
  47. }
  48. void Fl_WaveDisplay::draw()
  49. {
  50. int ho=h()/2;
  51. fl_color(GUIBG_COLOUR);
  52. fl_rectf(x(), y(), w(), h());
  53. if (!m_Sample || m_Sample->GetLength()==0) return;
  54. if (m_ViewStart<0) m_ViewStart=0;
  55. if (m_ViewEnd>m_Sample->GetLength()-1) m_ViewEnd=m_Sample->GetLength()-1;
  56. if (m_PlayStart<0) m_PlayStart=0;
  57. if (m_PlayStart>m_Sample->GetLength()-1) m_PlayStart=m_Sample->GetLength()-1;
  58. if (m_LoopStart<0) m_LoopStart=0;
  59. if (m_LoopStart>m_Sample->GetLength()-1) m_LoopStart=m_Sample->GetLength()-1;
  60. if (m_LoopEnd<0) m_LoopEnd=0;
  61. if (m_LoopEnd>m_Sample->GetLength()-1) m_LoopEnd=m_Sample->GetLength()-1;
  62. float Value=0,NextValue=0;
  63. int pos=0;
  64. int Jump=(m_ViewEnd-m_ViewStart)/w();
  65. if (Jump==0) Jump=1;
  66. for(int n=m_ViewStart; n<m_ViewEnd-Jump; n+=Jump)
  67. {
  68. fl_font(fl_font(),10);
  69. if (m_PlayPos>=n && m_PlayPos<n+Jump)
  70. {
  71. fl_color(FL_YELLOW);
  72. fl_line(x()+pos, y(),
  73. x()+pos, y()+h());
  74. }
  75. if (m_PlayStart>=n && m_PlayStart<n+Jump)
  76. {
  77. fl_color(FL_GREEN);
  78. fl_draw("S",x()+pos+2,y()+h());
  79. fl_line(x()+pos, y(),
  80. x()+pos, y()+h());
  81. }
  82. if (m_LoopStart>=n && m_LoopStart<n+Jump)
  83. {
  84. fl_color(FL_GREEN);
  85. fl_draw("LS",x()+pos+2,y()+h());
  86. fl_line(x()+pos, y(),
  87. x()+pos, y()+h());
  88. }
  89. if (m_LoopEnd>=n && m_LoopEnd<n+Jump)
  90. {
  91. fl_color(FL_GREEN);
  92. fl_draw("LE",x()+pos+2,y()+h());
  93. fl_line(x()+pos, y(),
  94. x()+pos, y()+h());
  95. }
  96. if (n>m_StartPos && n<m_EndPos) fl_color(FL_RED);
  97. else fl_color(FL_WHITE);
  98. Value = NextValue;
  99. // get max
  100. NextValue=(*m_Sample)[n];
  101. for (int m=n; m<n+Jump; m++)
  102. {
  103. if (NextValue<(*m_Sample)[m]) NextValue=(*m_Sample)[m];
  104. }
  105. NextValue*=ho;
  106. fl_line(x()+pos-2, y()+ho-(int)Value,
  107. x()+pos-1, y()+ho-(int)NextValue);
  108. pos++;
  109. }
  110. }
  111. int Fl_WaveDisplay::handle(int event)
  112. {
  113. int xx=Fl::event_x();
  114. int yy=Fl::event_y();
  115. static int DragX,DragY;
  116. static int Mousebutton=0;
  117. static int Holding=0;
  118. static int GrabDist=10;
  119. if (!m_Sample || m_Sample->GetLength()==0) return 1;
  120. if (event==FL_PUSH)
  121. {
  122. GrabDist=(int)((m_ViewEnd-m_ViewStart)*0.03f);
  123. Mousebutton=Fl::event_button();
  124. DragX=xx;
  125. DragY=yy;
  126. if (Mousebutton==1)
  127. {
  128. int MousePos=(xx-x())*((m_ViewEnd-m_ViewStart)/w())+m_ViewStart;
  129. Holding=0;
  130. if (abs(MousePos-m_StartPos)<GrabDist) Holding=1;
  131. else if (abs(MousePos-m_EndPos)<GrabDist) Holding=2;
  132. else if (abs(MousePos-m_PlayStart)<GrabDist) Holding=3;
  133. else if (abs(MousePos-m_LoopStart)<GrabDist) Holding=4;
  134. else if (abs(MousePos-m_LoopEnd)<GrabDist) Holding=5;
  135. else
  136. {
  137. m_StartPos=MousePos;
  138. m_EndPos=MousePos;
  139. }
  140. }
  141. }
  142. if (event==FL_DRAG)
  143. {
  144. if (Mousebutton==1)
  145. {
  146. int MousePos=(xx-x())*((m_ViewEnd-m_ViewStart)/w())+m_ViewStart;
  147. switch (Holding)
  148. {
  149. case 0:
  150. {
  151. if (MousePos>m_EndPos) m_EndPos=MousePos;
  152. else m_StartPos=MousePos;
  153. } break;
  154. case 1:
  155. {
  156. m_StartPos=MousePos;
  157. if (m_StartPos>m_EndPos) Holding=2; // swap
  158. } break;
  159. case 2:
  160. {
  161. m_EndPos=MousePos;
  162. if (m_StartPos>m_EndPos) Holding=1; // swap
  163. } break;
  164. case 3: m_PlayStart=MousePos; break;
  165. case 4: m_LoopStart=MousePos; break;
  166. case 5: m_LoopEnd=MousePos; break;
  167. }
  168. }
  169. if (Mousebutton==2)
  170. {
  171. int Dist=(DragX-xx)*((m_ViewEnd-m_ViewStart)/w());
  172. if (m_ViewStart>0 && m_ViewEnd<m_Sample->GetLength()-1)
  173. {
  174. m_ViewStart+=Dist;
  175. m_ViewEnd+=Dist;
  176. }
  177. else // stop it sticking when at end/beginning
  178. {
  179. if ((Dist>0 && m_ViewStart<=0) ||
  180. (Dist<0 && m_ViewEnd>=m_Sample->GetLength()-1))
  181. {
  182. m_ViewStart+=Dist;
  183. m_ViewEnd+=Dist;
  184. }
  185. }
  186. DragX=xx;
  187. DragY=yy;
  188. }
  189. if (Mousebutton==3)
  190. {
  191. // only draw wave at 1 pixel = 1 sample
  192. if ((m_ViewEnd-m_ViewStart)/w()==1)
  193. {
  194. int MousePos=(xx-x())*((m_ViewEnd-m_ViewStart)/w())+m_ViewStart;
  195. float Value=-(yy-y())/((float)h()/2.0f)+1.0f;
  196. m_Sample->Set(MousePos,Value);
  197. redraw();
  198. }
  199. }
  200. do_callback();
  201. redraw();
  202. }
  203. if (m_EndPos>=m_Sample->GetLength()) m_EndPos=m_Sample->GetLength()-1;
  204. return 1;
  205. }
  206. void Fl_WaveDisplay::ZoomIn()
  207. {
  208. int Zoom=(int)((m_ViewEnd-m_ViewStart)*0.03f);
  209. if ((m_ViewEnd-m_ViewStart)/w()>1)
  210. {
  211. m_ViewStart+=Zoom;
  212. m_ViewEnd-=Zoom;
  213. }
  214. redraw();
  215. }
  216. void Fl_WaveDisplay::ZoomOut()
  217. {
  218. int Zoom=(int)((m_ViewEnd-m_ViewStart)*0.03f);
  219. m_ViewStart-=Zoom;
  220. m_ViewEnd+=Zoom;
  221. redraw();
  222. }
  223. ////////////////////////////////////////////
  224. PoshSamplerPluginGUI::PoshSamplerPluginGUI(int w, int h,PoshSamplerPlugin *o,ChannelHandler *ch,const HostInfo *Info) :
  225. SpiralPluginGUI(w,h,o,ch),
  226. m_UpdateMe(false)
  227. {
  228. int n=0;
  229. m_Load = new Fl_Button(5, 20, 70, 20, "Load");
  230. m_Load->labelsize(10);
  231. m_Load->callback((Fl_Callback*)cb_Load);
  232. add(m_Load);
  233. m_Save = new Fl_Button(5, 40, 70, 20, "Save");
  234. m_Save->labelsize(10);
  235. m_Save->callback((Fl_Callback*)cb_Save);
  236. add(m_Save);
  237. m_Record = new Fl_Button(5, 60, 70, 20, "Record");
  238. m_Record->type(1);
  239. m_Record->labelsize(10);
  240. m_Record->labelcolor(FL_RED);
  241. m_Record->callback((Fl_Callback*)cb_Record);
  242. add(m_Record);
  243. m_Loop = new Fl_Button(80, 20, 70, 20, "Loop");
  244. m_Loop->labelsize(10);
  245. m_Loop->type(1);
  246. m_Loop->callback((Fl_Callback*)cb_Loop);
  247. add(m_Loop);
  248. m_PingPong = new Fl_Button(80, 40, 70, 20, "PingPong");
  249. m_PingPong->labelsize(10);
  250. m_PingPong->type(1);
  251. m_PingPong->callback((Fl_Callback*)cb_PingPong);
  252. add(m_PingPong);
  253. m_PosMarker = new Fl_Button(80, 60, 70, 20, "PosMarker");
  254. m_PosMarker->labelsize(10);
  255. m_PosMarker->type(1);
  256. m_PosMarker->value(1);
  257. m_PosMarker->callback((Fl_Callback*)cb_PosMarker);
  258. add(m_PosMarker);
  259. m_Volume = new Fl_Knob(160, 20, 50, 50, "Volume");
  260. m_Volume->color(GUI_COLOUR);
  261. m_Volume->type(Fl_Knob::LINELIN);
  262. m_Volume->labelsize(10);
  263. m_Volume->maximum(2);
  264. m_Volume->step(0.001);
  265. m_Volume->value(1);
  266. m_Volume->callback((Fl_Callback*)cb_Volume);
  267. add(m_Volume);
  268. m_Pitch = new Fl_Knob(220, 20, 50, 50, "Pitch");
  269. m_Pitch->color(GUI_COLOUR);
  270. m_Pitch->type(Fl_Knob::LINELIN);
  271. m_Pitch->labelsize(10);
  272. m_Pitch->maximum(10);
  273. m_Pitch->step(0.001);
  274. m_Pitch->value(1);
  275. m_Pitch->callback((Fl_Callback*)cb_Pitch);
  276. add(m_Pitch);
  277. m_Octave = new Fl_Knob(280, 20, 50, 50, "Octave");
  278. m_Octave->color(GUI_COLOUR);
  279. m_Octave->type(Fl_Knob::LINELIN);
  280. m_Octave->labelsize(10);
  281. m_Octave->maximum(12);
  282. m_Octave->step(1);
  283. m_Octave->value(6);
  284. m_Octave->callback((Fl_Callback*)cb_Octave);
  285. add(m_Octave);
  286. m_Note = new Fl_Counter(w-45, 50, 30, 20, "Trig Note");
  287. m_Note->labelsize(10);
  288. m_Note->type(FL_SIMPLE_COUNTER);
  289. m_Note->step(1);
  290. m_Note->value(n);
  291. m_Note->callback((Fl_Callback*)cb_Note);
  292. add(m_Note);
  293. m_SampleNum = new Fl_Counter(w-45, 15, 30, 20, "Sample");
  294. m_SampleNum->labelsize(10);
  295. m_SampleNum->type(FL_SIMPLE_COUNTER);
  296. m_SampleNum->step(1);
  297. m_SampleNum->value(n);
  298. m_SampleNum->callback((Fl_Callback*)cb_SampleNum);
  299. add(m_SampleNum);
  300. m_Display = new Fl_WaveDisplay(5,85,w-10,100,"");
  301. m_Display->callback((Fl_Callback*)cb_WaveDisplay);
  302. int bx=5,by=190,bw=w/9-2,bh=20,bs=w/9-2;
  303. n=0;
  304. m_Cut = new Fl_Button(bx+(n++*bs),by,bw,bh,"Cut");
  305. m_Cut->labelsize(10);
  306. m_Cut->callback((Fl_Callback*)cb_Cut);
  307. m_Copy = new Fl_Button(bx+(n++*bs),by,bw,bh,"Copy");
  308. m_Copy->labelsize(10);
  309. m_Copy->callback((Fl_Callback*)cb_Copy);
  310. m_Paste = new Fl_Button(bx+(n++*bs),by,bw,bh,"Paste");
  311. m_Paste->labelsize(10);
  312. m_Paste->callback((Fl_Callback*)cb_Paste);
  313. m_Mix = new Fl_Button(bx+(n++*bs),by,bw,bh,"Mix");
  314. m_Mix->labelsize(10);
  315. m_Mix->callback((Fl_Callback*)cb_Mix);
  316. m_Crop = new Fl_Button(bx+(n++*bs),by,bw,bh,"Crop");
  317. m_Crop->labelsize(10);
  318. m_Crop->callback((Fl_Callback*)cb_Crop);
  319. m_Reverse = new Fl_Button(bx+(n++*bs),by,bw,bh,"Reverse");
  320. m_Reverse->labelsize(10);
  321. m_Reverse->callback((Fl_Callback*)cb_Reverse);
  322. m_Amp = new Fl_Button(bx+(n++*bs),by,bw,bh,"Amp");
  323. m_Amp->labelsize(10);
  324. m_Amp->callback((Fl_Callback*)cb_Amp);
  325. m_ZoomIn = new Fl_Button(bx+(n++*bs),by,bw,bh,"Zoom +");
  326. m_ZoomIn->labelsize(10);
  327. m_ZoomIn->callback((Fl_Callback*)cb_ZoomIn);
  328. m_ZoomOut = new Fl_Button(bx+(n++*bs),by,bw,bh,"Zoom -");
  329. m_ZoomOut->labelsize(10);
  330. m_ZoomOut->callback((Fl_Callback*)cb_ZoomOut);
  331. end();
  332. redraw();
  333. }
  334. void PoshSamplerPluginGUI::UpdateSampleDisplay(int num)
  335. {
  336. m_GUICH->SetCommand(PoshSamplerPlugin::GETSAMPLE);
  337. m_GUICH->Wait();
  338. m_GUICH->RequestChannelAndWait("SampleSize");
  339. long SampleSize=m_GUICH->GetLong("SampleSize");
  340. if (SampleSize)
  341. {
  342. char *TempBuf = new char[SampleSize];
  343. m_GUICH->BulkTransfer("SampleBuffer",(void*)TempBuf,SampleSize);
  344. m_Display->SetSample((float*)TempBuf,SampleSize/sizeof(float));
  345. delete[] TempBuf;
  346. }
  347. }
  348. void PoshSamplerPluginGUI::Update()
  349. {
  350. SetPlayPos(m_GUICH->GetLong("PlayPos"));
  351. if (m_UpdateMe)
  352. {
  353. UpdateSampleDisplay((int)m_SampleNum->value());
  354. m_Display->redraw();
  355. m_UpdateMe=false;
  356. }
  357. redraw();
  358. }
  359. void PoshSamplerPluginGUI::UpdateValues(SpiralPlugin *o)
  360. {
  361. PoshSamplerPlugin *Plugin = (PoshSamplerPlugin*)o;
  362. m_Volume->value(Plugin->GetVolume((int)m_SampleNum->value()));
  363. m_Pitch->value(Plugin->GetPitch((int)m_SampleNum->value()));
  364. m_Note->value(Plugin->GetNote((int)m_SampleNum->value()));
  365. m_Loop->value(Plugin->GetLoop((int)m_SampleNum->value()));
  366. m_UpdateMe=true;
  367. m_Display->SetPlayStart(Plugin->GetPlayStart((int)m_SampleNum->value()));
  368. m_Display->SetLoopStart(Plugin->GetLoopStart((int)m_SampleNum->value()));
  369. m_Display->SetLoopEnd(Plugin->GetLoopEnd((int)m_SampleNum->value()));
  370. m_Display->redraw();
  371. }
  372. inline void PoshSamplerPluginGUI::cb_Load_i(Fl_Button* o, void* v)
  373. {
  374. char *fn=fl_file_chooser("Load a sample", "{*.wav,*.WAV}", NULL);
  375. if (fn && fn!='\0')
  376. {
  377. strcpy(m_TextBuf,fn);
  378. m_GUICH->SetData("Name",m_TextBuf);
  379. m_GUICH->Set("Num",(int)m_SampleNum->value());
  380. m_GUICH->SetCommand(PoshSamplerPlugin::LOAD);
  381. m_GUICH->Wait(); // wait for the sample to load
  382. UpdateSampleDisplay((int)m_SampleNum->value());
  383. m_Display->redraw();
  384. redraw();
  385. }
  386. }
  387. void PoshSamplerPluginGUI::cb_Load(Fl_Button* o, void* v)
  388. { ((PoshSamplerPluginGUI*)(o->parent()))->cb_Load_i(o,v);}
  389. inline void PoshSamplerPluginGUI::cb_Save_i(Fl_Button* o, void* v)
  390. {
  391. char *fn=fl_file_chooser("Save sample", "{*.wav,*.WAV}", NULL);
  392. if (fn && fn!='\0')
  393. {
  394. strcpy(m_TextBuf,fn);
  395. m_GUICH->Set("Name",m_TextBuf);
  396. m_GUICH->Set("Num",(int)m_SampleNum->value());
  397. m_GUICH->SetCommand(PoshSamplerPlugin::SAVE);
  398. }
  399. }
  400. void PoshSamplerPluginGUI::cb_Save(Fl_Button* o, void* v)
  401. { ((PoshSamplerPluginGUI*)(o->parent()))->cb_Save_i(o,v);}
  402. inline void PoshSamplerPluginGUI::cb_Volume_i(Fl_Knob* o, void* v)
  403. {
  404. m_GUICH->Set("Value",(float)o->value());
  405. m_GUICH->Set("Num",(int)m_SampleNum->value());
  406. m_GUICH->SetCommand(PoshSamplerPlugin::SETVOL);
  407. }
  408. void PoshSamplerPluginGUI::cb_Volume(Fl_Knob* o, void* v)
  409. { ((PoshSamplerPluginGUI*)(o->parent()))->cb_Volume_i(o,v);}
  410. inline void PoshSamplerPluginGUI::cb_Pitch_i(Fl_Knob* o, void* v)
  411. {
  412. m_GUICH->Set("Value",(float)o->value());
  413. m_GUICH->Set("Num",(int)m_SampleNum->value());
  414. m_GUICH->SetCommand(PoshSamplerPlugin::SETPITCH);
  415. }
  416. void PoshSamplerPluginGUI::cb_Pitch(Fl_Knob* o, void* v)
  417. { ((PoshSamplerPluginGUI*)(o->parent()))->cb_Pitch_i(o,v);}
  418. inline void PoshSamplerPluginGUI::cb_Octave_i(Fl_Knob* o, void* v)
  419. {
  420. m_GUICH->Set("Int",(int)o->value());
  421. m_GUICH->Set("Num",(int)m_SampleNum->value());
  422. m_GUICH->SetCommand(PoshSamplerPlugin::SETOCT);
  423. }
  424. void PoshSamplerPluginGUI::cb_Octave(Fl_Knob* o, void* v)
  425. { ((PoshSamplerPluginGUI*)(o->parent()))->cb_Octave_i(o,v);}
  426. inline void PoshSamplerPluginGUI::cb_Loop_i(Fl_Button* o, void* v)
  427. {
  428. m_GUICH->Set("Bool",(bool)o->value());
  429. m_GUICH->Set("Num",(int)m_SampleNum->value());
  430. m_GUICH->SetCommand(PoshSamplerPlugin::SETLOOP);
  431. }
  432. void PoshSamplerPluginGUI::cb_Loop(Fl_Button* o, void* v)
  433. { ((PoshSamplerPluginGUI*)(o->parent()))->cb_Loop_i(o,v);}
  434. inline void PoshSamplerPluginGUI::cb_PingPong_i(Fl_Button* o, void* v)
  435. {
  436. m_GUICH->Set("Bool",(bool)o->value());
  437. m_GUICH->Set("Num",(int)m_SampleNum->value());
  438. m_GUICH->SetCommand(PoshSamplerPlugin::SETPING);
  439. }
  440. void PoshSamplerPluginGUI::cb_PingPong(Fl_Button* o, void* v)
  441. { ((PoshSamplerPluginGUI*)(o->parent()))->cb_PingPong_i(o,v);}
  442. inline void PoshSamplerPluginGUI::cb_Record_i(Fl_Button* o, void* v)
  443. {
  444. m_GUICH->Set("Bool",(bool)o->value());
  445. m_GUICH->SetCommand(PoshSamplerPlugin::SETREC);
  446. redraw();
  447. }
  448. void PoshSamplerPluginGUI::cb_Record(Fl_Button* o, void* v)
  449. { ((PoshSamplerPluginGUI*)(o->parent()))->cb_Record_i(o,v);}
  450. inline void PoshSamplerPluginGUI::cb_PosMarker_i(Fl_Button* o, void* v)
  451. { m_Display->SetPosMarker(o->value()); }
  452. void PoshSamplerPluginGUI::cb_PosMarker(Fl_Button* o, void* v)
  453. { ((PoshSamplerPluginGUI*)(o->parent()))->cb_PosMarker_i(o,v);}
  454. inline void PoshSamplerPluginGUI::cb_Note_i(Fl_Counter* o, void* v)
  455. {
  456. m_GUICH->Set("Int",(int)o->value());
  457. m_GUICH->Set("Num",(int)m_SampleNum->value());
  458. m_GUICH->SetCommand(PoshSamplerPlugin::SETNOTE);
  459. }
  460. void PoshSamplerPluginGUI::cb_Note(Fl_Counter* o, void* v)
  461. { ((PoshSamplerPluginGUI*)(o->parent()))->cb_Note_i(o,v);}
  462. inline void PoshSamplerPluginGUI::cb_SampleNum_i(Fl_Counter* o, void* v)
  463. {
  464. if (m_SampleNum->value()<0) m_SampleNum->value(0);
  465. if (m_SampleNum->value()>7) m_SampleNum->value(7);
  466. m_GUICH->Set("Num",(int)m_SampleNum->value());
  467. m_GUICH->SetCommand(PoshSamplerPlugin::SETCURRENT);
  468. m_GUICH->Wait();
  469. UpdateSampleDisplay((int)m_SampleNum->value());
  470. }
  471. void PoshSamplerPluginGUI::cb_SampleNum(Fl_Counter* o, void* v)
  472. { ((PoshSamplerPluginGUI*)(o->parent()))->cb_SampleNum_i(o,v);}
  473. inline void PoshSamplerPluginGUI::cb_Cut_i(Fl_Button* o, void* v)
  474. {
  475. m_GUICH->Set("Start",(long)m_Display->GetRangeStart());
  476. m_GUICH->Set("End",(long)m_Display->GetRangeEnd());
  477. m_GUICH->Set("Num",(int)m_SampleNum->value());
  478. m_GUICH->SetCommand(PoshSamplerPlugin::CUT);
  479. m_GUICH->Wait();
  480. UpdateSampleDisplay((int)m_SampleNum->value());
  481. m_Display->redraw();
  482. }
  483. void PoshSamplerPluginGUI::cb_Cut(Fl_Button* o, void* v)
  484. { ((PoshSamplerPluginGUI*)(o->parent()))->cb_Cut_i(o,v);}
  485. inline void PoshSamplerPluginGUI::cb_Copy_i(Fl_Button* o, void* v)
  486. {
  487. m_GUICH->Set("Start",(long)m_Display->GetRangeStart());
  488. m_GUICH->Set("End",(long)m_Display->GetRangeEnd());
  489. m_GUICH->Set("Num",(int)m_SampleNum->value());
  490. m_GUICH->SetCommand(PoshSamplerPlugin::COPY);
  491. }
  492. void PoshSamplerPluginGUI::cb_Copy(Fl_Button* o, void* v)
  493. { ((PoshSamplerPluginGUI*)(o->parent()))->cb_Copy_i(o,v);}
  494. inline void PoshSamplerPluginGUI::cb_Paste_i(Fl_Button* o, void* v)
  495. {
  496. m_GUICH->Set("Start",(long)m_Display->GetRangeStart());
  497. m_GUICH->Set("End",(long)m_Display->GetRangeEnd());
  498. m_GUICH->Set("Num",(int)m_SampleNum->value());
  499. m_GUICH->SetCommand(PoshSamplerPlugin::PASTE);
  500. m_GUICH->Wait();
  501. UpdateSampleDisplay((int)m_SampleNum->value());
  502. m_Display->redraw();
  503. }
  504. void PoshSamplerPluginGUI::cb_Paste(Fl_Button* o, void* v)
  505. { ((PoshSamplerPluginGUI*)(o->parent()))->cb_Paste_i(o,v);}
  506. inline void PoshSamplerPluginGUI::cb_Mix_i(Fl_Button* o, void* v)
  507. {
  508. m_GUICH->Set("Start",(long)m_Display->GetRangeStart());
  509. m_GUICH->Set("End",(long)m_Display->GetRangeEnd());
  510. m_GUICH->Set("Num",(int)m_SampleNum->value());
  511. m_GUICH->SetCommand(PoshSamplerPlugin::MIX);
  512. m_GUICH->Wait();
  513. UpdateSampleDisplay((int)m_SampleNum->value());
  514. m_Display->redraw();
  515. }
  516. void PoshSamplerPluginGUI::cb_Mix(Fl_Button* o, void* v)
  517. { ((PoshSamplerPluginGUI*)(o->parent()))->cb_Mix_i(o,v);}
  518. inline void PoshSamplerPluginGUI::cb_Crop_i(Fl_Button* o, void* v)
  519. {
  520. m_GUICH->Set("Start",(long)m_Display->GetRangeStart());
  521. m_GUICH->Set("End",(long)m_Display->GetRangeEnd());
  522. m_GUICH->Set("Num",(int)m_SampleNum->value());
  523. m_GUICH->SetCommand(PoshSamplerPlugin::CROP);
  524. m_GUICH->Wait();
  525. UpdateSampleDisplay((int)m_SampleNum->value());
  526. m_Display->redraw();
  527. }
  528. void PoshSamplerPluginGUI::cb_Crop(Fl_Button* o, void* v)
  529. { ((PoshSamplerPluginGUI*)(o->parent()))->cb_Crop_i(o,v);}
  530. inline void PoshSamplerPluginGUI::cb_Reverse_i(Fl_Button* o, void* v)
  531. {
  532. m_GUICH->Set("Start",(long)m_Display->GetRangeStart());
  533. m_GUICH->Set("End",(long)m_Display->GetRangeEnd());
  534. m_GUICH->Set("Num",(int)m_SampleNum->value());
  535. m_GUICH->SetCommand(PoshSamplerPlugin::REV);
  536. m_GUICH->Wait();
  537. UpdateSampleDisplay((int)m_SampleNum->value());
  538. m_Display->redraw();
  539. }
  540. void PoshSamplerPluginGUI::cb_Reverse(Fl_Button* o, void* v)
  541. { ((PoshSamplerPluginGUI*)(o->parent()))->cb_Reverse_i(o,v);}
  542. inline void PoshSamplerPluginGUI::cb_Amp_i(Fl_Button* o, void* v)
  543. {
  544. m_GUICH->Set("Start",(long)m_Display->GetRangeStart());
  545. m_GUICH->Set("End",(long)m_Display->GetRangeEnd());
  546. m_GUICH->Set("Num",(int)m_SampleNum->value());
  547. m_GUICH->SetCommand(PoshSamplerPlugin::AMP);
  548. m_GUICH->Wait();
  549. UpdateSampleDisplay((int)m_SampleNum->value());
  550. m_Display->redraw();
  551. }
  552. void PoshSamplerPluginGUI::cb_Amp(Fl_Button* o, void* v)
  553. { ((PoshSamplerPluginGUI*)(o->parent()))->cb_Amp_i(o,v);}
  554. inline void PoshSamplerPluginGUI::cb_WaveDisplay_i(Fl_WaveDisplay* o, void* v)
  555. {
  556. m_GUICH->Set("Start",(long)o->GetPlayStart());
  557. m_GUICH->Set("End",(long)o->GetLoopEnd());
  558. m_GUICH->Set("LoopStart",(long)o->GetLoopStart());
  559. m_GUICH->Set("Num",(int)m_SampleNum->value());
  560. m_GUICH->SetCommand(PoshSamplerPlugin::SETPLAYPOINTS);
  561. }
  562. void PoshSamplerPluginGUI::cb_WaveDisplay(Fl_WaveDisplay* o, void* v)
  563. { ((PoshSamplerPluginGUI*)(o->parent()))->cb_WaveDisplay_i(o,v);}
  564. inline void PoshSamplerPluginGUI::cb_ZoomIn_i(Fl_Button* o, void* v)
  565. {
  566. m_Display->ZoomIn();
  567. }
  568. void PoshSamplerPluginGUI::cb_ZoomIn(Fl_Button* o, void* v)
  569. { ((PoshSamplerPluginGUI*)(o->parent()))->cb_ZoomIn_i(o,v);}
  570. inline void PoshSamplerPluginGUI::cb_ZoomOut_i(Fl_Button* o, void* v)
  571. {
  572. m_Display->ZoomOut();
  573. }
  574. void PoshSamplerPluginGUI::cb_ZoomOut(Fl_Button* o, void* v)
  575. { ((PoshSamplerPluginGUI*)(o->parent()))->cb_ZoomOut_i(o,v);}