@@ -54,7 +54,7 @@ public GtkNewProjectDialogBackend ()
5454 // Set up the list store so the test framework can work out the correct columns
5555 SemanticModelAttribute modelAttr = new SemanticModelAttribute ( "templateCategoriesListStore__Name" , "templateCategoriesListStore__Icon" , "templateCategoriesListStore__Category" ) ;
5656 TypeDescriptor . AddAttributes ( templateCategoriesTreeStore , modelAttr ) ;
57- modelAttr = new SemanticModelAttribute ( "templateListStore__Name" , "templateListStore__Icon" , "templateListStore__Template" ) ;
57+ modelAttr = new SemanticModelAttribute ( "templateListStore__Name" , "templateListStore__Icon" , "templateListStore__Template" , "templateListStore__Category" , "templateListStore__Language" ) ;
5858 TypeDescriptor . AddAttributes ( templatesTreeStore , modelAttr ) ;
5959
6060 templateCategoriesTreeView . Selection . Changed += TemplateCategoriesTreeViewSelectionChanged ;
@@ -138,14 +138,16 @@ static void SetTemplateTextCellData (TreeViewColumn col, CellRenderer renderer,
138138 var templateTextRenderer = ( GtkTemplateCellRenderer ) renderer ;
139139 templateTextRenderer . Template = template ;
140140 templateTextRenderer . TemplateIcon = model . GetValue ( it , TemplateIconColumn ) as Xwt . Drawing . Image ;
141- templateTextRenderer . TemplateCategory = model . GetValue ( it , TemplateNameColumn ) as string ;
141+ templateTextRenderer . TemplateCategory = model . GetValue ( it , TemplateOwnCategoryNameColumn ) as string ;
142142 }
143143
144144 static void SetLanguageCellData ( TreeViewColumn col , CellRenderer renderer , TreeModel model , TreeIter it )
145145 {
146146 var template = ( SolutionTemplate ) model . GetValue ( it , TemplateColumn ) ;
147+ var language = ( string ) model . GetValue ( it , TemplateA11yLanguageNameColumn ) ;
147148 var languageRenderer = ( LanguageCellRenderer ) renderer ;
148149 languageRenderer . Template = template ;
150+ languageRenderer . SelectedLanguage = language ?? template ? . Language ?? string . Empty ;
149151 }
150152
151153 void HandlePopup ( SolutionTemplate template , uint eventTime )
@@ -228,6 +230,8 @@ void AddLanguageMenuItems (Xwt.Menu menu, SolutionTemplate template)
228230 languageCellRenderer . SelectedLanguage = language ;
229231 controller . SelectedLanguage = language ;
230232 templatesTreeView . QueueDraw ( ) ;
233+ if ( templatesTreeView . Selection . GetSelected ( out var selIter ) )
234+ templatesTreeStore . SetValue ( selIter , TemplateA11yLanguageNameColumn , languageCellRenderer . SelectedLanguage ) ;
231235 ShowSelectedTemplate ( ) ;
232236 } ;
233237 menu . Items . Add ( menuItem ) ;
@@ -390,38 +394,58 @@ void ShowTemplatesForCategory (TemplateCategory category)
390394 languageCellRenderer . RenderRecentTemplate = false ;
391395 foreach ( TemplateCategory subCategory in category . Categories ) {
392396 var iter = templatesTreeStore . AppendValues (
393- MarkupTopLevelCategoryName ( subCategory . Name ) ,
397+ subCategory . Name ,
394398 null ,
399+ null ,
400+ subCategory . Name ,
395401 null ) ;
396402
397403 foreach ( SolutionTemplate template in subCategory . Templates ) {
398404 if ( template . HasProjects || controller . IsNewSolution ) {
405+ string language = GetLanguageForTemplate ( template ) ;
399406 templatesTreeStore . AppendValues (
400407 iter ,
401408 template . Name ,
402409 GetIcon ( template . IconId , IconSize . Dnd ) ,
403- template ) ;
410+ template ,
411+ subCategory . Name ,
412+ language ) ;
404413 }
405414 }
406415 }
407416 templatesTreeView . ExpandAll ( ) ;
408- }
409-
417+ }
418+
419+ string GetLanguageForTemplate ( SolutionTemplate template )
420+ {
421+ string language = controller . SelectedLanguage ;
422+ if ( template . AvailableLanguages . Contains ( language ) ) {
423+ return language ;
424+ }
425+
426+ return template . AvailableLanguages . OrderBy ( item => item ) . FirstOrDefault ( ) ;
427+ }
428+
410429 void ShowRecentTemplates ( )
411430 {
412431 templateTextRenderer . RenderRecentTemplate = true ;
413- languageCellRenderer . RenderRecentTemplate = true ;
432+ languageCellRenderer . RenderRecentTemplate = true ;
433+ var subCategoryName = Core . GettextCatalog . GetString ( "Recently used templates" ) ;
414434 var iter = templatesTreeStore . AppendValues (
415- MarkupTopLevelCategoryName ( Core . GettextCatalog . GetString ( "Recently used templates" ) ) ,
435+ subCategoryName ,
436+ null ,
416437 null ,
438+ subCategoryName ,
417439 null ) ;
418440 foreach ( SolutionTemplate template in controller . RecentTemplates ) {
419441 if ( template . HasProjects || controller . IsNewSolution ) {
420442 templatesTreeStore . AppendValues (
421443 iter ,
422- controller . GetCategoryPathText ( template ) ,
444+ template . Name ,
423445 GetIcon ( template . IconId , IconSize . Dnd ) ,
424- template ) ;
446+ template ,
447+ controller . GetCategoryPathText ( template ) ,
448+ template . Language ) ;
425449 }
426450 }
427451 templatesTreeView . ExpandAll ( ) ;
@@ -460,6 +484,13 @@ SolutionTemplate GetSelectedTemplate ()
460484
461485 void ShowTemplate ( SolutionTemplate template )
462486 {
487+ string language = GetLanguageForTemplate ( controller . SelectedTemplate ) ;
488+
489+ TreeIter item ;
490+ if ( templatesTreeView . Selection . GetSelected ( out item ) ) {
491+ templatesTreeStore . SetValue ( item , TemplateA11yLanguageNameColumn , language ) ;
492+ }
493+
463494 templateNameLabel . Markup = MarkupTemplateName ( template . Name ) ;
464495 templateDescriptionLabel . Text = template . Description ;
465496 templateImage . Image = controller . GetImage ( template ) ;
0 commit comments