| @@ -0,0 +1,113 @@ | |||
| /*******************************************************************************/ | |||
| /* 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. */ | |||
| /*******************************************************************************/ | |||
| /* Routings for opening/closing/creation of sessions. All the actual | |||
| session state belongs to Timeline and other classes. */ | |||
| #include <stdio.h> | |||
| #include <stdlib.h> | |||
| #include <string.h> | |||
| #include <sys/stat.h> | |||
| #include "Loggable.H" | |||
| #include "Session.H" | |||
| #include "debug.h" | |||
| char Session::_name[256]; | |||
| void | |||
| Session::set_name ( const char *name ) | |||
| { | |||
| char *s = rindex( name, '/' ); | |||
| strcpy( Session::_name, s ? s : name ); | |||
| for ( s = Session::_name; *s; ++s ) | |||
| if ( *s == '_' || *s == '-' ) | |||
| *s = ' '; | |||
| } | |||
| static int | |||
| exists ( const char *name ) | |||
| { | |||
| struct stat st; | |||
| return 0 == stat( name, &st ); | |||
| } | |||
| #include <errno.h> | |||
| bool | |||
| Session::close ( void ) | |||
| { | |||
| Loggable::close(); | |||
| } | |||
| bool | |||
| Session::open ( const char *name ) | |||
| { | |||
| if ( chdir( name ) ) | |||
| { | |||
| WARNING( "Cannot change to session dir \"%s\"", name ); | |||
| return false; | |||
| } | |||
| if ( ! exists( "history" ) || | |||
| ! exists( "sources" ) ) | |||
| // ! exists( "options" ) ) | |||
| { | |||
| WARNING( "Not a Non-DAW session: \"%s\"", name ); | |||
| return false; | |||
| } | |||
| if ( ! Loggable::open( "history" ) ) | |||
| FATAL( "error opening journal" ); | |||
| set_name( name ); | |||
| } | |||
| bool | |||
| Session::create ( const char *name, const char *template_name ) | |||
| { | |||
| if ( exists( name ) ) | |||
| { | |||
| WARNING( "Session already exists" ); | |||
| return false; | |||
| } | |||
| if ( mkdir( name, 0777 ) ) | |||
| { | |||
| WARNING( "Cannot create session directory" ); | |||
| return false; | |||
| } | |||
| if ( chdir( name ) ) | |||
| FATAL( "WTF? Cannot change to new session directory" ); | |||
| mkdir( "sources", 0777 ); | |||
| set_name( name ); | |||
| /* TODO: copy template */ | |||
| close(); | |||
| return open( name ); | |||
| } | |||
| @@ -0,0 +1,34 @@ | |||
| /*******************************************************************************/ | |||
| /* 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. */ | |||
| /*******************************************************************************/ | |||
| class Session | |||
| { | |||
| static char _name[256]; | |||
| public: | |||
| static const char *name ( void ) { return Session::_name; } | |||
| static void set_name ( const char *name ); | |||
| static bool close ( void ); | |||
| static bool open ( const char *name ); | |||
| static bool create ( const char *name, const char *template_name ); | |||
| }; | |||
| @@ -14,6 +14,8 @@ decl {\#include "Transport.H"} {} | |||
| decl {\#include "Loggable.H"} {} | |||
| decl {\#include "Session.H"} {} | |||
| decl {\#include "Clock.H"} {public | |||
| } | |||
| @@ -117,7 +119,7 @@ free( path );} {} | |||
| } { | |||
| Fl_Window main_window { | |||
| label {Non-DAW - Timeline} open | |||
| xywh {129 104 1020 765} type Double resizable xclass {Non-DAW} visible | |||
| xywh {174 178 1020 765} type Double resizable xclass {Non-DAW} visible | |||
| } { | |||
| Fl_Menu_Bar menubar {open | |||
| xywh {0 0 1024 25} | |||
| @@ -546,9 +548,9 @@ delete win;} | |||
| class Timeline | |||
| } | |||
| Fl_Box {} { | |||
| label {<session name>} | |||
| label {<session name>} selected | |||
| xywh {450 0 475 22} labeltype SHADOW_LABEL labelfont 2 | |||
| code0 {o->label( session_display_name );} | |||
| code0 {o->label( Session::name() );} | |||
| } | |||
| Fl_Value_Output xruns_output { | |||
| label {xruns:} | |||
| @@ -593,7 +595,7 @@ xruns_output->value( engine->xruns() );} {} | |||
| } { | |||
| Fl_Window {} { | |||
| label About open | |||
| xywh {1082 94 495 525} type Double visible | |||
| xywh {677 145 495 525} type Double visible | |||
| } { | |||
| Fl_Tabs {} {open | |||
| xywh {-4 122 507 419} | |||
| @@ -691,7 +693,7 @@ o->hide();} open | |||
| private xywh {75 110 375 25} labeltype EMBOSSED_LABEL | |||
| } | |||
| Fl_Box {} { | |||
| label {New Session} selected | |||
| label {New Session} | |||
| xywh {15 8 520 33} box RSHADOW_BOX color 133 labelsize 20 labelcolor 32 | |||
| } | |||
| Fl_Choice _template { | |||
| @@ -49,6 +49,7 @@ | |||
| #include <stdlib.h> | |||
| #include <sys/stat.h> | |||
| #include "Session.H" | |||
| Engine *engine; | |||
| Timeline *timeline; | |||
| @@ -69,27 +70,6 @@ const char COPYRIGHT[] = "Copyright (C) 2008 Jonathan Moore Liles"; | |||
| #include "debug.h" | |||
| char *user_config_dir; | |||
| char session_display_name[256]; | |||
| void | |||
| set_display_name ( const char *name ) | |||
| { | |||
| char *s = rindex( name, '/' ); | |||
| strcpy( session_display_name, s ? s : name ); | |||
| for ( s = session_display_name; *s; ++s ) | |||
| if ( *s == '_' || *s == '-' ) | |||
| *s = ' '; | |||
| } | |||
| static int | |||
| exists ( const char *name ) | |||
| { | |||
| struct stat st; | |||
| return 0 == stat( name, &st ); | |||
| } | |||
| #include <errno.h> | |||
| @@ -103,40 +83,10 @@ ensure_dirs ( void ) | |||
| return r == 0 || errno == EEXIST; | |||
| } | |||
| bool | |||
| create_session ( const char *name ) | |||
| { | |||
| if ( exists( name ) ) | |||
| { | |||
| WARNING( "Session already exists" ); | |||
| return false; | |||
| } | |||
| if ( mkdir( name, 0777 ) ) | |||
| { | |||
| WARNING( "Cannot create session directory" ); | |||
| return false; | |||
| } | |||
| if ( chdir( name ) ) | |||
| FATAL( "WTF? Cannot change to new session directory" ); | |||
| mkdir( "sources", 0777 ); | |||
| set_display_name( name ); | |||
| /* TODO: load template */ | |||
| return true; | |||
| } | |||
| int | |||
| main ( int argc, char **argv ) | |||
| { | |||
| *session_display_name = '\0'; | |||
| /* welcome to C++ */ | |||
| LOG_REGISTER_CREATE( Region ); | |||
| LOG_REGISTER_CREATE( Time_Point ); | |||
| @@ -154,25 +104,11 @@ main ( int argc, char **argv ) | |||
| printf( "%s %s -- %s\n", APP_TITLE, VERSION, COPYRIGHT ); | |||
| const char *pwd = getenv( "PWD" ); | |||
| if ( argc > 1 ) | |||
| { | |||
| /* FIXME: what about FLTK arguments? */ | |||
| if ( ! Session::open( argv[ 1 ] ) ) | |||
| FATAL( "Could not open session specified on command line" ); | |||
| /* change to session dir */ | |||
| if ( chdir( argv[ 1 ] ) ) | |||
| FATAL( "Cannot change to session dir \"%s\"", argv[ 1 ] ); | |||
| else | |||
| pwd = argv[ 1 ]; | |||
| } | |||
| if ( ! exists( "history" ) || | |||
| ! exists( "sources" ) ) | |||
| // ! exists( "options" ) ) | |||
| FATAL( "Not a Non-DAW session: \"%s\"", pwd ); | |||
| set_display_name( pwd ); | |||
| /* FIXME: open session in /tmp if none is given? */ | |||
| TLE tle; | |||
| @@ -186,9 +122,6 @@ main ( int argc, char **argv ) | |||
| * scenario requiring otherwise */ | |||
| transport->stop(); | |||
| MESSAGE( "Opening session" ); | |||
| Loggable::open( "history" ); | |||
| MESSAGE( "Starting GUI" ); | |||
| // tle.main_window->show( argc, argv ); | |||
| tle.main_window->show(); | |||
| @@ -28,6 +28,7 @@ Timeline/Transport.C \ | |||
| Timeline/Waveform.C \ | |||
| Timeline/dsp.C \ | |||
| Timeline/main.C \ | |||
| Timeline/Session.C \ | |||
| debug.C \ | |||
| Timeline_OBJS:=$(Timeline_SRCS:.C=.o) | |||