Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
82 changes: 33 additions & 49 deletions src/ui/Features/Assa/AssaAttachmentsWindow.cs
Original file line number Diff line number Diff line change
Expand Up @@ -92,58 +92,42 @@ private static Border MakeLeftView(AssaAttachmentsViewModel vm)
HorizontalAlignment = HorizontalAlignment.Stretch,
};

var dataGrid = new DataGrid
// No header sorting: the attachment order is written back to the subtitle
// footer ([Fonts]/[Graphics] sections) in list order on OK, so the collection
// order is not presentation-only.
var dataGrid = TableViewExtras.MakeTableView(multiSelect: false);
dataGrid.DataContext = vm;
dataGrid.ItemsSource = vm.Attachments;

dataGrid.Columns.Add(new SeTableViewColumn
{
AutoGenerateColumns = false,
SelectionMode = DataGridSelectionMode.Single,
CanUserResizeColumns = true,
CanUserSortColumns = true,
HorizontalAlignment = HorizontalAlignment.Stretch,
VerticalAlignment = VerticalAlignment.Stretch,
Width = double.NaN,
Height = double.NaN,
DataContext = vm,
ItemsSource = vm.Attachments,
Columns =
{
new DataGridTextColumn
{
Header = Se.Language.General.FileName,
CellTheme = UiUtil.DataGridNoBorderNoPaddingCellTheme,
Binding = new Binding(nameof(AssaAttachmentItem.FileName)),
IsReadOnly = true,
},
new DataGridTextColumn
{
Header = Se.Language.General.Type,
CellTheme = UiUtil.DataGridNoBorderNoPaddingCellTheme,
Binding = new Binding(nameof(AssaAttachmentItem.Category)),
IsReadOnly = true,
Width = new DataGridLength(1, DataGridLengthUnitType.Star),
},
new DataGridTextColumn
{
Header = Se.Language.General.Size,
CellTheme = UiUtil.DataGridNoBorderNoPaddingCellTheme,
Binding = new Binding(nameof(AssaAttachmentItem.Size)),
IsReadOnly = true,
Width = new DataGridLength(1, DataGridLengthUnitType.Star),
},
},
};
dataGrid.Bind(DataGrid.SelectedItemProperty, new Binding(nameof(vm.SelectedAttachment)) { Source = vm });
Header = Se.Language.General.FileName,
CellTheme = UiUtil.TableViewCellTheme,
HeaderTheme = UiUtil.TableViewColumnHeaderTheme,
Binding = new Binding(nameof(AssaAttachmentItem.FileName)),
Width = new GridLength(1, GridUnitType.Star),
});
dataGrid.Columns.Add(new SeTableViewColumn
{
Header = Se.Language.General.Type,
CellTheme = UiUtil.TableViewCellTheme,
HeaderTheme = UiUtil.TableViewColumnHeaderTheme,
Binding = new Binding(nameof(AssaAttachmentItem.Category)),
Width = new GridLength(140),
});
dataGrid.Columns.Add(new SeTableViewColumn
{
Header = Se.Language.General.Size,
CellTheme = UiUtil.TableViewCellTheme,
HeaderTheme = UiUtil.TableViewColumnHeaderTheme,
Binding = new Binding(nameof(AssaAttachmentItem.Size)),
Width = new GridLength(100),
});

dataGrid.Bind(TableView.SelectedItemProperty, new Binding(nameof(vm.SelectedAttachment)) { Source = vm });
dataGrid.SelectionChanged += vm.DataGridSelectionChanged;
dataGrid.KeyDown += vm.AttachmentsDataGridKeyDown;
dataGrid.AddHandler(InputElement.KeyDownEvent, (object? _, KeyEventArgs e) =>
{
if (e.Key is Key.Home or Key.End && dataGrid.ItemsSource is IList items && items.Count > 0)
{
var target = e.Key == Key.Home ? items[0] : items[^1];
dataGrid.SelectedItem = target;
dataGrid.ScrollIntoView(target, null);
e.Handled = true;
}
}, Avalonia.Interactivity.RoutingStrategies.Tunnel);
TableViewExtras.AttachHomeEndNavigation(dataGrid);

var flyout = new MenuFlyout();
flyout.Opening += vm.AttachmentsContextMenuOpening;
Expand Down
115 changes: 58 additions & 57 deletions src/ui/Features/Assa/AssaStylePickerWindow.cs
Original file line number Diff line number Diff line change
Expand Up @@ -66,75 +66,76 @@ public AssaStylePickerWindow(AssaStylePickerViewModel vm)

private static Border MakeDataGrid(AssaStylePickerViewModel vm)
{
var usagesColumn = new DataGridTextColumn
var usagesColumn = new SeTableViewColumn
{
Header = Se.Language.General.Usages,
CellTheme = UiUtil.DataGridNoBorderNoPaddingCellTheme,
CellTheme = UiUtil.TableViewCellTheme,
HeaderTheme = UiUtil.TableViewColumnHeaderTheme,
Binding = new Binding(nameof(StyleDisplay.FontSize)),
IsReadOnly = true,
Width = new GridLength(90),
};
usagesColumn.Bind(DataGridTextColumn.IsVisibleProperty, new Binding(nameof(vm.ShowUsageCount))
usagesColumn.Bind(SeTableViewColumn.IsVisibleProperty, new Binding(nameof(vm.ShowUsageCount))
{
Mode = BindingMode.OneWay,
Source = vm,
});

var dataGrid = new DataGrid
// No header sorting: the checked styles are imported/applied in list order
// (e.g. appended to the file's style list, which is written to the header),
// so the collection order is not presentation-only.
var dataGrid = TableViewExtras.MakeTableView(multiSelect: false);
dataGrid.DataContext = vm;
dataGrid.ItemsSource = vm.Styles;

// The usages column has a bound visibility, so all columns go through a
// TableViewColumnManager (TableView itself has no column IsVisible).
var columnManager = new TableViewColumnManager(dataGrid);
columnManager.Add(new SeTableViewColumn
{
AutoGenerateColumns = false,
SelectionMode = DataGridSelectionMode.Single,
CanUserResizeColumns = true,
CanUserSortColumns = true,
HorizontalAlignment = HorizontalAlignment.Stretch,
VerticalAlignment = VerticalAlignment.Stretch,
Width = double.NaN,
Height = double.NaN,
DataContext = vm,
ItemsSource = vm.Styles,
Columns =
Header = Se.Language.General.Enabled,
CellTheme = UiUtil.TableViewNoPaddingCellTheme,
HeaderTheme = UiUtil.TableViewColumnHeaderTheme,
CellTemplate = new FuncDataTemplate<StyleDisplay>((item, _) =>
new Border
{
new DataGridTemplateColumn
{
Header = Se.Language.General.Enabled,
CellTheme = UiUtil.DataGridNoBorderNoPaddingCellTheme,
CellTemplate = new FuncDataTemplate<StyleDisplay>((item, _) =>
new Border
{
Background = Brushes.Transparent, // Prevents highlighting
Padding = new Thickness(4),
Child = new CheckBox
{
[!ToggleButton.IsCheckedProperty] = new Binding(nameof(StyleDisplay.IsSelected)),
HorizontalAlignment = HorizontalAlignment.Center
}
}),
Width = new DataGridLength(1, DataGridLengthUnitType.Auto)
},
new DataGridTextColumn
{
Header = Se.Language.General.Name,
CellTheme = UiUtil.DataGridNoBorderNoPaddingCellTheme,
Binding = new Binding(nameof(StyleDisplay.Name)),
IsReadOnly = true,
},
new DataGridTextColumn
Background = Brushes.Transparent, // Prevents highlighting
Padding = new Thickness(4),
Child = new CheckBox
{
Header = Se.Language.General.FontName,
CellTheme = UiUtil.DataGridNoBorderNoPaddingCellTheme,
Binding = new Binding(nameof(StyleDisplay.FontName)),
IsReadOnly = true,
},
new DataGridTextColumn
{
Header = Se.Language.General.FontSize,
CellTheme = UiUtil.DataGridNoBorderNoPaddingCellTheme,
Binding = new Binding(nameof(StyleDisplay.FontSize)),
IsReadOnly = true,
},
usagesColumn,
},
};
dataGrid.Bind(DataGrid.SelectedItemProperty, new Binding(nameof(vm.SelectedStyle)) { Source = vm });
[!ToggleButton.IsCheckedProperty] = new Binding(nameof(StyleDisplay.IsSelected)),
HorizontalAlignment = HorizontalAlignment.Center
}
}),
// Content-sized (Auto) on the DataGrid; TableView treats Auto as star.
Width = new GridLength(80),
});
columnManager.Add(new SeTableViewColumn
{
Header = Se.Language.General.Name,
CellTheme = UiUtil.TableViewCellTheme,
HeaderTheme = UiUtil.TableViewColumnHeaderTheme,
Binding = new Binding(nameof(StyleDisplay.Name)),
Width = new GridLength(1, GridUnitType.Star),
});
columnManager.Add(new SeTableViewColumn
{
Header = Se.Language.General.FontName,
CellTheme = UiUtil.TableViewCellTheme,
HeaderTheme = UiUtil.TableViewColumnHeaderTheme,
Binding = new Binding(nameof(StyleDisplay.FontName)),
Width = new GridLength(180),
});
columnManager.Add(new SeTableViewColumn
{
Header = Se.Language.General.FontSize,
CellTheme = UiUtil.TableViewCellTheme,
HeaderTheme = UiUtil.TableViewColumnHeaderTheme,
Binding = new Binding(nameof(StyleDisplay.FontSize)),
Width = new GridLength(90),
});
columnManager.Add(usagesColumn);

dataGrid.Bind(TableView.SelectedItemProperty, new Binding(nameof(vm.SelectedStyle)) { Source = vm });

return UiUtil.MakeBorderForControl(dataGrid);
}
Expand Down
Loading