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.

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