Converted PIE charts to new graphing system.

This commit is contained in:
Mark Watkins 2011-08-29 21:42:40 +10:00
parent 049f819644
commit 964d4dae7e
7 changed files with 122 additions and 132 deletions

View File

@ -948,7 +948,7 @@ void gGraphView::paintGL()
glVertex2f(0, height()); glVertex2f(0, height());
glVertex2f(0, 0); glVertex2f(0, 0);
glColor4f(0.3,0.3,1.0,1.0); // Gradient End glColor4f(0.6,0.6,1.0,1.0); // Gradient End
glVertex2f(width(), 0); glVertex2f(width(), 0);
glVertex2f(width(), height()); glVertex2f(width(), height());

View File

@ -39,7 +39,15 @@ void gLineChart::paint(gGraph & w,int left, int top, int width, int height)
EventDataType miny,maxy; EventDataType miny,maxy;
double minx,maxx; double minx,maxx;
miny=w.min_y, maxy=w.max_y, maxx=w.max_x, minx=w.min_x; miny=w.min_y, maxy=w.max_y;
if (w.blockZoom()) {
minx=w.rmin_x, maxx=w.rmax_x;
} else {
maxx=w.max_x, minx=w.min_x;
}
if (miny<0) { if (miny<0) {
miny=-MAX(fabs(miny),fabs(maxy)); miny=-MAX(fabs(miny),fabs(maxy));
} }
@ -82,7 +90,7 @@ void gLineChart::paint(gGraph & w,int left, int top, int width, int height)
double xmult=double(width)/xx; double xmult=double(width)/xx;
EventDataType yy=maxy-miny; EventDataType yy=maxy-miny;
EventDataType ymult=EventDataType(height-2)/yy; // time to pixel conversion multiplier EventDataType ymult=EventDataType(height-3)/yy; // time to pixel conversion multiplier
// Return on screwy min/max conditions // Return on screwy min/max conditions
if (xx<0) if (xx<0)
@ -246,7 +254,7 @@ void gLineChart::paint(gGraph & w,int left, int top, int width, int height)
} }
int xst=left+1; int xst=left+1;
int yst=top+height-1; int yst=top+height+1;
double time; double time;
EventDataType data; EventDataType data;

View File

@ -9,7 +9,7 @@
gSegmentChart::gSegmentChart(GraphSegmentType type,QColor gradient_color,QColor outline_color) gSegmentChart::gSegmentChart(GraphSegmentType type,QColor gradient_color,QColor outline_color)
:gLayer(EmptyChannel),m_graph_type(type),m_gradient_color(gradient_color),m_outline_color(outline_color) :Layer(EmptyChannel),m_graph_type(type),m_gradient_color(gradient_color),m_outline_color(outline_color)
{ {
// m_gradient_color=QColor(200,200,200); // m_gradient_color=QColor(200,200,200);
} }
@ -26,7 +26,7 @@ void gSegmentChart::AddSlice(ChannelID code,QColor color,QString name)
} }
void gSegmentChart::SetDay(Day *d) void gSegmentChart::SetDay(Day *d)
{ {
gLayer::SetDay(d); Layer::SetDay(d);
m_total=0; m_total=0;
if (!m_day) return; if (!m_day) return;
for (int c=0;c<m_codes.size();c++) { for (int c=0;c<m_codes.size();c++) {
@ -39,16 +39,27 @@ void gSegmentChart::SetDay(Day *d)
} }
} }
bool gSegmentChart::isEmpty()
{
bool res=true;
if (!m_day) return true;
for (int i=0;i<m_codes.size();i++) {
if (m_day->count(m_codes[i])>0) {
res=false;
break;
}
}
return res;
}
void gSegmentChart::Plot(gGraphWindow & w,float scrx,float scry) void gSegmentChart::paint(gGraph & w,int left, int top, int width, int height)
{ {
if (!m_visible) return; if (!m_visible) return;
if (!m_day) return; if (!m_day) return;
//if (!m_total) return; //if (!m_total) return;
int start_px=w.GetLeftMargin(); int start_px=left;
int start_py=w.GetBottomMargin(); int start_py=top;
int width=scrx-(w.GetLeftMargin()+w.GetRightMargin());
int height=scry-(w.GetTopMargin()+w.GetBottomMargin());
width--; width--;
float diameter=MIN(width,height); float diameter=MIN(width,height);
diameter-=8; diameter-=8;
@ -63,23 +74,24 @@ void gSegmentChart::Plot(gGraphWindow & w,float scrx,float scry)
float xmult=float(width)/float(m_total); float xmult=float(width)/float(m_total);
float ymult=float(height)/float(m_total); float ymult=float(height)/float(m_total);
float xp=w.GetLeftMargin(); float xp=left;
int xoffset=width/2; int xoffset=width/2;
int yoffset=height/2; int yoffset=height/2;
if (m_total==0) { if (m_total==0) {
w.qglColor(Qt::green); QColor col=Qt::green;
QString a=":-)"; QString a=":-)";
float x,y; float x,y;
GetTextExtent(a,x,y,bigfont); GetTextExtent(a,x,y,bigfont);
w.renderText(start_px+xoffset-x/2, scry-(start_py+yoffset-y/2),a,*bigfont);
w.renderText(a,start_px+xoffset-x/2, (start_py+yoffset-y/2),0,col,bigfont);
return; return;
} }
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND); glEnable(GL_BLEND);
glEnable(GL_LINE_SMOOTH); glEnable(GL_LINE_SMOOTH);
glLineWidth(1.5); glLineWidth(1.5);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
int data; int data;
unsigned size=m_values.size(); unsigned size=m_values.size();
float line_step=float(width)/float(size-1); float line_step=float(width)/float(size-1);
@ -102,41 +114,42 @@ void gSegmentChart::Plot(gGraphWindow & w,float scrx,float scry)
j=float(data)/float(m_total); // ratio of this pie slice j=float(data)/float(m_total); // ratio of this pie slice
// Draw Filling // Draw Filling
glPolygonMode(GL_BACK,GL_FILL);
glBegin(GL_POLYGON); glBegin(GL_POLYGON);
glPolygonMode(GL_BACK,GL_FILL);
w.qglColor(m_gradient_color); w.qglColor(m_gradient_color);
glVertex2f(start_px+xoffset, start_py+yoffset); glVertex2f(start_px+xoffset, start_py+height-yoffset);
w.qglColor(m_colors[m % m_colors.size()]); w.qglColor(m_colors[m % m_colors.size()]);
for (q=sum;q<sum+j;q+=step) { for (q=sum;q<sum+j;q+=step) {
px=start_px+xoffset+sin(q*2*M_PI)*radius; px=start_px+xoffset+sin(q*2*M_PI)*radius;
py=start_py+yoffset+cos(q*2*M_PI)*radius; py=start_py+height-(yoffset+cos(q*2*M_PI)*radius);
glVertex2f(px,py); glVertex2f(px,py);
} }
q=sum+j; q=sum+j;
px=start_px+xoffset+sin(q*2*M_PI)*radius; px=start_px+xoffset+sin(q*2*M_PI)*radius;
py=start_py+yoffset+cos(q*2*M_PI)*radius; py=start_py+height-(yoffset+cos(q*2*M_PI)*radius);
glVertex2f(px,py); glVertex2f(px,py);
glEnd(); glEnd();
// Draw Outline // Draw Outline
//m_outline_color=Qt::red;
w.qglColor(m_outline_color); w.qglColor(m_outline_color);
if (m_total>data) { // Draw the center point first if (m_total>data) { // Draw the center point first
glPolygonMode(GL_BACK,GL_LINE); //glPolygonMode(GL_BACK,GL_LINE);
glBegin(GL_POLYGON); glBegin(GL_LINE_LOOP);
glVertex2f(start_px+xoffset, start_py+yoffset); glVertex2f(start_px+xoffset, start_py+height-yoffset);
} else { // Only one entry, so just draw the circle } else { // Only one entry, so just draw the circle
glBegin(GL_LINE_LOOP); glBegin(GL_LINE_LOOP);
} }
for (q=sum;q<sum+j;q+=step) { for (q=sum;q<sum+j;q+=step) {
px=start_px+xoffset+sin(q*2*M_PI)*radius; px=start_px+xoffset+sin(q*2*M_PI)*radius;
py=start_py+yoffset+cos(q*2*M_PI)*radius; py=start_py+height-(yoffset+cos(q*2*M_PI)*radius);
glVertex2f(px,py); glVertex2f(px,py);
} }
double tpx=start_px+xoffset+sin((sum+(j/2.0))*2*M_PI)*(radius/1.7); double tpx=start_px+xoffset+sin((sum+(j/2.0))*2*M_PI)*(radius/1.7);
double tpy=start_py+yoffset+cos((sum+(j/2.0))*2*M_PI)*(radius/1.7); double tpy=start_py+height-(yoffset+cos((sum+(j/2.0))*2*M_PI)*(radius/1.7));
q=sum+j; q=sum+j;
px=start_px+xoffset+sin(q*2*M_PI)*radius; px=start_px+xoffset+sin(q*2*M_PI)*radius;
py=start_py+yoffset+cos(q*2*M_PI)*radius; py=start_py+height-(yoffset+cos(q*2*M_PI)*radius);
glVertex2f(px,py); glVertex2f(px,py);
glEnd(); glEnd();
@ -147,7 +160,7 @@ void gSegmentChart::Plot(gGraphWindow & w,float scrx,float scry)
QString a=m_names[m]; //QString::number(floor(100.0/m_total*data),'f',0)+"%"; QString a=m_names[m]; //QString::number(floor(100.0/m_total*data),'f',0)+"%";
float x,y; float x,y;
GetTextExtent(a,x,y); GetTextExtent(a,x,y);
w.renderText(tpx-(x/2.0),scry-(tpy-y/2.0),a); w.renderText(a,tpx-(x/2.0),(tpy+y/2.0));
} }
sum=q; sum=q;
@ -179,7 +192,7 @@ void gSegmentChart::Plot(gGraphWindow & w,float scrx,float scry)
if (!m_names[m].isEmpty()) { if (!m_names[m].isEmpty()) {
GetTextExtent(m_names[m],px,py); GetTextExtent(m_names[m],px,py);
if (px+5<bw) { if (px+5<bw) {
DrawText(w,m_names[m],(xp+bw/2)-(px/2),scry-((height/2)-(py/2)),0,Qt::black); w.renderText(m_names[m],(xp+bw/2)-(px/2),top+((height/2)-(py/2)),0,Qt::black);
} }
} }
@ -199,6 +212,8 @@ void gSegmentChart::Plot(gGraphWindow & w,float scrx,float scry)
if (m_graph_type==GST_Line) { if (m_graph_type==GST_Line) {
glEnd(); glEnd();
} }
glPolygonMode(GL_BACK,GL_FILL);
glDisable(GL_LINE_SMOOTH);
glDisable(GL_BLEND); glDisable(GL_BLEND);
} }
@ -214,7 +229,7 @@ gTAPGraph::~gTAPGraph()
} }
void gTAPGraph::SetDay(Day *d) void gTAPGraph::SetDay(Day *d)
{ {
gLayer::SetDay(d); Layer::SetDay(d);
m_total=0; m_total=0;
if (!m_day) return; if (!m_day) return;
QMap<EventStoreType,qint64> tap; QMap<EventStoreType,qint64> tap;

View File

@ -1,18 +1,19 @@
#ifndef GSEGMENTCHART_H #ifndef GSEGMENTCHART_H
#define GSEGMENTCHART_H #define GSEGMENTCHART_H
#include "graphlayer.h" #include "gGraphView.h"
enum GraphSegmentType { GST_Pie, GST_CandleStick, GST_Line }; enum GraphSegmentType { GST_Pie, GST_CandleStick, GST_Line };
class gSegmentChart : public gLayer class gSegmentChart : public Layer
{ {
public: public:
gSegmentChart(GraphSegmentType gt=GST_Pie, QColor gradient_color=Qt::white,QColor outline_color=Qt::black); gSegmentChart(GraphSegmentType gt=GST_Pie, QColor gradient_color=Qt::white,QColor outline_color=Qt::black);
virtual ~gSegmentChart(); virtual ~gSegmentChart();
virtual void Plot(gGraphWindow & w,float scrx,float scry); virtual void paint(gGraph & w,int left, int top, int width, int height);
virtual void SetDay(Day *d); virtual void SetDay(Day *d);
virtual bool isEmpty();
void AddSlice(ChannelID code,QColor col,QString name=""); void AddSlice(ChannelID code,QColor col,QString name="");
void setGradientColor(QColor & color) { m_gradient_color=color; } void setGradientColor(QColor & color) { m_gradient_color=color; }

132
daily.cpp
View File

@ -70,21 +70,37 @@ Daily::Daily(QWidget *parent,gGraphView * shared, MainWindow *mw)
layout->addWidget(GraphView,1); layout->addWidget(GraphView,1);
layout->addWidget(scrollbar,0); layout->addWidget(scrollbar,0);
SF=new gGraph(GraphView,"Event Flags",180); const int default_height=150;
FRW=new gGraph(GraphView,"Flow Rate",180); SF=new gGraph(GraphView,"Event Flags",default_height);
MP=new gGraph(GraphView,"Mask Pressure",180);
PRD=new gGraph(GraphView,"Pressure",180);
LEAK=new gGraph(GraphView,"Leak",180);
SNORE=new gGraph(GraphView,"Snore",180);
RR=new gGraph(GraphView,"Respiratory Rate",180);
TV=new gGraph(GraphView,"Tidal Volume",180);
MV=new gGraph(GraphView,"Minute Ventilation",180);
FLG=new gGraph(GraphView,"Flow Limitation",180);
PTB=new gGraph(GraphView,"Patient Trig. Breath",180);
PULSE=new gGraph(GraphView,"Pulse",180,1); // GAHI=new gGraph(GraphView,"Event Breakdown",default_height);
SPO2=new gGraph(GraphView,"SPO2",180,1); gSegmentChart * seg=new gSegmentChart(GST_Pie);
PLETHY=new gGraph(GraphView,"Plethy",180,1); seg->AddSlice(CPAP_Hypopnea,QColor(0x40,0x40,0xff,0xff),"H");
seg->AddSlice(CPAP_Apnea,QColor(0x20,0x80,0x20,0xff),"A");
seg->AddSlice(CPAP_Obstructive,QColor(0x40,0xaf,0xbf,0xff),"OA");
seg->AddSlice(CPAP_ClearAirway,QColor(0xb2,0x54,0xcd,0xff),"CA");
seg->AddSlice(CPAP_RERA,QColor(0xff,0xff,0x80,0xff),"RE");
seg->AddSlice(CPAP_FlowLimit,QColor(0x40,0x40,0x40,0xff),"FL");
SF->AddLayer(AddCPAP(seg),LayerRight,100);
FRW=new gGraph(GraphView,"Flow Rate",default_height);
MP=new gGraph(GraphView,"Mask Pressure",default_height);
PRD=new gGraph(GraphView,"Pressure",default_height);
LEAK=new gGraph(GraphView,"Leak",default_height);
SNORE=new gGraph(GraphView,"Snore",default_height);
RR=new gGraph(GraphView,"Respiratory Rate",default_height);
TV=new gGraph(GraphView,"Tidal Volume",default_height);
MV=new gGraph(GraphView,"Minute Ventilation",default_height);
FLG=new gGraph(GraphView,"Flow Limitation",default_height);
PTB=new gGraph(GraphView,"Patient Trig. Breath",default_height);
RE=new gGraph(GraphView,"Respiratory Event",default_height);
IE=new gGraph(GraphView,"I:E",default_height);
TE=new gGraph(GraphView,"Te",default_height);
TI=new gGraph(GraphView,"Ti",default_height);
PULSE=new gGraph(GraphView,"Pulse",default_height,1);
SPO2=new gGraph(GraphView,"SPO2",default_height,1);
PLETHY=new gGraph(GraphView,"Plethy",default_height,1);
gFlagsGroup *fg=new gFlagsGroup(); gFlagsGroup *fg=new gFlagsGroup();
@ -105,12 +121,6 @@ Daily::Daily(QWidget *parent,gGraphView * shared, MainWindow *mw)
//SF->AddLayer(new gFooBar(),LayerBottom,0,1); //SF->AddLayer(new gFooBar(),LayerBottom,0,1);
SF->AddLayer(new gXAxis(Qt::black,false),LayerBottom,0,gXAxis::Margin); SF->AddLayer(new gXAxis(Qt::black,false),LayerBottom,0,gXAxis::Margin);
PRD->AddLayer(new gXGrid());
PRD->AddLayer(AddCPAP(new gLineChart(CPAP_Pressure,QColor("dark green"),true)));
PRD->AddLayer(AddCPAP(new gLineChart(CPAP_EPAP,Qt::blue,true)));
PRD->AddLayer(AddCPAP(new gLineChart(CPAP_IPAP,Qt::red,true)));
PRD->AddLayer(new gYAxis(),LayerLeft,gYAxis::Margin);
PRD->AddLayer(new gXAxis(),LayerBottom,0,20);
gLineChart *l; gLineChart *l;
l=new gLineChart(CPAP_FlowRate,Qt::black,false,false); l=new gLineChart(CPAP_FlowRate,Qt::black,false,false);
@ -134,74 +144,35 @@ Daily::Daily(QWidget *parent,gGraphView * shared, MainWindow *mw)
FRW->AddLayer(AddCPAP(new gLineOverlayBar(CPAP_Obstructive,QColor("#40c0ff"),"OA"))); FRW->AddLayer(AddCPAP(new gLineOverlayBar(CPAP_Obstructive,QColor("#40c0ff"),"OA")));
FRW->AddLayer(AddCPAP(new gLineOverlayBar(CPAP_ClearAirway,QColor("purple"),"CA"))); FRW->AddLayer(AddCPAP(new gLineOverlayBar(CPAP_ClearAirway,QColor("purple"),"CA")));
LEAK->AddLayer(new gXGrid());
gGraph *graphs[]={ PRD, LEAK, SNORE, PTB, MP, RR, MV, TV, FLG, IE, TI, TE, SPO2, PLETHY, PULSE };
int ng=sizeof(graphs)/sizeof(gGraph*);
for (int i=0;i<ng;i++){
graphs[i]->AddLayer(new gXGrid());
}
PRD->AddLayer(AddCPAP(new gLineChart(CPAP_Pressure,QColor("dark green"),true)));
PRD->AddLayer(AddCPAP(new gLineChart(CPAP_EPAP,Qt::blue,true)));
PRD->AddLayer(AddCPAP(new gLineChart(CPAP_IPAP,Qt::red,true)));
LEAK->AddLayer(AddCPAP(new gLineChart(CPAP_Leak,Qt::darkYellow,true))); LEAK->AddLayer(AddCPAP(new gLineChart(CPAP_Leak,Qt::darkYellow,true)));
LEAK->AddLayer(new gYAxis(),LayerLeft,gYAxis::Margin);
LEAK->AddLayer(new gXAxis(),LayerBottom,0,20);
SNORE->AddLayer(new gXGrid());
SNORE->AddLayer(AddCPAP(new gLineChart(CPAP_Snore,Qt::darkGray,true))); SNORE->AddLayer(AddCPAP(new gLineChart(CPAP_Snore,Qt::darkGray,true)));
SNORE->AddLayer(new gYAxis(),LayerLeft,gYAxis::Margin);
SNORE->AddLayer(new gXAxis(),LayerBottom,0,20);
PTB->AddLayer(new gXGrid());
PTB->AddLayer(AddCPAP(new gLineChart(CPAP_PatientTriggeredBreaths,Qt::gray,true))); PTB->AddLayer(AddCPAP(new gLineChart(CPAP_PatientTriggeredBreaths,Qt::gray,true)));
PTB->AddLayer(new gYAxis(),LayerLeft,gYAxis::Margin);
PTB->AddLayer(new gXAxis(),LayerBottom,0,20);
MP->AddLayer(new gXGrid());
MP->AddLayer(AddCPAP(new gLineChart(CPAP_MaskPressure,Qt::blue,false))); MP->AddLayer(AddCPAP(new gLineChart(CPAP_MaskPressure,Qt::blue,false)));
MP->AddLayer(new gYAxis(),LayerLeft,gYAxis::Margin);
MP->AddLayer(new gXAxis(),LayerBottom,0,20);
RR->AddLayer(new gXGrid());
RR->AddLayer(AddCPAP(new gLineChart(CPAP_RespiratoryRate,Qt::darkMagenta,true))); RR->AddLayer(AddCPAP(new gLineChart(CPAP_RespiratoryRate,Qt::darkMagenta,true)));
RR->AddLayer(new gYAxis(),LayerLeft,gYAxis::Margin);
RR->AddLayer(new gXAxis(),LayerBottom,0,20);
MV->AddLayer(new gXGrid());
MV->AddLayer(AddCPAP(new gLineChart(CPAP_MinuteVentilation,Qt::darkCyan,true))); MV->AddLayer(AddCPAP(new gLineChart(CPAP_MinuteVentilation,Qt::darkCyan,true)));
MV->AddLayer(new gYAxis(),LayerLeft,gYAxis::Margin);
MV->AddLayer(new gXAxis(),LayerBottom,0,20);
TV->AddLayer(new gXGrid());
TV->AddLayer(AddCPAP(new gLineChart(CPAP_TidalVolume,Qt::magenta,true))); TV->AddLayer(AddCPAP(new gLineChart(CPAP_TidalVolume,Qt::magenta,true)));
TV->AddLayer(new gYAxis(),LayerLeft,gYAxis::Margin);
TV->AddLayer(new gXAxis(),LayerBottom,0,20);
FLG->AddLayer(new gXGrid());
FLG->AddLayer(AddCPAP(new gLineChart(CPAP_FlowLimitGraph,Qt::darkBlue,true))); FLG->AddLayer(AddCPAP(new gLineChart(CPAP_FlowLimitGraph,Qt::darkBlue,true)));
FLG->AddLayer(new gYAxis(),LayerLeft,gYAxis::Margin); //RE->AddLayer(AddCPAP(new gLineChart(CPAP_RespiratoryEvent,Qt::magenta,true)));
FLG->AddLayer(new gXAxis(),LayerBottom,0,20); IE->AddLayer(AddCPAP(new gLineChart(CPAP_IE,Qt::darkRed,true)));
TE->AddLayer(AddCPAP(new gLineChart(CPAP_Te,Qt::darkGreen,true)));
TI->AddLayer(AddCPAP(new gLineChart(CPAP_Ti,Qt::darkBlue,true)));
PULSE->AddLayer(new gXGrid());
PULSE->AddLayer(AddOXI(new gLineChart(OXI_Pulse,Qt::red,true))); PULSE->AddLayer(AddOXI(new gLineChart(OXI_Pulse,Qt::red,true)));
PULSE->AddLayer(new gYAxis(),LayerLeft,gYAxis::Margin);
PULSE->AddLayer(new gXAxis(),LayerBottom,0,20);
SPO2->AddLayer(new gXGrid());
SPO2->AddLayer(AddOXI(new gLineChart(OXI_SPO2,Qt::blue,true))); SPO2->AddLayer(AddOXI(new gLineChart(OXI_SPO2,Qt::blue,true)));
SPO2->AddLayer(new gYAxis(),LayerLeft,gYAxis::Margin);
SPO2->AddLayer(new gXAxis(),LayerBottom,0,20);
PLETHY->AddLayer(new gXGrid());
PLETHY->AddLayer(AddOXI(new gLineChart(OXI_Plethysomogram,Qt::darkBlue,false))); PLETHY->AddLayer(AddOXI(new gLineChart(OXI_Plethysomogram,Qt::darkBlue,false)));
PLETHY->AddLayer(new gYAxis(),LayerLeft,gYAxis::Margin);
PLETHY->AddLayer(new gXAxis(),LayerBottom,0,20);
for (int i=0;i<ng;i++){
//AddGraph(SF); graphs[i]->AddLayer(new gYAxis(),LayerLeft,gYAxis::Margin);
//AddGraph(FRW); graphs[i]->AddLayer(new gXAxis(),LayerBottom,0,20);
//AddGraph(PRD); }
NoData=new QLabel(tr("No data"),ui->graphMainArea);
NoData->setAlignment(Qt::AlignCenter);
QFont font("Sans Serif",20); //NoData->font();
//font.setBold(true);
NoData->setFont(font);
layout->addWidget(NoData,0);
NoData->hide();
layout->layout(); layout->layout();
@ -494,15 +465,6 @@ Daily::Daily(QWidget *parent,gGraphView * shared, MainWindow *mw)
TAP->hide(); TAP->hide();
TAP->SetGradientBackground(false); TAP->SetGradientBackground(false);
G_AHI->SetMargins(0,0,0,0);
seg=new gSegmentChart(GST_Pie);
seg->AddSlice(CPAP_Hypopnea,QColor(0x40,0x40,0xff,0xff),"H");
seg->AddSlice(CPAP_Apnea,QColor(0x20,0x80,0x20,0xff),"A");
seg->AddSlice(CPAP_Obstructive,QColor(0x40,0xaf,0xbf,0xff),"OA");
seg->AddSlice(CPAP_ClearAirway,QColor(0xb2,0x54,0xcd,0xff),"CA");
seg->AddSlice(CPAP_RERA,QColor(0xff,0xff,0x80,0xff),"RE");
seg->AddSlice(CPAP_FlowLimit,QColor(0x40,0x40,0x40,0xff),"FL");
G_AHI->AddLayer(AddCPAP(seg));
G_AHI->SetGradientBackground(false); G_AHI->SetGradientBackground(false);
G_AHI->hide(); G_AHI->hide();

14
daily.h
View File

@ -68,18 +68,10 @@ private:
void UpdateCalendarDay(QDate date); void UpdateCalendarDay(QDate date);
void UpdateEventsTree(QTreeWidget * tree,Day *day); void UpdateEventsTree(QTreeWidget * tree,Day *day);
//gLineChart *frw,*prd,*leak,*pr_ipap,*pr_epap,*snore,*pulse,*spo2,*rr,*mv,*tv,*mp,*flg,*ptb; gGraph *PRD,*FRW,*GAHI,*TAP,*LEAK,*SF,*TAP_EAP,*TAP_IAP,*PULSE,*SPO2,
//gPointData *tap,*tap_eap,*tap_iap,*g_ahi,*frw,*prd,*leak,*pressure_iap,*pressure_eap,*snore;
//gPointData *pulse,*spo2,*rr,*mv,*tv,*mp,*flg,*ptb;
//gFlagsGroup *fg;
gGraph *PRD,*FRW,*G_AHI,*TAP,*LEAK,*SF,*TAP_EAP,*TAP_IAP,*PULSE,*SPO2,
*SNORE,*RR,*MP,*MV,*TV,*FLG,*PTB,*OF,*INTPULSE,*INTSPO2, *THPR, *SNORE,*RR,*MP,*MV,*TV,*FLG,*PTB,*OF,*INTPULSE,*INTSPO2, *THPR,
*PLETHY,*TI,*TE, *RE, *IE; *PLETHY,*TI,*TE, *RE, *IE;
//gLineChart *pressure, *epap, *ipap;
QList<Layer *> OXIData; QList<Layer *> OXIData;
QList<Layer *> CPAPData; QList<Layer *> CPAPData;
//QVector<gGraph *> Graphs; //QVector<gGraph *> Graphs;
@ -99,10 +91,8 @@ private:
QDate previous_date; QDate previous_date;
//QScrollArea *scrollArea; //QScrollArea *scrollArea;
//QVBoxLayout *splitter; //QVBoxLayout *splitter;
QLabel *NoData;
QWidget *spacer;
QMenu *show_graph_menu; QMenu *show_graph_menu;
QWidget *GraphLayout;
gGraphView *GraphView; gGraphView *GraphView;
MyScrollBar *scrollbar; MyScrollBar *scrollbar;
QHBoxLayout *layout; QHBoxLayout *layout;

View File

@ -107,6 +107,7 @@ Oximetry::Oximetry(QWidget *parent,gGraphView * shared) :
PULSE->AddLayer(pulse); PULSE->AddLayer(pulse);
SPO2->AddLayer(spo2); SPO2->AddLayer(spo2);
GraphView->setEmptyText("");
GraphView->updateGL(); GraphView->updateGL();
on_RefreshPortsButton_clicked(); on_RefreshPortsButton_clicked();
@ -202,6 +203,8 @@ void Oximetry::on_RunButton_toggled(bool checked)
ev_plethy->setLast(lasttime+3600000); ev_plethy->setLast(lasttime+3600000);
PLETHY->SetMinX(lasttime); PLETHY->SetMinX(lasttime);
PLETHY->SetMaxX(lasttime+30000); PLETHY->SetMaxX(lasttime+30000);
CONTROL->SetMinX(lasttime);
CONTROL->SetMaxX(lasttime+30000);
ev_pulse->setFirst(lasttime); ev_pulse->setFirst(lasttime);
ev_pulse->setLast(lasttime+3600000); ev_pulse->setLast(lasttime+3600000);
@ -263,9 +266,14 @@ void Oximetry::on_RunButton_toggled(bool checked)
PLETHY->MinX(); PLETHY->MinX();
PLETHY->MaxX(); PLETHY->MaxX();
//GraphView->ResetBounds(); //GraphView->ResetBounds();
CONTROL->SetMinX(ev_plethy->first()); //CONTROL->SetMinX(PLETHY->MinX());
CONTROL->SetMaxX(lasttime); //CONTROL->SetMaxX(PLETHY->MaxX());
CONTROL->ResetBounds(); //CONTROL->SetMinY(ev_plethy->min());
//CONTROL->SetMaxY(ev_plethy->max());
CONTROL->MinX();
CONTROL->MaxX();
//CONTROL->ResetBounds();
qint64 d=session->length(); qint64 d=session->length();
// if (d<=30000) // if (d<=30000)
@ -366,6 +374,8 @@ void Oximetry::UpdatePlethy(qint8 d)
lasttime+=20; // 50 samples per second lasttime+=20; // 50 samples per second
PLETHY->SetMinY(ev_plethy->min()); PLETHY->SetMinY(ev_plethy->min());
PLETHY->SetMaxY(ev_plethy->max()); PLETHY->SetMaxY(ev_plethy->max());
CONTROL->SetMinY(ev_plethy->min());
CONTROL->SetMaxY(ev_plethy->max());
PULSE->SetMinY(ev_pulse->min()); PULSE->SetMinY(ev_pulse->min());
PULSE->SetMaxY(ev_pulse->max()); PULSE->SetMaxY(ev_pulse->max());
SPO2->SetMinY(ev_spo2->min()); SPO2->SetMinY(ev_spo2->min());
@ -377,10 +387,14 @@ void Oximetry::UpdatePlethy(qint8 d)
PULSE->SetMinX(lasttime-30000); PULSE->SetMinX(lasttime-30000);
SPO2->SetMaxX(lasttime); SPO2->SetMaxX(lasttime);
SPO2->SetMinX(lasttime-30000); SPO2->SetMinX(lasttime-30000);
CONTROL->SetMaxX(lasttime);
CONTROL->SetMinX(lasttime-30000);
session->set_last(lasttime); session->set_last(lasttime);
day->setLast(lasttime); day->setLast(lasttime);
PLETHY->MinX(); PLETHY->MinX();
PLETHY->MaxX(); PLETHY->MaxX();
CONTROL->MinX();
CONTROL->MaxX();
} }
bool Oximetry::UpdatePulse(qint8 pul) bool Oximetry::UpdatePulse(qint8 pul)
{ {
@ -438,7 +452,7 @@ void Oximetry::onReadyRead()
} }
} }
if ((ev_plethy->count()==1) || (ev_pulse->count()==1) || (ev_spo2->count()==1)) { if ((ev_plethy->count()<=2) || (ev_pulse->count()<=2) || (ev_spo2->count()<=2)) {
GraphView->updateScale(); GraphView->updateScale();
} }
GraphView->updateGL(); // damn... GraphView->updateGL(); // damn...