void GRIBUIDialog::PopulateTrackingControls( void ) { m_fgTimelineControls->Clear(); if(m_pTimelineSet && m_TimeLineHours) { m_fgTimelineControls->Add(m_tbPlayStop, 0, wxALL, 5); m_tbPlayStop->Show(); m_fgTimelineControls->Add(m_sTimeline, 0, wxEXPAND, 5); m_sTimeline->Show(); m_bpPrev->Enable(); m_bpNext->Enable(); m_bpNow->Enable(); } else { m_tbPlayStop->Hide(); m_sTimeline->Hide(); m_bpPrev->Disable(); m_bpNext->Disable(); m_bpNow->Disable(); } m_fgTrackingControls->Clear(); GribRecord **RecordArray; if( m_pTimelineSet ) RecordArray = m_pTimelineSet->m_GribRecordPtrArray; AddTrackingControl(m_cbWind, m_tcWindSpeed, m_tcWindDirection, m_pTimelineSet && RecordArray[Idx_WIND_VX] && RecordArray[Idx_WIND_VY]); AddTrackingControl(m_cbWindScat, m_tcWindScatSpeed, m_tcWindScatDirection, m_pTimelineSet && RecordArray[Idx_WINDSCAT_VX] && RecordArray[Idx_WINDSCAT_VY]); AddTrackingControl(m_cbWindGust, m_tcWindGust, 0, m_pTimelineSet && RecordArray[Idx_WIND_GUST]); AddTrackingControl(m_cbPressure, m_tcPressure, 0, m_pTimelineSet && RecordArray[Idx_PRESSURE]); /* tracking for wave is funky */ if(m_pTimelineSet && RecordArray[Idx_HTSIGW]) { if(RecordArray[Idx_WVDIR]) AddTrackingControl(m_cbWave, m_tcWaveHeight, m_tcWaveDirection, true); else { AddTrackingControl(m_cbWave, m_tcWaveHeight, 0, true); m_tcWaveDirection->Hide(); } } else if(m_pTimelineSet && RecordArray[Idx_WVDIR]) { AddTrackingControl(m_cbWave, 0, m_tcWaveDirection, true); m_tcWaveHeight->Hide(); } else AddTrackingControl(m_cbWave, m_tcWaveHeight, m_tcWaveDirection, false); AddTrackingControl(m_cbCurrent, m_tcCurrentVelocity, m_tcCurrentDirection, m_pTimelineSet && RecordArray[Idx_SEACURRENT_VX] && RecordArray[Idx_SEACURRENT_VY]); AddTrackingControl(m_cbPrecipitation, m_tcPrecipitation, 0, m_pTimelineSet && RecordArray[Idx_PRECIP_TOT]); AddTrackingControl(m_cbCloud, m_tcCloud, 0, m_pTimelineSet && RecordArray[Idx_CLOUD_TOT]); AddTrackingControl(m_cbAirTemperature, m_tcAirTemperature, 0, m_pTimelineSet && RecordArray[Idx_AIR_TEMP_2M]); AddTrackingControl(m_cbSeaTemperature, m_tcSeaTemperature, 0, m_pTimelineSet && RecordArray[Idx_SEA_TEMP]); Fit(); Refresh(); }
void CursorData::PopulateTrackingControls( bool vertical ) { m_fgTrackingControls->Clear(); m_fgTrackingControls->SetCols( vertical ? 2 : 12); this->Fit(); //Get text controls sizing data wxFont *font = OCPNGetFont(_("Dialog"), 10); int wn, wd, ws,wl; GetTextExtent( _T("abcdefghih"), &wn, NULL, 0, 0, font); // normal width text control size GetTextExtent( _T("abcdef"), &ws, NULL, 0, 0, font); // short width text control size for direction only GetTextExtent( _T("abcdefghijklmopq"), &wd, NULL, 0, 0, font); // long width text control size for double unit wind display GetTextExtent( _T("abcdefghijklm"), &wl, NULL, 0, 0, font); // long width text control size for double unit wave display // bool bf = m_gparent.m_OverlaySettings.Settings[GribOverlaySettings::WIND].m_Units == GribOverlaySettings::BFS; wd = vertical ? wn: bf? wn: wd; wl = vertical? wn : wl; AddTrackingControl(m_cbWind, m_tcWindSpeed, m_tcWindSpeedBf, m_tcWindDirection, false, vertical, 0, 0 ); //hide all wind's parameters AddTrackingControl(m_cbWind, m_tcWindSpeed, vertical? (bf ? m_tcWindDirection: m_tcWindSpeedBf) : m_tcWindDirection, vertical? (bf ? 0: m_tcWindDirection): 0, m_gparent.m_pTimelineSet && m_gparent.m_bGRIBActiveFile->m_GribIdxArray.Index(Idx_WIND_VX) != wxNOT_FOUND && m_gparent.m_bGRIBActiveFile->m_GribIdxArray.Index(Idx_WIND_VY) != wxNOT_FOUND, vertical, wd, ws); AddTrackingControl(m_cbWindGust, m_tcWindGust, 0, 0, m_gparent.m_pTimelineSet && m_gparent.m_bGRIBActiveFile->m_GribIdxArray.Index(Idx_WIND_GUST) != wxNOT_FOUND && m_Altitude == 0, vertical, wn); AddTrackingControl(m_cbPressure, m_tcPressure, 0, 0, m_gparent.m_pTimelineSet && m_gparent.m_bGRIBActiveFile->m_GribIdxArray.Index(Idx_PRESSURE) != wxNOT_FOUND && m_Altitude == 0, vertical, wn); /* tracking for wave is funky */ AddTrackingControl(m_cbWave, m_tcWaveHeight, m_tcWavePeriode, m_tcWaveDirection, false, vertical, 0, 0); //hide all waves's parameters if(m_gparent.m_pTimelineSet && m_gparent.m_bGRIBActiveFile->m_GribIdxArray.Index(Idx_HTSIGW) != wxNOT_FOUND) { if(m_gparent.m_bGRIBActiveFile->m_GribIdxArray.Index(Idx_WVDIR) != wxNOT_FOUND) AddTrackingControl(m_cbWave, m_tcWaveHeight, vertical? m_tcWavePeriode: m_tcWaveDirection, vertical? m_tcWaveDirection: 0 , m_Altitude == 0, vertical, wl, ws); else AddTrackingControl(m_cbWave, m_tcWaveHeight, 0, vertical? m_tcWavePeriode: 0, m_Altitude == 0, vertical, wn, ws); } else { if(m_gparent.m_pTimelineSet && m_gparent.m_bGRIBActiveFile->m_GribIdxArray.Index(Idx_WVDIR) != wxNOT_FOUND) AddTrackingControl(m_cbWave, m_tcWaveDirection, 0,0 , m_Altitude == 0, vertical, ws, ws); } AddTrackingControl(m_cbCurrent, m_tcCurrentVelocity, m_tcCurrentDirection, 0, m_gparent.m_pTimelineSet && m_gparent.m_bGRIBActiveFile->m_GribIdxArray.Index(Idx_SEACURRENT_VX) != wxNOT_FOUND && m_gparent.m_bGRIBActiveFile->m_GribIdxArray.Index(Idx_SEACURRENT_VY) != wxNOT_FOUND && m_Altitude == 0, vertical, wn, ws); AddTrackingControl(m_cbPrecipitation, m_tcPrecipitation, 0, 0, m_gparent.m_pTimelineSet && m_gparent.m_bGRIBActiveFile->m_GribIdxArray.Index(Idx_PRECIP_TOT) != wxNOT_FOUND && m_Altitude == 0, vertical, wn); AddTrackingControl(m_cbCloud, m_tcCloud, 0, 0, m_gparent.m_pTimelineSet && m_gparent.m_bGRIBActiveFile->m_GribIdxArray.Index(Idx_CLOUD_TOT) != wxNOT_FOUND && m_Altitude == 0, vertical, wn); AddTrackingControl(m_cbAirTemperature, m_tcAirTemperature, 0, 0, m_gparent.m_pTimelineSet && m_gparent.m_bGRIBActiveFile->m_GribIdxArray.Index(Idx_AIR_TEMP) != wxNOT_FOUND && m_Altitude == 0, vertical, wn); AddTrackingControl(m_cbSeaTemperature, m_tcSeaTemperature, 0, 0, m_gparent.m_pTimelineSet && m_gparent.m_bGRIBActiveFile->m_GribIdxArray.Index(Idx_SEA_TEMP) != wxNOT_FOUND && m_Altitude == 0, vertical, wn); AddTrackingControl(m_cbCAPE, m_tcCAPE, 0, 0, m_gparent.m_pTimelineSet && m_gparent.m_bGRIBActiveFile->m_GribIdxArray.Index(Idx_CAPE) != wxNOT_FOUND && m_Altitude == 0, vertical, wn); // //init and show extra parameters for altitude tracking if necessary AddTrackingControl(m_cbAltitude, m_tcAltitude, 0, 0, m_gparent.m_pTimelineSet && m_gparent.m_bGRIBActiveFile->m_GribIdxArray.Index(Idx_GEOP_HGT + m_Altitude) != wxNOT_FOUND && m_Altitude != 0, vertical, wn); AddTrackingControl(m_cbTemp, m_tcTemp, 0, 0, m_gparent.m_pTimelineSet && m_gparent.m_bGRIBActiveFile->m_GribIdxArray.Index(Idx_AIR_TEMP + m_Altitude) != wxNOT_FOUND && m_Altitude != 0, vertical, wn); AddTrackingControl(m_cbRelHumid, m_tcRelHumid, 0, 0, m_gparent.m_pTimelineSet && m_gparent.m_bGRIBActiveFile->m_GribIdxArray.Index(Idx_HUMID_RE + m_Altitude) != wxNOT_FOUND && m_Altitude != 0, vertical, wn); // m_stTrackingText->SetLabel( _("Data at cursor position") ); //add tooltips wxString t; double lev; lev = m_gparent.m_OverlaySettings.CalibrateValue(GribOverlaySettings::GEO_ALTITUDE, 10 ); //convert 10m in current altitude unit t.Printf( m_Altitude ? m_gparent.m_OverlaySettings.GetAltitudeFromIndex( m_Altitude, m_gparent.m_OverlaySettings.Settings[GribOverlaySettings::PRESSURE].m_Units) .Append( _T(" ") ).Append( m_gparent.m_OverlaySettings.GetUnitSymbol(GribOverlaySettings::PRESSURE) ) : wxString::Format( _T("%1.*f "), lev == (int) lev ? 0 : 1, lev ) .Append( m_gparent.m_OverlaySettings.GetUnitSymbol(GribOverlaySettings::GEO_ALTITUDE) ) ); m_tcWindSpeed->SetToolTip( _("Wind Speed at") + t.Prepend( _T(" ") ) ); m_tcWindSpeedBf->SetToolTip( _("Wind Speed in at") + t.Prepend( _T(" ") ) ); m_tcWindDirection->SetToolTip( _("Wind Direction at") + t ); t.Printf( _T(" %1.*f ") + m_gparent.m_OverlaySettings.GetUnitSymbol(GribOverlaySettings::GEO_ALTITUDE), lev == (int) lev ? 0 : 1, lev ); m_tcWindGust->SetToolTip( _("Wind Gust at") + t ); if( m_gparent.m_pTimelineSet ) { wxString s[] = { _T(" "), _("Air Temperature at"), _("Surface level"), _("Sea Surface Temperature") }; lev = m_gparent.m_OverlaySettings.CalibrateValue(GribOverlaySettings::GEO_ALTITUDE, 2 ); //convert 2m in current altitude unit t.Printf( m_gparent.m_bGRIBActiveFile->m_GribIdxArray.Index(1000 + NORWAY_METNO) != wxNOT_FOUND ? s[0] + s[2] : _T(" %1.*f ") + m_gparent.m_OverlaySettings.GetUnitSymbol(GribOverlaySettings::GEO_ALTITUDE), lev == (int) lev ? 0 : 1, lev ); m_tcAirTemperature->SetToolTip(s[1] + t ); m_tcSeaTemperature->SetToolTip( m_gparent.m_bGRIBActiveFile->m_GribIdxArray.Index( 1000 + NOAA_GFS) != wxNOT_FOUND ? s[1] + s[0] + s[2] : s[3] ); } }