Задача стояла следующим образом: в рамках большого диалога нужен небольшой контрол выбора файлов и папок. Юз-кейс такой: пользователь навигирует по контролу, выбирает файл/папку которая ему нужна, нажимает кнопку "добавить" рядом с контролом, навигирует дальше. В рамках одного сеанса работы с диалогом может быть выбрано любое количество файлов/папок (таким образом, стандартные диалоги Open... и Browse For Folder выбывают из игры).
Итак, для навигации по диску мы попробуем несколько контролов. Два из них — вполне стандратны; один — мною предлагается (хотя я и не первооткрыватель, мысль скрадена у Кодта
Все контролы продемонстрированы в состоянии просмотра одной и той же папки. Контрольные вопросы для тестирования контролов (кто придумает еще, welcome):
1. как узнать, где мы находимся?
2. как просмотреть список всех элементов в текущей папке?
3. как переключиться на папку Languages? (верхнюю по отношению к этой)
4. как переключиться на папку C#? (предыдущую по отношению к этой)
5. как переключиться на папку D? (следующую по отношению к этой)
Экспонат раз: Комбобокс + листбокс (а-ля диалог Save As)
1. как узнать, где мы находимся? раскрыть комбобокс
2. как просмотреть список всех элементов в текущей папке? крутить вертикальный ползунок
3. как переключиться на папку Languages? (верхнюю по отношению к этой) раскрыть комбобокс и переключиться (в более продвинутых вариантах — нажать на кнопку "уровень вверх" возле комбобокса)
4. как переключиться на папку C#? (предыдущую по отношению к этой) Перейти в Languages, найти глазами C++, перейти в предыдущую
5. как переключиться на папку D? (следующую по отношению к этой) Перейти в Languages, найти глазами C++, перейти в следующую
Экспонат два: Дерево с опцией Show Files
1. как узнать, где мы находимся? ну, покрутить ползунок вверх, пока не увидим папку верхнего уровня, повторять до посинения.
2. как просмотреть список всех элементов в текущей папке? крутить ползунок вниз до появления папки с уровнем не ниже текущей
3. как переключиться на папку Languages? (верхнюю по отношению к этой) крутить ползунок вверх, пока не увидим папку верхнего уровня
4. как переключиться на папку C#? (предыдущую по отношению к этой) крутить ползунок вверх до появления папки с уровнем не ниже текущей
5. как переключиться на папку D? (следующую по отношению к этой) крутить ползунок вниз до появления папки с уровнем не ниже текущей
Экспонат три: Древосписок имени Кодта
Некоторые пояснения: в дереве — только текущий путь (по сути, это "всегда разложенный" комбобокс из варианта 1); высота дерева зависит от длины пути. При клике мышей по любому элементу дерева текущим становится этот элемент, в списке появляется его содержимое; (например, если кликнуть по папке !work, в списке будут элементы этой папки, фокус в списке — на папке base; содержимое дерева — только путь до !work)
1. как узнать, где мы находимся? видно и так
2. как просмотреть список всех элементов в текущей папке? крутить ползунок
3. как переключиться на папку Languages? (верхнюю по отношению к этой) клацнуть по ней
4. как переключиться на папку C#? (предыдущую по отношению к этой) клацнуть по Languages, в списке подняться на 1 элемент
5. как переключиться на папку D? (следующую по отношению к этой) клацнуть по Languages, в списке спуститься на 1 элемент
[....] ЗХ>Экспонат три: Древосписок имени Кодта ЗХ> ЗХ>Некоторые пояснения: в дереве — только текущий путь (по сути, это "всегда разложенный" комбобокс из варианта 1); высота дерева зависит от длины пути. При клике мышей по любому элементу дерева текущим становится этот элемент, в списке появляется его содержимое; (например, если кликнуть по папке !work, в списке будут элементы этой папки, фокус в списке — на папке base; содержимое дерева — только путь до !work) ЗХ>1. как узнать, где мы находимся? видно и так ЗХ>2. как просмотреть список всех элементов в текущей папке? крутить ползунок ЗХ>3. как переключиться на папку Languages? (верхнюю по отношению к этой) клацнуть по ней ЗХ>4. как переключиться на папку C#? (предыдущую по отношению к этой) клацнуть по Languages, в списке подняться на 1 элемент ЗХ>5. как переключиться на папку D? (следующую по отношению к этой) клацнуть по Languages, в списке спуститься на 1 элемент
ЗХ>Any comments?
все конечно круто...но... ...ничего не напоминает?????...
вместо горизонтально-разделенного окна проводника получили контрол, совмещающий по функциональности дерево выбора папки и listview просмотра файлов, но только развернувшего все это по вертикали...
вот еще один вариант контрола для выбора файла...старенький правда, но посмею запостить:
видим где находимся...(размыто получилось)
видим список файлов в текущей директории
имеется возможность переключиться на другой том
предыдущуюю по уровню папку вижу по полному пути текущего положения...
Здравствуйте, DuШes, Вы писали:
ЗХ>>
DШ>все конечно круто...но... DШ> DШ>...ничего не напоминает?????...
DШ>вместо горизонтально-разделенного окна проводника получили контрол, совмещающий по функциональности дерево выбора папки и listview просмотра файлов, но только развернувшего все это по вертикали...
Отнюдь. Для моей большой библиотеки проводник даст тот же уровень понятности, что и вариант 2 (при этом он существенно крупнее, а мне важен размер):
тут, конечно, есть строка адреса, тулбар навигации и прочее — но это очень сильно увеличивает размер.
DШ>вот еще один вариант контрола для выбора файла...старенький правда, но посмею запостить: DШ>
DШ>видим где находимся...(размыто получилось)
...если путь недлинный DШ>видим список файлов в текущей директории
ыес.
DШ>имеется возможность переключиться на другой том
сомнительной частоты действие
DШ>предыдущуюю по уровню папку вижу по полному пути текущего положения...
...и, кстати, можешь к ней переключиться кликнув по [..] — но это уже в некоторой мере DOSовщина.
[...] DШ>>все конечно круто...но... DШ>> DШ>>...ничего не напоминает?????...
DШ>>вместо горизонтально-разделенного окна проводника получили контрол, совмещающий по функциональности дерево выбора папки и listview просмотра файлов, но только развернувшего все это по вертикали...
ЗХ>Отнюдь. Для моей большой библиотеки проводник даст тот же уровень понятности, что и вариант 2 (при этом он существенно крупнее, а мне важен размер):
[...]
размер важен
не спорю...просто я говорил про функциональность, ничего нового-то не появилось, навигация такая же как в проводнике и принцип тот же, просто ты все это совместил в рамках одного контрола ..
Здравствуйте, Зверёк Харьковский, Вы писали:
[вдогонку...]
как вариант сократить размер верней части древовидного представления текущего положения — представить в виде совокупности гиперссылок: d:\work!\base\documents\languages\c# — надеюсь, мысль понятна??? ... можно говорить о том что строка пути будет очень большой и тп., но я думаю, что такая же проблема будет и при отображении полного пути вниз по дереву — добавится необходимость дополнительного скролла вниз...
Здравствуйте, DuШes, Вы писали:
DШ>Здравствуйте, Зверёк Харьковский, Вы писали: DШ>[вдогонку...]
DШ>как вариант сократить размер верней части древовидного представления текущего положения — представить в виде совокупности гиперссылок: DШ>d:\work!\base\documents\languages\c# — надеюсь, мысль понятна??? ... можно говорить о том что строка пути будет очень большой и тп., но я думаю, что такая же проблема будет и при отображении полного пути вниз по дереву — добавится необходимость дополнительного скролла вниз...
Этаким путем вы придете к тому, что было в ранних билдах Longhorn:
[d:\/][work!\/][base\/][documents\/][languages\/][c++\/]
----------------------
| ... |
| C# |
| C++ |
| D |
| ... |
----------------------
Плюс список содержиомого текущей папки под этим тулбаром.
\/ — обозначает выпадающее меню.
1. как узнать, где мы находимся? видно и так.
2. как просмотреть список всех элементов в текущей папке? видно и так
3. как переключиться на папку Languages? (верхнюю по отношению к этой) тыкнуть в тулбаре на Languages
4. как переключиться на папку C#? (предыдущую по отношению к этой) тыкнуть в \/ возле С++ и выбрать C#
5. как переключиться на папку D? (следующую по отношению к этой)тыкнуть в \/ возле С++ и выбрать D
Здравствуйте, Alexey Axyonov, Вы писали:
DШ>>как вариант сократить размер верней части древовидного представления текущего положения — представить в виде совокупности гиперссылок: DШ>>d:\work!\base\documents\languages\c# — надеюсь, мысль понятна??? ... можно говорить о том что строка пути будет очень большой и тп., но я думаю, что такая же проблема будет и при отображении полного пути вниз по дереву — добавится необходимость дополнительного скролла вниз...
AA>Этаким путем вы придете к тому, что было в ранних билдах Longhorn:
Поправил форматирование
[d:\/][work!\/][base\/][documents\/][languages\/][c++\/]
----------------------
| ... |
| C# |
| C++ |
| D |
| ... |
----------------------
AA>Плюс список содержиомого текущей папки под этим тулбаром. AA>\/ — обозначает выпадающее меню.
AA>1. как узнать, где мы находимся? видно и так. AA>2. как просмотреть список всех элементов в текущей папке? видно и так AA>3. как переключиться на папку Languages? (верхнюю по отношению к этой) тыкнуть в тулбаре на Languages AA>4. как переключиться на папку C#? (предыдущую по отношению к этой) тыкнуть в \/ возле С++ и выбрать C# AA>5. как переключиться на папку D? (следующую по отношению к этой)тыкнуть в \/ возле С++ и выбрать D
AA>Интересно что в Longhorn сейчас.
В целом — таки да, вельми осмысленно.
Для меня — проблема в том, что тянется слишком далеко по горизонтали (мое дерево меньше вправо уползает, тем более там можно при уползании с отступами играться).
Хотя в целом идея выпадание папок, "параллельных данной" — она Мне именно этого не хватало в моей идеи — быстрого переключения к "параллельным".
Ну — винду местами хорошие юзабилисты лепят. А местами — кто попало
Здравствуйте, Зверёк Харьковский, Вы что-то писали:
Экспонат ноль: "Правый список парентов" + листбокс
1. как узнать, где мы находимся? раскрыть "Правый список парентов"
2. как просмотреть список всех элементов в текущей папке? крутить вертикальный ползунок
3. как переключиться на папку Languages? (верхнюю по отношению к этой) раскрыть "Правый список парентов" и переключиться (после потери фокуса "Правый список парентов" автоматически скрывается) (в более продвинутых вариантах — нажать на кнопку "уровень вверх" возле "Правого списока парентов")
4. как переключиться на папку C#? (предыдущую по отношению к этой) Перейти в Languages, найти глазами C++, перейти в предыдущую
5. как переключиться на папку D? (следующую по отношению к этой) Перейти в Languages, найти глазами C++, перейти в следующую
как просмотреть список всех элементов в текущей папке?
Поглядеть вниз.
как переключиться на папку Languages? (верхнюю по отношению к этой)
Нажать на её имя в строке вверху.
как переключиться на папку C#? (предыдущую по отношению к этой)
Нажать на имя папки Languages.
При переходе уровнем выше та папка в которой мы были выделяется и помещается возможно ближе в видимому центру списка.
Выбрать cреди подпапок папки Languages папку C#, она будет чуть выше центра
как переключиться на папку D? (следующую по отношению к этой)
Нажать на имя папки Languages.
При переходе уровнем выше та папка в которой мы были выделяется и помещается возможно ближе в видимому центру списка.
Выбрать cреди подпапок папки Languages папку D, она будет чуть ниже центра
Нет, там чего-то выплывало, а у меня нечего не выплывает.
P.S. Хороший интерфейс это предсказуемый интерфейс. Все эти фенечки конечно хорошо, но что скажет пользователь разглядывая замысловатое окно выбора файла? Думаю он скажет, "да пошли вы..." и скачает программу конкурента.
.
Может быть модифицировать идею предыдущих ораторов в Вариант 1 или Вариант 2? Вариант 2 мне даже больше нравится...
Серые папки с двоеточиями перед названиями — те каталоги, внутри которых мы находимся. Ответы на ваши вопросы интуитивны, поэтому писать их не буду...
Мало того — достаточно просто в реализации... Графически можно ещё подработать — indent-ами там или ещё чем, однако идея, думаю, понятна..