static void UpdateValuesTimes(void) { WndProperty *wp; TCHAR Temp[1000]; double sunsettime; int sunsethours; int sunsetmins; sunsettime = DoSunEphemeris(GPS_INFO.Longitude, GPS_INFO.Latitude); sunsethours = (int)sunsettime; sunsetmins = (int)((sunsettime-sunsethours)*60); wp = (WndProperty*)wf->FindByName(TEXT("prpSunset")); if (wp) { _stprintf(Temp, TEXT("%02d:%02d"), sunsethours,sunsetmins); wp->SetText(Temp); } wp = (WndProperty*)wf->FindByName(TEXT("prpLocalTime")); if (wp) { Units::TimeToText(Temp, (int)DetectCurrentTime()); wp->SetText(Temp); } wp = (WndProperty*)wf->FindByName(TEXT("prpTakeoffTime")); if (wp) { if (CALCULATED_INFO.FlightTime>0) { Units::TimeToText(Temp, (int)TimeLocal((long)CALCULATED_INFO.TakeOffTime)); wp->SetText(Temp); } else { wp->SetText(TEXT("")); } } wp = (WndProperty*)wf->FindByName(TEXT("prpLandingTime")); if (wp) { if (!CALCULATED_INFO.Flying) { Units::TimeToText(Temp, (int)TimeLocal((long)(CALCULATED_INFO.TakeOffTime +CALCULATED_INFO.FlightTime))); wp->SetText(Temp); } else { wp->SetText(TEXT("")); } } wp = (WndProperty*)wf->FindByName(TEXT("prpFlightTime")); if (wp) { if (CALCULATED_INFO.FlightTime > 0){ Units::TimeToText(Temp, (int)CALCULATED_INFO.FlightTime); wp->SetText(Temp); } else { wp->SetText(TEXT("")); } } }
bool CheckCondition(NMEA_INFO *Basic, DERIVED_INFO *Calculated) { if (!ValidTaskPoint(ActiveWayPoint) || !Calculated->Flying) { return false; } // THIS IS BUGGY IN NORTHERN EMISPHERE, TODO DISCOVER WHY double sunsettime = DoSunEphemeris( WayPointList[Task[ActiveWayPoint].Index].Longitude, WayPointList[Task[ActiveWayPoint].Index].Latitude); double d1 = (Calculated->TaskTimeToGo+DetectCurrentTime())/3600; double d0 = (DetectCurrentTime())/3600; bool past_sunset = (d1>sunsettime) && (d0<sunsettime); if (past_sunset && !devIsCondor(devA())) { // notify on change only return true; } else { return false; } };
void dlgWayPointDetailsShowModal(short mypage){ TCHAR sTmp[128]; double sunsettime; int sunsethours; int sunsetmins; WndProperty *wp; if (!ScreenLandscape) { char filename[MAX_PATH]; LocalPathS(filename, TEXT("dlgWayPointDetails_L.xml")); wf = dlgLoadFromXML(CallBackTable, filename, hWndMainWindow, TEXT("IDR_XML_WAYPOINTDETAILS_L")); } else { char filename[MAX_PATH]; LocalPathS(filename, TEXT("dlgWayPointDetails.xml")); wf = dlgLoadFromXML(CallBackTable, filename, hWndMainWindow, TEXT("IDR_XML_WAYPOINTDETAILS")); } nTextLines = 0; if (!wf) return; wInfo = ((WndFrame *)wf->FindByName(TEXT("frmInfos"))); wCommand = ((WndFrame *)wf->FindByName(TEXT("frmCommands"))); wSpecial = ((WndFrame *)wf->FindByName(TEXT("frmSpecial"))); wDetails = (WndListFrame*)wf->FindByName(TEXT("frmDetails")); LKASSERT(wInfo!=NULL); LKASSERT(wCommand!=NULL); LKASSERT(wSpecial!=NULL); LKASSERT(wDetails!=NULL); // Resize Frames up to real screen size on the right. wInfo->SetBorderKind(BORDERLEFT); wCommand->SetBorderKind(BORDERLEFT); wSpecial->SetBorderKind(BORDERLEFT); wDetails->SetBorderKind(BORDERLEFT); wCommand->SetVisible(false); wSpecial->SetVisible(false); // // CAPTION: top line in black // // if SeeYou waypoint if (WPLSEL.Format == LKW_CUP) { TCHAR ttmp[50]; // and it is landable if ((WPLSEL.Style>1) && (WPLSEL.Style<6) ) { _stprintf(sTmp, TEXT("%s "), WPLSEL.Name); // ICAO name probably, let's print it if ( _tcslen(WPLSEL.Code)==4 ) { _stprintf(ttmp,_T("(%s) "),WPLSEL.Code); _tcscat(sTmp, ttmp); } if ( _tcslen(WPLSEL.Freq)>0 ) { _stprintf(ttmp,_T("%s "),WPLSEL.Freq); _tcscat(sTmp, ttmp); } if ( WPLSEL.RunwayDir>=0 ) { _stprintf(ttmp,_T("RW %d "),WPLSEL.RunwayDir); _tcscat(sTmp, ttmp); } if ( WPLSEL.RunwayLen>0 ) { // we use Altitude instead of distance, to keep meters and feet _stprintf(ttmp,_T("%.0f%s"),Units::ToUserAltitude((double)WPLSEL.RunwayLen), Units::GetAltitudeName()); _tcscat(sTmp, ttmp); } wf->SetCaption(sTmp); } else { _stprintf(sTmp, TEXT("%s: "), wf->GetCaption()); _tcscat(sTmp, WayPointList[SelectedWaypoint].Name); wf->SetCaption(sTmp); } } else { _stprintf(sTmp, TEXT("%s: "), wf->GetCaption()); _tcscat(sTmp, WayPointList[SelectedWaypoint].Name); wf->SetCaption(sTmp); } // // Waypoint Comment // wp = ((WndProperty *)wf->FindByName(TEXT("prpWpComment"))); LKASSERT(wp); if (WayPointList[SelectedWaypoint].Comment==NULL) wp->SetText(_T("")); else wp->SetText(WayPointList[SelectedWaypoint].Comment); wp->SetButtonSize(16); // // Lat and Lon // Units::CoordinateToString( WayPointList[SelectedWaypoint].Longitude, WayPointList[SelectedWaypoint].Latitude, sTmp, sizeof(sTmp)-1); wp = ((WndProperty *)wf->FindByName(TEXT("prpCoordinate"))); LKASSERT(wp); wp->SetText(sTmp); // // Waypoint Altitude // Units::FormatUserAltitude(WayPointList[SelectedWaypoint].Altitude, sTmp, sizeof(sTmp)-1); wp = ((WndProperty *)wf->FindByName(TEXT("prpAltitude"))); LKASSERT(wp); wp->SetText(sTmp); // // SUNSET at waypoint // sunsettime = DoSunEphemeris(WayPointList[SelectedWaypoint].Longitude, WayPointList[SelectedWaypoint].Latitude); sunsethours = (int)sunsettime; sunsetmins = (int)((sunsettime-sunsethours)*60); _stprintf(sTmp, TEXT("%02d:%02d"), sunsethours, sunsetmins); ((WndProperty *)wf->FindByName(TEXT("prpSunset")))->SetText(sTmp); // // Distance and bearing // double distance, bearing; DistanceBearing(GPS_INFO.Latitude, GPS_INFO.Longitude, WayPointList[SelectedWaypoint].Latitude, WayPointList[SelectedWaypoint].Longitude, &distance, &bearing); TCHAR DistanceText[MAX_PATH]; Units::FormatUserDistance(distance, DistanceText, 10); ((WndProperty *)wf->FindByName(TEXT("prpDistance")))->SetText(DistanceText); _stprintf(sTmp, TEXT("%d")TEXT(DEG), iround(bearing)); ((WndProperty *)wf->FindByName(TEXT("prpBearing")))->SetText(sTmp); // // Altitude reqd at mc 0 // double alt=0; alt = CALCULATED_INFO.NavAltitude - GlidePolar::MacCreadyAltitude(0.0, distance, bearing, CALCULATED_INFO.WindSpeed, CALCULATED_INFO.WindBearing, 0, 0, true, 0)- WayPointList[SelectedWaypoint].Altitude; if (SafetyAltitudeMode==1 || WayPointCalc[SelectedWaypoint].IsLandable) alt-=(SAFETYALTITUDEARRIVAL/10); _stprintf(sTmp, TEXT("%.0f %s"), alt*ALTITUDEMODIFY, Units::GetAltitudeName()); wp = ((WndProperty *)wf->FindByName(TEXT("prpMc0"))); if (wp) wp->SetText(sTmp); // alt reqd at current mc alt = CALCULATED_INFO.NavAltitude - GlidePolar::MacCreadyAltitude(MACCREADY, distance, bearing, CALCULATED_INFO.WindSpeed, CALCULATED_INFO.WindBearing, 0, 0, true, 0)- WayPointList[SelectedWaypoint].Altitude; if (SafetyAltitudeMode==1 || WayPointCalc[SelectedWaypoint].IsLandable) alt-=(SAFETYALTITUDEARRIVAL/10); _stprintf(sTmp, TEXT("%.0f %s"), alt*ALTITUDEMODIFY, Units::GetAltitudeName()); wp = ((WndProperty *)wf->FindByName(TEXT("prpMc2"))); if (wp) { wp->SetText(sTmp); } wf->SetKeyDownNotify(FormKeyDown); ((WndButton *)wf->FindByName(TEXT("cmdClose")))->SetOnClickNotify(OnCloseClicked); // We DONT use PREV anymore ((WndButton *)wf->FindByName(TEXT("cmdPrev")))->SetVisible(false); // // Details (WAYNOTES) page // wDetailsEntry = (WndOwnerDrawFrame*)wf->FindByName(TEXT("frmDetailsEntry")); LKASSERT(wDetailsEntry!=NULL); wDetailsEntry->SetCanFocus(true); nTextLines = TextToLineOffsets(WayPointList[SelectedWaypoint].Details, LineOffsets, MAXLINES); // ScrollbarWidth is initialised from DrawScrollBar in WindowControls, so it might not be ready here if ( wDetails->ScrollbarWidth == -1) { #if defined (PNA) #define SHRINKSBFACTOR 1.0 // shrink width factor. Range .1 to 1 where 1 is very "fat" #else #define SHRINKSBFACTOR 0.75 // shrink width factor. Range .1 to 1 where 1 is very "fat" #endif wDetails->ScrollbarWidth = (int) (SCROLLBARWIDTH_INITIAL * ScreenDScale * SHRINKSBFACTOR); } wDetailsEntry->SetWidth(wDetails->GetWidth() - wDetails->ScrollbarWidth - 5); WndButton *wb; TCHAR captmp[200]; // Resize also buttons wb = ((WndButton *)wf->FindByName(TEXT("cmdInserInTask"))); if (wb) { wb->SetOnClickNotify(OnInserInTaskClicked); wb->SetWidth(wCommand->GetWidth()-wb->GetLeft()*2); if ((ActiveWayPoint<0) || !ValidTaskPoint(0)) { // this is going to be the first tp (ActiveWayPoint 0) _stprintf(captmp,_T("%s"),MsgToken(1824)); // insert as START } else { LKASSERT(ActiveWayPoint>=0 && ValidTaskPoint(0)); int indexInsert = max(ActiveWayPoint,0); // safe check if (indexInsert==0) { _stprintf(captmp,_T("%s"),MsgToken(1824)); // insert as START } else { LKASSERT(ValidWayPoint(Task[indexInsert].Index)); _stprintf(captmp,_T("%s <%s>"),MsgToken(1825),WayPointList[ Task[indexInsert].Index ].Name); // insert before xx } } wb->SetCaption(captmp); } wb = ((WndButton *)wf->FindByName(TEXT("cmdAppendInTask1"))); if (wb) { wb->SetOnClickNotify(OnAppendInTask1Clicked); wb->SetWidth(wCommand->GetWidth()-wb->GetLeft()*2); } wb = ((WndButton *)wf->FindByName(TEXT("cmdAppendInTask2"))); if (wb) { wb->SetOnClickNotify(OnAppendInTask2Clicked); wb->SetWidth(wCommand->GetWidth()-wb->GetLeft()*2); } wb = ((WndButton *)wf->FindByName(TEXT("cmdRemoveFromTask"))); if (wb) { wb->SetOnClickNotify(OnRemoveFromTaskClicked); wb->SetWidth(wCommand->GetWidth()-wb->GetLeft()*2); } wb = ((WndButton *)wf->FindByName(TEXT("cmdReplace"))); if (wb) { wb->SetWidth(wCommand->GetWidth()-wb->GetLeft()*2); int tmpIdx = -1; if (ValidTaskPoint(ActiveWayPoint)) tmpIdx = Task[ActiveWayPoint].Index; if( ValidTaskPoint(PanTaskEdit)) tmpIdx = RealActiveWaypoint; if(tmpIdx != -1) { wb->SetOnClickNotify(OnReplaceClicked); _stprintf(captmp,_T("%s <%s>"),MsgToken(1826),WayPointList[tmpIdx ].Name); // replace xx } else { _stprintf(captmp,_T("( %s )"),MsgToken(555)); } wb->SetCaption(captmp); } wb = ((WndButton *)wf->FindByName(TEXT("cmdNewHome"))); if (wb) { wb->SetOnClickNotify(OnNewHomeClicked); wb->SetWidth(wSpecial->GetWidth()-wb->GetLeft()*2); } wb = ((WndButton *)wf->FindByName(TEXT("cmdTeamCode"))); if (wb) { wb->SetOnClickNotify(OnTeamCodeClicked); wb->SetWidth(wSpecial->GetWidth()-wb->GetLeft()*2); } page = mypage; NextPage(0); wf->ShowModal(); delete wf; wf = NULL; }
void dlgWayPointDetailsShowModal(short mypage){ TCHAR sTmp[128]; double sunsettime; int sunsethours; int sunsetmins; WndProperty *wp; if (!ScreenLandscape) { char filename[MAX_PATH]; LocalPathS(filename, TEXT("dlgWayPointDetails_L.xml")); wf = dlgLoadFromXML(CallBackTable, filename, hWndMainWindow, TEXT("IDR_XML_WAYPOINTDETAILS_L")); } else { char filename[MAX_PATH]; LocalPathS(filename, TEXT("dlgWayPointDetails.xml")); wf = dlgLoadFromXML(CallBackTable, filename, hWndMainWindow, TEXT("IDR_XML_WAYPOINTDETAILS")); } nTextLines = 0; if (!wf) return; wInfo = ((WndFrame *)wf->FindByName(TEXT("frmInfos"))); wCommand = ((WndFrame *)wf->FindByName(TEXT("frmCommands"))); wSpecial = ((WndFrame *)wf->FindByName(TEXT("frmSpecial"))); wDetails = (WndListFrame*)wf->FindByName(TEXT("frmDetails")); LKASSERT(wInfo!=NULL); LKASSERT(wCommand!=NULL); LKASSERT(wSpecial!=NULL); LKASSERT(wDetails!=NULL); // Resize Frames up to real screen size on the right. wInfo->SetBorderKind(BORDERLEFT); wInfo->SetWidth(wf->GetWidth() - wInfo->GetLeft()-2); wCommand->SetBorderKind(BORDERLEFT); wCommand->SetWidth(wf->GetWidth() - wCommand->GetLeft()-2); wSpecial->SetBorderKind(BORDERLEFT); wSpecial->SetWidth(wf->GetWidth() - wSpecial->GetLeft()-2); wDetails->SetBorderKind(BORDERLEFT); wDetails->SetWidth(wf->GetWidth() - wDetails->GetLeft()-2); wCommand->SetVisible(false); wSpecial->SetVisible(false); // // CAPTION: top line in black // // if SeeYou waypoint if (WPLSEL.Format == LKW_CUP) { TCHAR ttmp[50]; // and it is landable if ((WPLSEL.Style>1) && (WPLSEL.Style<6) ) { _stprintf(sTmp, TEXT("%s "), WPLSEL.Name); // ICAO name probably, let's print it if ( _tcslen(WPLSEL.Code)==4 ) { _stprintf(ttmp,_T("(%s) "),WPLSEL.Code); _tcscat(sTmp, ttmp); } if ( _tcslen(WPLSEL.Freq)>0 ) { _stprintf(ttmp,_T("%s "),WPLSEL.Freq); _tcscat(sTmp, ttmp); } if ( WPLSEL.RunwayDir>=0 ) { _stprintf(ttmp,_T("RW %d "),WPLSEL.RunwayDir); _tcscat(sTmp, ttmp); } if ( WPLSEL.RunwayLen>0 ) { // we use Altitude instead of distance, to keep meters and feet _stprintf(ttmp,_T("%.0f%s"),Units::ToUserAltitude((double)WPLSEL.RunwayLen), Units::GetAltitudeName()); _tcscat(sTmp, ttmp); } wf->SetCaption(sTmp); } else { _stprintf(sTmp, TEXT("%s: "), wf->GetCaption()); _tcscat(sTmp, WayPointList[SelectedWaypoint].Name); wf->SetCaption(sTmp); } } else { _stprintf(sTmp, TEXT("%s: "), wf->GetCaption()); _tcscat(sTmp, WayPointList[SelectedWaypoint].Name); wf->SetCaption(sTmp); } // // Waypoint Comment // wp = ((WndProperty *)wf->FindByName(TEXT("prpWpComment"))); LKASSERT(wp); if (WayPointList[SelectedWaypoint].Comment==NULL) wp->SetText(_T("")); else wp->SetText(WayPointList[SelectedWaypoint].Comment); wp->SetButtonSize(16); // // Lat and Lon // Units::CoordinateToString( WayPointList[SelectedWaypoint].Longitude, WayPointList[SelectedWaypoint].Latitude, sTmp, sizeof(sTmp)-1); ((WndProperty *)wf->FindByName(TEXT("prpCoordinate")))->SetText(sTmp); // // Waypoint Altitude // Units::FormatUserAltitude(WayPointList[SelectedWaypoint].Altitude, sTmp, sizeof(sTmp)-1); ((WndProperty *)wf->FindByName(TEXT("prpAltitude")))->SetText(sTmp); // // SUNSET at waypoint // sunsettime = DoSunEphemeris(WayPointList[SelectedWaypoint].Longitude, WayPointList[SelectedWaypoint].Latitude); sunsethours = (int)sunsettime; sunsetmins = (int)((sunsettime-sunsethours)*60); _stprintf(sTmp, TEXT("%02d:%02d"), sunsethours, sunsetmins); ((WndProperty *)wf->FindByName(TEXT("prpSunset")))->SetText(sTmp); // // Distance and bearing // double distance, bearing; DistanceBearing(GPS_INFO.Latitude, GPS_INFO.Longitude, WayPointList[SelectedWaypoint].Latitude, WayPointList[SelectedWaypoint].Longitude, &distance, &bearing); TCHAR DistanceText[MAX_PATH]; Units::FormatUserDistance(distance, DistanceText, 10); ((WndProperty *)wf->FindByName(TEXT("prpDistance")))->SetText(DistanceText); _stprintf(sTmp, TEXT("%d")TEXT(DEG), iround(bearing)); ((WndProperty *)wf->FindByName(TEXT("prpBearing")))->SetText(sTmp); // // Altitude reqd at mc 0 // double alt=0; alt = CALCULATED_INFO.NavAltitude - GlidePolar::MacCreadyAltitude(0.0, distance, bearing, CALCULATED_INFO.WindSpeed, CALCULATED_INFO.WindBearing, 0, 0, true, 0)- WayPointList[SelectedWaypoint].Altitude; if (SafetyAltitudeMode==1 || WayPointCalc[SelectedWaypoint].IsLandable) alt-=(SAFETYALTITUDEARRIVAL/10); _stprintf(sTmp, TEXT("%.0f %s"), alt*ALTITUDEMODIFY, Units::GetAltitudeName()); wp = ((WndProperty *)wf->FindByName(TEXT("prpMc0"))); if (wp) wp->SetText(sTmp); // alt reqd at current mc alt = CALCULATED_INFO.NavAltitude - GlidePolar::MacCreadyAltitude(MACCREADY, distance, bearing, CALCULATED_INFO.WindSpeed, CALCULATED_INFO.WindBearing, 0, 0, true, 0)- WayPointList[SelectedWaypoint].Altitude; if (SafetyAltitudeMode==1 || WayPointCalc[SelectedWaypoint].IsLandable) alt-=(SAFETYALTITUDEARRIVAL/10); _stprintf(sTmp, TEXT("%.0f %s"), alt*ALTITUDEMODIFY, Units::GetAltitudeName()); wp = ((WndProperty *)wf->FindByName(TEXT("prpMc2"))); if (wp) { wp->SetText(sTmp); } wf->SetKeyDownNotify(FormKeyDown); ((WndButton *)wf->FindByName(TEXT("cmdClose")))->SetOnClickNotify(OnCloseClicked); // We DONT use PREV anymore ((WndButton *)wf->FindByName(TEXT("cmdPrev")))->SetVisible(false); // // Details (WAYNOTES) page // wDetailsEntry = (WndOwnerDrawFrame*)wf->FindByName(TEXT("frmDetailsEntry")); LKASSERT(wDetailsEntry!=NULL); wDetailsEntry->SetCanFocus(true); nTextLines = TextToLineOffsets(WayPointList[SelectedWaypoint].Details, LineOffsets, MAXLINES); WndButton *wb; // Resize also buttons wb = ((WndButton *)wf->FindByName(TEXT("cmdInserInTask"))); if (wb) { wb->SetOnClickNotify(OnInserInTaskClicked); wb->SetWidth(wCommand->GetWidth()-wb->GetLeft()*2); } wb = ((WndButton *)wf->FindByName(TEXT("cmdAppendInTask"))); if (wb) { wb->SetOnClickNotify(OnAppendInTaskClicked); wb->SetWidth(wCommand->GetWidth()-wb->GetLeft()*2); } wb = ((WndButton *)wf->FindByName(TEXT("cmdRemoveFromTask"))); if (wb) { wb->SetOnClickNotify(OnRemoveFromTaskClicked); wb->SetWidth(wCommand->GetWidth()-wb->GetLeft()*2); } wb = ((WndButton *)wf->FindByName(TEXT("cmdReplace"))); if (wb) { wb->SetOnClickNotify(OnReplaceClicked); wb->SetWidth(wCommand->GetWidth()-wb->GetLeft()*2); } wb = ((WndButton *)wf->FindByName(TEXT("cmdNewHome"))); if (wb) { wb->SetOnClickNotify(OnNewHomeClicked); wb->SetWidth(wSpecial->GetWidth()-wb->GetLeft()*2); } wb = ((WndButton *)wf->FindByName(TEXT("cmdTeamCode"))); if (wb) { wb->SetOnClickNotify(OnTeamCodeClicked); wb->SetWidth(wSpecial->GetWidth()-wb->GetLeft()*2); } page = mypage; NextPage(0); wf->ShowModal(); delete wf; wf = NULL; }