Пример #1
0
bool TrackPropDlg::IsThisTrackExtendable()
{
    m_pExtendRoute = NULL;
    m_pExtendPoint = NULL;
    if( m_pRoute == g_pActiveTrack || m_pRoute->m_bIsInLayer ) return false;

    RoutePoint *pLastPoint = m_pRoute->GetPoint( 1 );
    if( !pLastPoint->GetCreateTime().IsValid() ) return false;

    wxRouteListNode *route_node = pRouteList->GetFirst();
    while( route_node ) {
        Route *proute = route_node->GetData();
        if( proute->m_bIsTrack && proute->IsVisible() && ( proute->m_GUID != m_pRoute->m_GUID ) ) {
            RoutePoint *track_node = proute->GetLastPoint();
            if( track_node->GetCreateTime().IsValid() ) {
                if( track_node->GetCreateTime() <= pLastPoint->GetCreateTime() )
                    if( !m_pExtendPoint || track_node->GetCreateTime() > m_pExtendPoint->GetCreateTime() ) {
                    m_pExtendPoint = track_node;
                    m_pExtendRoute = proute;
                }
            }
        }
        route_node = route_node->GetNext();                         // next route
    }
    if( m_pExtendRoute ) return ( !m_pExtendRoute->m_bIsInLayer );
    else
        return false;
}
Пример #2
0
void TrackPropDlg::OnExtendBtnClick( wxCommandEvent& event ) 
{
    RoutePoint *pLastPoint = m_pRoute->GetPoint( 1 );

    if( IsThisTrackExtendable() ) {
        int begin = 1;
        if( pLastPoint->GetCreateTime() == m_pExtendPoint->GetCreateTime() ) begin = 2;
        pSelect->DeleteAllSelectableTrackSegments( m_pExtendRoute );
        m_pExtendRoute->CloneTrack( m_pRoute, begin, m_pRoute->GetnPoints(), _("_plus") );
        pSelect->AddAllSelectableTrackSegments( m_pExtendRoute );
        pSelect->DeleteAllSelectableTrackSegments( m_pRoute );
        m_pRoute->ClearHighlights();
        g_pRouteMan->DeleteTrack( m_pRoute );

        SetTrackAndUpdate( m_pExtendRoute );
        UpdateProperties();

        if( pRouteManagerDialog && pRouteManagerDialog->IsShown() )
            pRouteManagerDialog->UpdateTrkListCtrl();
    }
}