Add Toolbar disk-space widget.

This commit is contained in:
Robin Gareus
2018-01-14 18:41:21 +01:00
parent b0c5005cec
commit d03352cfac
9 changed files with 174 additions and 4 deletions

View File

@@ -1771,6 +1771,7 @@ void
ARDOUR_UI::update_disk_space()
{
if (_session == 0) {
disk_space_indicator.set_available_disk_sec (-1);
return;
}
@@ -1780,14 +1781,17 @@ ARDOUR_UI::update_disk_space()
if (fr == 0) {
/* skip update - no SR available */
disk_space_indicator.set_available_disk_sec (-1);
return;
}
if (!opt_samples) {
/* Available space is unknown */
snprintf (buf, sizeof (buf), "%s", _("Disk: <span foreground=\"green\">Unknown</span>"));
disk_space_indicator.set_available_disk_sec (-1);
} else if (opt_samples.get_value_or (0) == max_samplecnt) {
snprintf (buf, sizeof (buf), "%s", _("Disk: <span foreground=\"green\">24hrs+</span>"));
disk_space_indicator.set_available_disk_sec (max_samplecnt);
} else {
rec_enabled_streams = 0;
_session->foreach_route (this, &ARDOUR_UI::count_recenabled_streams, false);
@@ -1802,6 +1806,8 @@ ARDOUR_UI::update_disk_space()
int mins;
int secs;
disk_space_indicator.set_available_disk_sec (samples / (float)fr);
hrs = samples / (fr * 3600);
if (hrs > 24) {

View File

@@ -75,6 +75,7 @@
#include "ardour_dialog.h"
#include "ardour_window.h"
#include "dsp_load_indicator.h"
#include "disk_space_indicator.h"
#include "editing.h"
#include "enums.h"
#include "mini_timeline.h"
@@ -484,10 +485,11 @@ private:
void toggle_time_master ();
void toggle_video_sync ();
ShuttleControl shuttle_box;
MiniTimeline mini_timeline;
TimeInfoBox* time_info_box;
DspLoadIndicator dsp_load_indicator;
ShuttleControl shuttle_box;
MiniTimeline mini_timeline;
TimeInfoBox* time_info_box;
DspLoadIndicator dsp_load_indicator;
DiskSpaceIndicator disk_space_indicator;
ArdourWidgets::ArdourButton auto_return_button;
ArdourWidgets::ArdourButton follow_edits_button;

View File

@@ -198,6 +198,14 @@ ARDOUR_UI::repack_transport_hbox ()
dsp_load_indicator.show();
}
if (disk_space_indicator.get_parent()) {
transport_hbox.remove (disk_space_indicator);
}
if (UIConfiguration::instance().get_show_disk_space_info ()) {
transport_hbox.pack_start (disk_space_indicator, false, false);
disk_space_indicator.show();
}
if (editor_meter) {
if (meter_box.get_parent()) {
transport_hbox.remove (meter_box);

View File

@@ -472,6 +472,8 @@ ARDOUR_UI::parameter_changed (std::string p)
repack_transport_hbox ();
} else if (p == "show-dsp-load-info") {
repack_transport_hbox ();
} else if (p == "show-disk-space-info") {
repack_transport_hbox ();
} else if (p == "show-toolbar-recpunch") {
repack_transport_hbox ();
} else if (p == "show-toolbar-monitoring") {

View File

@@ -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);
}

View File

@@ -0,0 +1,43 @@
/*
* 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.
*/
#ifndef __gtkardour_disk_space_indicator_h__
#define __gtkardour_disk_space_indicator_h__
#include <pangomm.h>
#include "ardour_gauge.h"
class DiskSpaceIndicator : public ArdourGauge
{
public:
DiskSpaceIndicator ();
void set_available_disk_sec (float);
protected:
bool alert () const;
ArdourGauge::Status indicator () const;
float level () const;
std::string tooltip_text ();
private:
float _sec;
};
#endif

View File

@@ -3804,6 +3804,14 @@ RCOptionEditor::RCOptionEditor ()
sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_show_dsp_load_info)
));
add_option (_("Appearance/Toolbar"),
new BoolOption (
"show-disk-space-info",
_("Display Disk Space Information"),
sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_show_disk_space_info),
sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_show_disk_space_info)
));
add_option (_("Appearance/Toolbar"),
new BoolOption (
"show-mini-timeline",

View File

@@ -83,6 +83,7 @@ UI_CONFIG_VARIABLE (bool, show_toolbar_monitoring, "show-toolbar-monitoring", fa
UI_CONFIG_VARIABLE (bool, show_toolbar_selclock, "show-toolbar-selclock", false)
UI_CONFIG_VARIABLE (bool, show_mini_timeline, "show-mini-timeline", true)
UI_CONFIG_VARIABLE (bool, show_dsp_load_info, "show-dsp-load-info", true)
UI_CONFIG_VARIABLE (bool, show_disk_space_info, "show-disk-space-info", true)
UI_CONFIG_VARIABLE (bool, show_secondary_clock, "show-secondary-clock", true)
UI_CONFIG_VARIABLE (double, waveform_clip_level, "waveform-clip-level", -0.0933967) /* units of dB */
UI_CONFIG_VARIABLE (bool, hiding_groups_deactivates_groups, "hiding-groups-deactivates-groups", true)

View File

@@ -65,6 +65,7 @@ gtk2_ardour_sources = [
'cursor_context.cc',
'curvetest.cc',
'debug.cc',
'disk_space_indicator.cc',
'duplicate_routes_dialog.cc',
'dsp_load_indicator.cc',
'edit_note_dialog.cc',