Assists music production by grouping standalone programs into sessions. Community version of "Non Session Manager".
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.

619 lines
17KB

  1. # data file for the Fltk User Interface Designer (fluid)
  2. version 1.0108
  3. header_name {.H}
  4. code_name {.C}
  5. decl {const float STATUS_UPDATE_FREQ = 0.5f;} {}
  6. decl {\#include "Fl_Menu_Settings.H"} {}
  7. decl {\#include "Timeline.H"} {}
  8. decl {\#include "Engine.H"} {}
  9. decl {\#include "Transport.H"} {}
  10. decl {\#include "Loggable.H"} {}
  11. decl {\#include "Clock.H"} {public
  12. }
  13. decl {\#include "Track.H" // for capture_format} {}
  14. decl {\#include "Audio_File.H" // for supported formats} {}
  15. decl {\#include "Waveform.H" // for options} {}
  16. decl {\#include "Region.H" // for options} {}
  17. decl {\#include "Control_Sequence.H" // for options} {}
  18. decl {\#include <FL/fl_ask.H>} {}
  19. decl {\#include <FL/Fl.H>} {}
  20. decl {extern char *user_config_dir;} {global
  21. }
  22. class TLE {open
  23. } {
  24. decl {Fl_Color system_colors[3];} {public
  25. }
  26. decl {static void menubar_cb ( void *v )} {}
  27. decl {void menubar_cb ( void )} {}
  28. Function {menu_picked_value( const Fl_Menu_ *m )} {open return_type {static int}
  29. } {
  30. code {return m->menu()[ m->value() ].flags & FL_MENU_VALUE;} {}
  31. }
  32. Function {save()} {open
  33. } {
  34. code {const char options_filename[] = "options";
  35. // const char state_filename[] = "state";
  36. // save options
  37. char *path;
  38. asprintf( &path, "%s/%s", user_config_dir, options_filename );
  39. ((Fl_Menu_Settings*)menubar)->dump( menubar->find_item( "&Options" ), path );
  40. free( path );
  41. // save unjournaled state
  42. // Loggable::save_unjournaled( state_filename );} {}
  43. }
  44. Function {capture_format_cb( Fl_Widget *w, void *v )} {open private return_type {static void}
  45. } {
  46. code {((TLE*)v)->capture_format_cb();} {}
  47. }
  48. Function {capture_format_cb()} {open private return_type void
  49. } {
  50. code {Fl_Menu_ *o = menubar;
  51. Track::capture_format = o->menu()[ o->value() ].label();} {}
  52. }
  53. Function {TLE()} {open
  54. } {
  55. code {make_window();
  56. // Fl::visual( RGB8 );
  57. Fl::visible_focus( 0 );
  58. Fl::get_system_colors();
  59. Fl::scheme( "plastic" );
  60. system_colors[ 0 ] = (Fl_Color)Fl::get_color( FL_BACKGROUND_COLOR );
  61. system_colors[ 1 ] = (Fl_Color)Fl::get_color( FL_FOREGROUND_COLOR );
  62. system_colors[ 2 ] = (Fl_Color)Fl::get_color( FL_BACKGROUND2_COLOR );
  63. Fl::add_timeout( STATUS_UPDATE_FREQ, update_cb, this );
  64. std::list <const char *> formats;
  65. Audio_File::all_supported_formats( formats );
  66. for ( std::list <const char *>::const_iterator f = formats.begin(); f != formats.end(); ++f )
  67. {
  68. // capture_format_menu->add( *f, FL_MENU_RADIO, 0, 0, 0 );
  69. //;
  70. char pat[256];
  71. snprintf( pat, sizeof( pat ), "Timeline/Capture Format/%s", *f );
  72. menubar->add( pat, 0, &TLE::capture_format_cb, this, FL_MENU_RADIO );
  73. }
  74. char *path;
  75. asprintf( &path, "%s/options", user_config_dir );
  76. ((Fl_Menu_Settings*)menubar)->load( menubar->find_item( "&Options" ), path );
  77. free( path );} {}
  78. }
  79. Function {make_window()} {open
  80. } {
  81. Fl_Window main_window {
  82. label {Non-DAW - Timeline} open
  83. xywh {577 94 1024 768} type Double resizable xclass {Non-DAW} visible
  84. } {
  85. Fl_Menu_Bar menubar {open
  86. xywh {0 0 1024 25}
  87. } {
  88. Submenu {} {
  89. label {&Session} open
  90. xywh {0 0 74 25}
  91. } {
  92. MenuItem {} {
  93. label {&New}
  94. xywh {0 0 40 25} deactivate
  95. }
  96. MenuItem {} {
  97. label {&Open}
  98. xywh {10 10 40 25} deactivate
  99. }
  100. MenuItem {} {
  101. label {&Compact}
  102. callback {int n = fl_choice( "Compacting will replace the session history with a snapshot of the current state.\\n You will not be able to use Undo to go back beyond this point.\\n This operation is irreversible!", NULL, "Abort", "Procede with compaction" );
  103. if ( n != 2 )
  104. return;
  105. Loggable::compact();}
  106. xywh {20 20 40 25}
  107. }
  108. Submenu {} {
  109. label Export open
  110. xywh {0 0 74 25} deactivate
  111. } {
  112. MenuItem {} {
  113. label Session
  114. xywh {0 0 40 25}
  115. }
  116. MenuItem {} {
  117. label Range
  118. xywh {10 10 40 25}
  119. }
  120. }
  121. MenuItem {} {
  122. label {&Quit}
  123. callback {save();
  124. printf( "dropped %d buffers\\n", engine->dropped() );
  125. exit( 0 );}
  126. xywh {40 40 40 25} shortcut 0x40071
  127. }
  128. }
  129. Submenu {} {
  130. label {&Edit} open
  131. xywh {0 0 74 25}
  132. } {
  133. MenuItem {} {
  134. label Undo
  135. callback {Loggable::undo();}
  136. xywh {0 0 40 25} shortcut 0x4007a divider
  137. }
  138. MenuItem {} {
  139. label {Select None}
  140. callback {timeline->select_none();}
  141. xywh {10 10 40 25} shortcut 0x50061
  142. }
  143. MenuItem {} {
  144. label {Delete Selected}
  145. callback {timeline->delete_selected();}
  146. xywh {20 20 40 25} shortcut 0xffff
  147. }
  148. }
  149. Submenu {} {
  150. label Transport open
  151. xywh {0 0 74 25}
  152. } {
  153. MenuItem {} {
  154. label Start
  155. callback {transport->locate( 0 );}
  156. xywh {0 0 40 25} shortcut 0xff50
  157. }
  158. MenuItem {} {
  159. label End
  160. callback {transport->locate( timeline->length() );}
  161. xywh {10 10 40 25} shortcut 0xff57
  162. }
  163. MenuItem {} {
  164. label {Play/Stop}
  165. callback {transport->toggle();}
  166. xywh {20 20 40 25} shortcut 0x20
  167. }
  168. MenuItem {} {
  169. label Record
  170. callback {transport->toggle_record();}
  171. xywh {40 40 40 25} shortcut 0x10072
  172. }
  173. }
  174. Submenu {} {
  175. label {&View} open
  176. xywh {0 0 74 25}
  177. } {
  178. Submenu {} {
  179. label {&Zoom} open
  180. xywh {0 0 74 25}
  181. } {
  182. MenuItem {} {
  183. label {&In}
  184. callback {timeline->zoom_in();}
  185. xywh {20 20 40 25}
  186. }
  187. MenuItem {} {
  188. label {&Out}
  189. callback {timeline->zoom_out();}
  190. xywh {30 30 40 25}
  191. }
  192. MenuItem {} {
  193. label {&Fit}
  194. callback {timeline->zoom_fit();} selected
  195. xywh {10 10 40 25} divider
  196. }
  197. MenuItem {} {
  198. label {1 sec.}
  199. callback {timeline->zoom( 1 );}
  200. xywh {10 10 40 25} shortcut 0x31
  201. }
  202. MenuItem {} {
  203. label {1 min.}
  204. callback {timeline->zoom( 60 );}
  205. xywh {20 20 40 25} shortcut 0x32
  206. }
  207. MenuItem {} {
  208. label {1 hour.}
  209. callback {timeline->zoom( 60 * 60 );}
  210. xywh {30 30 40 25} shortcut 0x33
  211. }
  212. }
  213. }
  214. Submenu timeline_menu {
  215. label {&Timeline}
  216. xywh {0 0 74 25}
  217. } {
  218. MenuItem {} {
  219. label {&Follow Playhead}
  220. callback {Timeline::follow_playhead = menu_picked_value( o );}
  221. xywh {20 20 40 25} type Toggle value 1
  222. }
  223. MenuItem {} {
  224. label {&Center Playhead}
  225. callback {Timeline::center_playhead = menu_picked_value( o );}
  226. xywh {30 30 40 25} type Toggle value 1
  227. }
  228. Submenu {} {
  229. label {&Snap to} open
  230. xywh {0 0 74 25}
  231. } {
  232. MenuItem {} {
  233. label Bars
  234. callback {Timeline::snap_to = Timeline::Bars;}
  235. xywh {0 0 40 25} type Radio value 1
  236. }
  237. MenuItem {} {
  238. label Beats
  239. callback {Timeline::snap_to = Timeline::Beats;}
  240. xywh {10 10 40 25} type Radio
  241. }
  242. MenuItem {} {
  243. label Off
  244. callback {Timeline::snap_to = Timeline::None;}
  245. xywh {20 20 40 25} type Radio
  246. }
  247. }
  248. MenuItem {} {
  249. label {Magnetic snap}
  250. callback {Timeline::snap_magnetic = menu_picked_value( o );}
  251. xywh {10 10 40 25} type Toggle value 1
  252. }
  253. Submenu {} {
  254. label {Capture Format} open
  255. xywh {0 0 74 25}
  256. } {}
  257. }
  258. Submenu {} {
  259. label {&Options} open
  260. xywh {0 0 74 25} divider
  261. } {
  262. Submenu {} {
  263. label {&Display} open
  264. xywh {0 0 74 25}
  265. } {
  266. Submenu {} {
  267. label {&Timeline} open
  268. xywh {0 0 74 25}
  269. } {
  270. MenuItem {} {
  271. label {&Measure lines}
  272. callback {Timeline::draw_with_measure_lines = menu_picked_value( o );
  273. timeline->redraw();}
  274. xywh {0 0 40 25} type Toggle value 1
  275. }
  276. }
  277. Submenu {} {
  278. label {&Waveforms} open
  279. xywh {0 0 74 25}
  280. } {
  281. MenuItem {} {
  282. label Fill
  283. callback {Waveform::fill = menu_picked_value( o );
  284. timeline->redraw();}
  285. xywh {10 10 40 25} type Toggle value 1
  286. }
  287. MenuItem {} {
  288. label Outline
  289. callback {Waveform::outline = menu_picked_value( o );
  290. timeline->redraw();}
  291. xywh {30 30 40 25} type Toggle value 1
  292. }
  293. MenuItem {} {
  294. label {Vary color}
  295. callback {Waveform::vary_color = menu_picked_value( o );
  296. timeline->redraw();}
  297. xywh {20 20 40 25} type Toggle value 1
  298. }
  299. }
  300. Submenu {} {
  301. label {&Region} open
  302. xywh {0 0 74 25}
  303. } {
  304. MenuItem {} {
  305. label {Filled fades}
  306. xywh {30 30 40 25} type Toggle value 1
  307. }
  308. MenuItem {} {
  309. label {Inherit track color}
  310. callback {Region::inherit_track_color = menu_picked_value( o );
  311. timeline->redraw();}
  312. xywh {40 40 40 25} type Toggle value 1
  313. }
  314. }
  315. Submenu {} {
  316. label {&Control Sequence} open
  317. xywh {0 0 74 25}
  318. } {
  319. MenuItem {} {
  320. label Polygon
  321. callback {Control_Sequence::draw_with_polygon = menu_picked_value( o );
  322. timeline->redraw();}
  323. xywh {20 20 40 25} type Toggle value 1
  324. }
  325. MenuItem {} {
  326. label Graded
  327. callback {Control_Sequence::draw_with_gradient = menu_picked_value( o );
  328. timeline->redraw();}
  329. xywh {30 30 40 25} type Toggle value 1
  330. }
  331. MenuItem {} {
  332. label Ruled
  333. callback {Control_Sequence::draw_with_grid = menu_picked_value( o );
  334. timeline->redraw();}
  335. xywh {40 40 40 25} type Toggle value 1
  336. }
  337. }
  338. Submenu {} {
  339. label {&Style} open
  340. xywh {0 0 74 25}
  341. } {
  342. MenuItem {} {
  343. label Default
  344. callback {Fl::scheme( "plastic" );}
  345. xywh {0 0 40 25} type Radio value 1
  346. }
  347. MenuItem {} {
  348. label Flat
  349. callback {Fl::scheme( "gtk+" );}
  350. xywh {10 10 40 25} type Radio
  351. }
  352. }
  353. Submenu {} {
  354. label {C&olors} open
  355. xywh {0 0 74 25}
  356. } {
  357. MenuItem {} {
  358. label System
  359. callback {//Fl::get_system_colors();
  360. unsigned char r, g, b;
  361. Fl::get_color( system_colors[ 0 ], r, g, b );
  362. Fl::background( r, g, b );
  363. Fl::get_color( system_colors[ 1 ], r, g, b );
  364. Fl::foreground( r, g, b );
  365. Fl::get_color( system_colors[ 2 ], r, g, b );
  366. Fl::background2( r, g, b );
  367. Fl::scheme( Fl::scheme() );}
  368. xywh {0 0 40 25} type Radio
  369. }
  370. MenuItem {} {
  371. label Dark
  372. callback {Fl::background2( 100, 100, 100 );
  373. Fl::background( 50, 50, 50 );
  374. Fl::foreground( 255, 255, 255 );
  375. Fl::scheme( Fl::scheme() );}
  376. xywh {10 10 40 25} type Radio value 1
  377. }
  378. MenuItem {} {
  379. label Light
  380. callback {Fl::background2( 192, 192, 192 );
  381. Fl::background( 220, 220, 220 );
  382. Fl::foreground( 0, 0, 0 );
  383. Fl::scheme( Fl::scheme() );}
  384. xywh {20 20 40 25} type Radio
  385. }
  386. }
  387. }
  388. }
  389. Submenu {} {
  390. label {&Help} open
  391. xywh {0 0 74 25}
  392. } {
  393. MenuItem {} {
  394. label {&About}
  395. callback {Fl_Window *win = make_about_dialog();
  396. win->show();
  397. while ( win->shown() )
  398. Fl::wait();
  399. delete win;}
  400. xywh {0 0 40 25}
  401. }
  402. }
  403. }
  404. Fl_Group {} {open
  405. xywh {0 23 1024 48}
  406. } {
  407. Fl_Pack {} {open
  408. xywh {0 23 473 46} type HORIZONTAL
  409. code0 {o->spacing( 10 );}
  410. } {
  411. Fl_Box {} {
  412. label {<Transport>}
  413. xywh {0 23 184 46} color 30
  414. code0 {transport = o;}
  415. code1 {o->labeltype( FL_NO_LABEL );}
  416. class Transport
  417. }
  418. Fl_Pack clocks_pack {open
  419. xywh {185 23 288 46} type HORIZONTAL
  420. code0 {o->spacing( 2 );}
  421. } {
  422. Fl_Box playhead_clock {
  423. label PLAYHEAD
  424. xywh {185 29 137 40} box BORDER_BOX color 40
  425. code0 {o->type( Clock::HMS );}
  426. code1 {o->run( &transport->frame );}
  427. class Clock
  428. }
  429. Fl_Box {} {
  430. label PLAYHEAD
  431. xywh {325 29 142 40} box BORDER_BOX color 40
  432. code0 {o->type( Clock::BBT );}
  433. code1 {o->run( &transport->frame );}
  434. class Clock
  435. }
  436. }
  437. }
  438. Fl_Box {} {
  439. label {<empty>}
  440. xywh {477 27 387 42} resizable
  441. code0 {o->labeltype( FL_NO_LABEL );}
  442. }
  443. Fl_Group {} {
  444. xywh {869 25 155 44}
  445. } {
  446. Fl_Box {} {
  447. label {capture:}
  448. xywh {869 25 56 14} labelsize 10 align 24
  449. }
  450. Fl_Box {} {
  451. label {playback:}
  452. xywh {869 41 56 14} labelsize 10 align 24
  453. }
  454. Fl_Box {} {
  455. label {DSP:}
  456. xywh {869 55 56 14} labelsize 10 align 24
  457. }
  458. Fl_Progress capture_buffer_progress {
  459. label {50%}
  460. xywh {925 25 99 14} labelsize 10
  461. }
  462. Fl_Progress cpu_load_progress {
  463. label {50%}
  464. xywh {925 55 99 14} labelsize 9
  465. }
  466. Fl_Progress playback_buffer_progress {
  467. label {50%}
  468. xywh {925 40 99 14} labelsize 10
  469. }
  470. }
  471. }
  472. Fl_Box {} {
  473. label {<Timeline>}
  474. xywh {0 72 1024 695} box FLAT_BOX color 47 labelsize 100 resizable
  475. code0 {timeline = o;}
  476. class Timeline
  477. }
  478. Fl_Value_Output xruns_output {
  479. label {xruns:}
  480. xywh {980 2 44 20} maximum 40000 step 1
  481. }
  482. }
  483. }
  484. Function {update_progress( Fl_Progress *p, char *s, float v )} {open private return_type {static void}
  485. } {
  486. code {p->value( v );
  487. snprintf( s, 5, "%d%%", (int)v );
  488. p->label( s );} {}
  489. }
  490. Function {update_status()} {open
  491. } {
  492. code {static char cbp[5], pbp[5], clp[5];
  493. update_progress( capture_buffer_progress, cbp, timeline->total_input_buffer_percent() );
  494. update_progress( playback_buffer_progress, pbp, timeline->total_output_buffer_percent() );
  495. update_progress( cpu_load_progress, clp, engine->cpu_load() );
  496. if ( timeline->total_capture_xruns() )
  497. capture_buffer_progress->selection_color( FL_RED );
  498. if ( timeline->total_playback_xruns() )
  499. playback_buffer_progress->selection_color( FL_RED );
  500. xruns_output->value( engine->xruns() );} {}
  501. }
  502. Function {update_cb( void *v )} {open return_type {static void}
  503. } {
  504. code {Fl::repeat_timeout( STATUS_UPDATE_FREQ, update_cb, v );
  505. ((TLE*)v)->update_status();} {}
  506. }
  507. Function {make_about_dialog()} {open
  508. } {
  509. Fl_Window {} {
  510. label About open
  511. xywh {1082 94 498 529} type Double visible
  512. } {
  513. Fl_Tabs {} {open
  514. xywh {-4 122 507 419}
  515. } {
  516. Fl_Group {} {
  517. label Credits open
  518. xywh {-4 147 507 394}
  519. } {
  520. Fl_Box {} {
  521. label {Non-DAW was written from scratch by
  522. Jonathan Moore Liles for his own use
  523. (see the manual).
  524. Nobody planned. Nobody helped.
  525. You can help now by donating time, money,
  526. and/or replacing the rest of Linux Audio
  527. with fast, light, reliable alternatives.}
  528. xywh {42 203 416 260} labelsize 17
  529. }
  530. }
  531. Fl_Group {} {
  532. label License open
  533. xywh {-1 157 504 384} hide
  534. } {
  535. Fl_Box {} {
  536. label {Copyright (C) 2008 Jonathan Moore Liles
  537. This software is released under version 3
  538. of the GNU General Public License (GPLv3).}
  539. xywh {45 213 403 83} labelsize 17
  540. }
  541. }
  542. }
  543. Fl_Box {} {
  544. label {the Non-DAW (Digital Audio Workstation)}
  545. image {../logo-small.png} xywh {-1 1 499 115} align 16
  546. }
  547. }
  548. }
  549. }