summaryrefslogtreecommitdiffstats
path: root/kstars/kstars/dmsbox.h
diff options
context:
space:
mode:
Diffstat (limited to 'kstars/kstars/dmsbox.h')
-rw-r--r--kstars/kstars/dmsbox.h147
1 files changed, 147 insertions, 0 deletions
diff --git a/kstars/kstars/dmsbox.h b/kstars/kstars/dmsbox.h
new file mode 100644
index 00000000..2e66042b
--- /dev/null
+++ b/kstars/kstars/dmsbox.h
@@ -0,0 +1,147 @@
+/***************************************************************************
+ dmsbox.h - description
+ -------------------
+ begin : Wed Dec 19 2002
+ copyright : (C) 2001-2002 by Pablo de Vicente
+ email : vicente@oan.es
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef DMSBOX_H
+#define DMSBOX_H
+
+#include <klineedit.h>
+
+#include "dms.h"
+
+/**@class dmsBox
+ *A KLineEdit which is capable of displaying and parsing angle values
+ *flexibly and robustly. Angle values can be displayed and parsed as
+ *Degrees or Hours. When displaying a value, it uses a space-delimited
+ *triplet of integers representing the degrees, arcminutes, and arcseconds
+ *of the angle (or hours, minutes, seconds). For example, "-34 45 57".
+ *When parsing a value input by the user, it can also understand
+ *a number of other formats:
+ *@li colon-delimited fields ("-34:45:57")
+ *@li one or two fields ("-35"; "-34 46")
+ *@li fields with unit-labels ("-34d 45m 57s")
+ *@li floating-point numbers ("-34.76583")
+ *
+ *@note Inherits KLineEdit.
+ *@author Pablo de Vicente
+ *@version 1.0
+ */
+
+class dmsBox : public KLineEdit {
+Q_OBJECT
+Q_PROPERTY (bool degType READ degType WRITE setDegType)
+
+public:
+ /**Constructor for the dmsBox object.
+ *@param parent pointer to the parent QWidget
+ *@param ni the name of the object
+ *@param deg if TRUE use deg/arcmin/arcsec; otherwise
+ * use hours/min/sec.
+ */
+ dmsBox(QWidget *parent, const char *ni=0, bool deg=TRUE);
+
+ /**Destructor (empty)*/
+ ~dmsBox();
+
+ /**Display an angle using Hours/Min/Sec.
+ *@p t the dms object which is to be displayed
+ */
+ void showInHours(dms t);
+ /**Display an angle using Hours/Min/Sec. This behaves just
+ *like the above function. It differs only in the data type of
+ *the argument.
+ *@p t pointer to the dms object which is to be displayed
+ */
+ void showInHours(const dms *t);
+
+ /**Display an angle using Deg/Arcmin/Arcsec.
+ *@p t the dms object which is to be displayed
+ */
+ void showInDegrees(dms t);
+ /**Display an angle using Deg/Arcmin/Arcsec. This behaves just
+ *like the above function. It differs only in the data type of
+ *the argument.
+ *@p t pointer to the dms object which is to be displayed
+ */
+ void showInDegrees(const dms *t);
+
+ /**Display an angle. Simply calls showInDegrees(t) or
+ *showInHours(t) depending on the value of deg.
+ *@param t the dms object which is to be displayed.
+ *@param deg if TRUE, display Deg/Arcmin/Arcsec; otherwise
+ *display Hours/Min/Sec.
+ */
+ void show(dms t, bool deg=TRUE);
+ /**Display an angle. Simply calls showInDegrees(t) or
+ *showInHours(t) depending on the value of deg.
+ *This behaves essentially like the above function. It
+ *differs only in the data type of its argument.
+ *@param t the dms object which is to be displayed.
+ *@param deg if TRUE, display Deg/Arcmin/Arcsec; otherwise
+ *display Hours/Min/Sec.
+ */
+ void show(const dms *t,bool deg=TRUE);
+
+ /**Simply display a string.
+ *@note JH: Why don't we just use KLineEdit::setText() instead?
+ *@param s the string to display (it need not be a valid angle value).
+ */
+ void setDMS(QString s) { setText(s); }
+
+ /**Parse the text in the dmsBox as an angle. The text may be an integer
+ *or double value, or it may be a triplet of integer values (separated by spaces
+ *or colons) representing deg/hrs, min, sec. It is also possible to have two
+ *fields. In this case, if the second field is a double, it is converted
+ *to decimal min and double sec.
+ *@param deg if TRUE use deg/arcmin/arcsec; otherwise
+ * use hours/min/sec.
+ *@param ok set to true if a dms object was succedssfully created.
+ *@return a dms object constructed from the fields of the dmsbox
+ */
+ dms createDms(bool deg=TRUE, bool *ok=0);
+
+ /**@return a boolean indicating if object contains degrees or hours
+ */
+ bool degType(void) const {return deg;}
+
+ /**@short set the dmsBox to Degrees or Hours
+ *@param t if true, the box expects angle values in degrees; otherwise
+ *it expects values in hours
+ */
+ void setDegType( bool t );
+
+ /**Clears the KLineEdit
+ */
+ void clearFields (void) { setDMS(""); }
+
+protected:
+ void focusInEvent( QFocusEvent *e );
+ void focusOutEvent( QFocusEvent *e );
+
+private slots:
+ void slotTextChanged( const QString &t );
+
+private:
+ void setEmptyText();
+
+ int degree, minute, hour;
+ double second;
+ int second_int, msecond;
+ bool deg, EmptyFlag;
+ dms degValue;
+};
+
+#endif