2018-02-16 10:03:57 -05:00
|
|
|
/*
|
|
|
|
* 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"
|
2018-02-16 10:35:44 -05:00
|
|
|
#include "disk_io_gauge.h"
|
2018-02-16 10:03:57 -05:00
|
|
|
|
|
|
|
#include "ardour/audioengine.h"
|
|
|
|
|
|
|
|
#include "pbd/i18n.h"
|
|
|
|
|
|
|
|
#define PADDING 3
|
|
|
|
|
2018-02-16 10:35:44 -05:00
|
|
|
DiskIoGauge::DiskIoGauge ()
|
2018-02-16 17:50:49 -05:00
|
|
|
: ArdourGauge (" ")
|
2018-02-16 16:09:28 -05:00
|
|
|
, _disk_play (0)
|
|
|
|
, _disk_capture (0)
|
2018-02-16 10:03:57 -05:00
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
void
|
2018-02-16 16:09:28 -05:00
|
|
|
DiskIoGauge::set_disk_io (const double play, const double capture)
|
2018-02-16 10:03:57 -05:00
|
|
|
{
|
2018-02-16 16:09:28 -05:00
|
|
|
if (play == _disk_play && capture == _disk_capture) {
|
2018-02-16 10:03:57 -05:00
|
|
|
return;
|
|
|
|
}
|
2018-02-16 16:09:28 -05:00
|
|
|
_disk_play = 100.0-play;
|
|
|
|
_disk_capture = 100.0-capture;
|
2018-02-16 10:03:57 -05:00
|
|
|
|
|
|
|
char buf[64];
|
2018-02-16 16:09:28 -05:00
|
|
|
if ( _disk_play > 1.0 && _disk_play < 10.0 && _disk_capture < 2.0 ) {
|
|
|
|
snprintf (buf, sizeof (buf), "Disk: %.0f%% / 0%%", _disk_play);
|
|
|
|
} else if ( _disk_play > 1.0 && _disk_capture < 2.0 ) {
|
|
|
|
snprintf (buf, sizeof (buf), "Disk: %.0f%% / 0%%", _disk_play);
|
|
|
|
} else if ( _disk_play > 1.0 && _disk_capture > 1.0 ) {
|
|
|
|
snprintf (buf, sizeof (buf), "Disk: %.0f%% / %.0f%%", _disk_play, _disk_capture);
|
|
|
|
} else {
|
|
|
|
snprintf (buf, sizeof (buf), " ");
|
|
|
|
}
|
2018-02-16 10:03:57 -05:00
|
|
|
update (std::string (buf));
|
|
|
|
}
|
|
|
|
|
|
|
|
float
|
2018-02-16 10:35:44 -05:00
|
|
|
DiskIoGauge::level () const {
|
2018-02-16 16:09:28 -05:00
|
|
|
return min ( _disk_play / 100.f, _disk_capture / 100.f);
|
2018-02-16 10:03:57 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
2018-02-16 10:35:44 -05:00
|
|
|
DiskIoGauge::alert () const
|
2018-02-16 10:03:57 -05:00
|
|
|
{
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
ArdourGauge::Status
|
2018-02-16 10:35:44 -05:00
|
|
|
DiskIoGauge::indicator () const
|
2018-02-16 10:03:57 -05:00
|
|
|
{
|
2018-02-16 16:09:28 -05:00
|
|
|
float lvl = level();
|
|
|
|
|
|
|
|
if (lvl > 0.6) {
|
2018-02-16 10:03:57 -05:00
|
|
|
return ArdourGauge::Level_CRIT;
|
2018-02-16 16:09:28 -05:00
|
|
|
} else if (lvl > 0.4) {
|
2018-02-16 10:03:57 -05:00
|
|
|
return ArdourGauge::Level_WARN;
|
|
|
|
} else {
|
|
|
|
return ArdourGauge::Level_OK;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
std::string
|
2018-02-16 10:35:44 -05:00
|
|
|
DiskIoGauge::tooltip_text ()
|
2018-02-16 10:03:57 -05:00
|
|
|
{
|
2018-02-16 16:09:28 -05:00
|
|
|
char buf[128];
|
2018-02-16 10:03:57 -05:00
|
|
|
|
2018-02-16 16:09:28 -05:00
|
|
|
snprintf (buf, sizeof (buf), "Disk Play/Record cache: %.0f%% / %.0f%%", _disk_play, _disk_capture);
|
2018-02-16 10:03:57 -05:00
|
|
|
|
|
|
|
return buf;
|
|
|
|
}
|