Stellarium  23.4
Public Types | Public Slots | Signals | Public Member Functions | Static Public Member Functions
SolarSystemEditor Class Reference

Main class of the Solar System Editor plug-in which allows editing (add, delete, update) of the minor bodies. More...

#include <SolarSystemEditor.hpp>

Public Types

enum  UpdateFlag { UpdateNameAndNumber = 0x01 , UpdateType = 0x02 , UpdateOrbitalElements = 0x04 , UpdateMagnitudeParameters = 0x08 }
 Flags to control the updateSolarSystemConfigurationFile() function. More...
 
- Public Types inherited from StelModule
enum  StelModuleSelectAction { AddToSelection , ReplaceSelection , RemoveFromSelection }
 Enum used when selecting objects to define whether to add to, replace, or remove from the existing selection list. More...
 
enum  StelModuleActionName {
  ActionDraw , ActionUpdate , ActionHandleMouseClicks , ActionHandleMouseMoves ,
  ActionHandleKeys
}
 Define the possible action for which an order is defined. More...
 

Public Slots

static QString unpackMinorPlanetIAUDesignation (const QString &packedDesignation)
 Unpacks an MPC packed minor planet IAU designation. More...
 
static QString unpackCometIAUDesignation (const QString &packedDesignation)
 Unpacks an MPC packed comet IAU designation. More...
 
void resetSolarSystemToDefault ()
 Resets the Solar System configuration file and reloads the Solar System. More...
 

Signals

void solarSystemChanged ()
 

Public Member Functions

void init () override
 called when the plug-in is loaded. More...
 
bool configureGui (bool show) override
 called when the "configure" button in the "Plugins" tab is pressed
 
SsoElements readMpcOneLineCometElements (QString oneLineElements) const
 Reads a single comet's orbital elements from a string. More...
 
SsoElements readMpcOneLineMinorPlanetElements (QString oneLineElements) const
 Reads a single minor planet's orbital elements from a string. More...
 
QList< SsoElements > readMpcOneLineCometElementsFromFile (QString filePath) const
 Reads a list of comet orbital elements from a file. More...
 
QList< SsoElements > readMpcOneLineMinorPlanetElementsFromFile (QString filePath) const
 Reads a list of minor planet orbital elements from a file. More...
 
bool appendToSolarSystemConfigurationFile (SsoElements object)
 Adds a new entry at the end of the user solar system configuration file. More...
 
bool appendToSolarSystemConfigurationFile (QList< SsoElements >)
 Adds new entries at the end of the user solar system configuration file. More...
 
bool updateSolarSystemConfigurationFile (QList< SsoElements > objects, UpdateFlags flags)
 Updates entries in the user solar system configuration file. More...
 
QHash< QString, QString > getDefaultSsoIdentifiers () const
 Returns the names of the objects listed in the default ssystem_major.ini. More...
 
QHash< QString, QString > listAllLoadedSsoIdentifiers () const
 Lists the objects listed in the current user ssystem.ini. More...
 
bool removeSsoWithName (QString name)
 Removes an object from the user Solar System configuration file. More...
 
bool copySolarSystemConfigurationFileTo (QString filePath)
 Export current minor bodies file from user data directory (if it exists) to filePath. Return true on success.
 
bool replaceSolarSystemConfigurationFileWith (QString filePath)
 Replace current minor bodies file in the user data directory. More...
 
bool addFromSolarSystemConfigurationFile (QString filePath)
 (new 0.16) Loads all new objects from filePath (an .ini file), and updates existing objects Default proposal is ssystem_1000comets.ini in the installation dir.
 
QString getCustomSolarSystemFilePath () const
 returns the path
 
- Public Member Functions inherited from StelModule
 StelModule ()
 Constructor. Every derived class MUST call setObjectName(className) in its constructor.
 
virtual void deinit ()
 Called before the module will be deleted, and before the OpenGL context is suppressed. More...
 
virtual QSettings * getSettings ()
 Return module-specific settings. More...
 
virtual void draw (StelCore *core)
 Execute all the drawing functions for this module. More...
 
virtual void update (double deltaTime)
 Update the module with respect to the time. More...
 
virtual QString getModuleVersion () const
 Get the version of the module, default is stellarium main version.
 
virtual QString getAuthorName () const
 Get the name of the module author.
 
virtual QString getAuthorEmail () const
 Get the email address of the module author.
 
virtual void handleMouseClicks (class QMouseEvent *)
 Handle mouse clicks. More...
 
virtual void handleMouseWheel (class QWheelEvent *)
 Handle mouse wheel. More...
 
virtual bool handleMouseMoves (int x, int y, Qt::MouseButtons b)
 Handle mouse moves. More...
 
virtual void handleKeys (class QKeyEvent *e)
 Handle key events. More...
 
virtual bool handlePinch (qreal scale, bool started)
 Handle pinch gesture events. More...
 
virtual double getCallOrder (StelModuleActionName actionName) const
 Return the value defining the order of call for the given action For example if stars.callOrder[ActionDraw] == 10 and constellation.callOrder[ActionDraw] == 11, the stars module will be drawn before the constellations. More...
 

Static Public Member Functions

static int unpackAlphanumericNumber (QChar prefix, int lastDigit)
 Converts a two-character number used in MPC packed IAU designations. More...
 

Additional Inherited Members

- Protected Member Functions inherited from StelModule
class StelActionaddAction (const QString &id, const QString &groupId, const QString &text, QObject *target, const char *slot, const QString &shortcut="", const QString &altShortcut="")
 convenience methods to add an action (call to slot) to the StelActionMgr object. More...
 
class StelActionaddAction (const QString &id, const QString &groupId, const QString &text, const char *slot, const QString &shortcut="", const QString &altShortcut="")
 convenience methods to add an action (call to own slot) to the StelActionMgr object. More...
 
StelActionaddAction (const QString &id, const QString &groupId, const QString &text, QObject *contextObject, std::function< void()> lambda, const QString &shortcut="", const QString &altShortcut="")
 convenience methods to add an action (call to Lambda functor) to the StelActionMgr object. More...
 

Detailed Description

Main class of the Solar System Editor plug-in which allows editing (add, delete, update) of the minor bodies.

Author
Bogdan Marinov, Georg Zotti (0.16 changes)

Solar System bodies are identified by their names in Stellarium, but entries in the configuration file are identified by their group (section) names. This makes the detection of duplicates more difficult.

Member Enumeration Documentation

◆ UpdateFlag

Flags to control the updateSolarSystemConfigurationFile() function.

Enumerator
UpdateNameAndNumber 

Update the name and minor planet number, if any.

UpdateType 

Update objects that lack the "type" parameter.

UpdateOrbitalElements 

Update the orbital elements, including the orbit function.

UpdateMagnitudeParameters 

Update the values in the two parameter system, or add them if they are missing and the type allows.

Member Function Documentation

◆ appendToSolarSystemConfigurationFile() [1/2]

bool SolarSystemEditor::appendToSolarSystemConfigurationFile ( QList< SsoElements >  )

Adds new entries at the end of the user solar system configuration file.

XXX Also updates existing objects (by removing and then appending) This function writes directly to the file. QSettings was not used, as:

  • Using QSettings with QSettings::IniFormat causes the list in the "color" field (e.g. "1.0, 1.0, 1.0") to be wrapped in double quotation marks (Stellarium requires no quotation marks). (Has been fixed by using StelIniFormat)
  • Using QSettings with StelIniFormat causes unacceptable append times when the file grows (>~40 entries). This most probably happens because StelIniParser uses QMap internally for the entry list. QMap orders its keys (in the case of strings - alphabetically) and it has to find the appropriate place in the ordering for every new key, which takes more and more time as the list grows. (0.16pre: This problem seems to have been solved: I (GZ) have changed this plugin to use StelIniParser, and loading 1000comets takes about 4 seconds. This is very acceptable, and avoids tons of problems with the default QSettings::IniFormat)

Duplicates are removed: If any section in the file matches the "section_name" value of a new entry, it is removed. Invalid entries in the list (that don't contain a value for "section_name" or it is an empty string) are skipped and the processing continues from the next entry.

◆ appendToSolarSystemConfigurationFile() [2/2]

bool SolarSystemEditor::appendToSolarSystemConfigurationFile ( SsoElements  object)

Adds a new entry at the end of the user solar system configuration file.

This function writes directly to the file. See the note on why QSettings was not used in the description of appendToSolarSystemConfigurationFile(QList<SsoElements>) Duplicates are removed: If any section in the file matches the "section_name" value of the inserted entry, it is removed.

◆ getDefaultSsoIdentifiers()

QHash<QString,QString> SolarSystemEditor::getDefaultSsoIdentifiers ( ) const
inline

Returns the names of the objects listed in the default ssystem_major.ini.

The default solar system configuration file is assumed to be the one in the installation directory.

◆ init()

void SolarSystemEditor::init ( )
overridevirtual

called when the plug-in is loaded.

All initializations should be done here.

Implements StelModule.

◆ listAllLoadedSsoIdentifiers()

QHash<QString,QString> SolarSystemEditor::listAllLoadedSsoIdentifiers ( ) const

Lists the objects listed in the current user ssystem.ini.

As the name suggests, the list is compiled when the function is run.

◆ readMpcOneLineCometElements()

SsoElements SolarSystemEditor::readMpcOneLineCometElements ( QString  oneLineElements) const

Reads a single comet's orbital elements from a string.

This function converts a line of comet orbital elements in MPC format to a hash in Stellarium's ssystem.ini format. The MPC's one-line orbital elements format for comets is described on their website: http://www.minorplanetcenter.org/iau/info/CometOrbitFormat.html

Returns
an empty hash if there is an error or the source string is not a valid line in MPC format.

◆ readMpcOneLineCometElementsFromFile()

QList<SsoElements> SolarSystemEditor::readMpcOneLineCometElementsFromFile ( QString  filePath) const

Reads a list of comet orbital elements from a file.

This function reads a list of comet orbital elements in MPC's one-line format from a file (one comet per line) and converts it to a list of hashes in Stellarium's ssystem.ini format. Example source file is the list of observable comets on the MPC's site: http://www.minorplanetcenter.org/iau/Ephemerides/Comets/Soft00Cmt.txt readMpcOneLineCometElements() is used internally to parse each line.

◆ readMpcOneLineMinorPlanetElements()

SsoElements SolarSystemEditor::readMpcOneLineMinorPlanetElements ( QString  oneLineElements) const

Reads a single minor planet's orbital elements from a string.

This function converts a line of minor planet orbital elements in MPC format to a hash in Stellarium's ssystem.ini format. The MPC's one-line orbital elements format for minor planets is described on their website: http://www.minorplanetcenter.org/iau/info/MPOrbitFormat.html

Returns
an empty hash if there is an error or the source string is not a valid line in MPC format.

◆ readMpcOneLineMinorPlanetElementsFromFile()

QList<SsoElements> SolarSystemEditor::readMpcOneLineMinorPlanetElementsFromFile ( QString  filePath) const

Reads a list of minor planet orbital elements from a file.

This function reads a list of minor planets orbital elements in MPC's one-line format from a file (one comet per line) and converts it to a list of hashes in Stellarium's ssystem.ini format. Example source file is the list of bright asteroids on the MPC's site: http://www.minorplanetcenter.org/iau/Ephemerides/Bright/2010/Soft00Bright.txt readMpcOneLineMinorPlanetElements() is used internally to parse each line.

◆ removeSsoWithName()

bool SolarSystemEditor::removeSsoWithName ( QString  name)

Removes an object from the user Solar System configuration file.

Reloads the Solar System on successful removal.

  • name true name of the object ("name" parameter in the configuration file)
    Returns
    true if the entry has been removed successfully or there is no such entry
    false if there was an error

◆ replaceSolarSystemConfigurationFileWith()

bool SolarSystemEditor::replaceSolarSystemConfigurationFileWith ( QString  filePath)

Replace current minor bodies file in the user data directory.

Writes warning to logfile and returns false in case of problems.

◆ resetSolarSystemToDefault

void SolarSystemEditor::resetSolarSystemToDefault ( )
slot

Resets the Solar System configuration file and reloads the Solar System.

◆ unpackAlphanumericNumber()

static int SolarSystemEditor::unpackAlphanumericNumber ( QChar  prefix,
int  lastDigit 
)
static

Converts a two-character number used in MPC packed IAU designations.

See http://www.minorplanetcenter.org/iau/info/PackedDes.html This function is used for both asteroid and comet designations.

◆ unpackCometIAUDesignation

static QString SolarSystemEditor::unpackCometIAUDesignation ( const QString &  packedDesignation)
staticslot

Unpacks an MPC packed comet IAU designation.

(7-letter variant only) See https://www.minorplanetcenter.org/iau/info/PackedDes.html

Returns
an empty string if the argument is not a valid packed IAU designation.

◆ unpackMinorPlanetIAUDesignation

static QString SolarSystemEditor::unpackMinorPlanetIAUDesignation ( const QString &  packedDesignation)
staticslot

Unpacks an MPC packed minor planet IAU designation.

See https://www.minorplanetcenter.org/iau/info/PackedDes.html

Returns
an empty string if the argument is not a valid packed IAU designation.

◆ updateSolarSystemConfigurationFile()

bool SolarSystemEditor::updateSolarSystemConfigurationFile ( QList< SsoElements >  objects,
UpdateFlags  flags 
)

Updates entries in the user solar system configuration file.

Parameters
objectsa list of data for already existing objects (non-existing ones are skipped);
flagsflags controlling what is being updated. See UpdateFlag.
Returns
false if the operation has failed for some reason.