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

  <info>
    <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>

    <link type="guide" xref="ui-elements"/>
    <uix:thumb mime="image/svg" src="figures/ui-elements/progress-bars.svg"/>

    <include xmlns="http://www.w3.org/2001/XInclude" href="legal.xml"/>
  </info>

<title>Индикаторы выполнения</title>

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

<media type="image" mime="image/svg" src="figures/ui-elements/progress-bars.svg"/>

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

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

<p>Главный вопрос, который возникает при необходимости индикации выполнения,— что применить, индикатор выполнения или <link xref="progress-spinners">индикатор ожидания</link>. Индикатор выполнения показывает степень выполнения задачи, поэтому они полезны для индикации выполнения продолжительных задач. Применяйте индикаторы выполнения только в том случае, если задача занимает больше 30 секунд. Для менее продолжительных задач лучше применить <link xref="progress-spinners">индикатор ожидания</link>.</p>

</section>

<section id="types">
<title>Типы индикаторов</title>

<p>Существует три разновидности индикаторов выполнения:</p>

<list>
<item><p>Оставшееся время. Эти индикаторы показывают сколько времени осталось для завершения задачи.</p></item>
<item><p>Типичное время. Эти индикаторы показывают оставшееся время, исходя из оценки необходимого времени.</p></item>
<item><p>Неопределённый. Эти индикаторы применяются для задач, для которых нельзя определить необходимое для их выполнения время.</p></item>
</list>

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

</section>

<section id="progress-text">
<title>Текст</title>

<p>Индикатор выполнения может содержать текстовое описание, которое говорит о том, какая часть задания уже выполнена. При составлении текста учитывайте следующие факторы:</p>

<list>
<item><p>представленный текст должен максимально удовлетворять интересы пользователя.</p></item>
<item><p>Часто вместо процентов лучше предоставить какие-то определённые сведения. Например, <gui>Повёрнуто 13 из 19 изображений</gui> или <gui>Загружено 12.1 из 30 МБ</gui> лучше, чем <gui>Завершено 13%</gui>.</p></item>
<item><p>For long-running tasks, it can be desirable to show an estimate of the time remaining in the progress bar text. If other relevant information isn't available, this can be shown on its own. Alternatively, it can appear alongside text about task progress; however, be careful not to overwhelm the user with too much information when doing this, and use <link xref="typography">typographic conventions</link> to differentiate the most useful information.</p></item>
<item><p>Если оставшееся время известно лишь приблизительно, используйте слово «<gui>около</gui>» (<gui>about</gui>). Например: <gui>Осталось около 3 минут</gui> (<gui>About 3 minutes left</gui>).</p></item>
</list>

</section>

<section id="task-stages">
<title>Этапы выполнения задач</title>

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

<list>
<item><p>Разбивайте задачу на этапы только в том случае, если это действительно необходимо для пользователя. В противном случае, объединять этапы не только не нужно, но и нежелательно.</p></item>
<item><p>Если задача состоит из этапов для которых известно время, необходимое для их выполнения (хотя бы приблизительно), попробуйте создать простой индикатор с типичным временем выполнения.</p></item>
<item><p>Если задача содержит этап с неопределённой степенью исполнения, для части задачи индикатор выполнения можно показать в виде неопределённого выполнения. Однако не следует показывать неопределённый индикатор длительное время, старайтесь свести к минимуму изменения режима индикатора выполнения. Применяйте неопределённый индикатор только в крайнем случае.</p></item>
</list>

</section>

<section id="sub-tasks">
<title>Подзадачи</title>

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

<list>
<item><p>Есть пользователю необходимо видеть степень выполнения каждой отдельной подзадачи. (Как вариант, выполнение каждой подзадачи можно отображать с помощью текста в индикаторе выполнения).</p></item>
<item><p>Если есть необходимость в приостановке или отмене подзадачи (подробнее см. раздел <link xref="#general-guidelines">общие рекомендации</link>).</p></item>
<item><p>Если подзадачи уже каким-либо образом обозначены в интерфейсе пользователя. В этом случае можно показывать встроенный индикатор выполнения для каждого элемента.</p></item>
</list>

<p>Если для подзадач применяются индикаторы выполнения:</p>

<list>
<item><p>Каждая подзадача должна удовлетворять общим рекомендациям для индикаторов выполнения (подробнее см. раздел <link xref="#when-to-use">Когда применять</link>.)</p></item>
<item><p>Общий индикатор выполнения для всего набора задач показывать не обязательно.</p></item>
</list>

</section>

<section id="progress-windows">
<title>Окна с индикаторами выполнения</title>

<p>Раньше для индикации выполнения применялись окна с индикаторами выполнения. Эти второстепенные окна должны были находиться на экране во время выполнения задачи и содержали один или несколько индикаторов выполнения. Но мы не рекомендуем применять подобные окна, так как закрытие этих окон может приводить к неочевидным эффектам, а сами окна могут загораживать полезное содержимое и элементы управления.</p>

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

</section>

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

<list>
<item><p>Если выполняемое действие потенциально опасно или требовательно к ресурсам, рядом с индикатором выполнения можно разместить кнопку приостановки и/или отмены.</p></item>
<item><p>Убедитесь, что индикаторы выполнения, показывающие оставшееся или типичное время, используют общее время выполнения, а не время одного шага.</p></item>
<item><p>Корректируйте индикатор выполнения, использующий оставшееся время, всякий раз, когда происходит изменение, в результате чего операция может завершиться быстрее или медленнее.</p></item>
<item><p>При использовании индикатора с типичным временем выполнения, если приложению переоценило количество выполненной работы, установите длину индикатора в значение <gui>почти завершено</gui> до завершения операции. Если приложение недооценило количество выполненной работы, заполните оставшееся место индикатора, после выполнения операции.</p></item>
</list>

</section>

<section id="api-reference">
<title>API reference</title>

<list>
<item><p><link href="https://developer.gnome.org/gtk3/stable/GtkProgressBar.html">GtkProgressBar</link></p></item>
</list>
</section>

</page>
