diff --git a/sleepyhead/Graphs/gFlagsLine.cpp b/sleepyhead/Graphs/gFlagsLine.cpp index 6463f894..1540f8e2 100644 --- a/sleepyhead/Graphs/gFlagsLine.cpp +++ b/sleepyhead/Graphs/gFlagsLine.cpp @@ -63,7 +63,6 @@ void gFlagsGroup::SetDay(Day *d) m_empty = true; return; } - QHash chans; schema::channel[CPAP_CSR].setOrder(1); schema::channel[CPAP_CSR].setOrder(1); @@ -80,56 +79,56 @@ void gFlagsGroup::SetDay(Day *d) schema::channel[CPAP_VSnore2].setOrder(8); schema::channel[CPAP_ExP].setOrder(6); - alwaysVisible(CPAP_LargeLeak); - alwaysVisible(CPAP_Hypopnea); - alwaysVisible(CPAP_Obstructive); + availableChans.clear(); + availableChans.append(d->machine->availableChannels(schema::FLAG)); + availableChans.append(d->machine->availableChannels(schema::SPAN)); - 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 (chans.contains(code)) continue; + m_rebuild_cpap = (availableChans.size() == 0); - schema::Channel * chan = &schema::channel[code]; + if (m_rebuild_cpap) { + QHash chans; - if (chan->type() == schema::FLAG) { - chans[code] = chan; - } else if (chan->type() == schema::MINOR_FLAG) { - // chans[code] = chan; - } else if (chan->type() == schema::SPAN) { - chans[code] = chan; + 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 (chans.contains(code)) continue; + + schema::Channel * chan = &schema::channel[code]; + + if (chan->type() == schema::FLAG) { + chans[code] = chan; + } else if (chan->type() == schema::MINOR_FLAG) { + // chans[code] = chan; + } else if (chan->type() == schema::SPAN) { + chans[code] = chan; + } } } + availableChans = chans.keys(); } - for (int i=0; i < m_alwaysvisible.size(); ++i) { - ChannelID code = m_alwaysvisible.at(i); - if (!chans.contains(code)) { - schema::Channel * chan = &schema::channel[code]; - chans[code] = chan; - } + QMultiMap order; + + for (int i=0; i < availableChans.size(); ++i) { + ChannelID code = availableChans.at(i); + order.insert(schema::channel[code].order(), code); } - QMultiMap order; - QHash::iterator cit; - - for (cit = chans.begin(); cit != chans.end(); ++cit) { - int ord = schema::channel[cit.key()].order(); - order.insert(ord, cit.value()); - } - - QMultiMap::iterator it; + QMultiMap::iterator it; for (int i=0;i id()); + for (it = order.begin(); it != order.end(); ++it) { + ChannelID code = it.value(); +// const schema::Channel & chan = schema::channel[code]; + + gFlagsLine * fl = new gFlagsLine(code); fl->SetDay(d); lvisible.push_back(fl); } @@ -155,11 +154,11 @@ void gFlagsGroup::SetDay(Day *d) m_empty = (cnt == 0); -// if (m_empty) { -// if (d) { -// m_empty = !d->channelExists(CPAP_Pressure); -// } -// } + if (m_empty) { + if (d) { + m_empty = !d->channelExists(CPAP_Pressure); + } + } m_barh = 0; } @@ -208,6 +207,14 @@ void gFlagsGroup::paint(QPainter &painter, gGraph &g, const QRegion ®ion) painter.drawLine(left - 1, top + height, left + width, top + height); painter.drawLine(left + width, top + height, left + width, top); painter.drawLine(left + width, top, left - 1, top); + + if (m_rebuild_cpap) { + + QString txt = QObject::tr("Database Outdated\nPlease Rebuild CPAP Data"); + painter.setFont(*bigfont); + painter.setPen(QPen(QColor(0,0,0,32))); + painter.drawText(region.boundingRect(), Qt::AlignCenter | Qt::AlignVCenter, txt); + } } bool gFlagsGroup::mouseMoveEvent(QMouseEvent *event, gGraph *graph) @@ -240,6 +247,7 @@ bool gFlagsGroup::mouseMoveEvent(QMouseEvent *event, gGraph *graph) } } + return true; } diff --git a/sleepyhead/Graphs/gFlagsLine.h b/sleepyhead/Graphs/gFlagsLine.h index 63276ad3..76786b5a 100644 --- a/sleepyhead/Graphs/gFlagsLine.h +++ b/sleepyhead/Graphs/gFlagsLine.h @@ -64,6 +64,7 @@ class gFlagsLine: public Layer bool m_always_visible; int total_lines, line_num; int m_lx, m_ly; + }; /*! \class gFlagsGroup @@ -107,9 +108,12 @@ class gFlagsGroup: public LayerGroup QList m_alwaysvisible; + QList availableChans; + QVector lvisible; float m_barh; bool m_empty; + bool m_rebuild_cpap; }; #endif // GFLAGSLINE_H diff --git a/sleepyhead/SleepLib/machine.cpp b/sleepyhead/SleepLib/machine.cpp index 7601f2b3..685553ac 100644 --- a/sleepyhead/SleepLib/machine.cpp +++ b/sleepyhead/SleepLib/machine.cpp @@ -674,19 +674,26 @@ QList Machine::availableChannels(schema::ChanType chantype) { QHash chanhash; + // look through the daylist and return a list of available channels for this machine QMap::iterator dit; QMap::iterator day_end = day.end(); for (dit = day.begin(); dit != day_end; ++dit) { QList::iterator sess_end = dit.value()->end(); + for (QList::iterator sit = dit.value()->begin(); sit != sess_end; ++sit) { - // sessions desperately need to cache this.. - ///sit.value + Session * sess = (*sit); + int size = sess->availableChannels().size(); + for (int i=0; i < size; ++i) { + ChannelID code = sess->availableChannels().at(i); + const schema::Channel & chan = schema::channel[code]; + if (chan.type() == chantype) { + chanhash[code]++; + } + } } } - QList channels; - - return channels; + return chanhash.keys(); }