From 5b752d5dc5ab6681d5b1cda891fd209958e57cdd Mon Sep 17 00:00:00 2001 From: Jonathan Moore Liles Date: Thu, 17 Jul 2008 23:07:00 -0500 Subject: [PATCH] Add creation and modification times to project info dialog. --- Timeline/Project.C | 37 +++++++++++++++++++++++++++++++++---- Timeline/Project.H | 5 +++-- Timeline/TLE.fl | 22 ++++++++++++++++------ util/file.C | 4 ++-- util/file.h | 3 ++- 5 files changed, 56 insertions(+), 15 deletions(-) diff --git a/Timeline/Project.C b/Timeline/Project.C index d725be2..7ebed2d 100644 --- a/Timeline/Project.C +++ b/Timeline/Project.C @@ -61,6 +61,7 @@ const char *Project::_errstr[] = }; char Project::_name[256]; +char Project::_created_on[40]; char Project::_path[512]; bool Project::_is_open = false; int Project::_lockfd = 0; @@ -101,8 +102,20 @@ Project::write_info ( void ) return false; } - fprintf( fp, "created by\n\t%s\nversion\n\t%d\nsample rate\n\t%lu\n", + char s[40]; + + if ( ! *_created_on ) + { + time_t t = time( NULL ); + ctime_r( &t, s ); + s[ strlen( s ) - 1 ] = '\0'; + } + else + strcpy( s, _created_on ); + + fprintf( fp, "created by\n\t%s\ncreated on\n\t%s\nversion\n\t%d\nsample rate\n\t%lu\n", APP_TITLE " " VERSION, + s, PROJECT_VERSION, (unsigned long)timeline->sample_rate() ); @@ -112,7 +125,7 @@ Project::write_info ( void ) } bool -Project::read_info ( int *version, nframes_t *sample_rate ) +Project::read_info ( int *version, nframes_t *sample_rate, char **creation_date ) { FILE *fp; @@ -122,6 +135,10 @@ Project::read_info ( int *version, nframes_t *sample_rate ) return false; } + *version = 0; + *sample_rate = 0; + *creation_date = 0; + char *name, *value; while ( fscanf( fp, "%a[^\n]\n\t%a[^\n]\n", &name, &value ) == 2 ) @@ -132,6 +149,8 @@ Project::read_info ( int *version, nframes_t *sample_rate ) *sample_rate = atoll( value ); else if ( ! strcmp( name, "version" ) ) *version = atoi( value ); + else if ( ! strcmp( name, "created on" ) ) + *creation_date = strdup( value ); free( name ); free( value ); @@ -157,11 +176,12 @@ Project::close ( void ) Loggable::close(); - write_info(); +// write_info(); _is_open = false; *Project::_name = '\0'; + *Project::_created_on = '\0'; release_lock( &_lockfd, ".lock" ); @@ -215,8 +235,9 @@ Project::open ( const char *name ) int version; nframes_t rate; + char *creation_date; - if ( ! read_info( &version, &rate ) ) + if ( ! read_info( &version, &rate, &creation_date ) ) return E_INVALID; if ( version != PROJECT_VERSION ) @@ -227,6 +248,14 @@ Project::open ( const char *name ) timeline->sample_rate( rate ); + if ( creation_date ) + { + strcpy( _created_on, creation_date ); + free( creation_date ); + } + else + *_created_on = 0; + set_name( name ); *_path = '\0'; diff --git a/Timeline/Project.H b/Timeline/Project.H index 2f2c0e1..5bc54cc 100644 --- a/Timeline/Project.H +++ b/Timeline/Project.H @@ -29,11 +29,11 @@ class Project static bool _is_open; static char _name[256]; static char _path[512]; + static char _created_on[40]; static bool write_info ( void ); - static bool read_info ( int *version, nframes_t *sample_rate ); + static bool read_info ( int *version, nframes_t *sample_rate, char **creation_date ); static void set_name ( const char *name ); - static const char *_errstr[]; public: @@ -57,4 +57,5 @@ public: static bool open ( void ) { return _is_open; } static bool create ( const char *name, const char *template_name ); + static const char *created_on ( void ) { return _created_on; } }; diff --git a/Timeline/TLE.fl b/Timeline/TLE.fl index ca3e4d0..ef2c99b 100644 --- a/Timeline/TLE.fl +++ b/Timeline/TLE.fl @@ -837,7 +837,8 @@ Function {new_project_chooser()} {C return_type void nsd.run();} {} } -class Project_Info_Dialog {} { +class Project_Info_Dialog {open +} { Function {Project_Info_Dialog()} {open } { code {make_window();} {} @@ -869,7 +870,7 @@ if ( logo_box->image() ) } Fl_Output {} { label {Size of Journal} - xywh {210 80 100 25} box UP_BOX labeltype SHADOW_LABEL align 1 + xywh {180 80 100 25} box UP_BOX labeltype SHADOW_LABEL align 1 code0 {static char pat[40];} code1 {snprintf( pat, sizeof( pat ), "%.1fK", size( "history" ) / (float)1024 );} code2 {o->value( pat );} @@ -877,18 +878,19 @@ if ( logo_box->image() ) } Fl_Output {} { label {Created On} - xywh {350 80 135 25} box UP_BOX labeltype SHADOW_LABEL align 1 + xywh {320 80 180 25} box UP_BOX labeltype SHADOW_LABEL align 1 textfont 11 textsize 12 + code0 {o->value( Project::created_on() );} } Fl_Output {} { label Length - xywh {30 130 115 25} align 1 + xywh {30 130 115 25} box BORDER_BOX color 47 align 1 textcolor 71 code0 {char pat[40];} code1 {Clock::frame_to_HMS( pat, sizeof( pat ), timeline->length() );} code2 {o->value( pat );} } Fl_Value_Output {} { label Tracks - xywh {230 130 60 25} align 1 + xywh {200 130 55 25} align 1 code0 {o->value( timeline->ntracks() );} } Fl_Box logo_box { @@ -923,6 +925,14 @@ window->do_callback();} callback {window->do_callback();} xywh {330 700 74 25} } + Fl_Output {} { + label {Last Modified On} selected + xywh {320 130 180 25} box UP_BOX labeltype SHADOW_LABEL align 1 textfont 11 textsize 12 + code0 {time_t t = modification_time( "history" );} + code1 {static char s[40];} + code2 {ctime_r( &t, s ); s[ strlen( s ) - 1 ] = 0;} + code3 {o->value( s );} + } } } } @@ -952,7 +962,7 @@ if ( logo_box->image() ) ((Fl_Shared_Image*)logo_box->image())->release(); logo_box->image( NULL ); }} open - private xywh {669 197 495 655} type Double xclass {Non-DAW} visible + private xywh {349 201 495 655} type Double xclass {Non-DAW} visible } { Fl_Tabs {} {open xywh {0 264 497 392} diff --git a/util/file.C b/util/file.C index f35f3a8..4691b6e 100644 --- a/util/file.C +++ b/util/file.C @@ -26,7 +26,7 @@ #include unsigned long -mtime ( const char *file ) +modification_time ( const char *file ) { struct stat st; @@ -40,7 +40,7 @@ mtime ( const char *file ) bool newer ( const char *file1, const char *file2 ) { - return mtime( file1 ) > mtime( file2 ); + return modification_time( file1 ) > modification_time( file2 ); } unsigned long diff --git a/util/file.h b/util/file.h index 9c02b7c..4fd67f8 100644 --- a/util/file.h +++ b/util/file.h @@ -19,7 +19,8 @@ #include -unsigned long mtime ( const char *file ); +unsigned long modification_time ( const char *file ); + bool newer ( const char *file1, const char *file2 ); unsigned long size ( const char *file ); int exists ( const char *name );