[Kstars-devel] [kstars/altvstime] kstars/tools: Rise/Set/Transit markers are ready
Raphael Cojocaru
raphael.cojocaru at yahoo.com
Thu Feb 18 17:33:54 UTC 2016
Git commit 9cb97bf0cde013c317b7e34b3f61c5b5d195e478 by Raphael Cojocaru.
Committed on 18/02/2016 at 16:40.
Pushed by raphaelc into branch 'altvstime'.
Rise/Set/Transit markers are ready
Now, the user can mark the Rise/Set/Transit points on the curve with just a click on specific button.
I have chosen to mark the points with solid colored circles: Red for Rise, Blue for Set and Green for Transit.
CCMAIL: kstars-devel at kde.org
M +162 -6 kstars/tools/altvstime.cpp
M +12 -0 kstars/tools/altvstime.h
M +60 -8 kstars/tools/altvstime.ui
http://commits.kde.org/kstars/9cb97bf0cde013c317b7e34b3f61c5b5d195e478
diff --git a/kstars/tools/altvstime.cpp b/kstars/tools/altvstime.cpp
index 396707d..2563347 100644
--- a/kstars/tools/altvstime.cpp
+++ b/kstars/tools/altvstime.cpp
@@ -123,6 +123,10 @@ AltVsTime::AltVsTime( QWidget* parent) :
// set up the initial minimum and maximum altitude
minAlt = 0;
maxAlt = 0;
+ // set up the markers booleans for Rise/Set/Transit
+ markedRiseTime = false;
+ markedSetTime = false;
+ markedTransitTime = false;
showCurrentDate();
if ( getDate().time().hour() > 12 )
DayOffset = 1;
@@ -151,6 +155,9 @@ AltVsTime::AltVsTime( QWidget* parent) :
connect( avtUI->latBox, SIGNAL( returnPressed() ), this, SLOT( slotAdvanceFocus() ) );
connect( avtUI->PlotList, SIGNAL( currentRowChanged(int) ), this, SLOT( slotHighlight(int) ) );
connect( avtUI->computeButton, SIGNAL( clicked() ), this, SLOT( slotComputeAltitudeByTime() ) );
+ connect( avtUI->riseButton, SIGNAL( clicked() ), this, SLOT( slotMarkRiseTime() ) );
+ connect( avtUI->setButton, SIGNAL( clicked() ), this, SLOT( slotMarkSetTime() ) );
+ connect( avtUI->transitButton, SIGNAL( clicked() ), this, SLOT( slotMarkTransitTime() ) );
setMouseTracking( true );
}
@@ -246,6 +253,7 @@ void AltVsTime::slotBrowseObject() {
delete fd;
avtUI->View->update();
+ avtUI->View->replot();
}
void AltVsTime::processObject( SkyObject *o, bool forceAdd ) {
@@ -344,13 +352,13 @@ double AltVsTime::findAltitude( SkyPoint *p, double hour ) {
void AltVsTime::slotHighlight( int row ) {
//highlight the curve of the selected object
for ( int i=0; i<avtUI->View->graphCount(); i++ ) {
- if ( i == row ){
+ if ( i == row )
avtUI->View->graph(i)->setPen(QPen( Qt::black, 2 ));
- } else{
+ else
avtUI->View->graph(i)->setPen(QPen( Qt::red, 1 ));
- }
}
avtUI->View->update();
+ avtUI->View->replot();
if( row >= 0 && row < pList.size() ) {
SkyObject *p = pList.at(row);
@@ -488,6 +496,7 @@ void AltVsTime::slotClear() {
avtUI->epochName->clear();
// remove all graphs from the plot:
avtUI->View->clearGraphs();
+ avtUI->View->clearItems();
avtUI->View->update();
avtUI->View->replot();
}
@@ -544,6 +553,150 @@ void AltVsTime::slotComputeAltitudeByTime(){
}
}
+void AltVsTime::slotMarkRiseTime(){
+ const KStarsDateTime &ut = KStarsData::Instance()->ut();
+ SkyObject *selectedObject = KStarsData::Instance()->objectNamed(avtUI->nameBox->text());
+ QCPItemTracer *riseTimeTracer;
+ // check if at least one graph exists in the plot
+ if( avtUI->View->graphCount() > 0 ){
+ double time = 0;
+ double hours, minutes;
+
+ QCPGraph *selectedGraph;
+ // get the graph's name from the name box
+ QString graphName = avtUI->nameBox->text();
+ // find the graph index
+ int graphIndex = 0;
+ for( int i=0;i<avtUI->View->graphCount();i++ )
+ if( avtUI->View->graph(i)->name().compare(graphName) == 0 ){
+ graphIndex = i;
+ break;
+ }
+ selectedGraph = avtUI->View->graph(graphIndex);
+
+ QTime rt = selectedObject->riseSetTime( ut, geo, true ); //true = use rise time
+ // mark the Rise time with a red circle
+ if ( rt.isValid() && selectedGraph ) {
+ hours = rt.hour();
+ minutes = rt.minute();
+ if( hours < 14 )
+ hours += 24;
+ hours -= 2;
+ time = hours * 3600 + minutes * 60;
+ riseTimeTracer = new QCPItemTracer(avtUI->View);
+ avtUI->View->addItem(riseTimeTracer);
+ riseTimeTracer->setGraph(selectedGraph);
+ riseTimeTracer->setInterpolating(true);
+ riseTimeTracer->setStyle(QCPItemTracer::tsCircle);
+ riseTimeTracer->setPen(QPen(Qt::red));
+ riseTimeTracer->setBrush(Qt::red);
+ riseTimeTracer->setSize(10);
+ riseTimeTracer->setGraphKey(time);
+ riseTimeTracer->setVisible(true);
+ avtUI->View->update();
+ avtUI->View->replot();
+ }
+ }
+}
+
+void AltVsTime::slotMarkSetTime(){
+ const KStarsDateTime &ut = KStarsData::Instance()->ut();
+ SkyObject *selectedObject = KStarsData::Instance()->objectNamed(avtUI->nameBox->text());
+ QCPItemTracer *setTimeTracer;
+ // check if at least one graph exists in the plot
+ if( avtUI->View->graphCount() > 0 ){
+ double time = 0;
+ double hours, minutes;
+
+ QCPGraph *selectedGraph;
+ // get the graph's name from the name box
+ QString graphName = avtUI->nameBox->text();
+ // find the graph index
+ int graphIndex = 0;
+ for( int i=0;i<avtUI->View->graphCount();i++ )
+ if( avtUI->View->graph(i)->name().compare(graphName) == 0 ){
+ graphIndex = i;
+ break;
+ }
+ selectedGraph = avtUI->View->graph(graphIndex);
+
+ QTime rt = selectedObject->riseSetTime( ut, geo, true ); //true = use rise time
+ //If set time is before rise time, use set time for tomorrow
+ QTime st = selectedObject->riseSetTime( ut, geo, false ); //false = use set time
+ if ( st < rt )
+ st = selectedObject->riseSetTime( ut.addDays( 1 ), geo, false ); //false = use set time
+ // mark the Set time with a blue circle
+ if ( rt.isValid() ) {
+ hours = st.hour();
+ minutes = st.minute();
+ if( hours < 14 )
+ hours += 24;
+ hours -= 2;
+ time = hours * 3600 + minutes * 60;
+ setTimeTracer = new QCPItemTracer(avtUI->View);
+ avtUI->View->addItem(setTimeTracer);
+ setTimeTracer->setGraph(selectedGraph);
+ setTimeTracer->setInterpolating(true);
+ setTimeTracer->setStyle(QCPItemTracer::tsCircle);
+ setTimeTracer->setPen(QPen(Qt::blue));
+ setTimeTracer->setBrush(Qt::blue);
+ setTimeTracer->setSize(10);
+ setTimeTracer->setGraphKey(time);
+ setTimeTracer->setVisible(true);
+ avtUI->View->update();
+ avtUI->View->replot();
+ }
+ }
+}
+
+void AltVsTime::slotMarkTransitTime(){
+ const KStarsDateTime &ut = KStarsData::Instance()->ut();
+ SkyObject *selectedObject = KStarsData::Instance()->objectNamed(avtUI->nameBox->text());
+ QCPItemTracer *transitTimeTracer;
+ // check if at least one graph exists in the plot
+ if( avtUI->View->graphCount() > 0 ){
+ double time = 0;
+ double hours, minutes;
+
+ QCPGraph *selectedGraph;
+ // get the graph's name from the name box
+ QString graphName = avtUI->nameBox->text();
+ // find the graph index
+ int graphIndex = 0;
+ for( int i=0;i<avtUI->View->graphCount();i++ )
+ if( avtUI->View->graph(i)->name().compare(graphName) == 0 ){
+ graphIndex = i;
+ break;
+ }
+ selectedGraph = avtUI->View->graph(graphIndex);
+
+ QTime rt = selectedObject->riseSetTime( ut, geo, true ); //true = use rise time
+ //If transit time is before rise time, use transit time for tomorrow
+ QTime tt = selectedObject->transitTime( ut, geo );
+ if ( tt < rt )
+ tt = selectedObject->transitTime( ut.addDays( 1 ), geo );
+ // mark the Transit time with a green circle
+ hours = tt.hour();
+ minutes = tt.minute();
+ if( hours < 14 )
+ hours += 24;
+ hours -= 2;
+ time = hours * 3600 + minutes * 60;
+ transitTimeTracer = new QCPItemTracer(avtUI->View);
+ avtUI->View->addItem(transitTimeTracer);
+ transitTimeTracer->setGraph(selectedGraph);
+ transitTimeTracer->setInterpolating(true);
+ transitTimeTracer->setStyle(QCPItemTracer::tsCircle);
+ transitTimeTracer->setPen(QPen(Qt::green));
+ transitTimeTracer->setBrush(Qt::green);
+ transitTimeTracer->setSize(10);
+ transitTimeTracer->setGraphKey(time);
+ transitTimeTracer->setVisible(true);
+ avtUI->View->update();
+ avtUI->View->replot();
+ }
+}
+
void AltVsTime::computeSunRiseSetTimes() {
//Determine the time of sunset and sunrise for the desired date and location
//expressed as doubles, the fraction of a full day.
@@ -553,9 +706,12 @@ void AltVsTime::computeSunRiseSetTimes() {
ksal.setLocation(geo);
double sunRise = ksal.getSunRise();
double sunSet = ksal.getSunSet();
- // TODO
- // QCustomPlot can not support "setSunRiseSetTimes" method
- // avtUI->View->setSunRiseSetTimes( sunRise, sunSet );
+ this->setSunRiseSetTimes( sunRise, sunSet );
+}
+
+void AltVsTime::setSunRiseSetTimes(double sunRise, double sunSet){
+ this->sunRise = sunRise;
+ this->sunSet = sunSet;
}
void AltVsTime::slotUpdateDateLoc() {
diff --git a/kstars/tools/altvstime.h b/kstars/tools/altvstime.h
index b2a3364..551ab12 100644
--- a/kstars/tools/altvstime.h
+++ b/kstars/tools/altvstime.h
@@ -110,6 +110,7 @@ public:
*/
QString getObjectName(const SkyObject *o, bool translated=true);
+ void setSunRiseSetTimes( double sunRise, double sunSet );
public slots:
/** @short Update the plot to reflec new Date and Location settings. */
void slotUpdateDateLoc();
@@ -129,6 +130,15 @@ public slots:
/** @short Compute the altitude for a certain time. */
void slotComputeAltitudeByTime();
+ /** @short Mark the rise time on the curve. */
+ void slotMarkRiseTime();
+
+ /** @short Mark the set time on the curve. */
+ void slotMarkSetTime();
+
+ /** @short Mark the transit time on the curve. */
+ void slotMarkTransitTime();
+
/** @short Clear the edit boxes for specifying a new object. */
void slotClearBoxes();
@@ -174,6 +184,8 @@ private:
int DayOffset;
int minAlt;
int maxAlt;
+ bool markedRiseTime, markedSetTime, markedTransitTime;
+ double sunRise, sunSet;
};
#endif // ALTVSTIME_H_
diff --git a/kstars/tools/altvstime.ui b/kstars/tools/altvstime.ui
index 1a91b01..3d2863c 100644
--- a/kstars/tools/altvstime.ui
+++ b/kstars/tools/altvstime.ui
@@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
- <width>452</width>
- <height>529</height>
+ <width>508</width>
+ <height>564</height>
</rect>
</property>
<property name="windowTitle">
@@ -28,11 +28,6 @@
<height>325</height>
</size>
</property>
- <zorder>tabWidget2</zorder>
- <zorder>tabWidget2</zorder>
- <zorder>tabWidget2</zorder>
- <zorder>tabWidget2</zorder>
- <zorder>tabWidget2</zorder>
</widget>
</item>
<item alignment="Qt::AlignTop">
@@ -330,7 +325,64 @@
</size>
</property>
<property name="text">
- <string> </string>
+ <string/>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_2">
+ <item>
+ <widget class="QPushButton" name="riseButton">
+ <property name="text">
+ <string>Rise</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_3">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::Fixed</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QPushButton" name="setButton">
+ <property name="text">
+ <string>Set</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_4">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::Fixed</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QPushButton" name="transitButton">
+ <property name="text">
+ <string>Transit</string>
</property>
</widget>
</item>
More information about the Kstars-devel
mailing list