Реализация Table
Требования:
- скролбары;
- заголовки колонок;
- изменение ширины колонок пользователем;
- селектор на строку;
- редактирование столбца с именем;
- виртуализация строк (фиксированная высота строки);
еще что-то?
Псли речь про доработку ListView2, хочу добавить, что обязателен режим иконок (для режима "обычные значки" или "эскизы").
Псли речь про доработку ListView2
Речь скорее всего про написание с нуля, ибо перед ListView2 таких задач вообще не стояло.
хочу добавить, что обязателен режим иконок (для режима "обычные значки" или "эскизы")
Это как в Explorer/Проводник? Это уже не Table, совсем получается. Для таких режимов стоит отдельные компоненты использовать, а потом уже можно декорировать это каким-либо классом, который все это будет поддерживать. Для иконок и эскизов задача виртуализации будет еще острее.
Такие задачи перед ListView2 изначально планировались, иначе бы не стал его делать.
Сейчас подумал про Тейбл. В целом там нет ничего сложного - двухмерный массив ListView2Item (источник данных), геомертические размеры всех элементов равны, известны также размеры поля для отображения и положения полос прокрутки. Следовательно, можно вычислить переделы диапазона вывода Итемов из этого массива. Дальше дело техники. Массив, думаю, в лоб делать не надо, лучше сделать функцию, возвращающую на основе исходных данных (в случае с filelistpanel это FS.DirectoryContent, но лучше допустить возможность использования ListView2 для других нужд) и режима вывода (таблица, иконки, эскизы и т.д.) этот самый двухмерный массив.
Информацию о местах отрисовки и телах отрисовки можно искать через свойство Surface у любого виджета.