diff options
Diffstat (limited to 'gtk2_ardour/disk_space_indicator.cc')
-rw-r--r-- | gtk2_ardour/disk_space_indicator.cc | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/gtk2_ardour/disk_space_indicator.cc b/gtk2_ardour/disk_space_indicator.cc new file mode 100644 index 0000000000..2bc31babce --- /dev/null +++ b/gtk2_ardour/disk_space_indicator.cc @@ -0,0 +1,99 @@ +/* + * Copyright (C) 2017 Robin Gareus <robin@gareus.org> + * + * 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; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include "ardour_ui.h" +#include "dsp_load_indicator.h" + +#include "pbd/i18n.h" + +#define PADDING 3 + +DiskSpaceIndicator::DiskSpaceIndicator () + : ArdourGauge (">24h") + , _sec (-1) +{ +} + +void +DiskSpaceIndicator::set_available_disk_sec (float sec) +{ + if (_sec == sec) { + return; + } + _sec = sec; + + if (sec < 0) { + update (_("N/A")); + return; + } + + char buf[64]; + if (_sec > 86400) { + update (_(">24h")); + return; + } else if (_sec > 32400 /* 9 hours */) { + snprintf (buf, sizeof (buf), "%.0fh", _sec / 3600.f); + } else if (_sec > 5940 /* 99 mins */) { + snprintf (buf, sizeof (buf), "%.1fh", _sec / 3600.f); + } else { + snprintf (buf, sizeof (buf), "%.0fm", _sec / 60.f); + } + update (std::string (buf)); +} + +float +DiskSpaceIndicator::level () const { + static const float lm = 6.f * 3600.f; + if (_sec < 0) return 0; + if (_sec > lm) return 1.0; + return _sec / lm; +} + +bool +DiskSpaceIndicator::alert () const +{ + return _sec >=0 && _sec < 60.f * 10.f; +} + +ArdourGauge::Status +DiskSpaceIndicator::indicator () const +{ + if (_sec > 3600.f) { + return ArdourGauge::Level_OK; + } else if (_sec > 1800.f) { + return ArdourGauge::Level_WARN; + } + return ArdourGauge::Level_CRIT; +} + +std::string +DiskSpaceIndicator::tooltip_text () +{ + if (_sec < 0) { + return _("Unkown"); + } + + int sec = floor (_sec); + char buf[64]; + int hrs = sec / 3600; + int mins = (sec / 60) % 60; + int secs = sec % 60; + + snprintf (buf, sizeof(buf), _("%02dh:%02dm:%02ds"), hrs, mins, secs); + return _("Available capture disk-space: ") + std::string (buf); +} |