diff --git a/kstars/kstars.kcfg b/kstars/kstars.kcfg
index 3b1bde8db..cd2402ccb 100644
--- a/kstars/kstars.kcfg
+++ b/kstars/kstars.kcfg
@@ -1,2299 +1,2304 @@
ksutils.hThe screen coordinates of the Time InfoBox.QPoint(0,0)The screen coordinates of the Focus InfoBox.QPoint(600,0)The screen coordinates of the Geographic Location InfoBox.QPoint(0,600)If true, the Time InfoBox will show only its top line of data.trueIf true, the Focus InfoBox will show only its top line of data.trueIf true, the Geographic Location InfoBox will show only its top line of data.trueToggles display of all three InfoBoxes.trueToggles display of the Time InfoBox.trueToggles display of the Focus InfoBox.trueToggles display of the Geographic Location InfoBox.trueIs the Time InfoBox anchored to a window edge? 0 = not anchored; 1 = anchored to right edge; 2 = anchored to bottom edge; 3 = anchored to bottom and right edges.003Is the Focus InfoBox anchored to a window edge? 0 = not anchored; 1 = anchored to right edge; 2 = anchored to bottom edge; 3 = anchored to bottom and right edges.103Is the Geographic Location InfoBox anchored to a window edge? 0 = not anchored; 1 = anchored to right edge; 2 = anchored to bottom edge; 3 = anchored to bottom and right edges.203Toggle display of the status bar.trueToggle display of the Horizontal coordinates of the mouse cursor in the status bar.trueToggle display of the Equatorial coordinates of the mouse cursor at the current epoch in the status bar.trueToggle display of the Equatorial coordinates of the mouse cursor at the standard epoch in the status bar.falsetrue1024768trueBlack BodyList of the filenames of custom object catalogs.List of integers toggling display of each custom object catalog (any nonzero value indicates the objects in that catalog will be displayed).List of names for which custom catalogs are to be displayed.Names of objects entered into the find dialog are resolved using online services and stored in the database. This option also toggles the display of such resolved objects on the sky map.true800600truetruefalseToggle display of crosshairs centered at telescope's pointed position in the KStars sky map.trueToggle display of INDI messages in the KStars statusbar.trueShow INDI messages as desktop notifications instead of dialogs.falsetruefalsefalseThe default location of saved FITS filesKSUtils::getDefaultPath("fitsDir")INDI server will attempt to bind with ports starting from this port7624INDI server will attempt to bind with ports ending with this port9000List of the aliases for filter wheel slots.PATH to indiserver binaryKSUtils::getDefaultPath("indiServer")falsePATH to indi drivers directoryKSUtils::getDefaultPath("indiDriversDir")false320240falsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalseThe City name of the current geographic location.GreenwichThe Province name of the current geographic location. This is the name of the state for locations in the U. S.The Country name of the current geographic location.United KingdomThe longitude of the current geographic location, in decimal degrees.0.0The latitude of the current geographic location, in decimal degrees.51.468-10.00.0Two-letter code that determines the dates on which daylight savings time begins and ends (you can view the rules by pressing the "Explain DST Rules" button in the Geographic Location window).--If true, focus changes will cause the sky to visibly spin to the new position. Otherwise, the display will "snap" instantly to the new position.true
+
+
+ If true, clicking on the skymap will select the closest objects and highlights it.
+ false
+ The names of the currently selected field-of-view indicators. The list of defined FOV indicator names is listed in the "Settings|FOV Symbols" menu.TelradIf true, trails attached to solar system bodies will fade into the background sky color.trueThe right ascension of the initial focus position of the sky map, in decimal hours. This value is volatile; it is reset whenever the program shuts down.180.0The declination of the initial focus position of the sky map, in decimal degrees. This value is volatile; it is reset whenever the program shuts down.45.0The name of the object that should be centered and tracked on startup. If no object should be centered, set to "nothing". This value is volatile; it is reset whenever the program shuts down.nothingTrue if the skymap should track on its initial position on startup. This value is volatile; it is reset whenever the program shuts down.falseToggle whether KStars should hide some objects while the display is moving, for smoother motion.trueToggle whether constellation boundaries are hidden while the display is in motion.trueToggle whether constellation lines are hidden while the display is in motion.falseChoose sky culture.11Toggle whether constellation names are hidden while the display is in motion.falseToggle whether the coordinate grids are hidden while the display is in motion.trueToggle whether the Milky Way contour is hidden while the display is in motion.trueToggle whether IC objects are hidden while the display is in motion.trueToggle whether Messier objects are hidden while the display is in motion.trueToggle whether NGC objects are hidden while the display is in motion.trueToggle whether extra objects are hidden while the display is in motion.trueToggle whether solar system objects are hidden while the display is in motion.falseToggle whether faint stars are hidden while the display is in motion.trueToggle whether name labels are hidden while the display is in motion.trueToggle whether asteroids are drawn in the sky map.trueToggle whether asteroid name labels are drawn in the sky map.falsetrueToggle whether comets are drawn in the sky map.trueToggle whether comet comas are drawn in the sky map.trueToggle whether comet name labels are drawn in the sky map.falseToggle whether supernovae are drawn in the sky map.falseToggle whether supernova name labels are drawn in the sky map.falseSet magnitude limit for supernovae to be shown on the skymap.16Toggle supernova alerts.trueSet magnitude limit for supernovae to be alerted.13Toggle whether constellation boundaries are drawn in the sky map.falseToggle whether constellation boundary containing the central focus point is highlighted in the sky map.falseToggle whether constellation lines are drawn in the sky map.falseToggle whether constellation art drawn in the sky map.falseToggle whether constellation name labels are drawn in the sky map.falseToggle whether deep-sky objects are drawn in the sky map.trueToggle whether the ecliptic line is drawn in the sky map.falseToggle whether the equator line is drawn in the sky map.falseCoordinate grids will automatically change according to active coordinate system.trueToggle whether the equatorial coordinate grid is drawn in the sky map.falseToggle whether the horizontal coordinate grid is drawn in the sky map.falseToggle whether the local meridian line is drawn in the sky map.falseToggle whether the region below the horizon is opaque.trueToggle whether the horizon line is drawn in the sky map.trueToggle whether flags are drawn in the sky map.trueToggle whether IC objects are drawn in the sky map.falseToggle whether NGC objects are drawn in the sky map.trueToggle whether Messier objects are drawn in the sky map.trueToggle whether Messier objects are rendered as images in the sky map.trueToggle whether extra objects are drawn in the sky map.trueToggle whether the Milky Way contour is drawn in the sky map.trueToggle whether the Milky Way contour is filled. When this option is false, the Milky Way is shown as an outline.trueMeta-option to control whether all major planets (and the Sun and Moon) are drawn in the sky map.trueToggle whether major planets (and the Sun and Moon) are rendered as images in the sky map.trueToggle whether major planets (and the Sun and Moon) are labeled in the sky map.trueToggle whether the Sun is drawn in the sky map.trueToggle whether the Moon is drawn in the sky map.trueToggle whether Mercury is drawn in the sky map.trueToggle whether Venus is drawn in the sky map.trueToggle whether Mars is drawn in the sky map.trueToggle whether Jupiter is drawn in the sky map.trueToggle whether Saturn is drawn in the sky map.trueToggle whether Uranus is drawn in the sky map.trueToggle whether Neptune is drawn in the sky map.trueToggle whether Pluto is drawn in the sky map.trueToggle whether stars are drawn in the sky map.trueToggle whether star magnitude (brightness) labels are shown in the sky map.falseToggle whether star name labels are shown in the sky map.trueToggle whether deep-sky object magnitude (brightness) labels are shown in the sky map.falseToggle whether deep-sky object name labels are shown in the sky map.falseThe timescale above which slewing mode is forced on at all times.60The background fill mode for the on-screen information boxes: 0="no BG"; 1="semi-transparent BG"; 2="opaque BG"1Algorithm for the mapping projection.0Use official IAU abbreviations for constellation names.falseUse Latin constellation names.falseUse localized constellation names (if localized names are not available, default to Latin names).trueDisplay the sky with horizontal coordinates (when false, equatorial coordinates will be used).trueToggle whether a centered object automatically gets a name label attached.trueToggle whether a centered solar system object automatically gets a trail attached, as long as it remains centered.trueToggle whether the object under the mouse cursor gets a transient name label.trueToggle whether object positions are corrected for the effects of atmospheric refraction (only applies when horizontal coordinates are used).trueToggle whether corrections due to bending of light around the sun are taken into accountfalseToggle whether the sky is rendered using antialiasing. Lines and shapes are smoother with antialiasing, but rendering the screen will take more time.trueThe zoom level, measured in pixels per radian.250.250.5000000.When zooming in or out, change zoom speed factor by this multiplier.0.20.011.0The faint magnitude limit for drawing asteroids.15.0The maximum magnitude (visibility) to filter the asteroid data download from JPL.12.000Controls the relative number of asteroid name labels drawn in the map.4.0The faint magnitude limit for drawing deep-sky objects, when fully zoomed in.16.0The faint magnitude limit for drawing deep-sky objects, when fully zoomed out.5.0When enabled, objects whose magnitudes are unknown, or not available to KStars, are drawn irrespective of the faint limits set.trueSets the density of stars in the field of view5The faint magnitude limit for drawing stars, when the map is in motion (only applicable if faint stars are set to be hidden while the map is in motion).5.0The relative density for drawing star name and magnitude labels.2.0The relative density for drawing deep-sky object name and magnitude labels.5.0If true, long names (common names) for deep-sky objects are shown in the labels.falseThe maximum solar distance for drawing comets.3.0Use experimental OpenGL backend (deprecated).falseThe state of the clock (running or not)trueObjects in the observing list will be highlighted with a symbol in the map.trueObjects in the observing list will be highlighted with a colored name label in the map.falseThe observing list will prefer DSS imagery while downloading imagery.trueThe observing list will prefer SDSS imagery while downloading imagery.falseCheck this if you use a large Dobsonian telescope. Sorting by percentage current altitude is an easy way of determining what objects are well-placed for observation. However, when using a large Dobsonian telescope, objects close to the zenith are hard to observe. Since tracking there corresponds to a rotation in azimuth, it is both counterintuitive and requires the observer to frequently move the ladder. The region around the zenith where this is particularly frustrating is called the Dobsonian hole. This checkbox makes the observing list consider objects present in the hole as unfit for observation.falseThis specifies the angular radius of the Dobsonian hole, i.e. the region where a large Dobsonian telescope cannot be pointed easily.15.0040.00The name of the color schememoonless-night.colorsThe method for rendering stars: 0="realistic colors"; 1="solid red"; 2="solid black"; 3="solid white"; 4="solid real colors"04The color saturation level of stars (only applicable when using "realistic colors" mode).610The color for the angular-distance measurement ruler.#FFFThe background color of the on-screen information boxes.#000The text color for the on-screen information boxes, when activated by a mouse click.#F00The normal text color of the on-screen information boxes.#FFFThe color for the constellation boundary lines.#222The color for the constellation boundary lines.#222The color for the constellation figure lines.#555The color for the constellation names.#AA7The color for the cardinal compass point labels.#002The color for the ecliptic line.#663The color for the equator line.#FFFThe color for the equatorial coordinate grid lines.#456The color for the horizontal coordinate grid lines.#5A3The color for objects which have extra URL links available.#A00The color for the horizon line and opaque ground.#5A3The color for the local meridian line.#0059b3The color for Messier object symbols.#0F0The color for NGC object symbols.#066The color for IC object symbols.#439The color for the Milky Way contour.#123The color for star name labels.#7AAThe color for deep-sky object name labels.#7AAThe color for solar system object labels.#439The color for solar system object trails.#963The color for the sky background.#002The color for the artificial horizon region.#C82828The color for telescope target symbols.#8B8Color of visible satellites.#00FF00Color of invisible satellites.#FF0000Color of satellites labels.#640000Color of supernova#FFA500The color for user-added object labels.#439The color for RA Guide Error bar in Ekos guide module.#00FF00The color for DEC Guide Error bar in Ekos guide module.#00A5FFThe color for solver FOV box in Ekos alignment module.#FFFF00falseXplanet binary pathKSUtils::getDefaultPath("XplanetPath")Option to use a FIFO file instead of saving to the hard disktrueHow long to wait for XPlanet before giving up in milliseconds1000How long to pause between frames in the XPlanet Animation100Width of xplanet window640Height of xplanet window480If true, display a label in the upper right corner.falseShow local time.trueShow GMT instead of local time.falseSpecify the text of the first line of the label. By default, it says something like "Looking at Earth". Any instances of %t will be replaced by the target name, and any instances of %o will be replaced by the origin name.Specify the point size.12Set the color for the label.#F00Specify the format for the date/time label. This format string is passed to strftime(3). The default is "%c %Z", which shows the date, time, and time zone in the locale’s appropriate date and time representation.%c %ZfalsetruefalsefalseDraw a glare around the sun with a radius of the specified value larger than the Sun. The default value is 28.28Place the observer above a random latitude and longitudefalsePlace the observer above the specified longitude and latitudetrueRender the target body as seen from above the specified latitude (in degrees). The default value is 0.0Place the observer above the specified longitude (in degrees). Longitude is positive going east, negative going west (for the earth and moon), so for example Los Angeles is at -118 or 242. The default value is 0.0The default is no projection. Multiple bodies will not be shown if this option is specified, although shadows will still be drawn.0Use a file as the background image, with the planet to be superimposed upon it. This option is only meaningful with the -projection option. A color may also be supplied.falseUse a file as the background image.falseThe path of the background image.Use a color as the background.trueThe color of the background.#000A star of the specified magnitude will have a pixel brightness of 1. The default value is 10. Stars will be drawn more brightly if this number is larger.10If checked, use an arc file to be plotted against the background stars.falseSpecify an arc file to be plotted against the background stars.If checked, use a config file.falseUse the specified configuration file.If checked, use kstars's FOV.falseIf checked, use the specified marker file.falseSpecify a file containing user-defined marker data to display against the background stars.If checked, write coordinates of the bounding box for each marker in a file.falseWrite coordinates of the bounding box for each marker to this file.If checked, use star map file to draw the background stars.falseStar map file pathThis option is only used when creating JPEG images. The quality can range from 0 to 100. The default value is 80.80Toggle whether satellite tracks are drawn in the sky map.falseToggle whether satellite tracks are drawn in the sky map.falseIf selected, satellites will be draw like stars, otherwise, draw satellites as small colored square.falseToggle whether satellite labels are drawn in the sky map.falseList of selected satellites.Checking this option causes recomputation of current equatorial coordinates from catalog coordinates (i.e. application of precession, nutation and aberration corrections) for every redraw of the map. This makes processing slower when there are many stars to handle, but is more likely to be bug free. There are known bugs in the rendering of stars when this recomputation is avoided.falseThe default size for DSS images downloaded from the Internet.15.0To include parts of the star field, we add some extra padding around DSS images of deep-sky objects. This option configures the total (both sides) padding added to either dimension of the field.10.0Checking this option causes KStars to generate verbose debug information for diagnostic purposes. This may cause slowdown of KStars.falseChecking this option causes KStars to generate regular debug information.trueChecking this option causes KStars to stop generating ANY debug information.falseChecking this option causes KStars log debug messages to the default output used by the platform (e.g. Standard Error).trueChecking this option causes KStars log debug messages to a log file as specified.falseLog FITS Data activity.falseLog INDI devices activity.falseLog Ekos Capture Module activity.falseLog Ekos Focus Module activity.falseLog Ekos Guide Module activity.falseLog Ekos Alignment Module activity.falseLog Ekos Mount Module activity.falsetrueDisplay all captured FITS images in a single tab instead of multiple tabs per image.trueDisplay all captured FITS images in a single FITS Viewer window. By default each camera create its own FITS Viewer instancefalseDisplay all opened FITS images in a single FITS Viewer window.trueBring the FITSViewer window to the foreground when receiving a new image.truefalse!KSUtils::isHardwareLimited()false!KSUtils::isHardwareLimited()!KSUtils::isHardwareLimited()KSUtils::isHardwareLimited()4falsefalse40.00600600truefalsetruetruetruefalseSimulatorsfalsetruefalsetrue1Minimum telescope altitude limit. If the telescope is below this limit, it will be commanded to stop.0Maximum telescope altitude limit. If the telescope is above this limit, it will be commanded to stop.90.0falsefalse10If guide deviation exceeds this limit, the exposure will be automatically aborted and only resumed when the deviation is within this limit.2If HFR deviation exceeds this limit, the autofocus routine will be automatically started.0.5falsefalsefalseSets the time interval before forced autofocus attempts during a capture sequence.60If the target hour angle exceeds this value, Ekos will command a meridian flip and if successful it will resume guiding and capture operations.falsefalseIf set, Ekos will capture a few flat images to determine the optimal exposure time to achieve the desired ADU value.0Maximum difference between measured and target ADU values to deem the value as acceptable.100000000.10falsefalse2.5truefalse130true!KSUtils::isHardwareLimited()!KSUtils::isHardwareLimited()0KSUtils::getDefaultPath("fitsDir")Step size of the absolute focuser. The step size TICKS should be adjusted so that when the focuser moves TICKS steps, the difference in HFR is more than 0.1 pixels. Lower the value when you are close to optimal focus.100Wait for this many seconds after moving the focuser before capturing the next image during AutoFocus.0Wait for this many seconds after resuming guide.0The tolerance specifies the percentage difference between the current focusing position and the minimum obtained during the focusing run. Adjustment of this value is necessary to prevent the focusing algorithm from oscillating back and forth.1Set the maximum travel distance of an absolute focuser.10000Specifies gain value of CCD when performing focusing if supported by camera.0Set box size to select a focus star.64Set horizontal binning of CCD camera while in focus mode.1Set vertical binning of CCD camera while in focus mode.1truefalseDuring full field focusing, stars which are inside this percentage of the frame are filtered out of HFR calculation (default 0%). Detection algorithms may also have an inherent filter.0.0During full field focusing, stars which are outside this percentage of the frame are filtered out of HFR calculation (default 100%). Detection algorithms may also have an inherent filter.100.0falsetruefalse0150001Specifies exposure value of CCD in seconds when performing plate solving.1Set binning index of CCD camera while in alignment mode. Default values 0-3 corresponding to 1x1 to 4x4 binning. 4 is max binning.4Use rotator when performing load and slew.falseThreshold between measured and FITS position angles in arcminutes to consider the load and slew operation successful.30001truefalsefalse300false1500truetruetruetruetrue1true2truetrue30falsePath to astrometry.net solver location.KSUtils::getDefaultPath("AstrometrySolverBinary")falsePath to astrometry.net wcsinfo location.KSUtils::getDefaultPath("AstrometryWCSInfo")falsePath to astrometry.net file location.KSUtils::getDefaultPath("AstrometryConfFile")Astrometry.net Index files Location.KSUtils::getDefaultPath("AstrometryIndexFileLocation")falseKey to access astrometry.net online web services. You must register with astrometry.net to obtain a key.iczikaqstszeptgshttp://nova.astrometry.nettrue180-11.000localhost4400localhost5656010002false1falsefalsefalse36010truefalsefalsefalse21014510500falsefalsefalse2truetruetruetruetruetrue133.33133.330000500050001001000.52truetruefalsefalseLog Ekos Scheduler Module activity.falseSort scheduler jobs by priority and altitude.truetruefalsefalsefalsefalsetruefalse2true5303000000762486243001000NonefalsefalseToggle whether the HIPS sources are drawn in the sky map.false
diff --git a/kstars/options/opsadvanced.ui b/kstars/options/opsadvanced.ui
index 55f54acc6..5ccc65c11 100644
--- a/kstars/options/opsadvanced.ui
+++ b/kstars/options/opsadvanced.ui
@@ -1,979 +1,992 @@
OpsAdvanced00
- 593
- 321
+ 605
+ 404333330&General333333BackendsCorrect coordinates of objects for the effects of the atmosphereThe atmosphere bends light passing through it, like a lens. If this item is checked, this "atmospheric refraction" will be simulated in the sky map. Note that this correction is only applied when using the Horizontal coordinate system.Correct for atmospheric refractionCorrect for the effect of sun's gravity on star positions, as predicted by General Relativity, and verified by Eddington's experiment.General Relativity effects near the sunChecking this option causes recomputation of current equatorial coordinates from catalog coordinates (i.e. application of precession, nutation and aberration corrections) for every redraw of the map. This makes processing slower when there are many stars to handle, but is more likely to be bug-free. There are known bugs in the rendering of stars when this recomputation is avoided.Always recompute coordinatesDSS Imagery55555Default DSS Image Size: 0075011.00000000000000075.00000000000000015.00000000000000000arcminutesPadding around Deep Sky Objects:75011.00000000000000075.00000000000000010.00000000000000000arcminutesLogging OutputEnable regular debug outputReg&ulartrueverbosityButtonGroupQt::Horizontal21620Disable all logging output&DisablefalseverbosityButtonGroupShow LogsOutput:Verbosity:Enable verbose debug output&VerboseverbosityButtonGroupLog debug messages to default output device used by the platform (e.g. Standard Error)Defaul&ttruelogbuttonGroupLog output to log fileFilelogbuttonGroupQt::Horizontal21620Qt::HorizontalQt::Vertical2040Look and &Feel
+
+
+
+ 0.010000000000000
+
+
+ 1.000000000000000
+
+
+ 0.100000000000000
+
+
+ 0.200000000000000
+
+
+ Show slewing motion when focus changes?If checked, changing the focus position will result in a visible animated "slew" to the new position. Otherwise, the display will center on the new position instantaneously.Use animated slewingShow name label of centered object?If checked, a name label will be temporarily attached to an object while it is centered in the display. You can attach a more persistent label to any object using the right-click popup menu.Attach label to centered object
-
-
+
+
+
+ Also hide if time step larger than:
+
+
+
+
+
- Select this for smoother (but slower) graphics
+ Adjust speed of zooming when scrolling in and out with the mouse wheel
- Use antialiased drawing
+ Zoom Scroll Speed:
-
-
+
+
- Show name label of centered object?
-
-
- If checked, a name label will be temporarily attached to an object while it is centered in the display. You can attach a more persistent label to any object using the right-click popup menu.
+ Select this for smoother (but slower) graphics
- Attach temporary label when hovering mouse
+ Use antialiased drawing
-
+ Do not draw all objects while the map is moving?When the map is in motion, smooth animation is compromised if the program has too many objects to draw on the map; check this item to temporarily hide some of the objects while the display is in motion.Hide objects while moving
-
-
+
+
- Adjust speed of zooming when scrolling in and out with the mouse wheel
+ Show name label of centered object?
+
+
+ If checked, a name label will be temporarily attached to an object while it is centered in the display. You can attach a more persistent label to any object using the right-click popup menu.
- Zoom Scroll Speed:
+ Attach temporary label when hovering mouse
-
+
+
+
+
+
+
+ 0
+ 0
+
+ 11001020Qt::Horizontal
-
-
-
- 0.010000000000000
-
-
- 1.000000000000000
-
-
- 0.100000000000000
-
-
- 0.200000000000000
-
-
-
-
-
+
+
- Also hide if time step larger than:
+ Left Click selects object
-
-
- 00Configure Hidden Objects50000Hide faint stars while moving?If checked, then fainter stars will be hidden when the map is in motion.Stars fainter than400Qt::StrongFocusStars fainter than this will not be drawn while the map is moving.magHide solar system bodies while moving?If checked, then all solar system bodies will be hidden when the map is in motion.Solar systemHide the Milky Way contour while moving?If checked, then the Milky Way contour will be hidden when the map is in motion.Milky WayHide Messier objects when moving?If checked, then objects in the Messier catalog will be hidden when the map is in motion.Messier objectsHide constellation names while moving?If checked, then constellation names will be hidden when the map is in motion.Constellation namesHide NGC objects while moving?If checked, then objects in the NGC catalog will be hidden when the map is in motion.NGC objectsHide constellation lines while moving?If checked, then constellation lines will be hidden when the map is in motion.Constellation linesHide IC objects while moving?If checked, then objects in the IC catalog will be hidden when the map is in motion.IC objectsConstellation boundariesObject labelsHide coordinate grids while moving?If checked, then the coordinate grids will be hidden when the map is in motion.Coordinate gridsQt::Vertical2040Observing &List3333300Observing List Labels55555S&ymboltrueTe&xt00Preferred Imagery55555falseDigiti&zed Sky Survey (DSS)truefalseSloan &Digital Sky Survey (SDSS)Miscellaneous55555While sorting by percentage altitude, demote objects present in the Dobsonian hole5Qt::Horizontal402000Hole size in degrees:Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter0089.98999999999999515.000000000000000Qt::Vertical20417MagnitudeSpinBoxQDoubleSpinBoxwidgets/magnitudespinbox.hTimeStepBoxQSpinBoxwidgets/timestepbox.hAdvancedOptionsTabWidgetkcfg_UseRefractionkcfg_UseRelativistickcfg_AlwaysRecomputeCoordinateskcfg_DefaultDSSImageSizekcfg_DSSPaddingkcfg_UseAnimatedSlewingkcfg_UseAutoLabelkcfg_UseHoverLabelkcfg_UseAntialiaskcfg_HideOnSlewkcfg_HideStarskcfg_MagLimitHideStarkcfg_HidePlanetskcfg_HideMilkyWaykcfg_HideMessierkcfg_HideCNameskcfg_HideNGCkcfg_HideCLineskcfg_HideICkcfg_HideCBoundskcfg_HideLabelskcfg_HideGridskcfg_ObsListSymbolkcfg_ObsListTextkcfg_ObsListPreferDSSkcfg_ObsListPreferSDSS
diff --git a/kstars/skymapevents.cpp b/kstars/skymapevents.cpp
index b5f6865e4..cbc60b366 100644
--- a/kstars/skymapevents.cpp
+++ b/kstars/skymapevents.cpp
@@ -1,823 +1,826 @@
/***************************************************************************
skymapevents.cpp - K Desktop Planetarium
-------------------
begin : Sat Feb 10 2001
copyright : (C) 2001 by Jason Harris
email : jharris@30doradus.org
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
//This file contains Event handlers for the SkyMap class.
#include "skymap.h"
#include "ksplanetbase.h"
#include "kspopupmenu.h"
#include "kstars.h"
#include "observinglist.h"
#include "Options.h"
#include "skyglpainter.h"
#include "skyqpainter.h"
#include "printing/simplefovexporter.h"
#include "skycomponents/skylabeler.h"
#include "skycomponents/skymapcomposite.h"
#include "skycomponents/starcomponent.h"
#include "widgets/infoboxwidget.h"
#include
#include
#include
void SkyMap::resizeEvent(QResizeEvent *)
{
computeSkymap = true; // skymap must be new computed
//FIXME: No equivalent for this line in Qt4 ??
// if ( testWState( Qt::WState_AutoMask ) ) updateMask();
// Resize the widget that draws the sky map.
// FIXME: The resize event doesn't pass to children. Any better way of doing this?
m_SkyMapDraw->resize(size());
// Resize infoboxes container.
// FIXME: this is not really pretty. Maybe there are some better way to this???
m_iboxes->resize(size());
}
void SkyMap::keyPressEvent(QKeyEvent *e)
{
bool arrowKeyPressed(false);
bool shiftPressed(false);
float step = 1.0;
if (e->modifiers() & Qt::ShiftModifier)
{
step = 10.0;
shiftPressed = true;
}
//If the DBus resume key is not empty, then DBus processing is
//paused while we wait for a keypress
if (!data->resumeKey.isEmpty() && QKeySequence(e->key()) == data->resumeKey)
{
//The resumeKey was pressed. Signal that it was pressed by
//resetting it to empty; this will break the loop in
//KStars::waitForKey()
data->resumeKey = QKeySequence();
return;
}
if (m_previewLegend)
{
slotCancelLegendPreviewMode();
}
switch (e->key())
{
case Qt::Key_Left:
if (Options::useAltAz())
{
focus()->setAz(dms(focus()->az().Degrees() - step * MINZOOM / Options::zoomFactor()).reduce());
focus()->HorizontalToEquatorial(data->lst(), data->geo()->lat());
}
else
{
focus()->setRA(focus()->ra().Hours() + 0.05 * step * MINZOOM / Options::zoomFactor());
focus()->EquatorialToHorizontal(data->lst(), data->geo()->lat());
}
arrowKeyPressed = true;
slewing = true;
break;
case Qt::Key_Right:
if (Options::useAltAz())
{
focus()->setAz(dms(focus()->az().Degrees() + step * MINZOOM / Options::zoomFactor()).reduce());
focus()->HorizontalToEquatorial(data->lst(), data->geo()->lat());
}
else
{
focus()->setRA(focus()->ra().Hours() - 0.05 * step * MINZOOM / Options::zoomFactor());
focus()->EquatorialToHorizontal(data->lst(), data->geo()->lat());
}
arrowKeyPressed = true;
slewing = true;
break;
case Qt::Key_Up:
if (Options::useAltAz())
{
focus()->setAlt(focus()->alt().Degrees() + step * MINZOOM / Options::zoomFactor());
if (focus()->alt().Degrees() > 90.0)
focus()->setAlt(90.0);
focus()->HorizontalToEquatorial(data->lst(), data->geo()->lat());
}
else
{
focus()->setDec(focus()->dec().Degrees() + step * MINZOOM / Options::zoomFactor());
if (focus()->dec().Degrees() > 90.0)
focus()->setDec(90.0);
focus()->EquatorialToHorizontal(data->lst(), data->geo()->lat());
}
arrowKeyPressed = true;
slewing = true;
break;
case Qt::Key_Down:
if (Options::useAltAz())
{
focus()->setAlt(focus()->alt().Degrees() - step * MINZOOM / Options::zoomFactor());
if (focus()->alt().Degrees() < -90.0)
focus()->setAlt(-90.0);
focus()->HorizontalToEquatorial(data->lst(), data->geo()->lat());
}
else
{
focus()->setDec(focus()->dec().Degrees() - step * MINZOOM / Options::zoomFactor());
if (focus()->dec().Degrees() < -90.0)
focus()->setDec(-90.0);
focus()->EquatorialToHorizontal(data->lst(), data->geo()->lat());
}
arrowKeyPressed = true;
slewing = true;
break;
case Qt::Key_Plus: //Zoom in
case Qt::Key_Equal:
zoomInOrMagStep(e->modifiers());
break;
case Qt::Key_Minus: //Zoom out
case Qt::Key_Underscore:
zoomOutOrMagStep(e->modifiers());
break;
case Qt::Key_0: //center on Sun
setClickedObject(data->skyComposite()->planet(KSPlanetBase::SUN));
setClickedPoint(clickedObject());
slotCenter();
break;
case Qt::Key_1: //center on Mercury
setClickedObject(data->skyComposite()->planet(KSPlanetBase::MERCURY));
setClickedPoint(clickedObject());
slotCenter();
break;
case Qt::Key_2: //center on Venus
setClickedObject(data->skyComposite()->planet(KSPlanetBase::VENUS));
setClickedPoint(clickedObject());
slotCenter();
break;
case Qt::Key_3: //center on Moon
setClickedObject(data->skyComposite()->planet(KSPlanetBase::MOON));
setClickedPoint(clickedObject());
slotCenter();
break;
case Qt::Key_4: //center on Mars
setClickedObject(data->skyComposite()->planet(KSPlanetBase::MARS));
setClickedPoint(clickedObject());
slotCenter();
break;
case Qt::Key_5: //center on Jupiter
setClickedObject(data->skyComposite()->planet(KSPlanetBase::JUPITER));
setClickedPoint(clickedObject());
slotCenter();
break;
case Qt::Key_6: //center on Saturn
setClickedObject(data->skyComposite()->planet(KSPlanetBase::SATURN));
setClickedPoint(clickedObject());
slotCenter();
break;
case Qt::Key_7: //center on Uranus
setClickedObject(data->skyComposite()->planet(KSPlanetBase::URANUS));
setClickedPoint(clickedObject());
slotCenter();
break;
case Qt::Key_8: //center on Neptune
setClickedObject(data->skyComposite()->planet(KSPlanetBase::NEPTUNE));
setClickedPoint(clickedObject());
slotCenter();
break;
/*case Qt::Key_9: //center on Pluto
setClickedObject( data->skyComposite()->planet( KSPlanetBase::PLUTO ) );
setClickedPoint( clickedObject() );
slotCenter();
break;*/
case Qt::Key_BracketLeft: // Begin measuring angular distance
if (!rulerMode)
slotBeginAngularDistance();
break;
case Qt::Key_Escape: // Cancel angular distance measurement
{
if (rulerMode)
slotCancelRulerMode();
if (m_fovCaptureMode)
slotFinishFovCaptureMode();
break;
}
case Qt::Key_C: //Center clicked object
if (clickedObject())
slotCenter();
break;
case Qt::Key_D: //Details window for Clicked/Centered object
{
SkyObject *orig = nullptr;
if (shiftPressed)
{
orig = clickedObject();
setClickedObject(focusObject());
}
if (clickedObject())
{
slotDetail();
}
if (orig)
{
setClickedObject(orig);
}
break;
}
case Qt::Key_P: //Show Popup menu for Clicked/Centered object
if (shiftPressed)
{
if (focusObject())
focusObject()->showPopupMenu(pmenu, QCursor::pos());
}
else
{
if (clickedObject())
clickedObject()->showPopupMenu(pmenu, QCursor::pos());
}
break;
case Qt::Key_O: //Add object to Observing List
{
SkyObject *orig = nullptr;
if (shiftPressed)
{
orig = clickedObject();
setClickedObject(focusObject());
}
if (clickedObject())
{
data->observingList()->slotAddObject();
}
if (orig)
{
setClickedObject(orig);
}
break;
}
case Qt::Key_L: //Toggle User label on Clicked/Centered object
{
SkyObject *orig = nullptr;
if (shiftPressed)
{
orig = clickedObject();
setClickedObject(focusObject());
}
if (clickedObject())
{
if (isObjectLabeled(clickedObject()))
slotRemoveObjectLabel();
else
slotAddObjectLabel();
}
if (orig)
{
setClickedObject(orig);
}
break;
}
case Qt::Key_T: //Toggle planet trail on Clicked/Centered object (if solsys)
{
SkyObject *orig = nullptr;
if (shiftPressed)
{
orig = clickedObject();
setClickedObject(focusObject());
}
KSPlanetBase *planet = dynamic_cast(clickedObject());
if (planet)
{
if (planet->hasTrail())
slotRemovePlanetTrail();
else
slotAddPlanetTrail();
}
if (orig)
{
setClickedObject(orig);
}
break;
}
case Qt::Key_R:
{
// Toggle relativistic corrections
Options::setUseRelativistic(!Options::useRelativistic());
qDebug() << "Relativistic corrections: " << Options::useRelativistic();
forceUpdate();
break;
}
case Qt::Key_A:
Options::setUseAntialias(!Options::useAntialias());
qDebug() << "Use Antialiasing: " << Options::useAntialias();
forceUpdate();
break;
case Qt::Key_K:
{
if (m_fovCaptureMode)
slotCaptureFov();
break;
}
case Qt::Key_PageUp:
{
KStars::Instance()->selectPreviousFov();
break;
}
case Qt::Key_PageDown:
{
KStars::Instance()->selectNextFov();
break;
}
default:
// We don't want to do anything in this case. Key is unknown
return;
}
if (arrowKeyPressed)
{
stopTracking();
setDestination(*focus());
}
forceUpdate(); //need a total update, or slewing with the arrow keys doesn't work.
}
void SkyMap::stopTracking()
{
KStars *kstars = KStars::Instance();
emit positionChanged(focus());
if (kstars && Options::isTracking())
kstars->slotTrack();
}
bool SkyMap::event(QEvent *event)
{
#if !defined(KSTARS_LITE)
if (event->type() == QEvent::TouchBegin)
{
m_touchMode = true;
m_pinchScale = -1;
}
if (event->type() == QEvent::Gesture && m_touchMode)
{
QGestureEvent* gestureEvent = static_cast(event);
if (QPinchGesture *pinch = static_cast(gestureEvent->gesture(Qt::PinchGesture)))
{
QPinchGesture::ChangeFlags changeFlags = pinch->changeFlags();
m_pinchMode = true;
if (changeFlags & QPinchGesture::ScaleFactorChanged)
{
if (m_pinchScale == -1)
{
m_pinchScale = pinch->totalScaleFactor();
return true;
}
- if (pinch->totalScaleFactor()-m_pinchScale > 0.1)
+ if (pinch->totalScaleFactor() - m_pinchScale > 0.1)
{
m_pinchScale = pinch->totalScaleFactor();
zoomInOrMagStep(0);
return true;
}
- if (pinch->totalScaleFactor()-m_pinchScale < -0.1)
+ if (pinch->totalScaleFactor() - m_pinchScale < -0.1)
{
m_pinchScale = pinch->totalScaleFactor();
zoomOutOrMagStep(0);
return true;
}
}
}
if (QTapAndHoldGesture *tapAndHold = static_cast(gestureEvent->gesture(Qt::TapAndHoldGesture)))
{
m_tapAndHoldMode = true;
if (tapAndHold->state() == Qt::GestureFinished)
{
if (clickedObject())
{
clickedObject()->showPopupMenu(pmenu, tapAndHold->position().toPoint());
}
else
{
pmenu->createEmptyMenu(clickedPoint());
pmenu->popup(tapAndHold->position().toPoint());
}
m_touchMode = false;
m_pinchMode = false;
m_tapAndHoldMode = false;
}
}
return true;
}
#endif
return QGraphicsView::event(event);
}
void SkyMap::keyReleaseEvent(QKeyEvent *e)
{
switch (e->key())
{
case Qt::Key_Plus: //Zoom in
case Qt::Key_Equal:
case Qt::Key_Minus: //Zoom out
case Qt::Key_Underscore:
case Qt::Key_Left: //no break; continue to Qt::Key_Down
case Qt::Key_Right: //no break; continue to Qt::Key_Down
case Qt::Key_Up: //no break; continue to Qt::Key_Down
case Qt::Key_Down:
slewing = false;
if (Options::useAltAz())
setDestinationAltAz(focus()->alt(), focus()->az());
else
setDestination(*focus());
showFocusCoords();
forceUpdate(); // Need a full update to draw faint objects that are not drawn while slewing.
break;
}
}
void SkyMap::mouseMoveEvent(QMouseEvent *e)
{
#if !defined(KSTARS_LITE)
// Skip touch points
if (m_pinchMode || m_tapAndHoldMode || (m_touchMode && e->globalX() == 0 && e->globalY() == 0))
return;
#endif
if (Options::useHoverLabel())
{
//Start a single-shot timer to monitor whether we are currently hovering.
//The idea is that whenever a moveEvent occurs, the timer is reset. It
//will only timeout if there are no move events for HOVER_INTERVAL ms
m_HoverTimer.start(HOVER_INTERVAL);
QToolTip::hideText();
}
//Are we defining a ZoomRect?
if (ZoomRect.center().x() > 0 && ZoomRect.center().y() > 0)
{
//cancel operation if the user let go of CTRL
if (!(e->modifiers() & Qt::ControlModifier))
{
ZoomRect = QRect(); //invalidate ZoomRect
update();
}
else
{
//Resize the rectangle so that it passes through the cursor position
QPoint pcenter = ZoomRect.center();
int dx = abs(e->x() - pcenter.x());
int dy = abs(e->y() - pcenter.y());
if (dx == 0 || float(dy) / float(dx) > float(height()) / float(width()))
{
//Size rect by height
ZoomRect.setHeight(2 * dy);
ZoomRect.setWidth(2 * dy * width() / height());
}
else
{
//Size rect by height
ZoomRect.setWidth(2 * dx);
ZoomRect.setHeight(2 * dx * height() / width());
}
ZoomRect.moveCenter(pcenter); //reset center
update();
return;
}
}
if (projector()->unusablePoint(e->pos()))
return; // break if point is unusable
//determine RA, Dec of mouse pointer
m_MousePoint = projector()->fromScreen(e->pos(), data->lst(), data->geo()->lat());
double dyPix = 0.5 * height() - e->y();
if (midMouseButtonDown) //zoom according to y-offset
{
float yoff = dyPix - y0;
if (yoff > 10)
{
y0 = dyPix;
slotZoomIn();
}
if (yoff < -10)
{
y0 = dyPix;
slotZoomOut();
}
}
if (mouseButtonDown)
{
// set the mouseMoveCursor and set slewing=true, if they are not set yet
if (!mouseMoveCursor)
setMouseMoveCursor();
if (!slewing)
{
slewing = true;
stopTracking(); //toggle tracking off
}
//Update focus such that the sky coords at mouse cursor remain approximately constant
if (Options::useAltAz())
{
m_MousePoint.EquatorialToHorizontal(data->lst(), data->geo()->lat());
clickedPoint()->EquatorialToHorizontal(data->lst(), data->geo()->lat());
dms dAz = m_MousePoint.az() - clickedPoint()->az();
dms dAlt = m_MousePoint.alt() - clickedPoint()->alt();
focus()->setAz(focus()->az().Degrees() - dAz.Degrees()); //move focus in opposite direction
focus()->setAz(focus()->az().reduce());
focus()->setAlt(KSUtils::clamp(focus()->alt().Degrees() - dAlt.Degrees(), -90.0, 90.0));
focus()->HorizontalToEquatorial(data->lst(), data->geo()->lat());
}
else
{
dms dRA = m_MousePoint.ra() - clickedPoint()->ra();
dms dDec = m_MousePoint.dec() - clickedPoint()->dec();
focus()->setRA(focus()->ra().Hours() - dRA.Hours()); //move focus in opposite direction
focus()->setRA(focus()->ra().reduce());
focus()->setDec(KSUtils::clamp(focus()->dec().Degrees() - dDec.Degrees(), -90.0, 90.0));
focus()->EquatorialToHorizontal(data->lst(), data->geo()->lat());
}
showFocusCoords();
//redetermine RA, Dec of mouse pointer, using new focus
m_MousePoint = projector()->fromScreen(e->pos(), data->lst(), data->geo()->lat());
setClickedPoint(&m_MousePoint);
forceUpdate(); // must be new computed
}
else //mouse button not down
{
if (Options::useAltAz())
m_MousePoint.EquatorialToHorizontal(data->lst(), data->geo()->lat());
emit mousePointChanged(&m_MousePoint);
}
}
void SkyMap::wheelEvent(QWheelEvent *e)
{
if (e->delta() > 0)
zoomInOrMagStep(e->modifiers());
else if (e->delta() < 0)
zoomOutOrMagStep(e->modifiers());
}
-void SkyMap::mouseReleaseEvent(QMouseEvent *)
+void SkyMap::mouseReleaseEvent(QMouseEvent *e)
{
#if !defined(KSTARS_LITE)
if (m_touchMode)
{
m_touchMode = false;
m_pinchMode = false;
m_tapAndHoldMode = false;
}
#endif
if (ZoomRect.isValid())
{
stopTracking();
SkyPoint newcenter = projector()->fromScreen(ZoomRect.center(), data->lst(), data->geo()->lat());
setFocus(&newcenter);
setDestination(newcenter);
//Zoom in on center of Zoom Circle, by a factor equal to the ratio
//of the sky pixmap's width to the Zoom Circle's diameter
float factor = float(width()) / float(ZoomRect.width());
setZoomFactor(Options::zoomFactor() * factor);
}
setDefaultMouseCursor();
ZoomRect = QRect(); //invalidate ZoomRect
if (m_previewLegend)
{
slotCancelLegendPreviewMode();
}
//false if double-clicked, because it's unset there.
if (mouseButtonDown)
{
mouseButtonDown = false;
if (slewing)
{
slewing = false;
if (Options::useAltAz())
setDestinationAltAz(focus()->alt(), focus()->az());
else
setDestination(*focus());
}
+ else if (Options::leftClickSelectsObject())
+ mouseDoubleClickEvent(e);
forceUpdate(); // is needed because after moving the sky not all stars are shown
}
// if middle button was pressed unset here
midMouseButtonDown = false;
}
void SkyMap::mousePressEvent(QMouseEvent *e)
{
KStars *kstars = KStars::Instance();
if ((e->modifiers() & Qt::ControlModifier) && (e->button() == Qt::LeftButton))
{
ZoomRect.moveCenter(e->pos());
setZoomMouseCursor();
update(); //refresh without redrawing skymap
return;
}
// if button is down and cursor is not moved set the move cursor after 500 ms
QTimer::singleShot(500, this, SLOT(setMouseMoveCursor()));
// break if point is unusable
if (projector()->unusablePoint(e->pos()))
return;
if (!midMouseButtonDown && e->button() == Qt::MidButton)
{
y0 = 0.5 * height() - e->y(); //record y pixel coordinate for middle-button zooming
midMouseButtonDown = true;
}
if (!mouseButtonDown)
{
if (e->button() == Qt::LeftButton)
{
mouseButtonDown = true;
}
//determine RA, Dec of mouse pointer
m_MousePoint = projector()->fromScreen(e->pos(), data->lst(), data->geo()->lat());
setClickedPoint(&m_MousePoint);
//Find object nearest to clickedPoint()
double maxrad = 1000.0 / Options::zoomFactor();
SkyObject *obj = data->skyComposite()->objectNearest(clickedPoint(), maxrad);
setClickedObject(obj);
if (obj)
setClickedPoint(obj);
switch (e->button())
{
case Qt::LeftButton:
{
QString name;
if (clickedObject())
{
name = clickedObject()->translatedLongName();
emit objectClicked(clickedObject());
}
else
name = i18n("Empty sky");
//kstars->statusBar()->changeItem(name, 0 );
kstars->statusBar()->showMessage(name, 0);
emit positionClicked(&m_MousePoint);
}
break;
case Qt::RightButton:
if (rulerMode)
{
// Compute angular distance.
slotEndRulerMode();
}
else
{
// Show popup menu
if (clickedObject())
{
clickedObject()->showPopupMenu(pmenu, QCursor::pos());
}
else
{
pmenu->createEmptyMenu(clickedPoint());
pmenu->popup(QCursor::pos());
}
}
break;
- default:;
+ default:
+ ;
}
}
}
void SkyMap::mouseDoubleClickEvent(QMouseEvent *e)
{
if (e->button() == Qt::LeftButton && !projector()->unusablePoint(e->pos()))
{
mouseButtonDown = false;
if (e->x() != width() / 2 || e->y() != height() / 2)
slotCenter();
}
}
double SkyMap::zoomFactor(const int modifier)
{
double factor = (modifier & Qt::ControlModifier) ? DZOOM : (Options::zoomScrollFactor() + 1);
if (modifier & Qt::ShiftModifier)
factor = sqrt(factor);
return factor;
}
void SkyMap::zoomInOrMagStep(const int modifier)
{
if (modifier & Qt::AltModifier)
incMagLimit(modifier);
else
setZoomFactor(Options::zoomFactor() * zoomFactor(modifier));
}
void SkyMap::zoomOutOrMagStep(const int modifier)
{
if (modifier & Qt::AltModifier)
decMagLimit(modifier);
else
setZoomFactor(Options::zoomFactor() / zoomFactor(modifier));
}
double SkyMap::magFactor(const int modifier)
{
double factor = (modifier & Qt::ControlModifier) ? 0.1 : 0.5;
if (modifier & Qt::ShiftModifier)
factor *= 2.0;
return factor;
}
void SkyMap::incMagLimit(const int modifier)
{
double limit = 2.222 * log10(static_cast(Options::starDensity())) + 0.35;
limit += magFactor(modifier);
if (limit > 5.75954)
limit = 5.75954;
Options::setStarDensity(pow(10, (limit - 0.35) / 2.222));
//printf("maglim set to %3.1f\n", limit);
forceUpdate();
}
void SkyMap::decMagLimit(const int modifier)
{
double limit = 2.222 * log10(static_cast(Options::starDensity())) + 0.35;
limit -= magFactor(modifier);
if (limit < 1.18778)
limit = 1.18778;
Options::setStarDensity(pow(10, (limit - 0.35) / 2.222));
//printf("maglim set to %3.1f\n", limit);
forceUpdate();
}