예제 #1
0
        /// <summary>
        /// Adds an overlay of markers to the map.  Attempts to retreive the overlay data if it already exists
        /// otherwise the overlay is created and displayed on the map.
        /// </summary>
        /// <param name="trackData">Track data to be displayed</param>
        void AddMarkerOverlay(TrackGridData trackData)
        {
            GMapOverlay markersOverlay;

            if (!overlays.TryGetValue(trackData.Track, out markersOverlay))
            {
                markersOverlay = new GMapOverlay();

                foreach (GpsPoint point in trackData.Track.Points)
                {
                    AddMarker(markersOverlay, point, trackData.Marker);
                }

                overlays[trackData.Track] = markersOverlay;
            }

            gMap.Overlays.Add(markersOverlay);
            gMap.Refresh();

            //bug in GMap places new points at wrong position
            double zoom = gMap.Zoom;

            gMap.Zoom = zoom - 1;
            gMap.Zoom = zoom;
        }
예제 #2
0
        private void LoadTracks(string[] fileNames)
        {
            GpsLogParser p;

            foreach (string file in fileNames)
            {
                p = new GpsLogParser(file);
                GpsTrack      track = p.ReadGpsLog();
                TrackGridData data  = new TrackGridData(track, file);
                AddTrackToGrid(data);
            }
        }
예제 #3
0
        /// <summary>
        /// Modifies existing overlays with new data (currently only in the form of a different marker.
        /// </summary>
        /// <param name="data"></param>
        /// <remarks>Read-write settings for the map data means that if the data is currently displayed on the
        /// map the only way to modify it is to delete it and make a new overlay with updated data.</remarks>
        void UpdateTrackOverlay(TrackGridData data)
        {
            GMapOverlay overlay;

            if (overlays.TryGetValue(data.Track, out overlay))
            {
                // a replacement overlay is not generated until it is needed for display.
                overlays.Remove(data.Track);

                // if the data exists as an overlay on the map it means it is currently being displayed and will need to be redrawn
                if (gMap.Overlays.Contains(overlay))
                {
                    gMap.Overlays.Remove(overlay);
                    AddMarkerOverlay(data);
                }
            }
        }
예제 #4
0
        /// <summary>
        /// Currently the only cell value that the user can modify is the check box that determines if the track data is displayed on the map
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void tracksGridView_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {
            if (e.ColumnIndex == Display.Index && e.RowIndex != -1)
            {
                DataGridViewRow row       = tracksGridView.Rows[e.RowIndex];
                TrackGridData   trackData = (TrackGridData)row.Tag;

                if ((bool)row.Cells[Display.Index].Value)
                {
                    AddMarkerOverlay(trackData);
                }
                else
                {
                    gMap.Overlays.Remove(overlays[trackData.Track]);
                }
            }

            gMap.Refresh();
        }
예제 #5
0
        void AddTrackToGrid(TrackGridData trackData)
        {
            DataGridViewRow row = (DataGridViewRow)tracksGridView.RowTemplate.Clone();

            row.CreateCells(tracksGridView);

            row.Cells[Display.Index].Value       = false;
            row.Cells[displayFormat.Index].Value = "Edit";
            row.Cells[startTime.Index].Value     = trackData.Track.StartPretty;
            row.Cells[endTime.Index].Value       = trackData.Track.EndPretty;
            row.Cells[minLatitude.Index].Value   = trackData.Track.MinLatitudePretty;
            row.Cells[maxLatitude.Index].Value   = trackData.Track.MaxLatitudePretty;
            row.Cells[minLongitude.Index].Value  = trackData.Track.MinLongitudePretty;
            row.Cells[maxLongitude.Index].Value  = trackData.Track.MaxLongitudePretty;

            row.Tag = trackData;

            tracksGridView.Rows.Add(row); //false, track.StartDate, track.EndDate, track.MinLatitude, track.MaxLatitude, track.MinLongitude, track.MaxLongitude);
            UpdateGridSize();
        }
예제 #6
0
        /// <summary>
        /// Currently only handles clicks to the "Format Edit" button for changing the parker image of a track.
        /// Launches a new window for selecting the marker type.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void tracksGridView_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            var senderGrid = (DataGridView)sender;

            if (senderGrid.Columns[e.ColumnIndex] is DataGridViewButtonColumn &&
                e.RowIndex >= 0)
            {
                TrackGridData data = (TrackGridData)senderGrid.Rows[e.RowIndex].Tag;
                using (var f = new Markers(data.Marker))
                {
                    var result = f.ShowDialog();
                    if (result == DialogResult.OK && f.Marker != data.Marker)
                    {
                        TrackGridData newData = new TrackGridData(data.Track, data.FileName);
                        newData.Marker = f.Marker;
                        senderGrid.Rows[e.RowIndex].Tag = newData;

                        UpdateTrackOverlay(newData);
                    }
                }
            }
        }
예제 #7
0
 public TimeDistanceFilterForm(TrackGridData trackData)
 {
     InitializeComponent();
     this.trackData = trackData;
 }