Improve LASH support.
This commit is contained in:
parent
28bc3ff1c6
commit
79b16b56c9
|
@ -19,11 +19,25 @@
|
||||||
|
|
||||||
/* actual implementation of our side of the LASH protocol */
|
/* actual implementation of our side of the LASH protocol */
|
||||||
|
|
||||||
|
/* NOTES: The LASH API, as it stands, is basically retarded. It was
|
||||||
|
* designed by retards for retards. The way it handles project state
|
||||||
|
* and project directories shows a deep lack of insight into how real
|
||||||
|
* software works. Since LASH doesn't provide us with the information
|
||||||
|
* we need--when we need it--we just punt and only use LASH to save
|
||||||
|
* and load the path to the *real* project data. One of these days a
|
||||||
|
* motivated individual (probably me, unfortuately) is going to spend
|
||||||
|
* a cozy afternoon implementing a replacement for LASH--a load of
|
||||||
|
* shit which has been in the works for God know how many years and is
|
||||||
|
* still stinking up the place. */
|
||||||
|
|
||||||
#include "LASH.H"
|
#include "LASH.H"
|
||||||
|
#include "Project.H"
|
||||||
|
#include "TLE.H" // all this just for quit()
|
||||||
|
|
||||||
|
extern TLE *tle;
|
||||||
|
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
|
||||||
|
|
||||||
LASH::LASH ( )
|
LASH::LASH ( )
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -32,12 +46,33 @@ LASH::~LASH ( )
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool
|
bool
|
||||||
LASH::handle_save_file ( const char *path )
|
LASH::handle_save_file ( const char *path )
|
||||||
{
|
{
|
||||||
MESSAGE( "LASH wants us to save \"%s\"", path );
|
MESSAGE( "LASH wants us to save \"%s\"", path );
|
||||||
|
|
||||||
|
char *name;
|
||||||
|
|
||||||
|
asprintf( &name, "%s/project-path", path );
|
||||||
|
|
||||||
|
FILE *fp;
|
||||||
|
|
||||||
|
if ( ! ( fp = fopen( name, "w" ) ) )
|
||||||
|
{
|
||||||
|
free( name );
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
free( name );
|
||||||
|
|
||||||
|
char project_path[ 512 ];
|
||||||
|
|
||||||
|
fl_filename_absolute( project_path, sizeof( project_path ), "." );
|
||||||
|
|
||||||
|
fwrite( project_path, strlen( project_path ), 1, fp );
|
||||||
|
|
||||||
|
fclose( fp );
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -46,11 +81,32 @@ LASH::handle_restore_file ( const char *path )
|
||||||
{
|
{
|
||||||
MESSAGE( "LASH wants us to load \"%s\"", path );
|
MESSAGE( "LASH wants us to load \"%s\"", path );
|
||||||
|
|
||||||
return true;
|
char *name;
|
||||||
|
|
||||||
|
asprintf( &name, "%s/project-path", path );
|
||||||
|
|
||||||
|
FILE *fp;
|
||||||
|
|
||||||
|
if ( ! ( fp = fopen( name, "r" ) ) )
|
||||||
|
{
|
||||||
|
free( name );
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
free( name );
|
||||||
|
|
||||||
|
char project_path[ 512 ];
|
||||||
|
|
||||||
|
fgets( project_path, sizeof( project_path ), fp );
|
||||||
|
|
||||||
|
fclose( fp );
|
||||||
|
|
||||||
|
return Project::open( project_path );
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
LASH::handle_quit ( void )
|
LASH::handle_quit ( void )
|
||||||
{
|
{
|
||||||
MESSAGE( "LASH wants us to quit" );
|
MESSAGE( "LASH wants us to quit" );
|
||||||
|
tle->quit();
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,6 +33,10 @@ project state belongs to Timeline and other classes. */
|
||||||
|
|
||||||
#include "Timeline.H" // for sample_rate();
|
#include "Timeline.H" // for sample_rate();
|
||||||
|
|
||||||
|
#include "TLE.H" // all this just for load and save...
|
||||||
|
|
||||||
|
extern TLE *tle;
|
||||||
|
|
||||||
/* FIXME: wrong place for this */
|
/* FIXME: wrong place for this */
|
||||||
#define APP_TITLE "Non-DAW"
|
#define APP_TITLE "Non-DAW"
|
||||||
|
|
||||||
|
@ -45,9 +49,16 @@ bool Project::_is_open = false;
|
||||||
void
|
void
|
||||||
Project::set_name ( const char *name )
|
Project::set_name ( const char *name )
|
||||||
{
|
{
|
||||||
char *s = rindex( name, '/' );
|
strcpy( Project::_name, name );
|
||||||
|
|
||||||
strcpy( Project::_name, s ? s + 1 : name );
|
if ( Project::_name[ strlen( Project::_name ) - 1 ] == '/' )
|
||||||
|
Project::_name[ strlen( Project::_name ) - 1 ] = '\0';
|
||||||
|
|
||||||
|
char *s = rindex( Project::_name, '/' );
|
||||||
|
|
||||||
|
s = s ? s + 1 : Project::_name;
|
||||||
|
|
||||||
|
memmove( Project::_name, s, strlen( s ) + 1 );
|
||||||
|
|
||||||
for ( s = Project::_name; *s; ++s )
|
for ( s = Project::_name; *s; ++s )
|
||||||
if ( *s == '_' || *s == '-' )
|
if ( *s == '_' || *s == '-' )
|
||||||
|
@ -67,6 +78,8 @@ exists ( const char *name )
|
||||||
bool
|
bool
|
||||||
Project::close ( void )
|
Project::close ( void )
|
||||||
{
|
{
|
||||||
|
tle->save_timeline_settings();
|
||||||
|
|
||||||
Loggable::close();
|
Loggable::close();
|
||||||
|
|
||||||
write_info();
|
write_info();
|
||||||
|
@ -146,6 +159,8 @@ Project::open ( const char *name )
|
||||||
|
|
||||||
_is_open = true;
|
_is_open = true;
|
||||||
|
|
||||||
|
tle->load_timeline_settings();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -165,9 +165,7 @@ main_window->redraw();}
|
||||||
}
|
}
|
||||||
MenuItem {} {
|
MenuItem {} {
|
||||||
label {&Open}
|
label {&Open}
|
||||||
callback {save_timeline_settings();
|
callback {const char *name = fl_dir_chooser( "Open Project", NULL, NULL );
|
||||||
|
|
||||||
const char *name = fl_dir_chooser( "Open Project", NULL, NULL );
|
|
||||||
|
|
||||||
Project::close();
|
Project::close();
|
||||||
|
|
||||||
|
@ -176,13 +174,7 @@ if ( ! Project::open( name ) )
|
||||||
fl_alert( "Could not open \\"%s\\" as a Non-DAW project!", name );
|
fl_alert( "Could not open \\"%s\\" as a Non-DAW project!", name );
|
||||||
|
|
||||||
// we are in a somewhar ambiguous state now with no project open.
|
// we are in a somewhar ambiguous state now with no project open.
|
||||||
}
|
}}
|
||||||
else
|
|
||||||
{
|
|
||||||
load_timeline_settings();
|
|
||||||
}
|
|
||||||
|
|
||||||
update_menu();}
|
|
||||||
xywh {10 10 40 25}
|
xywh {10 10 40 25}
|
||||||
}
|
}
|
||||||
MenuItem {} {
|
MenuItem {} {
|
||||||
|
@ -192,7 +184,7 @@ update_menu();}
|
||||||
if ( n != 2 )
|
if ( n != 2 )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Loggable::compact();} selected
|
Loggable::compact();}
|
||||||
xywh {20 20 40 25}
|
xywh {20 20 40 25}
|
||||||
}
|
}
|
||||||
Submenu {} {
|
Submenu {} {
|
||||||
|
@ -210,15 +202,7 @@ Loggable::compact();} selected
|
||||||
}
|
}
|
||||||
MenuItem {} {
|
MenuItem {} {
|
||||||
label {&Quit}
|
label {&Quit}
|
||||||
callback {save();
|
callback {quit()}
|
||||||
|
|
||||||
save_timeline_settings();
|
|
||||||
|
|
||||||
Project::close();
|
|
||||||
|
|
||||||
printf( "dropped %d buffers\\n", engine->dropped() );
|
|
||||||
|
|
||||||
exit( 0 );}
|
|
||||||
xywh {40 40 40 25} shortcut 0x40071
|
xywh {40 40 40 25} shortcut 0x40071
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -592,7 +576,7 @@ delete win;}
|
||||||
code0 {timeline = o;}
|
code0 {timeline = o;}
|
||||||
class Timeline
|
class Timeline
|
||||||
}
|
}
|
||||||
Fl_Box {} {
|
Fl_Box project_name {
|
||||||
label {<project name>}
|
label {<project name>}
|
||||||
xywh {450 0 475 22} labeltype SHADOW_LABEL labelfont 2
|
xywh {450 0 475 22} labeltype SHADOW_LABEL labelfont 2
|
||||||
code0 {o->label( Project::name() );}
|
code0 {o->label( Project::name() );}
|
||||||
|
@ -634,7 +618,9 @@ else
|
||||||
transport->activate();
|
transport->activate();
|
||||||
}
|
}
|
||||||
|
|
||||||
m->redraw();} {}
|
m->redraw();
|
||||||
|
project_name->redraw();} {selected
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Function {update_progress( Fl_Progress *p, char *s, float v )} {open private return_type {static void}
|
Function {update_progress( Fl_Progress *p, char *s, float v )} {open private return_type {static void}
|
||||||
} {
|
} {
|
||||||
|
@ -673,7 +659,7 @@ xruns_output->value( engine->xruns() );} {}
|
||||||
} {
|
} {
|
||||||
Fl_Window {} {
|
Fl_Window {} {
|
||||||
label About open
|
label About open
|
||||||
xywh {677 145 495 525} type Double visible
|
xywh {733 400 495 525} type Double visible
|
||||||
} {
|
} {
|
||||||
Fl_Tabs {} {open
|
Fl_Tabs {} {open
|
||||||
xywh {-4 122 507 419}
|
xywh {-4 122 507 419}
|
||||||
|
@ -726,7 +712,20 @@ with fast, light, reliable alternatives.}
|
||||||
code {if ( Project::open() )
|
code {if ( Project::open() )
|
||||||
{
|
{
|
||||||
((Fl_Menu_Settings*)menubar)->load( menubar->find_item( "&Timeline" ), "options" );
|
((Fl_Menu_Settings*)menubar)->load( menubar->find_item( "&Timeline" ), "options" );
|
||||||
}} {}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
update_menu();
|
||||||
|
|
||||||
|
project_name->redraw();} {}
|
||||||
|
}
|
||||||
|
Function {quit()} {open
|
||||||
|
} {
|
||||||
|
code {Project::close();
|
||||||
|
|
||||||
|
save();
|
||||||
|
|
||||||
|
exit( 0 );} {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -747,7 +746,7 @@ while ( _window->shown() )
|
||||||
} {
|
} {
|
||||||
Fl_Window _window {
|
Fl_Window _window {
|
||||||
label {New Project} open
|
label {New Project} open
|
||||||
xywh {576 340 550 195} type Double modal visible
|
xywh {23 779 550 195} type Double modal visible
|
||||||
} {
|
} {
|
||||||
Fl_File_Input _name {
|
Fl_File_Input _name {
|
||||||
label {Named:}
|
label {Named:}
|
||||||
|
|
|
@ -57,12 +57,13 @@ Engine *engine;
|
||||||
Timeline *timeline;
|
Timeline *timeline;
|
||||||
Transport *transport;
|
Transport *transport;
|
||||||
LASH *lash;
|
LASH *lash;
|
||||||
|
TLE *tle;
|
||||||
|
|
||||||
/* TODO: put these in a header */
|
/* TODO: put these in a header */
|
||||||
#define USER_CONFIG_DIR ".non-daw/"
|
#define USER_CONFIG_DIR ".non-daw/"
|
||||||
|
|
||||||
const char APP_NAME[] = "Non-DAW";
|
const char APP_NAME[] = "Non-DAW";
|
||||||
const char APP_TITLE[] = "The Non-DAW (Digital Audio Workstation)";
|
const char APP_TITLE[] = "The Non-DAW";
|
||||||
const char COPYRIGHT[] = "Copyright (C) 2008 Jonathan Moore Liles";
|
const char COPYRIGHT[] = "Copyright (C) 2008 Jonathan Moore Liles";
|
||||||
|
|
||||||
#define PACKAGE "non"
|
#define PACKAGE "non"
|
||||||
|
@ -116,7 +117,7 @@ main ( int argc, char **argv )
|
||||||
|
|
||||||
printf( "%s %s -- %s\n", APP_TITLE, VERSION, COPYRIGHT );
|
printf( "%s %s -- %s\n", APP_TITLE, VERSION, COPYRIGHT );
|
||||||
|
|
||||||
TLE tle;
|
tle = new TLE;
|
||||||
|
|
||||||
MESSAGE( "Initializing JACK" );
|
MESSAGE( "Initializing JACK" );
|
||||||
|
|
||||||
|
@ -142,8 +143,8 @@ main ( int argc, char **argv )
|
||||||
/* FIXME: open project in /tmp if none is given? */
|
/* FIXME: open project in /tmp if none is given? */
|
||||||
|
|
||||||
MESSAGE( "Starting GUI" );
|
MESSAGE( "Starting GUI" );
|
||||||
// tle.main_window->show( argc, argv );
|
|
||||||
tle.run();
|
tle->run();
|
||||||
|
|
||||||
MESSAGE( "Your fun is over" );
|
MESSAGE( "Your fun is over" );
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue