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.

817 lines
21KB

  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 "Project.H"} {}
  12. decl {\#include "Clock.H"} {public
  13. }
  14. decl {\#include "Track.H" // for capture_format} {}
  15. decl {\#include "Audio_File.H" // for supported formats} {}
  16. decl {\#include "Waveform.H" // for options} {}
  17. decl {\#include "Audio_Region.H" // for options} {}
  18. decl {\#include "Control_Sequence.H" // for options} {}
  19. decl {\#include <FL/fl_ask.H>} {}
  20. decl {\#include <FL/Fl_File_Chooser.H>} {}
  21. decl {\#include <FL/Fl.H>} {}
  22. decl {extern char project_display_name[256];} {global
  23. }
  24. decl {extern char *user_config_dir;} {global
  25. }
  26. class TLE {open
  27. } {
  28. decl {Fl_Color system_colors[3];} {public
  29. }
  30. decl {static void menubar_cb ( void *v )} {}
  31. decl {void menubar_cb ( void )} {}
  32. Function {menu_picked_value( const Fl_Menu_ *m )} {open return_type {static int}
  33. } {
  34. code {return m->menu()[ m->value() ].flags & FL_MENU_VALUE;} {}
  35. }
  36. Function {save()} {open
  37. } {
  38. code {const char options_filename[] = "options";
  39. // const char state_filename[] = "state";
  40. // save options
  41. char *path;
  42. asprintf( &path, "%s/%s", user_config_dir, options_filename );
  43. ((Fl_Menu_Settings*)menubar)->dump( menubar->find_item( "&Options" ), path );
  44. free( path );
  45. // save unjournaled state
  46. // Loggable::save_unjournaled( state_filename );
  47. if ( Project::open() )
  48. {
  49. // save project local options (Timeline menu)
  50. ((Fl_Menu_Settings*)menubar)->dump( menubar->find_item( "&Timeline" ), options_filename );
  51. }} {}
  52. }
  53. Function {capture_format_cb( Fl_Widget *w, void *v )} {open private return_type {static void}
  54. } {
  55. code {((TLE*)v)->capture_format_cb();} {}
  56. }
  57. Function {capture_format_cb()} {open private return_type void
  58. } {
  59. code {Fl_Menu_ *o = menubar;
  60. Track::capture_format = o->menu()[ o->value() ].label();} {}
  61. }
  62. Function {run()} {open
  63. } {
  64. code {update_menu();
  65. main_window->show();
  66. Fl::run();} {}
  67. }
  68. Function {TLE()} {open
  69. } {
  70. code {make_window();
  71. // Fl::visual( RGB8 );
  72. Fl::visible_focus( 0 );
  73. Fl::get_system_colors();
  74. Fl::scheme( "plastic" );
  75. system_colors[ 0 ] = (Fl_Color)Fl::get_color( FL_BACKGROUND_COLOR );
  76. system_colors[ 1 ] = (Fl_Color)Fl::get_color( FL_FOREGROUND_COLOR );
  77. system_colors[ 2 ] = (Fl_Color)Fl::get_color( FL_BACKGROUND2_COLOR );
  78. Fl::add_timeout( STATUS_UPDATE_FREQ, update_cb, this );
  79. std::list <const char *> formats;
  80. Audio_File::all_supported_formats( formats );
  81. for ( std::list <const char *>::const_iterator f = formats.begin(); f != formats.end(); ++f )
  82. {
  83. // capture_format_menu->add( *f, FL_MENU_RADIO, 0, 0, 0 );
  84. //;
  85. char pat[256];
  86. snprintf( pat, sizeof( pat ), "&Timeline/Capture Format/%s", *f );
  87. menubar->add( pat, 0, &TLE::capture_format_cb, this, FL_MENU_RADIO );
  88. }
  89. menubar->picked( menubar->find_item( "&Timeline/Capture Format/Wav 24" ) );
  90. char *path;
  91. asprintf( &path, "%s/options", user_config_dir );
  92. ((Fl_Menu_Settings*)menubar)->load( menubar->find_item( "&Options" ), path );
  93. free( path );} {}
  94. }
  95. Function {make_window()} {open
  96. } {
  97. Fl_Window main_window {
  98. label {Non-DAW - Timeline} open
  99. xywh {236 77 1020 765} type Double resizable xclass {Non-DAW} visible
  100. } {
  101. Fl_Menu_Bar menubar {open
  102. xywh {0 0 1024 25}
  103. } {
  104. Submenu {} {
  105. label {&Project} open
  106. xywh {0 0 74 25}
  107. } {
  108. MenuItem {} {
  109. label {&Info}
  110. xywh {0 0 40 25} deactivate
  111. }
  112. MenuItem {} {
  113. label {&New}
  114. callback {save_timeline_settings();
  115. new_project_chooser();
  116. load_timeline_settings();
  117. update_menu();
  118. main_window->redraw();}
  119. xywh {0 0 40 25}
  120. }
  121. MenuItem {} {
  122. label {&Open}
  123. callback {const char *name = fl_dir_chooser( "Open Project", NULL, NULL );
  124. Project::close();
  125. if ( ! Project::open( name ) )
  126. {
  127. fl_alert( "Could not open \\"%s\\" as a Non-DAW project!", name );
  128. // we are in a somewhar ambiguous state now with no project open.
  129. }}
  130. xywh {10 10 40 25}
  131. }
  132. MenuItem {} {
  133. label {&Compact}
  134. callback {int n = fl_choice( "Compacting will replace the project history with a snapshot of the current state.\\nYou will not be able to use Undo to go back beyond this point.\\n\\nThis operation is irreversible!", NULL, "&Cancel", "Pr&ocede with compaction" );
  135. if ( n != 2 )
  136. return;
  137. Loggable::compact();}
  138. xywh {20 20 40 25}
  139. }
  140. Submenu {} {
  141. label {&Export} open
  142. xywh {0 0 74 25} deactivate
  143. } {
  144. MenuItem {} {
  145. label Project
  146. xywh {0 0 40 25}
  147. }
  148. MenuItem {} {
  149. label Range
  150. xywh {10 10 40 25}
  151. }
  152. }
  153. MenuItem {} {
  154. label {&Quit}
  155. callback {quit()}
  156. xywh {40 40 40 25} shortcut 0x40071
  157. }
  158. }
  159. Submenu {} {
  160. label {&Edit} open
  161. xywh {0 0 74 25}
  162. } {
  163. MenuItem {} {
  164. label Undo
  165. callback {Loggable::undo();}
  166. xywh {0 0 40 25} shortcut 0x4007a divider
  167. }
  168. MenuItem {} {
  169. label {Select None}
  170. callback {timeline->select_none();}
  171. xywh {10 10 40 25} shortcut 0x50061
  172. }
  173. MenuItem {} {
  174. label {Delete Selected}
  175. callback {timeline->delete_selected();}
  176. xywh {20 20 40 25} shortcut 0xffff
  177. }
  178. }
  179. Submenu {} {
  180. label Transport open
  181. xywh {0 0 74 25}
  182. } {
  183. MenuItem {} {
  184. label Start
  185. callback {transport->locate( 0 );}
  186. xywh {0 0 40 25} shortcut 0xff50
  187. }
  188. MenuItem {} {
  189. label End
  190. callback {transport->locate( timeline->length() );}
  191. xywh {10 10 40 25} shortcut 0xff57
  192. }
  193. MenuItem {} {
  194. label {Play/Stop}
  195. callback {transport->toggle();}
  196. xywh {20 20 40 25} shortcut 0x20
  197. }
  198. MenuItem {} {
  199. label Record
  200. callback {transport->toggle_record();}
  201. xywh {40 40 40 25} shortcut 0x10072
  202. }
  203. }
  204. Submenu {} {
  205. label {&View} open
  206. xywh {0 0 74 25}
  207. } {
  208. Submenu {} {
  209. label {&Zoom} open
  210. xywh {0 0 74 25}
  211. } {
  212. MenuItem {} {
  213. label {&In}
  214. callback {timeline->zoom_in();}
  215. xywh {20 20 40 25}
  216. }
  217. MenuItem {} {
  218. label {&Out}
  219. callback {timeline->zoom_out();}
  220. xywh {30 30 40 25}
  221. }
  222. MenuItem {} {
  223. label {&Fit}
  224. callback {timeline->zoom_fit();}
  225. xywh {10 10 40 25} divider
  226. }
  227. MenuItem {} {
  228. label {1 sec.}
  229. callback {timeline->zoom( 1 );}
  230. xywh {10 10 40 25} shortcut 0x31
  231. }
  232. MenuItem {} {
  233. label {1 min.}
  234. callback {timeline->zoom( 60 );}
  235. xywh {20 20 40 25} shortcut 0x32
  236. }
  237. MenuItem {} {
  238. label {1 hour.}
  239. callback {timeline->zoom( 60 * 60 );}
  240. xywh {30 30 40 25} shortcut 0x33
  241. }
  242. }
  243. }
  244. Submenu timeline_menu {
  245. label {&Timeline} open
  246. xywh {0 0 74 25}
  247. } {
  248. MenuItem {} {
  249. label {&Follow Playhead}
  250. callback {Timeline::follow_playhead = menu_picked_value( o );}
  251. xywh {20 20 40 25} type Toggle value 1
  252. }
  253. MenuItem {} {
  254. label {&Center Playhead}
  255. callback {Timeline::center_playhead = menu_picked_value( o );}
  256. xywh {30 30 40 25} type Toggle value 1
  257. }
  258. Submenu {} {
  259. label {&Snap to} open
  260. xywh {0 0 74 25}
  261. } {
  262. MenuItem {} {
  263. label Bars
  264. callback {Timeline::snap_to = Timeline::Bars;}
  265. xywh {0 0 40 25} type Radio value 1
  266. }
  267. MenuItem {} {
  268. label Beats
  269. callback {Timeline::snap_to = Timeline::Beats;}
  270. xywh {10 10 40 25} type Radio
  271. }
  272. MenuItem {} {
  273. label Off
  274. callback {Timeline::snap_to = Timeline::None;}
  275. xywh {20 20 40 25} type Radio
  276. }
  277. }
  278. MenuItem {} {
  279. label {Magnetic snap}
  280. callback {Timeline::snap_magnetic = menu_picked_value( o );}
  281. xywh {10 10 40 25} type Toggle value 1
  282. }
  283. Submenu {} {
  284. label {Capture Format} open
  285. xywh {0 0 74 25}
  286. } {}
  287. }
  288. Submenu {} {
  289. label {&Options} open
  290. xywh {0 0 74 25} divider
  291. } {
  292. Submenu {} {
  293. label {&Display} open
  294. xywh {0 0 74 25}
  295. } {
  296. Submenu {} {
  297. label {&Timeline} open
  298. xywh {0 0 74 25}
  299. } {
  300. MenuItem {} {
  301. label {&Measure lines}
  302. callback {Timeline::draw_with_measure_lines = menu_picked_value( o );
  303. timeline->redraw();}
  304. xywh {0 0 40 25} type Toggle value 1
  305. }
  306. }
  307. Submenu {} {
  308. label {&Waveforms} open
  309. xywh {0 0 74 25}
  310. } {
  311. MenuItem {} {
  312. label Fill
  313. callback {Waveform::fill = menu_picked_value( o );
  314. timeline->redraw();}
  315. xywh {10 10 40 25} type Toggle value 1
  316. }
  317. MenuItem {} {
  318. label Outline
  319. callback {Waveform::outline = menu_picked_value( o );
  320. timeline->redraw();}
  321. xywh {30 30 40 25} type Toggle value 1
  322. }
  323. MenuItem {} {
  324. label {Vary color}
  325. callback {Waveform::vary_color = menu_picked_value( o );
  326. timeline->redraw();}
  327. xywh {20 20 40 25} type Toggle value 1
  328. }
  329. }
  330. Submenu {} {
  331. label {&Audio_Region} open
  332. xywh {0 0 74 25}
  333. } {
  334. MenuItem {} {
  335. label {Filled fades}
  336. xywh {30 30 40 25} type Toggle value 1
  337. }
  338. MenuItem {} {
  339. label {Inherit track color}
  340. callback {Audio_Region::inherit_track_color = menu_picked_value( o );
  341. timeline->redraw();}
  342. xywh {40 40 40 25} type Toggle value 1
  343. }
  344. }
  345. Submenu {} {
  346. label {&Control Sequence} open
  347. xywh {0 0 74 25}
  348. } {
  349. MenuItem {} {
  350. label Polygon
  351. callback {Control_Sequence::draw_with_polygon = menu_picked_value( o );
  352. timeline->redraw();}
  353. xywh {20 20 40 25} type Toggle value 1
  354. }
  355. MenuItem {} {
  356. label Graded
  357. callback {Control_Sequence::draw_with_gradient = menu_picked_value( o );
  358. timeline->redraw();}
  359. xywh {30 30 40 25} type Toggle value 1
  360. }
  361. MenuItem {} {
  362. label Ruled
  363. callback {Control_Sequence::draw_with_grid = menu_picked_value( o );
  364. timeline->redraw();}
  365. xywh {40 40 40 25} type Toggle value 1
  366. }
  367. }
  368. Submenu {} {
  369. label {&Style} open
  370. xywh {0 0 74 25}
  371. } {
  372. MenuItem {} {
  373. label Default
  374. callback {Fl::scheme( "plastic" );}
  375. xywh {0 0 40 25} type Radio value 1
  376. }
  377. MenuItem {} {
  378. label Flat
  379. callback {Fl::scheme( "gtk+" );}
  380. xywh {10 10 40 25} type Radio
  381. }
  382. }
  383. Submenu {} {
  384. label {C&olors} open
  385. xywh {0 0 74 25}
  386. } {
  387. MenuItem {} {
  388. label System
  389. callback {//Fl::get_system_colors();
  390. unsigned char r, g, b;
  391. Fl::get_color( system_colors[ 0 ], r, g, b );
  392. Fl::background( r, g, b );
  393. Fl::get_color( system_colors[ 1 ], r, g, b );
  394. Fl::foreground( r, g, b );
  395. Fl::get_color( system_colors[ 2 ], r, g, b );
  396. Fl::background2( r, g, b );
  397. Fl::scheme( Fl::scheme() );}
  398. xywh {0 0 40 25} type Radio
  399. }
  400. MenuItem {} {
  401. label Dark
  402. callback {Fl::background2( 100, 100, 100 );
  403. Fl::background( 50, 50, 50 );
  404. Fl::foreground( 255, 255, 255 );
  405. Fl::scheme( Fl::scheme() );}
  406. xywh {10 10 40 25} type Radio value 1
  407. }
  408. MenuItem {} {
  409. label Light
  410. callback {Fl::background2( 192, 192, 192 );
  411. Fl::background( 220, 220, 220 );
  412. Fl::foreground( 0, 0, 0 );
  413. Fl::scheme( Fl::scheme() );}
  414. xywh {20 20 40 25} type Radio
  415. }
  416. }
  417. }
  418. }
  419. Submenu {} {
  420. label {&Help} open
  421. xywh {0 0 74 25}
  422. } {
  423. MenuItem {} {
  424. label {&About}
  425. callback {Fl_Window *win = make_about_dialog();
  426. win->show();
  427. while ( win->shown() )
  428. Fl::wait();
  429. delete win;}
  430. xywh {0 0 40 25}
  431. }
  432. }
  433. }
  434. Fl_Group {} {open
  435. xywh {0 23 1024 48}
  436. } {
  437. Fl_Pack {} {open
  438. xywh {0 23 473 46} type HORIZONTAL
  439. code0 {o->spacing( 10 );}
  440. } {
  441. Fl_Box {} {
  442. label {<Transport>}
  443. xywh {0 23 184 46} color 30
  444. code0 {transport = o;}
  445. code1 {o->labeltype( FL_NO_LABEL );}
  446. class Transport
  447. }
  448. Fl_Pack clocks_pack {open
  449. xywh {185 23 288 46} type HORIZONTAL
  450. code0 {o->spacing( 2 );}
  451. } {
  452. Fl_Box playhead_clock {
  453. label PLAYHEAD
  454. xywh {185 29 137 40} box BORDER_BOX color 40
  455. code0 {o->type( Clock::HMS );}
  456. code1 {o->run( &transport->frame );}
  457. class Clock
  458. }
  459. Fl_Box {} {
  460. label PLAYHEAD
  461. xywh {325 29 142 40} box BORDER_BOX color 40
  462. code0 {o->type( Clock::BBT );}
  463. code1 {o->run( &transport->frame );}
  464. class Clock
  465. }
  466. }
  467. }
  468. Fl_Box {} {
  469. label {<empty>}
  470. xywh {477 27 387 42} resizable
  471. code0 {o->labeltype( FL_NO_LABEL );}
  472. }
  473. Fl_Group {} {
  474. xywh {869 25 155 44}
  475. } {
  476. Fl_Box {} {
  477. label {capture:}
  478. xywh {869 25 56 14} labelsize 10 align 24
  479. }
  480. Fl_Box {} {
  481. label {playback:}
  482. xywh {869 41 56 14} labelsize 10 align 24
  483. }
  484. Fl_Box {} {
  485. label {DSP:}
  486. xywh {869 55 56 14} labelsize 10 align 24
  487. }
  488. Fl_Progress capture_buffer_progress {
  489. label {50%}
  490. xywh {925 25 99 14} labelsize 10
  491. }
  492. Fl_Progress cpu_load_progress {
  493. label {50%}
  494. xywh {925 55 99 14} labelsize 9
  495. }
  496. Fl_Progress playback_buffer_progress {
  497. label {50%}
  498. xywh {925 40 99 14} labelsize 10
  499. }
  500. }
  501. }
  502. Fl_Box {} {
  503. label {<Timeline>}
  504. xywh {0 72 1024 695} box FLAT_BOX color 47 labelsize 100 resizable
  505. code0 {timeline = o;}
  506. class Timeline
  507. }
  508. Fl_Box project_name {
  509. label {<project name>}
  510. xywh {450 0 475 22} labeltype SHADOW_LABEL labelfont 2
  511. code0 {o->label( Project::name() );}
  512. }
  513. Fl_Value_Output xruns_output {
  514. label {xruns:}
  515. xywh {980 2 44 20} maximum 40000 step 1
  516. }
  517. }
  518. }
  519. Function {find_item( Fl_Menu_ *menu, const char *path )} {open return_type {static Fl_Menu_Item *}
  520. } {
  521. code {return const_cast<Fl_Menu_Item*>(menu->find_item( path ));} {}
  522. }
  523. Function {update_menu()} {open
  524. } {
  525. code {Fl_Menu_Bar *m = menubar;
  526. if ( ! Project::open() )
  527. {
  528. find_item( m, "&Project/&Export" )->deactivate();
  529. find_item( m, "&Project/&Compact" )->deactivate();
  530. find_item( m, "&Project/&Info" )->deactivate();
  531. find_item( m, "&Timeline" )->deactivate();
  532. timeline->deactivate();
  533. transport->deactivate();
  534. }
  535. else
  536. {
  537. find_item( m, "&Project/&Export" )->activate();
  538. find_item( m, "&Project/&Compact" )->activate();
  539. find_item( m, "&Project/&Info" )->activate();
  540. find_item( m, "&Timeline" )->activate();
  541. timeline->activate();
  542. transport->activate();
  543. }
  544. m->redraw();
  545. project_name->redraw();} {selected
  546. }
  547. }
  548. Function {update_progress( Fl_Progress *p, char *s, float v )} {open private return_type {static void}
  549. } {
  550. code {p->value( v );
  551. snprintf( s, 5, "%d%%", (int)v );
  552. p->label( s );} {}
  553. }
  554. Function {update_status()} {open
  555. } {
  556. code {static char cbp[5], pbp[5], clp[5];
  557. update_progress( capture_buffer_progress, cbp, timeline->total_input_buffer_percent() );
  558. update_progress( playback_buffer_progress, pbp, timeline->total_output_buffer_percent() );
  559. update_progress( cpu_load_progress, clp, engine->cpu_load() );
  560. if ( timeline->total_capture_xruns() )
  561. capture_buffer_progress->selection_color( FL_RED );
  562. if ( timeline->total_playback_xruns() )
  563. playback_buffer_progress->selection_color( FL_RED );
  564. xruns_output->value( engine->xruns() );} {}
  565. }
  566. Function {update_cb( void *v )} {return_type {static void}
  567. } {
  568. code {Fl::repeat_timeout( STATUS_UPDATE_FREQ, update_cb, v );
  569. ((TLE*)v)->update_status();} {}
  570. }
  571. Function {make_about_dialog()} {open
  572. } {
  573. Fl_Window {} {
  574. label About open
  575. xywh {733 400 495 525} type Double visible
  576. } {
  577. Fl_Tabs {} {open
  578. xywh {-4 122 507 419}
  579. } {
  580. Fl_Group {} {
  581. label Credits open
  582. xywh {-4 147 507 394}
  583. } {
  584. Fl_Box {} {
  585. label {Non-DAW was written from scratch by
  586. Jonathan Moore Liles for his own use
  587. (see the manual).
  588. Nobody planned. Nobody helped.
  589. You can help now by donating time, money,
  590. and/or replacing the rest of Linux Audio
  591. with fast, light, reliable alternatives.}
  592. xywh {42 203 416 260} labelsize 17
  593. }
  594. }
  595. Fl_Group {} {
  596. label License open
  597. xywh {-1 157 504 384} hide
  598. } {
  599. Fl_Box {} {
  600. label {Copyright (C) 2008 Jonathan Moore Liles
  601. This software is released under version 3
  602. of the GNU General Public License (GPLv3).}
  603. xywh {45 213 403 83} labelsize 17
  604. }
  605. }
  606. }
  607. Fl_Box {} {
  608. label {the Non-DAW (Digital Audio Workstation)}
  609. image {../logo-small.png} xywh {-1 1 499 115} align 16
  610. }
  611. }
  612. }
  613. Function {save_timeline_settings()} {open
  614. } {
  615. code {if ( Project::open() )
  616. {
  617. // save project local options (Timeline menu)
  618. ((Fl_Menu_Settings*)menubar)->dump( menubar->find_item( "&Timeline" ), "options" );
  619. }} {}
  620. }
  621. Function {load_timeline_settings()} {open
  622. } {
  623. code {if ( Project::open() )
  624. {
  625. ((Fl_Menu_Settings*)menubar)->load( menubar->find_item( "&Timeline" ), "options" );
  626. }
  627. update_menu();
  628. project_name->redraw();} {}
  629. }
  630. Function {quit()} {open
  631. } {
  632. code {Project::close();
  633. save();
  634. exit( 0 );} {}
  635. }
  636. }
  637. class New_Project_Dialog {open
  638. } {
  639. Function {New_Project_Dialog()} {open
  640. } {
  641. code {make_window();} {}
  642. }
  643. Function {run()} {open return_type void
  644. } {
  645. code {_window->show();
  646. while ( _window->shown() )
  647. Fl::wait();} {}
  648. }
  649. Function {make_window()} {open
  650. } {
  651. Fl_Window _window {
  652. label {New Project} open
  653. xywh {23 779 550 195} type Double modal visible
  654. } {
  655. Fl_File_Input _name {
  656. label {Named:}
  657. xywh {75 140 375 35}
  658. }
  659. Fl_Button {} {
  660. label Browse
  661. callback {_directory->value( fl_dir_chooser( "Directory for new project", NULL, 0 ) );}
  662. xywh {455 100 80 35}
  663. }
  664. Fl_Return_Button {} {
  665. label Create
  666. callback {if ( strlen( _directory->value() ) && strlen( _name->value() ) )
  667. {
  668. char pat[512];
  669. snprintf( pat, sizeof( pat ), "%s/%s", _directory->value(), _name->value() );
  670. // if ( ! fl_filename_exists( pat ) )
  671. {
  672. if ( ! Project::create( pat, _template->text( _template->value() ) ) )
  673. fl_alert( "Error opening project!" );
  674. _window->hide();
  675. }
  676. // else
  677. // {
  678. // fl_alert( "A file already exists at that location. Choose a differnt name." );
  679. //
  680. // }
  681. }}
  682. xywh {455 140 80 35}
  683. }
  684. Fl_File_Input _directory {
  685. label {Where:}
  686. callback {if ( ! fl_filename_isdir( o->value() ) )
  687. {
  688. fl_alert( "Must be a directory" );
  689. o->value( "" );
  690. }}
  691. xywh {75 100 375 35}
  692. code0 {\#include <FL/filename.H>}
  693. }
  694. Fl_Box {} {
  695. label {New Project}
  696. xywh {15 8 520 33} box RSHADOW_BOX color 133 labelsize 20 labelcolor 32
  697. }
  698. Fl_Choice _template {
  699. label {Template:}
  700. private xywh {310 60 225 25} down_box BORDER_BOX
  701. } {
  702. MenuItem {} {
  703. label Default
  704. xywh {0 0 40 25}
  705. }
  706. }
  707. }
  708. }
  709. }
  710. Function {new_project_chooser()} {open C return_type void
  711. } {
  712. code {New_Project_Dialog nsd;
  713. nsd.run();} {}
  714. }