@@ -149,6 +149,54 @@ static string GetRenderedText(TerminalAppTestDriver currentDriver)
149149 Assert . AreEqual ( "a" , ( ( SortRow ) view . CurrentSnapshot . GetRowModel ( 0 ) ) . Name ) ;
150150 }
151151
152+ [ TestMethod ]
153+ public void DataGrid_Header_Sort_Button_Uses_Ctrl_Click_For_Additive_Sort ( )
154+ {
155+ var groupAccessor = new BindingAccessor < string > ( "group" , o => ( ( GroupedSortRow ) o ) . Group , ( o , v ) => ( ( GroupedSortRow ) o ) . Group = v ) ;
156+ var nameAccessor = new BindingAccessor < string > ( "name" , o => ( ( GroupedSortRow ) o ) . Name , ( o , v ) => ( ( GroupedSortRow ) o ) . Name = v ) ;
157+
158+ var doc = new DataGridListDocument < GroupedSortRow > ( ) ;
159+ doc . SetColumns ( new [ ]
160+ {
161+ new DataGridColumnInfo ( "group" , "Group" , typeof ( string ) , ReadOnly : false , groupAccessor ) ,
162+ new DataGridColumnInfo ( "name" , "Name" , typeof ( string ) , ReadOnly : false , nameAccessor ) ,
163+ } ) ;
164+
165+ doc . AddRow ( new GroupedSortRow { Group = "B" , Name = "a" , Sequence = 0 } ) ;
166+ doc . AddRow ( new GroupedSortRow { Group = "A" , Name = "b" , Sequence = 1 } ) ;
167+ doc . AddRow ( new GroupedSortRow { Group = "A" , Name = "a" , Sequence = 2 } ) ;
168+
169+ using var view = new DataGridDocumentView ( doc ) ;
170+
171+ var grid = new DataGridControl { View = view , ShowRowAnchor = false } ;
172+ grid . Columns . Add ( new DataGridColumn < string > { Key = "group" , TypedValueAccessor = groupAccessor , Width = GridLength . Fixed ( 7 ) , Sortable = true } ) ;
173+ grid . Columns . Add ( new DataGridColumn < string > { Key = "name" , TypedValueAccessor = nameAccessor , Width = GridLength . Fixed ( 6 ) , Sortable = true } ) ;
174+
175+ using var driver = new TerminalAppTestDriver ( grid , TerminalHostKind . Fullscreen , new TerminalSize ( 16 , 5 ) ) ;
176+ driver . Tick ( ) ;
177+
178+ var groupSortButtonX = grid . Bounds . X + 6 ;
179+ var nameSortButtonX = grid . Bounds . X + 13 ;
180+ var sortButtonY = grid . Bounds . Y ;
181+
182+ driver . Backend . PushEvent ( new TerminalMouseEvent { Kind = TerminalMouseKind . Down , Button = TerminalMouseButton . Left , X = groupSortButtonX , Y = sortButtonY } ) ;
183+ driver . Backend . PushEvent ( new TerminalMouseEvent { Kind = TerminalMouseKind . Up , Button = TerminalMouseButton . Left , X = groupSortButtonX , Y = sortButtonY } ) ;
184+ driver . Tick ( ) ;
185+
186+ driver . Backend . PushEvent ( new TerminalMouseEvent { Kind = TerminalMouseKind . Down , Button = TerminalMouseButton . Left , X = nameSortButtonX , Y = sortButtonY , Modifiers = TerminalModifiers . Ctrl } ) ;
187+ driver . Backend . PushEvent ( new TerminalMouseEvent { Kind = TerminalMouseKind . Up , Button = TerminalMouseButton . Left , X = nameSortButtonX , Y = sortButtonY , Modifiers = TerminalModifiers . Ctrl } ) ;
188+ driver . Tick ( ) ;
189+
190+ var sorts = grid . SortDescriptions . ToArray ( ) ;
191+ CollectionAssert . AreEqual (
192+ new [ ]
193+ {
194+ new DataGridSortDescription ( "group" , DataGridSortDirection . Descending ) ,
195+ new DataGridSortDescription ( "name" , DataGridSortDirection . Descending ) ,
196+ } ,
197+ sorts ) ;
198+ }
199+
152200 private sealed class SortRow
153201 {
154202 public string Name { get ; set ; } = string . Empty ;
0 commit comments