У меня есть виджет IconView, встроенный в ScrolledWindow, и я хочу знать, каков текущий счетчик столбцов, для реализации vim-подобной (h / j / k / l) навигации.
IconView.Columns
возвращает -1
(не инициализировано), и, насколько я понимаю, это свойство используется для принудительного указания определенного числа столбцов c. Поскольку я хочу, чтобы число столбцов можно было настроить с помощью ScrolledWindow
, мне нужен какой-то способ получить текущее количество столбцов, но я не смог найти ничего об этом в документации.
В настоящее время я пытаюсь вычислить максимально возможные столбцы из Allocation of my IconView _view
:
public void OnKeyPress(Key key)
{
var nColumns = (_view.Allocation.Width - _view.Margin * 2 - _view.ItemPadding) /
(IconSize + _view.ItemPadding + _view.Margin);
...
var path = key switch
{
// Left
Key.h => new TreePath(new[] {Math.Max(index - 1, 0)}),
// Right
Key.l => new TreePath(new[] {Math.Min(index + 1, _store.IterNChildren() - 1)}),
// Down
Key.j => new TreePath(new[] {Math.Min(index + nColumns, _store.IterNChildren() - 1)}),
// Up
Key.k => new TreePath(new[] {Math.Max(index - nColumns, 0)}),
// No Change
_ => _view.SelectedItems[0]
};
_view.SelectPath(path);
_view.ScrollToPath(path);
...
Этот вид работает, но есть сценарий ios, где это не удается (например, когда почти достаточно места для другого столбца).
Так что мой вопрос будет таким: есть ли простой способ
- получить отображаемое в данный момент количество столбцов?
- или реализовать навигацию h / j / k / l в другой способ, поскольку в
IconView
?
уже встроено движение клавиш со стрелками