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.

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