diff --git a/Timeline/TLE.fl b/Timeline/TLE.fl index 0359466..2557dfe 100644 --- a/Timeline/TLE.fl +++ b/Timeline/TLE.fl @@ -199,7 +199,7 @@ Loggable::progress_callback( &TLE::progress_cb, this );} {} Fl_Window main_window { label Timeline callback {if ( Fl::event_key() != FL_Escape ) - o->hide();} open selected + o->hide();} open private xywh {133 113 1025 770} type Double resizable xclass Non_DAW visible } { Fl_Menu_Bar menubar {open @@ -606,12 +606,12 @@ ab.run();} } } Fl_Box {} { - label {} - xywh {487 27 308 42} resizable + label {} selected + xywh {487 27 258 42} resizable code0 {o->labeltype( FL_NO_LABEL );} } Fl_Group {} {open - xywh {865 26 160 44} + xywh {745 26 280 44} } { Fl_Box {} { label {capture:} @@ -637,16 +637,24 @@ ab.run();} label {50%} private xywh {921 41 104 14} labelsize 10 } + Fl_Box {} { + label {disk:} + xywh {810 27 55 18} labelsize 10 align 16 + } + Fl_Progress disk_usage_progress { + label {50%} + private xywh {810 43 55 26} labelsize 10 + } } Fl_Button solo_blinker { label SOLO - xywh {810 30 50 15} box ROUNDED_BOX down_box ROUNDED_BOX color 74 selection_color 92 labelfont 2 labelcolor 39 deactivate + 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"} class Fl_Blinker } Fl_Button rec_blinker { label REC - xywh {810 50 50 15} box ROUNDED_BOX down_box ROUNDED_BOX color 72 selection_color 88 labelfont 2 labelcolor 39 deactivate + 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"} class Fl_Blinker } @@ -724,12 +732,13 @@ p->label( s );} {} } Function {update_status()} {open private } { - code {static char cbp[5], pbp[5], clp[5]; + code {static char cbp[5], pbp[5], clp[5], dup[5]; update_progress( capture_buffer_progress, cbp, timeline->total_input_buffer_percent() ); update_progress( playback_buffer_progress, pbp, timeline->total_output_buffer_percent() ); update_progress( cpu_load_progress, clp, engine->cpu_load() ); +update_progress( disk_usage_progress, dup, percent_used( "." ) ); if ( timeline->total_capture_xruns() ) capture_buffer_progress->selection_color( FL_RED ); diff --git a/util/file.C b/util/file.C index 4691b6e..f4abbd0 100644 --- a/util/file.C +++ b/util/file.C @@ -178,3 +178,38 @@ read_line ( const char *dir, const char *name, char **value ) fclose( fp ); } + +#include + +/** return the number of blocks free on filesystem containing file named /file/ */ +unsigned long +free_space ( const char *file ) +{ + struct statvfs st; + memset( &st, 0, sizeof( st ) ); + + statvfs( file, &st ); + + return st.f_bfree; +} + +/** return the total number of blocks on filesystem containing file named /file/ */ +unsigned long +total_space ( const char *file ) +{ + struct statvfs st; + memset( &st, 0, sizeof( st ) ); + + statvfs( file, &st ); + + return st.f_blocks; +} + +/** return the percentage of usage on filesystem containing file named /file/ */ +int +percent_used ( const char *file ) +{ + const size_t ts = total_space( file ); + + return 100 - ( ts ? free_space( file ) * 100 / ts : 0 ); +} diff --git a/util/file.h b/util/file.h index 4fd67f8..3c95174 100644 --- a/util/file.h +++ b/util/file.h @@ -31,3 +31,6 @@ char * backwards_fgets ( char *s, int size, FILE *fp ); void touch ( int fd ); void write_line ( const char *dir, const char *name, const char *value ); void read_line ( const char *dir, const char *name, char **value ); +size_t free_space ( const char *file ); +size_t total_space ( const char *file ); +int percent_used ( const char *file );