2011-06-28 15:25:20 +00:00
/*
2011-06-26 08:30:44 +00:00
Daily Panel
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 <QTextCharFormat>
2011-08-20 07:38:50 +00:00
# include <QPalette>
2011-06-26 08:30:44 +00:00
# include <QTextBlock>
# include <QColorDialog>
2011-07-28 11:09:53 +00:00
# include <QSpacerItem>
2011-06-26 08:30:44 +00:00
# include <QBuffer>
# include <QPixmap>
2011-07-27 09:21:53 +00:00
# include <QMessageBox>
2011-07-28 11:09:53 +00:00
# include <QResizeEvent>
2011-08-20 08:20:22 +00:00
# include <QScrollBar>
2011-12-01 06:06:13 +00:00
# include <QSpacerItem>
2011-12-02 13:48:05 +00:00
# include <cmath>
2011-12-01 15:40:32 +00:00
//#include <QPrinter>
//#include <QProgressBar>
2011-06-26 08:30:44 +00:00
2011-11-27 22:36:38 +00:00
# include "daily.h"
# include "ui_daily.h"
2011-11-15 21:22:08 +00:00
# include "common_gui.h"
2011-10-05 07:41:56 +00:00
# include "SleepLib/profiles.h"
2011-06-26 08:30:44 +00:00
# include "SleepLib/session.h"
# include "Graphs/graphdata_custom.h"
# include "Graphs/gLineOverlay.h"
# include "Graphs/gFlagsLine.h"
# include "Graphs/gFooBar.h"
# include "Graphs/gXAxis.h"
# include "Graphs/gYAxis.h"
2011-07-28 17:15:15 +00:00
# include "Graphs/gSegmentChart.h"
2011-08-30 08:46:24 +00:00
# include "Graphs/gStatsLine.h"
2011-06-26 08:30:44 +00:00
2011-12-01 15:40:32 +00:00
//extern QProgressBar *qprogress;
2011-08-02 10:28:29 +00:00
const int min_height = 150 ;
2011-12-02 13:48:05 +00:00
const float ounce_convert = 28.3495231 ;
2011-12-03 01:05:17 +00:00
const float pound_convert = ounce_convert * 16 ;
2011-07-22 13:46:17 +00:00
2011-10-05 07:41:56 +00:00
Daily : : Daily ( QWidget * parent , gGraphView * shared , MainWindow * mw )
: QWidget ( parent ) , mainwin ( mw ) , ui ( new Ui : : Daily )
2011-06-26 08:30:44 +00:00
{
ui - > setupUi ( this ) ;
2011-10-05 12:43:34 +00:00
// Remove Incomplete Extras Tab
2011-12-02 11:40:47 +00:00
//ui->tabWidget->removeTab(3);
2011-10-05 12:43:34 +00:00
2011-12-03 09:26:59 +00:00
ZombieMeterMoved = false ;
BookmarksChanged = false ;
2011-08-26 13:22:16 +00:00
QList < int > a ;
a . push_back ( 300 ) ;
a . push_back ( this - > width ( ) - 300 ) ;
2011-10-05 03:05:35 +00:00
ui - > splitter_2 - > setStretchFactor ( 1 , 1 ) ;
2011-08-26 13:22:16 +00:00
ui - > splitter_2 - > setSizes ( a ) ;
ui - > splitter_2 - > setStretchFactor ( 1 , 1 ) ;
2011-06-26 08:30:44 +00:00
2011-08-25 06:11:44 +00:00
layout = new QHBoxLayout ( ui - > graphMainArea ) ;
layout - > setSpacing ( 0 ) ;
layout - > setMargin ( 0 ) ;
layout - > setContentsMargins ( 0 , 0 , 0 , 0 ) ;
ui - > graphMainArea - > setLayout ( layout ) ;
//ui->graphMainArea->setLayout(layout);
ui - > graphMainArea - > setAutoFillBackground ( false ) ;
2011-08-30 17:22:54 +00:00
GraphView = new gGraphView ( ui - > graphMainArea , shared ) ;
2011-08-25 06:11:44 +00:00
GraphView - > setSizePolicy ( QSizePolicy : : Expanding , QSizePolicy : : Expanding ) ;
2011-12-08 14:47:10 +00:00
snapGV = new gGraphView ( ui - > graphMainArea ) ;
2011-09-21 14:10:10 +00:00
snapGV - > setMinimumSize ( 172 , 172 ) ;
snapGV - > hideSplitter ( ) ;
snapGV - > hide ( ) ;
2011-12-08 14:47:10 +00:00
2011-08-25 06:11:44 +00:00
scrollbar = new MyScrollBar ( ui - > graphMainArea ) ;
scrollbar - > setOrientation ( Qt : : Vertical ) ;
scrollbar - > setSizePolicy ( QSizePolicy : : Maximum , QSizePolicy : : Expanding ) ;
scrollbar - > setMaximumWidth ( 20 ) ;
2011-12-02 11:40:47 +00:00
ui - > bookmarkTable - > setColumnCount ( 2 ) ;
ui - > bookmarkTable - > setColumnWidth ( 0 , 70 ) ;
//ui->bookmarkTable->setEditTriggers(QAbstractItemView::SelectedClicked);
//ui->bookmarkTable->setColumnHidden(2,true);
//ui->bookmarkTable->setColumnHidden(3,true);
2011-08-25 06:11:44 +00:00
GraphView - > setScrollBar ( scrollbar ) ;
layout - > addWidget ( GraphView , 1 ) ;
layout - > addWidget ( scrollbar , 0 ) ;
2011-07-29 14:58:44 +00:00
2011-11-30 12:58:41 +00:00
int default_height = PROFILE [ " GraphHeight " ] . toInt ( ) ;
2011-12-05 08:32:46 +00:00
SF = new gGraph ( GraphView , " Event Flags " , " Event Flags " , default_height ) ;
FRW = new gGraph ( GraphView , schema : : channel [ CPAP_FlowRate ] . label ( ) , schema : : channel [ CPAP_FlowRate ] . description ( ) + " \n ( " + schema : : channel [ CPAP_FlowRate ] . units ( ) + " ) " , default_height ) ;
AHI = new gGraph ( GraphView , schema : : channel [ CPAP_AHI ] . label ( ) , schema : : channel [ CPAP_AHI ] . description ( ) + " \n ( " + schema : : channel [ CPAP_AHI ] . units ( ) + " ) " , default_height ) ;
MP = new gGraph ( GraphView , schema : : channel [ CPAP_MaskPressure ] . label ( ) , schema : : channel [ CPAP_MaskPressure ] . description ( ) + " \n ( " + schema : : channel [ CPAP_MaskPressure ] . units ( ) + " ) " , default_height ) ;
PRD = new gGraph ( GraphView , schema : : channel [ CPAP_Pressure ] . label ( ) , schema : : channel [ CPAP_Pressure ] . description ( ) + " \n ( " + schema : : channel [ CPAP_Pressure ] . units ( ) + " ) " , default_height ) ;
LEAK = new gGraph ( GraphView , schema : : channel [ CPAP_Leak ] . label ( ) , schema : : channel [ CPAP_Leak ] . description ( ) + " \n ( " + schema : : channel [ CPAP_Leak ] . units ( ) + " ) " , default_height ) ;
SNORE = new gGraph ( GraphView , schema : : channel [ CPAP_Snore ] . label ( ) , schema : : channel [ CPAP_Snore ] . description ( ) + " \n ( " + schema : : channel [ CPAP_Snore ] . units ( ) + " ) " , default_height ) ;
RR = new gGraph ( GraphView , schema : : channel [ CPAP_RespRate ] . label ( ) , schema : : channel [ CPAP_RespRate ] . description ( ) + " \n ( " + schema : : channel [ CPAP_RespRate ] . units ( ) + " ) " , default_height ) ;
TV = new gGraph ( GraphView , schema : : channel [ CPAP_TidalVolume ] . label ( ) , schema : : channel [ CPAP_TidalVolume ] . description ( ) + " \n ( " + schema : : channel [ CPAP_TidalVolume ] . units ( ) + " ) " , default_height ) ;
MV = new gGraph ( GraphView , schema : : channel [ CPAP_MinuteVent ] . label ( ) , schema : : channel [ CPAP_MinuteVent ] . description ( ) + " \n ( " + schema : : channel [ CPAP_MinuteVent ] . units ( ) + " ) " , default_height ) ;
FLG = new gGraph ( GraphView , schema : : channel [ CPAP_FLG ] . label ( ) , schema : : channel [ CPAP_FLG ] . description ( ) + " \n ( " + schema : : channel [ CPAP_FLG ] . units ( ) + " ) " , default_height ) ;
PTB = new gGraph ( GraphView , schema : : channel [ CPAP_PTB ] . label ( ) , schema : : channel [ CPAP_PTB ] . description ( ) + " \n ( " + schema : : channel [ CPAP_PTB ] . units ( ) + " ) " , default_height ) ;
RE = new gGraph ( GraphView , schema : : channel [ CPAP_RespEvent ] . label ( ) , schema : : channel [ CPAP_RespEvent ] . description ( ) + " \n ( " + schema : : channel [ CPAP_RespEvent ] . units ( ) + " ) " , default_height ) ;
IE = new gGraph ( GraphView , schema : : channel [ CPAP_IE ] . label ( ) , schema : : channel [ CPAP_IE ] . description ( ) + " \n ( " + schema : : channel [ CPAP_IE ] . units ( ) + " ) " , default_height ) ;
TE = new gGraph ( GraphView , schema : : channel [ CPAP_Te ] . label ( ) , schema : : channel [ CPAP_Te ] . description ( ) + " \n ( " + schema : : channel [ CPAP_Te ] . units ( ) + " ) " , default_height ) ;
TI = new gGraph ( GraphView , schema : : channel [ CPAP_Ti ] . label ( ) , schema : : channel [ CPAP_Ti ] . description ( ) + " \n ( " + schema : : channel [ CPAP_Ti ] . units ( ) + " ) " , default_height ) ;
TgMV = new gGraph ( GraphView , schema : : channel [ CPAP_TgMV ] . label ( ) , schema : : channel [ CPAP_TgMV ] . description ( ) + " \n ( " + schema : : channel [ CPAP_TgMV ] . units ( ) + " ) " , default_height ) ;
//INTPULSE=new gGraph(GraphView,"R-Pulse",schema::channel[CPAP_Te].units(),default_height);
//INTSPO2=new gGraph(GraphView,"R-SPO2",default_height);
2011-11-30 06:01:38 +00:00
int oxigrp = PROFILE . ExistsAndTrue ( " SyncOximetry " ) ? 0 : 1 ;
2011-12-05 08:32:46 +00:00
PULSE = new gGraph ( GraphView , schema : : channel [ OXI_Pulse ] . label ( ) , schema : : channel [ OXI_Pulse ] . description ( ) + " \n ( " + schema : : channel [ OXI_Pulse ] . units ( ) + " ) " , default_height , oxigrp ) ;
SPO2 = new gGraph ( GraphView , schema : : channel [ OXI_SPO2 ] . label ( ) , schema : : channel [ OXI_SPO2 ] . description ( ) + " \n ( " + schema : : channel [ OXI_SPO2 ] . units ( ) + " ) " , default_height , oxigrp ) ;
PLETHY = new gGraph ( GraphView , schema : : channel [ OXI_Plethy ] . label ( ) , schema : : channel [ OXI_Plethy ] . description ( ) + " \n ( " + schema : : channel [ OXI_Plethy ] . units ( ) + " ) " , default_height , oxigrp ) ;
2011-08-26 03:26:53 +00:00
2011-09-21 14:10:10 +00:00
// Event Pie Chart (for snapshot purposes)
// TODO: Convert snapGV to generic for snapshotting multiple graphs (like reports does)
2011-12-05 08:32:46 +00:00
GAHI = new gGraph ( snapGV , " Breakdown " , " events " , 172 ) ;
2011-09-21 14:10:10 +00:00
gSegmentChart * evseg = new gSegmentChart ( GST_Pie ) ;
evseg - > AddSlice ( CPAP_Hypopnea , QColor ( 0x40 , 0x40 , 0xff , 0xff ) , " H " ) ;
evseg - > AddSlice ( CPAP_Apnea , QColor ( 0x20 , 0x80 , 0x20 , 0xff ) , " A " ) ;
evseg - > AddSlice ( CPAP_Obstructive , QColor ( 0x40 , 0xaf , 0xbf , 0xff ) , " OA " ) ;
evseg - > AddSlice ( CPAP_ClearAirway , QColor ( 0xb2 , 0x54 , 0xcd , 0xff ) , " CA " ) ;
evseg - > AddSlice ( CPAP_RERA , QColor ( 0xff , 0xff , 0x80 , 0xff ) , " RE " ) ;
evseg - > AddSlice ( CPAP_FlowLimit , QColor ( 0x40 , 0x40 , 0x40 , 0xff ) , " FL " ) ;
GAHI - > AddLayer ( AddCPAP ( evseg ) ) ;
GAHI - > setMargins ( 0 , 0 , 0 , 0 ) ;
//SF->AddLayer(AddCPAP(evseg),LayerRight,100);
2011-08-25 06:11:44 +00:00
gFlagsGroup * fg = new gFlagsGroup ( ) ;
2011-11-28 04:05:09 +00:00
SF - > AddLayer ( AddCPAP ( fg ) ) ;
2011-12-05 10:50:58 +00:00
fg - > AddLayer ( ( new gFlagsLine ( CPAP_CSR , QColor ( " light green " ) , " PB " , false , FT_Span ) ) ) ;
2011-11-24 12:47:25 +00:00
fg - > AddLayer ( ( new gFlagsLine ( CPAP_ClearAirway , QColor ( " purple " ) , " CA " , false ) ) ) ;
2011-08-25 06:11:44 +00:00
fg - > AddLayer ( ( new gFlagsLine ( CPAP_Obstructive , QColor ( " #40c0ff " ) , " OA " , true ) ) ) ;
fg - > AddLayer ( ( new gFlagsLine ( CPAP_Apnea , QColor ( " dark green " ) , " A " ) ) ) ;
fg - > AddLayer ( ( new gFlagsLine ( CPAP_Hypopnea , QColor ( " blue " ) , " H " , true ) ) ) ;
2011-11-24 12:47:25 +00:00
fg - > AddLayer ( ( new gFlagsLine ( CPAP_ExP , QColor ( " dark cyan " ) , " E " , false ) ) ) ;
fg - > AddLayer ( ( new gFlagsLine ( CPAP_LeakFlag , QColor ( " dark blue " ) , " L " , false ) ) ) ;
fg - > AddLayer ( ( new gFlagsLine ( CPAP_NRI , QColor ( " dark magenta " ) , " NRI " , false ) ) ) ;
2011-08-25 06:11:44 +00:00
fg - > AddLayer ( ( new gFlagsLine ( CPAP_FlowLimit , QColor ( " black " ) , " FL " ) ) ) ;
fg - > AddLayer ( ( new gFlagsLine ( CPAP_RERA , QColor ( " gold " ) , " RE " ) ) ) ;
fg - > AddLayer ( ( new gFlagsLine ( CPAP_VSnore , QColor ( " red " ) , " VS " ) ) ) ;
2011-12-10 15:24:45 +00:00
//fg->AddLayer((new gFlagsLine(PRS1_0B,QColor("dark green"),"U0B")));
//fg->AddLayer((new gFlagsLine(CPAP_VSnore2,QColor("red"),"VS2")));
2011-08-25 08:02:04 +00:00
SF - > setBlockZoom ( true ) ;
2011-08-25 09:00:19 +00:00
SF - > AddLayer ( new gShadowArea ( ) ) ;
2011-08-25 06:11:44 +00:00
SF - > AddLayer ( new gYSpacer ( ) , LayerLeft , gYAxis : : Margin ) ;
2011-08-27 05:06:08 +00:00
//SF->AddLayer(new gFooBar(),LayerBottom,0,1);
2011-08-26 08:18:14 +00:00
SF - > AddLayer ( new gXAxis ( Qt : : black , false ) , LayerBottom , 0 , gXAxis : : Margin ) ;
2011-08-25 06:11:44 +00:00
gLineChart * l ;
l = new gLineChart ( CPAP_FlowRate , Qt : : black , false , false ) ;
2011-11-14 09:58:50 +00:00
gLineOverlaySummary * los = new gLineOverlaySummary ( " Selection AHI " , 5 , - 3 ) ;
2011-08-25 06:11:44 +00:00
AddCPAP ( l ) ;
2011-08-25 10:38:42 +00:00
FRW - > AddLayer ( new gXGrid ( ) ) ;
2011-08-26 08:23:54 +00:00
FRW - > AddLayer ( AddCPAP ( new gLineOverlayBar ( CPAP_CSR , QColor ( " light green " ) , " CSR " , FT_Span ) ) ) ;
2011-08-25 06:11:44 +00:00
FRW - > AddLayer ( l ) ;
FRW - > AddLayer ( new gYAxis ( ) , LayerLeft , gYAxis : : Margin ) ;
FRW - > AddLayer ( new gXAxis ( ) , LayerBottom , 0 , 20 ) ;
2011-11-12 13:58:58 +00:00
FRW - > AddLayer ( AddCPAP ( los - > add ( new gLineOverlayBar ( CPAP_Hypopnea , QColor ( " blue " ) , " H " ) ) ) ) ;
2011-08-25 06:11:44 +00:00
FRW - > AddLayer ( AddCPAP ( new gLineOverlayBar ( CPAP_PressurePulse , QColor ( " red " ) , " PR " , FT_Dot ) ) ) ;
//FRW->AddLayer(AddCPAP(new gLineOverlayBar(CPAP_Pressure,QColor("white"),"P",FT_Dot)));
2011-09-17 12:39:00 +00:00
FRW - > AddLayer ( AddCPAP ( new gLineOverlayBar ( PRS1_0B , QColor ( " blue " ) , " 0B " , FT_Dot ) ) ) ;
FRW - > AddLayer ( AddCPAP ( new gLineOverlayBar ( PRS1_10 , QColor ( " orange " ) , " 10 " , FT_Dot ) ) ) ;
FRW - > AddLayer ( AddCPAP ( new gLineOverlayBar ( PRS1_0E , QColor ( " dark red " ) , " 0E " , FT_Dot ) ) ) ;
2011-08-25 06:11:44 +00:00
FRW - > AddLayer ( AddCPAP ( new gLineOverlayBar ( CPAP_RERA , QColor ( " gold " ) , " RE " ) ) ) ;
2011-11-12 13:58:58 +00:00
FRW - > AddLayer ( AddCPAP ( los - > add ( new gLineOverlayBar ( CPAP_Apnea , QColor ( " dark green " ) , " A " ) ) ) ) ;
2011-08-25 06:11:44 +00:00
FRW - > AddLayer ( AddCPAP ( new gLineOverlayBar ( CPAP_VSnore , QColor ( " red " ) , " VS " ) ) ) ;
FRW - > AddLayer ( AddCPAP ( new gLineOverlayBar ( CPAP_FlowLimit , QColor ( " black " ) , " FL " ) ) ) ;
2011-11-12 13:58:58 +00:00
FRW - > AddLayer ( AddCPAP ( los - > add ( new gLineOverlayBar ( CPAP_Obstructive , QColor ( " #40c0ff " ) , " OA " ) ) ) ) ;
FRW - > AddLayer ( AddCPAP ( los - > add ( new gLineOverlayBar ( CPAP_ClearAirway , QColor ( " purple " ) , " CA " ) ) ) ) ;
2011-11-28 13:16:50 +00:00
FRW - > AddLayer ( AddOXI ( new gLineOverlayBar ( OXI_SPO2Drop , QColor ( " red " ) , " O2 " ) ) ) ;
2011-12-02 05:54:25 +00:00
FRW - > AddLayer ( AddOXI ( new gLineOverlayBar ( OXI_PulseChange , QColor ( " blue " ) , " PC " , FT_Dot ) ) ) ;
2011-11-28 13:16:50 +00:00
2011-11-12 13:58:58 +00:00
FRW - > AddLayer ( AddCPAP ( los ) ) ;
2011-08-25 06:11:44 +00:00
2011-12-05 08:32:46 +00:00
gGraph * graphs [ ] = { PRD , LEAK , AHI , SNORE , PTB , MP , RR , MV , TV , FLG , IE , TI , TE , TgMV , SPO2 , PLETHY , PULSE } ;
2011-08-29 11:42:40 +00:00
int ng = sizeof ( graphs ) / sizeof ( gGraph * ) ;
for ( int i = 0 ; i < ng ; i + + ) {
graphs [ i ] - > AddLayer ( new gXGrid ( ) ) ;
}
2011-08-31 05:24:48 +00:00
/*PRD->AddLayer(AddCPAP(new gStatsLine(CPAP_Pressure,"Pressure")),LayerBottom,0,20,1);
2011-08-30 08:46:24 +00:00
PRD - > AddLayer ( AddCPAP ( new gStatsLine ( CPAP_EPAP , " EPAP " ) ) , LayerBottom , 0 , 20 , 1 ) ;
PRD - > AddLayer ( AddCPAP ( new gStatsLine ( CPAP_IPAP , " IPAP " ) ) , LayerBottom , 0 , 20 , 1 ) ;
LEAK - > AddLayer ( AddCPAP ( new gStatsLine ( CPAP_Leak ) ) , LayerBottom , 0 , 20 , 1 ) ;
SNORE - > AddLayer ( AddCPAP ( new gStatsLine ( CPAP_Snore ) ) , LayerBottom , 0 , 20 , 1 ) ;
PTB - > AddLayer ( AddCPAP ( new gStatsLine ( CPAP_PatientTriggeredBreaths ) ) , LayerBottom , 0 , 20 , 1 ) ;
RR - > AddLayer ( AddCPAP ( new gStatsLine ( CPAP_RespiratoryRate ) ) , LayerBottom , 0 , 20 , 1 ) ;
MV - > AddLayer ( AddCPAP ( new gStatsLine ( CPAP_MinuteVentilation ) ) , LayerBottom , 0 , 20 , 1 ) ;
TV - > AddLayer ( AddCPAP ( new gStatsLine ( CPAP_TidalVolume ) ) , LayerBottom , 0 , 20 , 1 ) ;
FLG - > AddLayer ( AddCPAP ( new gStatsLine ( CPAP_FlowLimitGraph ) ) , LayerBottom , 0 , 20 , 1 ) ;
IE - > AddLayer ( AddCPAP ( new gStatsLine ( CPAP_IE ) ) , LayerBottom , 0 , 20 , 1 ) ;
TE - > AddLayer ( AddCPAP ( new gStatsLine ( CPAP_Te ) ) , LayerBottom , 0 , 20 , 1 ) ;
2011-08-31 05:24:48 +00:00
TI - > AddLayer ( AddCPAP ( new gStatsLine ( CPAP_Ti ) ) , LayerBottom , 0 , 20 , 1 ) ; */
2011-08-30 08:46:24 +00:00
2011-11-07 08:14:58 +00:00
2011-11-07 04:10:48 +00:00
bool square = PROFILE [ " SquareWavePlots " ] . toBool ( ) ;
PRD - > AddLayer ( AddCPAP ( new gLineChart ( CPAP_EPAP , Qt : : blue , square ) ) ) ;
2011-12-07 10:19:28 +00:00
PRD - > AddLayer ( AddCPAP ( new gLineChart ( CPAP_IPAPLo , Qt : : darkRed , square ) ) ) ;
PRD - > AddLayer ( AddCPAP ( new gLineChart ( CPAP_IPAP , Qt : : red , square ) ) ) ;
PRD - > AddLayer ( AddCPAP ( new gLineChart ( CPAP_IPAPHi , Qt : : darkRed , square ) ) ) ;
2011-11-30 12:32:16 +00:00
PRD - > AddLayer ( AddCPAP ( new gLineChart ( CPAP_Pressure , QColor ( " dark green " ) , square ) ) ) ;
2011-11-07 04:10:48 +00:00
2011-11-30 06:56:20 +00:00
AHI - > AddLayer ( AddCPAP ( new gLineChart ( CPAP_AHI , QColor ( " light green " ) , square ) ) ) ;
//AHI->AddLayer(AddCPAP(new AHIChart(QColor("#37a24b"))));
2011-12-07 10:19:28 +00:00
LEAK - > AddLayer ( AddCPAP ( new gLineChart ( CPAP_LeakTotal , Qt : : darkYellow , square ) ) ) ;
2011-11-30 12:32:16 +00:00
LEAK - > AddLayer ( AddCPAP ( new gLineChart ( CPAP_Leak , Qt : : darkMagenta , square ) ) ) ;
2011-11-21 10:20:11 +00:00
LEAK - > AddLayer ( AddCPAP ( new gLineChart ( CPAP_MaxLeak , Qt : : darkRed , square ) ) ) ;
2011-11-07 08:14:58 +00:00
SNORE - > AddLayer ( AddCPAP ( new gLineChart ( CPAP_Snore , Qt : : darkGray , true ) ) ) ;
2011-11-07 04:10:48 +00:00
PTB - > AddLayer ( AddCPAP ( new gLineChart ( CPAP_PTB , Qt : : gray , square ) ) ) ;
2011-11-07 05:25:29 +00:00
MP - > AddLayer ( AddCPAP ( new gLineChart ( CPAP_MaskPressure , Qt : : blue , false ) ) ) ;
2011-11-07 04:10:48 +00:00
RR - > AddLayer ( AddCPAP ( new gLineChart ( CPAP_RespRate , Qt : : darkMagenta , square ) ) ) ;
MV - > AddLayer ( AddCPAP ( new gLineChart ( CPAP_MinuteVent , Qt : : darkCyan , square ) ) ) ;
2011-12-01 03:40:23 +00:00
TV - > AddLayer ( AddCPAP ( new gLineChart ( CPAP_TidalVolume , Qt : : magenta , square ) ) ) ;
//TV->AddLayer(AddCPAP(new gLineChart("TidalVolume2",Qt::magenta,square)));
2011-11-07 08:14:58 +00:00
FLG - > AddLayer ( AddCPAP ( new gLineChart ( CPAP_FLG , Qt : : darkBlue , true ) ) ) ;
2011-08-29 11:42:40 +00:00
//RE->AddLayer(AddCPAP(new gLineChart(CPAP_RespiratoryEvent,Qt::magenta,true)));
2011-11-07 04:10:48 +00:00
IE - > AddLayer ( AddCPAP ( new gLineChart ( CPAP_IE , Qt : : darkRed , square ) ) ) ;
TE - > AddLayer ( AddCPAP ( new gLineChart ( CPAP_Te , Qt : : darkGreen , square ) ) ) ;
TI - > AddLayer ( AddCPAP ( new gLineChart ( CPAP_Ti , Qt : : darkBlue , square ) ) ) ;
2011-11-14 09:26:58 +00:00
TgMV - > AddLayer ( AddCPAP ( new gLineChart ( CPAP_TgMV , Qt : : darkCyan , square ) ) ) ;
2011-12-05 08:32:46 +00:00
//INTPULSE->AddLayer(AddCPAP(new gLineChart(OXI_Pulse,Qt::red,square)));
//INTSPO2->AddLayer(AddCPAP(new gLineChart(OXI_SPO2,Qt::blue,square)));
2011-11-28 22:49:43 +00:00
PULSE - > AddLayer ( AddOXI ( new gLineOverlayBar ( OXI_PulseChange , QColor ( " light gray " ) , " PD " , FT_Span ) ) ) ;
SPO2 - > AddLayer ( AddOXI ( new gLineOverlayBar ( OXI_SPO2Drop , QColor ( " light blue " ) , " O2 " , FT_Span ) ) ) ;
2011-11-07 04:10:48 +00:00
PULSE - > AddLayer ( AddOXI ( new gLineChart ( OXI_Pulse , Qt : : red , square ) ) ) ;
2011-11-28 22:49:43 +00:00
SPO2 - > AddLayer ( AddOXI ( new gLineChart ( OXI_SPO2 , Qt : : blue , true ) ) ) ;
2011-09-17 12:39:00 +00:00
PLETHY - > AddLayer ( AddOXI ( new gLineChart ( OXI_Plethy , Qt : : darkBlue , false ) ) ) ;
2011-08-26 03:26:53 +00:00
2011-11-28 01:39:28 +00:00
PTB - > setForceMaxY ( 100 ) ;
SPO2 - > setForceMaxY ( 100 ) ;
2011-11-27 16:07:28 +00:00
//FRW->setRecMinY(-120);
//FRW->setRecMaxY(0);
2011-11-27 06:25:27 +00:00
2011-11-27 16:07:28 +00:00
/*SPO2->setRecMaxY(100);
SPO2 - > setRecMinY ( 75 ) ;
PULSE - > setRecMinY ( 40 ) ;
LEAK - > setRecMinY ( 0 ) ;
LEAK - > setRecMaxY ( 80 ) ;
PRD - > setRecMinY ( 4.0 ) ;
PRD - > setRecMaxY ( 15.0 ) ; */
2011-08-29 11:42:40 +00:00
for ( int i = 0 ; i < ng ; i + + ) {
graphs [ i ] - > AddLayer ( new gYAxis ( ) , LayerLeft , gYAxis : : Margin ) ;
graphs [ i ] - > AddLayer ( new gXAxis ( ) , LayerBottom , 0 , 20 ) ;
}
2011-08-25 06:11:44 +00:00
layout - > layout ( ) ;
2011-08-26 03:26:53 +00:00
QTextCharFormat format = ui - > calendar - > weekdayTextFormat ( Qt : : Saturday ) ;
format . setForeground ( QBrush ( Qt : : black , Qt : : SolidPattern ) ) ;
ui - > calendar - > setWeekdayTextFormat ( Qt : : Saturday , format ) ;
ui - > calendar - > setWeekdayTextFormat ( Qt : : Sunday , format ) ;
2011-11-15 21:22:08 +00:00
//Qt::DayOfWeek dow=QLocale::system().firstDayOfWeek();
Qt : : DayOfWeek dow = firstDayOfWeekFromLocale ( ) ;
ui - > calendar - > setFirstDayOfWeek ( dow ) ;
2011-08-26 03:26:53 +00:00
ui - > tabWidget - > setCurrentWidget ( ui - > details ) ;
2011-10-05 10:44:41 +00:00
ui - > webView - > settings ( ) - > setFontSize ( QWebSettings : : DefaultFontSize , QApplication : : font ( ) . pointSize ( ) ) ;
2011-11-24 23:03:33 +00:00
ui - > webView - > page ( ) - > setLinkDelegationPolicy ( QWebPage : : DelegateAllLinks ) ;
2011-12-03 08:52:24 +00:00
connect ( ui - > webView , SIGNAL ( linkClicked ( QUrl ) ) , this , SLOT ( Link_clicked ( QUrl ) ) ) ;
2011-11-27 07:41:00 +00:00
if ( ! PROFILE . Exists ( " EventViewSize " ) ) PROFILE [ " EventViewSize " ] = 4 ;
int ews = PROFILE [ " EventViewSize " ] . toInt ( ) ;
ui - > evViewSlider - > setValue ( ews ) ;
ui - > evViewLCD - > display ( ews ) ;
2011-11-27 16:07:28 +00:00
GraphView - > LoadSettings ( " Daily " ) ;
2011-12-01 06:06:13 +00:00
for ( int i = 0 ; i < GraphView - > size ( ) ; i + + ) {
QString title = ( * GraphView ) [ i ] - > title ( ) ;
QPushButton * btn = new QPushButton ( title , this ) ;
btn - > setCheckable ( true ) ;
2011-12-01 06:10:06 +00:00
btn - > setChecked ( ( * GraphView ) [ i ] - > visible ( ) ) ;
2011-12-01 09:09:33 +00:00
btn - > setToolTip ( " Show/Hide " + title ) ;
2011-12-01 06:06:13 +00:00
GraphToggles [ title ] = btn ;
btn - > setSizePolicy ( QSizePolicy : : Fixed , QSizePolicy : : Minimum ) ;
ui - > graphToggleArea - > addWidget ( btn ) ;
2011-12-03 08:52:24 +00:00
connect ( btn , SIGNAL ( toggled ( bool ) ) , this , SLOT ( graphtogglebutton_toggled ( bool ) ) ) ;
2011-12-01 06:06:13 +00:00
}
ui - > graphToggleArea - > addSpacerItem ( new QSpacerItem ( 0 , 0 , QSizePolicy : : Expanding ) ) ;
2011-10-30 03:09:43 +00:00
// TODO: Add preference to hide do this for Widget Haters..
//ui->calNavWidget->hide();
2011-12-02 13:48:05 +00:00
if ( PROFILE [ " Units " ] . toString ( ) = = " metric " ) {
ui - > ouncesSpinBox - > setVisible ( false ) ;
ui - > weightSpinBox - > setDecimals ( 3 ) ;
ui - > weightSpinBox - > setSuffix ( " Kg " ) ;
} else {
ui - > weightSpinBox - > setSuffix ( " lb " ) ;
ui - > weightSpinBox - > setDecimals ( 0 ) ;
ui - > ouncesSpinBox - > setVisible ( true ) ;
ui - > ouncesSpinBox - > setSuffix ( " oz " ) ;
}
2011-10-30 03:09:43 +00:00
}
2011-06-26 08:30:44 +00:00
Daily : : ~ Daily ( )
{
2011-11-27 16:07:28 +00:00
GraphView - > SaveSettings ( " Daily " ) ;
2011-12-03 08:52:24 +00:00
disconnect ( ui - > webView , SIGNAL ( linkClicked ( QUrl ) ) , this , SLOT ( Link_clicked ( QUrl ) ) ) ;
2011-06-26 08:30:44 +00:00
// Save any last minute changes..
if ( previous_date . isValid ( ) )
Unload ( previous_date ) ;
2011-08-02 10:28:29 +00:00
// delete splitter;
2011-06-26 08:30:44 +00:00
delete ui ;
}
2011-12-03 08:52:24 +00:00
void Daily : : Link_clicked ( const QUrl & url )
2011-11-24 23:03:33 +00:00
{
QString code = url . toString ( ) . section ( " = " , 0 , 0 ) . toLower ( ) ;
QString data = url . toString ( ) . section ( " = " , 1 ) ;
int sid = data . toInt ( ) ;
Day * day = NULL ;
if ( code = = " cpap " ) {
day = PROFILE . GetDay ( previous_date , MT_CPAP ) ;
} else if ( code = = " oxi " ) {
day = PROFILE . GetDay ( previous_date , MT_OXIMETER ) ;
2011-12-06 14:39:14 +00:00
Session * sess = day - > machine - > sessionlist [ sid ] ;
if ( mainwin - > getOximetry ( ) ) {
mainwin - > getOximetry ( ) - > openSession ( sess ) ;
mainwin - > selectOximetryTab ( ) ;
}
return ;
2011-11-24 23:03:33 +00:00
} else if ( code = = " event " ) {
2011-12-03 08:52:24 +00:00
QList < QTreeWidgetItem * > list = ui - > treeWidget - > findItems ( schema : : channel [ data ] . description ( ) , Qt : : MatchContains ) ;
2011-11-24 23:03:33 +00:00
if ( list . size ( ) > 0 ) {
2011-11-24 23:14:17 +00:00
ui - > treeWidget - > collapseAll ( ) ;
ui - > treeWidget - > expandItem ( list . at ( 0 ) ) ;
QTreeWidgetItem * wi = list . at ( 0 ) - > child ( 0 ) ;
ui - > treeWidget - > setCurrentItem ( wi ) ;
2011-11-24 23:03:33 +00:00
ui - > tabWidget - > setCurrentIndex ( 1 ) ;
2011-12-03 08:52:24 +00:00
} else {
mainwin - > Notify ( " No " + schema : : channel [ data ] . description ( ) + " events are recorded this day " , 1500 ) ;
2011-11-24 23:03:33 +00:00
}
2011-12-03 03:43:23 +00:00
} else if ( code = = " graph " ) {
qDebug ( ) < < " Select graph " < < data ;
2011-11-24 23:03:33 +00:00
} else {
qDebug ( ) < < " Clicked on " < < code < < data ;
}
if ( day ) {
Session * sess = day - > machine - > sessionlist [ sid ] ;
if ( sess ) {
GraphView - > SetXBounds ( sess - > first ( ) , sess - > last ( ) ) ;
}
}
}
2011-07-04 11:37:26 +00:00
2011-06-26 08:30:44 +00:00
void Daily : : ReloadGraphs ( )
{
2011-12-06 14:39:14 +00:00
QDate d ;
if ( previous_date . isValid ( ) ) {
d = previous_date ;
Unload ( d ) ;
2011-12-10 12:14:48 +00:00
} //else
d = PROFILE . LastDay ( ) ;
2011-06-26 08:30:44 +00:00
if ( ! d . isValid ( ) ) {
d = ui - > calendar - > selectedDate ( ) ;
}
on_calendar_currentPageChanged ( d . year ( ) , d . month ( ) ) ;
ui - > calendar - > setSelectedDate ( d ) ;
Load ( d ) ;
}
void Daily : : on_calendar_currentPageChanged ( int year , int month )
{
QDate d ( year , month , 1 ) ;
int dom = d . daysInMonth ( ) ;
for ( int i = 1 ; i < = dom ; i + + ) {
d = QDate ( year , month , i ) ;
this - > UpdateCalendarDay ( d ) ;
}
}
void Daily : : UpdateEventsTree ( QTreeWidget * tree , Day * day )
{
tree - > clear ( ) ;
2011-06-27 10:55:55 +00:00
if ( ! day ) return ;
2011-07-27 09:53:29 +00:00
//return;
2011-06-26 08:30:44 +00:00
tree - > setColumnCount ( 1 ) ; // 1 visible common.. (1 hidden)
QTreeWidgetItem * root = NULL ; //new QTreeWidgetItem((QTreeWidget *)0,QStringList("Stuff"));
2011-07-31 20:24:43 +00:00
QHash < ChannelID , QTreeWidgetItem * > mcroot ;
QHash < ChannelID , int > mccnt ;
2011-07-05 05:33:06 +00:00
int total_events = 0 ;
2011-06-26 08:30:44 +00:00
2011-07-31 20:24:43 +00:00
for ( QVector < Session * > : : iterator s = day - > begin ( ) ; s ! = day - > end ( ) ; s + + ) {
2011-06-26 08:30:44 +00:00
2011-07-31 20:24:43 +00:00
QHash < ChannelID , QVector < EventList * > > : : iterator m ;
2011-06-26 08:30:44 +00:00
2011-07-01 10:10:44 +00:00
//QTreeWidgetItem * sroot;
2011-06-26 08:30:44 +00:00
2011-07-27 09:21:53 +00:00
for ( m = ( * s ) - > eventlist . begin ( ) ; m ! = ( * s ) - > eventlist . end ( ) ; m + + ) {
2011-07-31 20:24:43 +00:00
ChannelID code = m . key ( ) ;
2011-07-27 09:53:29 +00:00
if ( ( code ! = CPAP_Obstructive )
& & ( code ! = CPAP_Hypopnea )
& & ( code ! = CPAP_Apnea )
2011-09-17 12:39:00 +00:00
& & ( code ! = PRS1_0B )
2011-07-27 09:53:29 +00:00
& & ( code ! = CPAP_ClearAirway )
& & ( code ! = CPAP_CSR )
& & ( code ! = CPAP_RERA )
2011-11-24 23:03:33 +00:00
& & ( code ! = CPAP_NRI )
& & ( code ! = CPAP_LeakFlag )
& & ( code ! = CPAP_ExP )
2011-07-27 09:53:29 +00:00
& & ( code ! = CPAP_FlowLimit )
2011-07-31 20:24:43 +00:00
& & ( code ! = CPAP_PressurePulse )
2011-07-27 09:53:29 +00:00
& & ( code ! = CPAP_VSnore ) ) continue ;
2011-06-26 08:30:44 +00:00
QTreeWidgetItem * mcr ;
if ( mcroot . find ( code ) = = mcroot . end ( ) ) {
2011-07-05 05:33:06 +00:00
int cnt = day - > count ( code ) ;
total_events + = cnt ;
2011-12-03 10:08:40 +00:00
QString st = schema : : channel [ code ] . description ( ) ;
2011-06-26 08:30:44 +00:00
if ( st . isEmpty ( ) ) {
2011-09-17 12:39:00 +00:00
st = " Fixme " + code ;
2011-06-26 08:30:44 +00:00
}
2011-07-30 08:10:02 +00:00
st + = " ( " + QString : : number ( cnt ) + " event " + ( ( cnt > 1 ) ? " s " : " " ) + " ) " ;
2011-06-26 08:30:44 +00:00
QStringList l ( st ) ;
l . append ( " " ) ;
mcroot [ code ] = mcr = new QTreeWidgetItem ( root , l ) ;
mccnt [ code ] = 0 ;
} else {
mcr = mcroot [ code ] ;
}
2011-07-31 20:24:43 +00:00
for ( int z = 0 ; z < m . value ( ) . size ( ) ; z + + ) {
2011-11-24 12:47:25 +00:00
for ( quint32 o = 0 ; o < m . value ( ) [ z ] - > count ( ) ; o + + ) {
2011-07-31 20:24:43 +00:00
qint64 t = m . value ( ) [ z ] - > time ( o ) ;
2011-07-30 03:52:29 +00:00
2011-07-27 09:21:53 +00:00
if ( code = = CPAP_CSR ) {
2011-07-31 20:24:43 +00:00
t - = float ( m . value ( ) [ z ] - > raw ( o ) / 2.0 ) * 1000.0 ;
2011-07-27 09:21:53 +00:00
}
QStringList a ;
2011-09-01 13:07:26 +00:00
QDateTime d = QDateTime : : fromTime_t ( t / 1000 ) ;
2011-07-31 20:24:43 +00:00
QString s = QString ( " #%1: %2 (%3) " ) . arg ( ( int ) + + mccnt [ code ] , ( int ) 3 , ( int ) 10 , QChar ( ' 0 ' ) ) . arg ( d . toString ( " HH:mm:ss " ) ) . arg ( m . value ( ) [ z ] - > raw ( o ) ) ;
2011-07-27 09:21:53 +00:00
a . append ( s ) ;
a . append ( d . toString ( " yyyy-MM-dd HH:mm:ss " ) ) ;
mcr - > addChild ( new QTreeWidgetItem ( a ) ) ;
2011-06-26 08:30:44 +00:00
}
2011-07-30 03:52:29 +00:00
}
}
2011-06-26 08:30:44 +00:00
}
int cnt = 0 ;
2011-07-31 20:24:43 +00:00
for ( QHash < ChannelID , QTreeWidgetItem * > : : iterator m = mcroot . begin ( ) ; m ! = mcroot . end ( ) ; m + + ) {
tree - > insertTopLevelItem ( cnt + + , m . value ( ) ) ;
2011-06-26 08:30:44 +00:00
}
2011-07-05 05:33:06 +00:00
//tree->insertTopLevelItem(cnt++,new QTreeWidgetItem(QStringList("[Total Events ("+QString::number(total_events)+")]")));
2011-06-26 08:30:44 +00:00
tree - > sortByColumn ( 0 , Qt : : AscendingOrder ) ;
//tree->expandAll();
}
2011-12-01 06:06:13 +00:00
2011-06-26 08:30:44 +00:00
void Daily : : UpdateCalendarDay ( QDate date )
{
QTextCharFormat bold ;
QTextCharFormat cpapcol ;
QTextCharFormat normal ;
2011-07-03 12:08:30 +00:00
QTextCharFormat oxiday ;
2011-12-02 14:18:47 +00:00
QTextCharFormat jourday ;
bold . setForeground ( QBrush ( QColor ( " dark blue " ) , Qt : : SolidPattern ) ) ;
2011-06-26 08:30:44 +00:00
bold . setFontWeight ( QFont : : Bold ) ;
cpapcol . setForeground ( QBrush ( Qt : : blue , Qt : : SolidPattern ) ) ;
cpapcol . setFontWeight ( QFont : : Bold ) ;
2011-07-03 12:08:30 +00:00
oxiday . setForeground ( QBrush ( Qt : : red , Qt : : SolidPattern ) ) ;
oxiday . setFontWeight ( QFont : : Bold ) ;
2011-12-02 14:18:47 +00:00
jourday . setForeground ( QBrush ( QColor ( " black " ) , Qt : : SolidPattern ) ) ;
jourday . setFontWeight ( QFont : : Bold ) ;
2011-10-05 07:41:56 +00:00
bool hascpap = PROFILE . GetDay ( date , MT_CPAP ) ! = NULL ;
bool hasoxi = PROFILE . GetDay ( date , MT_OXIMETER ) ! = NULL ;
2011-12-02 14:18:47 +00:00
bool hasjournal = PROFILE . GetDay ( date , MT_JOURNAL ) ! = NULL ;
2011-07-03 12:08:30 +00:00
if ( hascpap ) {
if ( hasoxi ) {
ui - > calendar - > setDateTextFormat ( date , oxiday ) ;
2011-12-02 14:18:47 +00:00
} else if ( hasjournal ) {
ui - > calendar - > setDateTextFormat ( date , jourday ) ;
2011-07-03 12:08:30 +00:00
} else {
ui - > calendar - > setDateTextFormat ( date , cpapcol ) ;
}
2011-10-05 07:41:56 +00:00
} else if ( PROFILE . GetDay ( date ) ) {
2011-06-26 08:30:44 +00:00
ui - > calendar - > setDateTextFormat ( date , bold ) ;
} else {
ui - > calendar - > setDateTextFormat ( date , normal ) ;
}
ui - > calendar - > setHorizontalHeaderFormat ( QCalendarWidget : : ShortDayNames ) ;
}
2011-10-28 03:45:31 +00:00
void Daily : : LoadDate ( QDate date )
{
ui - > calendar - > setSelectedDate ( date ) ;
on_calendar_selectionChanged ( ) ;
}
2011-06-26 08:30:44 +00:00
void Daily : : on_calendar_selectionChanged ( )
{
2011-12-02 11:40:47 +00:00
2011-06-26 08:30:44 +00:00
if ( previous_date . isValid ( ) )
Unload ( previous_date ) ;
2011-12-02 11:40:47 +00:00
ZombieMeterMoved = false ;
2011-06-26 08:30:44 +00:00
Load ( ui - > calendar - > selectedDate ( ) ) ;
2011-10-30 03:44:00 +00:00
ui - > calButton - > setText ( ui - > calendar - > selectedDate ( ) . toString ( Qt : : TextDate ) ) ;
2011-10-30 04:35:55 +00:00
ui - > calendar - > setFocus ( Qt : : ActiveWindowFocusReason ) ;
2011-12-02 13:48:05 +00:00
if ( PROFILE [ " Units " ] . toString ( ) = = " metric " ) {
ui - > ouncesSpinBox - > setVisible ( false ) ;
ui - > weightSpinBox - > setDecimals ( 3 ) ;
ui - > weightSpinBox - > setSuffix ( " Kg " ) ;
} else {
ui - > weightSpinBox - > setSuffix ( " lb " ) ;
ui - > weightSpinBox - > setDecimals ( 0 ) ;
ui - > ouncesSpinBox - > setVisible ( true ) ;
ui - > ouncesSpinBox - > setSuffix ( " oz " ) ;
}
2011-06-26 08:30:44 +00:00
}
2011-07-28 14:20:59 +00:00
void Daily : : ResetGraphLayout ( )
{
2011-09-12 17:47:37 +00:00
GraphView - > resetLayout ( ) ;
2011-08-02 10:28:29 +00:00
//splitter->setSizes(splitter_sizes);
2011-07-28 18:02:51 +00:00
2011-07-28 14:20:59 +00:00
}
2011-07-30 04:54:22 +00:00
void Daily : : ShowHideGraphs ( )
{
2011-08-25 06:11:44 +00:00
/* int vis=0;
2011-07-31 20:24:43 +00:00
for ( int i = 0 ; i < Graphs . size ( ) ; i + + ) {
2011-07-30 04:54:22 +00:00
if ( Graphs [ i ] - > isEmpty ( ) ) {
GraphAction [ i ] - > setVisible ( false ) ;
Graphs [ i ] - > hide ( ) ;
} else {
Graphs [ i ] - > ResetBounds ( ) ;
GraphAction [ i ] - > setVisible ( true ) ;
if ( GraphAction [ i ] - > isChecked ( ) ) {
Graphs [ i ] - > show ( ) ;
2011-07-30 05:11:39 +00:00
vis + + ;
2011-07-30 04:54:22 +00:00
} else {
Graphs [ i ] - > hide ( ) ;
}
}
}
2011-08-07 04:44:01 +00:00
GraphLayout - > setMinimumHeight ( vis * default_height + 10 ) ;
2011-08-02 09:12:10 +00:00
//splitter->setMaximumHeight(vis*default_height);
splitter - > layout ( ) ;
2011-08-02 12:32:03 +00:00
//splitter->update();
2011-08-25 06:11:44 +00:00
RedrawGraphs ( ) ; */
2011-07-30 04:54:22 +00:00
}
2011-12-03 08:52:24 +00:00
void Daily : : graphtogglebutton_toggled ( bool b )
2011-12-01 06:06:13 +00:00
{
2011-12-03 08:52:24 +00:00
Q_UNUSED ( b )
2011-12-01 06:06:13 +00:00
for ( int i = 0 ; i < GraphView - > size ( ) ; i + + ) {
QString title = ( * GraphView ) [ i ] - > title ( ) ;
( * GraphView ) [ i ] - > setVisible ( GraphToggles [ title ] - > isChecked ( ) ) ;
}
GraphView - > updateScale ( ) ;
GraphView - > updateGL ( ) ;
}
2011-06-26 08:30:44 +00:00
void Daily : : Load ( QDate date )
{
2011-07-27 10:47:50 +00:00
static Day * lastcpapday = NULL ;
2011-06-26 08:30:44 +00:00
previous_date = date ;
2011-10-05 07:41:56 +00:00
Day * cpap = PROFILE . GetDay ( date , MT_CPAP ) ;
Day * oxi = PROFILE . GetDay ( date , MT_OXIMETER ) ;
2011-07-01 10:10:44 +00:00
// Day *sleepstage=profile->GetDay(date,MT_SLEEPSTAGE);
2011-06-26 08:30:44 +00:00
2011-10-05 07:41:56 +00:00
if ( ! PROFILE [ " MemoryHog " ] . toBool ( ) ) {
2011-07-28 07:32:02 +00:00
if ( lastcpapday & & ( lastcpapday ! = cpap ) ) {
2011-07-31 20:24:43 +00:00
for ( QVector < Session * > : : iterator s = lastcpapday - > begin ( ) ; s ! = lastcpapday - > end ( ) ; s + + ) {
2011-07-28 07:32:02 +00:00
( * s ) - > TrashEvents ( ) ;
}
2011-07-27 10:47:50 +00:00
}
}
2011-12-03 08:52:24 +00:00
if ( cpap & & oxi ) {
qint64 len = qAbs ( cpap - > first ( ) - oxi - > first ( ) ) ;
if ( len > 30000 ) {
GraphView - > findGraph ( " Pulse " ) - > setGroup ( 1 ) ;
GraphView - > findGraph ( " SpO2 " ) - > setGroup ( 1 ) ;
GraphView - > findGraph ( " Plethy " ) - > setGroup ( 1 ) ;
mainwin - > Notify ( " Oximetry data exists for this day, however it's timestamps are too different, so the Graphs will not be linked. " , 3000 ) ;
} else {
mainwin - > Notify ( " Oximetry & CPAP graphs are linked for this day " , 2000 ) ;
GraphView - > findGraph ( " Pulse " ) - > setGroup ( 0 ) ;
GraphView - > findGraph ( " SpO2 " ) - > setGroup ( 0 ) ;
GraphView - > findGraph ( " Plethy " ) - > setGroup ( 0 ) ;
}
}
2011-07-27 10:47:50 +00:00
lastcpapday = cpap ;
2011-11-24 23:03:33 +00:00
QString html = " <html><head><style type='text/css'> "
" p,a,td,body { font-family: 'FreeSans', 'Sans Serif'; } "
" p,a,td,body { font-size: 12px; } "
2011-11-24 23:14:17 +00:00
" a:link,a:visited { color: inherit; text-decoration: none; font-weight: normal;} "
" a:hover { background-color: inherit; color: inherit; text-decoration:none; font-weight: bold; } "
2011-11-24 23:03:33 +00:00
" </style> "
2011-12-07 12:23:19 +00:00
" <script language='javascript'><!-- "
" func dosession(sessid) { "
" "
" } "
" --></script> "
2011-07-05 05:33:06 +00:00
" </head> "
" <body leftmargin=0 rightmargin=0 topmargin=0 marginwidth=0 marginheight=0> "
2011-11-27 04:50:22 +00:00
" <table cellspacing=0 cellpadding=1 border=0 width='100%'> \n " ;
2011-06-26 08:30:44 +00:00
QString tmp ;
2011-08-30 17:22:54 +00:00
//const int gwwidth=240;
//const int gwheight=100;
2011-07-28 12:13:28 +00:00
UpdateOXIGraphs ( oxi ) ;
2011-07-22 13:46:17 +00:00
UpdateCPAPGraphs ( cpap ) ;
2011-07-28 12:13:28 +00:00
UpdateEventsTree ( ui - > treeWidget , cpap ) ;
2011-09-21 14:10:10 +00:00
snapGV - > setDay ( cpap ) ;
2011-06-26 08:30:44 +00:00
2011-09-02 05:13:07 +00:00
2011-08-25 06:11:44 +00:00
GraphView - > ResetBounds ( ) ;
2011-09-21 14:10:10 +00:00
//snapGV->ResetBounds();
2011-08-26 05:56:43 +00:00
//GraphView->ResetBounds(1);
2011-08-25 06:11:44 +00:00
2011-08-29 07:13:58 +00:00
//GraphView->setEmptyText(tr("No Data")); //tr("No data for ")+date.toString(Qt::SystemLocaleLongDate));
2011-07-28 12:13:28 +00:00
if ( ! cpap & & ! oxi ) {
2011-08-02 10:28:29 +00:00
//splitter->setMinimumHeight(0);
2011-08-25 06:11:44 +00:00
scrollbar - > hide ( ) ;
2011-08-29 07:13:58 +00:00
// GraphView->hide();
2011-07-27 09:21:53 +00:00
} else {
2011-08-29 07:13:58 +00:00
//NoData->hide();
// GraphView->show();
2011-08-25 06:11:44 +00:00
scrollbar - > show ( ) ;
2011-07-27 09:21:53 +00:00
}
2011-08-29 07:13:58 +00:00
GraphView - > updateGL ( ) ;
2011-09-21 14:10:10 +00:00
snapGV - > updateGL ( ) ;
2011-07-28 14:20:59 +00:00
2011-08-25 06:11:44 +00:00
//RedrawGraphs();
2011-07-27 09:21:53 +00:00
2011-12-01 06:06:13 +00:00
for ( int i = 0 ; i < GraphView - > size ( ) ; i + + ) {
QString title = ( * GraphView ) [ i ] - > title ( ) ;
GraphToggles [ title ] - > setVisible ( ! ( * GraphView ) [ i ] - > isEmpty ( ) ) ;
}
2011-07-28 12:13:28 +00:00
QString epr , modestr ;
2011-08-30 17:22:54 +00:00
//float iap90,eap90;
2011-06-26 08:30:44 +00:00
CPAPMode mode = MODE_UNKNOWN ;
PRTypes pr ;
QString a ;
2011-12-10 12:14:48 +00:00
bool isBrick = false ;
2011-06-26 08:30:44 +00:00
if ( cpap ) {
2011-12-10 12:14:48 +00:00
if ( GraphView - > isEmpty ( ) ) {
GraphView - > setEmptyText ( " Brick Machine :( " ) ;
isBrick = true ;
} else {
GraphView - > setEmptyText ( " No Data " ) ;
}
2011-07-31 20:24:43 +00:00
mode = ( CPAPMode ) cpap - > settings_max ( CPAP_Mode ) ;
2011-09-17 12:39:00 +00:00
pr = ( PRTypes ) cpap - > settings_max ( PRS1_FlexMode ) ;
2011-06-26 08:30:44 +00:00
if ( pr = = PR_NONE )
epr = tr ( " No Pressure Relief " ) ;
else {
2011-09-17 12:39:00 +00:00
//epr=schema::channel[PRS1_FlexSet].optionString(pr)+QString(" x%1").arg((int)cpap->settings_max(PRS1_FlexSet));
2011-06-26 08:30:44 +00:00
}
2011-09-17 12:39:00 +00:00
modestr = schema : : channel [ CPAP_Mode ] . m_options [ mode ] ;
2011-07-31 20:24:43 +00:00
2011-07-30 08:10:02 +00:00
float ahi = ( cpap - > count ( CPAP_Obstructive ) + cpap - > count ( CPAP_Hypopnea ) + cpap - > count ( CPAP_ClearAirway ) + cpap - > count ( CPAP_Apnea ) ) / cpap - > hours ( ) ;
2011-06-26 08:30:44 +00:00
float csr = ( 100.0 / cpap - > hours ( ) ) * ( cpap - > sum ( CPAP_CSR ) / 3600.0 ) ;
2011-07-30 08:10:02 +00:00
float uai = cpap - > count ( CPAP_Apnea ) / cpap - > hours ( ) ;
2011-06-26 08:30:44 +00:00
float oai = cpap - > count ( CPAP_Obstructive ) / cpap - > hours ( ) ;
2011-11-24 12:47:25 +00:00
float hi = ( cpap - > count ( CPAP_ExP ) + cpap - > count ( CPAP_Hypopnea ) ) / cpap - > hours ( ) ;
2011-06-26 08:30:44 +00:00
float cai = cpap - > count ( CPAP_ClearAirway ) / cpap - > hours ( ) ;
float rei = cpap - > count ( CPAP_RERA ) / cpap - > hours ( ) ;
float vsi = cpap - > count ( CPAP_VSnore ) / cpap - > hours ( ) ;
float fli = cpap - > count ( CPAP_FlowLimit ) / cpap - > hours ( ) ;
2011-11-24 23:03:33 +00:00
float nri = cpap - > count ( CPAP_NRI ) / cpap - > hours ( ) ;
float lki = cpap - > count ( CPAP_LeakFlag ) / cpap - > hours ( ) ;
float exp = cpap - > count ( CPAP_ExP ) / cpap - > hours ( ) ;
2011-07-22 13:46:17 +00:00
2011-08-07 20:51:11 +00:00
//float p90=cpap->p90(CPAP_Pressure);
//eap90=cpap->p90(CPAP_EPAP);
//iap90=cpap->p90(CPAP_IPAP);
2011-06-26 08:30:44 +00:00
QString submodel = tr ( " Unknown Model " ) ;
2011-06-30 10:56:22 +00:00
//html+="<tr><td colspan=4 align=center><i>"+tr("Machine Information")+"</i></td></tr>\n";
2011-06-26 08:30:44 +00:00
if ( cpap - > machine - > properties . find ( " SubModel " ) ! = cpap - > machine - > properties . end ( ) )
submodel = " <br> " + cpap - > machine - > properties [ " SubModel " ] ;
2011-06-30 10:56:22 +00:00
html + = " <tr><td colspan=4 align=center><b> " + cpap - > machine - > properties [ " Brand " ] + " </b> <br> " + cpap - > machine - > properties [ " Model " ] + " " + cpap - > machine - > properties [ " ModelNumber " ] + submodel + " </td></tr> \n " ;
2011-10-05 07:41:56 +00:00
if ( PROFILE . Exists ( " ShowSerialNumbers " ) & & PROFILE [ " ShowSerialNumbers " ] . toBool ( ) ) {
2011-06-30 10:56:22 +00:00
html + = " <tr><td colspan=4 align=center> " + cpap - > machine - > properties [ " Serial " ] + " </td></tr> \n " ;
2011-06-26 08:30:44 +00:00
}
2011-06-30 10:56:22 +00:00
html + = " <tr><td align='center'><b>Date</b></td><td align='center'><b> " + tr ( " Sleep " ) + " </b></td><td align='center'><b> " + tr ( " Wake " ) + " </b></td><td align='center'><b> " + tr ( " Hours " ) + " </b></td></tr> " ;
2011-09-12 02:24:58 +00:00
int tt = qint64 ( cpap - > total_time ( ) ) / 1000L ;
QDateTime date = QDateTime : : fromTime_t ( cpap - > first ( ) / 1000L ) ;
QDateTime date2 = QDateTime : : fromTime_t ( cpap - > last ( ) / 1000L ) ;
2011-07-02 14:35:50 +00:00
2011-09-12 02:24:58 +00:00
int h = tt / 3600 ;
2011-07-31 21:07:40 +00:00
int m = ( tt / 60 ) % 60 ;
int s = tt % 60 ;
2011-07-05 05:33:06 +00:00
html + = QString ( " <tr><td align='center'>%1</td><td align='center'>%2</td><td align='center'>%3</td><td align='center'>%4</td></tr> \n "
" <tr><td colspan=4 align=center><hr></td></tr> \n " )
. arg ( date . date ( ) . toString ( Qt : : SystemLocaleShortDate ) )
. arg ( date . toString ( " HH:mm " ) )
. arg ( date2 . toString ( " HH:mm " ) )
2011-07-31 21:07:40 +00:00
. arg ( QString ( ) . sprintf ( " %02i:%02i:%02i " , h , m , s ) ) ;
2011-06-26 08:30:44 +00:00
2011-06-30 09:37:24 +00:00
QString cs ;
2011-12-10 12:14:48 +00:00
if ( ! isBrick ) {
if ( cpap - > machine - > GetClass ( ) = = " ResMed " ) {
cs = " 4 width='100%' align=center> " ;
} else cs = " 2 width='50%'> " ;
html + = " <tr><td colspan= " + cs + " <table cellspacing=0 cellpadding=1 border=0 width='100%'> "
" <tr><td align='right' bgcolor='#F88017'><b><font color='black'><a href='nothing' title=' " + schema : : channel [ CPAP_AHI ] . description ( ) + " '> " + tr ( " AHI " ) + " </a></font></b></td><td width=20% bgcolor='#F88017'><b><font color='black'> " + QString ( ) . sprintf ( " %.2f " , ahi ) + " </font></b></td></tr> \n "
" <tr><td align='right' bgcolor='#4040ff'><b><font color='white'> <a href='event= " + CPAP_Hypopnea + " ' title=' " + schema : : channel [ CPAP_Hypopnea ] . description ( ) + " '> " + tr ( " Hypopnea " ) + " </a></font></b></td><td bgcolor='#4040ff'><font color='white'> " + QString ( ) . sprintf ( " %.2f " , hi ) + " </font></td></tr> \n " ;
if ( cpap - > machine - > GetClass ( ) = = " ResMed " ) {
html + = " <tr><td align='right' bgcolor='#208020'><b> <a href='event= " + CPAP_Apnea + " ' title=' " + schema : : channel [ CPAP_Apnea ] . description ( ) + " '> " + tr ( " Unspecified Apnea " ) + " </a></b></td><td bgcolor='#208020'> " + QString ( ) . sprintf ( " %.2f " , uai ) + " </td></tr> \n " ;
}
html + = " <tr><td align='right' bgcolor='#40afbf'><b> <a href='event= " + CPAP_Obstructive + " ' title=' " + schema : : channel [ CPAP_Obstructive ] . description ( ) + " '> " + tr ( " Obstructive " ) + " </a></b></td><td bgcolor='#40afbf'> " + QString ( ) . sprintf ( " %.2f " , oai ) + " </td></tr> \n "
" <tr><td align='right' bgcolor='#b254cd'><b> <a href='event= " + CPAP_ClearAirway + " ' title=' " + schema : : channel [ CPAP_ClearAirway ] . description ( ) + " '> " + tr ( " Clear Airway " ) + " </a></b></td><td bgcolor='#b254cd'> " + QString ( ) . sprintf ( " %.2f " , cai ) + " </td></tr> \n "
2011-11-24 23:03:33 +00:00
" </table></td> " ;
2011-12-10 12:14:48 +00:00
if ( cpap - > machine - > GetClass ( ) = = " PRS1 " ) {
html + = " <td colspan=2><table cellspacing=0 cellpadding=1 border=0 width='100%'> "
" <tr><td align='right' bgcolor='#ffff80'><b> <a href='event= " + CPAP_RERA + " ' title=' " + schema : : channel [ CPAP_RERA ] . description ( ) + " '> " + tr ( " RERA " ) + " </a></b></td><td width=20% bgcolor='#ffff80'> " + QString ( ) . sprintf ( " %.2f " , rei ) + " </td></tr> \n "
" <tr><td align='right' bgcolor='#404040'><b> <font color='white'><a href='event= " + CPAP_FlowLimit + " ' title=' " + schema : : channel [ CPAP_FlowLimit ] . description ( ) + " '> " + tr ( " Flow Limit " ) + " </a></font></b></td><td bgcolor='#404040'><font color='white'> " + a . sprintf ( " %.2f " , fli ) + " </font></td></tr> \n "
" <tr><td align='right' bgcolor='#ff4040'><b> <a href='event= " + CPAP_VSnore + " 'title=' " + schema : : channel [ CPAP_VSnore ] . description ( ) + " '> " + tr ( " Vsnore " ) + " </a></b></td><td bgcolor='#ff4040'> " + QString ( ) . sprintf ( " %.2f " , vsi ) + " </td></tr> \n "
" <tr><td align='right' bgcolor='#80ff80'><b> <a href='event= " + CPAP_CSR + " ' title=' " + schema : : channel [ CPAP_CSR ] . description ( ) + " '> " + tr ( " PB/CSR " ) + " </a></b></td><td bgcolor='#80ff80'> " + QString ( ) . sprintf ( " %.2f " , csr ) + " %</td></tr> \n "
" </table></td> " ;
} else if ( cpap - > machine - > GetClass ( ) = = " Intellipap " ) {
html + = " <td colspan=2><table cellspacing=0 cellpadding=2 border=0 width='100%'> "
" <tr><td align='right' bgcolor='#ffff80'><b> <a href='event= " + CPAP_NRI + " '> " + tr ( " NRI " ) + " </a></b></td><td width=20% bgcolor='#ffff80'> " + QString ( ) . sprintf ( " %.2f " , nri ) + " </td></tr> \n "
" <tr><td align='right' bgcolor='#404040'><b> <font color='white'><a href='event= " + CPAP_Leak + " '> " + tr ( " Leak Idx " ) + " </a></font></b></td><td bgcolor='#404040'><font color='white'> " + a . sprintf ( " %.2f " , lki ) + " </font></td></tr> \n "
" <tr><td align='right' bgcolor='#ff4040'><b> <a href='event= " + CPAP_VSnore + " '> " + tr ( " V.Snore " ) + " </a></b></td><td bgcolor='#ff4040'> " + QString ( ) . sprintf ( " %.2f " , vsi ) + " </td></tr> \n "
" <tr><td align='right' bgcolor='#80ff80'><b> <a href='event= " + CPAP_ExP + " '> " + tr ( " Exh. Puff " ) + " </a></b></td><td bgcolor='#80ff80'> " + QString ( ) . sprintf ( " %.2f " , exp ) + " </td></tr> \n "
" </table></td> " ;
2011-07-30 08:10:02 +00:00
2011-12-10 12:14:48 +00:00
}
2011-08-05 15:01:17 +00:00
2011-12-10 12:14:48 +00:00
// Note, this may not be a problem since Qt bug 13622 was discovered
// as it only relates to text drawing, which the Pie chart does not do
// ^^ Scratch that.. pie now includes text..
if ( PROFILE [ " EnableGraphSnapshots " ] . toBool ( ) ) { // AHI Pie Chart
if ( ahi + rei + fli > 0 ) {
html + = " </tr> \n " ; //<tr><td colspan=4 align=center><i>"+tr("Event Breakdown")+"</i></td></tr>\n";
//G_AHI->setFixedSize(gwwidth,120);
//mainwin->snapshotGraph()->setPrintScaleX(1);
//mainwin->snapshotGraph()->setPrintScaleY(1);
QPixmap pixmap = snapGV - > renderPixmap ( 172 , 172 ) ;
QByteArray byteArray ;
QBuffer buffer ( & byteArray ) ; // use buffer to store pixmap into byteArray
buffer . open ( QIODevice : : WriteOnly ) ;
pixmap . save ( & buffer , " PNG " ) ;
html + = " <tr><td colspan=4 align=center><img src= \" data:image/png;base64, " + byteArray . toBase64 ( ) + " \" ></td></tr> \n " ;
} else {
html + = " <tr><td colspan=4 align=center><img src= \" qrc:/docs/0.0.gif \" ></td></tr> \n " ;
}
2011-08-07 11:37:56 +00:00
}
2011-12-10 12:14:48 +00:00
html + = " </table> " ;
html + = " <table cellspacing=0 cellpadding=0 border=0 width='100%'> \n " ;
if ( cpap | | oxi ) {
html + = " <tr height='2'><td colspan=5 height='2'><hr></td></tr> \n " ;
//html+=("<tr><td colspan=4 align=center> </td></tr>\n");
html + = ( " <tr><td> </td><td><b>Min</b></td><td><b>Avg</b></td><td><b>90%</b></td><td><b>Max</b></td></tr> " ) ;
ChannelID chans [ ] = {
CPAP_Pressure , CPAP_EPAP , CPAP_IPAP , CPAP_PS , CPAP_PTB ,
CPAP_MinuteVent , CPAP_AHI , CPAP_RespRate , CPAP_RespEvent , CPAP_FLG ,
CPAP_Leak , CPAP_LeakTotal , CPAP_Snore , CPAP_IE , CPAP_Ti , CPAP_Te , CPAP_TgMV ,
CPAP_TidalVolume , OXI_Pulse , OXI_SPO2
} ;
int numchans = sizeof ( chans ) / sizeof ( ChannelID ) ;
int suboffset = 0 ;
for ( int i = 0 ; i < numchans ; i + + ) {
ChannelID code = chans [ i ] ;
if ( cpap & & cpap - > channelHasData ( code ) ) {
//if (code==CPAP_LeakTotal) suboffset=PROFILE["IntentionalLeak"].toDouble(); else suboffset=0;
QString tooltip = schema : : channel [ code ] . description ( ) ;
if ( ! schema : : channel [ code ] . units ( ) . isEmpty ( ) ) tooltip + = " ( " + schema : : channel [ code ] . units ( ) + " ) " ;
html + = " <tr><td align=left><a href='graph= " + code + " ' title=' " + tooltip + " '> " + schema : : channel [ code ] . label ( ) + " </a> " ;
html + = " </td><td> " + a . sprintf ( " %.2f " , cpap - > min ( code ) - suboffset ) ;
html + = " </td><td> " + a . sprintf ( " %.2f " , cpap - > wavg ( code ) - suboffset ) ;
html + = " </td><td> " + a . sprintf ( " %.2f " , cpap - > p90 ( code ) - suboffset ) ;
html + = " </td><td> " + a . sprintf ( " %.2f " , cpap - > max ( code ) - suboffset ) ;
html + = " </td><tr> " ;
}
if ( oxi & & oxi - > channelHasData ( code ) ) {
QString tooltip = schema : : channel [ code ] . description ( ) ;
if ( ! schema : : channel [ code ] . units ( ) . isEmpty ( ) ) tooltip + = " ( " + schema : : channel [ code ] . units ( ) + " ) " ;
html + = " <tr><td align=left><a href='graph= " + code + " ' title=' " + tooltip + " '> " + schema : : channel [ code ] . label ( ) + " </a> " ;
html + = " </td><td> " + a . sprintf ( " %.2f " , oxi - > min ( code ) ) ;
html + = " </td><td> " + a . sprintf ( " %.2f " , oxi - > wavg ( code ) ) ;
html + = " </td><td> " + a . sprintf ( " %.2f " , oxi - > p90 ( code ) ) ;
html + = " </td><td> " + a . sprintf ( " %.2f " , oxi - > max ( code ) ) ;
html + = " </td><tr> " ;
}
}
2011-08-07 15:37:01 +00:00
}
2011-12-10 12:14:48 +00:00
} else {
html + = " <tr><td colspan='5' align='center'><b><h2> " + tr ( " BRICK :( " ) + " </h2></b></td></tr> " ;
html + = " <tr><td colspan='5' align='center'><i>Sorry, your machine does not record data.</i></td></tr> \n " ;
html + = " <tr><td colspan='5' align='center'><i>Complain to your Equipment Provider!</i></td></tr> \n " ;
html + = " <tr><td colspan='5'> </td></tr> \n " ;
2011-06-26 08:30:44 +00:00
}
} else {
2011-08-07 15:37:01 +00:00
html + = " <tr><td colspan=5 align=center><i> " + tr ( " No data available " ) + " </i></td></tr> " ;
2011-08-07 11:37:56 +00:00
html + = " <tr><td colspan=5> </td></tr> \n " ;
2011-06-26 08:30:44 +00:00
}
2011-08-07 15:37:01 +00:00
html + = " </table> " ;
2011-12-10 12:14:48 +00:00
//html+="<table cellspacing=0 cellpadding=0 border=0 width='100%'>\n";
2011-06-26 08:30:44 +00:00
if ( cpap ) {
2011-10-05 07:41:56 +00:00
// if ((*profile)["EnableGraphSnapshots"].toBool()) {
2011-08-25 06:11:44 +00:00
/* if (cpap->channelExists(CPAP_Pressure)) {
2011-08-07 11:37:56 +00:00
html + = ( " <tr><td colspan=4 align=center><i> " ) + tr ( " Time@Pressure " ) + ( " </i></td></tr> \n " ) ;
TAP - > setFixedSize ( gwwidth , 30 ) ;
QPixmap pixmap = TAP - > renderPixmap ( gwwidth , 30 , false ) ;
QByteArray byteArray ;
QBuffer buffer ( & byteArray ) ; // use buffer to store pixmap into byteArray
buffer . open ( QIODevice : : WriteOnly ) ;
pixmap . save ( & buffer , " PNG " ) ;
html + = " <tr><td colspan=4 align=center><img src= \" data:image/png;base64, " + byteArray . toBase64 ( ) + " \" ></td></tr> \n " ;
2011-07-28 18:02:51 +00:00
}
2011-08-07 11:37:56 +00:00
if ( cpap - > channelExists ( CPAP_EPAP ) ) {
//html+="<tr height='2'><td colspan=4 height='2'><hr></td></tr>\n";
html + = ( " <tr><td colspan=4 align=center><i> " ) + tr ( " Time@EPAP " ) + ( " </i></td></tr> \n " ) ;
TAP_EAP - > setFixedSize ( gwwidth , 30 ) ;
QPixmap pixmap = TAP_EAP - > renderPixmap ( gwwidth , 30 , false ) ;
QByteArray byteArray ;
QBuffer buffer ( & byteArray ) ; // use buffer to store pixmap into byteArray
buffer . open ( QIODevice : : WriteOnly ) ;
pixmap . save ( & buffer , " PNG " ) ;
html + = " <tr><td colspan=4 align=center><img src= \" data:image/png;base64, " + byteArray . toBase64 ( ) + " \" ></td></tr> \n " ;
}
if ( cpap - > channelExists ( CPAP_IPAP ) ) {
html + = ( " <tr><td colspan=4 align=center><i> " ) + tr ( " Time@IPAP " ) + ( " </i></td></tr> \n " ) ;
TAP_IAP - > setFixedSize ( gwwidth , 30 ) ;
QPixmap pixmap = TAP_IAP - > renderPixmap ( gwwidth , 30 , false ) ;
QByteArray byteArray ;
QBuffer buffer ( & byteArray ) ; // use buffer to store pixmap into byteArray
buffer . open ( QIODevice : : WriteOnly ) ;
pixmap . save ( & buffer , " PNG " ) ;
html + = " <tr><td colspan=4 align=center><img src= \" data:image/png;base64, " + byteArray . toBase64 ( ) + " \" ></td></tr> \n " ;
2011-08-25 06:11:44 +00:00
} */
2011-12-10 12:14:48 +00:00
html + = " </table><hr height=2> " ;
2011-08-25 06:11:44 +00:00
2011-09-04 13:09:21 +00:00
//}
2011-12-10 12:14:48 +00:00
html + = " <table cellpadding=0 cellspacing=0 border=0 width=100%> " ;
2011-07-02 14:35:50 +00:00
QDateTime fd , ld ;
2011-07-21 03:03:20 +00:00
bool corrupted_waveform = false ;
2011-12-03 08:52:24 +00:00
QString tooltip ;
2011-10-07 07:10:36 +00:00
if ( cpap ) {
2011-12-06 14:39:14 +00:00
html + = " <tr><td align=left><b>SessionID</b></td><td align=center><b>Date</b></td><td align=center><b>Start</b></td><td align=center><b>End</b></td></tr> " ;
html + = " <tr><td align=left colspan=4><i>CPAP Sessions</i></td></tr> " ;
2011-10-07 07:10:36 +00:00
for ( QVector < Session * > : : iterator s = cpap - > begin ( ) ; s ! = cpap - > end ( ) ; s + + ) {
fd = QDateTime : : fromTime_t ( ( * s ) - > first ( ) / 1000L ) ;
ld = QDateTime : : fromTime_t ( ( * s ) - > last ( ) / 1000L ) ;
2011-12-03 08:52:24 +00:00
int len = ( * s ) - > length ( ) / 1000L ;
int h = len / 3600 ;
int m = ( len / 60 ) % 60 ;
int s1 = len % 60 ;
2011-10-07 07:10:36 +00:00
QHash < ChannelID , QVariant > : : iterator i = ( * s ) - > settings . find ( " BrokenWaveform " ) ;
2011-12-03 08:52:24 +00:00
tooltip = cpap - > machine - > GetClass ( ) + " CPAP " + QString ( ) . sprintf ( " %2ih %2im %2is " , h , m , s1 ) ;
2011-10-07 07:10:36 +00:00
if ( ( i ! = ( * s ) - > settings . end ( ) ) & & i . value ( ) . toBool ( ) ) corrupted_waveform = true ;
2011-12-07 12:52:25 +00:00
tmp . sprintf ( ( " <tr><td align=left><a href='cpap=%i' title=' " + tooltip + " '>%08i</a></td><td align=center> " + fd . date ( ) . toString ( Qt : : SystemLocaleShortDate ) + " </td><td align=center> " + fd . toString ( " HH:mm " ) + " </td><td align=center> " + ld . toString ( " HH:mm " ) + " </td></tr> " ) . toLatin1 ( ) , ( * s ) - > session ( ) , ( * s ) - > session ( ) ) ;
2011-10-07 07:10:36 +00:00
html + = tmp ;
}
2011-12-06 14:39:14 +00:00
//if (oxi) html+="<tr><td colspan=4><hr></td></tr>";
2011-10-07 05:28:35 +00:00
}
2011-10-07 07:10:36 +00:00
if ( oxi ) {
2011-12-06 14:39:14 +00:00
html + = " <tr><td align=left colspan=4><i>Oximetry Sessions</i></td></tr> " ;
//html+="<tr><td align=left>SessionID</td><td align=center>Date</td><td align=center>Start</td><td align=center>End</td></tr>";
2011-10-07 07:10:36 +00:00
for ( QVector < Session * > : : iterator s = oxi - > begin ( ) ; s ! = oxi - > end ( ) ; s + + ) {
fd = QDateTime : : fromTime_t ( ( * s ) - > first ( ) / 1000L ) ;
ld = QDateTime : : fromTime_t ( ( * s ) - > last ( ) / 1000L ) ;
2011-12-03 08:52:24 +00:00
int len = ( * s ) - > length ( ) / 1000L ;
int h = len / 3600 ;
int m = ( len / 60 ) % 60 ;
int s1 = len % 60 ;
2011-10-07 07:10:36 +00:00
QHash < ChannelID , QVariant > : : iterator i = ( * s ) - > settings . find ( " BrokenWaveform " ) ;
2011-12-03 08:52:24 +00:00
tooltip = oxi - > machine - > GetClass ( ) + " Oximeter " + QString ( ) . sprintf ( " %2ih, %2im, %2is " , h , m , s1 ) ;
2011-10-07 07:10:36 +00:00
if ( ( i ! = ( * s ) - > settings . end ( ) ) & & i . value ( ) . toBool ( ) ) corrupted_waveform = true ;
2011-12-06 14:39:14 +00:00
tmp . sprintf ( ( " <tr><td align=left><a href='oxi=%i' title=' " + tooltip + " '>%08i</a></td><td align=center> " + fd . date ( ) . toString ( Qt : : SystemLocaleShortDate ) + " </td><td align=center> " + fd . toString ( " HH:mm " ) + " </td><td align=center> " + ld . toString ( " HH:mm " ) + " </td></tr> " ) . toLatin1 ( ) , ( * s ) - > session ( ) , ( * s ) - > session ( ) ) ;
2011-10-07 07:10:36 +00:00
html + = tmp ;
}
2011-06-26 08:30:44 +00:00
}
2011-12-07 12:52:25 +00:00
html + = " </table> " ;
2011-07-21 03:03:20 +00:00
if ( corrupted_waveform ) {
html + = " <hr><div align=center><i>One or more waveform record for this session had faulty source data. Some waveform overlay points may not match up correctly.</i></div> " ;
}
2011-06-26 08:30:44 +00:00
}
2011-08-25 06:11:44 +00:00
html + = " </body></html> " ;
2011-06-26 08:30:44 +00:00
ui - > webView - > setHtml ( html ) ;
2011-09-17 15:41:31 +00:00
ui - > JournalNotes - > clear ( ) ;
2011-12-02 11:40:47 +00:00
ui - > bookmarkTable - > clear ( ) ;
ui - > bookmarkTable - > setRowCount ( 0 ) ;
QStringList sl ;
sl . append ( " Starts " ) ;
sl . append ( " Notes " ) ;
ui - > bookmarkTable - > setHorizontalHeaderLabels ( sl ) ;
2011-12-10 15:24:45 +00:00
ui - > ZombieMeter - > blockSignals ( true ) ;
ui - > weightSpinBox - > blockSignals ( true ) ;
ui - > ouncesSpinBox - > blockSignals ( true ) ;
2011-12-02 11:40:47 +00:00
ui - > weightSpinBox - > setValue ( 0 ) ;
2011-12-02 13:48:05 +00:00
ui - > ouncesSpinBox - > setValue ( 0 ) ;
2011-12-10 12:14:48 +00:00
ui - > ZombieMeter - > setValue ( 5 ) ;
2011-12-10 15:24:45 +00:00
ui - > ouncesSpinBox - > blockSignals ( false ) ;
ui - > weightSpinBox - > blockSignals ( false ) ;
ui - > ZombieMeter - > blockSignals ( false ) ;
2011-12-03 01:05:17 +00:00
ui - > BMI - > display ( 0 ) ;
ui - > BMI - > setVisible ( false ) ;
ui - > BMIlabel - > setVisible ( false ) ;
2011-12-02 14:18:47 +00:00
BookmarksChanged = false ;
2011-06-26 08:30:44 +00:00
Session * journal = GetJournalSession ( date ) ;
if ( journal ) {
2011-12-02 11:40:47 +00:00
bool ok ;
if ( journal - > settings . contains ( Journal_Notes ) )
ui - > JournalNotes - > setHtml ( journal - > settings [ Journal_Notes ] . toString ( ) ) ;
2011-12-02 13:48:05 +00:00
if ( journal - > settings . contains ( " Weight " ) ) {
double kg = journal - > settings [ " Weight " ] . toDouble ( & ok ) ;
if ( PROFILE [ " Units " ] . toString ( ) = = " metric " ) {
ui - > weightSpinBox - > setDecimals ( 3 ) ;
2011-12-10 15:24:45 +00:00
ui - > weightSpinBox - > blockSignals ( true ) ;
2011-12-02 13:48:05 +00:00
ui - > weightSpinBox - > setValue ( kg ) ;
2011-12-10 15:24:45 +00:00
ui - > weightSpinBox - > blockSignals ( false ) ;
2011-12-02 13:48:05 +00:00
ui - > ouncesSpinBox - > setVisible ( false ) ;
ui - > weightSpinBox - > setSuffix ( " Kg " ) ;
} else {
float ounces = ( kg * 1000.0 ) / ounce_convert ;
int pounds = ounces / 16.0 ;
double oz ;
double frac = modf ( ounces , & oz ) ;
ounces = ( int ( ounces ) % 16 ) + frac ;
2011-12-10 15:24:45 +00:00
ui - > weightSpinBox - > blockSignals ( true ) ;
ui - > ouncesSpinBox - > blockSignals ( true ) ;
2011-12-02 13:48:05 +00:00
ui - > weightSpinBox - > setValue ( pounds ) ;
ui - > ouncesSpinBox - > setValue ( ounces ) ;
2011-12-10 15:24:45 +00:00
ui - > ouncesSpinBox - > blockSignals ( false ) ;
ui - > weightSpinBox - > blockSignals ( false ) ;
2011-12-02 13:48:05 +00:00
ui - > weightSpinBox - > setSuffix ( " lb " ) ;
ui - > weightSpinBox - > setDecimals ( 0 ) ;
ui - > ouncesSpinBox - > setVisible ( true ) ;
ui - > ouncesSpinBox - > setSuffix ( " oz " ) ;
}
2011-12-03 01:05:17 +00:00
double height = PROFILE [ " Height " ] . toDouble ( & ok ) / 100.0 ;
if ( height > 0 & & kg > 0 ) {
//double bmi=kg/(height*height);
ui - > BMI - > setVisible ( true ) ;
ui - > BMIlabel - > setVisible ( true ) ;
//ui->BMI->display(bmi);
}
2011-12-02 13:48:05 +00:00
}
2011-12-02 11:40:47 +00:00
2011-12-10 15:24:45 +00:00
if ( journal - > settings . contains ( " ZombieMeter " ) ) {
ui - > ZombieMeter - > blockSignals ( true ) ;
2011-12-02 11:40:47 +00:00
ui - > ZombieMeter - > setValue ( journal - > settings [ " ZombieMeter " ] . toDouble ( & ok ) ) ;
2011-12-10 15:24:45 +00:00
ui - > ZombieMeter - > blockSignals ( false ) ;
}
2011-12-02 11:40:47 +00:00
if ( journal - > settings . contains ( " BookmarkStart " ) ) {
QVariantList start = journal - > settings [ " BookmarkStart " ] . toList ( ) ;
QVariantList end = journal - > settings [ " BookmarkEnd " ] . toList ( ) ;
QStringList notes = journal - > settings [ " BookmarkNotes " ] . toStringList ( ) ;
bool ok ;
for ( int i = 0 ; i < start . size ( ) ; i + + ) {
qint64 st = start . at ( i ) . toLongLong ( & ok ) ;
qint64 et = end . at ( i ) . toLongLong ( & ok ) ;
QDateTime d = QDateTime : : fromTime_t ( st / 1000L ) ;
//int row=ui->bookmarkTable->rowCount();
ui - > bookmarkTable - > insertRow ( i ) ;
QTableWidgetItem * tw = new QTableWidgetItem ( notes . at ( i ) ) ;
QTableWidgetItem * dw = new QTableWidgetItem ( d . time ( ) . toString ( " HH:mm:ss " ) ) ;
dw - > setFlags ( Qt : : ItemIsSelectable | Qt : : ItemIsEnabled ) ;
ui - > bookmarkTable - > setItem ( i , 0 , dw ) ;
ui - > bookmarkTable - > setItem ( i , 1 , tw ) ;
tw - > setData ( Qt : : UserRole , st ) ;
tw - > setData ( Qt : : UserRole + 1 , et ) ;
}
}
2011-09-17 15:41:31 +00:00
}
2011-07-28 12:13:28 +00:00
2011-06-26 08:30:44 +00:00
}
2011-12-02 13:48:05 +00:00
void Daily : : UnitsChanged ( )
{
double kg ;
if ( PROFILE [ " Units " ] . toString ( ) ! = " metric " ) {
kg = ui - > weightSpinBox - > value ( ) ;
float ounces = ( kg * 1000.0 ) / ounce_convert ;
int pounds = ounces / 16 ;
float oz = fmodf ( ounces , 16 ) ;
ui - > weightSpinBox - > setValue ( pounds ) ;
ui - > ouncesSpinBox - > setValue ( oz ) ;
ui - > weightSpinBox - > setDecimals ( 0 ) ;
ui - > weightSpinBox - > setSuffix ( " lb " ) ;
ui - > ouncesSpinBox - > setVisible ( true ) ;
ui - > ouncesSpinBox - > setSuffix ( " oz " ) ;
} else {
kg = ( ui - > weightSpinBox - > value ( ) * ( ounce_convert * 16.0 ) ) + ( ui - > ouncesSpinBox - > value ( ) * ounce_convert ) ;
kg / = 1000.0 ;
ui - > weightSpinBox - > setDecimals ( 3 ) ;
ui - > weightSpinBox - > setValue ( kg ) ;
ui - > ouncesSpinBox - > setVisible ( false ) ;
ui - > weightSpinBox - > setSuffix ( " Kg " ) ;
}
}
2011-06-26 08:30:44 +00:00
void Daily : : Unload ( QDate date )
{
2011-09-17 15:41:31 +00:00
Session * journal = GetJournalSession ( date ) ;
2011-06-26 08:30:44 +00:00
2011-12-02 11:40:47 +00:00
bool nonotes = ui - > JournalNotes - > toPlainText ( ) . isEmpty ( ) ;
bool ok ;
if ( journal ) {
QString jhtml = ui - > JournalNotes - > toHtml ( ) ;
2011-12-02 11:48:02 +00:00
if ( ( ! journal - > settings . contains ( Journal_Notes ) & & ! nonotes ) | | ( journal - > settings [ Journal_Notes ] ! = jhtml ) ) {
2011-09-17 15:41:31 +00:00
journal - > settings [ Journal_Notes ] = jhtml ;
2011-06-26 08:30:44 +00:00
journal - > SetChanged ( true ) ;
}
2011-12-08 11:41:44 +00:00
//double w=ui->weightSpinBox->value();
2011-12-04 09:48:17 +00:00
if ( journal - > settings . contains ( " Weight " ) & & ui - > weightSpinBox - > value ( ) = = 0 ) {
journal - > settings . erase ( journal - > settings . find ( " Weight " ) ) ;
if ( journal - > settings . contains ( " BMI " ) ) {
journal - > settings . erase ( journal - > settings . find ( " BMI " ) ) ;
}
journal - > SetChanged ( true ) ;
} else if ( ui - > weightSpinBox - > value ( ) > 0 ) {
2011-12-02 13:48:05 +00:00
double kg ;
if ( PROFILE [ " Units " ] . toString ( ) = = " metric " ) {
kg = ui - > weightSpinBox - > value ( ) ;
} else {
kg = ( ui - > weightSpinBox - > value ( ) * ( ounce_convert * 16.0 ) ) + ( ui - > ouncesSpinBox - > value ( ) * ounce_convert ) ;
kg / = 1000.0 ;
}
2011-12-04 09:48:17 +00:00
double height = PROFILE [ " Height " ] . toDouble ( & ok ) / 100.0 ;
double bmi = 0 ;
if ( height > 0 )
bmi = kg / ( height * height ) ;
journal - > settings [ " Weight " ] = kg ;
journal - > settings [ " BMI " ] = bmi ;
journal - > SetChanged ( true ) ;
2011-12-02 11:40:47 +00:00
}
2011-12-10 12:14:48 +00:00
if ( ( ! journal - > settings . contains ( " ZombieMeter " ) & & ( ui - > ZombieMeter - > value ( ) ! = 5 ) ) | | ( journal - > settings [ " ZombieMeter " ] . toDouble ( & ok ) ! = ui - > ZombieMeter - > value ( ) ) ) {
2011-12-02 11:40:47 +00:00
journal - > settings [ " ZombieMeter " ] = ui - > ZombieMeter - > value ( ) ;
journal - > SetChanged ( true ) ;
}
2011-12-02 14:18:47 +00:00
if ( BookmarksChanged ) {
2011-12-02 11:40:47 +00:00
QVariantList start ;
QVariantList end ;
QStringList notes ;
QTableWidgetItem * item ;
for ( int row = 0 ; row < ui - > bookmarkTable - > rowCount ( ) ; row + + ) {
item = ui - > bookmarkTable - > item ( row , 1 ) ;
start . push_back ( item - > data ( Qt : : UserRole ) ) ;
end . push_back ( item - > data ( Qt : : UserRole + 1 ) ) ;
notes . push_back ( item - > text ( ) ) ;
}
journal - > settings [ " BookmarkStart " ] = start ;
journal - > settings [ " BookmarkEnd " ] = end ;
journal - > settings [ " BookmarkNotes " ] = notes ;
}
} else {
if ( ! nonotes | | ZombieMeterMoved | | ( ui - > weightSpinBox - > value ( ) > 0 ) | | ( ui - > bookmarkTable - > rowCount ( ) > 0 ) ) {
journal = CreateJournalSession ( date ) ;
if ( ! nonotes ) {
journal - > settings [ Journal_Notes ] = ui - > JournalNotes - > toHtml ( ) ;
journal - > SetChanged ( true ) ;
}
if ( ZombieMeterMoved ) {
journal - > settings [ " ZombieMeter " ] = ui - > ZombieMeter - > value ( ) ;
journal - > SetChanged ( true ) ;
}
if ( ui - > weightSpinBox - > value ( ) > 0 ) {
2011-12-02 13:48:05 +00:00
double kg ;
if ( PROFILE [ " Units " ] . toString ( ) = = " metric " ) {
kg = ui - > weightSpinBox - > value ( ) ;
} else {
kg = ( ui - > weightSpinBox - > value ( ) * ( ounce_convert * 16 ) ) + ( ui - > ouncesSpinBox - > value ( ) * ounce_convert ) ;
kg / = 1000.0 ;
}
2011-12-04 09:48:17 +00:00
double height = PROFILE [ " Height " ] . toDouble ( & ok ) / 100.0 ;
double bmi = 0 ;
if ( height > 0 )
bmi = kg / ( height * height ) ;
//if (kg>0) {
2011-12-03 01:05:17 +00:00
journal - > settings [ " Weight " ] = kg ;
2011-12-04 09:48:17 +00:00
if ( bmi > 0 )
journal - > settings [ " BMI " ] = bmi ;
2011-12-03 01:05:17 +00:00
journal - > SetChanged ( true ) ;
2011-12-04 09:48:17 +00:00
//}
2011-12-02 11:40:47 +00:00
}
2011-12-02 14:18:47 +00:00
if ( BookmarksChanged ) {
2011-12-02 11:40:47 +00:00
QVariantList start ;
QVariantList end ;
QStringList notes ;
QTableWidgetItem * item ;
for ( int row = 0 ; row < ui - > bookmarkTable - > rowCount ( ) ; row + + ) {
item = ui - > bookmarkTable - > item ( row , 1 ) ;
start . push_back ( item - > data ( Qt : : UserRole ) ) ;
end . push_back ( item - > data ( Qt : : UserRole + 1 ) ) ;
notes . push_back ( item - > text ( ) ) ;
}
journal - > settings [ " BookmarkStart " ] = start ;
journal - > settings [ " BookmarkEnd " ] = end ;
journal - > settings [ " BookmarkNotes " ] = notes ;
}
}
2011-06-26 08:30:44 +00:00
}
2011-12-02 11:40:47 +00:00
2011-06-26 08:30:44 +00:00
if ( journal ) {
2011-12-02 11:48:02 +00:00
if ( nonotes ) {
QHash < ChannelID , QVariant > : : iterator it = journal - > settings . find ( Journal_Notes ) ;
if ( it ! = journal - > settings . end ( ) ) {
journal - > settings . erase ( it ) ;
}
}
2011-12-02 13:48:05 +00:00
if ( journal - > IsChanged ( ) ) {
mainwin - > getOverview ( ) - > ReloadGraphs ( ) ;
}
2011-10-05 07:41:56 +00:00
Machine * jm = PROFILE . GetMachine ( MT_JOURNAL ) ;
2011-06-26 08:30:44 +00:00
if ( jm ) jm - > SaveSession ( journal ) ;
2011-09-17 15:41:31 +00:00
}
2011-06-26 08:30:44 +00:00
UpdateCalendarDay ( date ) ;
}
void Daily : : on_JournalNotesItalic_clicked ( )
{
QTextCursor cursor = ui - > JournalNotes - > textCursor ( ) ;
if ( ! cursor . hasSelection ( ) )
cursor . select ( QTextCursor : : WordUnderCursor ) ;
QTextCharFormat format = cursor . charFormat ( ) ;
format . setFontItalic ( ! format . fontItalic ( ) ) ;
cursor . mergeCharFormat ( format ) ;
//ui->JournalNotes->mergeCurrentCharFormat(format);
}
void Daily : : on_JournalNotesBold_clicked ( )
{
QTextCursor cursor = ui - > JournalNotes - > textCursor ( ) ;
if ( ! cursor . hasSelection ( ) )
cursor . select ( QTextCursor : : WordUnderCursor ) ;
QTextCharFormat format = cursor . charFormat ( ) ;
int fw = format . fontWeight ( ) ;
if ( fw ! = QFont : : Bold )
format . setFontWeight ( QFont : : Bold ) ;
else
format . setFontWeight ( QFont : : Normal ) ;
cursor . mergeCharFormat ( format ) ;
//ui->JournalNotes->mergeCurrentCharFormat(format);
}
void Daily : : on_JournalNotesFontsize_activated ( int index )
{
QTextCursor cursor = ui - > JournalNotes - > textCursor ( ) ;
if ( ! cursor . hasSelection ( ) )
cursor . select ( QTextCursor : : WordUnderCursor ) ;
QTextCharFormat format = cursor . charFormat ( ) ;
QFont font = format . font ( ) ;
int fontsize = 10 ;
if ( index = = 1 ) fontsize = 15 ;
else if ( index = = 2 ) fontsize = 25 ;
font . setPointSize ( fontsize ) ;
format . setFont ( font ) ;
cursor . mergeCharFormat ( format ) ;
}
void Daily : : on_JournalNotesColour_clicked ( )
{
2011-06-27 15:00:00 +00:00
QColor col = QColorDialog : : getColor ( Qt : : black , this , tr ( " Pick a Colour " ) ) ; //,QColorDialog::NoButtons);
2011-06-26 08:30:44 +00:00
if ( ! col . isValid ( ) ) return ;
QTextCursor cursor = ui - > JournalNotes - > textCursor ( ) ;
if ( ! cursor . hasSelection ( ) )
cursor . select ( QTextCursor : : WordUnderCursor ) ;
QBrush b ( col ) ;
QPalette newPalette = palette ( ) ;
newPalette . setColor ( QPalette : : ButtonText , col ) ;
ui - > JournalNotesColour - > setPalette ( newPalette ) ;
QTextCharFormat format = cursor . charFormat ( ) ;
format . setForeground ( b ) ;
cursor . setCharFormat ( format ) ;
}
Session * Daily : : CreateJournalSession ( QDate date )
{
2011-10-05 07:41:56 +00:00
Machine * m = PROFILE . GetMachine ( MT_JOURNAL ) ;
2011-06-26 08:30:44 +00:00
if ( ! m ) {
2011-10-05 07:41:56 +00:00
m = new Machine ( p_profile , 0 ) ;
2011-06-26 08:30:44 +00:00
m - > SetClass ( " Journal " ) ;
m - > properties [ " Brand " ] = " Virtual " ;
m - > SetType ( MT_JOURNAL ) ;
2011-10-05 07:41:56 +00:00
PROFILE . AddMachine ( m ) ;
2011-06-26 08:30:44 +00:00
}
Session * sess = new Session ( m , 0 ) ;
2011-09-03 01:24:11 +00:00
QDateTime dt ( date , QTime ( 17 , 0 ) ) ;
//dt.setDate(date);
//dt.setTime(QTime(17,0)); //5pm to make sure it goes in the right day
2011-09-01 13:07:26 +00:00
sess - > set_first ( qint64 ( dt . toTime_t ( ) ) * 1000L ) ;
2011-06-26 08:30:44 +00:00
dt = dt . addSecs ( 3600 ) ;
2011-09-01 13:07:26 +00:00
sess - > set_last ( qint64 ( dt . toTime_t ( ) ) * 1000L ) ;
2011-06-26 08:30:44 +00:00
sess - > SetChanged ( true ) ;
2011-10-05 07:41:56 +00:00
m - > AddSession ( sess , p_profile ) ;
2011-06-26 08:30:44 +00:00
return sess ;
}
Session * Daily : : GetJournalSession ( QDate date ) // Get the first journal session
{
2011-10-05 07:41:56 +00:00
Day * journal = PROFILE . GetDay ( date , MT_JOURNAL ) ;
2011-06-26 08:30:44 +00:00
if ( ! journal )
return NULL ; //CreateJournalSession(date);
2011-07-31 20:24:43 +00:00
QVector < Session * > : : iterator s ;
2011-06-26 08:30:44 +00:00
s = journal - > begin ( ) ;
if ( s ! = journal - > end ( ) )
return * s ;
return NULL ;
}
void Daily : : UpdateCPAPGraphs ( Day * day )
{
//if (!day) return;
if ( day ) {
day - > OpenEvents ( ) ;
}
2011-08-25 06:11:44 +00:00
for ( QList < Layer * > : : iterator g = CPAPData . begin ( ) ; g ! = CPAPData . end ( ) ; g + + ) {
2011-07-27 09:21:53 +00:00
( * g ) - > SetDay ( day ) ;
2011-06-26 08:30:44 +00:00
}
2011-09-21 14:10:10 +00:00
}
2011-06-26 08:30:44 +00:00
void Daily : : UpdateOXIGraphs ( Day * day )
{
//if (!day) return;
2011-07-27 10:47:50 +00:00
2011-06-26 08:30:44 +00:00
if ( day ) {
day - > OpenEvents ( ) ;
}
2011-08-25 06:11:44 +00:00
for ( QList < Layer * > : : iterator g = OXIData . begin ( ) ; g ! = OXIData . end ( ) ; g + + ) {
2011-07-27 09:21:53 +00:00
( * g ) - > SetDay ( day ) ;
2011-06-26 08:30:44 +00:00
}
2011-06-27 07:45:59 +00:00
}
void Daily : : RedrawGraphs ( )
{
2011-09-02 02:00:04 +00:00
GraphView - > updateGL ( ) ;
2011-06-27 07:45:59 +00:00
}
2011-06-26 08:30:44 +00:00
2011-11-27 22:36:38 +00:00
void Daily : : on_treeWidget_itemClicked ( QTreeWidgetItem * item , int column )
2011-06-26 08:30:44 +00:00
{
2011-12-02 14:36:40 +00:00
Q_UNUSED ( column ) ;
2011-06-26 08:30:44 +00:00
QDateTime d ;
if ( ! item - > text ( 1 ) . isEmpty ( ) ) {
d = d . fromString ( item - > text ( 1 ) , " yyyy-MM-dd HH:mm:ss " ) ;
2011-11-27 07:41:00 +00:00
int winsize = PROFILE [ " EventViewSize " ] . toInt ( ) * 60 ;
2011-11-18 08:33:31 +00:00
double st = qint64 ( ( d . addSecs ( - ( winsize / 2 ) ) ) . toTime_t ( ) ) * 1000L ;
double et = qint64 ( ( d . addSecs ( winsize / 2 ) ) . toTime_t ( ) ) * 1000L ;
2011-11-27 22:36:38 +00:00
gGraph * g = GraphView - > findGraph ( " Event Flags " ) ;
if ( ! g ) return ;
if ( st < g - > rmin_x ) {
st = g - > rmin_x ;
et = st + winsize * 1000 ;
2011-11-27 08:31:05 +00:00
}
2011-11-27 22:36:38 +00:00
if ( et > g - > rmax_x ) {
et = g - > rmax_x ;
st = et - winsize * 1000 ;
2011-11-27 08:31:05 +00:00
}
2011-08-25 06:11:44 +00:00
GraphView - > SetXBounds ( st , et ) ;
2011-06-26 08:30:44 +00:00
}
}
2011-06-28 01:51:21 +00:00
2011-11-27 22:36:38 +00:00
void Daily : : on_treeWidget_itemSelectionChanged ( )
{
if ( ui - > treeWidget - > selectedItems ( ) . size ( ) = = 0 ) return ;
QTreeWidgetItem * item = ui - > treeWidget - > selectedItems ( ) . at ( 0 ) ;
if ( ! item ) return ;
on_treeWidget_itemClicked ( item , 0 ) ;
}
2011-06-28 01:51:21 +00:00
void Daily : : on_JournalNotesUnderline_clicked ( )
{
QTextCursor cursor = ui - > JournalNotes - > textCursor ( ) ;
if ( ! cursor . hasSelection ( ) )
cursor . select ( QTextCursor : : WordUnderCursor ) ;
QTextCharFormat format = cursor . charFormat ( ) ;
format . setFontUnderline ( ! format . fontUnderline ( ) ) ;
cursor . mergeCharFormat ( format ) ;
//ui->JournalNotes->mergeCurrentCharFormat(format);
}
2011-10-30 02:46:17 +00:00
void Daily : : on_prevDayButton_clicked ( )
{
2011-10-30 09:29:04 +00:00
if ( ! PROFILE . ExistsAndTrue ( " SkipEmptyDays " ) ) {
2011-10-30 04:51:57 +00:00
LoadDate ( previous_date . addDays ( - 1 ) ) ;
} else {
QDate d = previous_date ;
for ( int i = 0 ; i < 90 ; i + + ) {
d = d . addDays ( - 1 ) ;
if ( PROFILE . GetDay ( d ) ) {
LoadDate ( d ) ;
break ;
}
2011-10-30 04:43:15 +00:00
}
}
2011-10-30 02:46:17 +00:00
}
void Daily : : on_nextDayButton_clicked ( )
{
2011-10-30 09:29:04 +00:00
if ( ! PROFILE . ExistsAndTrue ( " SkipEmptyDays " ) ) {
2011-10-30 04:51:57 +00:00
LoadDate ( previous_date . addDays ( 1 ) ) ;
} else {
QDate d = previous_date ;
for ( int i = 0 ; i < 90 ; i + + ) {
d = d . addDays ( 1 ) ;
if ( PROFILE . GetDay ( d ) ) {
LoadDate ( d ) ;
break ;
}
2011-10-30 04:43:15 +00:00
}
}
2011-10-30 02:46:17 +00:00
}
void Daily : : on_calButton_toggled ( bool checked )
{
2011-10-30 14:23:59 +00:00
//bool b=!ui->calendar->isVisible();
bool b = checked ;
2011-10-30 04:35:55 +00:00
ui - > calendar - > setVisible ( b ) ;
if ( ! b ) ui - > calButton - > setArrowType ( Qt : : DownArrow ) ;
2011-10-30 04:21:35 +00:00
else ui - > calButton - > setArrowType ( Qt : : UpArrow ) ;
2011-10-30 02:46:17 +00:00
}
2011-10-30 03:18:20 +00:00
void Daily : : on_todayButton_clicked ( )
{
QDate d = QDate : : currentDate ( ) ;
if ( d > PROFILE . LastDay ( ) ) d = PROFILE . LastDay ( ) ;
LoadDate ( d ) ;
}
2011-11-24 12:47:25 +00:00
2011-11-27 07:41:00 +00:00
void Daily : : on_evViewSlider_valueChanged ( int value )
{
ui - > evViewLCD - > display ( value ) ;
PROFILE [ " EventViewSize " ] = value ;
2011-11-27 08:00:20 +00:00
2011-11-27 08:31:05 +00:00
int winsize = PROFILE [ " EventViewSize " ] . toInt ( ) * 60 ;
if ( 0 ) {
/* if (ui->treeWidget->selectedItems().size()==0) return;
2011-11-27 08:00:20 +00:00
QTreeWidgetItem * item = ui - > treeWidget - > selectedItems ( ) . at ( 0 ) ;
if ( ! item ) return ;
QDateTime d ;
if ( ! item - > text ( 1 ) . isEmpty ( ) ) {
d = d . fromString ( item - > text ( 1 ) , " yyyy-MM-dd HH:mm:ss " ) ;
2011-11-27 08:31:05 +00:00
2011-11-27 08:00:20 +00:00
double st = qint64 ( ( d . addSecs ( - ( winsize / 2 ) ) ) . toTime_t ( ) ) * 1000L ;
double et = qint64 ( ( d . addSecs ( winsize / 2 ) ) . toTime_t ( ) ) * 1000L ;
2011-11-27 08:31:05 +00:00
2011-11-27 22:36:38 +00:00
gGraph * g = GraphView - > findGraph ( " Event Flags " ) ;
if ( ! g ) return ;
if ( st < g - > rmin_x ) {
st = g - > rmin_x ;
2011-11-27 08:00:20 +00:00
et = st + winsize * 1000 ;
}
2011-11-27 22:36:38 +00:00
if ( et > g - > rmax_x ) {
et = g - > rmax_x ;
2011-11-27 08:00:20 +00:00
st = et - winsize * 1000 ;
}
GraphView - > SetXBounds ( st , et ) ;
}
2011-11-27 08:31:05 +00:00
*/
} else {
2011-11-27 22:36:38 +00:00
gGraph * g = GraphView - > findGraph ( " Event Flags " ) ;
if ( ! g ) return ;
qint64 st = g - > min_x ;
qint64 et = g - > max_x ;
2011-11-27 08:31:05 +00:00
qint64 len = et - st ;
qint64 d = st + len / 2.0 ;
st = d - ( winsize / 2 ) * 1000 ;
et = d + ( winsize / 2 ) * 1000 ;
2011-11-27 22:36:38 +00:00
if ( st < g - > rmin_x ) {
st = g - > rmin_x ;
2011-11-27 08:31:05 +00:00
et = st + winsize * 1000 ;
}
2011-11-27 22:36:38 +00:00
if ( et > g - > rmax_x ) {
et = g - > rmax_x ;
2011-11-27 08:31:05 +00:00
st = et - winsize * 1000 ;
}
GraphView - > SetXBounds ( st , et ) ;
2011-11-27 08:00:20 +00:00
}
2011-11-27 07:41:00 +00:00
}
2011-12-01 15:40:32 +00:00
2011-12-02 11:40:47 +00:00
void Daily : : on_bookmarkTable_itemClicked ( QTableWidgetItem * item )
{
int row = item - > row ( ) ;
qint64 st , et ;
QTableWidgetItem * it = ui - > bookmarkTable - > item ( row , 1 ) ;
bool ok ;
st = it - > data ( Qt : : UserRole ) . toLongLong ( & ok ) ;
et = it - > data ( Qt : : UserRole + 1 ) . toLongLong ( & ok ) ;
GraphView - > SetXBounds ( st , et ) ;
GraphView - > updateGL ( ) ;
}
void Daily : : on_addBookmarkButton_clicked ( )
{
qint64 st , et ;
GraphView - > GetXBounds ( st , et ) ;
QDateTime d = QDateTime : : fromTime_t ( st / 1000L ) ;
int row = ui - > bookmarkTable - > rowCount ( ) ;
ui - > bookmarkTable - > insertRow ( row ) ;
QTableWidgetItem * tw = new QTableWidgetItem ( " Bookmark at " + d . time ( ) . toString ( " HH:mm:ss " ) ) ;
QTableWidgetItem * dw = new QTableWidgetItem ( d . time ( ) . toString ( " HH:mm:ss " ) ) ;
dw - > setFlags ( Qt : : ItemIsSelectable | Qt : : ItemIsEnabled ) ;
ui - > bookmarkTable - > setItem ( row , 0 , dw ) ;
ui - > bookmarkTable - > setItem ( row , 1 , tw ) ;
tw - > setData ( Qt : : UserRole , st ) ;
tw - > setData ( Qt : : UserRole + 1 , et ) ;
2011-12-02 14:18:47 +00:00
BookmarksChanged = true ;
2011-12-02 11:40:47 +00:00
//ui->bookmarkTable->setItem(row,2,new QTableWidgetItem(QString::number(st)));
//ui->bookmarkTable->setItem(row,3,new QTableWidgetItem(QString::number(et)));
}
void Daily : : on_removeBookmarkButton_clicked ( )
{
int row = ui - > bookmarkTable - > currentRow ( ) ;
if ( row > = 0 ) {
ui - > bookmarkTable - > removeRow ( row ) ;
2011-12-02 14:18:47 +00:00
BookmarksChanged = true ;
2011-12-02 11:40:47 +00:00
}
}
2011-12-10 15:24:45 +00:00
void Daily : : on_ZombieMeter_valueChanged ( int action )
2011-12-02 11:40:47 +00:00
{
2011-12-02 14:36:40 +00:00
Q_UNUSED ( action ) ;
2011-12-02 11:40:47 +00:00
ZombieMeterMoved = true ;
2011-12-10 15:24:45 +00:00
Session * journal = GetJournalSession ( previous_date ) ;
if ( ! journal ) {
journal = CreateJournalSession ( previous_date ) ;
}
journal - > settings [ " ZombieMeter " ] = ui - > ZombieMeter - > value ( ) ;
journal - > SetChanged ( true ) ;
gGraph * g ;
if ( mainwin - > getOverview ( ) ) {
g = mainwin - > getOverview ( ) - > graphView ( ) - > findGraph ( " Zombie " ) ;
if ( g ) g - > setDay ( NULL ) ;
//mainwin->getOverview()->RedrawGraphs();
}
2011-12-02 11:40:47 +00:00
}
2011-12-10 15:24:45 +00:00
void Daily : : on_ZombieMeter_actionTriggered ( int action )
{
}
2011-12-02 11:40:47 +00:00
2011-12-02 14:18:47 +00:00
void Daily : : on_bookmarkTable_itemChanged ( QTableWidgetItem * item )
{
Q_UNUSED ( item ) ;
BookmarksChanged = true ;
}
2011-12-03 01:05:17 +00:00
void Daily : : on_weightSpinBox_valueChanged ( double arg1 )
{
bool ok ;
double height = PROFILE [ " Height " ] . toDouble ( & ok ) / 100.0 ;
2011-12-10 15:24:45 +00:00
Session * journal = GetJournalSession ( previous_date ) ;
if ( ! journal ) {
journal = CreateJournalSession ( previous_date ) ;
}
2011-12-03 01:05:17 +00:00
double kg ;
if ( PROFILE [ " Units " ] . toString ( ) = = " metric " )
kg = arg1 ;
else {
kg = ( arg1 * pound_convert ) + ( ui - > ouncesSpinBox - > value ( ) * ounce_convert ) ;
}
2011-12-10 15:24:45 +00:00
journal - > settings [ " Weight " ] = kg ;
gGraphView * gv = mainwin - > getOverview ( ) - > graphView ( ) ;
gGraph * g ;
if ( gv ) {
g = gv - > findGraph ( " Weight " ) ;
if ( g ) g - > setDay ( NULL ) ;
}
2011-12-03 01:05:17 +00:00
if ( ( height > 0 ) & & ( kg > 0 ) ) {
double bmi = kg / ( height * height ) ;
ui - > BMI - > display ( bmi ) ;
2011-12-03 05:10:23 +00:00
ui - > BMI - > setVisible ( true ) ;
2011-12-10 15:24:45 +00:00
journal - > settings [ " BMI " ] = bmi ;
if ( gv ) {
g = gv - > findGraph ( " BMI " ) ;
if ( g ) g - > setDay ( NULL ) ;
}
2011-12-03 01:05:17 +00:00
}
2011-12-10 15:24:45 +00:00
journal - > SetChanged ( true ) ;
2011-12-03 01:05:17 +00:00
}
void Daily : : on_ouncesSpinBox_valueChanged ( int arg1 )
{
bool ok ;
2011-12-10 15:24:45 +00:00
Session * journal = GetJournalSession ( previous_date ) ;
if ( ! journal ) {
journal = CreateJournalSession ( previous_date ) ;
}
2011-12-03 01:05:17 +00:00
double height = PROFILE [ " Height " ] . toDouble ( & ok ) / 100.0 ;
double kg = ( ui - > weightSpinBox - > value ( ) * pound_convert ) + ( arg1 * ounce_convert ) ;
2011-12-10 15:24:45 +00:00
journal - > settings [ " Weight " ] = kg ;
gGraph * g ;
if ( mainwin - > getOverview ( ) ) {
g = mainwin - > getOverview ( ) - > graphView ( ) - > findGraph ( " Weight " ) ;
if ( g ) g - > setDay ( NULL ) ;
}
2011-12-03 01:05:17 +00:00
if ( ( height > 0 ) & & ( kg > 0 ) ) {
double bmi = kg / ( height * height ) ;
ui - > BMI - > display ( bmi ) ;
2011-12-03 05:10:23 +00:00
ui - > BMI - > setVisible ( true ) ;
2011-12-10 15:24:45 +00:00
journal - > settings [ " BMI " ] = bmi ;
if ( mainwin - > getOverview ( ) ) {
g = mainwin - > getOverview ( ) - > graphView ( ) - > findGraph ( " BMI " ) ;
if ( g ) g - > setDay ( NULL ) ;
}
2011-12-03 01:05:17 +00:00
}
2011-12-10 15:24:45 +00:00
journal - > SetChanged ( true ) ;
2011-12-03 01:05:17 +00:00
}