예제 #1
0
파일: EditTrail.cs 프로젝트: tsofron/trails
 private void MoveRow(int isUp)
 {
     if (this.EList.SelectedItems.Count == 1)
     {
         IList selected = this.EList.SelectedItems;
         IList <EditTrailRow> result = (IList <EditTrailRow>) this.EList.RowData;
         if (selected != null && selected.Count > 0)
         {
             for (int j = selected.Count - 1; j >= 0; j--)
             {
                 for (int i = result.Count - 1; i >= 0; i--)
                 {
                     EditTrailRow r = (EditTrailRow)((IList <EditTrailRow>) this.EList.RowData)[i];
                     if ((isUp < 0 && i - isUp < result.Count ||
                          isUp > 0 && i - isUp >= 0) &&
                         selected[j].Equals(r))
                     {
                         result[i]        = result[i - isUp];
                         result[i - isUp] = r;
                         break;
                     }
                 }
             }
             this.EList.RowData = result;
             this.m_TrailToEdit.TrailLocations = EditTrailRow.getTrailGPSLocation((IList <EditTrailRow>) this.EList.RowData);
         }
     }
 }
예제 #2
0
파일: EditTrail.cs 프로젝트: tsofron/trails
 void EList_CheckedChanged(object sender, TreeList.ItemEventArgs e)
 {
     if (e.Item is EditTrailRow)
     {
         EditTrailRow t = e.Item as EditTrailRow;
         t.TrailGPS.Required = !t.TrailGPS.Required;
     }
 }
예제 #3
0
파일: EditTrail.cs 프로젝트: tsofron/trails
        void EList_SelectedItemsChanged(object sender, System.EventArgs e)
        {
            IList <EditTrailRow> result = new List <EditTrailRow>();

            if (this.EList.SelectedItems.Count == 1)
            {
                this.btnUp.Enabled   = true;
                this.btnDown.Enabled = true;
            }
            else
            {
                this.btnUp.Enabled   = false;
                this.btnDown.Enabled = false;
            }

            if (this.EList.SelectedItems.Count > 0)
            {
                IList selected = EList.SelectedItems;
                if (selected != null && selected.Count > 0)
                {
                    for (int j = 0; j < selected.Count; j++)
                    {
                        for (int i = ((IList <EditTrailRow>) this.EList.RowData).Count - 1; i >= 0; i--)
                        {
                            EditTrailRow r = (EditTrailRow)((IList <EditTrailRow>) this.EList.RowData)[i];
                            if (selected[j].Equals(r))
                            {
                                result.Add(r);
                            }
                        }
                    }
                }
                this.btnDelete.Enabled = true;
            }
            else
            {
                this.btnDelete.Enabled = false;
            }

            if (!this.m_updatingFromMap)
            {
                this.m_layer.SelectedTrailPoints = EditTrailRow.getTrailGPSLocation(result);
            }
        }
예제 #4
0
파일: EditTrail.cs 프로젝트: tsofron/trails
        private void EList_DeleteRow()
        {
            int lastDeleted = -1;

            if (this.EList.SelectedItems.Count > 0 && ((IList <EditTrailRow>) this.EList.RowData).Count > 0)
            {
                IList selected = EList.SelectedItems;
                if (selected != null && selected.Count > 0)
                {
                    for (int j = selected.Count - 1; j >= 0; j--)
                    {
                        IList <EditTrailRow> list = ((IList <EditTrailRow>) this.EList.RowData);
                        for (int i = 0; i < list.Count; i++)
                        {
                            //Only first selected
                            if (selected[j].Equals(list[i]))
                            {
                                ((IList <EditTrailRow>)EList.RowData).RemoveAt(i);
                                //Required to make ST see the update, Refresh() is not enough?
                                this.EList.RowData           = ((IList <EditTrailRow>) this.EList.RowData);
                                m_TrailToEdit.TrailLocations = EditTrailRow.getTrailGPSLocation((IList <EditTrailRow>)EList.RowData);
                                m_layer.TrailPoints          = m_TrailToEdit.TrailLocations;
                                lastDeleted = i;
                                break;
                            }
                        }
                    }
                }
            }
            this.EList.Refresh();
            if (EList.SelectedItems.Count == 1 && lastDeleted >= 0)
            {
                if (lastDeleted > 0)
                {
                    lastDeleted--;
                }
                if (lastDeleted < ((IList <EditTrailRow>) this.EList.RowData).Count)
                {
                    EList.SelectedItems = new object[] { ((IList <EditTrailRow>) this.EList.RowData)[lastDeleted] };
                }
            }
        }
예제 #5
0
파일: EditTrail.cs 프로젝트: tsofron/trails
        public void SMKDoubleClick(object sender, System.EventArgs e)
        {
            TreeList.RowHitState hitState = TreeList.RowHitState.Nothing;
            EditTrailRow         t        = (EditTrailRow)EList.RowHitTest(new Point(this.m_lastMouseArg.X, this.m_lastMouseArg.Y), out hitState);

            if (t != null && hitState != TreeList.RowHitState.Nothing)
            {
                for (int i = 0; i < ((IList <EditTrailRow>) this.EList.RowData).Count; i++)
                {
                    EditTrailRow r = (EditTrailRow)((IList <EditTrailRow>) this.EList.RowData)[i];
                    if (t.Equals(r))
                    {
                        this.m_rowDoubleClickSelected = i;
                        break;
                    }
                }
                // Check the subitem clicked
                //TODO: Not handling resize (scrolling) correctly
                int nStart = this.m_lastMouseArg.Location.X;// EList.PointToScreen(m_lastMouseArg.Location).X;
                int spos   = this.EList.Location.X;
                int epos   = spos;
                for (int i = 0; i < EList.Columns.Count; i++)
                {
                    epos += this.EList.Columns[i].Width;
                    if (nStart >= spos && nStart < epos)
                    {
                        this.m_subItemSelected = i;
                        break;
                    }

                    spos = epos;
                }
                //Only edit first rows
                if (this.m_subItemSelected <= cMaxEditColumn)
                {
                    this.m_subItemText = (new EditTrailLabelProvider()).GetText(t, this.EList.Columns[this.m_subItemSelected]);
                    ///The positioning is incorrect, set at header
                    int rowHeight = this.EList.HeaderRowHeight; // (EList.Height - EList.HeaderRowHeight) / ((IList<TrailGPSLocation>)EList.RowData).Count;
                    int yTop      = 0;                          // EList.HeaderRowHeight + rowSelected * rowHeight;
                    this.editBox.Size     = new System.Drawing.Size(epos - spos, rowHeight);
                    this.editBox.Location = new System.Drawing.Point(spos - 1, yTop);
                    this.editBox.Text     = m_subItemText;
                    this.editBox.Visible  = true;
                    this.editBox.SelectAll();
                    this.editBox.Focus();
                }
                //else if (m_subItemSelected > 99)
                //{
                //    //TODO: disabled, not working yet
                //    if (t.m_time != null && m_trailResult.Activity != null && //!t.m_firstRow &&
                //        m_trailResult.Activity.GPSRoute != null)
                //    {
                //        for (int i = m_rowDoubleClickSelected - 1; i >= 0; i--)
                //        {
                //            if (((IList<EditTrailRow>)EList.RowData)[i].m_time != null)
                //            {
                //                IGPSRoute route = new GPSRoute();
                //                DateTime startTime = (DateTime)((IList<EditTrailRow>)EList.RowData)[i].m_date;
                //                DateTime endTime = (DateTime)t.m_date;
                //                ITimeValueEntry<float> startDist = m_trailResult.ActivityDistanceMetersTrack.GetInterpolatedValue(startTime);
                //                ITimeValueEntry<float> endDist = m_trailResult.ActivityDistanceMetersTrack.GetInterpolatedValue(endTime);
                //                double speed = (endDist.Value - startDist.Value) /
                //                    (m_trailResult.getElapsedResult(endTime) - m_trailResult.getElapsedResult(startTime));
                //                for (int j = 0; j < m_trailResult.Activity.GPSRoute.Count; j++)
                //                {
                //                    ITimeValueEntry<IGPSPoint> g = m_trailResult.Activity.GPSRoute[j];
                //                    DateTime date = m_trailResult.Activity.GPSRoute.EntryDateTime(g);
                //                    if (date < endTime && date > startTime)
                //                    {
                //                        ITimeValueEntry<float> dist = m_trailResult.ActivityDistanceMetersTrack.GetInterpolatedValue(date);
                //                        uint s = (uint)((dist.Value-startDist.Value)/speed)+startDist.ElapsedSeconds;
                //                        g = new TimeValueEntry<IGPSPoint>(s, g.Value);
                //                        date = m_trailResult.Activity.GPSRoute.EntryDateTime(g);
                //                        //date = startTime+TimeSpan.FromSeconds(s);
                //                    }
                //                    route.Add(date, g.Value);
                //                }
                //                m_trailResult.Activity.GPSRoute = route;
                //                break;
                //            }
                //        }
                //    }
                //}
            }
        }
예제 #6
0
파일: EditTrail.cs 프로젝트: tsofron/trails
        private void EList_AddRow()
        {
            int i = EList_SelectedRow();

            if (i < 0)
            {
                if (((IList <EditTrailRow>) this.EList.RowData).Count > 0)
                {
                    i = ((IList <EditTrailRow>) this.EList.RowData).Count - 1;
                }
                else
                {
                    i = 0;
                }
            }
            TrailGPSLocation sel;

            if (((IList <EditTrailRow>) this.EList.RowData).Count > 0)
            {
                sel        = new TrailGPSLocation(((IList <EditTrailRow>) this.EList.RowData)[i].TrailGPS);
                sel.GpsLoc = new GPSLocation(sel.LatitudeDegrees + 0.0001F, sel.LongitudeDegrees + 0.0001F);
            }
            else
            {
                IGPSLocation l = m_layer.GetCenterMap();
                sel = new TrailGPSLocation(l, this.m_TrailToEdit.Radius);
            }

            sel.Name += " " + ZoneFiveSoftware.Common.Visuals.CommonResources.Text.ActionNew;

            //If a point is selected on the track, use it instead
            IList <IActivity> activities = new List <IActivity> {
                Controller.TrailController.Instance.ReferenceActivity
            };
            IList <IItemTrackSelectionInfo> selectedGPS =
                TrailsItemTrackSelectionInfo.SetAndAdjustFromSelectionFromST(m_view.RouteSelectionProvider.SelectedItems, activities);

            if (TrailsItemTrackSelectionInfo.ContainsData(selectedGPS))
            {
                IList <TrailGPSLocation> loc = TrailSelectorControl.GetGPS(this.Trail, activities, selectedGPS);
                if (loc.Count > 0 && loc[0] != null)
                {
                    sel.GpsLoc = loc[0];
                }
            }

            EditTrailRow newRow = new EditTrailRow(sel);

            if (((IList <EditTrailRow>) this.EList.RowData).Count > 0)
            {
                ((IList <EditTrailRow>) this.EList.RowData).Insert(i + 1, newRow);
            }
            else
            {
                this.EList.RowData = new List <EditTrailRow> {
                    newRow
                };
            }

            //Make ST see the update
            this.EList.RowData = ((IList <EditTrailRow>) this.EList.RowData);
            foreach (EditTrailRow t in (IList <EditTrailRow>) this.EList.RowData)
            {
                //Note: For reverse results, this is incorrect (but reverse results are only for incomplete, so no impact)
                this.EList.SetChecked(t, t.TrailGPS.Required);
            }
            this.EList.SelectedItems = new object[] { newRow };
            this.EList.Refresh();

            this.m_TrailToEdit.TrailLocations = EditTrailRow.getTrailGPSLocation((IList <EditTrailRow>) this.EList.RowData);
            this.m_layer.TrailPoints          = m_TrailToEdit.TrailLocations;
            this.m_layer.SelectedTrailPoints  = new List <TrailGPSLocation> {
                sel
            };
            this.m_layer.Refresh();
        }
예제 #7
0
파일: EditTrail.cs 프로젝트: tsofron/trails
        private void RefreshResult(bool recalculate)
        {
            if (Controller.TrailController.Instance.ReferenceActivity != null)
            {
                if (recalculate || this.m_trailResult == null)
                {
                    ActivityTrail at = new ActivityTrail(this.m_TrailToEdit);
                    at.CalcResults(new List <IActivity> {
                        Controller.TrailController.Instance.ReferenceActivity
                    }, this.m_TrailToEdit.MaxRequiredMisses, true, null);
                    if (at.Results.Count > 0)
                    {
                        this.m_trailResult = at.Results[0].Result;
                    }
                    else
                    {
                        at.Init();
                        at.CalcResults(new List <IActivity> {
                            Controller.TrailController.Instance.ReferenceActivity
                        }, 99, true, null);
                        if (at.Results.Count > 0)
                        {
                            //The best result is the result with most matches
                            //forward may be better than reverse, but those should be sorted first anyway
                            int currMaxRes = -1;
                            foreach (TrailResultWrapper tr in at.Results)
                            {
                                int res = 0;
                                foreach (DateTime d in tr.Result.TrailPointDateTime)
                                {
                                    if (d > DateTime.MinValue)
                                    {
                                        res++;
                                    }
                                }
                                if (res > currMaxRes)
                                {
                                    currMaxRes         = res;
                                    this.m_trailResult = tr.Result;
                                }
                            }
                        }
                        else
                        {
                            if (at.IncompleteResults.Count > 0)
                            {
                                //Result is already sorted after no of matches
                                this.m_trailResult = at.IncompleteResults[0];
                            }
                            else
                            {
                                this.m_trailResult = null;
                            }
                        }
                    }
                    at.Init();
                }
            }
            IList <EditTrailRow> l = EditTrailRow.getEditTrailRows(this.m_TrailToEdit, this.m_trailResult);
            int sel = EList_SelectedRow(); //Get one of the selected, if any

            this.EList.RowData = l;
            if (sel >= 0)
            {
                //This is incorrect if the trail was reversed
                this.EList.SelectedItems = new object[] { l[sel] };
            }

            foreach (EditTrailRow t in (IList <EditTrailRow>) this.EList.RowData)
            {
                //Note: For reverse results, this is incorrect (but reverse results are only for incomplete, so no impact)
                this.EList.SetChecked(t, t.TrailGPS.Required);
            }
        }