OSCAR-code/overview.cpp

273 lines
9.3 KiB
C++
Raw Normal View History

2011-06-28 15:25:20 +00:00
/*
2011-06-26 08:30:44 +00:00
Overview GUI Implementation
Copyright (c)2011 Mark Watkins <jedimark@users.sourceforge.net>
License: GPL
2011-06-28 15:25:20 +00:00
*/
2011-06-26 08:30:44 +00:00
#include <QCalendarWidget>
#include <QTextCharFormat>
2011-07-19 14:04:54 +00:00
#include <QSystemLocale>
#include <QDebug>
2011-06-26 08:30:44 +00:00
#include "overview.h"
#include "ui_overview.h"
#include "Graphs/graphdata_custom.h"
#include "Graphs/gXAxis.h"
#include "Graphs/gBarChart.h"
#include "Graphs/gLineChart.h"
#include "Graphs/gYAxis.h"
#include "Graphs/gFooBar.h"
2011-07-12 07:10:34 +00:00
#include "Graphs/gSessionTime.h"
2011-06-26 08:30:44 +00:00
2011-07-27 09:21:53 +00:00
/*Overview::Overview(QWidget *parent,QGLWidget * shared) :
2011-06-26 08:30:44 +00:00
QWidget(parent),
ui(new Ui::Overview)
{
ui->setupUi(this);
profile=Profiles::Get(pref["Profile"].toString());
AddData(ahidata=new HistoryData(profile));
AddData(pressure=new HistoryCodeData(profile,CPAP_PressureAverage));
AddData(pressure_min=new HistoryCodeData(profile,CPAP_PressureMin));
AddData(pressure_max=new HistoryCodeData(profile,CPAP_PressureMax));
AddData(pressure_eap=new HistoryCodeData(profile,BIPAP_EAPAverage));
AddData(pressure_iap=new HistoryCodeData(profile,BIPAP_IAPAverage));
AddData(leak=new HistoryCodeData(profile,CPAP_LeakMedian));
AddData(usage=new UsageHistoryData(profile,UHD_Hours));
AddData(waketime=new UsageHistoryData(profile,UHD_Waketime));
AddData(bedtime=new UsageHistoryData(profile,UHD_Bedtime));
2011-07-17 07:03:26 +00:00
AddData(session_times=new SessionTimes(profile));
// pressure->ForceMinY(3);
// pressure->ForceMaxY(12);
2011-06-26 08:30:44 +00:00
gSplitter=new QSplitter(Qt::Vertical,ui->SummaryGraphWindow);
gSplitter->setStyleSheet("QSplitter::handle { background-color: 'dark grey'; }");
gSplitter->setChildrenCollapsible(true);
gSplitter->setHandleWidth(3);
ui->graphLayout->addWidget(gSplitter);
AddGraph(AHI=new gGraphWindow(ui->SummaryGraphWindow,tr("AHI"),shared)); //(QGLContext *)NULL));
2011-06-26 08:30:44 +00:00
AHI->SetTopMargin(10);
AHI->SetBottomMargin(AHI->GetBottomMargin()+gXAxis::Margin+25);
//AHI->AddLayer(new gFooBar(7));
2011-06-26 08:30:44 +00:00
AHI->AddLayer(new gYAxis());
AHI->AddLayer(new gBarChart(ahidata,QColor("red")));
AHI->setMinimumHeight(170);
AddGraph(PRESSURE=new gGraphWindow(ui->SummaryGraphWindow,tr("Pressure"),AHI));
2011-06-26 08:30:44 +00:00
//PRESSURE->SetMargins(10,15,65,80);
PRESSURE->AddLayer(new gYAxis());
PRESSURE->AddLayer(new gXAxis());
//PRESSURE->AddLayer(new gFooBar(7));
2011-06-26 08:30:44 +00:00
PRESSURE->AddLayer(prmax=new gLineChart(pressure_max,QColor("blue"),6192,false,true,true));
PRESSURE->AddLayer(prmin=new gLineChart(pressure_min,QColor("red"),6192,false,true,true));
PRESSURE->AddLayer(eap=new gLineChart(pressure_eap,QColor("blue"),6192,false,true,true));
PRESSURE->AddLayer(iap=new gLineChart(pressure_iap,QColor("red"),6192,false,true,true));
PRESSURE->AddLayer(pr=new gLineChart(pressure,QColor("dark green"),6192,false,true,true));
PRESSURE->SetBottomMargin(PRESSURE->GetBottomMargin()+25);
PRESSURE->setMinimumHeight(170);
AddGraph(LEAK=new gGraphWindow(ui->SummaryGraphWindow,tr("Leak"),AHI));
2011-06-26 08:30:44 +00:00
LEAK->AddLayer(new gXAxis());
LEAK->AddLayer(new gYAxis());
//LEAK->AddLayer(new gFooBar(7));
2011-06-26 08:30:44 +00:00
LEAK->AddLayer(new gLineChart(leak,QColor("purple"),6192,false,false,true));
LEAK->SetBottomMargin(LEAK->GetBottomMargin()+25);
LEAK->setMinimumHeight(170);
AddGraph(USAGE=new gGraphWindow(ui->SummaryGraphWindow,tr("Usage (Hours)"),AHI));
//USAGE->AddLayer(new gFooBar(7));
2011-06-26 08:30:44 +00:00
USAGE->AddLayer(new gYAxis());
USAGE->AddLayer(new gBarChart(usage,QColor("green")));
2011-07-17 07:03:26 +00:00
USAGE->SetBottomMargin(USAGE->GetBottomMargin()+gXAxis::Margin+25);
2011-06-26 08:30:44 +00:00
//USAGE->AddLayer(new gXAxis());
//USAGE->AddLayer(new gLineChart(usage,QColor("green")));
USAGE->setMinimumHeight(170);
2011-07-12 07:10:34 +00:00
AddGraph(SESSTIMES=new gGraphWindow(ui->SummaryGraphWindow,tr("Session Times"),AHI));
//SESSTIMES->SetMargins(10,15,65,80);
//SESSTIMES->AddLayer(new gFooBar(7));
2011-07-12 07:29:02 +00:00
SESSTIMES->AddLayer(new gTimeYAxis());
2011-07-12 07:10:34 +00:00
SESSTIMES->AddLayer(new gSessionTime(session_times,QColor("green")));
SESSTIMES->SetBottomMargin(SESSTIMES->GetBottomMargin()+gXAxis::Margin+25);
//SESSTIMES->AddLayer(new gXAxis());
SESSTIMES->setMinimumHeight(270);
2011-07-17 07:03:26 +00:00
NoData=new QLabel(tr("No data"),gSplitter);
NoData->setAlignment(Qt::AlignCenter);
QFont font("FreeSans",20); //NoData->font();
//font.setBold(true);
NoData->setFont(font);
NoData->hide();
gGraphWindow * graphs[]={AHI,PRESSURE,LEAK,USAGE,SESSTIMES};
int ss=sizeof(graphs)/sizeof(gGraphWindow *);
for (int i=0;i<ss;i++) {
AddGraph(graphs[i]);
graphs[i]->AddLayer(new gFooBar(7));
for (int j=0;j<ss;j++) {
if (graphs[i]!=graphs[j])
graphs[i]->LinkZoom(graphs[j]);
}
gSplitter->addWidget(graphs[i]);
graphs[i]->SetSplitter(gSplitter);
}
2011-07-12 07:10:34 +00:00
2011-06-26 08:30:44 +00:00
dummyday=new Day(NULL);
ReloadGraphs();
}
Overview::~Overview()
{
delete dummyday;
delete ui;
}
void Overview::RedrawGraphs()
{
for (QList<gGraphWindow *>::iterator g=Graphs.begin();g!=Graphs.end();g++) {
(*g)->updateGL();
}
//SESSTIMES->updateGL();
}
2011-06-26 08:30:44 +00:00
void Overview::ReloadGraphs()
{
for (QList<HistoryData *>::iterator h=Data.begin();h!=Data.end();h++) {
2011-07-17 07:03:26 +00:00
if (HistoryData *hd=dynamic_cast<HistoryData *>(*h)){
hd->SetProfile(profile);
hd->ResetDateRange();
hd->Reload(NULL);
}
2011-06-26 08:30:44 +00:00
}
2011-07-17 07:03:26 +00:00
// session_times->SetProfile(profile);
// session_times->ResetDateRange();
// session_times->Reload(NULL);
2011-07-01 10:10:44 +00:00
on_rbLastWeek_clicked();
2011-06-26 08:30:44 +00:00
}
void Overview::UpdateHTML()
2011-06-26 08:30:44 +00:00
{
2011-07-16 06:14:20 +00:00
QString html="<html><body><div align=center>";
html+="<table width='100%' cellpadding=2 cellspacing=0 border=0>";
html+="<tr align=center><td colspan=4><b><i>Statistics</i></b></td></tr>";
html+="<tr><td><b>Details</b></td><td><b>Min</b></td><td><b>Avg</b></td><td><b>Max</b></td></tr>";
html+=QString("<tr><td>AHI</td><td>%1</td><td>%2</td><td>%3</td></tr>\n")
.arg(ahidata->CalcMinY(),2,'f',2,'0')
.arg(ahidata->CalcAverage(),2,'f',2,'0')
.arg(ahidata->CalcMaxY(),2,'f',2,'0');
html+=QString("<tr><td>Leak</td><td>%1</td><td>%2</td><td>%3</td></tr>")
.arg(leak->CalcMinY(),2,'f',2,'0')
.arg(leak->CalcAverage(),2,'f',2,'0')
.arg(leak->CalcMaxY(),2,'f',2,'0');
html+=QString("<tr><td>Pressure</td><td>%1</td><td>%2</td><td>%3</td></tr>")
.arg(pressure->CalcMinY(),2,'f',2,'0')
.arg(pressure->CalcAverage(),2,'f',2,'0')
.arg(pressure->CalcMaxY(),2,'f',2,'0');
html+=QString("<tr><td>Usage</td><td>%1</td><td>%2</td><td>%3</td></tr>")
.arg(usage->CalcMinY(),2,'f',2,'0')
.arg(usage->CalcAverage(),2,'f',2,'0')
.arg(usage->CalcMaxY(),2,'f',2,'0');
html+="</table>"
"</div></body></html>";
ui->webView->setHtml(html);
}
void Overview::UpdateGraphs()
{
QDate first=ui->drStart->date();
QDate last=ui->drEnd->date();
for (QList<HistoryData *>::iterator h=Data.begin();h!=Data.end();h++) {
//(*h)->Update(dummyday);
(*h)->SetDateRange(first,last);
}
session_times->SetDateRange(first,last);
RedrawGraphs();
UpdateHTML();
2011-06-26 08:30:44 +00:00
}
void UpdateCal(QCalendarWidget *cal)
{
QDate d1=cal->minimumDate();
d1.setYMD(d1.year(),d1.month(),1);
QTextCharFormat fmt=cal->weekdayTextFormat(Qt::Monday);
2011-06-27 10:23:24 +00:00
fmt.setForeground(QBrush(Qt::gray));
2011-06-26 08:30:44 +00:00
for (QDate d=d1;d < cal->minimumDate();d=d.addDays(1)) {
cal->setDateTextFormat(d,fmt);
}
d1=cal->maximumDate();
d1.setYMD(d1.year(),d1.month(),d1.daysInMonth());
for (QDate d=cal->maximumDate().addDays(1);d <= d1;d=d.addDays(1)) {
cal->setDateTextFormat(d,fmt);
}
}
void Overview::on_drStart_dateChanged(const QDate &date)
{
ui->drEnd->setMinimumDate(date);
QCalendarWidget *cal=ui->drEnd->calendarWidget();
cal->setDateRange(date,profile->LastDay());
UpdateCal(cal);
UpdateGraphs();
}
void Overview::on_drEnd_dateChanged(const QDate &date)
{
ui->drStart->setMaximumDate(date);
QCalendarWidget *cal=ui->drStart->calendarWidget();
cal->setDateRange(profile->FirstDay(),date);
UpdateCal(cal);
UpdateGraphs();
}
void Overview::on_rbDateRange_toggled(bool checked)
{
ui->drStart->setEnabled(checked);
ui->drEnd->setEnabled(checked);
ui->drStartLabel->setEnabled(checked);
ui->drEndLabel->setEnabled(checked);
}
2011-07-01 10:10:44 +00:00
void Overview::on_rbLastWeek_clicked()
{
ui->drStart->setDateRange(profile->FirstDay(),profile->LastDay());
ui->drEnd->setDateRange(profile->FirstDay(),profile->LastDay());
QDate d=profile->LastDay();
ui->drEnd->setDate(d);
d=d.addDays(-7);
if (d<profile->FirstDay()) d=profile->FirstDay();
ui->drStart->setDate(d);
UpdateGraphs();
}
void Overview::on_rbLastMonth_clicked()
{
ui->drStart->setDateRange(profile->FirstDay(),profile->LastDay());
ui->drEnd->setDateRange(profile->FirstDay(),profile->LastDay());
QDate d=profile->LastDay();
ui->drEnd->setDate(d);
d=d.addDays(-30);
if (d<profile->FirstDay()) d=profile->FirstDay();
ui->drStart->setDate(d);
UpdateGraphs();
}
void Overview::on_rbEverything_clicked()
{
ui->drStart->setDateRange(profile->FirstDay(),profile->LastDay());
ui->drEnd->setDateRange(profile->FirstDay(),profile->LastDay());
ui->drEnd->setDate(profile->LastDay());
ui->drStart->setDate(profile->FirstDay());
UpdateGraphs();
}
void Overview::on_rbDateRange_clicked()
{
UpdateGraphs();
}
2011-07-27 09:21:53 +00:00
*/