Change the appearance of the "SM" indicator in mixer, daw, sequencer. Tweak GUIs.

This commit is contained in:
Jonathan Moore Liles 2012-04-14 14:11:58 -07:00
parent e662a7623b
commit 57ac27ecac
6 changed files with 426 additions and 383 deletions

View File

@ -20,15 +20,19 @@
#include <FL/Fl_Button.H> #include <FL/Fl_Button.H>
#include <FL/Fl.H> #include <FL/Fl.H>
class Fl_Blinker : public Fl_Button /* Kind of like Fl_Light_Button except that the whole thing is the
* indicator and it can optionally blink */
class Fl_Blink_Button : public Fl_Button
{ {
bool _on; bool _on;
float _blink_interval; float _blink_interval;
bool _blinking;
static void static void
update_cb ( void *v ) update_cb ( void *v )
{ {
((Fl_Blinker*)v)->update_cb(); ((Fl_Blink_Button*)v)->update_cb();
} }
void void
@ -48,9 +52,10 @@ public:
static const float FAST = 0.1f; static const float FAST = 0.1f;
static const float DEFAULT = 0.5f; static const float DEFAULT = 0.5f;
Fl_Blinker ( int X, int Y, int W, int H, const char *L ) Fl_Blink_Button ( int X, int Y, int W, int H, const char *L )
: Fl_Button( X, Y, W, H, L ) : Fl_Button( X, Y, W, H, L )
{ {
_blinking = true;
_on = false; _on = false;
_blink_interval = DEFAULT; _blink_interval = DEFAULT;
@ -59,14 +64,26 @@ public:
} }
virtual virtual
~Fl_Blinker () ~Fl_Blink_Button ()
{ {
if ( value() ) if ( value() )
Fl::remove_timeout( update_cb, this ); Fl::remove_timeout( update_cb, this );
} }
void blink ( bool b )
{
_blinking = b;
if ( ! b )
_on = true;
}
bool blink ( void ) const
{
return _blinking;
}
void void
interval ( float v ) blink_interval ( float v )
{ {
_blink_interval = v; _blink_interval = v;
if ( value() ) if ( value() )
@ -80,7 +97,8 @@ public:
{ {
if ( v ) if ( v )
{ {
Fl::add_timeout( _blink_interval, update_cb, this ); if ( _blinking )
Fl::add_timeout( _blink_interval, update_cb, this );
Fl_Button::value( v ); Fl_Button::value( v );
redraw(); redraw();
} }

View File

@ -47,7 +47,6 @@
#include "FL/Fl_Value_SliderX.H" #include "FL/Fl_Value_SliderX.H"
#include "OSC/Endpoint.H" #include "OSC/Endpoint.H"
#include <lo/lo.h> #include <lo/lo.h>
#include "FL/Fl_Blinker.H"
#include "OSC/Endpoint.H" #include "OSC/Endpoint.H"
@ -355,48 +354,54 @@ Mixer::Mixer ( int X, int Y, int W, int H, const char *L ) :
_rows = 1; _rows = 1;
box( FL_NO_BOX ); box( FL_NO_BOX );
labelsize( 96 ); labelsize( 96 );
{ Fl_Menu_Bar *o = menubar = new Fl_Menu_Bar( X, Y, W, 24 ); { Fl_Group *o = new Fl_Group( X, Y, W, 24 );
o->add( "&Project/&New" );
o->add( "&Project/&Open" ); { Fl_Menu_Bar *o = menubar = new Fl_Menu_Bar( X, Y, W, 24 );
o->add( "&Project/&Save", FL_CTRL + 's', 0, 0 ); o->add( "&Project/&New" );
o->add( "&Project/&Quit", FL_CTRL + 'q', 0, 0 ); o->add( "&Project/&Open" );
o->add( "&Mixer/&Add Strip", 'a', 0, 0 ); o->add( "&Project/&Save", FL_CTRL + 's', 0, 0 );
o->add( "&Mixer/Add &N Strips" ); o->add( "&Project/&Quit", FL_CTRL + 'q', 0, 0 );
o->add( "&Mixer/&Import Strip" ); o->add( "&Mixer/&Add Strip", 'a', 0, 0 );
o->add( "&Mixer/&Rows/One", '1', 0, 0 ); o->add( "&Mixer/Add &N Strips" );
o->add( "&Mixer/&Rows/Two", '2', 0, 0 ); o->add( "&Mixer/&Import Strip" );
o->add( "&Mixer/&Rows/Three", '3', 0, 0 ); o->add( "&Mixer/&Rows/One", '1', 0, 0 );
o->add( "&View/&Theme", 0, 0, 0 ); o->add( "&Mixer/&Rows/Two", '2', 0, 0 );
o->add( "_&Options/&Display/&Knobs/&Arc", 0, 0, 0, FL_MENU_RADIO ); o->add( "&Mixer/&Rows/Three", '3', 0, 0 );
o->add( "_&Options/&Display/&Knobs/&Burnished", 0, 0, 0, FL_MENU_RADIO ); o->add( "&View/&Theme", 0, 0, 0 );
o->add( "_&Options/&Display/&Knobs/&Plastic", 0, 0, 0, FL_MENU_RADIO | FL_MENU_VALUE ); o->add( "_&Options/&Display/&Knobs/&Arc", 0, 0, 0, FL_MENU_RADIO );
o->add( "_&Options/&Display/&Sliders/&Nice", 0, 0, 0, FL_MENU_RADIO | FL_MENU_VALUE ); o->add( "_&Options/&Display/&Knobs/&Burnished", 0, 0, 0, FL_MENU_RADIO );
o->add( "_&Options/&Display/&Sliders/&Fill", 0, 0, 0, FL_MENU_RADIO ); o->add( "_&Options/&Display/&Knobs/&Plastic", 0, 0, 0, FL_MENU_RADIO | FL_MENU_VALUE );
o->add( "_&Options/&Display/&Sliders/&Simple", 0, 0, 0, FL_MENU_RADIO ); o->add( "_&Options/&Display/&Sliders/&Nice", 0, 0, 0, FL_MENU_RADIO | FL_MENU_VALUE );
o->add( "_&Options/&Display/&Colors/&System", 0, 0, 0, FL_MENU_RADIO ); o->add( "_&Options/&Display/&Sliders/&Fill", 0, 0, 0, FL_MENU_RADIO );
o->add( "&Help/&Manual" ); o->add( "_&Options/&Display/&Sliders/&Simple", 0, 0, 0, FL_MENU_RADIO );
o->add( "&Help/&About" ); o->add( "_&Options/&Display/&Colors/&System", 0, 0, 0, FL_MENU_RADIO );
o->callback( cb_menu, this ); o->add( "&Help/&Manual" );
o->add( "&Help/&About" );
o->callback( cb_menu, this );
}
{ Fl_Box *o = project_name = new Fl_Box( X + 150, Y, W, 24 );
o->labelfont( FL_HELVETICA_ITALIC );
o->label( 0 );
o->align( FL_ALIGN_INSIDE | FL_ALIGN_CENTER );
o->labeltype( FL_SHADOW_LABEL );
Fl_Group::current()->resizable( o );
}
{ sm_blinker = new Fl_Button( ( X + W) - 37, Y + 4, 35, 15, "SM");
sm_blinker->box(FL_ROUNDED_BOX);
sm_blinker->down_box(FL_ROUNDED_BOX);
sm_blinker->color(FL_DARK2);
sm_blinker->selection_color((Fl_Color)93);
sm_blinker->labeltype(FL_NORMAL_LABEL);
sm_blinker->labelfont(3);
sm_blinker->labelsize(14);
sm_blinker->labelcolor(FL_DARK3);
sm_blinker->align(Fl_Align(FL_ALIGN_CENTER));
sm_blinker->when(FL_WHEN_RELEASE);
sm_blinker->deactivate();
} // Fl_Blink_Button* sm_blinker
o->end();
} }
{ Fl_Box *o = project_name = new Fl_Box( X + 150, Y, W, 24 );
o->labelfont( FL_HELVETICA_ITALIC );
o->label( 0 );
o->align( FL_ALIGN_INSIDE | FL_ALIGN_CENTER );
o->labeltype( FL_SHADOW_LABEL );
}
{ sm_blinker = new Fl_Blinker( ( X + W) - 52, Y + 4, 50, 15, "SM");
sm_blinker->box(FL_ROUNDED_BOX);
sm_blinker->down_box(FL_ROUNDED_BOX);
sm_blinker->color((Fl_Color)75);
sm_blinker->selection_color((Fl_Color)86);
sm_blinker->labeltype(FL_NORMAL_LABEL);
sm_blinker->labelfont(2);
sm_blinker->labelsize(14);
sm_blinker->labelcolor(FL_DARK3);
sm_blinker->align(Fl_Align(FL_ALIGN_CENTER));
sm_blinker->when(FL_WHEN_RELEASE);
sm_blinker->deactivate();
} // Fl_Blinker* sm_blinker
{ Fl_Scroll *o = scroll = new Fl_Scroll( X, Y + 24, W, H - 24 ); { Fl_Scroll *o = scroll = new Fl_Scroll( X, Y + 24, W, H - 24 );
o->box( FL_NO_BOX ); o->box( FL_NO_BOX );
// o->type( Fl_Scroll::HORIZONTAL_ALWAYS ); // o->type( Fl_Scroll::HORIZONTAL_ALWAYS );

View File

@ -28,7 +28,7 @@
#include "Thread.H" #include "Thread.H"
class Fl_Blinker; class Fl_Blink_Button;
class Fl_Flowpack; class Fl_Flowpack;
class Fl_Menu_Bar; class Fl_Menu_Bar;
namespace OSC { class Endpoint; } namespace OSC { class Endpoint; }
@ -40,7 +40,7 @@ class Mixer : public Fl_Group
public: public:
OSC::Endpoint *osc_endpoint; OSC::Endpoint *osc_endpoint;
Fl_Blinker *sm_blinker; Fl_Button *sm_blinker;
private: private:

View File

@ -131,12 +131,12 @@ NSM_Client::command_active ( bool b )
{ {
if ( b ) if ( b )
{ {
ui->sm_indicator->activate(); ui->sm_indicator->value( 1 );
ui->sm_indicator->tooltip( session_manager_name() ); ui->sm_indicator->tooltip( session_manager_name() );
} }
else else
{ {
ui->sm_indicator->tooltip( NULL ); ui->sm_indicator->tooltip( NULL );
ui->sm_indicator->deactivate(); ui->sm_indicator->value( 0 );
} }
} }

View File

@ -225,261 +225,12 @@ if ( maybe_save_song() )
xywh {798 131 865 805} type Double color 47 resizable xywh {798 131 865 805} type Double color 47 resizable
code0 {o->color( FL_BACKGROUND_COLOR );} xclass non size_range {700 509 0 0} visible code0 {o->color( FL_BACKGROUND_COLOR );} xclass non size_range {700 509 0 0} visible
} { } {
Fl_Menu_Bar menu_bar {open
xywh {0 0 865 30} color 47
} {
Submenu {} {
label {&File} open
xywh {0 0 100 20} color 37
} {
MenuItem menu_new {
label {&New}
callback {if ( maybe_save_song() )
{
init_song();
// Sync the GUI.
update_pattern_widgets();
update_sequence_widgets();
update_phrase_widgets();
gui_status( "New song." );
}}
xywh {0 0 40 25}
}
MenuItem menu_open {
label {&Open}
callback {char *name = fl_file_chooser( "Open File", "Non Files (*.non)", NULL, 0 );
if ( name )
{
if ( ! load_song( name ) )
fl_alert( "Could not load song!" );
else
gui_status( "Song opened." );
update_sequence_widgets();
update_pattern_widgets();
update_phrase_widgets();
playback_mode_menu->value( song.play_mode );
playback_mode_menu->redraw();
}}
xywh {0 0 40 25} shortcut 0x4006f color 37
}
MenuItem menu_save {
label {&Save}
callback {save_dialog( song.filename );}
xywh {0 0 40 25} shortcut 0x40073 color 37 deactivate
code0 {song.signal_dirty.connect( sigc::mem_fun( o, &Fl_Menu_Item::activate ) );}
code1 {song.signal_clean.connect( sigc::mem_fun( o, &Fl_Menu_Item::deactivate ) );}
}
MenuItem menu_save_as {
label {Save &As}
callback {save_dialog( NULL );}
xywh {0 0 40 25}
}
MenuItem {} {
label {&Import}
callback {char *name = fl_file_chooser( "MIDI Import", "MIDI Files (*.mid)", NULL, 0 );
if ( ! name )
return;
smf f;
if ( ! f.open( name, smf::READ ) )
{
fl_message( "could not open file" );
return;
}
f.read_header();
switch ( f.format() )
{
case 0:
if ( ! pattern::import( &f, 0 ) )
fl_message( "Error importing MIDI" );
break;
case 1: case 2:
{
char **sa = f.track_listing();
if ( sa && *sa )
{
List_Chooser tc( "Select tracks to import:", "Import" );
char *s;
for ( int i = 0; (s = sa[i]); ++i )
{
tc.add( s );
free( s );
}
free( sa );
tc.show();
while( tc.shown() )
Fl::wait();
int n = 0;
for ( int i = 1; i <= tc.browser->size(); ++i )
{
if ( tc.browser->selected( i ) )
{
if ( pattern::import( &f , i - 1 ) )
++n;
else
WARNING( "error importing track %d", i - 1 );
}
}
// fl_message( "%d patterns imported.", n );
gui_status( "Imported %d tracks as patterns", n );
}
break;
}
}}
xywh {0 0 40 25}
code0 {\#include "../smf.H"}
}
MenuItem {} {
label {&Export}
callback {// Fl_File_Chooser::custom_filter_label = "*.mid";
Fl_File_Chooser *fc = new Fl_File_Chooser( ".", "MIDI Files (*.mid)", Fl_File_Chooser::CREATE, "MIDI Export" );
fc->show();
// wait for user to make a choice
while( fc->shown() )
Fl::wait();
if ( ! fc->value() )
return;
if ( tabs->value() == pattern_tab )
((pattern*)pattern_c->grid())->save( fc->value() );}
xywh {0 0 40 25}
code0 {\#include <FL/Fl_File_Chooser.H>}
}
MenuItem {} {
label {&Quit}
callback {main_window->do_callback();}
xywh {0 0 40 25} shortcut 0x40071 color 37
}
}
Submenu edit_menu {
label {&Edit} open
xywh {0 0 74 25} color 37
} {
MenuItem {} {
label {&Events}
callback {event_editor( pattern_c->grid() );}
xywh {0 0 40 25}
}
MenuItem {} {
label {&Randomization Settings}
callback {randomization_dialog->show();}
xywh {0 0 40 25}
}
}
Submenu {} {
label {&View} open
xywh {10 10 74 25} color 37
} {
MenuItem {} {
label {&Metronome}
callback {int val = o->menu()[ o->value() ].value();
if ( val )
vmetro_widget->show();
else
vmetro_widget->hide();}
xywh {0 0 40 25} type Toggle value 1
}
MenuItem {} {
label {&Compacted}
callback {int val = o->menu()[ o->value() ].value();
pattern_c->row_compact( val ? Canvas::ON : Canvas::OFF );
pattern_canvas_widget->redraw();}
xywh {10 10 40 25} type Toggle value 1
}
MenuItem {} {
label {&Follow Playhead}
callback {int val = o->menu()[ o->value() ].value();
config.follow_playhead = val ? true : false;}
xywh {10 10 40 25} type Toggle value 1
}
Submenu {} {
label {Note Shape} open
xywh {0 0 74 24}
} {
MenuItem {} {
label Circle
callback {pattern::note_shape = CIRCLE;
pattern_canvas_widget->redraw();}
xywh {0 0 40 24} type Radio
}
MenuItem {} {
label Square
callback {pattern::note_shape = SQUARE;
pattern_canvas_widget->redraw();}
xywh {0 0 40 24} type Radio value 1
}
}
MenuItem {} {
label {&Theme}
callback {fl_theme_chooser();}
xywh {0 0 40 24}
}
}
Submenu {} {
label {&Help} open
xywh {100 0 74 25} color 37
} {
MenuItem {} {
label {&Keys}
callback {show_help_dialog( "KEYS" );}
xywh {0 0 40 25}
}
MenuItem {} {
label {&Manual}
callback {show_help_dialog( "MANUAL" );}
xywh {10 10 40 25} divider
}
MenuItem {} {
label {&About}
callback {About_Dialog ab( PIXMAP_PATH "/non-sequencer/icon-256x256.png" );
ab.logo_box->label( VERSION );
ab.title->label( "The Non Sequencer" );
ab.copyright->label( "Copyright (C) 2007-2012 Jonathan Moore Liles" );
ab.credits->label( "Non-Sequencer was written from scratch by\\nJonathan Moore Liles for his own use\\n(see the manual).\\n\\nNobody planned. Nobody helped.\\nYou can help now by donating time, money,\\nand/or replacing the rest of Linux Audio\\nwith fast, light, reliable alternatives.\\n" );
ab.website_url->label( "http://non-sequencer.tuxfamily.org" );
ab.run();}
xywh {0 0 40 25} color 37
code0 {\#include "../non.H"}
}
}
}
Fl_Group {} {open Fl_Group {} {open
xywh {0 30 865 70} xywh {0 30 865 70}
} { } {
Fl_Pack {} { Fl_Pack {} {
label Meter open label Meter open
xywh {220 68 175 27} type HORIZONTAL labeltype NO_LABEL labelsize 9 align 0 xywh {214 72 175 25} type HORIZONTAL labeltype NO_LABEL labelsize 9 align 0
code0 {o->spacing( 3 );} code0 {o->spacing( 3 );}
} { } {
Fl_Box {} { Fl_Box {} {
@ -516,15 +267,15 @@ ab.run();}
code1 {o->box( FL_NO_BOX );} code1 {o->box( FL_NO_BOX );}
class Visual_Metronome class Visual_Metronome
} {} } {}
Fl_Pack transport_controls_group {open Fl_Pack transport_controls_group {open selected
xywh {10 32 152 42} type HORIZONTAL xywh {4 32 160 44} type HORIZONTAL
code0 {o->spacing( 2 );} code0 {o->spacing( 2 );}
class Fl_Scalepack class Fl_Scalepack
} { } {
Fl_Button play_button { Fl_Button play_button {
label {@>} label {@>}
callback {transport.toggle();} callback {transport.toggle();}
xywh {10 34 43 3} shortcut 0x20 labeltype ENGRAVED_LABEL xywh {10 34 43 40} shortcut 0x20 labeltype ENGRAVED_LABEL
} }
Fl_Button rec_button { Fl_Button rec_button {
label {@circle} label {@circle}
@ -551,12 +302,12 @@ else
o->labelcolor( FL_WHITE ); o->labelcolor( FL_WHITE );
}} }}
xywh {60 34 43 3} type Toggle shortcut 0x80072 selection_color 47 labeltype ENGRAVED_LABEL when 1 xywh {60 34 43 40} type Toggle shortcut 0x80072 selection_color 47 labeltype ENGRAVED_LABEL when 1
} }
Fl_Button home_button { Fl_Button home_button {
label {@|<} label {@|<}
callback {transport.locate( 0 );} callback {transport.locate( 0 );}
xywh {110 34 43 3} shortcut 0xff50 labeltype ENGRAVED_LABEL xywh {110 34 43 40} shortcut 0xff50 labeltype ENGRAVED_LABEL
} }
} }
Fl_Choice record_mode_menu { Fl_Choice record_mode_menu {
@ -565,7 +316,7 @@ else
config.record_mode = (record_mode_e)o->value(); config.record_mode = (record_mode_e)o->value();
else else
o->value( config.record_mode );} open o->value( config.record_mode );} open
xywh {171 41 100 27} box PLASTIC_DOWN_BOX down_box BORDER_BOX color 37 labelsize 9 align 1 xywh {171 41 100 27} box DOWN_BOX down_box BORDER_BOX color 37 labelsize 9 align 1
} { } {
MenuItem {} { MenuItem {} {
label Merge label Merge
@ -586,7 +337,7 @@ else
} }
Fl_Choice playback_mode_menu { Fl_Choice playback_mode_menu {
label {Playback &Mode} open label {Playback &Mode} open
xywh {285 41 100 26} box PLASTIC_DOWN_BOX down_box BORDER_BOX color 37 labelsize 9 align 1 xywh {285 41 100 26} box DOWN_BOX down_box BORDER_BOX color 37 labelsize 9 align 1
} { } {
MenuItem {} { MenuItem {} {
label Pattern label Pattern
@ -632,12 +383,12 @@ else
} }
menu_bar->redraw();} open menu_bar->redraw();} open
xywh {0 76 865 701} color 37 labeltype SHADOW_LABEL labelsize 19 when 1 resizable xywh {0 79 865 698} color 37 labeltype SHADOW_LABEL labelsize 19 when 1 resizable
code0 {canvas_background_color = fl_rgb_color( 18, 18, 18 );} code0 {canvas_background_color = fl_rgb_color( 18, 18, 18 );}
} { } {
Fl_Group sequence_tab { Fl_Group sequence_tab {
label Sequence open label Sequence open
xywh {0 98 862 674} color 37 hide resizable xywh {0 102 865 674} color 37 hide resizable
code0 {update_sequence_widgets();} code0 {update_sequence_widgets();}
} { } {
Fl_Group {} {open Fl_Group {} {open
@ -765,19 +516,19 @@ if ( playlist->length() )
} }
Fl_Group phrase_tab { Fl_Group phrase_tab {
label Phrase open label Phrase open
xywh {0 98 865 674} color 47 hide xywh {0 102 865 674} color 47
code0 {update_phrase_widgets();} code0 {update_phrase_widgets();}
} { } {
Fl_Box phrase_canvas_widget { Fl_Box phrase_canvas_widget {
label Phrase label Phrase
xywh {4 102 860 590} box FLAT_BOX color 37 labelsize 100 align 16 resizable xywh {1 103 863 587} box FLAT_BOX color 37 labelsize 100 align 16 resizable
code0 {o->set_canvas( phrase_c ); code0 {o->set_canvas( phrase_c );
phrase_c->signal_pan.connect( sigc::mem_fun( phrase_canvas_widget, &O_Canvas::handle_pan ) );} phrase_c->signal_pan.connect( sigc::mem_fun( phrase_canvas_widget, &O_Canvas::handle_pan ) );}
code1 {o->box( FL_NO_BOX );} code1 {o->box( FL_NO_BOX );}
class O_Canvas class O_Canvas
} }
Fl_Group {} {open Fl_Group {} {open
xywh {5 697 859 72} xywh {5 697 856 72}
} { } {
Fl_Input phrase_name_field { Fl_Input phrase_name_field {
label {name:} label {name:}
@ -816,13 +567,13 @@ o->maximum( phrase::phrases() );}
} }
} }
Fl_Group pattern_tab { Fl_Group pattern_tab {
label Pattern open selected label Pattern open
xywh {0 98 865 674} color 47 xywh {0 102 865 674} color 47 hide
code0 {update_pattern_widgets();} code0 {update_pattern_widgets();}
} { } {
Fl_Box pattern_canvas_widget { Fl_Box pattern_canvas_widget {
label Pattern label Pattern
xywh {4 102 860 590} box FLAT_BOX color 37 labelsize 100 align 16 resizable xywh {1 103 863 587} box FLAT_BOX color 37 labelsize 100 align 16 resizable
code0 {\#include "draw.H"} code0 {\#include "draw.H"}
code1 {o->set_canvas( pattern_c ); code1 {o->set_canvas( pattern_c );
pattern_c->signal_pan.connect( sigc::mem_fun( pattern_canvas_widget, &O_Canvas::handle_pan ) );} pattern_c->signal_pan.connect( sigc::mem_fun( pattern_canvas_widget, &O_Canvas::handle_pan ) );}
@ -830,7 +581,7 @@ o->maximum( phrase::phrases() );}
class O_Canvas class O_Canvas
} }
Fl_Group {} {open Fl_Group {} {open
xywh {0 694 865 78} color 47 xywh {0 694 862 78} color 47
} { } {
Fl_Input pattern_name_field { Fl_Input pattern_name_field {
label {name:} label {name:}
@ -1140,9 +891,266 @@ if ( s != o->label() )
xywh {460 692 30 18} hide xywh {460 692 30 18} hide
} }
} }
Fl_Box sm_indicator { Fl_Group {} {open
label SM xywh {0 0 865 31}
xywh {810 7 50 13} box ROUNDED_BOX color 50 labelcolor 3 deactivate } {
Fl_Menu_Bar menu_bar {open
xywh {0 0 865 30} color 47
} {
Submenu {} {
label {&File} open
xywh {0 0 100 20} color 37
} {
MenuItem menu_new {
label {&New}
callback {if ( maybe_save_song() )
{
init_song();
// Sync the GUI.
update_pattern_widgets();
update_sequence_widgets();
update_phrase_widgets();
gui_status( "New song." );
}}
xywh {0 0 40 25}
}
MenuItem menu_open {
label {&Open}
callback {char *name = fl_file_chooser( "Open File", "Non Files (*.non)", NULL, 0 );
if ( name )
{
if ( ! load_song( name ) )
fl_alert( "Could not load song!" );
else
gui_status( "Song opened." );
update_sequence_widgets();
update_pattern_widgets();
update_phrase_widgets();
playback_mode_menu->value( song.play_mode );
playback_mode_menu->redraw();
}}
xywh {0 0 40 25} shortcut 0x4006f color 37
}
MenuItem menu_save {
label {&Save}
callback {save_dialog( song.filename );}
xywh {0 0 40 25} shortcut 0x40073 color 37 deactivate
code0 {song.signal_dirty.connect( sigc::mem_fun( o, &Fl_Menu_Item::activate ) );}
code1 {song.signal_clean.connect( sigc::mem_fun( o, &Fl_Menu_Item::deactivate ) );}
}
MenuItem menu_save_as {
label {Save &As}
callback {save_dialog( NULL );}
xywh {0 0 40 25}
}
MenuItem {} {
label {&Import}
callback {char *name = fl_file_chooser( "MIDI Import", "MIDI Files (*.mid)", NULL, 0 );
if ( ! name )
return;
smf f;
if ( ! f.open( name, smf::READ ) )
{
fl_message( "could not open file" );
return;
}
f.read_header();
switch ( f.format() )
{
case 0:
if ( ! pattern::import( &f, 0 ) )
fl_message( "Error importing MIDI" );
break;
case 1: case 2:
{
char **sa = f.track_listing();
if ( sa && *sa )
{
List_Chooser tc( "Select tracks to import:", "Import" );
char *s;
for ( int i = 0; (s = sa[i]); ++i )
{
tc.add( s );
free( s );
}
free( sa );
tc.show();
while( tc.shown() )
Fl::wait();
int n = 0;
for ( int i = 1; i <= tc.browser->size(); ++i )
{
if ( tc.browser->selected( i ) )
{
if ( pattern::import( &f , i - 1 ) )
++n;
else
WARNING( "error importing track %d", i - 1 );
}
}
// fl_message( "%d patterns imported.", n );
gui_status( "Imported %d tracks as patterns", n );
}
break;
}
}}
xywh {0 0 40 25}
code0 {\#include "../smf.H"}
}
MenuItem {} {
label {&Export}
callback {// Fl_File_Chooser::custom_filter_label = "*.mid";
Fl_File_Chooser *fc = new Fl_File_Chooser( ".", "MIDI Files (*.mid)", Fl_File_Chooser::CREATE, "MIDI Export" );
fc->show();
// wait for user to make a choice
while( fc->shown() )
Fl::wait();
if ( ! fc->value() )
return;
if ( tabs->value() == pattern_tab )
((pattern*)pattern_c->grid())->save( fc->value() );}
xywh {0 0 40 25}
code0 {\#include <FL/Fl_File_Chooser.H>}
}
MenuItem {} {
label {&Quit}
callback {main_window->do_callback();}
xywh {0 0 40 25} shortcut 0x40071 color 37
}
}
Submenu edit_menu {
label {&Edit} open
xywh {0 0 74 25} color 37
} {
MenuItem {} {
label {&Events}
callback {event_editor( pattern_c->grid() );}
xywh {0 0 40 25}
}
MenuItem {} {
label {&Randomization Settings}
callback {randomization_dialog->show();}
xywh {0 0 40 25}
}
}
Submenu {} {
label {&View} open
xywh {10 10 74 25} color 37
} {
MenuItem {} {
label {&Metronome}
callback {int val = o->menu()[ o->value() ].value();
if ( val )
vmetro_widget->show();
else
vmetro_widget->hide();}
xywh {0 0 40 25} type Toggle value 1
}
MenuItem {} {
label {&Compacted}
callback {int val = o->menu()[ o->value() ].value();
pattern_c->row_compact( val ? Canvas::ON : Canvas::OFF );
pattern_canvas_widget->redraw();}
xywh {10 10 40 25} type Toggle value 1
}
MenuItem {} {
label {&Follow Playhead}
callback {int val = o->menu()[ o->value() ].value();
config.follow_playhead = val ? true : false;}
xywh {10 10 40 25} type Toggle value 1
}
Submenu {} {
label {Note Shape} open
xywh {0 0 74 24}
} {
MenuItem {} {
label Circle
callback {pattern::note_shape = CIRCLE;
pattern_canvas_widget->redraw();}
xywh {0 0 40 24} type Radio
}
MenuItem {} {
label Square
callback {pattern::note_shape = SQUARE;
pattern_canvas_widget->redraw();}
xywh {0 0 40 24} type Radio value 1
}
}
MenuItem {} {
label {&Theme}
callback {fl_theme_chooser();}
xywh {0 0 40 24}
}
}
Submenu {} {
label {&Help} open
xywh {100 0 74 25} color 37
} {
MenuItem {} {
label {&Keys}
callback {show_help_dialog( "KEYS" );}
xywh {0 0 40 25}
}
MenuItem {} {
label {&Manual}
callback {show_help_dialog( "MANUAL" );}
xywh {10 10 40 25} divider
}
MenuItem {} {
label {&About}
callback {About_Dialog ab( PIXMAP_PATH "/non-sequencer/icon-256x256.png" );
ab.logo_box->label( VERSION );
ab.title->label( "The Non Sequencer" );
ab.copyright->label( "Copyright (C) 2007-2012 Jonathan Moore Liles" );
ab.credits->label( "Non-Sequencer was written from scratch by\\nJonathan Moore Liles for his own use\\n(see the manual).\\n\\nNobody planned. Nobody helped.\\nYou can help now by donating time, money,\\nand/or replacing the rest of Linux Audio\\nwith fast, light, reliable alternatives.\\n" );
ab.website_url->label( "http://non-sequencer.tuxfamily.org" );
ab.run();}
xywh {0 0 40 25} color 37
code0 {\#include "../non.H"}
}
}
}
Fl_Button sm_indicator {
label SM
xywh {825 8 35 15} box ROUNDED_BOX down_box ROUNDED_BOX color 46 selection_color 93 labelfont 3 labelcolor 39 deactivate
}
Fl_Box {} {
label label
xywh {15 15 35 16} hide resizable
}
} }
} }
} }

View File

@ -25,6 +25,9 @@ comment {//
decl {const float STATUS_UPDATE_FREQ = 0.5f;} {private local decl {const float STATUS_UPDATE_FREQ = 0.5f;} {private local
} }
decl {class Fl_Flowpack;} {public global
}
decl {\#include "Fl_Menu_Settings.H"} {private local decl {\#include "Fl_Menu_Settings.H"} {private local
} }
@ -43,6 +46,9 @@ decl {\#include "Project.H"} {private local
decl {\#include "Clock.H"} {public local decl {\#include "Clock.H"} {public local
} }
decl {\#include "FL/Fl_Flowpack.H"} {private local
}
decl {\#include "New_Project_Dialog.H"} {private local decl {\#include "New_Project_Dialog.H"} {private local
} }
@ -224,10 +230,10 @@ Loggable::progress_callback( &TLE::progress_cb, this );} {}
label {Non DAW : Timeline} label {Non DAW : Timeline}
callback {if ( Fl::event_key() != FL_Escape ) callback {if ( Fl::event_key() != FL_Escape )
timeline->command_quit();} open timeline->command_quit();} open
xywh {705 125 1025 770} type Double resizable xclass Non_DAW visible xywh {485 131 1025 770} type Double resizable xclass Non_DAW size_range {900 300 0 0} visible
} { } {
Fl_Menu_Bar menubar {open Fl_Menu_Bar menubar {open
private xywh {0 0 1024 25} private xywh {0 0 1025 25}
} { } {
Submenu {} { Submenu {} {
label {&Project} open label {&Project} open
@ -451,7 +457,7 @@ Project::compact();}
} }
MenuItem {} { MenuItem {} {
label {&Theme} label {&Theme}
callback {fl_theme_chooser();} selected callback {fl_theme_chooser();}
xywh {10 10 40 24} xywh {10 10 40 24}
code0 {\#include "FL/Fl_Theme_Chooser.H"} code0 {\#include "FL/Fl_Theme_Chooser.H"}
} }
@ -590,33 +596,34 @@ ab.run();}
} }
} }
Fl_Group {} {open Fl_Group {} {open
xywh {0 1 1025 73} xywh {0 -1 1025 76}
} { } {
Fl_Pack {} {open Fl_Pack {} {open
xywh {5 29 475 40} type HORIZONTAL xywh {3 27 477 44} type HORIZONTAL
code0 {o->spacing( 10 );} code0 {o->spacing( 10 );}
} { } {
Fl_Box {} { Fl_Box {} {
label {<Transport>} label {<Transport>}
xywh {5 29 189 40} color 30 xywh {5 29 185 37} color 30
code0 {transport = o;} code0 {transport = o;}
code1 {o->labeltype( FL_NO_LABEL );} code1 {o->labeltype( FL_NO_LABEL );}
code2 {o->spacing( 1 );}
class Transport class Transport
} }
Fl_Pack clocks_pack {open Fl_Pack clocks_pack {open
private xywh {195 29 285 40} type HORIZONTAL private xywh {195 27 285 44} type HORIZONTAL
code0 {o->spacing( 2 );} code0 {o->spacing( 2 );}
} { } {
Fl_Box {} { Fl_Box {} {
label PLAYHEAD label PLAYHEAD
private xywh {196 29 137 40} box BORDER_BOX color 40 private xywh {196 27 137 40} box BORDER_BOX color 40
code0 {o->type( Clock::HMS );} code0 {o->type( Clock::HMS );}
code1 {o->run( &transport->frame );} code1 {o->run( &transport->frame );}
class Clock class Clock
} }
Fl_Box {} { Fl_Box {} {
label PLAYHEAD label PLAYHEAD
xywh {335 29 142 40} box BORDER_BOX color 40 xywh {335 31 137 37} box BORDER_BOX color 40
code0 {o->type( Clock::BBT );} code0 {o->type( Clock::BBT );}
code1 {o->run( &transport->frame );} code1 {o->run( &transport->frame );}
class Clock class Clock
@ -625,79 +632,84 @@ ab.run();}
} }
Fl_Box {} { Fl_Box {} {
label {<empty>} label {<empty>}
xywh {480 27 210 42} resizable xywh {475 31 265 40} resizable
code0 {o->labeltype( FL_NO_LABEL );} code0 {o->labeltype( FL_NO_LABEL );}
} }
Fl_Group {} {open Fl_Group {} {open
xywh {810 26 215 44} xywh {850 22 175 50}
} { } {
Fl_Box {} { Fl_Box {} {
label {capture:} label {capture:}
xywh {865 26 56 14} labelsize 10 align 24 xywh {910 26 56 14} labelsize 10 align 24
} }
Fl_Box {} { Fl_Box {} {
label {playback:} label {playback:}
xywh {865 42 56 14} labelsize 10 align 24 xywh {910 42 56 14} labelsize 10 align 24
} }
Fl_Box {} { Fl_Box {} {
label {DSP:} label {DSP:}
xywh {865 56 56 14} labelsize 10 align 24 xywh {910 56 56 14} labelsize 10 align 24
}
Fl_Progress capture_buffer_progress {
label {50%}
private xywh {921 26 104 14} labelsize 10
}
Fl_Progress cpu_load_progress {
label {50%}
private xywh {921 56 104 14} labelsize 9
}
Fl_Progress playback_buffer_progress {
label {50%}
private xywh {921 41 104 14} labelsize 10
} }
Fl_Box {} { Fl_Box {} {
label filesystem label filesystem
xywh {810 27 55 18} labelsize 10 align 16 xywh {855 27 55 18} labelsize 10 align 16
}
Fl_Progress capture_buffer_progress {
label {50%}
private xywh {965 26 60 14} labelsize 10
}
Fl_Progress cpu_load_progress {
label {50%}
private xywh {965 56 60 14} labelsize 9
}
Fl_Progress playback_buffer_progress {
label {50%}
private xywh {965 41 60 14} labelsize 10
} }
Fl_Progress disk_usage_progress { Fl_Progress disk_usage_progress {
label {50%} label {50%}
private xywh {810 43 55 26} labelsize 10 private xywh {855 42 55 28} labelsize 10
code0 {o->type( FL_VERTICAL );}
} }
} }
Fl_Button solo_blinker { Fl_Group {} {open
label SOLO xywh {740 30 115 40}
xywh {750 30 50 15} box ROUNDED_BOX down_box ROUNDED_BOX color 74 selection_color 92 labelfont 2 labelcolor 39 deactivate } {
code0 {\#include "FL/Fl_Blinker.H"} Fl_Button solo_blinker {
class Fl_Blinker label SOLO
} xywh {800 32 50 15} box ROUNDED_BOX down_box ROUNDED_BOX color 74 selection_color 92 labelfont 2 labelcolor 39 deactivate
Fl_Button rec_blinker { code0 {\#include "FL/Fl_Blink_Button.H"}
label REC class Fl_Blink_Button
xywh {750 50 50 15} box ROUNDED_BOX down_box ROUNDED_BOX color 72 selection_color 88 labelfont 2 labelcolor 39 deactivate }
code0 {\#include "FL/Fl_Blinker.H"} Fl_Button rec_blinker {
class Fl_Blinker label REC
} xywh {800 52 50 15} box ROUNDED_BOX down_box ROUNDED_BOX color 72 selection_color 88 labelfont 2 labelcolor 39 deactivate
Fl_Button sm_blinker { code0 {\#include "FL/Fl_Blink_Button.H"}
label SM class Fl_Blink_Button
xywh {695 30 50 15} box ROUNDED_BOX down_box ROUNDED_BOX color 75 selection_color 86 labelfont 2 labelcolor 39 deactivate }
code0 {\#include "FL/Fl_Blinker.H"} Fl_Button selected_blinker {
class Fl_Blinker label SEL
} xywh {745 52 50 15} box ROUNDED_BOX down_box ROUNDED_BOX color 13 selection_color 5 labelfont 2 labelcolor 39 deactivate
Fl_Button selected_blinker { code0 {\#include "FL/Fl_Blink_Button.H"}
label SEL code1 {o->blink( false );}
xywh {695 50 50 15} box ROUNDED_BOX down_box ROUNDED_BOX color 13 selection_color 5 labelfont 2 labelcolor 39 deactivate class Fl_Blink_Button
code0 {\#include "FL/Fl_Blinker.H"} }
class Fl_Blinker Fl_Button seek_blinker {
} label SEEK selected
Fl_Button seek_blinker { xywh {745 32 50 15} box ROUNDED_BOX down_box ROUNDED_BOX color 10 selection_color 2 labelfont 2 labelcolor 39 deactivate
label SEEK code0 {\#include "FL/Fl_Blink_Button.H"}
xywh {640 50 50 15} box ROUNDED_BOX down_box ROUNDED_BOX color 10 selection_color 2 labelfont 2 labelcolor 39 hide deactivate code1 {o->blink_interval( Fl_Blink_Button::FAST );}
code0 {\#include "FL/Fl_Blinker.H"} class Fl_Blink_Button
code1 {o->interval( Fl_Blinker::FAST );} }
class Fl_Blinker
} }
Fl_Box stats_box { Fl_Box stats_box {
label {<stats>} label {<stats>}
xywh {810 1 215 21} labelsize 13 labelcolor 53 align 88 xywh {745 0 235 24} labelsize 13 labelcolor 53 align 88
}
Fl_Button sm_blinker {
label SM
xywh {985 5 35 15} box ROUNDED_BOX down_box ROUNDED_BOX color 45 selection_color 93 labelfont 3 labelcolor 39 deactivate
class Fl_Button
} }
} }
Fl_Progress progress { Fl_Progress progress {
@ -706,13 +718,13 @@ ab.run();}
} }
Fl_Box {} { Fl_Box {} {
label {<Timeline>} label {<Timeline>}
xywh {0 72 1024 695} box FLAT_BOX color 47 labelsize 100 resizable xywh {0 75 1025 692} box FLAT_BOX color 47 labelsize 100 resizable
code0 {timeline = o;} code0 {timeline = o;}
class Timeline class Timeline
} }
Fl_Box project_name { Fl_Box project_name {
label {<project name>} label {<project name>}
private xywh {450 0 365 22} labeltype SHADOW_LABEL labelfont 2 private xywh {440 0 305 24} labeltype SHADOW_LABEL labelfont 2
code0 {o->label( Project::name() );} code0 {o->label( Project::name() );}
} }
} }