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.

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