LINUX.ORG.RU
ФорумTalks

[gui] Как сделать самодокументирующийся интерфейс пользователя?

 


0

0

Т.е. такой интерфейс, дабы новый пользователь сел за него и было все понятно ему. Дада, я все еще пишу свой тулкит, вот задался и таким вопросом.

Низкоуровневых действий немного: пользователь может тыкать кнопки, что-то перетаскивать (слайдеры, скроллбары), вводить текст и выбирать элементы. Достаточно каждый элемент нарисовать своим стилем и подписать «красное-выпуклое нажимать, зеленое-в-полосочку таскать, а на белом можно писать тексты», но как быть тогда с высокоуровневыми элементами? Скажем, не просто ввод текста, а ввод имени файла? Появляющееся окно с диалогом выбора, равно как и кнопка для его вызова, кнопка «ок» в диалоге - это все совершенно не очевидно. Можно конечно попробовать засунуть файловый выбор в комбобокс, как это делают с календариками для ввода дат, но не запихнешь же туда URL всех возможных сайтов или отображение карт для ввода геокоординат? Или скажем, надо выбрать элемент в 3D-пространстве рядом?

А ведь у элемента могут быть и другие свойства, такие как «выключен» / «в фокусе мыши/клавиатуры» / «пользователь нажал на элемент» , правил вида «зеленое-в-полосочку таскать» уже недостаточно, как все это отобразить человеку, дабы было понятно любому и без подготовки?

Или это все ненужная идея и лучше дать пользователю учебник страниц на 500, вида «венда для чайников»?

Ответ на: Вызов примера. от Camel

> Нажатие на элемент интерфейс с сажатым Alt'ом вызывает не реальное срабатывание этого елемента, но обучающую «шарманку» «что произойдёт если эту кнопочку нажать и что можно сделать после этого». При этом курсор сам ходит по экрану, что-то нажимает. В любой момент демонстрацию можно остановить и вернуть программу в исходное состояние отпустив Alt.

Во, хорошая идея. Только с ALT ты погорячился, о такой возможности будет знать 0.001% пользователей.

Можно сделать по-другому.

Вначале опишем проблему. А проблема вот какая - пользователь боится нажимать на незнокомые кнопки. Вот можете хоть до посинения вопить, что такие пользователи не нужны, но факт остается фактом - 95% пользователей боятся нажимать на незнакомые кнопки на экране. В результате, программы иcпользуются только на 10% их возможностей. А все потому, что пользователь предпочитает делать ритуальные знакомые действия, и даже если неудобно - годами (!) не нажимать кнопочки, которые помогут сделать действие в разы быстрее. Пользователи поумнее наводят на кнопочку курсор, и читают всплывающее описание (или описание внизу в статусной строке). Но если описание написано непонятно, нажимать не будут. Не будем говорить, сколько программ не имеет вообще описаний кнопок.

Поэтому, когда программа только что установлена, она должна находиться в режиме обучения пользователя (который, само собой можно отключить в настройках). Когда включен такой режим, кнопки должны быть двойные, то есть состоять из двух частей - левой и правой.

[ Применить | => ]

Левая часть ведет себя как обычная конопка. А небольшая правая часть запускает «шарманку», которая показывает, что произойдет, если нажать на эту кнопку.

Таким образом, пользователь чуствует себя в любой ситуации сухо и комфортно, так как имеет возможность посмотреть на результат своих действий в стиле «А что будет если?».

* * *

Вообще, говоря более обще, идеальный интерфейс - это тот в котором можно отменить любое действие. То есть, состояния программы «сохраняется» при нажатии каждой кнопки на экране, то есть сохраняется каждый шаг пользователя. И нужно, чтобы всегда пользователь мог откатиться до нужного шага.

В настоящий момент такое возможно только в программах, работающих с одним объектом - текстом или рисунком. А в больших системах, которые работают с множеством данных (Например, 1C), после внесения каких-нибудь изменений, откатиться на несколько шагов очень проблематично. Вместо отмены действия, пользователь вынужден думать, как исправлять положение - удалить только что созданный документ, или отметить его как нерабочий, или создать новый документ, корректирующий действие предыдущего. Я здесь не имею в виду откат до состояния «на такое-то число», я описываю только откат на насколько шагов.

Вот если бы тулкит позволял делать интерфейсы, в которых пользователь мог бы безопасно выполнять любые действия с откатом, это был бы прорыв. Проблема в том, что без формализации объекта, над которым происходят действия, сделать такой тулкит не получится. То есть, не в тулките дело. Но это на текущий момент, а в будующем может быть появится и тулкит, в котором пишешь любую программу, и все действия можно откатывать. Может быть, он будет работать с каким-нибудь многослойным менеджером объектов, который не меняет объекты, а при каждом изменении записывает измененные состояния во «временнЫе слои», в которых хранятся синхронизованные состояния объектов на моменты конца выполнения того или иного действия. Тогда можно будет прощелкиваться по слоям назад по времени. Впринципе, если задаться целью, то такую вещь можно сделать в Qt, так как у него уже есть собственный менеджер объектов. Проблема в том, что такая схема подойдет только для локальных приложений, но мало поможет для 1С и прочих приложений, многопользовательских и работающих с базами данных. Но и для локальных приложение появление такого тулкита - это большой шаг вперед. Ибо ненужно уже бубдет формализировать объекты, надо котороыми происходит работа, и дописывать UNDO код. Все будет откатываться само собой.

Примерно так.

xintrea
()
Ответ на: комментарий от xintrea

> Когда включен такой режим, кнопки должны быть двойные, то есть состоять из двух частей - левой и правой.

[ Применить | => ]

Левая часть ведет себя как обычная конопка. А небольшая правая часть запускает «шарманку», которая показывает, что произойдет, если нажать на эту кнопку.

Офигенно, пойду грызть ногти и думать, как все это реализовать

И нужно, чтобы всегда пользователь мог откатиться до нужного шага.

Вот начал я процессить видео, подождал 2 часа, пока кодировщик закончит, посмотрел кино - фигня получилась. А между тем процесс может быть уже завершен - как быть в этом случае? Хранить значения всех вводимых форм для возможного повторного использования?

Вот если бы тулкит позволял делать интерфейсы, в которых пользователь мог бы безопасно выполнять любые действия с откатом, это был бы прорыв

Нажимаем кнопку «применить» и всем сотрудникам ставим зарплату в 0 рублей: система может запомнить это как некоторую транзакцию, симулировать новые данные и не применять изменения до тех пор, пока сама транзакция не будет подтверждена. Вот только главбух будет матерится только после применения, да и работа с 2 видами данных еще сильнее затруднит изучение?

Кстате, работа с UNDO похожим образом реализована в Блендере.

simple_best_world_web_master
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.