private void OnMapShapeSelected(MapInterActionHandler s, LayerEventArg e) { if (CurrentLayer != null && CurrentLayer.LayerType == "ShapefileClass" && LayerSelector != null) { SelectedShapeIndexes = e.SelectedIndexes.ToList(); if (SelectedShapeIndexes.Count > 0) { var sf = (Shapefile)CurrentLayer.LayerObject; int fileNameField = sf.FieldIndexByName["Filename"]; int gpsField = sf.FieldIndexByName["GPS"]; switch (LayerSelector.GetType().Name) { case "DataGrid": var dataGrid = (System.Windows.Controls.DataGrid)LayerSelector; string fileName = sf.CellValue[fileNameField, SelectedShapeIndexes[0]]; string gps = sf.CellValue[gpsField, SelectedShapeIndexes[0]]; string itemGPS = ""; string itemFilename = ""; foreach (var item in dataGrid.Items) { switch (dataGrid.Name) { case "dataGridTrips": Trip trip = (Trip)item; itemGPS = trip.GPS.DeviceName; itemFilename = trip.Track.FileName; break; case "dataGridGPXFiles": GPXFile gpxFile = (GPXFile)item; itemGPS = gpxFile.GPS.DeviceName; itemFilename = gpxFile.FileName; break; } if (itemGPS == gps && itemFilename == fileName) { dataGrid.SelectedItem = item; dataGrid.ScrollIntoView(item); break; } } break; } } } }
private void ExportItemGridView_CellDoubleClick(object sender, DataGridViewCellEventArgs e) { // double-clicked node column cell, select a node! if (e.ColumnIndex == ColumnNode.Index) { if (Loader.Core.DoHitByNameDialog(null) && Loader.Core.SelNodeCount > 0) { int highestRowIndexEdited = e.RowIndex; var selectedRow = ExportItemGridView.Rows[e.RowIndex]; ExportItem existingItem = selectedRow.Tag as ExportItem; IINode node = Loader.Core.GetSelNode(0); if (existingItem == null) { existingItem = TryAddExportItem(selectedRow, node.Handle); } else { if (existingItem.Layers != null && existingItem.Layers.Count > 0) { MessageBox.Show("You can't specify a Node when export is layer based"); return; } existingItem.NodeHandle = node.Handle; } // may be null after trying to add a node that already exists in another row if (existingItem != null) { SetRowData(selectedRow, existingItem); } // add remaining selected nodes as new rows for (int i = 1; i < Loader.Core.SelNodeCount; ++i) { int rowIndex = ExportItemGridView.Rows.Add(); var newRow = ExportItemGridView.Rows[rowIndex]; ExportItem newItem = TryAddExportItem(newRow, Loader.Core.GetSelNode(i).Handle); // may be null after trying to add a node that already exists in another row if (newItem == null) { continue; } SetRowData(newRow, newItem); highestRowIndexEdited = rowIndex; } // have to explicitly set it dirty for an edge case: // when a new row is added "automatically-programmatically", through notify cell dirty and endedit(), // if the user then clicks on the checkbox of the newly added row, // it doesn't add a new row "automatically", whereas otherwise it will. ExportItemGridView.CurrentCell = ExportItemGridView[e.ColumnIndex, highestRowIndexEdited]; ExportItemGridView.NotifyCurrentCellDirty(true); ExportItemGridView.EndEdit(); } } // double-clicked layers column cell, select some layers! if (e.ColumnIndex == ColumnLayers.Index) { layersRowIndex = e.RowIndex; layersColumnIndex = e.ColumnIndex; ExportItem existingItem = ExportItemGridView.Rows[layersRowIndex].Tag as ExportItem; layerSelector = new LayerSelector(); layerSelector.Show(); layerSelector.FillLayerSelector(existingItem?.Layers); layerSelector.OnConfirmButtonClicked += SceneExplorerOnClosed; } }