File indexing completed on 2024-10-27 09:47:20
0001 /* 0002 SPDX-FileCopyrightText: 2001 Jason Harris <jharris@30doradus.org> 0003 SPDX-License-Identifier: GPL-2.0-or-later 0004 */ 0005 0006 #pragma once 0007 0008 #include "config-kstars.h" 0009 #include "nan.h" 0010 0011 #include <KXmlGuiWindow> 0012 #include <KLocalizedString> 0013 #include <QLabel> 0014 0015 #include <QDockWidget> 0016 #include <qtdbusglobal.h> 0017 #ifdef HAVE_CFITSIO 0018 #include <QPointer> 0019 #endif 0020 0021 // forward declaration is enough. We only need pointers 0022 class QActionGroup; 0023 class QDockWidget; 0024 class QPalette; 0025 class KActionMenu; 0026 class KConfigDialog; 0027 0028 class KStarsData; 0029 class SkyPoint; 0030 class SkyMap; 0031 class GeoLocation; 0032 class FindDialog; 0033 class TimeStepBox; 0034 class ImageExporter; 0035 0036 class AltVsTime; 0037 class WUTDialog; 0038 class WIView; 0039 class WILPSettings; 0040 class WIEquipSettings; 0041 class ObsConditions; 0042 class AstroCalc; 0043 class SkyCalendar; 0044 class ScriptBuilder; 0045 class PlanetViewer; 0046 class JMoonTool; 0047 class MoonPhaseTool; 0048 class FlagManager; 0049 class Execute; 0050 class ExportImageDialog; 0051 class PrintingWizard; 0052 class HorizonManager; 0053 class EyepieceField; 0054 class AddDeepSkyObject; 0055 0056 class OpsCatalog; 0057 class OpsGuides; 0058 class OpsSolarSystem; 0059 class OpsSatellites; 0060 class OpsSupernovae; 0061 class OpsTerrain; 0062 class OpsImageOverlay; 0063 class OpsDeveloper; 0064 class OpsColors; 0065 class OpsAdvanced; 0066 class OpsINDI; 0067 class OpsEkos; 0068 class OpsFITS; 0069 class OpsXplanet; 0070 0071 namespace Ekos 0072 { 0073 class Manager; 0074 } 0075 0076 #ifdef HAVE_CFITSIO 0077 class FITSViewer; 0078 #endif 0079 0080 /** 0081 *@class KStars 0082 *@short This is the main window for KStars. 0083 *In addition to the GUI elements, the class contains the program clock, 0084 KStarsData, and SkyMap objects. It also contains functions for the \ref DBusInterface D-Bus interface. KStars is now a singleton class. Use KStars::createInstance() to 0085 create an instance and KStars::Instance() to get a pointer to the instance 0086 *@author Jason Harris, Jasem Mutlaq 0087 *@version 1.1 0088 */ 0089 0090 class KStars : public KXmlGuiWindow 0091 { 0092 Q_OBJECT 0093 Q_CLASSINFO("D-Bus Interface", "org.kde.kstars") 0094 Q_SCRIPTABLE Q_PROPERTY(QString colorScheme READ colorScheme WRITE loadColorScheme NOTIFY colorSchemeChanged) 0095 0096 public: 0097 Q_SCRIPTABLE QString colorScheme() const; 0098 0099 private: 0100 /** 0101 * @short Constructor. 0102 * @param doSplash should the splash panel be displayed during 0103 * initialization. 0104 * @param startClockRunning should the clock be running on startup? 0105 * @param startDateString date (in string representation) to start running from. 0106 * 0107 * @todo Refer to documentation on date format. 0108 */ 0109 explicit KStars(bool doSplash, bool startClockRunning = true, const QString &startDateString = QString()); 0110 0111 public: 0112 /** 0113 * @short Create an instance of this class. Destroy any previous instance 0114 * @param doSplash 0115 * @param clockrunning 0116 * @param startDateString 0117 * @note See KStars::KStars for details on parameters 0118 * @return a pointer to the instance 0119 */ 0120 static KStars *createInstance(bool doSplash, bool clockrunning = true, const QString &startDateString = QString()); 0121 0122 /** @return a pointer to the instance of this class */ 0123 inline static KStars *Instance() 0124 { 0125 return pinstance; 0126 } 0127 0128 /** Destructor. */ 0129 ~KStars() override; 0130 0131 /** Syncs config file. Deletes objects. */ 0132 void releaseResources(); 0133 0134 /** @return pointer to KStarsData object which contains application data. */ 0135 inline KStarsData *data() const 0136 { 0137 return m_KStarsData; 0138 } 0139 0140 /** @return pointer to SkyMap object which is the sky display widget. */ 0141 inline SkyMap *map() const 0142 { 0143 return m_SkyMap; 0144 } 0145 0146 inline FlagManager *flagManager() const 0147 { 0148 return m_FlagManager; 0149 } 0150 0151 inline PrintingWizard *printingWizard() const 0152 { 0153 return m_PrintingWizard; 0154 } 0155 0156 #ifdef HAVE_CFITSIO 0157 // void addFITSViewer(const QSharedPointer<FITSViewer> &fv); 0158 const QSharedPointer<FITSViewer> &genericFITSViewer(); 0159 const QSharedPointer<FITSViewer> &createFITSViewer(); 0160 void clearAllViewers(); 0161 #endif 0162 0163 /** Add an item to the color-scheme action manu 0164 * @param name The name to use in the menu 0165 * @param actionName The internal name for the action (derived from filename) 0166 */ 0167 void addColorMenuItem(QString name, const QString &actionName); 0168 0169 /** Remove an item from the color-scheme action manu 0170 * @param actionName The internal name of the action (derived from filename) 0171 */ 0172 void removeColorMenuItem(const QString &actionName); 0173 0174 /** @short Apply config options throughout the program. 0175 * In most cases, options are set in the "Options" object directly, 0176 * but for some things we have to manually react to config changes. 0177 * @param doApplyFocus If true, then focus position will be set 0178 * from config file 0179 */ 0180 void applyConfig(bool doApplyFocus = true); 0181 0182 /** Sync Options to GUI, if any */ 0183 void syncOps(); 0184 0185 void showImgExportDialog(); 0186 0187 void syncFOVActions(); 0188 0189 void hideAllFovExceptFirst(); 0190 0191 void selectNextFov(); 0192 0193 void selectPreviousFov(); 0194 0195 void showWISettingsUI(); 0196 0197 void showWI(ObsConditions *obs); 0198 0199 /** Load HIPS information and repopulate menu. */ 0200 void repopulateHIPS(); 0201 0202 void repopulateOrientation(); 0203 0204 WIEquipSettings *getWIEquipSettings() 0205 { 0206 return m_WIEquipmentSettings; 0207 } 0208 0209 public Q_SLOTS: 0210 /** @defgroup DBusInterface DBus Interface 0211 KStars provides powerful scripting functionality via DBus. The most common DBus functions can be constructed and executed within the ScriptBuilder tool. 0212 Any 3rd party language or tool with support for DBus can access several interfaces provided by KStars: 0213 <ul> 0214 <li>KStars: Provides functions to manipulate the skymap including zoom, pan, and motion to selected objects. Add and remove object trails and labels. Wait for user input before running further actions.</li> 0215 <li>SimClock: Provides functions to start and stop time, set a different date and time, and to set the clock scale.</li> 0216 <li>Ekos: Provides functions to start and stop Ekos Manager, set Ekos connection mode, and access to Ekos modules: 0217 <ul> 0218 <li>Capture: Provides functions to capture images, load sequence queues, control filter wheel, and obtain information on job progress.</li> 0219 <li>Focus: Provides functions to focus control in manual and automated mode. Start and stop focusing procedures and set autofocus options.</li> 0220 <li>Guide: Provides functions to start and stop calibration and autoguiding procedures. Set calibration and autoguide options.</li> 0221 <li>Align: Provides functions to solve images use online or offline astrometry.net solver.</li> 0222 </ul> 0223 </li> 0224 </ul> 0225 */ 0226 0227 /*@{*/ 0228 0229 /** DBUS interface function. 0230 * Set focus to given Ra/Dec coordinates 0231 * @param ra the Right Ascension coordinate for the focus (in Hours) 0232 * @param dec the Declination coordinate for the focus (in Degrees) 0233 */ 0234 Q_SCRIPTABLE Q_NOREPLY void setRaDec(double ra, double dec); 0235 0236 /** DBUS interface function. 0237 * Set focus to given J2000.0 Ra/Dec coordinates 0238 * @param ra the J2000.0 Right Ascension coordinate for the focus (in Hours) 0239 * @param dec the J2000.0 Declination coordinate for the focus (in Degrees) 0240 */ 0241 Q_SCRIPTABLE Q_NOREPLY void setRaDecJ2000(double ra0, double dec0); 0242 0243 /** DBUS interface function. 0244 * Set focus to given Alt/Az coordinates. 0245 * @param alt the Altitude coordinate for the focus (in Degrees) 0246 * @param az the Azimuth coordinate for the focus (in Degrees) 0247 * @param altIsRefracted If set to true, the altitude is interpreted as if it were corrected for atmospheric refraction (i.e. the altitude is an apparent altitude) 0248 */ 0249 Q_SCRIPTABLE Q_NOREPLY void setAltAz(double alt, double az, bool altIsRefracted = false); 0250 0251 /** DBUS interface function. 0252 * Point in the direction described by the string argument. 0253 * @param direction either an object name, a compass direction (e.g., "north"), or "zenith" 0254 */ 0255 Q_SCRIPTABLE Q_NOREPLY void lookTowards(const QString &direction); 0256 0257 /** DBUS interface function. 0258 * Add a name label to the named object 0259 * @param name the name of the object to which the label will be attached 0260 */ 0261 Q_SCRIPTABLE Q_NOREPLY void addLabel(const QString &name); 0262 0263 /** DBUS interface function. 0264 * Remove a name label from the named object 0265 * @param name the name of the object from which the label will be removed 0266 */ 0267 Q_SCRIPTABLE Q_NOREPLY void removeLabel(const QString &name); 0268 0269 /** DBUS interface function. 0270 * Add a trail to the named solar system body 0271 * @param name the name of the body to which the trail will be attached 0272 */ 0273 Q_SCRIPTABLE Q_NOREPLY void addTrail(const QString &name); 0274 0275 /** DBUS interface function. 0276 * Remove a trail from the named solar system body 0277 * @param name the name of the object from which the trail will be removed 0278 */ 0279 Q_SCRIPTABLE Q_NOREPLY void removeTrail(const QString &name); 0280 0281 /** DBUS interface function. Zoom in one step. */ 0282 Q_SCRIPTABLE Q_NOREPLY void zoomIn(); 0283 0284 /** DBUS interface function. Zoom out one step. */ 0285 Q_SCRIPTABLE Q_NOREPLY void zoomOut(); 0286 0287 /** DBUS interface function. reset to the default zoom level. */ 0288 Q_SCRIPTABLE Q_NOREPLY void defaultZoom(); 0289 0290 /** DBUS interface function. Set zoom level to specified value. 0291 * @param z the zoom level. Units are pixels per radian. */ 0292 Q_SCRIPTABLE Q_NOREPLY void zoom(double z); 0293 0294 /** DBUS interface function. Set local time and date. 0295 * @param yr year of date 0296 * @param mth month of date 0297 * @param day day of date 0298 * @param hr hour of time 0299 * @param min minute of time 0300 * @param sec second of time 0301 */ 0302 Q_SCRIPTABLE Q_NOREPLY void setLocalTime(int yr, int mth, int day, int hr, int min, int sec); 0303 0304 /** DBUS interface function. Set local time and date to present values acc. system clock 0305 * @note Just a proxy for slotSetTimeToNow(), but it is better to 0306 * keep the DBus interface separate from the internal methods. 0307 */ 0308 Q_SCRIPTABLE Q_NOREPLY void setTimeToNow(); 0309 0310 /** DBUS interface function. Delay further execution of DBUS commands. 0311 * @param t number of seconds to delay 0312 */ 0313 Q_SCRIPTABLE Q_NOREPLY void waitFor(double t); 0314 0315 /** DBUS interface function. Pause further DBUS execution until a key is pressed. 0316 * @param k the key which will resume DBUS execution 0317 */ 0318 Q_SCRIPTABLE Q_NOREPLY void waitForKey(const QString &k); 0319 0320 /** DBUS interface function. Toggle tracking. 0321 * @param track engage tracking if true; else disengage tracking 0322 */ 0323 Q_SCRIPTABLE Q_NOREPLY void setTracking(bool track); 0324 0325 /** DBUS interface function. modify a view option. 0326 * @param option the name of the option to be modified 0327 * @param value the option's new value 0328 */ 0329 Q_SCRIPTABLE Q_NOREPLY void changeViewOption(const QString &option, const QString &value); 0330 0331 /** DBUS interface function. 0332 * @param name the name of the option to query 0333 * @return the current value of the named option 0334 * @note Deprecated because it's not clear how to list the options 0335 */ 0336 Q_DECL_DEPRECATED Q_SCRIPTABLE QString getOption(const QString &name); 0337 0338 /** DBUS interface function. Get the focus information as XML. 0339 */ 0340 Q_SCRIPTABLE QString getFocusInformationXML(); 0341 0342 /** DBUS interface function. Read config file. 0343 * This function is useful for restoring the user settings from the config file, 0344 * after having modified the settings in memory. 0345 * @sa writeConfig() 0346 */ 0347 Q_SCRIPTABLE Q_NOREPLY void readConfig(); 0348 0349 /** DBUS interface function. Write current settings to config file. 0350 * This function is useful for storing user settings before modifying them with a DBUS 0351 * script. The original settings can be restored with readConfig(). 0352 * @sa readConfig() 0353 */ 0354 Q_SCRIPTABLE Q_NOREPLY void writeConfig(); 0355 0356 /** DBUS interface function. Show text message in a popup window. 0357 * @note Not Yet Implemented 0358 * @param x x-coordinate for message window 0359 * @param y y-coordinate for message window 0360 * @param message the text to display in the message window 0361 */ 0362 Q_SCRIPTABLE Q_NOREPLY void popupMessage(int x, int y, const QString &message); 0363 0364 /** DBUS interface function. Draw a line on the sky map. 0365 * @note Not Yet Implemented 0366 * @param x1 starting x-coordinate of line 0367 * @param y1 starting y-coordinate of line 0368 * @param x2 ending x-coordinate of line 0369 * @param y2 ending y-coordinate of line 0370 * @param speed speed at which line should appear from start to end points (in pixels per second) 0371 */ 0372 Q_SCRIPTABLE Q_NOREPLY void drawLine(int x1, int y1, int x2, int y2, int speed); 0373 0374 /** DBUS interface function. Set the geographic location. 0375 * @param city the city name of the location 0376 * @param province the province name of the location 0377 * @param country the country name of the location 0378 * @return True if geographic location is found and set, false otherwise. 0379 */ 0380 Q_SCRIPTABLE bool setGeoLocation(const QString &city, const QString &province, const QString &country); 0381 0382 /** 0383 * @brief location Returns a JSON Object (as string) that contains the following information: 0384 * name: String 0385 * province: String 0386 * country: String 0387 * longitude: Double (-180 to +180) 0388 * latitude: Double (-90 to +90) 0389 * tz0 (Time zone without DST): Double 0390 * tz (Time zone with DST): Double 0391 * @return Stringified JSON object as described above. 0392 */ 0393 Q_SCRIPTABLE QString location(); 0394 0395 /** DBUS interface function. Set the GPS geographic location. 0396 * @param longitude longitude in degrees (-180 West to +180 East) 0397 * @param latitude latitude in degrees (-90 South to +90 North) 0398 * @param elevation site elevation in meters 0399 * @param tz0 Time zone offset WITHOUT daylight saving time. 0400 * @return True if geographic location is set, false otherwise. 0401 */ 0402 Q_SCRIPTABLE bool setGPSLocation(double longitude, double latitude, double elevation, double tz0); 0403 0404 /** DBUS interface function. Modify a color. 0405 * @param colorName the name of the color to be modified (e.g., "SkyColor") 0406 * @param value the new color to use 0407 */ 0408 Q_SCRIPTABLE Q_NOREPLY void setColor(const QString &colorName, const QString &value); 0409 0410 /** DBUS interface function. Load a color scheme. 0411 * @param name the name of the color scheme to load (e.g., "Moonless Night") 0412 */ 0413 Q_SCRIPTABLE Q_NOREPLY void loadColorScheme(const QString &name); 0414 0415 /** DBUS interface function. Export the sky image to a file. 0416 * @param filename the filename for the exported image 0417 * @param width the width for the exported image. Map's width will be used if nothing or an invalid value is supplied. 0418 * @param height the height for the exported image. Map's height will be used if nothing or an invalid value is supplied. 0419 * @param includeLegend should we include a legend? 0420 */ 0421 Q_SCRIPTABLE Q_NOREPLY void exportImage(const QString &filename, int width = -1, int height = -1, 0422 bool includeLegend = false); 0423 0424 /** DBUS interface function. Return a URL to retrieve Digitized Sky Survey image. 0425 * @param objectName name of the object. 0426 * @note If the object is note found, the string "ERROR" is returned. 0427 */ 0428 Q_SCRIPTABLE QString getDSSURL(const QString &objectName); 0429 0430 /** DBUS interface function. Return a URL to retrieve Digitized Sky Survey image. 0431 * @param RA_J2000 J2000.0 RA 0432 * @param Dec_J2000 J2000.0 Declination 0433 * @param width width of the image, in arcminutes (default = 15) 0434 * @param height height of the image, in arcminutes (default = 15) 0435 */ 0436 Q_SCRIPTABLE QString getDSSURL(double RA_J2000, double Dec_J2000, float width = 15, float height = 15); 0437 0438 /** DBUS interface function. Return XML containing information about a sky object 0439 * @param objectName name of the object. 0440 * @param fallbackToInternet Attempt to resolve the name using internet databases if not found 0441 * @param storeInternetResolved If we fell back to the internet, save the result in DSO database for future offline access 0442 * @note If the object was not found, the XML is empty. 0443 */ 0444 Q_SCRIPTABLE QString getObjectDataXML(const QString &objectName, 0445 bool fallbackToInternet = false, 0446 bool storeInternetResolved = true); 0447 0448 /** DBUS interface function. Return XML containing position info about a sky object 0449 * @param objectName name of the object. 0450 * @note If the object was not found, the XML is empty. 0451 */ 0452 Q_SCRIPTABLE QString getObjectPositionInfo(const QString &objectName); 0453 0454 /** DBUS interface function. Render eyepiece view and save it in the file(s) specified 0455 * @note See EyepieceField::renderEyepieceView() for more info. This is a DBus proxy that calls that method, and then writes the resulting image(s) to file(s). 0456 * @note Important: If imagePath is empty, but overlay is true, or destPathImage is supplied, this method will make a blocking DSS download. 0457 */ 0458 Q_SCRIPTABLE Q_NOREPLY void renderEyepieceView(const QString &objectName, const QString &destPathChart, 0459 const double fovWidth = -1.0, const double fovHeight = -1.0, 0460 const double rotation = 0.0, const double scale = 1.0, 0461 const bool flip = false, const bool invert = false, 0462 QString imagePath = QString(), 0463 const QString &destPathImage = QString(), const bool overlay = false, 0464 const bool invertColors = false); 0465 0466 /** DBUS interface function. Set the approx field-of-view 0467 * @param FOV_Degrees field of view in degrees 0468 */ 0469 Q_SCRIPTABLE Q_NOREPLY void setApproxFOV(double FOV_Degrees); 0470 0471 /** DBUS interface function. Get the dimensions of the Sky Map. 0472 * @return a string containing widthxheight in pixels. 0473 */ 0474 Q_SCRIPTABLE QString getSkyMapDimensions(); 0475 0476 /** DBUS interface function. Return a newline-separated list of objects in the observing wishlist. 0477 * @note Unfortunately, unnamed objects are troublesome. Hopefully, we don't have them on the observing list. 0478 */ 0479 Q_SCRIPTABLE QString getObservingWishListObjectNames(); 0480 0481 /** DBUS interface function. Return a newline-separated list of objects in the observing session plan. 0482 * @note Unfortunately, unnamed objects are troublesome. Hopefully, we don't have them on the observing list. 0483 */ 0484 Q_SCRIPTABLE QString getObservingSessionPlanObjectNames(); 0485 0486 /** DBUS interface function. Print the sky image. 0487 * @param usePrintDialog if true, the KDE print dialog will be shown; otherwise, default parameters will be used 0488 * @param useChartColors if true, the "Star Chart" color scheme will be used for the printout, which will save ink. 0489 */ 0490 Q_SCRIPTABLE Q_NOREPLY void printImage(bool usePrintDialog, bool useChartColors); 0491 0492 /** DBUS interface function. Open FITS image. 0493 * @param imageUrl URL of FITS image to load. For a local file the prefix must be file:// For example 0494 * if the file is located at /home/john/m42.fits then the full URL is file:///home/john/m42.fits 0495 */ 0496 Q_SCRIPTABLE Q_NOREPLY void openFITS(const QUrl &imageUrl); 0497 0498 /** @}*/ 0499 0500 signals: 0501 /** DBUS interface notification. Color scheme was updated. 0502 */ 0503 void colorSchemeChanged(); 0504 0505 public Q_SLOTS: 0506 /** 0507 * Update time-dependent data and (possibly) repaint the sky map. 0508 * @param automaticDSTchange change DST status automatically? 0509 */ 0510 void updateTime(const bool automaticDSTchange = true); 0511 0512 /** action slot: sync kstars clock to system time */ 0513 void slotSetTimeToNow(); 0514 0515 /** Apply new settings and redraw skymap */ 0516 void slotApplyConfigChanges(); 0517 0518 /** Apply new settings for WI */ 0519 void slotApplyWIConfigChanges(); 0520 0521 /** Called when zoom level is changed. Enables/disables zoom 0522 * actions and updates status bar. */ 0523 void slotZoomChanged(); 0524 0525 /** action slot: Allow user to specify a field-of-view angle for the display window in degrees, 0526 * and set the zoom level accordingly. */ 0527 void slotSetZoom(); 0528 0529 /** action slot: Toggle whether kstars is tracking current position */ 0530 void slotTrack(); 0531 0532 /** action slot: open dialog for selecting a new geographic location */ 0533 void slotGeoLocator(); 0534 0535 /** 0536 * @brief slotSetTelescopeEnabled call when telescope comes online or goes offline. 0537 * @param enable True if telescope is online and connected, false otherwise. 0538 */ 0539 void slotSetTelescopeEnabled(bool enable); 0540 0541 /** 0542 * @brief slotSetDomeEnabled call when dome comes online or goes offline. 0543 * @param enable True if dome is online and connected, false otherwise. 0544 */ 0545 void slotSetDomeEnabled(bool enable); 0546 0547 /** Delete FindDialog because ObjNames list has changed in KStarsData due to 0548 * reloading star data. So list in FindDialog must be new filled with current data. */ 0549 void clearCachedFindDialog(); 0550 0551 /** Remove all trails which may have been added to solar system bodies */ 0552 void slotClearAllTrails(); 0553 0554 /** Display position in the status bar. */ 0555 void slotShowPositionBar(SkyPoint *); 0556 0557 /** action slot: open Flag Manager */ 0558 void slotFlagManager(); 0559 0560 /** Show the eyepiece view tool */ 0561 void slotEyepieceView(SkyPoint *sp, const QString &imagePath = QString()); 0562 0563 /** Show the DSO Catalog Management GUI */ 0564 void slotDSOCatalogGUI(); 0565 0566 /** action slot: open KStars startup wizard */ 0567 void slotWizard(); 0568 0569 void updateLocationFromWizard(const GeoLocation &geo); 0570 0571 WIView *wiView() 0572 { 0573 return m_WIView; 0574 } 0575 0576 bool isWIVisible() 0577 { 0578 if (!m_WIView) 0579 return false; 0580 if (!m_wiDock) 0581 return false; 0582 return m_wiDock->isVisible(); 0583 } 0584 0585 //FIXME Port to QML2 0586 //#if 0 0587 /** action slot: open What's Interesting settings window */ 0588 void slotWISettings(); 0589 0590 /** action slot: toggle What's Interesting window */ 0591 void slotToggleWIView(); 0592 //#endif 0593 0594 private slots: 0595 /** action slot: open a dialog for setting the time and date */ 0596 void slotSetTime(); 0597 0598 /** action slot: toggle whether kstars clock is running or not */ 0599 void slotToggleTimer(); 0600 0601 /** action slot: advance one step forward in time */ 0602 void slotStepForward(); 0603 0604 /** action slot: advance one step backward in time */ 0605 void slotStepBackward(); 0606 0607 /** action slot: open dialog for finding a named object */ 0608 void slotFind(); 0609 0610 /** action slot: open KNewStuff window to download extra data. */ 0611 void slotDownload(); 0612 0613 /** action slot: open KStars calculator to compute astronomical ephemeris */ 0614 void slotCalculator(); 0615 0616 /** action slot: open Elevation vs. Time tool */ 0617 void slotAVT(); 0618 0619 /** action slot: open What's up tonight dialog */ 0620 void slotWUT(); 0621 0622 /** action slot: open Sky Calendar tool */ 0623 void slotCalendar(); 0624 0625 /** action slot: open the glossary */ 0626 void slotGlossary(); 0627 0628 /** action slot: open ScriptBuilder dialog */ 0629 void slotScriptBuilder(); 0630 0631 /** action slot: open Solar system viewer */ 0632 void slotSolarSystem(); 0633 0634 /** action slot: open Jupiter Moons tool */ 0635 void slotJMoonTool(); 0636 0637 /** action slot: open Moon Phase Calendar tool */ 0638 void slotMoonPhaseTool(); 0639 0640 #if 0 0641 /** action slot: open Telescope wizard */ 0642 void slotTelescopeWizard(); 0643 #endif 0644 0645 /** action slot: open INDI driver panel */ 0646 void slotINDIDriver(); 0647 0648 /** action slot: open INDI control panel */ 0649 void slotINDIPanel(); 0650 0651 /** action slot: open Ekos panel */ 0652 void slotEkos(); 0653 0654 /** action slot: Track with the telescope (INDI) */ 0655 void slotINDITelescopeTrack(); 0656 0657 /** 0658 * Action slot: Slew with the telescope (INDI) 0659 * 0660 * @param focused_object Slew to the focused object or the mouse pointer if false. 0661 * 0662 */ 0663 void slotINDITelescopeSlew(bool focused_object = true); 0664 void slotINDITelescopeSlewMousePointer(); 0665 0666 /** 0667 * Action slot: Sync the telescope (INDI) 0668 * 0669 * @param focused_object Sync the position of the focused object or the mouse pointer if false. 0670 * 0671 */ 0672 void slotINDITelescopeSync(bool focused_object = true); 0673 void slotINDITelescopeSyncMousePointer(); 0674 0675 /** action slot: Abort any telescope motion (INDI) */ 0676 void slotINDITelescopeAbort(); 0677 0678 /** action slot: Park the telescope (INDI) */ 0679 void slotINDITelescopePark(); 0680 0681 /** action slot: Unpark the telescope (INDI) */ 0682 void slotINDITelescopeUnpark(); 0683 0684 /** action slot: Park the dome (INDI) */ 0685 void slotINDIDomePark(); 0686 0687 /** action slot: UnPark the dome (INDI) */ 0688 void slotINDIDomeUnpark(); 0689 0690 /** action slot: open dialog for setting the view options */ 0691 void slotViewOps(); 0692 0693 /** finish setting up after the kstarsData has finished */ 0694 void datainitFinished(); 0695 0696 /** Open FITS image. */ 0697 void slotOpenFITS(); 0698 void slotBlink(); 0699 0700 /** Action slot to save the sky image to a file.*/ 0701 void slotExportImage(); 0702 0703 /** Action slot to select a DBUS script and run it.*/ 0704 void slotRunScript(); 0705 0706 /** Action slot to print skymap. */ 0707 void slotPrint(); 0708 0709 /** Action slot to start Printing Wizard. */ 0710 void slotPrintingWizard(); 0711 0712 /** Action slot to show tip-of-the-day window. */ 0713 void slotTipOfDay(); 0714 0715 /** Action slot to set focus coordinates manually (opens FocusDialog). */ 0716 void slotManualFocus(); 0717 0718 /** Meta-slot to point the focus at special points (zenith, N, S, E, W). 0719 * Uses the name of the Action which sent the Signal to identify the 0720 * desired direction. */ 0721 void slotPointFocus(); 0722 0723 /** Meta-slot to set the color scheme according to the name of the 0724 * Action which sent the activating signal. */ 0725 void slotColorScheme(); 0726 0727 /** 0728 * @brief slotThemeChanged save theme name in options 0729 */ 0730 void slotThemeChanged(); 0731 0732 /** Select the Target symbol (a.k.a. field-of-view indicator) */ 0733 void slotTargetSymbol(bool flag); 0734 0735 /** Select the HIPS Source catalog. */ 0736 void slotHIPSSource(); 0737 0738 /** Invoke the Field-of-View symbol editor window */ 0739 void slotFOVEdit(); 0740 0741 /** Toggle between Equatorial and Ecliptic coordinate systems */ 0742 void slotCoordSys(); 0743 0744 /** Set the map projection according to the menu selection */ 0745 void slotMapProjection(); 0746 0747 /** Set the orientation parameters of the sky map */ 0748 void slotSkyMapOrientation(); 0749 0750 /** Toggle display of the observing list tool*/ 0751 void slotObsList(); 0752 0753 /** Meta-slot to handle display toggles for all of the viewtoolbar buttons. 0754 * uses the name of the sender to identify the item to change. */ 0755 void slotViewToolBar(); 0756 0757 /** Meta-slot to handle display toggles for all of the INDItoolbar buttons. 0758 * uses the name of the sender to identify the item to change. */ 0759 void slotINDIToolBar(); 0760 0761 /** Meta-slot to handle toggling display of GUI elements (toolbars and infoboxes) 0762 * uses name of the sender action to identify the widget to hide/show. */ 0763 void slotShowGUIItem(bool); 0764 0765 /** Toggle to and from full screen mode */ 0766 void slotFullScreen(); 0767 0768 /** Toggle whether to show the terrain image on the skymap. */ 0769 void slotTerrain(); 0770 0771 /** Toggle whether to show image overlays on the skymap. */ 0772 void slotImageOverlays(); 0773 0774 /** Save data to config file before exiting.*/ 0775 void slotAboutToQuit(); 0776 0777 void slotEquipmentWriter(); 0778 0779 void slotObserverManager(); 0780 0781 void slotHorizonManager(); 0782 0783 void slotExecute(); 0784 0785 void slotPolarisHourAngle(); 0786 0787 /** Update comets orbital elements*/ 0788 void slotUpdateComets(bool isAutoUpdate = false); 0789 0790 /** Update asteroids orbital elements*/ 0791 void slotUpdateAsteroids(bool isAutoUpdate = false); 0792 0793 /** Update list of recent supernovae*/ 0794 void slotUpdateSupernovae(); 0795 0796 /** Update satellites orbital elements*/ 0797 void slotUpdateSatellites(); 0798 0799 /** Configure Notifications */ 0800 void slotConfigureNotifications(); 0801 0802 private: 0803 /** Load FOV information and repopulate menu. */ 0804 void repopulateFOV(); 0805 0806 /** 0807 * @brief populateThemes Populate application themes 0808 */ 0809 void populateThemes(); 0810 0811 /** Initialize Menu bar, toolbars and all Actions. */ 0812 void initActions(); 0813 0814 /** Prepare options dialog. */ 0815 KConfigDialog* prepareOps(); 0816 0817 /** Initialize Status bar. */ 0818 void initStatusBar(); 0819 0820 /** Initialize focus position */ 0821 void initFocus(); 0822 0823 /** Build the KStars main window */ 0824 void buildGUI(); 0825 0826 void closeEvent(QCloseEvent *event) override; 0827 0828 public: 0829 /** Check if the KStars main window is shown */ 0830 bool isGUIReady() 0831 { 0832 return m_SkyMap != nullptr; 0833 } 0834 0835 /** Was KStars started with the clock running, or paused? */ 0836 bool isStartedWithClockRunning() 0837 { 0838 return StartClockRunning; 0839 } 0840 0841 /// Set to true when the application is being closed 0842 static bool Closing; 0843 0844 /** @brief Override KStars UI resource file. 0845 * @note This is used by UI tests, which need to use the same resources with a different app name 0846 */ 0847 static bool setResourceFile(QString const rc); 0848 0849 private: 0850 /// Pointer to an instance of KStars 0851 static KStars *pinstance; 0852 0853 // Resource file to load - overridable by UI tests 0854 static QString m_KStarsUIResource; 0855 0856 KActionMenu *colorActionMenu { nullptr }; 0857 KActionMenu *fovActionMenu { nullptr }; 0858 KActionMenu *hipsActionMenu { nullptr }; 0859 KActionMenu *orientationActionMenu { nullptr }; 0860 0861 KStarsData *m_KStarsData { nullptr }; 0862 SkyMap *m_SkyMap { nullptr }; 0863 0864 // Widgets 0865 TimeStepBox *m_TimeStepBox { nullptr }; 0866 0867 // Dialogs & Tools 0868 0869 // File Menu 0870 ExportImageDialog *m_ExportImageDialog { nullptr }; 0871 PrintingWizard *m_PrintingWizard { nullptr }; 0872 0873 // Tool Menu 0874 AstroCalc *m_AstroCalc { nullptr }; 0875 AltVsTime *m_AltVsTime { nullptr }; 0876 SkyCalendar *m_SkyCalendar { nullptr }; 0877 ScriptBuilder *m_ScriptBuilder { nullptr }; 0878 PlanetViewer *m_PlanetViewer { nullptr }; 0879 WUTDialog *m_WUTDialog { nullptr }; 0880 JMoonTool *m_JMoonTool { nullptr }; 0881 FlagManager *m_FlagManager { nullptr }; 0882 HorizonManager *m_HorizonManager { nullptr }; 0883 EyepieceField *m_EyepieceView { nullptr }; 0884 #ifdef HAVE_CFITSIO 0885 QSharedPointer<FITSViewer> m_GenericFITSViewer; 0886 QList<QSharedPointer<FITSViewer>> m_FITSViewers; 0887 #endif 0888 0889 #ifdef HAVE_INDI 0890 QPointer<Ekos::Manager> m_EkosManager; 0891 #endif 0892 0893 AddDeepSkyObject *m_addDSODialog { nullptr }; 0894 0895 // FIXME Port to QML2 0896 //#if 0 0897 WIView *m_WIView { nullptr }; 0898 WILPSettings *m_WISettings { nullptr }; 0899 WIEquipSettings *m_WIEquipmentSettings { nullptr }; 0900 ObsConditions *m_ObsConditions { nullptr }; 0901 QDockWidget *m_wiDock { nullptr }; 0902 //#endif 0903 0904 QActionGroup *projectionGroup { nullptr }; 0905 QActionGroup *skymapOrientationGroup { nullptr }; 0906 QActionGroup *cschemeGroup { nullptr }; 0907 QActionGroup *hipsGroup { nullptr }; 0908 QActionGroup *telescopeGroup { nullptr }; 0909 QActionGroup *domeGroup { nullptr }; 0910 0911 bool DialogIsObsolete { false }; 0912 bool StartClockRunning { false }; 0913 QString StartDateString; 0914 QLabel AltAzField, RADecField, J2000RADecField; 0915 //QPalette OriginalPalette, DarkPalette; 0916 0917 OpsCatalog *opcatalog { nullptr }; 0918 OpsGuides *opguides { nullptr }; 0919 OpsTerrain *opterrain { nullptr }; 0920 OpsImageOverlay *opsImageOverlay { nullptr }; 0921 OpsDeveloper *opsdeveloper { nullptr }; 0922 OpsSolarSystem *opsolsys { nullptr }; 0923 OpsSatellites *opssatellites { nullptr }; 0924 OpsSupernovae *opssupernovae { nullptr }; 0925 OpsColors *opcolors { nullptr }; 0926 OpsAdvanced *opadvanced { nullptr }; 0927 OpsINDI *opsindi { nullptr }; 0928 OpsEkos *opsekos { nullptr }; 0929 OpsFITS *opsfits { nullptr }; 0930 OpsXplanet *opsxplanet { nullptr }; 0931 0932 friend class TestArtificialHorizon; 0933 };