コード例 #1
0
ファイル: GribUIDialog.cpp プロジェクト: IgorMikhal/OpenCPN
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();
}
コード例 #2
0
ファイル: CursorData.cpp プロジェクト: jieter/OpenCPN
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] );
    }
}