mirror of
https://gitlab.com/pholy/OSCAR-code.git
synced 2025-04-07 03:30:44 +00:00
Clean up versioning, and make Release Notes welcome message translatable
This commit is contained in:
parent
7a36de4865
commit
b969323ab2
@ -267,6 +267,7 @@ QString STR_TR_PrRelief; // Pressure Relief
|
|||||||
|
|
||||||
QString STR_TR_Bookmarks;
|
QString STR_TR_Bookmarks;
|
||||||
QString STR_TR_SleepyHead;
|
QString STR_TR_SleepyHead;
|
||||||
|
QString STR_TR_AppVersion;
|
||||||
|
|
||||||
QString STR_TR_Default;
|
QString STR_TR_Default;
|
||||||
|
|
||||||
@ -461,6 +462,7 @@ void initializeStrings()
|
|||||||
|
|
||||||
STR_TR_Bookmarks = QObject::tr("Bookmarks");
|
STR_TR_Bookmarks = QObject::tr("Bookmarks");
|
||||||
STR_TR_SleepyHead = QObject::tr("SleepyHead");
|
STR_TR_SleepyHead = QObject::tr("SleepyHead");
|
||||||
|
STR_TR_AppVersion = QObject::tr("v%1").arg(VersionString);
|
||||||
|
|
||||||
STR_TR_Mode = QObject::tr("Mode");
|
STR_TR_Mode = QObject::tr("Mode");
|
||||||
STR_TR_Model = QObject::tr("Model");
|
STR_TR_Model = QObject::tr("Model");
|
||||||
|
@ -297,6 +297,7 @@ extern QString STR_TR_SensAwake;
|
|||||||
|
|
||||||
extern QString STR_TR_Bookmarks;
|
extern QString STR_TR_Bookmarks;
|
||||||
extern QString STR_TR_SleepyHead;
|
extern QString STR_TR_SleepyHead;
|
||||||
|
extern QString STR_TR_AppVersion;
|
||||||
|
|
||||||
extern QString STR_TR_Mode;
|
extern QString STR_TR_Mode;
|
||||||
extern QString STR_TR_Model;
|
extern QString STR_TR_Model;
|
||||||
|
@ -43,7 +43,12 @@ IntellipapLoader::~IntellipapLoader()
|
|||||||
|
|
||||||
bool IntellipapLoader::Detect(const QString & givenpath)
|
bool IntellipapLoader::Detect(const QString & givenpath)
|
||||||
{
|
{
|
||||||
QDir dir(givenpath);
|
QString path = givenpath;
|
||||||
|
if (path.endsWith("/SL")) {
|
||||||
|
path.chop(3);
|
||||||
|
}
|
||||||
|
|
||||||
|
QDir dir(path);
|
||||||
|
|
||||||
if (!dir.exists()) {
|
if (!dir.exists()) {
|
||||||
return false;
|
return false;
|
||||||
@ -51,6 +56,7 @@ bool IntellipapLoader::Detect(const QString & givenpath)
|
|||||||
|
|
||||||
// Intellipap has a folder called SL in the root directory
|
// Intellipap has a folder called SL in the root directory
|
||||||
if (!dir.cd("SL")) {
|
if (!dir.cd("SL")) {
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -66,9 +72,12 @@ int IntellipapLoader::Open(QString path)
|
|||||||
{
|
{
|
||||||
// Check for SL directory
|
// Check for SL directory
|
||||||
// Check for DV5MFirm.bin?
|
// Check for DV5MFirm.bin?
|
||||||
QString newpath;
|
|
||||||
|
|
||||||
path = path.replace("\\", "/");
|
path = path.replace("\\", "/");
|
||||||
|
if (path.endsWith("/SL")) {
|
||||||
|
path.chop(3);
|
||||||
|
}
|
||||||
|
QString newpath = path;
|
||||||
|
|
||||||
|
|
||||||
QString dirtag = "SL";
|
QString dirtag = "SL";
|
||||||
|
|
||||||
@ -87,7 +96,9 @@ int IntellipapLoader::Open(QString path)
|
|||||||
filename = newpath + "/SET1";
|
filename = newpath + "/SET1";
|
||||||
QFile f(filename);
|
QFile f(filename);
|
||||||
|
|
||||||
if (!f.exists()) { return -1; }
|
if (!f.exists()) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
f.open(QFile::ReadOnly);
|
f.open(QFile::ReadOnly);
|
||||||
QTextStream tstream(&f);
|
QTextStream tstream(&f);
|
||||||
|
@ -1394,14 +1394,14 @@ bool PRS1Import::ParseF0Events()
|
|||||||
}
|
}
|
||||||
// data1 = buffer[pos++];
|
// data1 = buffer[pos++];
|
||||||
|
|
||||||
tt = t + qint64((data0+data1)*2) * 1000L;
|
//tt = t - qint64((data0+data1)*2) * 1000L;
|
||||||
|
|
||||||
if (!Code[12]) {
|
if (!Code[12]) {
|
||||||
Code[12] = session->AddEventList(PRS1_0B, EVL_Event);
|
Code[12] = session->AddEventList(PRS1_0B, EVL_Event);
|
||||||
}
|
}
|
||||||
|
|
||||||
// FIXME
|
// FIXME
|
||||||
Code[12]->AddEvent(tt, data0);
|
Code[12]->AddEvent(t, data0);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x0d: // Vibratory Snore
|
case 0x0d: // Vibratory Snore
|
||||||
@ -2937,7 +2937,7 @@ void PRS1Loader::initChannels()
|
|||||||
QString(unknownshort).arg(0xa,2,16,QChar('0')),
|
QString(unknownshort).arg(0xa,2,16,QChar('0')),
|
||||||
STR_UNIT_Unknown,
|
STR_UNIT_Unknown,
|
||||||
DEFAULT, QColor("black")));
|
DEFAULT, QColor("black")));
|
||||||
channel.add(GRP_CPAP, new Channel(PRS1_0B = 0x1155, SPAN, MT_CPAP, SESSION,
|
channel.add(GRP_CPAP, new Channel(PRS1_0B = 0x1155, UNKNOWN, MT_CPAP, SESSION,
|
||||||
"PRS1_0B",
|
"PRS1_0B",
|
||||||
QString(unknownname).arg(0xb,2,16,QChar('0')),
|
QString(unknownname).arg(0xb,2,16,QChar('0')),
|
||||||
QString(unknowndesc).arg(0xb,2,16,QChar('0')),
|
QString(unknowndesc).arg(0xb,2,16,QChar('0')),
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
//********************************************************************************************
|
//********************************************************************************************
|
||||||
// Please INCREMENT the following value when making changes to this loaders implementation.
|
// Please INCREMENT the following value when making changes to this loaders implementation.
|
||||||
//
|
//
|
||||||
const int prs1_data_version = 13;
|
const int prs1_data_version = 14;
|
||||||
//
|
//
|
||||||
//********************************************************************************************
|
//********************************************************************************************
|
||||||
|
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
//********************************************************************************************
|
//********************************************************************************************
|
||||||
// Please INCREMENT the following value when making changes to this loaders implementation.
|
// Please INCREMENT the following value when making changes to this loaders implementation.
|
||||||
//
|
//
|
||||||
const int resmed_data_version = 9;
|
const int resmed_data_version = 10;
|
||||||
//
|
//
|
||||||
//********************************************************************************************
|
//********************************************************************************************
|
||||||
|
|
||||||
|
@ -490,7 +490,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("SleepyHead (%1) needs to upgrade its database for %2 %3 %4").
|
||||||
arg(FullVersionString).
|
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/>";
|
||||||
|
|
||||||
|
@ -187,10 +187,65 @@ void UpdaterWindow::requestFile()
|
|||||||
qint64)));
|
qint64)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int checkVersionStatus(QString statusstr)
|
||||||
|
{
|
||||||
|
if (statusstr.compare("testing", Qt::CaseInsensitive) == 0) return 0;
|
||||||
|
else if (statusstr.compare("beta", Qt::CaseInsensitive) == 0) return 1;
|
||||||
|
else if (statusstr.compare("rc", Qt::CaseInsensitive) == 0) return 2;
|
||||||
|
else if (statusstr.compare("r", Qt::CaseInsensitive) == 0) return 3;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
struct VersionStruct {
|
||||||
|
short major;
|
||||||
|
short minor;
|
||||||
|
short revision;
|
||||||
|
short status;
|
||||||
|
short build;
|
||||||
|
};
|
||||||
|
|
||||||
|
VersionStruct parseVersion(QString versionstring)
|
||||||
|
{
|
||||||
|
static VersionStruct version;
|
||||||
|
|
||||||
|
QStringList parts = versionstring.split(".");
|
||||||
|
bool ok, dodgy = false;
|
||||||
|
|
||||||
|
if (parts.size() < 3) dodgy = true;
|
||||||
|
|
||||||
|
short major = parts[0].toInt(&ok);
|
||||||
|
if (!ok) dodgy = true;
|
||||||
|
|
||||||
|
short minor = parts[1].toInt(&ok);
|
||||||
|
if (!ok) dodgy = true;
|
||||||
|
|
||||||
|
QStringList patchver = parts[2].split("-");
|
||||||
|
if (patchver.size() < 3) dodgy = true;
|
||||||
|
|
||||||
|
short rev = patchver[0].toInt(&ok);
|
||||||
|
if (!ok) dodgy = true;
|
||||||
|
|
||||||
|
short build = patchver[2].toInt(&ok);
|
||||||
|
if (!ok) dodgy = true;
|
||||||
|
|
||||||
|
int status = checkVersionStatus(patchver[1]);
|
||||||
|
|
||||||
|
if (!dodgy) {
|
||||||
|
version.major = major;
|
||||||
|
version.minor = minor;
|
||||||
|
version.revision = rev;
|
||||||
|
version.status = status;
|
||||||
|
version.build = build;
|
||||||
|
}
|
||||||
|
return version;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Compare supplied version string with current version
|
// Compare supplied version string with current version
|
||||||
// < 0 = this one is newer or version supplied is dodgy, 0 = same, and > 0 there is a newer version
|
// < 0 = this one is newer or version supplied is dodgy, 0 = same, and > 0 there is a newer version
|
||||||
int compareVersion(QString version)
|
int compareVersion(QString version)
|
||||||
{
|
{
|
||||||
|
// v1.0.0-beta-2
|
||||||
QStringList parts = version.split(".");
|
QStringList parts = version.split(".");
|
||||||
bool ok;
|
bool ok;
|
||||||
|
|
||||||
@ -218,8 +273,30 @@ int compareVersion(QString version)
|
|||||||
}
|
}
|
||||||
|
|
||||||
QStringList patchver = parts[2].split("-");
|
QStringList patchver = parts[2].split("-");
|
||||||
short build = patchver[0].toInt(&ok);
|
if (patchver.size() < 3) {
|
||||||
|
// dodgy version string supplied.
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
short rev = patchver[0].toInt(&ok);
|
||||||
if (!ok) return -1;
|
if (!ok) return -1;
|
||||||
|
if (rev > revision_number) {
|
||||||
|
return 1;
|
||||||
|
} else if (rev < revision_number) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
short build = patchver[2].toInt(&ok);
|
||||||
|
if (!ok) return -1;
|
||||||
|
|
||||||
|
int status = checkVersionStatus(patchver[1]);
|
||||||
|
int rstatus = checkVersionStatus(ReleaseStatus);
|
||||||
|
|
||||||
|
if (status > rstatus) {
|
||||||
|
return 1;
|
||||||
|
} else if (status < rstatus) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
if (build > build_number) {
|
if (build > build_number) {
|
||||||
return 1;
|
return 1;
|
||||||
@ -227,26 +304,6 @@ int compareVersion(QString version)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((patchver[1]=="beta") && (ReleaseStatus!="beta")) {
|
|
||||||
return 1;
|
|
||||||
} else if (patchver[1] == ReleaseStatus) {
|
|
||||||
return 0;
|
|
||||||
} else {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// short revision = patchver[0].toInt(&ok);
|
|
||||||
// if (!ok) return -1;
|
|
||||||
|
|
||||||
// if (revision > revision_number) {
|
|
||||||
// return 1;
|
|
||||||
// } else if (revision < revision_number) {
|
|
||||||
// return -1;
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
|
||||||
// patchver[1] = tag..
|
|
||||||
|
|
||||||
// Versions match
|
// Versions match
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -337,7 +394,7 @@ void UpdaterWindow::ParseUpdateXML(QIODevice *dev)
|
|||||||
updates.push_back(upq);
|
updates.push_back(upq);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (upd && upd->version > FullVersionString) {
|
if (upd && upd->version > VersionString) {
|
||||||
updates.push_back(upd);
|
updates.push_back(upd);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -353,12 +410,12 @@ void UpdaterWindow::ParseUpdateXML(QIODevice *dev)
|
|||||||
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 SleepyHead 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(FullVersionString);
|
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 SleepyHead 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(FullVersionString);
|
arg(latestapp).arg(VersionString);
|
||||||
ui->notesTabWidget->setCurrentIndex(1);
|
ui->notesTabWidget->setCurrentIndex(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -369,7 +426,7 @@ void UpdaterWindow::ParseUpdateXML(QIODevice *dev)
|
|||||||
for (int i = 0; i < release->updates[platform].size(); i++) {
|
for (int i = 0; i < release->updates[platform].size(); i++) {
|
||||||
update = &release->updates[platform][i];
|
update = &release->updates[platform][i];
|
||||||
|
|
||||||
if ((update->type == "application") && (update->version > FullVersionString)) {
|
if ((update->type == "application") && (update->version > VersionString)) {
|
||||||
notes += "<b>" + tr("SleepyHead v%1 build notes").arg(update->version) + "</b><br/>" +
|
notes += "<b>" + tr("SleepyHead 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)) {
|
||||||
|
@ -1,22 +1,12 @@
|
|||||||
<html>
|
<!DOCTYPE ChangeLog>
|
||||||
<head><meta charset="UTF-8"></head>
|
|
||||||
<body>
|
|
||||||
<h1><image src="qrc:/docs/sheep.png" width=64 height=64>SleepyHead v1.0.0 beta Release Notes</b></h2></p>
|
|
||||||
<h2><p>Greetings!</p></h2>
|
|
||||||
<p><h3>After four years in the making, this build brings SleepyHead into the final beta phase.</h3></p>
|
|
||||||
<p><h3>Things are not perfect yet, but the focus from now is putting on the finishing touches.</h3></p>
|
|
||||||
<p><h3>This version brings support for the new Philips Respironics DreamStation, and older PRS1 1060P AVAPS models.</h3></p>
|
|
||||||
<p><h3><font color='red'><b>Important:</b></font> <i>Back up your data folder manually, by making a copy the SleepyHeadData folder, as attempting to roll back later may break things.</i></h3></p>
|
|
||||||
<p><b>Sleep Well, and good luck!</b></p>
|
|
||||||
<p><b><i>JediMark</i></b></p>
|
|
||||||
|
|
||||||
<br/>
|
|
||||||
<b>Changes and fixes in v1.0.0 beta</b>
|
<b>Changes and fixes in v1.0.0 beta</b>
|
||||||
|
<version number="1.0.0-beta-0">
|
||||||
<list>
|
<list>
|
||||||
|
<li>Make Release Notes welcome message translate-able (should the changelog be too?)</li>
|
||||||
<li>Tons of other bug fixes</li>
|
<li>Tons of other bug fixes</li>
|
||||||
<li>Fix dodgy PRS1 ASV pressure settings</li>
|
<li>Fix dodgy PRS1 ASV pressure settings</li>
|
||||||
<li>Resolve duplicate RX changes issue</li>
|
<li>Resolve duplicate RX changes issue</li>
|
||||||
<li>PRS1 1060P AVAPS support... (No flow waveform on these, but still pretty good)
|
<li>PRS1 1060P support... (No flow waveform on these, but still pretty good)
|
||||||
<li>Philips Respironics DreamStation support (Thanks for your assistance JediBob and PaleRider, and everyone who shared their data!)
|
<li>Philips Respironics DreamStation support (Thanks for your assistance JediBob and PaleRider, and everyone who shared their data!)
|
||||||
<li>AirCurve pressure reporting glitches</li>
|
<li>AirCurve pressure reporting glitches</li>
|
||||||
<li>Fix F&P Import hang</li>
|
<li>Fix F&P Import hang</li>
|
||||||
@ -24,9 +14,11 @@
|
|||||||
<li>Timezone/UTC fixes (Thanks Reznet!)
|
<li>Timezone/UTC fixes (Thanks Reznet!)
|
||||||
<li>Various ResMed region specific fixes</li>
|
<li>Various ResMed region specific fixes</li>
|
||||||
</list>
|
</list>
|
||||||
|
</version>
|
||||||
<br/>
|
<br/>
|
||||||
|
|
||||||
<b>Bug fixes in v0.9.8-1</b>
|
<b>Bug fixes in v0.9.8-1</b>
|
||||||
|
<version number="0.9.8-1">
|
||||||
<list>
|
<list>
|
||||||
<li>Made daily view left panel, and the right sidebar size changes persitent</li>
|
<li>Made daily view left panel, and the right sidebar size changes persitent</li>
|
||||||
<li>Windows build related fixes</li>
|
<li>Windows build related fixes</li>
|
||||||
@ -39,8 +31,10 @@
|
|||||||
<li>Fix PRS1 4x0P models accidentally being called Plus instead of Pro</li>
|
<li>Fix PRS1 4x0P models accidentally being called Plus instead of Pro</li>
|
||||||
<li>Fix Profile delete not removing row properly</li>
|
<li>Fix Profile delete not removing row properly</li>
|
||||||
</list>
|
</list>
|
||||||
|
</version>
|
||||||
<br/>
|
<br/>
|
||||||
<b>New features & bug fixes in v0.9.8-0</b><br/>
|
<b>New features & bug fixes in v0.9.8-0</b><br/>
|
||||||
|
<version number="0.9.8-0">
|
||||||
<list>
|
<list>
|
||||||
<li>Rework of Records box</li>
|
<li>Rework of Records box</li>
|
||||||
<li>Initial support for Philips Respironics System One Oximetery attachment</li>
|
<li>Initial support for Philips Respironics System One Oximetery attachment</li>
|
||||||
@ -49,8 +43,10 @@
|
|||||||
<li>Prescription changes now caches to disk to save having to reload all data every time</li>
|
<li>Prescription changes now caches to disk to save having to reload all data every time</li>
|
||||||
<li>Implemented Demand loading for SleepyHead Summary data files</li>
|
<li>Implemented Demand loading for SleepyHead Summary data files</li>
|
||||||
</list>
|
</list>
|
||||||
|
</version>
|
||||||
<br/>
|
<br/>
|
||||||
<b>New features & bug fixes in v0.9.7</b><br/>
|
<b>New features & bug fixes in v0.9.7</b><br/>
|
||||||
|
<version number="0.9.7">
|
||||||
<list>
|
<list>
|
||||||
<li>Experimental ResMed AirSense S10 import support</li>
|
<li>Experimental ResMed AirSense S10 import support</li>
|
||||||
<li>F&P Icon timestamp fix, thanks to Roy Stone for the patch!</li>
|
<li>F&P Icon timestamp fix, thanks to Roy Stone for the patch!</li>
|
||||||
@ -106,8 +102,10 @@
|
|||||||
<li>Fixed a SleepyHead summary error that prevented count indexes from being stored properly</li>
|
<li>Fixed a SleepyHead summary error that prevented count indexes from being stored properly</li>
|
||||||
<li>Some other minor fixed and stuff</li>
|
<li>Some other minor fixed and stuff</li>
|
||||||
</list>
|
</list>
|
||||||
|
</version>
|
||||||
<br/>
|
<br/>
|
||||||
<b>New features & bugs fixes in v0.9.6</b><br/>
|
<b>New features & bugs fixes in v0.9.6</b><br/>
|
||||||
|
<version number="0.9.6">
|
||||||
<list>
|
<list>
|
||||||
<li>Threadsafety improvements to debug/logger</li>
|
<li>Threadsafety improvements to debug/logger</li>
|
||||||
<li>Multithreaded PRS1 and ResMed loader improvements</li>
|
<li>Multithreaded PRS1 and ResMed loader improvements</li>
|
||||||
@ -127,8 +125,10 @@
|
|||||||
<li>Added timeout dialog to CPAP card autoscanner</li>
|
<li>Added timeout dialog to CPAP card autoscanner</li>
|
||||||
<li>Microsoft compiler fixes</li>
|
<li>Microsoft compiler fixes</li>
|
||||||
</list>
|
</list>
|
||||||
|
</version>
|
||||||
<br/>
|
<br/>
|
||||||
<b>New features & bugs fixes since v0.9.5</b><br/>
|
<b>New features & bugs fixes since v0.9.5</b><br/>
|
||||||
|
<version number="0.9.5">
|
||||||
<list>
|
<list>
|
||||||
<li>Added ability to pin graphs to keep them on screen</li>
|
<li>Added ability to pin graphs to keep them on screen</li>
|
||||||
<li>Fixed tranlation loading on Mac</li>
|
<li>Fixed tranlation loading on Mac</li>
|
||||||
@ -140,9 +140,11 @@
|
|||||||
<li>Datacard autodetection ability</li>
|
<li>Datacard autodetection ability</li>
|
||||||
<li>Philips Respironics 60 series fixes</li>
|
<li>Philips Respironics 60 series fixes</li>
|
||||||
</list>
|
</list>
|
||||||
|
</version>
|
||||||
|
|
||||||
<br/>
|
<br/>
|
||||||
<b>New features & bugs fixes since v0.9.3</b><br/>
|
<b>New features & bugs fixes since v0.9.3</b><br/>
|
||||||
|
<version number="0.9.3">
|
||||||
<list>
|
<list>
|
||||||
<li>Retina display fixes for Mac platform</li>
|
<li>Retina display fixes for Mac platform</li>
|
||||||
<li>Introduced yAxis Scaling modes</li>
|
<li>Introduced yAxis Scaling modes</li>
|
||||||
@ -160,6 +162,4 @@
|
|||||||
<li>Some 64-bit fixes, and some other bugfixes mainly useful to those building from source, especially on linux.</li>
|
<li>Some 64-bit fixes, and some other bugfixes mainly useful to those building from source, especially on linux.</li>
|
||||||
<li>Fixed some issues with the prescription changes table with certain machines.</li>
|
<li>Fixed some issues with the prescription changes table with certain machines.</li>
|
||||||
</list>
|
</list>
|
||||||
|
</version>
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
|
@ -22,6 +22,7 @@
|
|||||||
#include <QSettings>
|
#include <QSettings>
|
||||||
#include <QFileDialog>
|
#include <QFileDialog>
|
||||||
#include <QSysInfo>
|
#include <QSysInfo>
|
||||||
|
#include <QXmlSimpleReader>
|
||||||
|
|
||||||
#include "version.h"
|
#include "version.h"
|
||||||
#include "logger.h"
|
#include "logger.h"
|
||||||
@ -61,21 +62,75 @@ void initialize()
|
|||||||
|
|
||||||
void release_notes()
|
void release_notes()
|
||||||
{
|
{
|
||||||
|
QString str = QObject::tr("SleepyHead Release Notes");
|
||||||
QDialog relnotes;
|
QDialog relnotes;
|
||||||
relnotes.setWindowTitle(STR_TR_SleepyHead + " " + QObject::tr("Release Notes") +" "+FullVersionString);
|
relnotes.setWindowTitle(str);
|
||||||
QVBoxLayout layout(&relnotes);
|
relnotes.setSizePolicy(QSizePolicy::Minimum,QSizePolicy::Minimum);
|
||||||
QWebView web(&relnotes);
|
relnotes.setStyleSheet("QDialog { background:white; }");
|
||||||
|
relnotes.setWindowFlags(Qt::Window | Qt::FramelessWindowHint);
|
||||||
|
|
||||||
// Language???
|
QHBoxLayout * hlayout = new QHBoxLayout();
|
||||||
|
QLabel * title = new QLabel("<html><body><div align=top>"
|
||||||
|
"<font size=+4>"+STR_TR_SleepyHead+"</font> "
|
||||||
|
"<font size=+1>"+STR_TR_AppVersion+"</font> "
|
||||||
|
"<font size=+2><i>"+QObject::tr("Release Notes")+"</i></font>"
|
||||||
|
"<hr/>"
|
||||||
|
"</div></body></html>", &relnotes);
|
||||||
|
QPixmap img=QPixmap(":/docs/sheep.png").scaled(100,100);
|
||||||
|
QLabel * logo= new QLabel(&relnotes);//, * logo2 = new QLabel();
|
||||||
|
logo->setPixmap(img);
|
||||||
|
hlayout->insertWidget(0, title, 1);
|
||||||
|
hlayout->insertWidget(1, logo, 0);
|
||||||
|
|
||||||
web.load(QUrl("qrc:/docs/release_notes.html"));
|
QVBoxLayout * layout = new QVBoxLayout(&relnotes);
|
||||||
|
QWebView * web = new QWebView(&relnotes);
|
||||||
|
|
||||||
|
QString welcomeMessage = "<font size=+1>"+
|
||||||
|
QObject::tr("<p>After four years in the making, this build brings SleepyHead into the final beta phase.</p>")+
|
||||||
|
QObject::tr("<p>Things are not perfect yet, but the focus from now is putting on the finishing touches. ")+
|
||||||
|
QObject::tr("This version brings support for the new Philips Respironics DreamStation, and older PRS1 1060P models.</p>")+
|
||||||
|
"</font>";
|
||||||
|
|
||||||
|
QFile clfile(":/docs/release_notes.html");
|
||||||
|
QString changeLog = QObject::tr("Sorry, could not locate changelog.");
|
||||||
|
if (clfile.open(QIODevice::ReadOnly)) {
|
||||||
|
QTextStream ts(&clfile);
|
||||||
|
changeLog = ts.readAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
QString html = "<html>"
|
||||||
|
"<head><meta charset=\"UTF-8\"></head>"
|
||||||
|
"<body>"
|
||||||
|
"<h2><p>"+QObject::tr("Greetings!")+"</p></h2>";
|
||||||
|
|
||||||
|
html += welcomeMessage;
|
||||||
|
|
||||||
|
|
||||||
|
if (ReleaseStatus != "r") {
|
||||||
|
html += "<p><font color='red' size=+1><b>"+QObject::tr("Important:")+"</b></font> "
|
||||||
|
"<font size=+1><i>"+QObject::tr("As this is a pre-release version, it is recommended that you back up your data folder manually before proceding, because attempting to roll back later may break things.")+"</i></font></p>";
|
||||||
|
}
|
||||||
|
|
||||||
|
html += "<p><b>"+QObject::tr("Sleep Well, and good luck!")+"</b></p>"
|
||||||
|
"<p><b><i>"+"JediMark"+"</i></b></p><br/><b><i>Change log</i></b><hr/><br/><br/>";
|
||||||
|
|
||||||
|
html += changeLog;
|
||||||
|
html += "</body></html>";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//QUrl("qrc:/docs/release_notes.html")
|
||||||
|
|
||||||
|
// Should read these from online!!! with language code
|
||||||
|
web->setHtml(html);
|
||||||
|
|
||||||
//web.page()->mainFrame()->setScrollBarPolicy(Qt::Vertical, Qt::ScrollBarAlwaysOn);
|
//web.page()->mainFrame()->setScrollBarPolicy(Qt::Vertical, Qt::ScrollBarAlwaysOn);
|
||||||
relnotes.setLayout(&layout);
|
relnotes.setLayout(layout);
|
||||||
layout.insertWidget(0, &web, 1);
|
layout->insertLayout(0, hlayout, 0);
|
||||||
QPushButton okbtn(QObject::tr("&Ok, get on with it.."), &relnotes);
|
layout->insertWidget(1, web, 1);
|
||||||
relnotes.connect(&okbtn, SIGNAL(clicked()), SLOT(accept()));
|
QPushButton * okbtn = new QPushButton(QObject::tr("&Ok, get on with it.."), &relnotes);
|
||||||
layout.insertWidget(1, &okbtn, 1);
|
relnotes.connect(okbtn, SIGNAL(clicked()), SLOT(accept()));
|
||||||
|
layout->insertWidget(2, okbtn, 0);
|
||||||
QApplication::processEvents(); // MW: Needed on Mac, as the html has to finish loading
|
QApplication::processEvents(); // MW: Needed on Mac, as the html has to finish loading
|
||||||
|
|
||||||
relnotes.exec();
|
relnotes.exec();
|
||||||
@ -112,7 +167,7 @@ void MigrateSettings()
|
|||||||
}
|
}
|
||||||
|
|
||||||
oldcopy.setValue("Migrated", true);
|
oldcopy.setValue("Migrated", true);
|
||||||
settings.setValue("Version", FullVersionString);
|
settings.setValue("Version", VersionString);
|
||||||
|
|
||||||
qDebug() << keys;
|
qDebug() << keys;
|
||||||
|
|
||||||
@ -349,10 +404,10 @@ retry_directory:
|
|||||||
////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// Check when last checked for updates..
|
// Check when last checked for updates..
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
//bool check_updates = false;
|
bool check_updates = false;
|
||||||
|
|
||||||
if (PREF[STR_GEN_UpdatesAutoCheck].toBool()) {
|
if (PREF[STR_GEN_UpdatesAutoCheck].toBool()) {
|
||||||
//int update_frequency = PREF[STR_GEN_UpdateCheckFrequency].toInt();
|
int update_frequency = PREF[STR_GEN_UpdateCheckFrequency].toInt();
|
||||||
int days = 1000;
|
int days = 1000;
|
||||||
lastchecked = PREF[STR_GEN_UpdatesLastChecked].toDateTime();
|
lastchecked = PREF[STR_GEN_UpdatesLastChecked].toDateTime();
|
||||||
|
|
||||||
@ -361,9 +416,9 @@ retry_directory:
|
|||||||
days /= 86400;
|
days /= 86400;
|
||||||
};
|
};
|
||||||
|
|
||||||
// if (days > update_frequency) {
|
if (days > update_frequency) {
|
||||||
// check_updates = true;
|
check_updates = true;
|
||||||
// }
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!Profiles::profiles.size()) {
|
if (!Profiles::profiles.size()) {
|
||||||
@ -382,7 +437,7 @@ retry_directory:
|
|||||||
if (vc < 0) {
|
if (vc < 0) {
|
||||||
release_notes();
|
release_notes();
|
||||||
|
|
||||||
//check_updates = false;
|
check_updates = false;
|
||||||
} else if (vc > 0) {
|
} else if (vc > 0) {
|
||||||
if (QMessageBox::warning(nullptr, STR_MessageBox_Error, QObject::tr("The version of SleepyHead you just ran is OLDER than the one used to create this data (%1).").arg(PREF[STR_PREF_VersionString].toString()) +"\n\n"+
|
if (QMessageBox::warning(nullptr, STR_MessageBox_Error, QObject::tr("The version of SleepyHead you just ran is OLDER than the one used to create this data (%1).").arg(PREF[STR_PREF_VersionString].toString()) +"\n\n"+
|
||||||
QObject::tr("It is likely that doing this will cause data corruption, are you sure you want to do this?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::No) == QMessageBox::No) {
|
QObject::tr("It is likely that doing this will cause data corruption, are you sure you want to do this?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::No) == QMessageBox::No) {
|
||||||
@ -412,7 +467,7 @@ retry_directory:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
PREF[STR_PREF_VersionString] = FullVersionString;
|
PREF[STR_PREF_VersionString] = VersionString;
|
||||||
|
|
||||||
p_profile = Profiles::Get(PREF[STR_GEN_Profile].toString());
|
p_profile = Profiles::Get(PREF[STR_GEN_Profile].toString());
|
||||||
|
|
||||||
@ -452,7 +507,7 @@ retry_directory:
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// if (check_updates) { mainwin->CheckForUpdates(); }
|
//if (check_updates) { mainwin->CheckForUpdates(); }
|
||||||
|
|
||||||
w.show();
|
w.show();
|
||||||
|
|
||||||
|
@ -71,6 +71,7 @@ QStatusBar *qstatusbar;
|
|||||||
|
|
||||||
extern Profile *profile;
|
extern Profile *profile;
|
||||||
|
|
||||||
|
|
||||||
QString getOpenGLVersionString()
|
QString getOpenGLVersionString()
|
||||||
{
|
{
|
||||||
static QString glversion;
|
static QString glversion;
|
||||||
@ -143,16 +144,23 @@ MainWindow::MainWindow(QWidget *parent) :
|
|||||||
connect(logger, SIGNAL(outputLog(QString)), this, SLOT(logMessage(QString)));
|
connect(logger, SIGNAL(outputLog(QString)), this, SLOT(logMessage(QString)));
|
||||||
}
|
}
|
||||||
|
|
||||||
QString version = FullVersionString +"-" +QString(GIT_REVISION) +"-" +getGraphicsEngine();
|
QString version = STR_TR_AppVersion;
|
||||||
|
|
||||||
#ifndef TEST_BUILD
|
#ifndef TEST_BUILD
|
||||||
ui->warningLabel->hide();
|
ui->warningLabel->hide();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (QString(GIT_BRANCH) != "master") { version += " [" + QString(GIT_BRANCH)+" branch]"; }
|
version += " [";
|
||||||
|
#ifdef GIT_REVISION
|
||||||
|
if (QString(GIT_BRANCH) != "master") {
|
||||||
|
version += QString(GIT_BRANCH)+"-";
|
||||||
|
}
|
||||||
|
|
||||||
|
version += QString(GIT_REVISION) +" ";
|
||||||
|
#endif
|
||||||
|
version += getGraphicsEngine()+"]";
|
||||||
|
|
||||||
this->setWindowTitle(STR_TR_SleepyHead + QString(" v%1 (" + tr("Profile") + ": %2)").arg(version).arg(PREF[STR_GEN_Profile].toString()));
|
this->setWindowTitle(STR_TR_SleepyHead + QString(" %1 (" + tr("Profile") + ": %2)").arg(version).arg(PREF[STR_GEN_Profile].toString()));
|
||||||
|
|
||||||
qDebug() << STR_TR_SleepyHead << VersionString << "built with Qt" << QT_VERSION_STR << "on" << __DATE__ << __TIME__;
|
qDebug() << STR_TR_SleepyHead << VersionString << "built with Qt" << QT_VERSION_STR << "on" << __DATE__ << __TIME__;
|
||||||
|
|
||||||
@ -542,7 +550,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 = "SleepyHead v" + VersionString;
|
title = tr("%1 %2").arg(STR_TR_SleepyHead).arg(STR_TR_AppVersion);
|
||||||
}
|
}
|
||||||
if (systray) {
|
if (systray) {
|
||||||
// GNOME3's systray hides the last line of the displayed Qt message.
|
// GNOME3's systray hides the last line of the displayed Qt message.
|
||||||
@ -1391,7 +1399,7 @@ void MainWindow::on_action_About_triggered()
|
|||||||
"<span style=\"color:#000000; font-weight:600; vertical-align:middle;\">"
|
"<span style=\"color:#000000; font-weight:600; vertical-align:middle;\">"
|
||||||
"<table width=100%><tr><td>"
|
"<table width=100%><tr><td>"
|
||||||
"<p><h1>" + STR_TR_SleepyHead +
|
"<p><h1>" + STR_TR_SleepyHead +
|
||||||
QString(" v%1 (%2)</h1></p><font color=black><p>").arg(VersionString).arg(ReleaseStatus) +
|
QString(" %1</h1></p><font color=black><p>").arg(STR_TR_AppVersion) +
|
||||||
tr("Build Date: %1 %2").arg(__DATE__).arg(__TIME__) +
|
tr("Build Date: %1 %2").arg(__DATE__).arg(__TIME__) +
|
||||||
QString("<br/>%1<br/>").arg(gitrev) +
|
QString("<br/>%1<br/>").arg(gitrev) +
|
||||||
tr("Graphics Engine: %1").arg(getGraphicsEngine())+
|
tr("Graphics Engine: %1").arg(getGraphicsEngine())+
|
||||||
|
@ -1482,7 +1482,7 @@ QToolBox::tab:selected {
|
|||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>98</width>
|
<width>95</width>
|
||||||
<height>606</height>
|
<height>606</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
@ -1896,8 +1896,8 @@ border: 2px solid #56789a; border-radius: 30px;
|
|||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>100</width>
|
<width>77</width>
|
||||||
<height>30</height>
|
<height>236</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="palette">
|
<property name="palette">
|
||||||
@ -3175,6 +3175,7 @@ border-radius: 10px;
|
|||||||
<addaction name="actionCheck_for_Updates"/>
|
<addaction name="actionCheck_for_Updates"/>
|
||||||
<addaction name="separator"/>
|
<addaction name="separator"/>
|
||||||
<addaction name="actionHelp_Support_SleepyHead_Development"/>
|
<addaction name="actionHelp_Support_SleepyHead_Development"/>
|
||||||
|
<addaction name="separator"/>
|
||||||
<addaction name="action_About"/>
|
<addaction name="action_About"/>
|
||||||
</widget>
|
</widget>
|
||||||
<widget class="QMenu" name="menu_Data">
|
<widget class="QMenu" name="menu_Data">
|
||||||
|
@ -90,7 +90,7 @@ NewProfile::NewProfile(QWidget *parent) :
|
|||||||
f.close();
|
f.close();
|
||||||
}
|
}
|
||||||
ui->AppTitle->setText("SleepyHead v" + VersionString);
|
ui->AppTitle->setText("SleepyHead v" + VersionString);
|
||||||
ui->releaseStatus->setText(ReleaseStatus);
|
//ui->releaseStatus->setText(ReleaseStatus);
|
||||||
|
|
||||||
|
|
||||||
ui->textBrowser->setHtml(getIntroHTML());
|
ui->textBrowser->setHtml(getIntroHTML());
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
#include <QMessageBox>
|
#include <QMessageBox>
|
||||||
#include <QFileDialog>
|
#include <QFileDialog>
|
||||||
#include <QStandardPaths>
|
#include <QStandardPaths>
|
||||||
|
#include <QDesktopServices>
|
||||||
|
|
||||||
#include "Graphs/gYAxis.h"
|
#include "Graphs/gYAxis.h"
|
||||||
#include "Graphs/gXAxis.h"
|
#include "Graphs/gXAxis.h"
|
||||||
@ -1090,13 +1091,14 @@ void OximeterImport::setInformation()
|
|||||||
+tr("If you are trying to sync oximetery and CPAP data, please make sure you imported your CPAP sessions first before proceeding!")+"</span></p>"
|
+tr("If you are trying to sync oximetery 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://sleepyhead.sf.net/\"><span style=\" text-decoration: underline; color:#0000ff;\">").arg("</span></a>")+"</p>"
|
+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>"
|
||||||
"<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;\">"
|
||||||
+tr("Even for devices with an internal clock, it is still recommended to get into the habit of starting oximeter records at the same time as CPAP sessions, because CPAP internal clocks tend to drift over time, and not all can be reset easily.")+"</p></body></html>";
|
+tr("Even for devices with an internal clock, it is still recommended to get into the habit of starting oximeter records at the same time as CPAP sessions, because CPAP internal clocks tend to drift over time, and not all can be reset easily.")+"</p></body></html>";
|
||||||
ui->textBrowser->setHtml(html);
|
ui->textBrowser->setHtml(html);
|
||||||
ui->textBrowser->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
|
ui->textBrowser->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
|
||||||
|
ui->textBrowser->setOpenExternalLinks(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void OximeterImport::on_oximeterType_currentIndexChanged(int index)
|
void OximeterImport::on_oximeterType_currentIndexChanged(int index)
|
||||||
@ -1145,3 +1147,8 @@ void OximeterImport::on_cms50DeviceName_textEdited(const QString &arg1)
|
|||||||
{
|
{
|
||||||
p_profile->oxi->setDefaultDevice(arg1);
|
p_profile->oxi->setDefaultDevice(arg1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void OximeterImport::on_textBrowser_anchorClicked(const QUrl &arg1)
|
||||||
|
{
|
||||||
|
QDesktopServices::openUrl(arg1);
|
||||||
|
}
|
||||||
|
@ -85,6 +85,8 @@ private slots:
|
|||||||
|
|
||||||
void on_cms50DeviceName_textEdited(const QString &arg1);
|
void on_cms50DeviceName_textEdited(const QString &arg1);
|
||||||
|
|
||||||
|
void on_textBrowser_anchorClicked(const QUrl &arg1);
|
||||||
|
|
||||||
protected slots:
|
protected slots:
|
||||||
void on_updatePlethy(QByteArray plethy);
|
void on_updatePlethy(QByteArray plethy);
|
||||||
void finishedRecording();
|
void finishedRecording();
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>1312</width>
|
<width>1312</width>
|
||||||
<height>638</height>
|
<height>661</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
@ -669,7 +669,7 @@ border-radius: 0px;</string>
|
|||||||
<item>
|
<item>
|
||||||
<widget class="QStackedWidget" name="stackedWidget">
|
<widget class="QStackedWidget" name="stackedWidget">
|
||||||
<property name="currentIndex">
|
<property name="currentIndex">
|
||||||
<number>1</number>
|
<number>0</number>
|
||||||
</property>
|
</property>
|
||||||
<widget class="QWidget" name="welcomePage">
|
<widget class="QWidget" name="welcomePage">
|
||||||
<layout class="QVBoxLayout" name="verticalLayout">
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
@ -730,8 +730,8 @@ border-radius: 0px;</string>
|
|||||||
<string notr="true"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
<string notr="true"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||||
<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:'.Lucida Grande UI'; font-size:13pt; font-weight:400; font-style:normal;">
|
</style></head><body style=" font-family:'.SF NS Text'; font-size:13pt; 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;"><br /></p></body></html></string>
|
<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-family:'.Lucida Grande UI';"><br /></p></body></html></string>
|
||||||
</property>
|
</property>
|
||||||
<property name="placeholderText">
|
<property name="placeholderText">
|
||||||
<string notr="true"/>
|
<string notr="true"/>
|
||||||
|
@ -100,7 +100,7 @@ ProfileSelect::ProfileSelect(QWidget *parent) :
|
|||||||
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_SleepyHead);
|
||||||
ui->labelVersion->setText("v" + VersionString + " " + ReleaseStatus);
|
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());
|
||||||
|
@ -640,7 +640,7 @@ QString htmlFooter(bool showinfo=true)
|
|||||||
if (showinfo) {
|
if (showinfo) {
|
||||||
html += "<hr/><div align=center><font size='-1'><i>";
|
html += "<hr/><div align=center><font size='-1'><i>";
|
||||||
html += QString(QObject::tr("This report was generated by SleepyHead (%1), <b>and has not been approved in any way for compliance or medical diagnostic purposes</b>.")).
|
html += QString(QObject::tr("This report was generated by SleepyHead (%1), <b>and has not been approved in any way for compliance or medical diagnostic purposes</b>.")).
|
||||||
arg(FullVersionString) + "<br/><br/>" +
|
arg(VersionString) + "<br/><br/>" +
|
||||||
QObject::tr("SleepyHead is free open-source software available from http://sourceforge.net/projects/SleepyHead");
|
QObject::tr("SleepyHead is free open-source software available from http://sourceforge.net/projects/SleepyHead");
|
||||||
html += "</i></font></div>";
|
html += "</i></font></div>";
|
||||||
}
|
}
|
||||||
|
@ -18,18 +18,9 @@
|
|||||||
const int major_version = 1; // incompatible API changes
|
const int major_version = 1; // incompatible API changes
|
||||||
const int minor_version = 0; // new features that don't break things
|
const int minor_version = 0; // new features that don't break things
|
||||||
const int revision_number = 0; // bugfixes, revisions
|
const int revision_number = 0; // bugfixes, revisions
|
||||||
|
|
||||||
#ifdef TEST_BUILD
|
|
||||||
const QString ReleaseStatus = "testing";
|
|
||||||
#elif BETA_BUILD
|
|
||||||
const QString ReleaseStatus = "beta";
|
const QString ReleaseStatus = "beta";
|
||||||
#else
|
|
||||||
const QString ReleaseStatus = "";
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
const QString VersionString = QString("%1.%2.%3-%4-%5").arg(major_version).arg(minor_version).arg(revision_number).arg(ReleaseStatus).arg(build_number);
|
||||||
const QString VersionString = QString().sprintf("%i.%i.%i", major_version, minor_version, build_number); // )+VersionStatus+QString().sprintf("%i",
|
|
||||||
const QString FullVersionString = VersionString+"-"+ReleaseStatus;
|
|
||||||
|
|
||||||
#ifdef Q_OS_MAC
|
#ifdef Q_OS_MAC
|
||||||
const QString PlatformString = "MacOSX";
|
const QString PlatformString = "MacOSX";
|
||||||
|
Loading…
Reference in New Issue
Block a user