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