mirror of
https://gitlab.com/pholy/OSCAR-code.git
synced 2025-04-05 02:30:44 +00:00
sleepyhead changed to OSCR where appropriate
This commit is contained in:
parent
69ee533b39
commit
2dc1c88dd7
6
Doxyfile
6
Doxyfile
@ -25,13 +25,13 @@ DOXYFILE_ENCODING = UTF-8
|
|||||||
# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
|
# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
|
||||||
# by quotes) that should identify the project.
|
# by quotes) that should identify the project.
|
||||||
|
|
||||||
PROJECT_NAME = SleepyHead
|
PROJECT_NAME = OSCR
|
||||||
|
|
||||||
# The PROJECT_NUMBER tag can be used to enter a project or revision number.
|
# The PROJECT_NUMBER tag can be used to enter a project or revision number.
|
||||||
# This could be handy for archiving the generated documentation or
|
# This could be handy for archiving the generated documentation or
|
||||||
# if some version control system is used.
|
# if some version control system is used.
|
||||||
|
|
||||||
PROJECT_NUMBER = 0.8.x
|
PROJECT_NUMBER = 1.0.x
|
||||||
|
|
||||||
# Using the PROJECT_BRIEF tag one can provide an optional one line description
|
# Using the PROJECT_BRIEF tag one can provide an optional one line description
|
||||||
# for a project that appears at the top of each page and should give viewer
|
# for a project that appears at the top of each page and should give viewer
|
||||||
@ -44,7 +44,7 @@ PROJECT_BRIEF = OpenSource CPAP Review Software
|
|||||||
# exceed 55 pixels and the maximum width should not exceed 200 pixels.
|
# exceed 55 pixels and the maximum width should not exceed 200 pixels.
|
||||||
# Doxygen will copy the logo to the output directory.
|
# Doxygen will copy the logo to the output directory.
|
||||||
|
|
||||||
PROJECT_LOGO = ./docs/sheep.png
|
PROJECT_LOGO = ./docs/logo.png
|
||||||
|
|
||||||
# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
|
# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
|
||||||
# base path where the generated documentation will be put.
|
# base path where the generated documentation will be put.
|
||||||
|
35
README
35
README
@ -1,17 +1,22 @@
|
|||||||
SleepyHead v1.1 branch
|
OpenSource CPAP Review - OSCR
|
||||||
|
|
||||||
*Warning*: Backup your SleepyHeadData directory before using this branch or start a new profile
|
OSCR started as a maintenance fork of SleepyHead version 1.1.0 when that was abandoned by Mark Watkins.
|
||||||
|
|
||||||
SleepyHead is cross platform, opensource sleep tracking program for reviewing CPAP and Oximetry data,
|
SleepyHead was cross platform, opensource sleep tracking program for reviewing CPAP and Oximetry data,
|
||||||
which are devices used in the treatment of Sleep Disorders like Obstructive Sleep Apnea.
|
which are devices used in the treatment of Sleep Disorders like Obstructive Sleep Apnea. It was released
|
||||||
|
under the GPL version 3 license. See the file COPYING for those details.
|
||||||
|
|
||||||
SleepyHead is written by Mark Watkins (aka Jedimark), an Australian software developer afflicted with sleep apnea.
|
SleepyHead was written by Mark Watkins (aka Jedimark), an Australian software developer afflicted with sleep apnea.
|
||||||
|
|
||||||
SleepyHead is copyright (C) 2011-2018 Mark Watkins <mark@jedimark.net>
|
SleepyHead was copyright (C) 2011-2018 by Mark Watkins <mark@jedimark.net>
|
||||||
|
|
||||||
|
Most of OSCR is copyright (c) 2011-2018 by Mark Watkins <mark@jedimark.net>
|
||||||
|
Portions of OSCR are copyright (c) 2019 by Nightowl Software <michaelnightowl99@gmail.com>
|
||||||
|
|
||||||
Requirements:
|
Requirements:
|
||||||
-------------
|
-------------
|
||||||
Qt5.9 SDK with webkit (Qt5.9 from http://qt.io/download-open-source recommended, and please ONLY use that if you wish to submit bug reports)
|
Qt5.9 SDK with help (Qt5.9 from http://qt.io/download-open-source recommended)
|
||||||
|
Qt5.7 SDL without help is possible (for Debian Stretch)
|
||||||
Linux needs libudev-dev for qserialport to compile
|
Linux needs libudev-dev for qserialport to compile
|
||||||
|
|
||||||
OSX needs Xcode and commandline tools from AppStore,
|
OSX needs Xcode and commandline tools from AppStore,
|
||||||
@ -24,9 +29,9 @@ Building:
|
|||||||
Recommend shadow building to not cruft up the source code folder:
|
Recommend shadow building to not cruft up the source code folder:
|
||||||
|
|
||||||
cd ..
|
cd ..
|
||||||
mkdir build_sleepyhead
|
mkdir build
|
||||||
cd build_sleepyhead
|
cd build
|
||||||
qmake ../sleepyhead-code/SleepyHeadQT.pro
|
qmake ../oscr-code/OSCR_QT.pro
|
||||||
make
|
make
|
||||||
|
|
||||||
You may need to add a -spec option to qmake to suit your platform.
|
You may need to add a -spec option to qmake to suit your platform.
|
||||||
@ -49,7 +54,7 @@ with
|
|||||||
|
|
||||||
Software Licensing Information
|
Software Licensing Information
|
||||||
------------------------------
|
------------------------------
|
||||||
SleepyHead is released under the GNU GPL v3 License. Please see below for a note on giving correct attribution
|
OSCR is released under the GNU GPL v3 License. Please see below for a note on giving correct attribution
|
||||||
in redistribution of derivatives.
|
in redistribution of derivatives.
|
||||||
|
|
||||||
It is built using Qt SDK (Open Source Edition), available from http://qt.io.
|
It is built using Qt SDK (Open Source Edition), available from http://qt.io.
|
||||||
@ -57,15 +62,15 @@ It is built using Qt SDK (Open Source Edition), available from http://qt.io.
|
|||||||
It also uses QuaZip, by Sergey A. Tachenov, which is a C++ wrapper over Gilles Vollant's ZIP/UNZIP package
|
It also uses QuaZip, by Sergey A. Tachenov, which is a C++ wrapper over Gilles Vollant's ZIP/UNZIP package
|
||||||
http://sourceforge.net/projects/quazip/
|
http://sourceforge.net/projects/quazip/
|
||||||
|
|
||||||
Redistribution of derivatives
|
Redistribution of derivatives ( a note added by Mark Watins )
|
||||||
-----------------------------
|
-----------------------------
|
||||||
I created this software to help lessen the exploitation of others. Seeing my work being used to exploit others
|
Mark Watkins created this software to help lessen the exploitation of others. Seeing his work being used to exploit others
|
||||||
is incredibly un-motivational, and incredibly disrespectful of all the work I put into this project.
|
is incredibly un-motivational, and incredibly disrespectful of all the work he put into this project.
|
||||||
|
|
||||||
If you plan on reselling any derivatives of SleepyHead, I specifically request that you give due credit and
|
If you plan on reselling any derivatives of SleepyHead, I specifically request that you give due credit and
|
||||||
link back, mentioning clearly in your advertising material, software installer and about screens that your
|
link back, mentioning clearly in your advertising material, software installer and about screens that your
|
||||||
derivative "is based on the free and open-source software SleepyHead available from http://sleepyhead.jedimark.net,
|
derivative "is based on the free and open-source software SleepyHead available from http://sleepyhead.jedimark.net,
|
||||||
developed and copyright by Mark Watkins (C) 2011-<current year>."
|
developed and copyright by Mark Watkins (C) 2011-2018."
|
||||||
|
|
||||||
It is not enough to reference that your derivative "is based on GPL software".
|
It is not enough to reference that your derivative "is based on GPL software".
|
||||||
|
|
||||||
|
@ -1393,10 +1393,10 @@ void gGraphView::paintGL()
|
|||||||
QString txt;
|
QString txt;
|
||||||
if (m_showAuthorMessage) {
|
if (m_showAuthorMessage) {
|
||||||
if (emptyText() == STR_Empty_Brick) {
|
if (emptyText() == STR_Empty_Brick) {
|
||||||
txt = QObject::tr("\nI'm very sorry your machine doesn't record useful data to graph in Daily View :(");
|
txt = QObject::tr("I'm very sorry your machine doesn't record useful data to graph in Daily View :(");
|
||||||
} else {
|
} else {
|
||||||
// not proud of telling them their machine is a Brick.. ;)
|
// not proud of telling them their machine is a Brick.. ;)
|
||||||
txt = QObject::tr("SleepyHead is proudly brought to you by JediMark.");
|
txt = QObject::tr("There is no data to graph");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// int x2, y2;
|
// int x2, y2;
|
||||||
|
@ -427,7 +427,7 @@ QString STR_TR_Sessions;
|
|||||||
QString STR_TR_PrRelief; // Pressure Relief
|
QString STR_TR_PrRelief; // Pressure Relief
|
||||||
|
|
||||||
QString STR_TR_Bookmarks;
|
QString STR_TR_Bookmarks;
|
||||||
QString STR_TR_SleepyHead;
|
QString STR_TR_OSCR;
|
||||||
QString STR_TR_AppVersion;
|
QString STR_TR_AppVersion;
|
||||||
|
|
||||||
QString STR_TR_Default;
|
QString STR_TR_Default;
|
||||||
@ -632,7 +632,7 @@ void initializeStrings()
|
|||||||
STR_TR_PrRelief = QObject::tr("Pr. Relief"); // Pressure Relief
|
STR_TR_PrRelief = QObject::tr("Pr. Relief"); // Pressure Relief
|
||||||
|
|
||||||
STR_TR_Bookmarks = QObject::tr("Bookmarks");
|
STR_TR_Bookmarks = QObject::tr("Bookmarks");
|
||||||
STR_TR_SleepyHead = QObject::tr("SleepyHead");
|
STR_TR_OSCR = QObject::tr("OSCR");
|
||||||
STR_TR_AppVersion = QObject::tr("v%1").arg(VersionString);
|
STR_TR_AppVersion = QObject::tr("v%1").arg(VersionString);
|
||||||
|
|
||||||
STR_TR_Mode = QObject::tr("Mode");
|
STR_TR_Mode = QObject::tr("Mode");
|
||||||
|
@ -107,7 +107,7 @@ void Day::addSession(Session *s)
|
|||||||
auto mi = machines.find(s->type());
|
auto mi = machines.find(s->type());
|
||||||
if (mi != machines.end()) {
|
if (mi != machines.end()) {
|
||||||
if (mi.value() != s->machine()) {
|
if (mi.value() != s->machine()) {
|
||||||
qDebug() << "SleepyHead can't add session" << s->session() << "to this day record, as it already contains a different machine of the same MachineType";
|
qDebug() << "OSCR can't add session" << s->session() << "to this day record, as it already contains a different machine of the same MachineType";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -22,7 +22,7 @@ JournalEntry::JournalEntry(QDate date)
|
|||||||
{
|
{
|
||||||
Machine * jmach = p_profile->GetMachine(MT_JOURNAL);
|
Machine * jmach = p_profile->GetMachine(MT_JOURNAL);
|
||||||
if (jmach == nullptr) { // Create Journal machine record if it doesn't already exist
|
if (jmach == nullptr) { // Create Journal machine record if it doesn't already exist
|
||||||
MachineInfo info(MT_JOURNAL,0, "Journal", QObject::tr("Journal Data"), QString(), QString(), QString(), QObject::tr("SleepyHead"), QDateTime::currentDateTime(), journal_data_version);
|
MachineInfo info(MT_JOURNAL,0, "Journal", QObject::tr("Journal Data"), QString(), QString(), QString(), QObject::tr("OSCR"), QDateTime::currentDateTime(), journal_data_version);
|
||||||
|
|
||||||
// Using machine ID 1 rather than a random number, so in future, if profile.xml gets screwed up they'll get their data back..
|
// Using machine ID 1 rather than a random number, so in future, if profile.xml gets screwed up they'll get their data back..
|
||||||
// TODO: Perhaps search for unlinked journal folders here to save some anger and frustration? :P
|
// TODO: Perhaps search for unlinked journal folders here to save some anger and frustration? :P
|
||||||
@ -40,18 +40,18 @@ JournalEntry::JournalEntry(QDate date)
|
|||||||
machid = tmp.toUInt(&ok, 16);
|
machid = tmp.toUInt(&ok, 16);
|
||||||
if (!ok) {
|
if (!ok) {
|
||||||
QMessageBox::warning(nullptr, STR_MessageBox_Warning,
|
QMessageBox::warning(nullptr, STR_MessageBox_Warning,
|
||||||
QObject::tr("SleepyHead found an old Journal folder, but it looks like it's been renamed:")+"\n\n"+
|
QObject::tr("OSCR found an old Journal folder, but it looks like it's been renamed:")+"\n\n"+
|
||||||
QString("%1").arg(dirs[0])+
|
QString("%1").arg(dirs[0])+
|
||||||
QObject::tr("SleepyHead will not touch this folder, and will create a new one instead.")+"\n\n"+
|
QObject::tr("OSCR will not touch this folder, and will create a new one instead.")+"\n\n"+
|
||||||
QObject::tr("Please be careful when playing in SleepyHead's profile folders :-P"), QMessageBox::Ok);
|
QObject::tr("Please be careful when playing in OSCR's profile folders :-P"), QMessageBox::Ok);
|
||||||
|
|
||||||
// User renamed the folder.. report this
|
// User renamed the folder.. report this
|
||||||
machid = 1;
|
machid = 1;
|
||||||
}
|
}
|
||||||
if (journals > 1) {
|
if (journals > 1) {
|
||||||
QMessageBox::warning(nullptr, STR_MessageBox_Warning,
|
QMessageBox::warning(nullptr, STR_MessageBox_Warning,
|
||||||
QObject::tr("For some reason, sleepyHead couldn't find a journal object record in your profile, but did find multiple Journal data folders.")+"\n\n"+
|
QObject::tr("For some reason, OSCR couldn't find a journal object record in your profile, but did find multiple Journal data folders.\n\n")+
|
||||||
QObject::tr("SleepyHead picked only the first one of these, and will use it in future:")+"\n\n"+
|
QObject::tr("OSCR picked only the first one of these, and will use it in future:\n\n")+
|
||||||
QString("%1").arg(dirs[0])+
|
QString("%1").arg(dirs[0])+
|
||||||
QObject::tr("If your old data is missing, copy the contents of all the other Journal_XXXXXXX folders to this one manually."), QMessageBox::Ok);
|
QObject::tr("If your old data is missing, copy the contents of all the other Journal_XXXXXXX folders to this one manually."), QMessageBox::Ok);
|
||||||
// more then one.. report this.
|
// more then one.. report this.
|
||||||
@ -208,7 +208,7 @@ void JournalEntry::delBookmark(qint64 start, qint64 end)
|
|||||||
|
|
||||||
void BackupJournal(QString filename)
|
void BackupJournal(QString filename)
|
||||||
{
|
{
|
||||||
QDomDocument doc("SleepyHead Journal");
|
QDomDocument doc("OSCR Journal");
|
||||||
|
|
||||||
QDomElement droot = doc.createElement(STR_AppName);
|
QDomElement droot = doc.createElement(STR_AppName);
|
||||||
doc.appendChild(droot);
|
doc.appendChild(droot);
|
||||||
|
@ -575,7 +575,7 @@ int PRS1Loader::OpenMachine(const QString & path)
|
|||||||
QMessageBox::information(QApplication::activeWindow(),
|
QMessageBox::information(QApplication::activeWindow(),
|
||||||
QObject::tr("Non Data Capable Machine"),
|
QObject::tr("Non Data Capable Machine"),
|
||||||
QString(QObject::tr("Your Philips Respironics CPAP machine (Model %1) is unfortunately not a data capable model.")+"\n\n"+
|
QString(QObject::tr("Your Philips Respironics CPAP machine (Model %1) is unfortunately not a data capable model.")+"\n\n"+
|
||||||
QObject::tr("I'm sorry to report that SleepyHead can only track hours of use and very basic settings for this machine.")).
|
QObject::tr("I'm sorry to report that OSCR can only track hours of use and very basic settings for this machine.")).
|
||||||
arg(info.modelnumber),QMessageBox::Ok);
|
arg(info.modelnumber),QMessageBox::Ok);
|
||||||
p_profile->cpap->setBrickWarning(false);
|
p_profile->cpap->setBrickWarning(false);
|
||||||
|
|
||||||
@ -587,7 +587,7 @@ int PRS1Loader::OpenMachine(const QString & path)
|
|||||||
QMessageBox::information(QApplication::activeWindow(),
|
QMessageBox::information(QApplication::activeWindow(),
|
||||||
QObject::tr("Machine Unsupported"),
|
QObject::tr("Machine Unsupported"),
|
||||||
QObject::tr("Sorry, your Philips Respironics CPAP machine (Model %1) is not supported yet.").arg(info.modelnumber) +"\n\n"+
|
QObject::tr("Sorry, your Philips Respironics CPAP machine (Model %1) is not supported yet.").arg(info.modelnumber) +"\n\n"+
|
||||||
QObject::tr("JediMark needs a .zip copy of this machines' SD card and matching Encore .pdf reports to make it work with SleepyHead.")
|
QObject::tr("The developers needs a .zip copy of this machines' SD card and matching Encore .pdf reports to make it work with OSCR.")
|
||||||
,QMessageBox::Ok);
|
,QMessageBox::Ok);
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
@ -596,8 +596,8 @@ int PRS1Loader::OpenMachine(const QString & path)
|
|||||||
// model number didn't parse.. Meh... Silently ignore it
|
// model number didn't parse.. Meh... Silently ignore it
|
||||||
// QMessageBox::information(QApplication::activeWindow(),
|
// QMessageBox::information(QApplication::activeWindow(),
|
||||||
// QObject::tr("Machine Unsupported"),
|
// QObject::tr("Machine Unsupported"),
|
||||||
// QObject::tr("SleepyHead could not parse the model number, this machine can not be imported..") +"\n\n"+
|
// QObject::tr("OSCR could not parse the model number, this machine can not be imported..") +"\n\n"+
|
||||||
// QObject::tr("JediMark needs a .zip copy of this machines' SD card and matching Encore .pdf reports to make it work with SleepyHead.")
|
// QObject::tr("The developers needs a .zip copy of this machines' SD card and matching Encore .pdf reports to make it work with OSCR.")
|
||||||
// ,QMessageBox::Ok);
|
// ,QMessageBox::Ok);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -3717,7 +3717,7 @@ void PRS1Loader::Register()
|
|||||||
initialized = true;
|
initialized = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Thanks SleepyCPAP :)
|
/* Thanks to SleepyCPAP :)
|
||||||
CODE ERROR DESCRIPTION ERROR TYPE ERROR CATEGORY
|
CODE ERROR DESCRIPTION ERROR TYPE ERROR CATEGORY
|
||||||
1 SOFTWARE STOP STOP General Errors
|
1 SOFTWARE STOP STOP General Errors
|
||||||
2 Not Used General Errors
|
2 Not Used General Errors
|
||||||
|
@ -1758,7 +1758,7 @@ int ResmedLoader::Open(const QString & dirpath)
|
|||||||
// add primary STR.edf
|
// add primary STR.edf
|
||||||
strfiles.push_back(strpath);
|
strfiles.push_back(strpath);
|
||||||
|
|
||||||
// Just in case we are importing into a new folder, process SleepyHead backup structures
|
// Just in case we are importing into a new folder, process OSCR backup structures
|
||||||
dir.setPath(path + "STR_Backup");
|
dir.setPath(path + "STR_Backup");
|
||||||
dir.setFilter(QDir::Files | QDir::Hidden | QDir::Readable);
|
dir.setFilter(QDir::Files | QDir::Hidden | QDir::Readable);
|
||||||
QFileInfoList flist = dir.entryInfoList();
|
QFileInfoList flist = dir.entryInfoList();
|
||||||
@ -2523,7 +2523,7 @@ bool ResmedLoader::LoadBRP(Session *sess, const QString & path)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Convert EDFSignal data to sleepyheads Time-Delta Event format
|
// Convert EDFSignal data to OSCR's Time-Delta Event format
|
||||||
void ResmedLoader::ToTimeDelta(Session *sess, ResMedEDFParser &edf, EDFSignal &es, ChannelID code,
|
void ResmedLoader::ToTimeDelta(Session *sess, ResMedEDFParser &edf, EDFSignal &es, ChannelID code,
|
||||||
long recs, qint64 duration, EventDataType t_min, EventDataType t_max, bool square)
|
long recs, qint64 duration, EventDataType t_min, EventDataType t_max, bool square)
|
||||||
{
|
{
|
||||||
|
@ -1105,7 +1105,7 @@ bool Machine::SaveSummaryCache()
|
|||||||
qDebug() << "Saving" << info.brand << info.model << "Summaries";
|
qDebug() << "Saving" << info.brand << info.model << "Summaries";
|
||||||
QString filename = getDataPath() + summaryFileName;
|
QString filename = getDataPath() + summaryFileName;
|
||||||
|
|
||||||
QDomDocument doc("SleepyHeadSessionIndex");
|
QDomDocument doc("OSCR_SessionIndex");
|
||||||
|
|
||||||
QDomElement root = doc.createElement("sessions");
|
QDomElement root = doc.createElement("sessions");
|
||||||
root.setAttribute("version", summaryxml_version);
|
root.setAttribute("version", summaryxml_version);
|
||||||
|
@ -493,7 +493,7 @@ void Profile::DataFormatError(Machine *m)
|
|||||||
{
|
{
|
||||||
QString msg;
|
QString msg;
|
||||||
|
|
||||||
msg = "<font size=+1>"+QObject::tr("SleepyHead (%1) needs to upgrade its database for %2 %3 %4").
|
msg = "<font size=+1>"+QObject::tr("OSCT (%1) needs to upgrade its database for %2 %3 %4").
|
||||||
arg(VersionString).
|
arg(VersionString).
|
||||||
arg(m->brand()).arg(m->model()).arg(m->serial())
|
arg(m->brand()).arg(m->model()).arg(m->serial())
|
||||||
+ "</font><br/><br/>";
|
+ "</font><br/><br/>";
|
||||||
@ -506,17 +506,17 @@ void Profile::DataFormatError(Machine *m)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (backups) {
|
if (backups) {
|
||||||
msg = msg + QObject::tr("<b>SleepyHead maintains a backup of your devices data card that it uses for this purpose.</b>")+ "<br/><br/>";
|
msg = msg + QObject::tr("<b>OSCR maintains a backup of your devices data card that it uses for this purpose.</b>")+ "<br/><br/>";
|
||||||
msg = msg + QObject::tr("<i>Your old machine data should be regenerated provided this backup feature has not been disabled in preferences during a previous data import.</i>") + "<br/><br/>";
|
msg = msg + QObject::tr("<i>Your old machine data should be regenerated provided this backup feature has not been disabled in preferences during a previous data import.</i>") + "<br/><br/>";
|
||||||
backups = true;
|
backups = true;
|
||||||
} else {
|
} else {
|
||||||
msg = msg + "<font size=+1>"+STR_MessageBox_Warning+":</font> "+QObject::tr("SleepyHead does not yet have any automatic card backups stored for this device.") + "<br/><br/>";
|
msg = msg + "<font size=+1>"+STR_MessageBox_Warning+":</font> "+QObject::tr("OSCR does not yet have any automatic card backups stored for this device.") + "<br/><br/>";
|
||||||
msg = msg + QObject::tr("This means you will need to import this machine data again afterwards from your own backups or data card.") + "<br/><br/>";
|
msg = msg + QObject::tr("This means you will need to import this machine data again afterwards from your own backups or data card.") + "<br/><br/>";
|
||||||
}
|
}
|
||||||
|
|
||||||
msg += "<font size=+1>"+QObject::tr("Important:")+"</font> "+QObject::tr("Once you upgrade, you <font size=+1>can not</font> use this profile with the previous version anymore.")+"<br/><br/>"+
|
msg += "<font size=+1>"+QObject::tr("Important:")+"</font> "+QObject::tr("Once you upgrade, you <font size=+1>can not</font> use this profile with the previous version anymore.")+"<br/><br/>"+
|
||||||
QObject::tr("If you are concerned, click No to exit, and backup your profile manually, before starting SleepyHead again.")+ "<br/><br/>";
|
QObject::tr("If you are concerned, click No to exit, and backup your profile manually, before starting OSCR again.")+ "<br/><br/>";
|
||||||
msg = msg + "<font size=+1>"+QObject::tr("Are you ready to upgrade, so you can run the new version of SleepyHead?")+"</font>";
|
msg = msg + "<font size=+1>"+QObject::tr("Are you ready to upgrade, so you can run the new version of OSCR?")+"</font>";
|
||||||
|
|
||||||
|
|
||||||
QMessageBox * question = new QMessageBox(QMessageBox::Warning, QObject::tr("Machine Database Changes"), msg, QMessageBox::Yes | QMessageBox::No);
|
QMessageBox * question = new QMessageBox(QMessageBox::Warning, QObject::tr("Machine Database Changes"), msg, QMessageBox::Yes | QMessageBox::No);
|
||||||
@ -530,7 +530,7 @@ void Profile::DataFormatError(Machine *m)
|
|||||||
if (!m->Purge(3478216)) {
|
if (!m->Purge(3478216)) {
|
||||||
// Purge failed.. probably a permissions error.. let the user deal with it.
|
// Purge failed.. probably a permissions error.. let the user deal with it.
|
||||||
QMessageBox::critical(nullptr, STR_MessageBox_Error,
|
QMessageBox::critical(nullptr, STR_MessageBox_Error,
|
||||||
QObject::tr("Sorry, the purge operation failed, which means this version of SleepyHead can't start.")+"\n\n"+
|
QObject::tr("Sorry, the purge operation failed, which means this version of OSCR can't start.")+"\n\n"+
|
||||||
QObject::tr("The machine data folder needs to be removed manually.")+"\n\n"+
|
QObject::tr("The machine data folder needs to be removed manually.")+"\n\n"+
|
||||||
QObject::tr("This folder currently resides at the following location:")+"\n\n"+
|
QObject::tr("This folder currently resides at the following location:")+"\n\n"+
|
||||||
QDir::toNativeSeparators(Get(p_preferences[STR_GEN_DataFolder].toString())), QMessageBox::Ok);
|
QDir::toNativeSeparators(Get(p_preferences[STR_GEN_DataFolder].toString())), QMessageBox::Ok);
|
||||||
@ -543,14 +543,14 @@ void Profile::DataFormatError(Machine *m)
|
|||||||
if (!p_profile->session->backupCardData()) {
|
if (!p_profile->session->backupCardData()) {
|
||||||
// Automatic backups not available for Intellipap users yet, so don't taunt them..
|
// Automatic backups not available for Intellipap users yet, so don't taunt them..
|
||||||
if (m->loaderName() != STR_MACH_Intellipap) {
|
if (m->loaderName() != STR_MACH_Intellipap) {
|
||||||
if (QMessageBox::question(nullptr, STR_MessageBox_Question, QObject::tr("Would you like to switch on automatic backups, so next time a new version of SleepyHead needs to do so, it can rebuild from these?"),
|
if (QMessageBox::question(nullptr, STR_MessageBox_Question, QObject::tr("Would you like to switch on automatic backups, so next time a new version of OSCR needs to do so, it can rebuild from these?"),
|
||||||
QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes)) {
|
QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes)) {
|
||||||
p_profile->session->setBackupCardData(true);
|
p_profile->session->setBackupCardData(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
QMessageBox::information(nullptr, STR_MessageBox_Information,
|
QMessageBox::information(nullptr, STR_MessageBox_Information,
|
||||||
QObject::tr("SleepyHead will now start the import wizard so you can reinstall your %1 data.").arg(m->brand())
|
QObject::tr("OSCR will now start the import wizard so you can reinstall your %1 data.").arg(m->brand())
|
||||||
,QMessageBox::Ok, QMessageBox::Ok);
|
,QMessageBox::Ok, QMessageBox::Ok);
|
||||||
mainwin->startImportDialog();
|
mainwin->startImportDialog();
|
||||||
}
|
}
|
||||||
@ -560,9 +560,9 @@ void Profile::DataFormatError(Machine *m)
|
|||||||
} else {
|
} else {
|
||||||
delete question;
|
delete question;
|
||||||
QMessageBox::information(nullptr, STR_MessageBox_Information,
|
QMessageBox::information(nullptr, STR_MessageBox_Information,
|
||||||
QObject::tr("SleepyHead will now exit, then (attempt to) launch your computers file manager so you can manually back your profile up:")+"\n\n"+
|
QObject::tr("OSCR will now exit, then (attempt to) launch your computers file manager so you can manually back your profile up:")+"\n\n"+
|
||||||
QDir::toNativeSeparators(Get(p_preferences[STR_GEN_DataFolder].toString()))+"\n\n"+
|
QDir::toNativeSeparators(Get(p_preferences[STR_GEN_DataFolder].toString()))+"\n\n"+
|
||||||
QObject::tr("Use your file manager to make a copy of your profile directory, then afterwards, restart Sleepyhead and complete the upgrade process.")
|
QObject::tr("Use your file manager to make a copy of your profile directory, then afterwards, restart OSCR and complete the upgrade process.")
|
||||||
, QMessageBox::Ok, QMessageBox::Ok);
|
, QMessageBox::Ok, QMessageBox::Ok);
|
||||||
|
|
||||||
showInGraphicalShell(Get(p_preferences[STR_GEN_DataFolder].toString()));
|
showInGraphicalShell(Get(p_preferences[STR_GEN_DataFolder].toString()));
|
||||||
@ -990,7 +990,7 @@ Profile *Create(QString name)
|
|||||||
|
|
||||||
Machine *m = new Machine(p_profile, 0);
|
Machine *m = new Machine(p_profile, 0);
|
||||||
m->setType(MT_JOURNAL);
|
m->setType(MT_JOURNAL);
|
||||||
MachineInfo info(MT_JOURNAL, 0, STR_MACH_Journal, "SleepyHead", STR_MACH_Journal, QString(), m->hexid(), QString(), QDateTime::currentDateTime(), 0);
|
MachineInfo info(MT_JOURNAL, 0, STR_MACH_Journal, "OSCR", STR_MACH_Journal, QString(), m->hexid(), QString(), QDateTime::currentDateTime(), 0);
|
||||||
|
|
||||||
m->setInfo(info);
|
m->setInfo(info);
|
||||||
p_profile->AddMachine(m);
|
p_profile->AddMachine(m);
|
||||||
@ -1016,7 +1016,7 @@ void saveProfileList()
|
|||||||
QDomElement root = doc.createElement("profiles");
|
QDomElement root = doc.createElement("profiles");
|
||||||
doc.appendChild(root);
|
doc.appendChild(root);
|
||||||
|
|
||||||
root.appendChild(doc.createComment("This file is created during Profile Scan for cloud access convenience, it's not used by Desktop version of SleepyHead."));
|
root.appendChild(doc.createComment("This file is created during Profile Scan for cloud access convenience, it's not used by Desktop version of OSCR."));
|
||||||
|
|
||||||
for (auto it = profiles.begin(); it != profiles.end(); ++it) {
|
for (auto it = profiles.begin(); it != profiles.end(); ++it) {
|
||||||
QDomElement elem = doc.createElement("profile");
|
QDomElement elem = doc.createElement("profile");
|
||||||
|
@ -172,13 +172,13 @@ void init()
|
|||||||
QObject::tr("SensAwake"),QObject::tr("SensAwake feature will reduce pressure when waking is detected."),QObject::tr("SA"), STR_UNIT_EventsPerHour, DEFAULT, COLOR_Gold));
|
QObject::tr("SensAwake"),QObject::tr("SensAwake feature will reduce pressure when waking is detected."),QObject::tr("SA"), STR_UNIT_EventsPerHour, DEFAULT, COLOR_Gold));
|
||||||
|
|
||||||
schema::channel.add(GRP_CPAP, new Channel(CPAP_UserFlag1 = 0x101e, FLAG, MT_CPAP, SESSION, "UserFlag1",
|
schema::channel.add(GRP_CPAP, new Channel(CPAP_UserFlag1 = 0x101e, FLAG, MT_CPAP, SESSION, "UserFlag1",
|
||||||
QObject::tr("User Flag #1"), QObject::tr("A user definable event detected by SleepyHead's flow waveform processor."), QObject::tr("UF1"), STR_UNIT_EventsPerHour, DEFAULT, QColor(0xc0,0xc0,0xe0)));
|
QObject::tr("User Flag #1"), QObject::tr("A user definable event detected by OSCR's flow waveform processor."), QObject::tr("UF1"), STR_UNIT_EventsPerHour, DEFAULT, QColor(0xc0,0xc0,0xe0)));
|
||||||
|
|
||||||
schema::channel.add(GRP_CPAP, new Channel(CPAP_UserFlag2 = 0x101f, FLAG, MT_CPAP, SESSION, "UserFlag2",
|
schema::channel.add(GRP_CPAP, new Channel(CPAP_UserFlag2 = 0x101f, FLAG, MT_CPAP, SESSION, "UserFlag2",
|
||||||
QObject::tr("User Flag #2"),QObject::tr("A user definable event detected by SleepyHead's flow waveform processor."), QObject::tr("UF2"), STR_UNIT_EventsPerHour, DEFAULT, QColor(0xa0,0xa0,0xc0)));
|
QObject::tr("User Flag #2"),QObject::tr("A user definable event detected by OSCR's flow waveform processor."), QObject::tr("UF2"), STR_UNIT_EventsPerHour, DEFAULT, QColor(0xa0,0xa0,0xc0)));
|
||||||
|
|
||||||
schema::channel.add(GRP_CPAP, new Channel(CPAP_UserFlag3 = 0x1024, FLAG, MT_CPAP, SESSION, "UserFlag3",
|
schema::channel.add(GRP_CPAP, new Channel(CPAP_UserFlag3 = 0x1024, FLAG, MT_CPAP, SESSION, "UserFlag3",
|
||||||
QObject::tr("User Flag #3"),QObject::tr("A user definable event detected by SleepyHead's flow waveform processor."), QObject::tr("UF3"), STR_UNIT_EventsPerHour, DEFAULT, QColor("dark grey")));
|
QObject::tr("User Flag #3"),QObject::tr("A user definable event detected by OSCR's flow waveform processor."), QObject::tr("UF3"), STR_UNIT_EventsPerHour, DEFAULT, QColor("dark grey")));
|
||||||
|
|
||||||
// Oximetry
|
// Oximetry
|
||||||
schema::channel.add(GRP_OXI, new Channel(OXI_Pulse = 0x1800, WAVEFORM, MT_OXIMETER, SESSION, "Pulse",
|
schema::channel.add(GRP_OXI, new Channel(OXI_Pulse = 0x1800, WAVEFORM, MT_OXIMETER, SESSION, "Pulse",
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
// This is the uber important database version for SleepyHeads internal storage
|
// This is the uber important database version for OSCR's internal storage
|
||||||
// Increment this after stuffing with Session's save & load code.
|
// Increment this after stuffing with Session's save & load code.
|
||||||
const quint16 summary_version = 18;
|
const quint16 summary_version = 18;
|
||||||
const quint16 events_version = 10;
|
const quint16 events_version = 10;
|
||||||
|
@ -89,6 +89,10 @@ QString platformStr()
|
|||||||
|
|
||||||
void UpdaterWindow::checkForUpdates()
|
void UpdaterWindow::checkForUpdates()
|
||||||
{
|
{
|
||||||
|
QMessageBox(tr("Not yet implemented"));
|
||||||
|
return;
|
||||||
|
|
||||||
|
/********************************************
|
||||||
QString platform=platformStr();
|
QString platform=platformStr();
|
||||||
|
|
||||||
#ifdef Q_OS_WIN
|
#ifdef Q_OS_WIN
|
||||||
@ -127,6 +131,7 @@ void UpdaterWindow::checkForUpdates()
|
|||||||
update_url = QUrl(QString("http://sleepyhead.jedimark.net/releases/LatestVersion-%1").arg(platform));
|
update_url = QUrl(QString("http://sleepyhead.jedimark.net/releases/LatestVersion-%1").arg(platform));
|
||||||
#endif
|
#endif
|
||||||
downloadUpdateXML();
|
downloadUpdateXML();
|
||||||
|
*******************************************/
|
||||||
}
|
}
|
||||||
|
|
||||||
void UpdaterWindow::downloadUpdateXML()
|
void UpdaterWindow::downloadUpdateXML()
|
||||||
@ -148,7 +153,7 @@ void UpdaterWindow::updateFinished(QNetworkReply *reply)
|
|||||||
if (reply->error() != QNetworkReply::NoError) {
|
if (reply->error() != QNetworkReply::NoError) {
|
||||||
qDebug() << "Update Check Error: "+reply->errorString();
|
qDebug() << "Update Check Error: "+reply->errorString();
|
||||||
disconnect(netmanager, SIGNAL(finished(QNetworkReply *)), this, SLOT(updateFinished(QNetworkReply *)));
|
disconnect(netmanager, SIGNAL(finished(QNetworkReply *)), this, SLOT(updateFinished(QNetworkReply *)));
|
||||||
mainwin->Notify(tr("SleepyHead Updates are currently unvailable for this platform"),tr("SleepyHead Updates"));
|
mainwin->Notify(tr("OSCR Updates are currently unvailable for this platform"),tr("OSCR Updates"));
|
||||||
} else {
|
} else {
|
||||||
QUrl redirectUrl = reply->attribute(QNetworkRequest::RedirectionTargetAttribute).toUrl();
|
QUrl redirectUrl = reply->attribute(QNetworkRequest::RedirectionTargetAttribute).toUrl();
|
||||||
|
|
||||||
@ -405,9 +410,9 @@ int compareVersion(QString version)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
const QString UPDATE_SleepyHead = "com.jedimark.sleepyhead";
|
//const QString UPDATE_SleepyHead = "com.jedimark.sleepyhead";
|
||||||
const QString UPDATE_QT = "com.jedimark.sleepyhead.qtlibraries";
|
//const QString UPDATE_QT = "com.jedimark.sleepyhead.qtlibraries";
|
||||||
const QString UPDATE_Translations = "com.jedimark.sleepyhead.translations";
|
//const QString UPDATE_Translations = "com.jedimark.sleepyhead.translations";
|
||||||
|
|
||||||
bool SpawnApp(QString apppath, QStringList args = QStringList())
|
bool SpawnApp(QString apppath, QStringList args = QStringList())
|
||||||
{
|
{
|
||||||
@ -445,10 +450,10 @@ void UpdaterWindow::ParseLatestVersion(QIODevice *file)
|
|||||||
int i=compareVersion(version);
|
int i=compareVersion(version);
|
||||||
|
|
||||||
if (i>0) {
|
if (i>0) {
|
||||||
mainwin->Notify(tr("Version %1 of SleepyHead is available, opening link to download site.").arg(version), STR_TR_SleepyHead);
|
mainwin->Notify(tr("Version %1 of OSCR is available, opening link to download site.").arg(version), STR_TR_OSCR);
|
||||||
QDesktopServices::openUrl(QUrl(QString("http://sleepyhead.jedimark.net")));
|
QDesktopServices::openUrl(QUrl(QString("http://nightowlsoftware.ca/OSCR")));
|
||||||
} else {
|
} else {
|
||||||
mainwin->Notify(tr("You are already running the latest version."), STR_TR_SleepyHead);
|
mainwin->Notify(tr("You are already running the latest version."), STR_TR_OSCR);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -511,7 +516,8 @@ void UpdaterWindow::ParseUpdatesXML(QIODevice *dev)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Old
|
// Old
|
||||||
/*void UpdaterWindow::ParseUpdateXML(QIODevice *dev)
|
/************************************
|
||||||
|
void UpdaterWindow::ParseUpdateXML(QIODevice *dev)
|
||||||
{
|
{
|
||||||
QXmlInputSource src(dev);
|
QXmlInputSource src(dev);
|
||||||
QXmlSimpleReader reader;
|
QXmlSimpleReader reader;
|
||||||
@ -547,7 +553,7 @@ void UpdaterWindow::ParseUpdatesXML(QIODevice *dev)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!release) {
|
if (!release) {
|
||||||
mainwin->Notify(tr("No updates were found for your platform."), tr("SleepyHead Updates"), 5000);
|
mainwin->Notify(tr("No updates were found for your platform."), tr("OSCR Updates"), 5000);
|
||||||
PREF[STR_GEN_UpdatesLastChecked] = QDateTime::currentDateTime();
|
PREF[STR_GEN_UpdatesLastChecked] = QDateTime::currentDateTime();
|
||||||
close();
|
close();
|
||||||
return;
|
return;
|
||||||
@ -586,7 +592,7 @@ void UpdaterWindow::ParseUpdatesXML(QIODevice *dev)
|
|||||||
|
|
||||||
if (!upq && !upd) {
|
if (!upq && !upd) {
|
||||||
mainwin->Notify(tr("No new updates were found for your platform."),
|
mainwin->Notify(tr("No new updates were found for your platform."),
|
||||||
tr("SleepyHead Updates"),
|
tr("OSCR Updates"),
|
||||||
5000);
|
5000);
|
||||||
PREF[STR_GEN_UpdatesLastChecked] = QDateTime::currentDateTime();
|
PREF[STR_GEN_UpdatesLastChecked] = QDateTime::currentDateTime();
|
||||||
close();
|
close();
|
||||||
@ -603,7 +609,7 @@ void UpdaterWindow::ParseUpdatesXML(QIODevice *dev)
|
|||||||
|
|
||||||
|
|
||||||
if (updates.size() > 0) {
|
if (updates.size() > 0) {
|
||||||
QString html = "<html><h3>" + tr("SleepyHead v%1, codename \"%2\"").arg(release->version).
|
QString html = "<html><h3>" + tr("OSCR v%1, codename \"%2\"").arg(release->version).
|
||||||
arg(release->codename) + "</h3><p>" + release->notes[""] + "</p><b>";
|
arg(release->codename) + "</h3><p>" + release->notes[""] + "</p><b>";
|
||||||
html += platform.left(1).toUpper() + platform.mid(1);
|
html += platform.left(1).toUpper() + platform.mid(1);
|
||||||
html += " " + tr("platform notes") + "</b><p>" + release->notes[platform] + "</p></html>";
|
html += " " + tr("platform notes") + "</b><p>" + release->notes[platform] + "</p></html>";
|
||||||
@ -611,12 +617,12 @@ void UpdaterWindow::ParseUpdatesXML(QIODevice *dev)
|
|||||||
QString info;
|
QString info;
|
||||||
|
|
||||||
if (compareVersion(release->version)) {
|
if (compareVersion(release->version)) {
|
||||||
ui->Title->setText("<font size=+1>" + tr("A new version of SleepyHead is available!") + "</font>");
|
ui->Title->setText("<font size=+1>" + tr("A new version of OSCR is available!") + "</font>");
|
||||||
info = tr("Shiny new <b>v%1</b> is available. You're running old and busted v%2").
|
info = tr("Shiny new <b>v%1</b> is available. You're running old and busted v%2").
|
||||||
arg(latestapp).arg(VersionString);
|
arg(latestapp).arg(VersionString);
|
||||||
ui->notesTabWidget->setCurrentIndex(0);
|
ui->notesTabWidget->setCurrentIndex(0);
|
||||||
} else {
|
} else {
|
||||||
ui->Title->setText("<font size=+1>" + tr("An update for SleepyHead is available.") + "</font>");
|
ui->Title->setText("<font size=+1>" + tr("An update for OSCR is available.") + "</font>");
|
||||||
info = tr("Version <b>%1</b> is available. You're currently running v%1").
|
info = tr("Version <b>%1</b> is available. You're currently running v%1").
|
||||||
arg(latestapp).arg(VersionString);
|
arg(latestapp).arg(VersionString);
|
||||||
ui->notesTabWidget->setCurrentIndex(1);
|
ui->notesTabWidget->setCurrentIndex(1);
|
||||||
@ -630,7 +636,7 @@ void UpdaterWindow::ParseUpdatesXML(QIODevice *dev)
|
|||||||
update = &release->updates[platform][i];
|
update = &release->updates[platform][i];
|
||||||
|
|
||||||
if ((update->type == "application") && (update->version > VersionString)) {
|
if ((update->type == "application") && (update->version > VersionString)) {
|
||||||
notes += "<b>" + tr("SleepyHead v%1 build notes").arg(update->version) + "</b><br/>" +
|
notes += "<b>" + tr("OSCR v%1 build notes").arg(update->version) + "</b><br/>" +
|
||||||
update->notes.trimmed() + "<br/><br/>";
|
update->notes.trimmed() + "<br/><br/>";
|
||||||
} else if ((update->type == "qtlibs") && (update->version > QT_VERSION_STR)) {
|
} else if ((update->type == "qtlibs") && (update->version > QT_VERSION_STR)) {
|
||||||
notes += "<b>" + tr("Update to QtLibs (v%1)").arg(update->version) + "</b><br/>" +
|
notes += "<b>" + tr("Update to QtLibs (v%1)").arg(update->version) + "</b><br/>" +
|
||||||
@ -851,14 +857,16 @@ void UpdaterWindow::replyFinished(QNetworkReply *reply)
|
|||||||
mainwin->Notify(tr("There was an error completing a network request:\n\n(") + reply->errorString()
|
mainwin->Notify(tr("There was an error completing a network request:\n\n(") + reply->errorString()
|
||||||
+ ")");
|
+ ")");
|
||||||
}
|
}
|
||||||
} */
|
}
|
||||||
|
****************************************************************/
|
||||||
|
|
||||||
void UpdaterWindow::on_CloseButton_clicked()
|
void UpdaterWindow::on_CloseButton_clicked()
|
||||||
{
|
{
|
||||||
close();
|
close();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*void UpdaterWindow::upgradeNext()
|
/*************************************
|
||||||
|
void UpdaterWindow::upgradeNext()
|
||||||
{
|
{
|
||||||
QTableWidgetItem *item;
|
QTableWidgetItem *item;
|
||||||
bool fnd = false;
|
bool fnd = false;
|
||||||
@ -892,11 +900,11 @@ void UpdaterWindow::on_CloseButton_clicked()
|
|||||||
|
|
||||||
if (ok) {
|
if (ok) {
|
||||||
success = true;
|
success = true;
|
||||||
//QMessageBox::information(this,tr("Updates Complete"),tr("SleepyHead has been updated and needs to restart."),QMessageBox::Ok);
|
//QMessageBox::information(this,tr("Updates Complete"),tr("OSCR has been updated and needs to restart."),QMessageBox::Ok);
|
||||||
ui->downloadTitle->setText(tr("Update Complete!"));
|
ui->downloadTitle->setText(tr("Update Complete!"));
|
||||||
ui->FinishedButton->setVisible(true);
|
ui->FinishedButton->setVisible(true);
|
||||||
ui->downloadLabel->setText(
|
ui->downloadLabel->setText(
|
||||||
tr("Updates Complete. SleepyHead needs to restart now, click Finished to do so."));
|
tr("Updates Complete. OSCR needs to restart now, click Finished to do so."));
|
||||||
PREF[STR_GEN_UpdatesLastChecked] = QDateTime::currentDateTime();
|
PREF[STR_GEN_UpdatesLastChecked] = QDateTime::currentDateTime();
|
||||||
} else {
|
} else {
|
||||||
ui->downloadTitle->setText(tr("Update Failed :("));
|
ui->downloadTitle->setText(tr("Update Failed :("));
|
||||||
@ -945,7 +953,8 @@ void UpdaterWindow::on_upgradeButton_clicked()
|
|||||||
|
|
||||||
ui->stackedWidget->setCurrentIndex(1);
|
ui->stackedWidget->setCurrentIndex(1);
|
||||||
upgradeNext();
|
upgradeNext();
|
||||||
} */
|
}
|
||||||
|
************************************************************************/
|
||||||
|
|
||||||
void UpdaterWindow::on_FinishedButton_clicked()
|
void UpdaterWindow::on_FinishedButton_clicked()
|
||||||
{
|
{
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
<string>SleepyHead Updater</string>
|
<string>OSCR Updater</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowIcon">
|
<property name="windowIcon">
|
||||||
<iconset>
|
<iconset>
|
||||||
|
@ -26,21 +26,21 @@ AboutDialog::AboutDialog(QWidget *parent) :
|
|||||||
ui->relnotesText->setHtml(getRelnotes());
|
ui->relnotesText->setHtml(getRelnotes());
|
||||||
ui->versionLabel->setText(VersionString);
|
ui->versionLabel->setText(VersionString);
|
||||||
|
|
||||||
QString gitrev = gitRevision();
|
// QString gitrev = gitRevision();
|
||||||
|
//
|
||||||
if (!gitrev.isEmpty()) {
|
// if (!gitrev.isEmpty()) {
|
||||||
gitrev = tr("Revision: %1").arg(QString("<a href='https://gitlab.com/sleepyhead/sleepyhead-code/commit/%1'>%1</a>").arg(gitrev))+"<br/>"
|
// gitrev = tr("Revision: %1").arg(QString("<a href='https://gitlab.com/sleepyhead/sleepyhead-code/commit/%1'>%1</a>").arg(gitrev))+"<br/>"
|
||||||
+tr("Branch: %1").arg(QString("<a href='https://gitlab.com/sleepyhead/sleepyhead-code/commits/%1'>%1</a>").arg(gitBranch()))+"<br/>"
|
// +tr("Branch: %1").arg(QString("<a href='https://gitlab.com/sleepyhead/sleepyhead-code/commits/%1'>%1</a>").arg(gitBranch()))+"<br/>"
|
||||||
+tr("Build Date: %1").arg(__DATE__)+"<br/>"
|
// +tr("Build Date: %1").arg(__DATE__)+"<br/>"
|
||||||
+tr("Graphics Engine: %1").arg(getGraphicsEngine());
|
// +tr("Graphics Engine: %1").arg(getGraphicsEngine());
|
||||||
}
|
// }
|
||||||
|
|
||||||
QString path = GetAppRoot();
|
QString path = GetAppRoot();
|
||||||
QString text = gitrev + "<br/><br/><a href=\"file:///"+path+"\">"+tr("Show data folder")+"</a>";
|
QString text = /* gitrev + */ "<br/><br/><a href=\"file:///"+path+"\">"+tr("Show data folder")+"</a>";
|
||||||
ui->infoLabel->setText(text);
|
ui->infoLabel->setText(text);
|
||||||
|
|
||||||
|
|
||||||
setWindowTitle(tr("About SleepyHead"));
|
setWindowTitle(tr("About OSCR"));
|
||||||
setMinimumSize(QSize(400,400));
|
setMinimumSize(QSize(400,400));
|
||||||
connect(ui->closeButton, SIGNAL(clicked(bool)), this, SLOT(accept()));
|
connect(ui->closeButton, SIGNAL(clicked(bool)), this, SLOT(accept()));
|
||||||
|
|
||||||
@ -74,7 +74,7 @@ QString AboutDialog::getRelnotes()
|
|||||||
QString text = "<html>"
|
QString text = "<html>"
|
||||||
"<head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"></head>"
|
"<head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"></head>"
|
||||||
"<body><span style=\" font-size:20pt;\">"+tr("Release Notes")+"</span><br/>"
|
"<body><span style=\" font-size:20pt;\">"+tr("Release Notes")+"</span><br/>"
|
||||||
"<span style=\" font-size:14pt;\">"+tr("SleepyHead v%1").arg(VersionString)+"</span>"
|
"<span style=\" font-size:14pt;\">"+tr("OSCR v%1").arg(VersionString)+"</span>"
|
||||||
"<hr/>";
|
"<hr/>";
|
||||||
if (ReleaseStatus != "r") {
|
if (ReleaseStatus != "r") {
|
||||||
text += "<p><font color='red' size=+1><b>"+tr("Important:")+"</b></font> "
|
text += "<p><font color='red' size=+1><b>"+tr("Important:")+"</b></font> "
|
||||||
|
@ -43,7 +43,7 @@
|
|||||||
p, li { white-space: pre-wrap; }
|
p, li { white-space: pre-wrap; }
|
||||||
</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:10pt; font-weight:400; font-style:normal;">
|
</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:10pt; font-weight:400; font-style:normal;">
|
||||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><br /></p>
|
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><br /></p>
|
||||||
<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:20pt;">Welcome to SleepyHead</span></p>
|
<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:20pt;">Welcome to Open Source CPAP Reviewer</span></p>
|
||||||
<p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;"><br /></p>
|
<p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;"><br /></p>
|
||||||
<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This software has been designed to assist you in reviewing the data produced by your CPAP machines and related equipment.</p>
|
<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This software has been designed to assist you in reviewing the data produced by your CPAP machines and related equipment.</p>
|
||||||
<p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
|
<p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
|
||||||
@ -51,9 +51,9 @@ p, li { white-space: pre-wrap; }
|
|||||||
<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:18pt; color:#ff0000;">PLEASE READ CAREFULLY</span></p>
|
<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:18pt; color:#ff0000;">PLEASE READ CAREFULLY</span></p>
|
||||||
<hr />
|
<hr />
|
||||||
<p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;"><br /></p>
|
<p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;"><br /></p>
|
||||||
<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">SleepyHead is <span style=" font-weight:600;">NOT </span>a substitute for competent medical guidance from your Doctor.</p>
|
<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">OSCR is <span style=" font-weight:600;">NOT </span>a substitute for competent medical guidance from your Doctor.</p>
|
||||||
<p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
|
<p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
|
||||||
<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Due to the lack of documentation released by manufacturers regarding file formats, accuracy of data displayed in SleepyHead can not in any way be guaranteed. </p>
|
<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Due to the lack of documentation released by manufacturers regarding file formats, accuracy of data displayed in OSCR can not in any way be guaranteed. </p>
|
||||||
<p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
|
<p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
|
||||||
<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Any reports generated are for <span style=" font-weight:600;">PERSONAL USE ONLY</span>, and are <span style=" font-weight:600;">NOT IN ANY WAY</span> fit for compliance or medical diagnostic purposes.</p>
|
<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Any reports generated are for <span style=" font-weight:600;">PERSONAL USE ONLY</span>, and are <span style=" font-weight:600;">NOT IN ANY WAY</span> fit for compliance or medical diagnostic purposes.</p>
|
||||||
<p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
|
<p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
|
||||||
@ -98,7 +98,7 @@ p, li { white-space: pre-wrap; }
|
|||||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||||
p, li { white-space: pre-wrap; }
|
p, li { white-space: pre-wrap; }
|
||||||
</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:10pt; font-weight:400; font-style:normal;">
|
</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:10pt; font-weight:400; font-style:normal;">
|
||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:20pt;">SleepyHead Credits</span></p>
|
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:20pt;">OSCR Credits</span></p>
|
||||||
<hr />
|
<hr />
|
||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">For OSCR to come to you in the form you see it in now, it took a lot more work than just that of the projects creator <a href="http://jedimark.net"><span style=" text-decoration: underline; color:#0000ff;">Jedimark</span></a>.</p>
|
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">For OSCR to come to you in the form you see it in now, it took a lot more work than just that of the projects creator <a href="http://jedimark.net"><span style=" text-decoration: underline; color:#0000ff;">Jedimark</span></a>.</p>
|
||||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
|
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
|
||||||
@ -106,10 +106,10 @@ p, li { white-space: pre-wrap; }
|
|||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">OSCR uses the OpenSource version of the Qt cross platform toolkit available from <a href="http://qt.io"><span style=" text-decoration: underline; color:#0000ff;">http://qt.io</span></a> which itself draws from many smaller open source libraries. You can read the individual licensing for many of these components that are used under the hood of ROSCR at <a href="http://doc.qt.io/archives/qt-5.7/3rdparty.html"><span style=" text-decoration: underline; color:#0000ff;">http://doc.qt.io/archives/qt-5.7/3rdparty.html</span></a></p>
|
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">OSCR uses the OpenSource version of the Qt cross platform toolkit available from <a href="http://qt.io"><span style=" text-decoration: underline; color:#0000ff;">http://qt.io</span></a> which itself draws from many smaller open source libraries. You can read the individual licensing for many of these components that are used under the hood of ROSCR at <a href="http://doc.qt.io/archives/qt-5.7/3rdparty.html"><span style=" text-decoration: underline; color:#0000ff;">http://doc.qt.io/archives/qt-5.7/3rdparty.html</span></a></p>
|
||||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
|
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
|
||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Data formats</span></p>
|
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Data formats</span></p>
|
||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Becase the CPAP machine data formats are mostly undocumented and getting them working in SleepyHead involved a lot of hacking, I needed a lot of SD card data samples, and patient users willing to put up with crashes and wonky data, and plenty of help from my fellow hackers out there who shared in the workload breaking data formats. Thanks to all of you who have helped in the fight to protect our right to keep our own data open and accessible!<br /><br /><span style=" font-weight:600;">Patches, bugfixes and platform support</span><br /><span style=" color:#000000;">James Marshall, Rich Freeman, John Masters, Keary Griffin, Patricia Shanahan, Alec Clews, manders99, Sean Stangl, Roy Stone, François Revol, Michael Masterson, RezNet, JediBob, Pholy and names I'm sure I've missed or yet to add.</span></p>
|
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Becase the CPAP machine data formats are mostly undocumented and getting them working in OSCR involved a lot of hacking, I needed a lot of SD card data samples, and patient users willing to put up with crashes and wonky data, and plenty of help from my fellow hackers out there who shared in the workload breaking data formats. Thanks to all of you who have helped in the fight to protect our right to keep our own data open and accessible!<br /><br /><span style=" font-weight:600;">Patches, bugfixes and platform support</span><br /><span style=" color:#000000;">James Marshall, Rich Freeman, John Masters, Keary Griffin, Patricia Shanahan, Alec Clews, manders99, Sean Stangl, Roy Stone, François Revol, Michael Masterson, RezNet, JediBob, Pholy and names I'm sure I've missed or yet to add.</span></p>
|
||||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#000000;"><br /></p>
|
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#000000;"><br /></p>
|
||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600; color:#000000;">Language and Translation</span></p>
|
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600; color:#000000;">Language and Translation</span></p>
|
||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" color:#000000;">Now with sixteen (!) new languages besides English (US) it is important to mention all those people who have done an enormous job breaking their heads over 1566 strings with 9572 words, making a total of over 56.000 characters, for SleepyHead Version 1.0.0<br /></span></p>
|
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" color:#000000;">Now with sixteen (!) new languages besides English (US) it is important to mention all those people who have done an enormous job breaking their heads over 1566 strings with 9572 words, making a total of over 56.000 characters, for the original SleepyHead Version 1.0.0<br /></span></p>
|
||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" color:#000000;">The translation team is as follows: Arie Klerk (Translation Coordinator, also Dutch), Steffen Reitz (German), Chen Hao (Chinese), Lars-Erik Söderström (Swedish), Damien Vigneron (French), António Jorge Costa (Portuguese), Judith Guzmán (Spanish), Plamen Tonev (Bulgarian), Johan Heikkilä (Finnish), Boguslaw Kucharski (Polish), Luca Roberti (Italian), Iohannis Nasef (Greek and Arabic), Heyns van der Merwe (African), Jason Williams (English UK) and Yaron Keren (Hebrew).</span></p>
|
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" color:#000000;">The translation team is as follows: Arie Klerk (Translation Coordinator, also Dutch), Steffen Reitz (German), Chen Hao (Chinese), Lars-Erik Söderström (Swedish), Damien Vigneron (French), António Jorge Costa (Portuguese), Judith Guzmán (Spanish), Plamen Tonev (Bulgarian), Johan Heikkilä (Finnish), Boguslaw Kucharski (Polish), Luca Roberti (Italian), Iohannis Nasef (Greek and Arabic), Heyns van der Merwe (African), Jason Williams (English UK) and Yaron Keren (Hebrew).</span></p>
|
||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" color:#000000;"><br />Any remarks can be sent to Arie Klerk, who will gladly bring you in contact with the translator.</span></p>
|
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" color:#000000;"><br />Any remarks can be sent to Arie Klerk, who will gladly bring you in contact with the translator.</span></p>
|
||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" color:#000000;"><br /></span><span style=" font-weight:600; color:#000000;">Special Mentions<br /></span><span style=" color:#000000;">A big thanks (again) to Arie Klerk for tirelessly filling the role of SleepyHead's Translation coordinator and helping get SleepyHead out of it's monolingual rut, and fit and ready to be shared with a much wider audience around the world.<br /></span></p>
|
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" color:#000000;"><br /></span><span style=" font-weight:600; color:#000000;">Special Mentions<br /></span><span style=" color:#000000;">A big thanks (again) to Arie Klerk for tirelessly filling the role of SleepyHead's Translation coordinator and helping get SleepyHead out of it's monolingual rut, and fit and ready to be shared with a much wider audience around the world.<br /></span></p>
|
||||||
@ -149,7 +149,7 @@ p, li { white-space: pre-wrap; }
|
|||||||
</widget>
|
</widget>
|
||||||
<widget class="QWidget" name="supportTab">
|
<widget class="QWidget" name="supportTab">
|
||||||
<attribute name="title">
|
<attribute name="title">
|
||||||
<string>Support SleepyHead</string>
|
<string>Support OSCR</string>
|
||||||
</attribute>
|
</attribute>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_6">
|
<layout class="QVBoxLayout" name="verticalLayout_6">
|
||||||
<item>
|
<item>
|
||||||
@ -159,11 +159,11 @@ p, li { white-space: pre-wrap; }
|
|||||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||||
p, li { white-space: pre-wrap; }
|
p, li { white-space: pre-wrap; }
|
||||||
</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:10pt; font-weight:400; font-style:normal;">
|
</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:10pt; font-weight:400; font-style:normal;">
|
||||||
<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:20pt;">Support SleepyHead Development</span></p>
|
<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:20pt;">Support OSCR Development</span></p>
|
||||||
<hr />
|
<hr />
|
||||||
<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;"> </span></p>
|
<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;"> </span></p>
|
||||||
<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">All software, regardless of its software licensing costs time, money and resources to create and maintain, especially complex applications like SleepyHead.<br /><br />The SleepyHead project was created early in 2011 by Mark Watkins (<a href="http://jedimark.net"><span style=" text-decoration: underline; color:#0000ff;">Jedimark</span></a>), and has grown over the years into a seriously complex cross platform desktop application. It is the compound result of an insane amount of hard work and many, many all nighter hacking sessions, and time spent distracted from family responsibilties.</p>
|
<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">All software, regardless of its software licensing costs time, money and resources to create and maintain, especially complex applications like OSCR.<br /><br />The SleepyHead project was created early in 2011 by Mark Watkins (<a href="http://jedimark.net"><span style=" text-decoration: underline; color:#0000ff;">Jedimark</span></a>), and has grown over the years into a seriously complex cross platform desktop application. It is the compound result of an insane amount of hard work and many, many all nighter hacking sessions, and time spent distracted from family responsibilties.</p>
|
||||||
<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br />There is a lot of ongoing work trying to keep SleepyHead up to date with ever changing CPAP machine variants as well as the continuously improving understanding of the undocumented data formats. I know I haven't always kept up, but I really do try my best.<br /><br />I'd like to offer a huge thankyou for those who have given donations and support along the way... you truly helped to make SleepyHead what it is today.<br /><br />If SleepyHead has benefited you and have the means to do so, please consider showing your appreciation by supporting the continued development of this software project.</p>
|
<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br />There is a lot of ongoing work trying to keep OSCR up to date with ever changing CPAP machine variants as well as the continuously improving understanding of the undocumented data formats. I know I haven't always kept up, but I really do try my best.<br /><br />I'd like to offer a huge thankyou for those who have given donations and support along the way... you truly helped to make OSCR what it is today.<br /><br />If OSCR has benefited you and have the means to do so, please consider showing your appreciation by supporting the continued development of this software project.</p>
|
||||||
<p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
|
<p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
|
||||||
<hr />
|
<hr />
|
||||||
<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://sleepyhead.jedimark.net/donate.php"><span style=" font-size:11pt; font-weight:600; text-decoration: underline; color:#0000ff;"><br />Donate via Paypal</span></a><span style=" font-size:11pt;"><br /></span></p>
|
<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://sleepyhead.jedimark.net/donate.php"><span style=" font-size:11pt; font-weight:600; text-decoration: underline; color:#0000ff;"><br />Donate via Paypal</span></a><span style=" font-size:11pt;"><br /></span></p>
|
||||||
@ -217,7 +217,7 @@ p, li { white-space: pre-wrap; }
|
|||||||
</font>
|
</font>
|
||||||
</property>
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string notr="true">SleepyHead</string>
|
<string notr="true">OSCR</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="alignment">
|
<property name="alignment">
|
||||||
<set>Qt::AlignCenter</set>
|
<set>Qt::AlignCenter</set>
|
||||||
|
@ -69,7 +69,7 @@ ExportCSV::~ExportCSV()
|
|||||||
|
|
||||||
void ExportCSV::on_filenameBrowseButton_clicked()
|
void ExportCSV::on_filenameBrowseButton_clicked()
|
||||||
{
|
{
|
||||||
QString timestamp = tr("SleepyHead_");
|
QString timestamp = tr("OSCR_");
|
||||||
timestamp += p_profile->Get("Username") + "_";
|
timestamp += p_profile->Get("Username") + "_";
|
||||||
|
|
||||||
if (ui->rb1_details->isChecked()) { timestamp += tr("Details_"); }
|
if (ui->rb1_details->isChecked()) { timestamp += tr("Details_"); }
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* SleepyHead Help Implementation
|
/* OSCR Help Implementation
|
||||||
*
|
*
|
||||||
* Copyright (c) 2018 Mark Watkins <mark@jedimark.net>
|
* Copyright (c) 2018 Mark Watkins <mark@jedimark.net>
|
||||||
*
|
*
|
||||||
|
@ -69,16 +69,16 @@ MainWindow::MainWindow(QWidget *parent) :
|
|||||||
ui(new Ui::MainWindow)
|
ui(new Ui::MainWindow)
|
||||||
{
|
{
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
ui->logText->setPlainText("00000: Startup: SleepyHead Logger initialized");
|
ui->logText->setPlainText("00000: Startup: OSCR Logger initialized");
|
||||||
|
|
||||||
if (logger) {
|
if (logger) {
|
||||||
connect(logger, SIGNAL(outputLog(QString)), this, SLOT(logMessage(QString)));
|
connect(logger, SIGNAL(outputLog(QString)), this, SLOT(logMessage(QString)));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Initialise sleepyHead app registry stuff
|
// Initialise oscr app registry stuff
|
||||||
QSettings settings;
|
QSettings settings;
|
||||||
|
|
||||||
// Load previous Window geometry (this is currently broken on Mac as of Qt5.2.1)
|
// Load previous Window geometry
|
||||||
restoreGeometry(settings.value("MainWindow/geometry").toByteArray());
|
restoreGeometry(settings.value("MainWindow/geometry").toByteArray());
|
||||||
|
|
||||||
|
|
||||||
@ -88,7 +88,7 @@ MainWindow::MainWindow(QWidget *parent) :
|
|||||||
systray->show();
|
systray->show();
|
||||||
systraymenu = new QMenu(this);
|
systraymenu = new QMenu(this);
|
||||||
systray->setContextMenu(systraymenu);
|
systray->setContextMenu(systraymenu);
|
||||||
QAction *a = systraymenu->addAction(STR_TR_SleepyHead + " v" + VersionString);
|
QAction *a = systraymenu->addAction(STR_TR_OSCR + " v" + VersionString);
|
||||||
a->setEnabled(false);
|
a->setEnabled(false);
|
||||||
systraymenu->addSeparator();
|
systraymenu->addSeparator();
|
||||||
systraymenu->addAction(tr("&About"), this, SLOT(on_action_About_triggered()));
|
systraymenu->addAction(tr("&About"), this, SLOT(on_action_About_triggered()));
|
||||||
@ -105,7 +105,7 @@ MainWindow::MainWindow(QWidget *parent) :
|
|||||||
void MainWindow::SetupGUI()
|
void MainWindow::SetupGUI()
|
||||||
{
|
{
|
||||||
QString version = getBranchVersion();
|
QString version = getBranchVersion();
|
||||||
setWindowTitle(STR_TR_SleepyHead + QString(" %1").arg(version));
|
setWindowTitle(STR_TR_OSCR + QString(" %1").arg(version));
|
||||||
|
|
||||||
#ifdef Q_OS_MAC
|
#ifdef Q_OS_MAC
|
||||||
|
|
||||||
@ -234,7 +234,7 @@ void MainWindow::closeEvent(QCloseEvent * event)
|
|||||||
static bool runonce = false;
|
static bool runonce = false;
|
||||||
if (!runonce) {
|
if (!runonce) {
|
||||||
if (AppSetting->removeCardReminder()) {
|
if (AppSetting->removeCardReminder()) {
|
||||||
Notify(QObject::tr("Don't forget to place your datacard back in your CPAP machine"), QObject::tr("SleepyHead Reminder"));
|
Notify(QObject::tr("Don't forget to place your datacard back in your CPAP machine"), QObject::tr("OSCR Reminder"));
|
||||||
QThread::msleep(1000);
|
QThread::msleep(1000);
|
||||||
QApplication::processEvents();
|
QApplication::processEvents();
|
||||||
}
|
}
|
||||||
@ -279,7 +279,7 @@ void MainWindow::log(QString text)
|
|||||||
void MainWindow::Notify(QString s, QString title, int ms)
|
void MainWindow::Notify(QString s, QString title, int ms)
|
||||||
{
|
{
|
||||||
if (title.isEmpty()) {
|
if (title.isEmpty()) {
|
||||||
title = tr("%1 %2").arg(STR_TR_SleepyHead).arg(STR_TR_AppVersion);
|
title = tr("%1 %2").arg(STR_TR_OSCR).arg(STR_TR_AppVersion);
|
||||||
}
|
}
|
||||||
if (systray) {
|
if (systray) {
|
||||||
QString msg = s;
|
QString msg = s;
|
||||||
@ -391,8 +391,8 @@ bool MainWindow::OpenProfile(QString profileName, bool skippassword)
|
|||||||
if (lockhost.compare(QHostInfo::localHostName()) != 0) {
|
if (lockhost.compare(QHostInfo::localHostName()) != 0) {
|
||||||
if (QMessageBox::warning(nullptr, STR_MessageBox_Warning,
|
if (QMessageBox::warning(nullptr, STR_MessageBox_Warning,
|
||||||
QObject::tr("There is a lockfile already present for this profile '%1', claimed on '%2'.").arg(prof->user->userName()).arg(lockhost)+"\n\n"+
|
QObject::tr("There is a lockfile already present for this profile '%1', claimed on '%2'.").arg(prof->user->userName()).arg(lockhost)+"\n\n"+
|
||||||
QObject::tr("You can only work with one instance of an individual SleepyHead profile at a time.")+"\n\n"+
|
QObject::tr("You can only work with one instance of an individual OSCR profile at a time.")+"\n\n"+
|
||||||
QObject::tr("If you are using cloud storage, make sure SleepyHead is closed and syncing has completed first on the other computer before proceeding."),
|
QObject::tr("If you are using cloud storage, make sure OSCR is closed and syncing has completed first on the other computer before proceeding."),
|
||||||
QMessageBox::Cancel |QMessageBox::Ok, QMessageBox::Cancel) == QMessageBox::Cancel) {
|
QMessageBox::Cancel |QMessageBox::Ok, QMessageBox::Cancel) == QMessageBox::Cancel) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -413,7 +413,7 @@ bool MainWindow::OpenProfile(QString profileName, bool skippassword)
|
|||||||
for (QList<Machine *>::iterator it = machines.begin(); it != machines.end(); ++it) {
|
for (QList<Machine *>::iterator it = machines.begin(); it != machines.end(); ++it) {
|
||||||
QString mclass=(*it)->loaderName();
|
QString mclass=(*it)->loaderName();
|
||||||
if (mclass == STR_MACH_ResMed) {
|
if (mclass == STR_MACH_ResMed) {
|
||||||
qDebug() << "ResMed machine found.. locking SleepyHead preferences to suit it's summary system";
|
qDebug() << "ResMed machine found.. locking OSCR preferences to suit it's summary system";
|
||||||
|
|
||||||
// Have to sacrifice these features to get access to summary data.
|
// Have to sacrifice these features to get access to summary data.
|
||||||
p_profile->session->setCombineCloseSessions(0);
|
p_profile->session->setCombineCloseSessions(0);
|
||||||
@ -484,7 +484,7 @@ bool MainWindow::OpenProfile(QString profileName, bool skippassword)
|
|||||||
PopulatePurgeMenu();
|
PopulatePurgeMenu();
|
||||||
|
|
||||||
AppSetting->setProfileName(p_profile->user->userName());
|
AppSetting->setProfileName(p_profile->user->userName());
|
||||||
setWindowTitle(STR_TR_SleepyHead + QString(" %1 (" + tr("Profile") + ": %2)").arg(getBranchVersion()).arg(AppSetting->profileName()));
|
setWindowTitle(STR_TR_OSCR + QString(" %1 (" + tr("Profile") + ": %2)").arg(getBranchVersion()).arg(AppSetting->profileName()));
|
||||||
|
|
||||||
ui->oximetryButton->setDisabled(false);
|
ui->oximetryButton->setDisabled(false);
|
||||||
ui->dailyButton->setDisabled(false);
|
ui->dailyButton->setDisabled(false);
|
||||||
@ -1432,12 +1432,14 @@ void MainWindow::on_action_CycleTabs_triggered()
|
|||||||
|
|
||||||
void MainWindow::on_actionOnline_Users_Guide_triggered()
|
void MainWindow::on_actionOnline_Users_Guide_triggered()
|
||||||
{
|
{
|
||||||
QDesktopServices::openUrl(QUrl("http://sleepyhead.sourceforge.net/wiki/index.php?title=SleepyHead_Users_Guide"));
|
// QDesktopServices::openUrl(QUrl("http://sleepyhead.sourceforge.net/wiki/index.php?title=SleepyHead_Users_Guide"));
|
||||||
|
QMessageBox(tr("Not yet implemented"));
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::on_action_Frequently_Asked_Questions_triggered()
|
void MainWindow::on_action_Frequently_Asked_Questions_triggered()
|
||||||
{
|
{
|
||||||
QDesktopServices::openUrl(QUrl("http://sleepyhead.sourceforge.net/wiki/index.php?title=Frequently_Asked_Questions"));
|
// QDesktopServices::openUrl(QUrl("http://sleepyhead.sourceforge.net/wiki/index.php?title=Frequently_Asked_Questions"));
|
||||||
|
QMessageBox(tr("Not yet implemented"));
|
||||||
}
|
}
|
||||||
|
|
||||||
void packEventList(EventList *el, EventDataType minval = 0)
|
void packEventList(EventList *el, EventDataType minval = 0)
|
||||||
@ -1673,7 +1675,7 @@ void MainWindow::RestartApplication(bool force_login, QString cmdline)
|
|||||||
args << "-n"; // -n option is important, as it opens a new process
|
args << "-n"; // -n option is important, as it opens a new process
|
||||||
args << apppath;
|
args << apppath;
|
||||||
|
|
||||||
args << "--args"; // SleepyHead binary options after this
|
args << "--args"; // OSCR binary options after this
|
||||||
args << "-p"; // -p starts with 1 second delay, to give this process time to save..
|
args << "-p"; // -p starts with 1 second delay, to give this process time to save..
|
||||||
|
|
||||||
|
|
||||||
@ -1819,25 +1821,22 @@ void MainWindow::on_actionRebuildCPAP(QAction *action)
|
|||||||
|
|
||||||
if (backups) {
|
if (backups) {
|
||||||
if (QMessageBox::question(this,
|
if (QMessageBox::question(this,
|
||||||
STR_MessageBox_Question,
|
STR_MessageBox_Question,
|
||||||
tr("Are you sure you want to rebuild all CPAP data for the following machine:")+ "\n\n" +
|
tr("Are you sure you want to rebuild all CPAP data for the following machine:\n\n" +
|
||||||
mach->brand() + " " + mach->model() + " " +
|
mach->brand() + " " + mach->model() + " " +
|
||||||
mach->modelnumber() + " (" + mach->serial() + ")" + "\n\n"+
|
mach->modelnumber() + " (" + mach->serial() + ")\n\n"+
|
||||||
tr("Please note, that this could result in loss of graph data if SleepyHead's internal backups have been disabled or interfered with in any way."),
|
tr("Please note, that this could result in loss of graph data if OSCR's backups have been disabled or interfered with in any way."),
|
||||||
QMessageBox::Yes | QMessageBox::No,
|
QMessageBox::Yes | QMessageBox::No, QMessageBox::No) == QMessageBox::No) {
|
||||||
QMessageBox::No) == QMessageBox::No) {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (QMessageBox::question(this,
|
if (QMessageBox::question(this,
|
||||||
STR_MessageBox_Warning,
|
STR_MessageBox_Warning,
|
||||||
"<p><b>"+STR_MessageBox_Warning+": </b>"+tr("For some reason, SleepyHead does not have internal backups for the following machine:")+ "</p>" +
|
"<p><b>"+STR_MessageBox_Warning+": </b>"+tr("For some reason, OSCR does not have any backups for the following machine:")+ "</p>" +
|
||||||
"<p>"+mach->brand() + " " + mach->model() + " " +
|
"<p>"+mach->brand() + " " + mach->model() + " " + mach->modelnumber() + " (" + mach->serial() + ")</p>"+
|
||||||
mach->modelnumber() + " (" + mach->serial() + ")" + "</p>"+
|
"<p>"+tr("Provided you have made <i>your <b>own</b> backups for ALL of your CPAP data</i>, you can still complete this operation, but you will have to restore from your backups manually.")+"</p>"
|
||||||
"<p>"+tr("Provided you have made <i>your <b>own</b> backups for ALL of your CPAP data</i>, you can still complete this operation, but you will have to restore from your backups manually.")+"</p>"
|
"<p><b>"+tr("Are you really sure you want to do this?")+"</b></p>",
|
||||||
"<p><b>"+tr("Are you really sure you want to do this?")+"</b></p>",
|
QMessageBox::Yes | QMessageBox::No, QMessageBox::No) == QMessageBox::No) {
|
||||||
QMessageBox::Yes | QMessageBox::No,
|
|
||||||
QMessageBox::No) == QMessageBox::No) {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1886,12 +1885,13 @@ void MainWindow::on_actionPurgeMachine(QAction *action)
|
|||||||
}
|
}
|
||||||
if (!mach) return;
|
if (!mach) return;
|
||||||
|
|
||||||
if (QMessageBox::question(this, STR_MessageBox_Warning, "<p><b>"+STR_MessageBox_Warning+":</b> "+tr("You are about to <font size=+2>obliterate</font> SleepyHead's machine database for the following machine:")+"</p>"+
|
if (QMessageBox::question(this, STR_MessageBox_Warning,
|
||||||
"<p>"+mach->brand() + " " + mach->model() + " " +
|
"<p><b>"+STR_MessageBox_Warning+":</b> " +
|
||||||
mach->modelnumber() + " (" + mach->serial() + ")" + "</p>"+
|
tr("You are about to <font size=+2>obliterate</font> OSCR's machine database for the following machine:</p>") +
|
||||||
"<p>"+tr("Note as a precaution, the backup folder will be left in place.")+"</p>"+
|
"<p>"+mach->brand() + " " + mach->model() + " " + mach->modelnumber() + " (" + mach->serial() + ")" + "</p>" +
|
||||||
"<p>"+tr("Are you <b>absolutely sure</b> you want to proceed?")+"</p>", QMessageBox::Yes | QMessageBox::No, QMessageBox::No) == QMessageBox::Yes) {
|
"<p>"+tr("Note as a precaution, the backup folder will be left in place.")+"</p>"+
|
||||||
|
"<p>"+tr("Are you <b>absolutely sure</b> you want to proceed?")+"</p>",
|
||||||
|
QMessageBox::Yes | QMessageBox::No, QMessageBox::No) == QMessageBox::Yes) {
|
||||||
purgeMachine(mach);
|
purgeMachine(mach);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2225,7 +2225,7 @@ void MainWindow::on_actionSleep_Disorder_Terms_Glossary_triggered()
|
|||||||
QMessageBox(tr("Not yet implemented"));
|
QMessageBox(tr("Not yet implemented"));
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::on_actionHelp_Support_SleepyHead_Development_triggered()
|
void MainWindow::on_actionHelp_Support_OSCR_Development_triggered()
|
||||||
{
|
{
|
||||||
// QDesktopServices().openUrl(QUrl("https://sleepyhead.jedimark.net/donate.php"));
|
// QDesktopServices().openUrl(QUrl("https://sleepyhead.jedimark.net/donate.php"));
|
||||||
QMessageBox(tr("Not yet implemented"));
|
QMessageBox(tr("Not yet implemented"));
|
||||||
|
@ -438,7 +438,7 @@
|
|||||||
</palette>
|
</palette>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
<string>SleepyHead</string>
|
<string>OSCR</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowIcon">
|
<property name="windowIcon">
|
||||||
<iconset resource="Resources.qrc">
|
<iconset resource="Resources.qrc">
|
||||||
@ -2856,7 +2856,7 @@ p, li { white-space: pre-wrap; }
|
|||||||
<addaction name="actionDebug"/>
|
<addaction name="actionDebug"/>
|
||||||
<addaction name="actionShow_Performance_Counters"/>
|
<addaction name="actionShow_Performance_Counters"/>
|
||||||
<addaction name="separator"/>
|
<addaction name="separator"/>
|
||||||
<addaction name="actionHelp_Support_SleepyHead_Development"/>
|
<addaction name="actionHelp_Support_OSCR_Development"/>
|
||||||
<addaction name="separator"/>
|
<addaction name="separator"/>
|
||||||
<addaction name="actionCheck_for_Updates"/>
|
<addaction name="actionCheck_for_Updates"/>
|
||||||
<addaction name="separator"/>
|
<addaction name="separator"/>
|
||||||
@ -2973,7 +2973,7 @@ p, li { white-space: pre-wrap; }
|
|||||||
</action>
|
</action>
|
||||||
<action name="action_About">
|
<action name="action_About">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>&About SleepyHead</string>
|
<string>&About OSCR</string>
|
||||||
</property>
|
</property>
|
||||||
</action>
|
</action>
|
||||||
<action name="action_Fullscreen">
|
<action name="action_Fullscreen">
|
||||||
@ -3097,9 +3097,9 @@ p, li { white-space: pre-wrap; }
|
|||||||
<string>Import RemStar &MSeries Data</string>
|
<string>Import RemStar &MSeries Data</string>
|
||||||
</property>
|
</property>
|
||||||
</action>
|
</action>
|
||||||
<action name="actionHelp_Support_SleepyHead_Development">
|
<action name="actionHelp_Support_OSCR_Development">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>&Support SleepyHead Development</string>
|
<string>&Support OSCR Development</string>
|
||||||
</property>
|
</property>
|
||||||
</action>
|
</action>
|
||||||
<action name="actionSleep_Disorder_Terms_Glossary">
|
<action name="actionSleep_Disorder_Terms_Glossary">
|
||||||
|
@ -106,15 +106,15 @@ QString NewProfile::getIntroHTML()
|
|||||||
{
|
{
|
||||||
return "<html>"
|
return "<html>"
|
||||||
"<body>"
|
"<body>"
|
||||||
"<div align=center><h1>" + tr("Welcome to SleepyHead") + "</h1></div>"
|
"<div align=center><h1>" + tr("Welcome to Open Source CPAP Reviewer") + "</h1></div>"
|
||||||
|
|
||||||
"<p>" + tr("This software is being designed to assist you in reviewing the data produced by your CPAP machines and related equipment.")
|
"<p>" + tr("This software is being designed to assist you in reviewing the data produced by your CPAP machines and related equipment.")
|
||||||
+ "</p>"
|
+ "</p>"
|
||||||
|
|
||||||
"<p>" + tr("SleepyHead has been released freely under the <a href='qrc:/COPYING'>GNU Public License</a>, and comes with no warranty, and without ANY claims to fitness for any purpose.")
|
"<p>" + tr("OSCR has been released freely under the <a href='qrc:/COPYING'>GNU Public License v3</a>, and comes with no warranty, and without ANY claims to fitness for any purpose.")
|
||||||
+ "</p>"
|
+ "</p>"
|
||||||
"<div align=center><font color=\"red\"><h2>" + tr("PLEASE READ CAREFULLY") + "</h2></font></div>"
|
"<div align=center><font color=\"red\"><h2>" + tr("PLEASE READ CAREFULLY") + "</h2></font></div>"
|
||||||
"<p>" + tr("SleepyHead is intended merely as a data viewer, and definitely not a substitute for competent medical guidance from your Doctor.")
|
"<p>" + tr("OSCR is intended merely as a data viewer, and definitely not a substitute for competent medical guidance from your Doctor.")
|
||||||
+ "</p>"
|
+ "</p>"
|
||||||
|
|
||||||
"<p>" + tr("Accuracy of any data displayed is not and can not be guaranteed.") + "</p>"
|
"<p>" + tr("Accuracy of any data displayed is not and can not be guaranteed.") + "</p>"
|
||||||
@ -122,14 +122,14 @@ QString NewProfile::getIntroHTML()
|
|||||||
"<p>" + tr("Any reports generated are for PERSONAL USE ONLY, and NOT IN ANY WAY fit for compliance or medical diagnostic purposes.")
|
"<p>" + tr("Any reports generated are for PERSONAL USE ONLY, and NOT IN ANY WAY fit for compliance or medical diagnostic purposes.")
|
||||||
+ "</p>"
|
+ "</p>"
|
||||||
|
|
||||||
"<p>" + tr("The author will not be held liable for <u>anything</u> related to the use or misuse of this software.")
|
"<p>" + tr("The authors will not be held liable for <u>anything</u> related to the use or misuse of this software.")
|
||||||
+ "</p>"
|
+ "</p>"
|
||||||
|
|
||||||
"<div align=center>"
|
"<div align=center>"
|
||||||
"<p><b><font size=+1>" + tr("Use of this software is entirely at your own risk.") +
|
"<p><b><font size=+1>" + tr("Use of this software is entirely at your own risk.") +
|
||||||
"</font></b></p>"
|
"</font></b></p>"
|
||||||
|
|
||||||
"<p><i>" + tr("SleepyHead is copyright ©2011-2018 Mark Watkins") + "<i></p>"
|
"<p><i>" + tr("OSCR is copyright ©2011-2018 Mark Watkins and portions ©2019 Nightowl Software") + "<i></p>"
|
||||||
"</div>"
|
"</div>"
|
||||||
"</body>"
|
"</body>"
|
||||||
"</html>";
|
"</html>";
|
||||||
|
@ -874,7 +874,7 @@
|
|||||||
</font>
|
</font>
|
||||||
</property>
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>SleepyHead</string>
|
<string>OSCR</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="alignment">
|
<property name="alignment">
|
||||||
<set>Qt::AlignHCenter|Qt::AlignTop</set>
|
<set>Qt::AlignHCenter|Qt::AlignTop</set>
|
||||||
|
@ -335,7 +335,7 @@ FORMS += \
|
|||||||
mainwindow.ui \
|
mainwindow.ui \
|
||||||
oximetry.ui \
|
oximetry.ui \
|
||||||
preferencesdialog.ui \
|
preferencesdialog.ui \
|
||||||
report.ui \
|
reports.ui \
|
||||||
profileselect.ui \
|
profileselect.ui \
|
||||||
newprofile.ui \
|
newprofile.ui \
|
||||||
exportcsv.ui \
|
exportcsv.ui \
|
||||||
|
@ -1113,9 +1113,9 @@ void OximeterImport::setInformation()
|
|||||||
"<p style=\" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">"
|
"<p style=\" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">"
|
||||||
+tr("Pulse Oximeters are medical devices used to measure blood oxygen saturation. During extended Apnea events and abnormal breathing patterns, blood oxygen saturation levels can drop significantly, and can indicate issues that need medical attention.")+"</p>"
|
+tr("Pulse Oximeters are medical devices used to measure blood oxygen saturation. During extended Apnea events and abnormal breathing patterns, blood oxygen saturation levels can drop significantly, and can indicate issues that need medical attention.")+"</p>"
|
||||||
"<p style=\" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">"
|
"<p style=\" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">"
|
||||||
+tr("SleepyHead gives you the ability to track Oximetry data alongside CPAP session data, which can give valuable insight into the effectiveness of CPAP treatment. It will also work standalone with your Pulse Oximeter, allowing you to store, track and review your recorded data.")+"</p>"
|
+tr("OSCR gives you the ability to track Oximetry data alongside CPAP session data, which can give valuable insight into the effectiveness of CPAP treatment. It will also work standalone with your Pulse Oximeter, allowing you to store, track and review your recorded data.")+"</p>"
|
||||||
"<p style=\" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">"
|
"<p style=\" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">"
|
||||||
+tr("SleepyHead is currently compatible with Contec CMS50D+, CMS50E, CMS50F and CMS50I serial oximeters.<br/>(Note: Direct importing from bluetooth models is <span style=\" font-weight:600;\">probaby not</span> possible yet)")+"</p>"
|
+tr("OSCR is currently compatible with Contec CMS50D+, CMS50E, CMS50F and CMS50I serial oximeters.<br/>(Note: Direct importing from bluetooth models is <span style=\" font-weight:600;\">probaby not</span> possible yet)")+"</p>"
|
||||||
"<p style=\" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">"
|
"<p style=\" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">"
|
||||||
+tr("You may wish to note, other companies, such as Pulox, simply rebadge Contec CMS50's under new names, such as the Pulox PO-200, PO-300, PO-400. These should also work.")+"</p>"
|
+tr("You may wish to note, other companies, such as Pulox, simply rebadge Contec CMS50's under new names, such as the Pulox PO-200, PO-300, PO-400. These should also work.")+"</p>"
|
||||||
|
|
||||||
@ -1127,7 +1127,7 @@ void OximeterImport::setInformation()
|
|||||||
+tr("If you are trying to sync oximetry and CPAP data, please make sure you imported your CPAP sessions first before proceeding!")+"</span></p>"
|
+tr("If you are trying to sync oximetry and CPAP data, please make sure you imported your CPAP sessions first before proceeding!")+"</span></p>"
|
||||||
"<p style=\" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">"
|
"<p style=\" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">"
|
||||||
"<span style=\" font-weight:600;\">"+tr("Important Notes:")+" </span>"
|
"<span style=\" font-weight:600;\">"+tr("Important Notes:")+" </span>"
|
||||||
+tr("For SleepyHead to be able to locate and read directly from your Oximeter device, you need to ensure the correct device drivers (eg. USB to Serial UART) have been installed on your computer. For more information about this, %1click here%2.").arg("<a href=\"http://www.silabs.com/products/mcu/pages/usbtouartbridgevcpdrivers.aspx\"><span style=\" text-decoration: underline; color:#0000ff;\">").arg("</span></a>")+"</p>"
|
+tr("For OSCR to be able to locate and read directly from your Oximeter device, you need to ensure the correct device drivers (eg. USB to Serial UART) have been installed on your computer. For more information about this, %1click here%2.").arg("<a href=\"http://www.silabs.com/products/mcu/pages/usbtouartbridgevcpdrivers.aspx\"><span style=\" text-decoration: underline; color:#0000ff;\">").arg("</span></a>")+"</p>"
|
||||||
"<p style=\" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">"
|
"<p style=\" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">"
|
||||||
+tr("Contec CMS50D+ devices do not have an internal clock, and do not record a starting time. If you do not have a CPAP session to link a recording to, you will have to enter the start time manually after the import process is completed.")+"</p>"
|
+tr("Contec CMS50D+ devices do not have an internal clock, and do not record a starting time. If you do not have a CPAP session to link a recording to, you will have to enter the start time manually after the import process is completed.")+"</p>"
|
||||||
"<p style=\" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">"
|
"<p style=\" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">"
|
||||||
|
@ -964,7 +964,7 @@ background: qlineargradient( x1:0 y1:0, x2:1 y2:0, stop:0 white, stop:1 #cccccc)
|
|||||||
</font>
|
</font>
|
||||||
</property>
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>CMS50E/F users, when importing directly, please don't select upload on your device until SleepyHead prompts you to.</string>
|
<string>CMS50E/F users, when importing directly, please don't select upload on your device until OSCR prompts you to.</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="alignment">
|
<property name="alignment">
|
||||||
<set>Qt::AlignCenter</set>
|
<set>Qt::AlignCenter</set>
|
||||||
@ -1001,7 +1001,7 @@ background: qlineargradient( x1:0 y1:0, x2:1 y2:0, stop:0 white, stop:1 #cccccc)
|
|||||||
<item>
|
<item>
|
||||||
<widget class="QCheckBox" name="cms50SyncTime">
|
<widget class="QCheckBox" name="cms50SyncTime">
|
||||||
<property name="toolTip">
|
<property name="toolTip">
|
||||||
<string><html><head/><body><p>If enabled, SleepyHead will automatically reset your CMS50's internal clock using your computers current time.</p></body></html></string>
|
<string><html><head/><body><p>If enabled, OSCR will automatically reset your CMS50's internal clock using your computers current time.</p></body></html></string>
|
||||||
</property>
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Set device date/time</string>
|
<string>Set device date/time</string>
|
||||||
@ -1074,7 +1074,7 @@ background: qlineargradient( x1:0 y1:0, x2:1 y2:0, stop:0 white, stop:1 #cccccc)
|
|||||||
<item>
|
<item>
|
||||||
<widget class="QCheckBox" name="cms50EraseAfterwards">
|
<widget class="QCheckBox" name="cms50EraseAfterwards">
|
||||||
<property name="toolTip">
|
<property name="toolTip">
|
||||||
<string><html><head/><body><p>This option will erase the imported session from your oximeter after import has completed. </p><p>Use with caution, becauseif something goes wrong before SleepyHead saves your session, you won't get it back.</p></body></html></string>
|
<string><html><head/><body><p>This option will erase the imported session from your oximeter after import has completed. </p><p>Use with caution, becauseif something goes wrong before OSCR saves your session, you won't get it back.</p></body></html></string>
|
||||||
</property>
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Erase session after successful upload</string>
|
<string>Erase session after successful upload</string>
|
||||||
@ -1645,7 +1645,7 @@ background: qlineargradient( x1:0 y1:0, x2:1 y2:0, stop:0 white, stop:1 #cccccc)
|
|||||||
</sizepolicy>
|
</sizepolicy>
|
||||||
</property>
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Please choose which one you want to import into SleepyHead</string>
|
<string>Please choose which one you want to import into OSCR</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="alignment">
|
<property name="alignment">
|
||||||
<set>Qt::AlignCenter</set>
|
<set>Qt::AlignCenter</set>
|
||||||
@ -1822,7 +1822,7 @@ background: qlineargradient( x1:0 y1:0, x2:1 y2:0, stop:0 white, stop:1 #cccccc)
|
|||||||
</sizepolicy>
|
</sizepolicy>
|
||||||
</property>
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string><html><head/><body><p>SleepyHead needs a starting time to know where to save this oximetry session to.</p><p>Choose one of the following options:</p></body></html></string>
|
<string><html><head/><body><p>OSCR needs a starting time to know where to save this oximetry session to.</p><p>Choose one of the following options:</p></body></html></string>
|
||||||
</property>
|
</property>
|
||||||
<property name="alignment">
|
<property name="alignment">
|
||||||
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
|
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
|
||||||
|
@ -61,7 +61,7 @@ PreferencesDialog::PreferencesDialog(QWidget *parent, Profile *_profile) :
|
|||||||
|
|
||||||
#ifdef LOCK_RESMED_SESSIONS
|
#ifdef LOCK_RESMED_SESSIONS
|
||||||
// Remove access to session splitting options and show ResMed users a notice instead
|
// Remove access to session splitting options and show ResMed users a notice instead
|
||||||
ui->ResMedWarning->setText(tr("<p><b>Please Note:</b> SleepyHead's advanced session splitting capabilities are not possible with <b>ResMed</b> machines due to a limitation in the way their settings and summary data is stored, and therefore they have been disabled for this profile.</p><p>On ResMed machines, days will <b>split at noon</b> like in ResMed's commercial software.</p>"));
|
ui->ResMedWarning->setText(tr("<p><b>Please Note:</b> OSCR's advanced session splitting capabilities are not possible with <b>ResMed</b> machines due to a limitation in the way their settings and summary data is stored, and therefore they have been disabled for this profile.</p><p>On ResMed machines, days will <b>split at noon</b> like in ResMed's commercial software.</p>"));
|
||||||
ui->ResMedWarning->setVisible(haveResMed);
|
ui->ResMedWarning->setVisible(haveResMed);
|
||||||
|
|
||||||
if (haveResMed) {
|
if (haveResMed) {
|
||||||
@ -1117,13 +1117,13 @@ void PreferencesDialog::on_createSDBackups_toggled(bool checked)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (haveS9
|
if (haveS9 && QMessageBox::question(this,
|
||||||
&& QMessageBox::question(this, tr("This may not be a good idea"),
|
tr("This may not be a good idea"),
|
||||||
tr("ResMed S9 machines routinely delete certain data from your SD card older than 7 and 30 days (depending on resolution).")
|
tr("ResMed S9 machines routinely delete certain data from your SD card older than 7 and 30 days (depending on resolution).") +
|
||||||
+ " " + tr("If you ever need to reimport this data again (whether in SleepyHead or ResScan) this data won't come back.")
|
tr(" If you ever need to reimport this data again (whether in OSCR or ResScan) this data won't come back.") +
|
||||||
+ " " + tr("If you need to conserve disk space, please remember to carry out manual backups.") +
|
tr(" If you need to conserve disk space, please remember to carry out manual backups.") +
|
||||||
" " + tr("Are you sure you want to disable these backups?"), QMessageBox::Yes,
|
tr(" Are you sure you want to disable these backups?"),
|
||||||
QMessageBox::No) == QMessageBox::No) {
|
QMessageBox::Yes, QMessageBox::No) == QMessageBox::No) {
|
||||||
ui->createSDBackups->setChecked(true);
|
ui->createSDBackups->setChecked(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -1165,8 +1165,10 @@ void PreferencesDialog::on_resetChannelDefaults_clicked()
|
|||||||
void PreferencesDialog::on_createSDBackups_clicked(bool checked)
|
void PreferencesDialog::on_createSDBackups_clicked(bool checked)
|
||||||
{
|
{
|
||||||
if (!checked && p_profile->session->backupCardData()) {
|
if (!checked && p_profile->session->backupCardData()) {
|
||||||
if (QMessageBox::question(this, STR_MessageBox_Warning, tr("Switching off automatic backups is not a good idea, because SleepyHead needs these to rebuild the database if errors are found.")+"\n\n"+
|
if (QMessageBox::question(this,
|
||||||
tr("Are you really sure you want to do this?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::No) == QMessageBox::Yes) {
|
STR_MessageBox_Warning, tr("Switching off backups is not a good idea, because OSCR needs these to rebuild the database if errors are found.\n\n"+
|
||||||
|
tr("Are you really sure you want to do this?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::No) == QMessageBox::Yes) {
|
||||||
|
// do nothing
|
||||||
} else {
|
} else {
|
||||||
ui->createSDBackups->setChecked(true);
|
ui->createSDBackups->setChecked(true);
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* SleepyHead Preferences Dialog Headers
|
/* OSCR Preferences Dialog Headers
|
||||||
*
|
*
|
||||||
* Copyright (c) 2011-2018 Mark Watkins <mark@jedimark.net>
|
* Copyright (c) 2011-2018 Mark Watkins <mark@jedimark.net>
|
||||||
*
|
*
|
||||||
@ -37,9 +37,9 @@ class MySortFilterProxyModel: public QSortFilterProxyModel
|
|||||||
};
|
};
|
||||||
|
|
||||||
/*! \class PreferencesDialog
|
/*! \class PreferencesDialog
|
||||||
\brief SleepyHead's Main Preferences Window
|
\brief OSCR's Main Preferences Window
|
||||||
|
|
||||||
This provides the Preferences form and logic to alter Preferences for SleepyHead
|
This provides the Preferences form and logic to alter Preferences for OSCR
|
||||||
*/
|
*/
|
||||||
class PreferencesDialog : public QDialog
|
class PreferencesDialog : public QDialog
|
||||||
{
|
{
|
||||||
|
@ -432,8 +432,8 @@ p, li { white-space: pre-wrap; }
|
|||||||
Backed up EDF files are stored in the .gz format,
|
Backed up EDF files are stored in the .gz format,
|
||||||
which is common on Mac & Linux platforms..
|
which is common on Mac & Linux platforms..
|
||||||
|
|
||||||
SleepyHead can import from this compressed backup directory natively..
|
OSCR can import from this compressed backup directory natively..
|
||||||
To use with ResScan will require the .gz files to be uncompressed first..</string>
|
To use it with ResScan will require the .gz files to be uncompressed first..</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Compress SD Card Backups (slower first import, but makes backups smaller)</string>
|
<string>Compress SD Card Backups (slower first import, but makes backups smaller)</string>
|
||||||
@ -448,7 +448,7 @@ To use with ResScan will require the .gz files to be uncompressed first..</strin
|
|||||||
</font>
|
</font>
|
||||||
</property>
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>The following options affect the amount of disk space SleepyHead uses, and all have an effect on how long import takes.</string>
|
<string>The following options affect the amount of disk space OSCR uses, and have an effect on how long import takes.</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="wordWrap">
|
<property name="wordWrap">
|
||||||
<bool>true</bool>
|
<bool>true</bool>
|
||||||
@ -458,12 +458,12 @@ To use with ResScan will require the .gz files to be uncompressed first..</strin
|
|||||||
<item row="4" column="0">
|
<item row="4" column="0">
|
||||||
<widget class="QCheckBox" name="compressSessionData">
|
<widget class="QCheckBox" name="compressSessionData">
|
||||||
<property name="toolTip">
|
<property name="toolTip">
|
||||||
<string>This makes SleepyHead's data take around half as much space.
|
<string>This makes OSCR's data take around half as much space.
|
||||||
But it makes import and day changing take longer..
|
But it makes import and day changing take longer..
|
||||||
If you've got a new computer with a small solid state disk, this is a good option.</string>
|
If you've got a new computer with a small solid state disk, this is a good option.</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Compress Session Data (makes SleepyHead data smaller, but day changing slower.)</string>
|
<string>Compress Session Data (makes OSCR data smaller, but day changing slower.)</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
@ -472,10 +472,10 @@ If you've got a new computer with a small solid state disk, this is a good optio
|
|||||||
<property name="toolTip">
|
<property name="toolTip">
|
||||||
<string>This maintains a backup of SD-card data for ResMed machines,
|
<string>This maintains a backup of SD-card data for ResMed machines,
|
||||||
|
|
||||||
ResMed machines delete high resolution data older than 7 days,
|
ResMed S9 series machines delete high resolution data older than 7 days,
|
||||||
and graph data older than 30 days..
|
and graph data older than 30 days..
|
||||||
|
|
||||||
SleepyHead can keep a copy of this data if you ever need to reinstall.
|
OSCR can keep a copy of this data if you ever need to reinstall.
|
||||||
(Highly recomended, unless your short on disk space or don't care about the graph data)</string>
|
(Highly recomended, unless your short on disk space or don't care about the graph data)</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
@ -603,7 +603,7 @@ SleepyHead can keep a copy of this data if you ever need to reinstall.
|
|||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
<widget class="QCheckBox" name="preloadSummaries">
|
<widget class="QCheckBox" name="preloadSummaries">
|
||||||
<property name="toolTip">
|
<property name="toolTip">
|
||||||
<string><html><head/><body><p>Makes starting SleepyHead a bit slower, by pre-loading all the summary data in advance, which speeds up overview browsing and a few other calculations later on. </p><p>If you have a large amount of data, it might be worth keeping this switched off, but if you typically like to view <span style=" font-style:italic;">everything</span> in overview, all the summary data still has to be loaded anyway. </p><p>Note this setting doesn't affect waveform and event data, which is always demand loaded as needed.</p></body></html></string>
|
<string><html><head/><body><p>Makes starting OSCR a bit slower, by pre-loading all the summary data in advance, which speeds up overview browsing and a few other calculations later on. </p><p>If you have a large amount of data, it might be worth keeping this switched off, but if you typically like to view <span style=" font-style:italic;">everything</span> in overview, all the summary data still has to be loaded anyway. </p><p>Note this setting doesn't affect waveform and event data, which is always demand loaded as needed.</p></body></html></string>
|
||||||
</property>
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Pre-Load all summary data at startup</string>
|
<string>Pre-Load all summary data at startup</string>
|
||||||
@ -994,7 +994,7 @@ This option must be enabled before import, otherwise a purge is required.</strin
|
|||||||
<item row="6" column="0" colspan="4">
|
<item row="6" column="0" colspan="4">
|
||||||
<widget class="QCheckBox" name="resyncMachineDetectedEvents">
|
<widget class="QCheckBox" name="resyncMachineDetectedEvents">
|
||||||
<property name="toolTip">
|
<property name="toolTip">
|
||||||
<string>This experimental option attempts to use SleepyHead's event flagging system to improve machine detected event positioning.</string>
|
<string>This experimental option attempts to use OSCR's event flagging system to improve machine detected event positioning.</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Resync Machine Detected Events (Experimental)</string>
|
<string>Resync Machine Detected Events (Experimental)</string>
|
||||||
@ -1978,7 +1978,7 @@ Mainly affects the importer.</string>
|
|||||||
<item row="2" column="1">
|
<item row="2" column="1">
|
||||||
<widget class="QCheckBox" name="removeCardNotificationCheckbox">
|
<widget class="QCheckBox" name="removeCardNotificationCheckbox">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Show Remove Card reminder notification on SleepyHead shutdown</string>
|
<string>Show Remove Card reminder notification on OSCR shutdown</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
@ -2251,7 +2251,7 @@ p, li { white-space: pre-wrap; }
|
|||||||
<item row="2" column="1">
|
<item row="2" column="1">
|
||||||
<widget class="QComboBox" name="openingTabCombo">
|
<widget class="QComboBox" name="openingTabCombo">
|
||||||
<property name="toolTip">
|
<property name="toolTip">
|
||||||
<string><html><head/><body><p>Which tab to open on loading a profile. (Note: It will default to Profile if SleepyHead is set to not open a profile on startup)</p></body></html></string>
|
<string><html><head/><body><p>Which tab to open on loading a profile. (Note: It will default to Profile if OSCR is set to not open a profile on startup)</p></body></html></string>
|
||||||
</property>
|
</property>
|
||||||
<property name="currentText">
|
<property name="currentText">
|
||||||
<string>Profile</string>
|
<string>Profile</string>
|
||||||
@ -2729,7 +2729,7 @@ this application to be unstable with this feature enabled.</string>
|
|||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
<widget class="QLabel" name="label_8">
|
<widget class="QLabel" name="label_8">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Try changing this from the default setting (Desktop OpenGL) if you experience rendering problems with SleepyHead's graphs.</string>
|
<string>Try changing this from the default setting (Desktop OpenGL) if you experience rendering problems with OSCR's graphs.</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="wordWrap">
|
<property name="wordWrap">
|
||||||
<bool>true</bool>
|
<bool>true</bool>
|
||||||
|
@ -94,13 +94,13 @@ ProfileSelect::ProfileSelect(QWidget *parent) :
|
|||||||
popupMenu->addSeparator();
|
popupMenu->addSeparator();
|
||||||
popupMenu->addAction(tr("Delete Profile"), this, SLOT(deleteProfile()));
|
popupMenu->addAction(tr("Delete Profile"), this, SLOT(deleteProfile()));
|
||||||
|
|
||||||
ui->labelAppName->setText(STR_TR_SleepyHead);
|
ui->labelAppName->setText(STR_TR_OSCR);
|
||||||
ui->labelVersion->setText(STR_TR_AppVersion);
|
ui->labelVersion->setText(STR_TR_AppVersion);
|
||||||
// if (GIT_BRANCH!="master")
|
// if (GIT_BRANCH!="master")
|
||||||
// ui->labelBuild->setText(GIT_BRANCH);
|
// ui->labelBuild->setText(GIT_BRANCH);
|
||||||
// else ui->labelBuild->setText(QString());
|
// else ui->labelBuild->setText(QString());
|
||||||
ui->labelFolder->setText(GetAppRoot());
|
ui->labelFolder->setText(GetAppRoot());
|
||||||
ui->labelFolder->setToolTip("Current SleepyHead data folder\n" + GetAppRoot());
|
ui->labelFolder->setToolTip("Current OSCR data folder\n" + GetAppRoot());
|
||||||
|
|
||||||
ui->listView->verticalScrollBar()->setStyleSheet("QScrollBar:vertical {border: 0px solid grey; background: transparent; }"
|
ui->listView->verticalScrollBar()->setStyleSheet("QScrollBar:vertical {border: 0px solid grey; background: transparent; }"
|
||||||
"QScrollBar::handle:vertical {"
|
"QScrollBar::handle:vertical {"
|
||||||
|
@ -232,7 +232,7 @@ background: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0, stop:0 rgba(255,
|
|||||||
<item>
|
<item>
|
||||||
<widget class="QPushButton" name="pushButton">
|
<widget class="QPushButton" name="pushButton">
|
||||||
<property name="toolTip">
|
<property name="toolTip">
|
||||||
<string>Choose a different SleepyHead data folder.</string>
|
<string>Choose a different OSCR data folder.</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="styleSheet">
|
<property name="styleSheet">
|
||||||
<string notr="true"/>
|
<string notr="true"/>
|
||||||
@ -271,7 +271,7 @@ background: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0, stop:0 rgba(255,
|
|||||||
<string notr="true">border: 0px;</string>
|
<string notr="true">border: 0px;</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>SleepyHead</string>
|
<string>OSCR</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="alignment">
|
<property name="alignment">
|
||||||
<set>Qt::AlignCenter</set>
|
<set>Qt::AlignCenter</set>
|
||||||
@ -307,7 +307,7 @@ background: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0, stop:0 rgba(255,
|
|||||||
<item>
|
<item>
|
||||||
<widget class="QPushButton" name="quitButton">
|
<widget class="QPushButton" name="quitButton">
|
||||||
<property name="toolTip">
|
<property name="toolTip">
|
||||||
<string>Click here if you didn't want to start SleepyHead.</string>
|
<string>Click here if you didn't want to start OSCR.</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>&Quit</string>
|
<string>&Quit</string>
|
||||||
@ -380,7 +380,7 @@ background: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0, stop:0 rgba(255,
|
|||||||
</sizepolicy>
|
</sizepolicy>
|
||||||
</property>
|
</property>
|
||||||
<property name="toolTip">
|
<property name="toolTip">
|
||||||
<string>The current location of SleepyHead data store.</string>
|
<string>The current location of OSCR data store.</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="styleSheet">
|
<property name="styleSheet">
|
||||||
<string notr="true">border: 0px;</string>
|
<string notr="true">border: 0px;</string>
|
||||||
|
@ -113,7 +113,7 @@
|
|||||||
</spacer>
|
</spacer>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QLabel" name="SleepyHeadLogo">
|
<widget class="QLabel" name="OSCR_Logo">
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||||
<horstretch>1</horstretch>
|
<horstretch>1</horstretch>
|
||||||
@ -159,7 +159,7 @@
|
|||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QLabel" name="SleepyHeadLabel">
|
<widget class="QLabel" name="OSCR_Label">
|
||||||
<property name="font">
|
<property name="font">
|
||||||
<font>
|
<font>
|
||||||
<pointsize>13</pointsize>
|
<pointsize>13</pointsize>
|
||||||
@ -168,7 +168,7 @@
|
|||||||
</font>
|
</font>
|
||||||
</property>
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>SleepyHead</string>
|
<string>OSCR</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="alignment">
|
<property name="alignment">
|
||||||
<set>Qt::AlignCenter</set>
|
<set>Qt::AlignCenter</set>
|
||||||
|
@ -552,7 +552,7 @@ void Report::PrintReport(gGraphView *gv, QString name, QDate date)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (first) {
|
if (first) {
|
||||||
QString footer = QObject::tr("SleepyHead v%1 - http://sleepyhead.sourceforge.net").arg(VersionString);
|
QString footer = QObject::tr("OSCR v%1").arg(VersionString);
|
||||||
|
|
||||||
QRectF bounds = painter.boundingRect(QRectF(0, virt_height, virt_width, normal_height), footer,
|
QRectF bounds = painter.boundingRect(QRectF(0, virt_height, virt_width, normal_height), footer,
|
||||||
QTextOption(Qt::AlignHCenter));
|
QTextOption(Qt::AlignHCenter));
|
||||||
|
@ -125,7 +125,7 @@
|
|||||||
</font>
|
</font>
|
||||||
</property>
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Welcome To SleepyHead</string>
|
<string>Welcome To Open Source CPAP Reviewer</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="alignment">
|
<property name="alignment">
|
||||||
<set>Qt::AlignCenter</set>
|
<set>Qt::AlignCenter</set>
|
||||||
|
Loading…
Reference in New Issue
Block a user