Skip to content

Commit 3a07715

Browse files
committed
Skyculture aware DSO names
- not polished yet
1 parent 2defd62 commit 3a07715

File tree

4 files changed

+152
-18
lines changed

4 files changed

+152
-18
lines changed

src/core/StelObject.hpp

+13-1
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,19 @@ class StelObject : public StelRegionObject
114114
}; // MORE OPTIONS NEEDED?
115115
Q_ENUM(CulturalDisplayStyle)
116116

117-
117+
//! @struct CulturalName
118+
//! Contains name components belonging to an object.
119+
//!
120+
struct CulturalName
121+
{
122+
QString native; //!< native name in native glyphs
123+
QString pronounce; //!< native name in a Latin-based transliteration usable as pronunciation aid for English
124+
QString pronounceI18n; //!< native name in a transliteration scheme in user-language usable as pronunciation aid
125+
QString transliteration; //!< native name in a science-based transliteration scheme not geared at pronunciation (e.g. Tibetan Wylie; rarely used).
126+
QString translated; //!< Native name translated to English. NOT the same as the usual object's englishName!
127+
QString translatedI18n; //!< Translated name (user language)
128+
QString IPA; //!< native name expressed in International Phonetic Alphabet
129+
};
118130

119131
//! A pre-defined "all available" set of specifiers for the getInfoString flags argument to getInfoString
120132
static constexpr InfoStringGroup AllInfo = static_cast<InfoStringGroup>(Name|CatalogNumber|Magnitude|RaDecJ2000|RaDecOfDate|AltAzi|

src/core/modules/Nebula.cpp

+100-1
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
#include "StelCore.hpp"
3131
#include "StelPainter.hpp"
3232
#include "RefractionExtinction.hpp"
33+
#include "StelSkyCultureMgr.hpp"
3334

3435
#include <QTextStream>
3536
#include <QFile>
@@ -203,6 +204,100 @@ QString Nebula::getMagnitudeInfoString(const StelCore *core, const InfoStringGro
203204
return res;
204205
}
205206

207+
QString Nebula::getScreenLabel() const
208+
{
209+
return getCultureLabels(GETSTELMODULE(StelSkyCultureMgr)->getScreenLabelStyle()).constFirst();
210+
}
211+
QString Nebula::getInfoLabel() const
212+
{
213+
return getCultureLabels(GETSTELMODULE(StelSkyCultureMgr)->getInfoLabelStyle()).join("; ");
214+
}
215+
216+
QStringList Nebula::getCultureLabels(StelObject::CulturalDisplayStyle style) const
217+
{
218+
QStringList labels;
219+
for (auto &cName: culturalNames)
220+
{
221+
QString label;
222+
switch (style)
223+
{
224+
case CulturalDisplayStyle::Abbreviated:
225+
label="";
226+
break;
227+
case CulturalDisplayStyle::Native:
228+
label=cName.native;
229+
break;
230+
case CulturalDisplayStyle::Translated:
231+
label=cName.translatedI18n;
232+
break;
233+
case CulturalDisplayStyle::Modern:
234+
label=nameI18; // fully non-cultural!
235+
break;
236+
case CulturalDisplayStyle::Pronounce:
237+
label=cName.pronounceI18n;
238+
break;
239+
case CulturalDisplayStyle::Translit:
240+
label=cName.transliteration;
241+
break;
242+
case CulturalDisplayStyle::IPA:
243+
label=cName.IPA;
244+
break;
245+
case CulturalDisplayStyle::Pronounce_Translated:
246+
label=QString("%1 (%2)").arg(cName.pronounceI18n, cName.translatedI18n);
247+
break;
248+
case CulturalDisplayStyle::Pronounce_IPA_Translated:
249+
label=QString("%1 [%2] (%3)").arg(cName.pronounceI18n, cName.IPA, cName.translatedI18n);
250+
break;
251+
case CulturalDisplayStyle::Pronounce_Translated_Modern:
252+
label=QString("%1 (%2, %3)").arg(cName.pronounceI18n, cName.translatedI18n, englishName);
253+
break;
254+
case CulturalDisplayStyle::Pronounce_IPA_Translated_Modern:
255+
label=QString("%1 [%2] (%3, %4)").arg(cName.pronounceI18n, cName.IPA, cName.translatedI18n, englishName);
256+
break;
257+
case CulturalDisplayStyle::Native_Pronounce:
258+
label=QString("%1 [%2]").arg(cName.native, cName.pronounceI18n);
259+
break;
260+
case CulturalDisplayStyle::Native_Pronounce_Translated:
261+
label=QString("%1 [%2] (%3)").arg(cName.native, cName.pronounceI18n, cName.translatedI18n);
262+
break;
263+
case CulturalDisplayStyle::Native_Pronounce_IPA_Translated:
264+
label=QString("%1 [%2%3] (%4)").arg(cName.native, cName.pronounceI18n, cName.IPA.length() > 0 ? QString(", %1").arg(cName.IPA) : "", cName.translatedI18n);
265+
break;
266+
case CulturalDisplayStyle::Native_Translated:
267+
label=QString("%1 (%2)").arg(cName.native, cName.translatedI18n);
268+
break;
269+
case CulturalDisplayStyle::Native_Translit_Translated:
270+
label=QString("%1 [%2] (%3)").arg(cName.native, cName.transliteration, cName.translatedI18n);
271+
break;
272+
case CulturalDisplayStyle::Native_Translit_Pronounce_Translated:
273+
label=QString("%1 [%2, %3] (%4)").arg(cName.native, cName.transliteration, cName.pronounceI18n, cName.translatedI18n);
274+
break;
275+
case CulturalDisplayStyle::Native_Translit_Pronounce_IPA_Translated:
276+
label=QString("%1 [%2, %3, %4] (%5)").arg(cName.native, cName.transliteration, cName.pronounceI18n, cName.IPA, cName.translatedI18n);
277+
break;
278+
case CulturalDisplayStyle::Native_Translit_IPA_Translated:
279+
label=QString("%1 [%2, %3] (%4)").arg(cName.native, cName.transliteration, cName.IPA, cName.translatedI18n);
280+
break;
281+
case CulturalDisplayStyle::Translit_Translated:
282+
label=QString("%1 (%2)").arg(cName.transliteration, cName.translatedI18n);
283+
break;
284+
case CulturalDisplayStyle::Translit_Pronounce_Translated:
285+
label=QString("%1 [%2] (%3)").arg(cName.transliteration, cName.pronounceI18n, cName.translatedI18n);
286+
break;
287+
case CulturalDisplayStyle::Translit_Pronounce_IPA_Translated:
288+
label=QString("%1 [%2, %3] (%4)").arg(cName.transliteration, cName.pronounceI18n, cName.IPA, cName.translatedI18n);
289+
break;
290+
case CulturalDisplayStyle::Translit_IPA_Translated:
291+
label=QString("%1 [%2] (%4)").arg(cName.transliteration, cName.IPA, cName.translatedI18n);
292+
break;
293+
// NO default here, else we may forget one.
294+
}
295+
labels << label;
296+
}
297+
return labels;
298+
}
299+
300+
206301
QString Nebula::getInfoString(const StelCore *core, const InfoStringGroup& flags) const
207302
{
208303
QString str;
@@ -212,6 +307,9 @@ QString Nebula::getInfoString(const StelCore *core, const InfoStringGroup& flags
212307
if ((flags&Name) || (flags&CatalogNumber))
213308
oss << "<h2>";
214309

310+
if (!culturalNames.isEmpty() && flags&Name)
311+
oss << getInfoLabel() << "<br/>";
312+
215313
if (!nameI18.isEmpty() && flags&Name)
216314
{
217315
oss << getNameI18n();
@@ -1107,7 +1205,8 @@ void Nebula::drawLabel(StelPainter& sPainter, float maxMagLabel) const
11071205

11081206
const float shift = 15.f + (drawHintProportional ? getHintSize(sPainter) : 0.f);
11091207

1110-
QString str = getNameI18n();
1208+
//QString str = getNameI18n();
1209+
QString str = getScreenLabel();
11111210
if (str.isEmpty() || designationUsage)
11121211
str = getDSODesignation();
11131212

src/core/modules/Nebula.hpp

+14-1
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,16 @@ friend class NebulaMgr;
196196
QString getEnglishName() const override {return englishName;}
197197
QString getEnglishAliases() const;
198198
QString getI18nAliases() const;
199+
200+
//! retrieve pronunciation from the first of the cultural names
201+
QString getNamePronounce() const override {return (culturalNames.empty() ? "" : culturalNames.constFirst().pronounceI18n);}
202+
//! Combine screen label from various components, depending on settings in SkyCultureMgr
203+
QString getScreenLabel() const override;
204+
//! Combine InfoString label from various components, depending on settings in SkyCultureMgr
205+
QString getInfoLabel() const override;
206+
//! Underlying worker that processes the culturalNames
207+
QStringList getCultureLabels(StelObject::CulturalDisplayStyle style) const;
208+
199209
//! Return the angular radius of a circle containing the object as seen from the observer
200210
//! with the circle center assumed to be at getJ2000EquatorialPos().
201211
//! @return radius in degree. This value is the apparent angular size of the object, and is independent of the current FOV.
@@ -236,7 +246,9 @@ friend class NebulaMgr;
236246
void setProperName(QString name) { englishName = name; }
237247
void setDiscoveryData(QString name, QString year) { discoverer = name; discoveryYear = year; }
238248
void addNameAlias(QString name) { englishAliases.append(name); englishAliases.removeDuplicates(); }
239-
void removeAllNames() { englishName=""; englishAliases.clear(); }
249+
void removeAllNames() { englishName=""; englishAliases.clear(); culturalNames.clear();}
250+
//! Add a name for the currently set skyculture
251+
void addCulturalName(StelObject::CulturalName culturalName){culturalNames.append(culturalName);}
240252

241253
//! Get designation for DSO (with priority: M, C, NGC, IC, B, Sh2, vdB, RCW, LDN, LBN, Cr, Mel, PGC, UGC, Ced, Arp, VV, PK, PN G, SNR G, ACO, HCG, ESO, vdBH, DWB, Tr, St, Ru, vdB-Ha)
242254
//! from the first catalog that is activated.
@@ -326,6 +338,7 @@ friend class NebulaMgr;
326338
QStringList englishAliases; // English aliases
327339
QString nameI18; // Nebula name
328340
QStringList nameI18Aliases; // Nebula aliases
341+
QList<StelObject::CulturalName> culturalNames; // describes native names used in non-modern Skycultures. Usually just one, but there may be more!
329342
QString discoverer; // The name of discoverer
330343
QString discoveryYear; // Year(s) of discovery
331344
QString mTypeString; // Morphological type of object (as string)

src/core/modules/NebulaMgr.cpp

+25-15
Original file line numberDiff line numberDiff line change
@@ -620,13 +620,6 @@ struct DrawNebulaFuncObject
620620
return;
621621

622622
Nebula* n = static_cast<Nebula*>(obj);
623-
float mag=n->getVisibilityLevelByMagnitude();
624-
625-
StelSkyDrawer *drawer = core->getSkyDrawer();
626-
// filter out DSOs which are too dim to be seen (e.g. for bino observers)
627-
if ((drawer->getFlagNebulaMagnitudeLimit()) && (mag > static_cast<float>(drawer->getCustomNebulaMagnitudeLimit())))
628-
return;
629-
630623
if (!n->objectInDisplayedCatalog())
631624
return;
632625

@@ -636,6 +629,12 @@ struct DrawNebulaFuncObject
636629
if (!n->objectInAllowedSizeRangeLimits())
637630
return;
638631

632+
float mag=n->getVisibilityLevelByMagnitude();
633+
StelSkyDrawer *drawer = core->getSkyDrawer();
634+
// filter out DSOs which are too dim to be seen (e.g. for bino observers)
635+
if ((drawer->getFlagNebulaMagnitudeLimit()) && (mag > static_cast<float>(drawer->getCustomNebulaMagnitudeLimit())))
636+
return;
637+
639638
if (n->majorAxisSize>angularSizeLimit || n->majorAxisSize==0.f || mag <= maxMagHints)
640639
{
641640
sPainter->getProjector()->project(n->getJ2000EquatorialPos(core),n->XY);
@@ -1993,14 +1992,25 @@ int NebulaMgr::loadCultureSpecificNames(const QJsonObject& data)
19931992
{
19941993
for (const auto& entry : specificNames)
19951994
{
1996-
for (const char*const nameType : {"english", "native"})
1997-
{
1998-
const auto specificName = entry.toObject()[nameType].toString();
1999-
if (specificName.isEmpty())
2000-
continue;
2001-
setName(n, specificName);
2002-
++loadedTotal;
2003-
}
1995+
//for (const char*const nameType : {"english", "native"})
1996+
//{
1997+
// const auto specificName = entry.toObject()[nameType].toString();
1998+
// if (specificName.isEmpty())
1999+
// continue;
2000+
// setName(n, specificName);
2001+
// ++loadedTotal;
2002+
//}
2003+
QJsonObject json=entry.toObject();
2004+
StelObject::CulturalName cName;
2005+
cName.native = json["native"].toString("");
2006+
cName.pronounce = json["pronounce"].toString("");
2007+
cName.pronounceI18n = qc_(json["pronounce"].toString(""), json["context"].toString(""));
2008+
cName.transliteration = json["transliteration"].toString("");
2009+
cName.translated = json["english"].toString("");
2010+
cName.translatedI18n = qc_(json["english"].toString(""), json["context"].toString(""));
2011+
cName.IPA = json["IPA"].toString("");
2012+
2013+
n->addCulturalName(cName);
20042014
}
20052015
}
20062016
}

0 commit comments

Comments
 (0)