Secondary windows that appear over primary, parent windows
Алан Дэй (Allan Day)
aday@gnome.org
Калум Бенсон (Calum Benson)
Адам Элман (Adam Elman)
Сэт Никел (Seth Nickell)
Колин Робертсон (Colin Robertson)

# Dialog windows

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

GTK provides a number of stock dialogs that can be used, such as for printing or color selection.

Существует три основных типа диалогов.

# Когда использовать

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

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

Существует несколько способов избежать использования диалогов:

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

Встроенные уведомления являются альтернативой диалогам с сообщениями.

С помощью всплывающих виджетов можно показывать дополнительные элементы управления или параметры менее отвлекающим способом.

# Диалоги сообщений

Диалоги сообщений — это самый простой тип диалогов. Они служат для предоставления сообщений или вопросов, для обратной связи используется от одной до трёх кнопок. Эти диалоговые окна всегда являются модальными, то есть они блокируют доступ к их родительскому окну. Диалоги сообщений применяются в том случае, когда необходимо гарантировать то, чтобы пользователь прочитал и ответил на сообщение.

## Примеры

Confirmation dialogs use a message dialog to check — or confirm — that the user wants to carry out an action. They have two buttons: one to confirm that the action should be carried out and one to cancel the action.

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

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

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

# Диалоги действий

Action dialogs present options and information about a specific action before it is carried out. They have a heading (which typically describes the action) and two primary buttons — one which allows the action to be carried out and one which cancels it.

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

## Примеры

Many of the stock GTK dialogs are action dialogs. The print dialog is a good example: it is displayed in response to the user using the print action, and presents information and options for that print action. The two header bar buttons allow the print action to either be cancelled or carried out.

# Диалоги представления

Диалоги представлений служат для представления информации или элементов управления. Также как у диалогов действия у них есть заголовочная панель и тема. Но вместо действия их содержимое относится к приложению или к элементам его содержимого.

## Примеры

Примерами таких диалогов служат диалоги свойств и диалоги параметров. В этих диалогах находится информация и параметры, относящиеся к определённому объекту (либо к приложению в целом, либо к одному из элементов его содержимого). Диалоги свойств демонстрируют, как можно использовать диалоги для скрытия дополнительной информации, которая не всегда нужна в главном окне приложения.

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

## Мгновенное и явное применение

Диалоги представления применяют изменения мгновенно либо явно. При мгновенном применении изменения в параметрах или значениях применяются сразу же после из изменения. И наоборот, диалоги для явного применения предоставляют кнопку для применения изменений.

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

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

# Основные кнопки

Сообщения и диалоги действия содержат главные кнопки, которые оказывают действие на всё окно. Порядок этих кнопок, а также текстовые метки в них — важнейшая часть диалога.

## Порядок

Если диалог содержит кнопки подтверждения и отмены, кнопка отмены всегда должна располагаться до кнопки подтверждения. Для локалей с письмом слева направо кнопка отмены должна находиться слева.

Такой порядок кнопок даёт понять пользователям, что возможность отмены имеет больший приоритет, чем подтверждение действия.

## Текстовые метки

Используйте в качестве текстовой метки для главной кнопки глагол в повелительно наклонении. Например: Сохранить, Перезагрузить, Удалить (исключением является Печать). Такие текстовые метки понятнее, чем просто OK или Готово.

Диалоги ошибок обычно содержат одну кнопку, которая закрывает диалог. В этом случае определённое действие не нужно ассоциировать с чем-нибудь. Тут есть возможность немного пошутить: вместо обычной текстовой метки можно вставить что-то наподобие Извенения приняты или Понятненько.

## Действие по умолчанию и выход

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

Клавиша Esc должна активировать кнопку отмены или закрытия, одна из этих кнопок должна обязательно присутствовать в диалоге. В диалогах сообщений с одной кнопкой можно одновременно привязать клавишу Esc и Enter.

Привязка клавиш Esc и Enter обеспечивает очевидный и удобный способ продолжить работу или вернуться назад.

# Общие рекомендации

Диалоговые окна никогда не должны открываться внезапно, они должны открываться только в ответ на действия пользователя.

У диалоговых окон всегда должны быть родительское окно.

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

Для разбиения элементов управления и информации используйте переключатели вида или вкладки.

Избегайте открытие диалоговых окон поверх других диалогов. Одновременно может отображаться только одно диалоговое окно.

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

# API reference

GtkAboutDialog

GtkDialog

GtkMessageDialog