<?xml version="1.0" encoding="utf-8"?>
<page xmlns="http://projectmallard.org/1.0/" type="topic" id="dialogs" xml:lang="ru">

  <info>
    <link type="guide" xref="patterns#primary"/>
    <desc>Secondary windows that appear over primary, parent windows</desc>  
    <credit type="author">
      <name>Алан Дэй (Allan Day)</name>
      <email>aday@gnome.org</email>
    </credit>
    <credit>
      <name>Калум Бенсон (Calum Benson)</name>
    </credit>
    <credit>
      <name>Адам Элман (Adam Elman)</name>
    </credit>
    <credit>
      <name>Сэт Никел (Seth Nickell)</name>
    </credit>
    <credit>
      <name>Колин Робертсон (Colin Robertson)</name>
    </credit>
    <include xmlns="http://www.w3.org/2001/XInclude" href="legal.xml"/>
  </info>

<title>Dialog windows</title>

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

<p>GTK+ предоставляет некоторое количество стандартные диалоговых окон, например диалог печати или выбора цвета.</p>

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

<section id="when-to-use">
<title>Когда использовать</title>

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

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

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

<list>
<item><p>Используйте внутреннее включение для новых сообщений, записей или контактов.</p></item>
<item><p>Встроенные уведомления являются альтернативой диалогам с сообщениями.</p></item>
<item><p>С помощью <link xref="popovers">всплывающих виджетов</link> можно показывать дополнительные элементы управления или параметры менее отвлекающим способом.</p></item>
</list>

</section>

<section id="message-dialogs">
<title>Диалоги сообщений</title>

<media type="image" mime="image/svg" src="figures/patterns/message-dialog.svg"/>

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

<section id="message-dialog-examples">
<title>Примеры</title>

<p>Диалоги подтверждения используют сообщения для проверки (подтверждения) того, что пользователь желает выполнить некоторое действие. В таких диалогах используется две кнопки: одна кнопка служит для подтверждения действия, вторая — для отмены.</p>

<note style="tip"><p>Пользователи часто нечаянно или машинально подтверждают действия в таких диалогах, поэтому они далеко не всегда могут уберечь от возникновения ошибок. Чаще лучше предоставить возможность отменить выполненное действие.</p></note>

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

<note style="tip"><p>Диалоги сообщений — это крайней средство. Проектируйте свои приложение так, чтобы в них не возникали ошибки, а если что-то пойдёт не так, то работа приложения восстанавливалась автоматически.</p></note>

</section>
</section>

<section id="action-dialogs">
<title>Диалоги действий</title>

<media type="image" mime="image/svg" src="figures/patterns/action-dialog.svg"/>

<p>Диалоги действий служат для представления параметров и информации об определённом действии до его выполнения. В таких диалогах обычно есть заголовок (заголовок описывает действие) и две главные кнопки: одна кнопка используется для выполнения действия, вторая — для отмены.</p>

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

<section id="action-dialog-examples">
<title>Примеры</title>

<p>Многие стандартные диалоги GTK+ являются диалогами действий. Наглядным примером может послужить диалог печатли: он появляется, когда пользователь активирует действие печатти, и представляет информацию и параметры для этого действия. Две кнопки в заголовочной панели служат для подтверждения действия и его отмены.</p>

</section>
</section>

<section id="presentation-dialogs">
<title>Диалоги представления</title>

<media type="image" mime="image/svg" src="figures/patterns/presentation-dialog.svg"/>

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

<section id="presentation-dialog-examples">
<title>Примеры</title>

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

<note style="tip"><p>Старайтесь избежать необходимости добавления окна с параметрами для вашего приложения. Подумайте, действительно ли нужны дополнительные параметры. Большинство людей не утруждают себя изучением параметров, которые вы им предоставляете. Параметры настройки также повысят сложность вашего приложения. Сделайте так, чтобы ваше приложение работало для всех без необходимости изменять его параметры.</p></note>

</section>

<section id="instant-and-explicit-apply">
<title>Мгновенное и явное применение</title>

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

<p>Используйте мгновенное применение везде, где это возможно. В диалогах мгновенного применения есть кнопка закрытия в заголовочной панели, как у <link xref="primary-windows">главных окон</link>.</p>

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

</section>
</section>

<section id="primary-buttons">
<title>Основные кнопки</title>

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

<section id="order">
<title>Порядок</title>

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

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

</section>

<section id="labels">
<title>Текстовые метки</title>

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

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

</section>

<section id="default-action-and-escape">
<title>Действие по умолчанию и выход</title>

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

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

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

</section>

</section>

<section id="general-guidelines">
<title>Общие рекомендации</title>

<list>
<item><p>Диалоговые окна никогда не должны открываться внезапно, они должны открываться только в ответ на действия пользователя.</p></item>
<item><p>У диалоговых окон всегда должны быть родительское окно.</p></item>
<item><p>При проектировании содержимого диалоговых окон следуйте <link xref="visual-layout">рекомендациям по визуальному расположению</link>.</p></item>
<item><p>Для разбиения элементов управления и информации используйте <link xref="view-switchers">переключатели вида</link> или <link xref="tabs">вкладки</link>.</p></item>
<item><p>Избегайте открытие диалоговых окон поверх других диалогов. Одновременно может отображаться только одно диалоговое окно.</p></item>
<item><p>При открытии диалога переводите фокус ввода с клавиатуры на компонент, с которого пользователи начинают взаимодействие. Это особенно важно для пользователей, которые для навигации по вашему приложению используют клавиатуру.</p></item>
</list>

</section>

<section id="api-reference">
<title>API reference</title>
<list>
<item><p><link href="https://developer.gnome.org/gtk3/stable/GtkAboutDialog.html">GtkAboutDialog</link></p></item>
<item><p><link href="https://developer.gnome.org/gtk3/stable/GtkDialog.html">GtkDialog</link></p></item>
<item><p><link href="https://developer.gnome.org/gtk3/stable/GtkMessageDialog.html">GtkMessageDialog</link></p></item>
</list>
</section>

</page>
