void dlgTeamCodeShowModal(void) { WndProperty* wp = NULL; WndButton *buttonCode = NULL; if (Layout::landscape) wf = LoadDialog(CallBackTable, XCSoarInterface::main_window, _T("IDR_XML_TEAMCODE_L")); else wf = LoadDialog(CallBackTable, XCSoarInterface::main_window, _T("IDR_XML_TEAMCODE")); if (!wf) return; // set event for button buttonCode = ((WndButton *)wf->FindByName(_T("cmdSetCode"))); if (buttonCode) { buttonCode->SetOnClickNotify(OnCodeClicked); } // Set unit for range wp = (WndProperty*)wf->FindByName(_T("prpRange")); if (wp) { wp->GetDataField()->SetUnits(Units::GetDistanceName()); } Update(); wf->SetTimerNotify(OnTimerNotify); wf->ShowModal(); delete wf; }
void dlgWayPointDetailsShowModal(SingleWindow &parent, const Waypoint& way_point) { selected_waypoint = &way_point; TCHAR sTmp[128]; double sunsettime; int sunsethours; int sunsetmins; WndProperty *wp; if (Layout::landscape) wf = LoadDialog(CallBackTable, parent, _T("IDR_XML_WAYPOINTDETAILS_L")); else wf = LoadDialog(CallBackTable, parent, _T("IDR_XML_WAYPOINTDETAILS")); nTextLines = 0; if (!wf) return; Profile::GetPath(szProfileWayPointFile, szWaypointFile); ExtractDirectory(Directory, szWaypointFile); _stprintf(path_modis, _T("%s" DIR_SEPARATOR_S "modis-%03d.jpg"), Directory, selected_waypoint->id+1); _stprintf(path_google,_T("%s" DIR_SEPARATOR_S "google-%03d.jpg"), Directory, selected_waypoint->id+1); _stprintf(sTmp, _T("%s: '%s'"), wf->GetCaption(), selected_waypoint->Name.c_str()); wf->SetCaption(sTmp); wp = ((WndProperty *)wf->FindByName(_T("prpWpComment"))); wp->SetText(selected_waypoint->Comment.c_str()); Units::LongitudeToString(selected_waypoint->Location.Longitude, sTmp, sizeof(sTmp)-1); ((WndProperty *)wf->FindByName(_T("prpLongitude"))) ->SetText(sTmp); Units::LatitudeToString(selected_waypoint->Location.Latitude, sTmp, sizeof(sTmp)-1); ((WndProperty *)wf->FindByName(_T("prpLatitude"))) ->SetText(sTmp); Units::FormatUserAltitude(selected_waypoint->Altitude, sTmp, sizeof(sTmp)-1); ((WndProperty *)wf->FindByName(_T("prpAltitude"))) ->SetText(sTmp); SunEphemeris sun; sunsettime = sun.CalcSunTimes (selected_waypoint->Location, XCSoarInterface::Basic().DateTime, GetUTCOffset()/3600); sunsethours = (int)sunsettime; sunsetmins = (int)((sunsettime - sunsethours) * 60); _stprintf(sTmp, _T("%02d:%02d"), sunsethours, sunsetmins); ((WndProperty *)wf->FindByName(_T("prpSunset")))->SetText(sTmp); fixed distance; Angle bearing; DistanceBearing(XCSoarInterface::Basic().Location, selected_waypoint->Location, &distance, &bearing); TCHAR DistanceText[MAX_PATH]; Units::FormatUserDistance(distance, DistanceText, 10); ((WndProperty *)wf->FindByName(_T("prpDistance"))) ->SetText(DistanceText); _stprintf(sTmp, _T("%d")_T(DEG), iround(bearing.value_degrees())); ((WndProperty *)wf->FindByName(_T("prpBearing"))) ->SetText(sTmp); GlidePolar glide_polar = protected_task_manager.get_glide_polar(); GlidePolar safety_polar = protected_task_manager.get_safety_polar(); UnorderedTaskPoint t(way_point, XCSoarInterface::SettingsComputer()); GlideResult r; // alt reqd at current mc const AIRCRAFT_STATE aircraft_state = ToAircraftState(XCSoarInterface::Basic()); r = TaskSolution::glide_solution_remaining(t, aircraft_state, glide_polar); wp = (WndProperty *)wf->FindByName(_T("prpMc2")); if (wp) { _stprintf(sTmp, _T("%.0f %s"), (double)Units::ToUserAltitude(r.AltitudeDifference), Units::GetAltitudeName()); wp->SetText(sTmp); } // alt reqd at mc 0 glide_polar.set_mc(fixed_zero); r = TaskSolution::glide_solution_remaining(t, aircraft_state, glide_polar); wp = (WndProperty *)wf->FindByName(_T("prpMc0")); if (wp) { _stprintf(sTmp, _T("%.0f %s"), (double)Units::ToUserAltitude(r.AltitudeDifference), Units::GetAltitudeName()); wp->SetText(sTmp); } // alt reqd at safety mc r = TaskSolution::glide_solution_remaining(t, aircraft_state, safety_polar); wp = (WndProperty *)wf->FindByName(_T("prpMc1")); if (wp) { _stprintf(sTmp, _T("%.0f %s"), (double)Units::ToUserAltitude(r.AltitudeDifference), Units::GetAltitudeName()); wp->SetText(sTmp); } wf->SetKeyDownNotify(FormKeyDown); ((WndButton *)wf->FindByName(_T("cmdClose")))->SetOnClickNotify(OnCloseClicked); wInfo = ((WndFrame *)wf->FindByName(_T("frmInfos"))); wCommand = ((WndFrame *)wf->FindByName(_T("frmCommands"))); wSpecial = ((WndFrame *)wf->FindByName(_T("frmSpecial"))); wImage = ((WndOwnerDrawFrame *)wf->FindByName(_T("frmImage"))); wDetails = (WndListFrame*)wf->FindByName(_T("frmDetails")); wDetails->SetPaintItemCallback(OnPaintDetailsListItem); assert(wInfo != NULL); assert(wCommand != NULL); assert(wSpecial != NULL); assert(wImage != NULL); assert(wDetails != NULL); nTextLines = TextToLineOffsets(way_point.Details.c_str(), LineOffsets, MAXLINES); wDetails->SetLength(nTextLines); /* TODO enhancement: wpdetails wp = ((WndProperty *)wf->FindByName(_T("prpWpDetails"))); wp->SetText(way_point.Details); */ wCommand->hide(); wSpecial->hide(); wImage->SetCaption(_("Blank!")); wImage->SetOnPaintNotify(OnImagePaint); WndButton *wb; wb = ((WndButton *)wf->FindByName(_T("cmdGoto"))); if (wb) wb->SetOnClickNotify(OnGotoClicked); wb = ((WndButton *)wf->FindByName(_T("cmdReplace"))); if (wb) wb->SetOnClickNotify(OnReplaceClicked); wb = ((WndButton *)wf->FindByName(_T("cmdNewHome"))); if (wb) wb->SetOnClickNotify(OnNewHomeClicked); wb = ((WndButton *)wf->FindByName(_T("cmdSetAlternate1"))); if (wb) wb->SetOnClickNotify(OnSetAlternate1Clicked); wb = ((WndButton *)wf->FindByName(_T("cmdSetAlternate2"))); if (wb) wb->SetOnClickNotify(OnSetAlternate2Clicked); wb = ((WndButton *)wf->FindByName(_T("cmdClearAlternates"))); if (wb) wb->SetOnClickNotify(OnClearAlternatesClicked); wb = ((WndButton *)wf->FindByName(_T("cmdTeamCode"))); if (wb) wb->SetOnClickNotify(OnTeamCodeClicked); wb = ((WndButton *)wf->FindByName(_T("cmdInserInTask"))); if (wb) wb->SetOnClickNotify(OnInsertInTaskClicked); wb = ((WndButton *)wf->FindByName(_T("cmdAppendInTask"))); if (wb) wb->SetOnClickNotify(OnAppendInTaskClicked); wb = ((WndButton *)wf->FindByName(_T("cmdRemoveFromTask"))); if (wb) wb->SetOnClickNotify(OnRemoveFromTaskClicked); hasimage1 = jpgimage1.load_file(path_modis); hasimage2 = jpgimage2.load_file(path_google); page = 0; NextPage(0); // JMW just to turn proper pages on/off 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); 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; }
void dlgWayPointDetailsShowModal(SingleWindow &parent, const Waypoint& way_point, bool allow_navigation) { const NMEA_INFO &basic = CommonInterface::Basic(); const DERIVED_INFO &calculated = CommonInterface::Calculated(); const SETTINGS_COMPUTER &settings_computer = CommonInterface::SettingsComputer(); selected_waypoint = &way_point; wf = LoadDialog(CallBackTable, parent, Layout::landscape ? _T("IDR_XML_WAYPOINTDETAILS_L") : _T("IDR_XML_WAYPOINTDETAILS")); assert(wf != NULL); nTextLines = 0; TCHAR buffer[MAX_PATH]; const TCHAR *Directory = NULL; if (Profile::GetPath(szProfileWayPointFile, szWaypointFile)) Directory = DirName(szWaypointFile, buffer); if (Directory == NULL) Directory = _T(""); _stprintf(path_modis, _T("%s" DIR_SEPARATOR_S "modis-%03d.jpg"), Directory, selected_waypoint->original_id); _stprintf(path_google,_T("%s" DIR_SEPARATOR_S "google-%03d.jpg"), Directory, selected_waypoint->original_id); TCHAR sTmp[128]; _stprintf(sTmp, _T("%s: '%s'"), wf->GetCaption(), selected_waypoint->Name.c_str()); wf->SetCaption(sTmp); WndProperty *wp; wp = ((WndProperty *)wf->FindByName(_T("prpWpComment"))); wp->SetText(selected_waypoint->Comment.c_str()); Units::LongitudeToString(selected_waypoint->Location.Longitude, sTmp, sizeof(sTmp)-1); ((WndProperty *)wf->FindByName(_T("prpLongitude"))) ->SetText(sTmp); Units::LatitudeToString(selected_waypoint->Location.Latitude, sTmp, sizeof(sTmp)-1); ((WndProperty *)wf->FindByName(_T("prpLatitude"))) ->SetText(sTmp); Units::FormatUserAltitude(selected_waypoint->Altitude, sTmp, sizeof(sTmp)-1); ((WndProperty *)wf->FindByName(_T("prpAltitude"))) ->SetText(sTmp); SunEphemeris sun; sun.CalcSunTimes(selected_waypoint->Location, basic.DateTime, fixed(GetUTCOffset()) / 3600); int sunsethours = (int)sun.TimeOfSunSet; int sunsetmins = (int)((sun.TimeOfSunSet - fixed(sunsethours)) * 60); _stprintf(sTmp, _T("%02d:%02d"), sunsethours, sunsetmins); ((WndProperty *)wf->FindByName(_T("prpSunset")))->SetText(sTmp); GeoVector gv = basic.Location.distance_bearing(selected_waypoint->Location); TCHAR DistanceText[MAX_PATH]; Units::FormatUserDistance(gv.Distance, DistanceText, 10); ((WndProperty *)wf->FindByName(_T("prpDistance"))) ->SetText(DistanceText); _stprintf(sTmp, _T("%d")_T(DEG), iround(gv.Bearing.value_degrees())); ((WndProperty *)wf->FindByName(_T("prpBearing"))) ->SetText(sTmp); if (protected_task_manager != NULL) { GlidePolar glide_polar = settings_computer.glide_polar_task; const GlidePolar &safety_polar = calculated.glide_polar_safety; UnorderedTaskPoint t(way_point, settings_computer); GlideResult r; // alt reqd at current mc const AIRCRAFT_STATE aircraft_state = ToAircraftState(basic, calculated); r = TaskSolution::glide_solution_remaining(t, aircraft_state, glide_polar); wp = (WndProperty *)wf->FindByName(_T("prpMc2")); if (wp) { _stprintf(sTmp, _T("%.0f %s"), (double)Units::ToUserAltitude(r.AltitudeDifference), Units::GetAltitudeName()); wp->SetText(sTmp); } // alt reqd at mc 0 glide_polar.set_mc(fixed_zero); r = TaskSolution::glide_solution_remaining(t, aircraft_state, glide_polar); wp = (WndProperty *)wf->FindByName(_T("prpMc0")); if (wp) { _stprintf(sTmp, _T("%.0f %s"), (double)Units::ToUserAltitude(r.AltitudeDifference), Units::GetAltitudeName()); wp->SetText(sTmp); } // alt reqd at safety mc r = TaskSolution::glide_solution_remaining(t, aircraft_state, safety_polar); wp = (WndProperty *)wf->FindByName(_T("prpMc1")); if (wp) { _stprintf(sTmp, _T("%.0f %s"), (double)Units::ToUserAltitude(r.AltitudeDifference), Units::GetAltitudeName()); wp->SetText(sTmp); } } wf->SetKeyDownNotify(FormKeyDown); ((WndButton *)wf->FindByName(_T("cmdClose")))->SetOnClickNotify(OnCloseClicked); wInfo = ((WndFrame *)wf->FindByName(_T("frmInfos"))); wCommand = ((WndFrame *)wf->FindByName(_T("frmCommands"))); wImage = ((WndOwnerDrawFrame *)wf->FindByName(_T("frmImage"))); wDetails = (WndListFrame*)wf->FindByName(_T("frmDetails")); wDetails->SetPaintItemCallback(OnPaintDetailsListItem); assert(wInfo != NULL); assert(wCommand != NULL); assert(wImage != NULL); assert(wDetails != NULL); nTextLines = TextToLineOffsets(way_point.Details.c_str(), LineOffsets, MAXLINES); wDetails->SetLength(nTextLines); wCommand->hide(); wImage->SetOnPaintNotify(OnImagePaint); if (!allow_navigation) { WndButton* butnav = NULL; butnav = (WndButton *)wf->FindByName(_T("cmdPrev")); assert(butnav); butnav->hide(); butnav = (WndButton *)wf->FindByName(_T("cmdNext")); assert(butnav); butnav->hide(); butnav = (WndButton *)wf->FindByName(_T("cmdGoto")); assert(butnav); butnav->hide(); } WndButton *wb; wb = ((WndButton *)wf->FindByName(_T("cmdGoto"))); if (wb) wb->SetOnClickNotify(OnGotoClicked); wb = ((WndButton *)wf->FindByName(_T("cmdReplace"))); if (wb) wb->SetOnClickNotify(OnReplaceClicked); wb = ((WndButton *)wf->FindByName(_T("cmdNewHome"))); if (wb) wb->SetOnClickNotify(OnNewHomeClicked); wb = ((WndButton *)wf->FindByName(_T("cmdInserInTask"))); if (wb) wb->SetOnClickNotify(OnInsertInTaskClicked); wb = ((WndButton *)wf->FindByName(_T("cmdAppendInTask"))); if (wb) wb->SetOnClickNotify(OnAppendInTaskClicked); wb = ((WndButton *)wf->FindByName(_T("cmdRemoveFromTask"))); if (wb) wb->SetOnClickNotify(OnRemoveFromTaskClicked); /* JMW disabled until 6.2 work, see #996 wb = ((WndButton *)wf->FindByName(_T("cmdGotoAndClearTask"))); if (wb) wb->SetOnClickNotify(OnGotoAndClearTaskClicked); */ wb = ((WndButton *)wf->FindByName(_T("cmdActivatePan"))); if (wb) wb->SetOnClickNotify(OnActivatePanClicked); hasimage1 = jpgimage1.load_file(path_modis); hasimage2 = jpgimage2.load_file(path_google); page = 0; NextPage(0); // JMW just to turn proper pages on/off wf->ShowModal(); delete wf; jpgimage1.reset(); jpgimage2.reset(); }