@@ -71,7 +71,7 @@ CFLAGS+=-DVERSION=\"$(VERSION)\" \ | |||||
-DDOCUMENT_PATH=\"$(DOCUMENT_PATH)\" \ | -DDOCUMENT_PATH=\"$(DOCUMENT_PATH)\" \ | ||||
-DPIXMAP_PATH=\"$(PIXMAP_PATH)\" | -DPIXMAP_PATH=\"$(PIXMAP_PATH)\" | ||||
CXXFLAGS += $(SNDFILE_CFLAGS) $(LASH_CFLAGS) $(FLTK_CFLAGS) $(JACK_CFLAGS) | |||||
CXXFLAGS += $(SNDFILE_CFLAGS) $(FLTK_CFLAGS) $(JACK_CFLAGS) | |||||
CXXFLAGS := $(CFLAGS) $(CXXFLAGS) | CXXFLAGS := $(CFLAGS) $(CXXFLAGS) | ||||
INCLUDES := -I. -Iutil -IFL -Inonlib | INCLUDES := -I. -Iutil -IFL -Inonlib | ||||
@@ -1,120 +0,0 @@ | |||||
/*******************************************************************************/ | |||||
/* Copyright (C) 2008 Jonathan Moore Liles */ | |||||
/* */ | |||||
/* This program is free software; you can redistribute it and/or modify it */ | |||||
/* under the terms of the GNU General Public License as published by the */ | |||||
/* Free Software Foundation; either version 2 of the License, or (at your */ | |||||
/* option) any later version. */ | |||||
/* */ | |||||
/* This program is distributed in the hope that it will be useful, but WITHOUT */ | |||||
/* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or */ | |||||
/* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for */ | |||||
/* more details. */ | |||||
/* */ | |||||
/* You should have received a copy of the GNU General Public License along */ | |||||
/* with This program; see the file COPYING. If not,write to the Free Software */ | |||||
/* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ | |||||
/*******************************************************************************/ | |||||
/* Actual implementation of our side of the LASH_Engine protocol */ | |||||
/* NOTES: 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. */ | |||||
#include "LASH_Engine.H" | |||||
#include "Project.H" | |||||
#include "TLE.H" // all this just for quit() | |||||
#include <FL/Fl.H> | |||||
#include <FL/filename.H> | |||||
extern TLE *tle; | |||||
#include "const.h" | |||||
#include "util/debug.h" | |||||
const float lash_poll_interval = 0.2f; | |||||
void | |||||
LASH_Engine::timer_cb ( void *v ) | |||||
{ | |||||
((LASH_Engine*)v)->poll(); | |||||
Fl::repeat_timeout( lash_poll_interval, &LASH_Engine::timer_cb, v ); | |||||
} | |||||
LASH_Engine::LASH_Engine ( ) | |||||
{ | |||||
Fl::add_timeout( lash_poll_interval, &LASH_Engine::timer_cb, this ); | |||||
} | |||||
LASH_Engine::~LASH_Engine ( ) | |||||
{ | |||||
Fl::remove_timeout( &LASH_Engine::timer_cb ); | |||||
} | |||||
bool | |||||
LASH_Engine::handle_save_file ( const char *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 Project::save(); | |||||
} | |||||
bool | |||||
LASH_Engine::handle_restore_file ( const char *path ) | |||||
{ | |||||
MESSAGE( "LASH wants us to load \"%s\"", path ); | |||||
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 ) == 0; | |||||
} | |||||
void | |||||
LASH_Engine::handle_quit ( void ) | |||||
{ | |||||
MESSAGE( "LASH wants us to quit" ); | |||||
tle->quit(); | |||||
} |
@@ -1,38 +0,0 @@ | |||||
/*******************************************************************************/ | |||||
/* Copyright (C) 2008 Jonathan Moore Liles */ | |||||
/* */ | |||||
/* This program is free software; you can redistribute it and/or modify it */ | |||||
/* under the terms of the GNU General Public License as published by the */ | |||||
/* Free Software Foundation; either version 2 of the License, or (at your */ | |||||
/* option) any later version. */ | |||||
/* */ | |||||
/* This program is distributed in the hope that it will be useful, but WITHOUT */ | |||||
/* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or */ | |||||
/* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for */ | |||||
/* more details. */ | |||||
/* */ | |||||
/* You should have received a copy of the GNU General Public License along */ | |||||
/* with This program; see the file COPYING. If not,write to the Free Software */ | |||||
/* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ | |||||
/*******************************************************************************/ | |||||
#pragma once | |||||
#include "LASH/Client.H" | |||||
class LASH_Engine : public LASH::Client | |||||
{ | |||||
static void timer_cb ( void *v ); | |||||
public: | |||||
LASH_Engine ( ); | |||||
~LASH_Engine ( ); | |||||
bool handle_save_file ( const char *path ); | |||||
bool handle_restore_file ( const char *path ); | |||||
void handle_quit ( void ); | |||||
}; |
@@ -24,8 +24,6 @@ comment {// | |||||
decl {const float STATUS_UPDATE_FREQ = 0.5f;} {} | decl {const float STATUS_UPDATE_FREQ = 0.5f;} {} | ||||
decl {\#include "LASH_Engine.H"} {} | |||||
decl {\#include "Fl_Menu_Settings.H"} {} | decl {\#include "Fl_Menu_Settings.H"} {} | ||||
decl {\#include "Timeline.H"} {} | decl {\#include "Timeline.H"} {} | ||||
@@ -67,9 +65,6 @@ decl {extern char project_display_name[256];} {global | |||||
decl {extern char *user_config_dir;} {global | decl {extern char *user_config_dir;} {global | ||||
} | } | ||||
decl {extern LASH_Engine *lash;} {global | |||||
} | |||||
class TLE {open | class TLE {open | ||||
} { | } { | ||||
decl {Fl_Color system_colors[3];} {} | decl {Fl_Color system_colors[3];} {} | ||||
@@ -694,8 +689,8 @@ ab.run();} | |||||
code0 {\#include "FL/Fl_Blinker.H"} | code0 {\#include "FL/Fl_Blinker.H"} | ||||
class Fl_Blinker | class Fl_Blinker | ||||
} | } | ||||
Fl_Button lash_blinker { | |||||
label LASH | |||||
Fl_Button sm_blinker { | |||||
label SM | |||||
xywh {695 30 50 15} box ROUNDED_BOX down_box ROUNDED_BOX color 75 selection_color 86 labelfont 2 labelcolor 39 deactivate | 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"} | code0 {\#include "FL/Fl_Blinker.H"} | ||||
class Fl_Blinker | class Fl_Blinker | ||||
@@ -812,8 +807,10 @@ if ( engine->zombified() && ! zombie ) | |||||
solo_blinker->value( Track::soloing() ); | solo_blinker->value( Track::soloing() ); | ||||
rec_blinker->value( transport->rolling && transport->rec_enabled() ); | rec_blinker->value( transport->rolling && transport->rec_enabled() ); | ||||
lash_blinker->value( lash->enabled() ); | |||||
selected_blinker->value( timeline->nselected() );} {} | |||||
sm_blinker->value( timeline->session_manager_name() != NULL ); | |||||
sm_blinker->tooltip( timeline->session_manager_name() ); | |||||
selected_blinker->value( timeline->nselected() );} {selected | |||||
} | |||||
} | } | ||||
Function {update_cb( void *v )} {open private return_type {static void} | Function {update_cb( void *v )} {open private return_type {static void} | ||||
} { | } { | ||||
@@ -145,6 +145,8 @@ public: | |||||
void update_tempomap ( void ); | void update_tempomap ( void ); | ||||
const char *session_manager_name ( void ) { return NULL; } | |||||
nframes_t fpp ( void ) const { return 1 << _fpp; } | nframes_t fpp ( void ) const { return 1 << _fpp; } | ||||
void range ( nframes_t start, nframes_t length ); | void range ( nframes_t start, nframes_t length ); | ||||
nframes_t length ( void ) const; | nframes_t length ( void ) const; | ||||
@@ -43,7 +43,6 @@ | |||||
#include "../FL/Boxtypes.H" | #include "../FL/Boxtypes.H" | ||||
#include "Project.H" | #include "Project.H" | ||||
#include "LASH_Engine.H" | |||||
#include "Transport.H" | #include "Transport.H" | ||||
#include "Engine/Engine.H" | #include "Engine/Engine.H" | ||||
@@ -52,7 +51,6 @@ | |||||
Engine *engine; | Engine *engine; | ||||
Timeline *timeline; | Timeline *timeline; | ||||
Transport *transport; | Transport *transport; | ||||
LASH_Engine *lash; | |||||
TLE *tle; | TLE *tle; | ||||
/* TODO: put these in a header */ | /* TODO: put these in a header */ | ||||
@@ -147,17 +145,6 @@ main ( int argc, char **argv ) | |||||
* scenario requiring otherwise */ | * scenario requiring otherwise */ | ||||
transport->stop(); | transport->stop(); | ||||
MESSAGE( "Initializing LASH" ); | |||||
lash = new LASH_Engine; | |||||
if ( argc > 1 && ! strcmp( argv[1], "--no-lash" ) ) | |||||
{ | |||||
MESSAGE( "--no-lash specified on command-line: LASH disabled." ); | |||||
shift( argv, &argc, 1 ); | |||||
} | |||||
else | |||||
lash->init( jack_name, APP_TITLE, &argc, &argv ); | |||||
MESSAGE( "Starting GUI" ); | MESSAGE( "Starting GUI" ); | ||||
tle->run(); | tle->run(); | ||||
@@ -12,7 +12,7 @@ Timeline_SRCS:=$(Timeline_SRCS:.fl=.C) | |||||
Timeline_SRCS:=$(sort $(Timeline_SRCS)) | Timeline_SRCS:=$(sort $(Timeline_SRCS)) | ||||
Timeline_OBJS:=$(Timeline_SRCS:.C=.o) | Timeline_OBJS:=$(Timeline_SRCS:.C=.o) | ||||
Timeline_LIBS := $(FLTK_LIBS) $(JACK_LIBS) $(SNDFILE_LIBS) $(LASH_LIBS) | |||||
Timeline_LIBS := $(FLTK_LIBS) $(JACK_LIBS) $(SNDFILE_LIBS) | |||||
Timeline/timeline: $(Timeline_OBJS) FL | Timeline/timeline: $(Timeline_OBJS) FL | ||||
@ echo -n Linking timeline... | @ echo -n Linking timeline... | ||||
@@ -10,11 +10,10 @@ begin | |||||
begin_options | begin_options | ||||
ask "Installation prefix" prefix /usr/local | ask "Installation prefix" prefix /usr/local | ||||
ask "Use the LASH Audio Session Handler" USE_LASH yes | |||||
ask "Build for debugging" USE_DEBUG no | ask "Build for debugging" USE_DEBUG no | ||||
using DEBUG && | using DEBUG && | ||||
{ | |||||
{ | |||||
ask "Use unoptimized drawing routines" USE_UNOPTIMIZED_DRAWING no | ask "Use unoptimized drawing routines" USE_UNOPTIMIZED_DRAWING no | ||||
ask "Use widget for timeline" USE_WIDGET_FOR_TIMELINE no | ask "Use widget for timeline" USE_WIDGET_FOR_TIMELINE no | ||||
using WIDGET_FOR_TIMELINE || ask "Use singlebuffered timeline" USE_SINGLEBUFFERED_TIMELINE no | using WIDGET_FOR_TIMELINE || ask "Use singlebuffered timeline" USE_SINGLEBUFFERED_TIMELINE no | ||||
@@ -29,6 +28,4 @@ require_command makedepend makedepend | |||||
require_package JACK 0.103.0 jack | require_package JACK 0.103.0 jack | ||||
require_package sndfile 1.0.17 sndfile | require_package sndfile 1.0.17 sndfile | ||||
using LASH && require_package LASH 0.5.4 lash-1.0 | |||||
end | end |
@@ -1,134 +0,0 @@ | |||||
/*******************************************************************************/ | |||||
/* Copyright (C) 2008 Jonathan Moore Liles */ | |||||
/* */ | |||||
/* This program is free software; you can redistribute it and/or modify it */ | |||||
/* under the terms of the GNU General Public License as published by the */ | |||||
/* Free Software Foundation; either version 2 of the License, or (at your */ | |||||
/* option) any later version. */ | |||||
/* */ | |||||
/* This program is distributed in the hope that it will be useful, but WITHOUT */ | |||||
/* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or */ | |||||
/* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for */ | |||||
/* more details. */ | |||||
/* */ | |||||
/* You should have received a copy of the GNU General Public License along */ | |||||
/* with This program; see the file COPYING. If not,write to the Free Software */ | |||||
/* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ | |||||
/*******************************************************************************/ | |||||
/* Handler based wrapper for LASH */ | |||||
#include "Client.H" | |||||
/* #include "const.h" */ | |||||
/* #include "util/debug.h" */ | |||||
namespace LASH | |||||
{ | |||||
Client::Client ( ) | |||||
{ | |||||
_void = 0; | |||||
} | |||||
Client::~Client ( ) | |||||
{ | |||||
/* TODO: anything? */ | |||||
} | |||||
#ifdef HAVE_LASH | |||||
#include <lash/lash.h> | |||||
#define _client (static_cast<lash_client_t*>(_void)) | |||||
bool | |||||
Client::init ( const char *jack_name, const char *long_name, int *argc, char ***argv ) | |||||
{ | |||||
if ( ! ( _void = lash_init( lash_extract_args( argc, argv ), jack_name, | |||||
LASH_Config_File, LASH_PROTOCOL( 2, 0 ) ) ) ) | |||||
return false; | |||||
/* register name */ | |||||
lash_jack_client_name( _client, jack_name ); | |||||
lash_event_t *e = lash_event_new_with_type( LASH_Client_Name ); | |||||
lash_event_set_string( e, long_name ); | |||||
lash_send_event( _client, e ); | |||||
return true; | |||||
} | |||||
bool | |||||
Client::enabled ( void ) | |||||
{ | |||||
return lash_enabled( _client ); | |||||
} | |||||
/** process any queued events */ | |||||
void | |||||
Client::poll ( void ) | |||||
{ | |||||
if ( ! _client ) | |||||
return; | |||||
lash_event_t *e; | |||||
while ( ( e = lash_get_event( _client ) ) ) | |||||
{ | |||||
const char *name = lash_event_get_string( e ); | |||||
switch ( lash_event_get_type( e ) ) | |||||
{ | |||||
case LASH_Save_File: | |||||
handle_save_file( name ); | |||||
lash_send_event( _client, lash_event_new_with_type( LASH_Save_File ) ); | |||||
break; | |||||
case LASH_Restore_File: | |||||
if ( ! handle_restore_file( name ) ) | |||||
/* FIXME: should we tell lash that we couldn't load the song? */; | |||||
lash_send_event( _client, lash_event_new_with_type( LASH_Restore_File ) ); | |||||
break; | |||||
case LASH_Quit: | |||||
handle_quit(); | |||||
break; | |||||
default: | |||||
// WARNING( "unhandled LASH event" ); | |||||
break; | |||||
} | |||||
lash_event_destroy( e ); | |||||
} | |||||
} | |||||
#else | |||||
bool | |||||
Client::init ( const char *jack_name, const char *long_name, int *argc, char ***argv ) | |||||
{ | |||||
return true; | |||||
} | |||||
bool | |||||
Client::enabled ( void ) | |||||
{ | |||||
return false; | |||||
} | |||||
void | |||||
Client::poll ( void ) | |||||
{ | |||||
} | |||||
#endif | |||||
} |
@@ -1,52 +0,0 @@ | |||||
/*******************************************************************************/ | |||||
/* Copyright (C) 2008 Jonathan Moore Liles */ | |||||
/* */ | |||||
/* This program is free software; you can redistribute it and/or modify it */ | |||||
/* under the terms of the GNU General Public License as published by the */ | |||||
/* Free Software Foundation; either version 2 of the License, or (at your */ | |||||
/* option) any later version. */ | |||||
/* */ | |||||
/* This program is distributed in the hope that it will be useful, but WITHOUT */ | |||||
/* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or */ | |||||
/* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for */ | |||||
/* more details. */ | |||||
/* */ | |||||
/* You should have received a copy of the GNU General Public License along */ | |||||
/* with This program; see the file COPYING. If not,write to the Free Software */ | |||||
/* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ | |||||
/*******************************************************************************/ | |||||
/* generic master class for interfacing with LASH... */ | |||||
#pragma once | |||||
namespace LASH | |||||
{ | |||||
class Client | |||||
{ | |||||
/* to avoid including the lash header here... */ | |||||
void *_void; | |||||
protected: | |||||
virtual bool handle_save_file ( const char *path ) = 0; | |||||
virtual bool handle_restore_file ( const char *path ) = 0; | |||||
virtual void handle_quit ( void ) = 0; | |||||
public: | |||||
Client ( ); | |||||
virtual ~Client ( ); | |||||
bool init ( const char *jack_name, const char *full_name, int *argc, char ***argv ); | |||||
bool enabled ( void ); | |||||
void poll ( void ); | |||||
void project_save ( void ); | |||||
void project_quit ( void ); | |||||
/* TODO: project_add, project_remove, project_dir, project_name, percentage */ | |||||
}; | |||||
} |