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.

603 lines
16KB

  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. exit( 0 );}
  125. xywh {40 40 40 25} shortcut 0x40071
  126. }
  127. }
  128. Submenu {} {
  129. label {&Edit} open
  130. xywh {0 0 74 25}
  131. } {
  132. MenuItem {} {
  133. label Undo
  134. callback {Loggable::undo();}
  135. xywh {0 0 40 25} shortcut 0x4007a divider
  136. }
  137. MenuItem {} {
  138. label {Select None}
  139. callback {timeline->select_none();}
  140. xywh {10 10 40 25} shortcut 0x50061
  141. }
  142. MenuItem {} {
  143. label {Delete Selected}
  144. callback {timeline->delete_selected();}
  145. xywh {20 20 40 25} shortcut 0xffff
  146. }
  147. }
  148. Submenu {} {
  149. label Transport open
  150. xywh {0 0 74 25}
  151. } {
  152. MenuItem {} {
  153. label Start
  154. callback {transport->locate( 0 );}
  155. xywh {0 0 40 25} shortcut 0xff50
  156. }
  157. MenuItem {} {
  158. label End
  159. callback {transport->locate( timeline->length() );}
  160. xywh {10 10 40 25} shortcut 0xff57
  161. }
  162. MenuItem {} {
  163. label {Play/Stop}
  164. callback {transport->toggle();}
  165. xywh {20 20 40 25} shortcut 0x20
  166. }
  167. MenuItem {} {
  168. label Record
  169. callback {transport->toggle_record();}
  170. xywh {40 40 40 25} shortcut 0x10072
  171. }
  172. }
  173. Submenu {} {
  174. label {&View} open
  175. xywh {0 0 74 25}
  176. } {
  177. Submenu {} {
  178. label {&Zoom} open
  179. xywh {0 0 74 25}
  180. } {
  181. MenuItem {} {
  182. label {&In}
  183. callback {timeline->zoom_in();}
  184. xywh {20 20 40 25}
  185. }
  186. MenuItem {} {
  187. label {&Out}
  188. callback {timeline->zoom_out();}
  189. xywh {30 30 40 25}
  190. }
  191. MenuItem {} {
  192. label {&Fit}
  193. xywh {10 10 40 25} divider
  194. }
  195. MenuItem {} {
  196. label {1 sec.}
  197. callback {timeline->zoom( 1 );}
  198. xywh {10 10 40 25} shortcut 0x31
  199. }
  200. MenuItem {} {
  201. label {1 min.}
  202. callback {timeline->zoom( 60 );}
  203. xywh {20 20 40 25} shortcut 0x32
  204. }
  205. MenuItem {} {
  206. label {1 hour.}
  207. callback {timeline->zoom( 60 * 60 );}
  208. xywh {30 30 40 25} shortcut 0x33
  209. }
  210. }
  211. }
  212. Submenu timeline_menu {
  213. label {&Timeline} open
  214. xywh {0 0 74 25}
  215. } {
  216. MenuItem {} {
  217. label {&Follow Playhead}
  218. callback {Timeline::follow_playhead = menu_picked_value( o );} selected
  219. xywh {20 20 40 25} type Toggle value 1
  220. }
  221. Submenu {} {
  222. label {&Snap to} open
  223. xywh {0 0 74 25}
  224. } {
  225. MenuItem {} {
  226. label Bars
  227. callback {Timeline::snap_to = Timeline::Bars;}
  228. xywh {0 0 40 25} type Radio value 1
  229. }
  230. MenuItem {} {
  231. label Beats
  232. callback {Timeline::snap_to = Timeline::Beats;}
  233. xywh {10 10 40 25} type Radio
  234. }
  235. MenuItem {} {
  236. label Off
  237. callback {Timeline::snap_to = Timeline::None;}
  238. xywh {20 20 40 25} type Radio
  239. }
  240. }
  241. MenuItem {} {
  242. label {Magnetic snap}
  243. callback {Timeline::snap_magnetic = menu_picked_value( o );}
  244. xywh {10 10 40 25} type Toggle value 1
  245. }
  246. Submenu {} {
  247. label {Capture Format} open
  248. xywh {0 0 74 25}
  249. } {}
  250. }
  251. Submenu {} {
  252. label {&Options} open
  253. xywh {0 0 74 25} divider
  254. } {
  255. Submenu {} {
  256. label {&Display} open
  257. xywh {0 0 74 25}
  258. } {
  259. Submenu {} {
  260. label {&Timeline} open
  261. xywh {0 0 74 25}
  262. } {
  263. MenuItem {} {
  264. label {&Measure lines}
  265. callback {Timeline::draw_with_measure_lines = menu_picked_value( o );
  266. timeline->redraw();}
  267. xywh {0 0 40 25} type Toggle value 1
  268. }
  269. }
  270. Submenu {} {
  271. label {&Waveforms} open
  272. xywh {0 0 74 25}
  273. } {
  274. MenuItem {} {
  275. label Fill
  276. callback {Waveform::fill = menu_picked_value( o );
  277. timeline->redraw();}
  278. xywh {10 10 40 25} type Toggle value 1
  279. }
  280. MenuItem {} {
  281. label Outline
  282. callback {Waveform::outline = menu_picked_value( o );
  283. timeline->redraw();}
  284. xywh {30 30 40 25} type Toggle value 1
  285. }
  286. MenuItem {} {
  287. label {Vary color}
  288. callback {Waveform::vary_color = menu_picked_value( o );
  289. timeline->redraw();}
  290. xywh {20 20 40 25} type Toggle value 1
  291. }
  292. }
  293. Submenu {} {
  294. label {&Region} open
  295. xywh {0 0 74 25}
  296. } {
  297. MenuItem {} {
  298. label {Filled fades}
  299. xywh {30 30 40 25} type Toggle value 1
  300. }
  301. MenuItem {} {
  302. label {Inherit track color}
  303. callback {Region::inherit_track_color = menu_picked_value( o );
  304. timeline->redraw();}
  305. xywh {40 40 40 25} type Toggle value 1
  306. }
  307. }
  308. Submenu {} {
  309. label {&Control Sequence} open
  310. xywh {0 0 74 25}
  311. } {
  312. MenuItem {} {
  313. label Polygon
  314. callback {Control_Sequence::draw_with_polygon = menu_picked_value( o );
  315. timeline->redraw();}
  316. xywh {20 20 40 25} type Toggle value 1
  317. }
  318. MenuItem {} {
  319. label Graded
  320. callback {Control_Sequence::draw_with_gradient = menu_picked_value( o );
  321. timeline->redraw();}
  322. xywh {30 30 40 25} type Toggle value 1
  323. }
  324. MenuItem {} {
  325. label Ruled
  326. callback {Control_Sequence::draw_with_grid = menu_picked_value( o );
  327. timeline->redraw();}
  328. xywh {40 40 40 25} type Toggle value 1
  329. }
  330. }
  331. Submenu {} {
  332. label {&Style} open
  333. xywh {0 0 74 25}
  334. } {
  335. MenuItem {} {
  336. label Default
  337. callback {Fl::scheme( "plastic" );}
  338. xywh {0 0 40 25} type Radio value 1
  339. }
  340. MenuItem {} {
  341. label Flat
  342. callback {Fl::scheme( "gtk+" );}
  343. xywh {10 10 40 25} type Radio
  344. }
  345. }
  346. Submenu {} {
  347. label {C&olors} open
  348. xywh {0 0 74 25}
  349. } {
  350. MenuItem {} {
  351. label System
  352. callback {//Fl::get_system_colors();
  353. unsigned char r, g, b;
  354. Fl::get_color( system_colors[ 0 ], r, g, b );
  355. Fl::background( r, g, b );
  356. Fl::get_color( system_colors[ 1 ], r, g, b );
  357. Fl::foreground( r, g, b );
  358. Fl::get_color( system_colors[ 2 ], r, g, b );
  359. Fl::background2( r, g, b );
  360. Fl::scheme( Fl::scheme() );}
  361. xywh {0 0 40 25} type Radio
  362. }
  363. MenuItem {} {
  364. label Dark
  365. callback {Fl::background2( 100, 100, 100 );
  366. Fl::background( 50, 50, 50 );
  367. Fl::foreground( 255, 255, 255 );
  368. Fl::scheme( Fl::scheme() );}
  369. xywh {10 10 40 25} type Radio value 1
  370. }
  371. MenuItem {} {
  372. label Light
  373. callback {Fl::background2( 192, 192, 192 );
  374. Fl::background( 220, 220, 220 );
  375. Fl::foreground( 0, 0, 0 );
  376. Fl::scheme( Fl::scheme() );}
  377. xywh {20 20 40 25} type Radio
  378. }
  379. }
  380. }
  381. }
  382. Submenu {} {
  383. label {&Help} open
  384. xywh {0 0 74 25}
  385. } {
  386. MenuItem {} {
  387. label {&About}
  388. callback {Fl_Window *win = make_about_dialog();
  389. win->show();
  390. while ( win->shown() )
  391. Fl::wait();
  392. delete win;}
  393. xywh {0 0 40 25}
  394. }
  395. }
  396. }
  397. Fl_Group {} {open
  398. xywh {0 23 1024 48}
  399. } {
  400. Fl_Pack {} {open
  401. xywh {0 23 473 46} type HORIZONTAL
  402. code0 {o->spacing( 10 );}
  403. } {
  404. Fl_Box {} {
  405. label {<Transport>}
  406. xywh {0 23 184 46} color 30
  407. code0 {transport = o;}
  408. code1 {o->labeltype( FL_NO_LABEL );}
  409. class Transport
  410. }
  411. Fl_Pack clocks_pack {open
  412. xywh {185 23 288 46} type HORIZONTAL
  413. code0 {o->spacing( 2 );}
  414. } {
  415. Fl_Box playhead_clock {
  416. label PLAYHEAD
  417. xywh {185 29 137 40} box BORDER_BOX color 40
  418. code0 {o->type( Clock::HMS );}
  419. code1 {o->run( &transport->frame );}
  420. class Clock
  421. }
  422. Fl_Box {} {
  423. label PLAYHEAD
  424. xywh {325 29 142 40} box BORDER_BOX color 40
  425. code0 {o->type( Clock::BBT );}
  426. code1 {o->run( &transport->frame );}
  427. class Clock
  428. }
  429. }
  430. }
  431. Fl_Box {} {
  432. label {<empty>}
  433. xywh {477 27 387 42} resizable
  434. code0 {o->labeltype( FL_NO_LABEL );}
  435. }
  436. Fl_Group {} {
  437. xywh {869 25 155 44}
  438. } {
  439. Fl_Box {} {
  440. label {capture:}
  441. xywh {869 25 56 14} labelsize 10 align 24
  442. }
  443. Fl_Box {} {
  444. label {playback:}
  445. xywh {869 41 56 14} labelsize 10 align 24
  446. }
  447. Fl_Box {} {
  448. label {DSP:}
  449. xywh {869 55 56 14} labelsize 10 align 24
  450. }
  451. Fl_Progress capture_buffer_progress {
  452. label {50%}
  453. xywh {925 25 99 14} labelsize 10
  454. }
  455. Fl_Progress cpu_load_progress {
  456. label {50%}
  457. xywh {925 55 99 14} labelsize 9
  458. }
  459. Fl_Progress playback_buffer_progress {
  460. label {50%}
  461. xywh {925 40 99 14} labelsize 10
  462. }
  463. }
  464. }
  465. Fl_Box {} {
  466. label {<Timeline>}
  467. xywh {0 72 1024 695} box FLAT_BOX color 47 labelsize 100 resizable
  468. code0 {timeline = o;}
  469. class Timeline
  470. }
  471. Fl_Value_Output xruns_output {
  472. label {xruns:}
  473. xywh {980 2 44 20} maximum 40000 step 1
  474. }
  475. }
  476. }
  477. Function {update_progress( Fl_Progress *p, char *s, float v )} {open private return_type {static void}
  478. } {
  479. code {p->value( v );
  480. snprintf( s, 5, "%d%%", (int)v );
  481. p->label( s );} {}
  482. }
  483. Function {update_status()} {open
  484. } {
  485. code {static char cbp[5], pbp[5], clp[5];
  486. update_progress( capture_buffer_progress, cbp, timeline->total_input_buffer_percent() );
  487. update_progress( playback_buffer_progress, pbp, timeline->total_output_buffer_percent() );
  488. update_progress( cpu_load_progress, clp, engine->cpu_load() );
  489. xruns_output->value( engine->xruns() );} {}
  490. }
  491. Function {update_cb( void *v )} {open return_type {static void}
  492. } {
  493. code {Fl::repeat_timeout( STATUS_UPDATE_FREQ, update_cb, v );
  494. ((TLE*)v)->update_status();} {}
  495. }
  496. Function {make_about_dialog()} {open
  497. } {
  498. Fl_Window {} {
  499. label About open
  500. xywh {1082 94 498 529} type Double visible
  501. } {
  502. Fl_Tabs {} {open
  503. xywh {-4 122 507 419}
  504. } {
  505. Fl_Group {} {
  506. label Credits open
  507. xywh {-4 147 507 394}
  508. } {
  509. Fl_Box {} {
  510. label {Non-DAW was written from scratch by
  511. Jonathan Moore Liles for his own use
  512. (see the manual).
  513. Nobody planned. Nobody helped.
  514. You can help now by donating time, money,
  515. and/or replacing the rest of Linux Audio
  516. with fast, light, reliable alternatives.}
  517. xywh {42 203 416 260} labelsize 17
  518. }
  519. }
  520. Fl_Group {} {
  521. label License open
  522. xywh {-1 157 504 384} hide
  523. } {
  524. Fl_Box {} {
  525. label {Copyright (C) 2008 Jonathan Moore Liles
  526. This software is released under version 3
  527. of the GNU General Public License (GPLv3).}
  528. xywh {45 213 403 83} labelsize 17
  529. }
  530. }
  531. }
  532. Fl_Box {} {
  533. label {the Non-DAW (Digital Audio Workstation)}
  534. image {../logo-small.png} xywh {-1 1 499 115} align 16
  535. }
  536. }
  537. }
  538. }