From eb2b12739539a2090e892884e198f945812c9f83 Mon Sep 17 00:00:00 2001 From: Mark Watkins Date: Fri, 22 Aug 2014 00:16:23 +1000 Subject: [PATCH] Minor cruft --- sleepyhead/Graphs/gGraphView.cpp | 27 ++-- sleepyhead/Graphs/gGraphView.h | 3 + sleepyhead/Graphs/gLineChart.cpp | 121 ++---------------- sleepyhead/SleepLib/common.cpp | 6 +- .../loader_plugins/cms50f37_loader.cpp | 6 +- sleepyhead/daily.cpp | 42 +++--- sleepyhead/icons/trophy.png | Bin 4575 -> 15460 bytes sleepyhead/mainwindow.ui | 12 +- sleepyhead/oximeterimport.cpp | 6 +- 9 files changed, 65 insertions(+), 158 deletions(-) diff --git a/sleepyhead/Graphs/gGraphView.cpp b/sleepyhead/Graphs/gGraphView.cpp index 47c1c6f9..d3c5e772 100644 --- a/sleepyhead/Graphs/gGraphView.cpp +++ b/sleepyhead/Graphs/gGraphView.cpp @@ -1238,23 +1238,23 @@ void gGraphView::paintGL() if (!graphs_drawn) { // No graphs drawn? show something useful :) QString txt = QObject::tr("SleepyHead is proudly brought to you by JediMark.").arg(VersionString); - int x2, y2; - GetTextExtent(m_emptytext, x2, y2, bigfont); - int tp2, tp1; +// int x2, y2; +// GetTextExtent(m_emptytext, x2, y2, bigfont); +// int tp2, tp1; if (!m_emptyimage.isNull()) { painter.drawPixmap(width() /2 - m_emptyimage.width() /2, height() /2 - m_emptyimage.height() /2 , m_emptyimage); - tp2 = height() /2 + m_emptyimage.height()/2 + y2; +// tp2 = height() /2 + m_emptyimage.height()/2 + y2; - } else { + } /*else { tp2 = height() / 2 + y2; - } + }*/ QColor col = Qt::black; painter.setPen(col); - painter.setFont(*bigfont); - painter.drawText((width() / 2) - x2 / 2, tp2, m_emptytext); +// painter.setFont(*bigfont); +// painter.drawText((width() / 2) - x2 / 2, tp2, m_emptytext); QRectF rec(0,0,width(),0); painter.setFont(*defaultfont); @@ -1262,7 +1262,11 @@ void gGraphView::paintGL() rec.moveBottom(height()-5); painter.drawText(rec, Qt::AlignHCenter | Qt::AlignBottom, txt); - + } + if (p_profile->appearance->lineCursorMode()) { + emit updateCurrentTime(graphs_drawn ? m_currenttime : 0.0F); + } else { + emit updateRange(graphs_drawn ? m_minx : 0.0F, m_maxx); } DrawTextQue(painter); @@ -1326,11 +1330,6 @@ void gGraphView::paintGL() redrawtimer->start(); } - if (p_profile->appearance->lineCursorMode()) { - emit updateCurrentTime(m_currenttime); - } else { - emit updateRange(m_minx, m_maxx); - } } QString gGraphView::getRangeString() diff --git a/sleepyhead/Graphs/gGraphView.h b/sleepyhead/Graphs/gGraphView.h index 247b5ae5..82bb2b2d 100644 --- a/sleepyhead/Graphs/gGraphView.h +++ b/sleepyhead/Graphs/gGraphView.h @@ -386,6 +386,9 @@ class gGraphView //! \brief Sets the message displayed when there are no graphs to draw void setEmptyText(QString s) { m_emptytext = s; } + //! \brief Returns the message displayed when there are no graphs to draw + QString emptyText() { return m_emptytext; } + //! \brief Sets the message displayed when there are no graphs to draw void setEmptyImage(QPixmap pm) { m_emptyimage = pm; } diff --git a/sleepyhead/Graphs/gLineChart.cpp b/sleepyhead/Graphs/gLineChart.cpp index 1772ab3b..3af368bd 100644 --- a/sleepyhead/Graphs/gLineChart.cpp +++ b/sleepyhead/Graphs/gLineChart.cpp @@ -222,92 +222,6 @@ skipcheck: } } -// for (int i=0; i< m_day->size(); ++i) { -// Session * sess = m_day->sessions.at(i); -// QHash >::iterator it; -// for (it = sess->eventlist.begin(); it != sess->eventlist.end(); ++it) { -// ChannelID code = it.key(); - -// if (flags.contains(code)) continue; - -// schema::Channel * chan = &schema::channel[code]; -// gLineOverlayBar * lob = nullptr; - -// if (chan->type() == schema::FLAG) { -// lob = new gLineOverlayBar(code, chan->defaultColor(), chan->label(), FT_Bar); -// } else if (chan->type() == schema::MINOR_FLAG) { -// lob = new gLineOverlayBar(code, chan->defaultColor(), chan->label(), FT_Dot); -// } else if (chan->type() == schema::SPAN) { -// lob = new gLineOverlayBar(code, chan->defaultColor(), chan->label(), FT_Span); -// } -// if (lob != nullptr) { -// lob->setOverlayDisplayType((m_codes[0] == CPAP_FlowRate) ? (OverlayDisplayType)p_profile->appearance->overlayType() : ODT_TopAndBottom); -// lob->SetDay(m_day); -// flags[code] = lob; -// } -// } -// } - -/* QList middles; - - middles.push_back(CPAP_RespRate); - middles.push_back(CPAP_TidalVolume); - middles.push_back(CPAP_MinuteVent); - middles.push_back(CPAP_Ti); - middles.push_back(CPAP_Te); - - - - CPAPMode mode = (CPAPMode)m_day->settings_wavg(CPAP_Mode); - float perc = p_profile->general->prefCalcPercentile(); - for (int i=0; ipercentile(code, perc / 100.0); - chan.setUpperThreshold(f); - chan.setUpperThresholdColor(darken(schema::channel[CPAP_Pressure].defaultColor())); - m_threshold.push_back(QString("%1% %2 %3").arg(perc, 0, 'f', 0).arg(chan.label()).arg(f,0,'f',2)); - } else { - chan.setUpperThreshold(0); - m_threshold.push_back(QString()); - } - } else if (code == CPAP_IPAP) { - if (mode >= MODE_BILEVEL_AUTO_FIXED_PS) { - float f = m_day->percentile(code,perc / 100.0); - chan.setUpperThreshold(f); - QColor color = darken(schema::channel[CPAP_IPAP].defaultColor()); - chan.setUpperThresholdColor(color); - m_threshold.push_back(QString("%1% %2").arg(perc, 0, 'f', 0).arg(chan.label()));//.arg(f,0,'f',2)); - } else { - chan.setUpperThreshold(0); - m_threshold.push_back(QString()); - } - } else if (code == CPAP_EPAP) { - if ((mode >= MODE_BILEVEL_AUTO_FIXED_PS) && (mode != MODE_ASV)) { - float f = m_day->percentile(code,perc / 100.0); - chan.setUpperThreshold(f); - QColor color = darken(schema::channel[CPAP_EPAP].defaultColor()); - chan.setUpperThresholdColor(color); - m_threshold.push_back(QString("%1% %2").arg(perc, 0, 'f', 0).arg(chan.label()));//.arg(f,0,'f',2)); - } else { - chan.setUpperThreshold(0); - m_threshold.push_back(QString()); - } - } else if (code == CPAP_Leak) { - m_threshold.push_back(QObject::tr("%1 threshold").arg(chan.label())); - } else if (middles.contains(code)) { - float f = m_day->calcMiddle(code); - - chan.setUpperThreshold(f); - chan.setUpperThresholdColor(darken(schema::channel[code].defaultColor())); - m_threshold.push_back(m_day->calcMiddleLabel(code)); - } else { - chan.setUpperThreshold(0); - m_threshold.push_back(QString()); - } - }*/ } EventDataType gLineChart::Miny() { @@ -602,30 +516,6 @@ void gLineChart::paint(QPainter &painter, gGraph &w, const QRegion ®ion) painter.drawLine(left + 1, y, left + 1 + width, y); } -// if (chan.upperThreshold() > 0) { -// QColor color = chan.upperThresholdColor(); -// color.setAlpha(200); -// painter.setPen(QPen(QBrush(color),1.5,Qt::DotLine)); - -// EventDataType y=top + height + 1 - ((chan.upperThreshold() - miny) * ymult); -// painter.drawLine(left + 1, y, left + 1 + width, y); -// } -// if (chan.lowerThreshold() > 0) { -// QColor color = chan.lowerThresholdColor(); -// color.setAlpha(200); -// painter.setPen(QPen(QBrush(color),1.5 ,Qt::DotLine)); - -// EventDataType y=top + height + 1 - ((chan.lowerThreshold() - miny) * ymult); -// painter.drawLine(left+1, y, left + 1 + width, y); -// } -// if (chan.id() == CPAP_FlowRate) { -// QColor color(Qt::red); -// color.setAlpha(200); -// painter.setPen(QPen(QBrush(color),1.5 ,Qt::DotLine)); - -// EventDataType y=top + height + 1 - ((0 - miny) * ymult); -// painter.drawLine(left+1, y, left + 1 + width, y); -// } } if (!m_enabled[code]) continue; @@ -634,6 +524,7 @@ void gLineChart::paint(QPainter &painter, gGraph &w, const QRegion ®ion) codepoints = 0; + // For each session... int daysize = m_day->size(); for (int svi = 0; svi < daysize; svi++) { Session *sess = (*m_day)[svi]; @@ -811,13 +702,15 @@ void gLineChart::paint(QPainter &painter, gGraph &w, const QRegion ®ion) time = el.time(idx) + drift; double rate = double(sr) * double(sam); EventStoreType *ptr = el.rawData() + idx; + if (siz > el.count()) + siz = el.count(); if (accel) { ////////////////////////////////////////////////////////////////// // Accelerated Waveform Plot ////////////////////////////////////////////////////////////////// - for (int i = idx; i < siz; i += sam, ptr += sam) { + for (int i = idx; i <= siz; i += sam, ptr += sam) { time += rate; // This is much faster than QVector access. data = *ptr + el.offset(); @@ -896,10 +789,12 @@ void gLineChart::paint(QPainter &painter, gGraph &w, const QRegion ®ion) data = (*ptr + el.offset()) * gain; lastpx = xst + ((time - minx) * xmult); lastpy = yst - ((data - miny) * ymult); + EventStoreType *eptr = ptr + el.count()-1; siz--; for (int i = idx; i < siz; i += sam) { ptr += sam; + if (ptr > eptr) break; time += rate; data = (*ptr + el.offset()) * gain; @@ -913,7 +808,7 @@ void gLineChart::paint(QPainter &painter, gGraph &w, const QRegion ®ion) lastpx = px; lastpy = py; - if (time > maxx) { + if (time >= maxx) { done = true; break; } @@ -938,7 +833,7 @@ void gLineChart::paint(QPainter &painter, gGraph &w, const QRegion ®ion) int idx = 0; if (siz > 15) { - + // Prime a bit... for (; idx < siz; ++idx) { time = start + *tptr++; diff --git a/sleepyhead/SleepLib/common.cpp b/sleepyhead/SleepLib/common.cpp index f2daa4fd..1b3f1bbb 100644 --- a/sleepyhead/SleepLib/common.cpp +++ b/sleepyhead/SleepLib/common.cpp @@ -348,11 +348,11 @@ void initializeStrings() STR_MessageBox_Busy = QObject::tr("Busy"); STR_MessageBox_PleaseNote = QObject::tr("Please Note"); - STR_Empty_NoData = QObject::tr(""); + STR_Empty_NoData = QObject::tr("No Data Available"); STR_Empty_Brick = QObject::tr("Compliance Only :("); - STR_Empty_NoGraphs = QObject::tr("Graphs Switched Off!"); + STR_Empty_NoGraphs = QObject::tr("Graphs Switched Off"); STR_Empty_SummaryOnly = QObject::tr("Summary Only :("); - STR_Empty_NoSessions = QObject::tr("Sessions Switched Off!"); + STR_Empty_NoSessions = QObject::tr("Sessions Switched Off"); // Dialog box options diff --git a/sleepyhead/SleepLib/loader_plugins/cms50f37_loader.cpp b/sleepyhead/SleepLib/loader_plugins/cms50f37_loader.cpp index 44b8f946..373fa63a 100644 --- a/sleepyhead/SleepLib/loader_plugins/cms50f37_loader.cpp +++ b/sleepyhead/SleepLib/loader_plugins/cms50f37_loader.cpp @@ -460,7 +460,9 @@ void CMS50F37Loader::processBytes(QByteArray bytes) buf[i] = (buf[i] & 0x7f) | (msb & 0x01 ? 0x80 : 0); } - qint16 pi = buffer.data()[idx+4] | buffer.data()[idx+5] << 8; + //qint16 pi = buffer.data()[idx+4] | buffer.data()[idx+5] << 8; + qint16 pi = ((char *)buf)[idx+5] << 8 | buf[idx+4]; + pulse = buf[3]; quint8 spo2 = buf[2]; @@ -498,6 +500,8 @@ void CMS50F37Loader::processBytes(QByteArray bytes) idx += len; } while (idx < size); + emit updateProgress(oxirec->size(), duration); + if (!started_import) { imp_callbacks = 0; } else { diff --git a/sleepyhead/daily.cpp b/sleepyhead/daily.cpp index df129b0a..c77e64e4 100644 --- a/sleepyhead/daily.cpp +++ b/sleepyhead/daily.cpp @@ -196,8 +196,8 @@ Daily::Daily(QWidget *parent,gGraphView * shared) graphlist["AHI"] = AHI; - graphlist["INTPULSE"] = new gGraph("INTPULSE", GraphView,tr("Int. Pulse"), channelInfo(OXI_Pulse), default_height, oxigrp); - graphlist["INTSPO2"] = new gGraph("INTSPO2", GraphView,tr("Int. SpO2"), channelInfo(OXI_SPO2), default_height, oxigrp); +// graphlist["INTPULSE"] = new gGraph("INTPULSE", GraphView,tr("Int. Pulse"), channelInfo(OXI_Pulse), default_height, oxigrp); +// graphlist["INTSPO2"] = new gGraph("INTSPO2", GraphView,tr("Int. SpO2"), channelInfo(OXI_SPO2), default_height, oxigrp); // Event Pie Chart (for snapshot purposes) // TODO: Convert snapGV to generic for snapshotting multiple graphs (like reports does) @@ -376,23 +376,23 @@ Daily::Daily(QWidget *parent,gGraphView * shared) gLineChart *lc = nullptr; graphlist[schema::channel[CPAP_MaskPressure].code()]->AddLayer(AddCPAP(new gLineChart(CPAP_MaskPressure, false))); - graphlist[schema::channel[CPAP_RespRate].code()]->AddLayer(AddCPAP(lc=new gLineChart(CPAP_RespRate, square))); + graphlist[schema::channel[CPAP_RespRate].code()]->AddLayer(AddCPAP(lc=new gLineChart(CPAP_RespRate, false))); graphlist[schema::channel[POS_Inclination].code()]->AddLayer(AddPOS(new gLineChart(POS_Inclination))); graphlist[schema::channel[POS_Orientation].code()]->AddLayer(AddPOS(new gLineChart(POS_Orientation))); - graphlist[schema::channel[CPAP_MinuteVent].code()]->AddLayer(AddCPAP(lc=new gLineChart(CPAP_MinuteVent, square))); + graphlist[schema::channel[CPAP_MinuteVent].code()]->AddLayer(AddCPAP(lc=new gLineChart(CPAP_MinuteVent, false))); lc->addPlot(CPAP_TgMV, square); - graphlist[schema::channel[CPAP_TidalVolume].code()]->AddLayer(AddCPAP(lc=new gLineChart(CPAP_TidalVolume, square))); + graphlist[schema::channel[CPAP_TidalVolume].code()]->AddLayer(AddCPAP(lc=new gLineChart(CPAP_TidalVolume, false))); //lc->addPlot(CPAP_Test2,COLOR_DarkYellow,square); //graphlist[schema::channel[CPAP_TidalVolume].code()]->AddLayer(AddCPAP(new gLineChart("TidalVolume2", square))); graphlist[schema::channel[CPAP_FLG].code()]->AddLayer(AddCPAP(new gLineChart(CPAP_FLG, true))); //graphlist[schema::channel[CPAP_RespiratoryEvent].code()]->AddLayer(AddCPAP(new gLineChart(CPAP_RespiratoryEvent, true))); - graphlist[schema::channel[CPAP_IE].code()]->AddLayer(AddCPAP(lc=new gLineChart(CPAP_IE, square))); - graphlist[schema::channel[CPAP_Te].code()]->AddLayer(AddCPAP(lc=new gLineChart(CPAP_Te, square))); - graphlist[schema::channel[CPAP_Ti].code()]->AddLayer(AddCPAP(lc=new gLineChart(CPAP_Ti, square))); + graphlist[schema::channel[CPAP_IE].code()]->AddLayer(AddCPAP(lc=new gLineChart(CPAP_IE, false))); + graphlist[schema::channel[CPAP_Te].code()]->AddLayer(AddCPAP(lc=new gLineChart(CPAP_Te, false))); + graphlist[schema::channel[CPAP_Ti].code()]->AddLayer(AddCPAP(lc=new gLineChart(CPAP_Ti, false))); //lc->addPlot(CPAP_Test2,COLOR:DarkYellow,square); graphlist[schema::channel[ZEO_SleepStage].code()]->AddLayer(AddSTAGE(new gLineChart(ZEO_SleepStage, true))); @@ -414,11 +414,11 @@ Daily::Daily(QWidget *parent,gGraphView * shared) // gLineOverlaySummary *los3=new gLineOverlaySummary(STR_UNIT_EventsPerHour,5,-4); // graphlist["INTPULSE"]->AddLayer(AddCPAP(los3->add(new gLineOverlayBar(OXI_PulseChange, COLOR_PulseChange, STR_TR_PC,FT_Span)))); // graphlist["INTPULSE"]->AddLayer(AddCPAP(los3)); - graphlist["INTPULSE"]->AddLayer(AddCPAP(new gLineChart(OXI_Pulse, square))); +// graphlist["INTPULSE"]->AddLayer(AddCPAP(new gLineChart(OXI_Pulse, square))); // gLineOverlaySummary *los4=new gLineOverlaySummary(STR_UNIT_EventsPerHour,5,-4); // graphlist["INTSPO2"]->AddLayer(AddCPAP(los4->add(new gLineOverlayBar(OXI_SPO2Drop, COLOR_SPO2Drop, STR_TR_O2,FT_Span)))); // graphlist["INTSPO2"]->AddLayer(AddCPAP(los4)); - graphlist["INTSPO2"]->AddLayer(AddCPAP(new gLineChart(OXI_SPO2, true))); +// graphlist["INTSPO2"]->AddLayer(AddCPAP(new gLineChart(OXI_SPO2, true))); graphlist[schema::channel[CPAP_PTB].code()]->setForceMaxY(100); graphlist[schema::channel[OXI_SPO2].code()]->setForceMaxY(100); @@ -1467,11 +1467,11 @@ void Daily::Load(QDate date) // GraphView->ResetBounds(false); // wtf is hiding the scrollbars for??? - if (!cpap && !oxi) { - scrollbar->hide(); - } else { - scrollbar->show(); - } +// if (!cpap && !oxi) { +// scrollbar->hide(); +// } else { +// scrollbar->show(); +// } QString modestr; CPAPMode mode=MODE_UNKNOWN; @@ -2050,9 +2050,11 @@ void Daily::RedrawGraphs() void Daily::on_LineCursorUpdate(double time) { - QDateTime dt = QDateTime::fromMSecsSinceEpoch(time); - QString txt = dt.toString("MMM dd HH:mm:ss:zzz"); - dateDisplay->setText(txt); + if (time > 1) { + QDateTime dt = QDateTime::fromMSecsSinceEpoch(time); + QString txt = dt.toString("MMM dd HH:mm:ss:zzz"); + dateDisplay->setText(txt); + } else dateDisplay->setText(QString(GraphView->emptyText())); } void Daily::on_RangeUpdate(double minx, double maxx) @@ -2061,7 +2063,11 @@ void Daily::on_RangeUpdate(double minx, double maxx) // static qint64 last_maxx = 0; //if ((last_minx != minx) || (last_maxx != maxx)) { + if (minx > 1) { dateDisplay->setText(GraphView->getRangeString()); + } else { + dateDisplay->setText(QString(GraphView->emptyText())); + } //} // last_minx=minx; // last_maxx=maxx; diff --git a/sleepyhead/icons/trophy.png b/sleepyhead/icons/trophy.png index 40ea2e6318c82c267e6e77a7be162ef85ab5b266..3def81dd3731cc451234ae5f711c413dd5c6dc9d 100644 GIT binary patch literal 15460 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�+|7@Lv3N`Z0H9Rj<{(%yA%u^y%EgJY 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 JPDHLkV1f;4p!om* diff --git a/sleepyhead/mainwindow.ui b/sleepyhead/mainwindow.ui index 173a6ae3..26e301c8 100644 --- a/sleepyhead/mainwindow.ui +++ b/sleepyhead/mainwindow.ui @@ -1442,7 +1442,7 @@ color: yellow; QToolBox { -icon-size: 24px; +icon-size: 32px; border-radius: 15px; background: rgb(163, 190, 255) } @@ -1498,7 +1498,7 @@ QToolBox::tab:selected { 0 0 180 - 724 + 700 @@ -1911,8 +1911,8 @@ border: 2px solid #56789a; border-radius: 30px; 0 0 - 180 - 724 + 100 + 30 @@ -3059,8 +3059,8 @@ border-radius: 10px; 0 0 - 180 - 724 + 100 + 30 diff --git a/sleepyhead/oximeterimport.cpp b/sleepyhead/oximeterimport.cpp index 8282fd1d..67adadc8 100644 --- a/sleepyhead/oximeterimport.cpp +++ b/sleepyhead/oximeterimport.cpp @@ -886,18 +886,18 @@ void OximeterImport::on_saveButton_clicked() ti += step; } ti -= step; - if (lastpulse > 0) { + if (ELpulse && (lastpulse > 0)) { ELpulse->AddEvent(ti, lastpulse); session->setLast(OXI_Pulse, ti); } - if (lastspo2 > 0) { + if (ELspo2 && (lastspo2 > 0)) { ELspo2->AddEvent(ti, lastspo2); session->setLast(OXI_SPO2, ti); } - if (haveperf && lastperf > 0) { + if (haveperf && ELperf && lastperf > 0) { ELperf->AddEvent(ti, lastperf); session->setLast(OXI_Perf, ti); }