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; }
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(); } }