Про UI

А вот, к примеру, есть такое вот окошко настроек у какой-то программы ([Preview] - это потому что в Qt Designer, не обращайте внимания):

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

Но тут есть такой логический перескок: допустим, галка в какой-то момент была поставлена и настройки на выходе программы - сохранились. Вместе с этой галкой, естественно. Потом пользователю надоело и он эту галку снял. Дальше происходит следущее:

  • На выходе - настройки не сохраняются (галка снята).
  • На новом запуске - поднимаются старые настройки.
  • В старых настройках галка "сохранять на выходе" - опять поставлена. Потому что только так, на выходе программы, настройки попадают в сохраненное место.

Кто виноват и что делать? Я вижу такой вот, не вполне тривиальный алгоритм:

  1. Если галка "сохранять на выходе" была снята, то по нажатию ОК мы идем в сохраненные настройки и сохраняем там только состояние этой галки, более ничего не меняем.
  2. Нужно добавить отдельную кнопку Save Settings, которая сохраняла бы текущее положение кнопок (т.е. можно поиграть настройками, нажать Save, потом Cancel - сохраненная копия обновится, а рабочая - нет)
  3. Поставить галку "сохранять на выходе", нажать Save, снять галку, нажать OK - приведет к тому, что в сохраненной копии настроек "сохранять на выходе" станет Off.
Конечно, есть еще вариант, когда галки этой нет, а настройки сохраняются всегда (прямо по нажатию кнопки OK), но он неинтересный.

Comments

Я бы убрал галочку исходил из гайдлайнов соответствующих ОС.

В Windows - три кнопки OK / Cancel / Apply. На макоси - всегда сохранять, кнопок нет ваще. В линуксе - ну хз, там все привыкли к бардаку.

Ну то есть не заморачиваться, всегда сохранять (Apply - в топку, кнопка хорошая, но в моем случае - геморойная в реализации).

Гм. А в чем отличие кнопки Apply от нажатия на приведенном диалоге кнопки OK со снятой галкой Save (ну, кроме того, что окошко не закрывается)?

Apply + Cancel означает: применить измененные настройки (не закрывая окна), вернуть изначальные настройки, закрыть окно с настройками.

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

Тут что не делай, обязательно вылезет контр-интуитивность.

Оказывается, я ни разу в жизни не нажимал Apply и потом Cancel. :)

Может никогда никто и не нажмет, но обработать этот случай надо. Можно, конечно, после нажатия Apply делать кнопку Cancel неактивной (до первого изменения формы), но это тоже какая-то ерунда.

Насколько мне известно, оно так и работает, отката по cancel не делается. Хотя могу ошибаться

Вариант, как в BIOS не интересен? OK + OK & Save

А как может быть в *BIOS* OK без Save?

Там я всегда видел "(сохранить,) сохранить и выйти, выти не сохраняя" (первый - кажется не везде)

Я имел в виду Exit without Save и Save and Exit . Смысл немного другой, но тем не менее.

Ну так это OK и Cancel

В BIOS да, так и получается. В программе можно сделать OK , OK & Save и Cancel . Ну, или отдельно кнопку Save , чтобы пользователь сам сохранял, когда ему надо.

Проблема, очевидно, в том, что мы думаем со стороны программиста: что делать с настройками при выходе? Пользователя же интересует, что будет с настройками при следующем запуске. Т.е. напрашивается вариант с radio buttons:

( ) use these settings on next startup
( ) use the default settings on next startup
( ) use previously saved settings on next startup, активный лишь при наличии сохраненных настроек.

Ну этот выбор - он тоже сильно программистский.

Меня в комментах в блоге убедили, что надо не париться, а просто всегда сохранять и все - и это и будет ожидаемое поведение.

Нужно только пимпу Reset Defaults (Panic button), а то наслесарят там....

а какие вообще настройки программы пограмма сохраняет между сессиями?

если текущее положение кнопок, то настройки автосохранения в списко НЕ ВХОДЯТ.

мне кажется тут типичная терминологическая путаница произошла в связи с мышлением от реализации .

с точки зрения ментальной модели пользователя нет единых меганастроек , в которых и кнопки и preferences.
с точки зрения пользователя это разные вещи.
поэтому их надо называть по-разному и по-разному же сохранять.

в том же фотошопе отдельно настройки, отдельно раскладки панелей (забыл как они там называются)

Уровень черного (ручной/автоматический), баланс белого, ну и там по мелочи.
Это для технодрочеров цифрофотографов программа.

Положение кнопок/окон я пока вовсе не сохраняю.

значит я неправильно и слишком бегло прочитал.

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

я бы, если совсем вникать, сначала расписал бы сценарии использования и потом посмотрел как пользователь с этим живёт.

Я боюсь, что мои сценарии (как разработчика, хорошо знаюшего для чего какая кнопка на самом деле) не будут совпадать с пользовательскими.

Т.е. надо выпустить что-то и посмотреть на фидбек.

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

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

впрочем, это уже глубокое бурение , обычно основные проблемы можно обнаружить при помощи опросов.
в целом, конечно, работа довольно кропотливая, и, к сожалению, поэтому у многих продуктов, особенно опенсорсных, никто так над интерфейсом не работает.

кстати, если есть интерес, я могу попробовать поработать над интенрфейсом for fun.

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

Давайте я ваше любезное предложение на другой случай приберегу. Данный случай - это нечто высокоспециализированное, не массовое, хрен бы с ним с UI на самом деле.

Не вопрос, всегда пожалуйста.

я бы сохранял состояние этой галки save on exit просто всегда.

вот кстати у far менеджера так и есть - поставили галку "сохранять настройки" - извольте в первый раз сохранить ее нажатием на кнопочку "сохранить настройки", иначе шиш.

Ну да. Но вместе с тем - я вот отключаю там Quick View, не ставя никаких еще галок - и это отключение сохраняется.

ага, есть такой момент
замечен один такой "ляп"
но это как говорится ещё цветочки
есть такая прога thumbsplus для каталогизации фоток
и всяких хитрых с ними массовых манипуляций
если например нужно в куче картинок в разных каталогах
изменить разрешение, поменять формат, пошарпить
и ещё вагон всего поделать разом - то алтернативы я не знаю

так вот там в каждом плагине своя идеология менюшек
совершенно не похожих на соседей.
в одних по завершению пошагового визарда предлагает сохранять изменения
в других не предлагает, но сохраняет
в третьем не предлагает и не сохраняет, но на предпоследнем шаге есть кнопка Save

ощущение, что прогу пишут несколько отделов и
результаты своих коллег они никогда не видят

хороший тон, нынче, сохранять всегда, без всяких кнопок.

В тех контролах, как ты реализовал окошко, описанный тобой алгоритм действий (от слов "происходит следющее" до "Кто виноват") совершенно правильный и именно так и должно быть.

Если тебя смущает, что после перезапуска "воскреснет" галочка - то тебе нужно отказаться от галочки. Например, сделать кнопку "Save as default".

Да, алгоритм правильный, но контринтуитивный.

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

Там в конкретном приложении есть потенциально разрушительное (для вида обрабатываемого изображения) место, но оно разрушительно просто на каждом новом открытом файле, а не на перезапуске и к нему нужна особая галка ("ресетить на file load")

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

Я бы вместо галки Save On Exit сделал _кнопку_ Save as Default.
Ну и соответственно по ней обновляем персистентную копию настроек. Всё.

Чем плох вариант сохранения флага "Save Settings on program exit" всегда (при выходе из программы), а остальные настройки - как обычно, т.е. когда предыдущий флаг выставлен?

Зачем в этой форме кнопка Cancel?

Уйти (закрыть окно диалога) без сохранения изменений?

Да, красный крестик я тоже вижу :)

Я вот когда вижу красный крестик, но не вижу Cancel всегда в некотором недоумении - чего щас будет? Сохранится ли тот набор галочек что я тут натыкал? Или наоборот не сохранится?

А на маках и того хуже - кнопок не носят, закрытие окна равно OK.

А как у них принято не сохранять настройки? Не закрывать окна?:)

Э... никак не принято.

Ну я вот посмотрел на Firefox на маке: основные настройки сохраняются сразу (т.е. снял галку и не закрывая окон - нажал Cmd-Q т.е. вышел из программы - вернулся и галка снята). А вот для чувствительных мест (настройки сети) - отдельный диалог с OK и cancel, пока OK не нажал - ничего не изменилось.

Бардак и пьянка, короче.

Понятно, спасибо.

Вообще в критичных местах, либо в местах, где применение стоит ресурсов, есть отдельная кнопка apply, и окно настройки модальное. Пример - те же настройки сети в собственно макоси.

Всё продумано и написано в гайдах, надо просто читать, и делать как положено, а не как мозилловцы привыкли.

Мне последнее время очень нравится стиль Андроида, когда не только настройки, но и стейт сохраняется постоянно, потому что приложение может быть выгружено в любую секунду и должно уметь потом восстановиться.
А то у меня есть на десктопе программки типа редактора, которые я закрываю только крахом системы, потому что у меня просто нет повода их раньше закрывать. И каждый раз состояние накопленное за месяц, например, открытые файлы, остается не сохраненным. Ужасно бесит.

А меня бесит вес вес документов с сохранением истории.

1. Есть автосохранение (обычно).
2. А если контент откатить надо будет? ;)
3. Тенденция и Мак и Гугл : "Не переживайте! Все версии Ваших файлов мы бережно храним У СЕБЯ. *не отвертитесь!*"

Если нет веских причин придумывать своё поведение, то надо сохранять всегда по кнопке ОК (ибо это привычно).

А вообще, я лично не совсем представляю себе кейз, когда настройки изменить надо, а сохранять их не надо.

Кнопка Reset to default имеет смысл, да.

В приличных программах есть 2 глобальных варианта:
1. Ставим галку - новые настройки сохраняются как текущий дефолт. И применяются потом автоматически.
2. НЕ ставим галку - при каждом запуске настройки сбрасываются на "заводские".

Когда галка стояла, а потом сняли (снова 2 варианта):
1. Последние юзерские настройки остаются дефолтными. (удобно для power-users)
2. Настройки сбрасываются на "заводские". (хорошо для нубов)

А в совсем правильных программах добавляют ещё:
1 "галку" - показывать это окно при запуске.
И кнопку - сбросить на "заводские" настройке.

Сочетание 1-1-2 обеспечивает наибольший комфорт юзеру.

В прекрасных программах при несовместимости настроек снова 2 варианта:
1. Настройки автоматом возвращаются на "by developer".
2. Принудительно выскакивает обсуждаемое окно.

В идеальных - в дополнению к последему пункту выскакивает окно с предложением поправить несовместимое " с жизнью".

Извините, каменты не читал. Виноват.

Ну я посмотрел как вообще программы устроены - там preferences специально нигде (как правило) не сохраняются.

Т.е нажатие OK в диалоге подразумевает, что настройки сохранятся и в следующий раз, не важно в том же запуске программы или в следующем, будут такими как в момент нажатия OK.

Неет. :)
Везде сохраняется юзерский дефолт, НЕ трогая задуманного девелопером. А внутри программы есть "преференсиз", где всё можно менять. И это автоматом становится "юзер-дефолт". Но есть и редкие сключения, когда в "преференсиз" есть доп галка "сохранять как юзер-дефолт".

Остаётся обработка крахов. Про это я тоже упомянул. :)

Самое крутое, если все настройки в 1 окне, возможно с выпадающими списками опций, когда ставишь 1 галку и автоматом выключаются несовместимые.

mikeuz.