@@ -35,7 +35,9 @@ public AzureContextConfigDialog(Settings settings)
3535
3636 InitializeComponent ( ) ;
3737
38+ _tempAzureContexts . AddingNew += TempAzureContexts_AddingNew ;
3839 _dataGridView . DataSource = _tempAzureContexts ;
40+
3941 _dataGridView . CellToolTipTextNeeded += DataGridView_CellToolTipTextNeeded ;
4042
4143 _azureService = new AzureService ( _inputSettings ) ;
@@ -44,7 +46,7 @@ public AzureContextConfigDialog(Settings settings)
4446 _dataGridViewContextMenu = new ContextMenuStrip ( ) ;
4547
4648 _deleteContextMenuItem = new ToolStripMenuItem ( $ "Remove Context") ;
47- _deleteContextMenuItem . Click += MenuItem_RemoveAzureContextIrem_Click ;
49+ _deleteContextMenuItem . Click += MenuItem_RemoveAzureContextItem_Click ;
4850 _dataGridViewContextMenu . Items . Add ( _deleteContextMenuItem ) ;
4951 _dataGridViewContextMenu . Items . Add ( new ToolStripSeparator ( ) ) ;
5052
@@ -136,7 +138,20 @@ private void DataGridView_ContextMenu_Opened(object sender, EventArgs e)
136138 }
137139 }
138140
139- private void MenuItem_RemoveAzureContextIrem_Click ( object sender , EventArgs e )
141+ private void TempAzureContexts_AddingNew ( object sender , AddingNewEventArgs e )
142+ {
143+ var newRowIndex = _dataGridView . Rows . Count - 1 ;
144+ if ( newRowIndex < 0 || _dataGridView . Rows . Count <= newRowIndex || ! _dataGridView . Rows [ newRowIndex ] . IsNewRow )
145+ {
146+ return ;
147+ }
148+ var newRow = _dataGridView . Rows [ newRowIndex ] ;
149+ var newAzureContext = new AzureContext ( ) ;
150+ newAzureContext . Name = MakeAzureContextNameUnique ( newAzureContext . Name ) ;
151+ e . NewObject = newAzureContext ;
152+ }
153+
154+ private void MenuItem_RemoveAzureContextItem_Click ( object sender , EventArgs e )
140155 {
141156 if ( _dataGridView . SelectedRows . Count > 0 )
142157 {
@@ -174,8 +189,17 @@ private void MenuItem_SelectEnvironment_Click(object sender, EventArgs e)
174189 {
175190 selectedRow . Cells [ 1 ] . Value = envName ;
176191 selectedRow . Cells [ 1 ] . Selected = true ;
177- _dataGridView . NotifyCurrentCellDirty ( true ) ;
178- _dataGridView . Refresh ( ) ;
192+
193+ if ( selectedRow . DataBoundItem is AzureContext azureContext )
194+ {
195+ azureContext . AzureEnvironmentName = envName ;
196+ _dataGridView . Refresh ( ) ;
197+ }
198+ else
199+ {
200+ _dataGridView . NotifyCurrentCellDirty ( true ) ;
201+ _dataGridView . EndEdit ( ) ;
202+ }
179203
180204 ResetTenantMenuItems ( ) ;
181205
@@ -240,8 +264,17 @@ private void MenuItem_SelectTenant_Click(object sender, EventArgs e)
240264 {
241265 selectedRow . Cells [ 2 ] . Value = tenantId ;
242266 selectedRow . Cells [ 2 ] . Selected = true ;
243- _dataGridView . NotifyCurrentCellDirty ( true ) ;
244- _dataGridView . Refresh ( ) ;
267+
268+ if ( selectedRow . DataBoundItem is AzureContext azureContext )
269+ {
270+ azureContext . TenantId = tenantId ;
271+ _dataGridView . Refresh ( ) ;
272+ }
273+ else
274+ {
275+ _dataGridView . NotifyCurrentCellDirty ( true ) ;
276+ _dataGridView . EndEdit ( ) ;
277+ }
245278
246279 HideContextMenu ( sender , e ) ;
247280 UpdateSelectionLabel ( ) ;
@@ -252,38 +285,34 @@ private void DataGridView_CellEndEdit(object sender, DataGridViewCellEventArgs e
252285 {
253286 if ( e . ColumnIndex == 0 )
254287 {
255- if ( string . IsNullOrEmpty ( _dataGridView . Rows [ e . RowIndex ] . Cells [ e . ColumnIndex ] . Value ? . ToString ( ) ) )
288+ var azureContextName = _dataGridView . Rows [ e . RowIndex ] . Cells [ e . ColumnIndex ] . Value ? . ToString ( ) ;
289+ if ( string . IsNullOrEmpty ( azureContextName ) )
256290 {
257- _dataGridView . Rows [ e . RowIndex ] . Cells [ e . ColumnIndex ] . Value = "Default" ;
291+ azureContextName = "Default" ;
258292 }
259- else
260- {
261- var azureContextNames = _tempAzureContexts . Select ( x => x . Name ) . ToList ( ) ;
262- var azureContextName = _dataGridView . Rows [ e . RowIndex ] . Cells [ e . ColumnIndex ] . Value . ToString ( ) ;
263- var i = 1 ;
264- while ( azureContextNames . Count ( x => x == azureContextName ) > 1 )
265- {
266- azureContextName = $ "{ _dataGridView . Rows [ e . RowIndex ] . Cells [ e . ColumnIndex ] . Value } ({ i } )";
267- i ++ ;
268- }
269- _dataGridView . Rows [ e . RowIndex ] . Cells [ e . ColumnIndex ] . Value = azureContextName ;
293+ azureContextName = MakeAzureContextNameUnique ( azureContextName ) ;
294+ _dataGridView . Rows [ e . RowIndex ] . Cells [ e . ColumnIndex ] . Value = azureContextName ;
270295
271- if ( _dataGridView . SelectedRows . Count > 0 )
272- {
273- UpdateSelectionLabel ( ) ;
274- }
296+ if ( _dataGridView . SelectedRows . Count > 0 )
297+ {
298+ UpdateSelectionLabel ( ) ;
275299 }
276300 }
277301 }
278302
279303 private void DataGridView_RowsRemoved ( object sender , DataGridViewRowsRemovedEventArgs e )
280304 {
305+ _dataGridView . CancelEdit ( ) ;
281306 var deletedRowIndex = e . RowIndex ;
282307 if ( _dataGridView . SelectedRows . Count == 0 && _dataGridView . Rows . Count > 0 )
283308 {
284- _dataGridView . Rows [ deletedRowIndex - 1 ] . Selected = true ;
309+ var newRowIndex = deletedRowIndex > 0 ? deletedRowIndex - 1 : 0 ;
310+ _dataGridView . Rows [ newRowIndex ] . Selected = true ;
311+ }
312+ if ( _tempAzureContexts . Count == 0 )
313+ {
314+ _tempAzureContexts . AddNew ( ) ;
285315 }
286-
287316 }
288317
289318 private void DataGridView_SelectionChanged ( object sender , EventArgs e )
@@ -313,7 +342,7 @@ private void Button_Ok_Click(object sender, EventArgs e)
313342 _inputSettings . AzureContexts = _tempAzureContexts . AsList ( ) ;
314343 var selectedAzureContextName = GetSelectedAzureContextName ( ) ;
315344 _inputSettings . SelectAzureContext ( selectedAzureContextName ) ;
316- _inputSettings . SanitizeAzureContexts ( ) ;
345+ _inputSettings . SanitizeAzureContextsSetting ( ) ;
317346 Close ( ) ;
318347 }
319348
@@ -410,6 +439,19 @@ private string GetSelectedAzureContextName()
410439 return selectedAzureContextName ?? string . Empty ;
411440 }
412441
442+ private string MakeAzureContextNameUnique ( string azureContextName )
443+ {
444+ var newAzureContextName = azureContextName ;
445+ var azureContextNames = _tempAzureContexts . Select ( x => x . Name ) . ToList ( ) ;
446+ var i = 1 ;
447+ while ( azureContextNames . Count ( x => x == newAzureContextName ) > 0 )
448+ {
449+ newAzureContextName = $ "{ azureContextName } ({ i } )";
450+ i ++ ;
451+ }
452+ return newAzureContextName ;
453+ }
454+
413455 private void UpdateSelectionLabel ( string selectedAzureContextName = null )
414456 {
415457 if ( string . IsNullOrEmpty ( selectedAzureContextName ) )
0 commit comments