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.

528 lines
14KB

  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}
  95. }
  96. MenuItem {} {
  97. label {&Open}
  98. xywh {10 10 40 25}
  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}
  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 Preferences
  134. xywh {0 0 40 25}
  135. }
  136. MenuItem {} {
  137. label Undo
  138. callback {Loggable::undo();}
  139. xywh {0 0 40 25} shortcut 0x4007a
  140. }
  141. }
  142. Submenu {} {
  143. label Transport open
  144. xywh {0 0 74 25}
  145. } {
  146. MenuItem {} {
  147. label Start
  148. callback {transport->locate( 0 );}
  149. xywh {0 0 40 25} shortcut 0xff50
  150. }
  151. MenuItem {} {
  152. label End
  153. callback {transport->locate( timeline->length() );}
  154. xywh {10 10 40 25} shortcut 0xff57
  155. }
  156. MenuItem {} {
  157. label Stop
  158. callback {transport->stop();}
  159. xywh {20 20 40 25} shortcut 0x50073
  160. }
  161. MenuItem {} {
  162. label Play
  163. callback {transport->start();}
  164. xywh {30 30 40 25} shortcut 0x50070
  165. }
  166. MenuItem {} {
  167. label Record
  168. callback {transport->toggle_record();} selected
  169. xywh {40 40 40 25} shortcut 0x50072
  170. }
  171. }
  172. Submenu {} {
  173. label {&View} open
  174. xywh {0 0 74 25}
  175. } {
  176. Submenu {} {
  177. label {&Zoom} open
  178. xywh {0 0 74 25}
  179. } {
  180. MenuItem {} {
  181. label {&In}
  182. callback {timeline->zoom_in();}
  183. xywh {20 20 40 25}
  184. }
  185. MenuItem {} {
  186. label {&Out}
  187. callback {timeline->zoom_out();}
  188. xywh {30 30 40 25}
  189. }
  190. MenuItem {} {
  191. label {&Fit}
  192. xywh {10 10 40 25} divider
  193. }
  194. MenuItem {} {
  195. label {1 sec.}
  196. callback {timeline->zoom( 1 );}
  197. xywh {10 10 40 25} shortcut 0x31
  198. }
  199. MenuItem {} {
  200. label {1 min.}
  201. callback {timeline->zoom( 60 );}
  202. xywh {20 20 40 25} shortcut 0x32
  203. }
  204. MenuItem {} {
  205. label {1 hour.}
  206. callback {timeline->zoom( 60 * 60 );}
  207. xywh {30 30 40 25} shortcut 0x33
  208. }
  209. }
  210. }
  211. Submenu timeline_menu {
  212. label {&Timeline} open
  213. xywh {0 0 74 25}
  214. } {
  215. Submenu {} {
  216. label {&Snap} open
  217. xywh {0 0 74 25}
  218. } {
  219. MenuItem {} {
  220. label Bars
  221. callback {Timeline::snap_to = Timeline::Bars;}
  222. xywh {0 0 40 25} type Radio value 1
  223. }
  224. MenuItem {} {
  225. label Beats
  226. callback {Timeline::snap_to = Timeline::Beats;}
  227. xywh {10 10 40 25} type Radio
  228. }
  229. MenuItem {} {
  230. label Off
  231. callback {Timeline::snap_to = Timeline::None;}
  232. xywh {20 20 40 25} type Radio
  233. }
  234. }
  235. Submenu {} {
  236. label {Capture Format} open
  237. xywh {0 0 74 25}
  238. } {}
  239. }
  240. Submenu {} {
  241. label {&Options} open
  242. xywh {0 0 74 25} divider
  243. } {
  244. Submenu {} {
  245. label {&Display} open
  246. xywh {0 0 74 25}
  247. } {
  248. Submenu {} {
  249. label {&Timeline} open
  250. xywh {0 0 74 25}
  251. } {
  252. MenuItem {} {
  253. label {&Measure lines}
  254. callback {Timeline::draw_with_measure_lines = menu_picked_value( o );
  255. timeline->redraw();}
  256. xywh {0 0 40 25} type Toggle value 1
  257. }
  258. }
  259. Submenu {} {
  260. label {&Waveforms} open
  261. xywh {0 0 74 25}
  262. } {
  263. MenuItem {} {
  264. label Fill
  265. callback {Waveform::fill = menu_picked_value( o );
  266. timeline->redraw();}
  267. xywh {10 10 40 25} type Toggle value 1
  268. }
  269. MenuItem {} {
  270. label Outline
  271. callback {Waveform::outline = menu_picked_value( o );
  272. timeline->redraw();}
  273. xywh {30 30 40 25} type Toggle value 1
  274. }
  275. MenuItem {} {
  276. label {Vary color}
  277. callback {Waveform::vary_color = menu_picked_value( o );
  278. timeline->redraw();}
  279. xywh {20 20 40 25} type Toggle value 1
  280. }
  281. }
  282. Submenu {} {
  283. label {&Region} open
  284. xywh {0 0 74 25}
  285. } {
  286. MenuItem {} {
  287. label {Filled fades}
  288. xywh {30 30 40 25} type Toggle value 1
  289. }
  290. MenuItem {} {
  291. label {Inherit track color}
  292. callback {Region::inherit_track_color = menu_picked_value( o );
  293. timeline->redraw();}
  294. xywh {40 40 40 25} type Toggle value 1
  295. }
  296. }
  297. Submenu {} {
  298. label {&Control Sequence} open
  299. xywh {0 0 74 25}
  300. } {
  301. MenuItem {} {
  302. label Polygon
  303. callback {Control_Sequence::draw_with_polygon = menu_picked_value( o );
  304. timeline->redraw();}
  305. xywh {20 20 40 25} type Toggle value 1
  306. }
  307. MenuItem {} {
  308. label Graded
  309. callback {Control_Sequence::draw_with_gradient = menu_picked_value( o );
  310. timeline->redraw();}
  311. xywh {30 30 40 25} type Toggle value 1
  312. }
  313. MenuItem {} {
  314. label Ruled
  315. callback {Control_Sequence::draw_with_grid = menu_picked_value( o );
  316. timeline->redraw();}
  317. xywh {40 40 40 25} type Toggle value 1
  318. }
  319. }
  320. Submenu {} {
  321. label {&Style} open
  322. xywh {0 0 74 25}
  323. } {
  324. MenuItem {} {
  325. label Default
  326. callback {Fl::scheme( "plastic" );}
  327. xywh {0 0 40 25} type Radio value 1
  328. }
  329. MenuItem {} {
  330. label Flat
  331. callback {Fl::scheme( "gtk+" );}
  332. xywh {10 10 40 25} type Radio
  333. }
  334. }
  335. Submenu {} {
  336. label {C&olors} open
  337. xywh {0 0 74 25}
  338. } {
  339. MenuItem {} {
  340. label System
  341. callback {//Fl::get_system_colors();
  342. unsigned char r, g, b;
  343. Fl::get_color( system_colors[ 0 ], r, g, b );
  344. Fl::background( r, g, b );
  345. Fl::get_color( system_colors[ 1 ], r, g, b );
  346. Fl::foreground( r, g, b );
  347. Fl::get_color( system_colors[ 2 ], r, g, b );
  348. Fl::background2( r, g, b );
  349. Fl::scheme( Fl::scheme() );}
  350. xywh {0 0 40 25} type Radio
  351. }
  352. MenuItem {} {
  353. label Dark
  354. callback {Fl::background2( 100, 100, 100 );
  355. Fl::background( 50, 50, 50 );
  356. Fl::foreground( 255, 255, 255 );
  357. Fl::scheme( Fl::scheme() );}
  358. xywh {10 10 40 25} type Radio value 1
  359. }
  360. MenuItem {} {
  361. label Light
  362. callback {Fl::background2( 255, 255, 255 );
  363. Fl::background( 172, 172, 172 );
  364. Fl::foreground( 0, 0, 0 );
  365. Fl::scheme( Fl::scheme() );}
  366. xywh {20 20 40 25} type Radio
  367. }
  368. }
  369. }
  370. }
  371. MenuItem {} {
  372. label {&Help}
  373. xywh {0 0 40 25}
  374. }
  375. }
  376. Fl_Group {} {open
  377. xywh {0 23 1024 48}
  378. } {
  379. Fl_Pack {} {open
  380. xywh {0 23 473 46} type HORIZONTAL
  381. code0 {o->spacing( 10 );}
  382. } {
  383. Fl_Box {} {
  384. label {<Transport>}
  385. xywh {0 23 184 46} color 30
  386. code0 {transport = o;}
  387. code1 {o->labeltype( FL_NO_LABEL );}
  388. class Transport
  389. }
  390. Fl_Pack clocks_pack {open
  391. xywh {185 23 288 46} type HORIZONTAL
  392. code0 {o->spacing( 2 );}
  393. } {
  394. Fl_Box playhead_clock {
  395. label PLAYHEAD
  396. xywh {185 29 137 40} box BORDER_BOX color 46
  397. code0 {o->type( Clock::HMS );}
  398. code1 {o->run( &transport->frame );}
  399. class Clock
  400. }
  401. Fl_Box {} {
  402. label PLAYHEAD
  403. xywh {325 29 142 40} box BORDER_BOX color 46
  404. code0 {o->type( Clock::BBT );}
  405. code1 {o->run( &transport->frame );}
  406. class Clock
  407. }
  408. }
  409. }
  410. Fl_Box {} {
  411. label {<empty>}
  412. xywh {477 27 387 42} resizable
  413. code0 {o->labeltype( FL_NO_LABEL );}
  414. }
  415. Fl_Group {} {
  416. xywh {869 25 155 44}
  417. } {
  418. Fl_Box {} {
  419. label {capture:}
  420. xywh {869 25 56 14} labelsize 10 align 24
  421. }
  422. Fl_Box {} {
  423. label {playback:}
  424. xywh {869 41 56 14} labelsize 10 align 24
  425. }
  426. Fl_Box {} {
  427. label {DSP:}
  428. xywh {869 55 56 14} labelsize 10 align 24
  429. }
  430. Fl_Progress capture_buffer_progress {
  431. label {50%}
  432. xywh {925 25 99 14} labelsize 10
  433. }
  434. Fl_Progress cpu_load_progress {
  435. label {50%}
  436. xywh {925 55 99 14} labelsize 9
  437. }
  438. Fl_Progress playback_buffer_progress {
  439. label {50%}
  440. xywh {925 40 99 14} labelsize 10
  441. }
  442. }
  443. }
  444. Fl_Box {} {
  445. label {<Timeline>}
  446. xywh {0 72 1024 695} box FLAT_BOX color 47 labelsize 100 resizable
  447. code0 {timeline = o;}
  448. class Timeline
  449. }
  450. }
  451. }
  452. Function {update_progress( Fl_Progress *p, char *s, float v )} {open private return_type {static void}
  453. } {
  454. code {p->value( v );
  455. snprintf( s, 5, "%d%%", (int)v );
  456. p->label( s );} {}
  457. }
  458. Function {update_status()} {open
  459. } {
  460. code {static char cbp[5], pbp[5], clp[5];
  461. update_progress( capture_buffer_progress, cbp, timeline->total_input_buffer_percent() );
  462. update_progress( playback_buffer_progress, pbp, timeline->total_output_buffer_percent() );
  463. update_progress( cpu_load_progress, clp, engine->cpu_load() );} {}
  464. }
  465. Function {update_cb( void *v )} {open return_type {static void}
  466. } {
  467. code {Fl::repeat_timeout( STATUS_UPDATE_FREQ, update_cb, v );
  468. ((TLE*)v)->update_status();} {}
  469. }
  470. }