1
0
mirror of https://github.com/tumic0/GPXSee.git synced 2025-04-19 19:59:11 +02:00

Compare commits

...

2 Commits

3 changed files with 27 additions and 15 deletions

View File

@ -40,11 +40,10 @@ static QString capitalized(const QString &str)
return ret; return ret;
} }
static QByteArray ft2m(const QByteArray &str) static QByteArray ft2m(const QByteArray &str, bool *ok)
{ {
bool ok; double number = str.toDouble(ok);
double number = str.toDouble(&ok); return *ok ? QByteArray::number(qRound(number * 0.3048)) : str;
return ok ? QByteArray::number(qRound(number * 0.3048)) : str;
} }
@ -123,6 +122,7 @@ Label LBLFile::str2label(const QVector<quint8> &str, bool capitalize,
QByteArray label, shieldLabel; QByteArray label, shieldLabel;
QByteArray *bap = &label; QByteArray *bap = &label;
int split = -1; int split = -1;
bool ok;
for (int i = 0; i < str.size(); i++) { for (int i = 0; i < str.size(); i++) {
const quint8 &c = str.at(i); const quint8 &c = str.at(i);
@ -137,7 +137,7 @@ Label LBLFile::str2label(const QVector<quint8> &str, bool capitalize,
bap = &label; bap = &label;
else { else {
if (!bap->isEmpty()) if (!bap->isEmpty())
bap->append('\n'); bap->append(' ');
if (c == 0x1f && split < 0) if (c == 0x1f && split < 0)
split = bap->size(); split = bap->size();
} }
@ -150,10 +150,14 @@ Label LBLFile::str2label(const QVector<quint8> &str, bool capitalize,
bap->append(c); bap->append(c);
} }
if (split >= 0) if (convert && split >= 0) {
label = label.left(split) + ft2m(label.mid(split)); QByteArray num(ft2m(label.mid(split), &ok));
else if (convert) if (ok) {
label = ft2m(label); QByteArray name(label.left(split - 1));
label = name.isEmpty() ? num : name + "\n" + num;
}
} else if (convert)
label = ft2m(label, &ok);
QString text(_codec.toString(label)); QString text(_codec.toString(label));
return Label(capitalize && isAllUpperCase(text) ? capitalized(text) : text, return Label(capitalize && isAllUpperCase(text) ? capitalized(text) : text,
Shield(shieldType, _codec.toString(shieldLabel))); Shield(shieldType, _codec.toString(shieldLabel)));
@ -193,6 +197,7 @@ Label LBLFile::label6b(const SubFile *file, Handle &fileHdl, quint32 size,
Charset charset = Normal; Charset charset = Normal;
quint8 b1, b2, b3; quint8 b1, b2, b3;
int split = -1; int split = -1;
bool ok;
for (quint32 i = 0; i < size; i = i + 3) { for (quint32 i = 0; i < size; i = i + 3) {
if (!(file->readByte(fileHdl, &b1) && file->readByte(fileHdl, &b2) if (!(file->readByte(fileHdl, &b1) && file->readByte(fileHdl, &b2)
@ -203,10 +208,14 @@ Label LBLFile::label6b(const SubFile *file, Handle &fileHdl, quint32 size,
for (int cpt = 0; cpt < 4; cpt++) { for (int cpt = 0; cpt < 4; cpt++) {
if (c[cpt] > 0x2f || (charset == Normal && c[cpt] == 0x1d)) { if (c[cpt] > 0x2f || (charset == Normal && c[cpt] == 0x1d)) {
if (split >= 0) if (convert && split >= 0) {
label = label.left(split) + ft2m(label.mid(split)); QByteArray num(ft2m(label.mid(split), &ok));
else if (convert) if (ok) {
label = ft2m(label); QByteArray name(label.left(split - 1));
label = name.isEmpty() ? num : name + "\n" + num;
}
} else if (convert)
label = ft2m(label, &ok);
QString text(QString::fromLatin1(label)); QString text(QString::fromLatin1(label));
return Label(capitalize && isAllUpperCase(text) return Label(capitalize && isAllUpperCase(text)
? capitalized(text) : text, Shield(shieldType, shieldLabel)); ? capitalized(text) : text, Shield(shieldType, shieldLabel));
@ -222,7 +231,7 @@ Label LBLFile::label6b(const SubFile *file, Handle &fileHdl, quint32 size,
bap = &label; bap = &label;
else { else {
if (!bap->isEmpty()) if (!bap->isEmpty())
bap->append('\n'); bap->append(' ');
if (c[cpt] == 0x1f && split < 0) if (c[cpt] == 0x1f && split < 0)
split = bap->size(); split = bap->size();
} }

View File

@ -516,7 +516,8 @@ bool RGNFile::pointObjects(Handle &hdl, const SubDiv *subdiv,
if (lbl && (labelPtr & 0x3FFFFF)) if (lbl && (labelPtr & 0x3FFFFF))
point.label = lbl->label(lblHdl, labelPtr & 0x3FFFFF, point.label = lbl->label(lblHdl, labelPtr & 0x3FFFFF,
labelPtr & 0x400000, !(Style::isCountry(point.type) labelPtr & 0x400000, !(Style::isCountry(point.type)
|| Style::isState(point.type)), Style::isSpot(point.type)); || Style::isState(point.type)), Style::isSpot(point.type)
|| Style::isSummit(point.type));
point.id = pointId(pos, point.type, point.label.text()); point.id = pointId(pos, point.type, point.label.text());
points->append(point); points->append(point);

View File

@ -134,6 +134,8 @@ public:
{return (type == TYPE(0x16) || type == 0x10a03);} {return (type == TYPE(0x16) || type == 0x10a03);}
static bool isSpot(quint32 type) static bool isSpot(quint32 type)
{return (type == TYPE(0x62) || type == TYPE(0x63));} {return (type == TYPE(0x62) || type == TYPE(0x63));}
static bool isSummit(quint32 type)
{return (type == 0x6616);}
static bool isMajorRoad(quint32 type) static bool isMajorRoad(quint32 type)
{return (type <= TYPE(0x04));} {return (type <= TYPE(0x04));}
static bool isCountry(quint32 type) static bool isCountry(quint32 type)