Интернет, компьютеры, софт и прочий Hi-Tech

Подписаться через RSS2Email.ru

Диалоги открытия и сохранения файлов в XULRunner

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

Диалоги выбора файла

Диалог выбора файла дает пользователю возможность выбрать файл. Чаще всего он используется для реализации команд меню "Открыть" и "Сохранить", но вы можете использовать его в любом другом месте, где пользователь нуждается в выборе файла. Для реализации диалога выбора файла используется XPCOM-интерфейс 'nsIFilePicker'.

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

Вы можете использовать диалог выбора файла в одном из трех режимов:

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

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

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

Создание диалога выбора файла

Сначала вам нужно создать компонент диалога выбора файла и инициализировать его.

var nsIFilePicker = Components.interfaces.nsIFilePicker;
var fp = Components.classes["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker);
fp.init(window, "Выберите файл", nsIFilePicker.modeOpen);

Сначала создается новый объект диалога выбора файла, который сохраняется в переменную 'fp'. Функция 'init' используется для инициализации диалога выбора файла. Эта функция принимает три аргумента: окно в котором открывается диалог, заголовок диалога и его режим. В примере указан режим 'modeOpen', который используется для диалога "Открыть". Кроме того вы можете использовать константы 'modeGetFolder' и 'modeSave' для открытия диалога в двух других режимах. Эти константы режимов предоставляются интерфейсом 'nsIFilePicker'.

Директория по умолчанию и фильтры

Вы можете изменять следующие две настройки диалога перед его показом:

  • Первая - это директория, которая будет показана по умолчанию при открытии диалога.
  • Вторая - это фильтр, который указывает список типов файлов, которые будут отображаться в диалоге. Это может быть использовано, например, для сокрытия всех файлов кроме ".html".

Вы можете задать умолчальную директорию установив свойство 'displayDirectory' объекта диалога на нужную директорию. Эта директория должна быть указана как объект 'nsILocalFile'. Если вы не будете этого делать, то система сама постарается выбрать наиболее подходящую директорию. Фильтры для типов файлов, которые вы желаете видеть в окне диалога, добавляются с помощью функции 'appendFilters()':

fp.appendFilters(nsIFilePicker.filterHTML | nsIFilePicker.filterImages);
fp.appendFilters(nsIFilePicker.filterText | nsIFilePicker.filterAll);
  • В первой строчке примера добавляются фильтры для файлов HTML и изображений. Пользователю будут доступны для выбора только файлы этих типов. Способ, которым это осуществляется, является платформозависимым. На большинстве платформ каждый из фильтров будет применяться отдельно и пользователь сможет выбирать, видеть ли ему HTML-файлы или файлы изображений.
  • Во второй строчке добавляются фильтры для текстовых файлов и всех файлов. В результате пользователь сможет опционально просматривать только текстовые файлы или сразу все файлы.

Кроме того, вы можете использовать фильтры 'filterXML' и 'filterXUL' для XML- и XUL-файлов соответственно. Если вам нужен дополнительный фильтр для специфических файлов, вы можете использовать функцию 'appendFilter()' для его задания следующим образом:

fp.appendFilter("Аудио-файлы","*.wav; *.mp3");

Этот код добавляет фильтр для Wave- и MP3- аудио-файлов. Первый аргумент - это название описываемого типа файлов, а второй - список масок файлов, разделенных точкой с запятой. Вы можете указать столько масок, сколько вам нужно. Вы можете вызывать функцию 'appendFilter' столько раз, сколько вам нужно добавить своих фильтров. Порядок, в котором вы их добавляете, задает их приоритетность. Как правило, первый из добавленных фильтров становится выбранным по умолчанию.

Получение выбранного файла

И наконец, вы можете показать диалог с помощью функции 'show()'. Она не принимает никаких аргументов, но возвращает определенный код (статус) соответственно выбору пользователя. Заметим, что эта функция не возвращает ничего до тех пор, пока пользователь не выберет файл. Функция возвращает одну из следующих трех констант:

  • returnOK - пользователь выбрал файл и нажал "OK". Выбранный пользователем файл будет доступен как значение свойства 'file' объекта диалога выбора файла.
  • returnCancel - пользователь нажал "Отмена".
  • returnReplace - это значение возвращается в режиме сохранения, когда пользователь выбрал файл для перезаписи. (Значение 'returnOK' возвращается, когда пользователь ввел имя нового файла.)

Вы должны проверить значение, возвращаемое методом 'show()', а затем получить доступ к объекту файла с помощью свойства 'file' диалога выбора файла:

var res = fp.show();
if (res == nsIFilePicker.returnOK) {
  var thefile = fp.file;
  // --- здесь что-то делается с полученным файлом ---
}

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

Перевод с английского: Д.Скоробогатов, 15.09.2010. Оригинальный текст доступен по адресу https://developer.mozilla.org/en/XUL_Tutorial/Open_and_Save_Dialogs.

Биржа долевых инвестиций SIMEX.

Последнее редактирование: 2010-09-15 10:49:51

Метки материала: файлы, xulrunner, программирование, javascript, xpcom, компоненты xpcom, mozilla

Оставьте, пожалуйста, свой комментарий к публикации

Представиться как     Антибот:
   

Просьба не постить мусор. Если вы хотите потестить xBB, воспользуйтесь кнопкой предварительного просмотра на панели инструментов xBBEditor-а.


© 2007-2017, Дмитрий Скоробогатов.
Разрешается воспроизводить, распространять и/или изменять материалы сайта
в соответствии с условиями GNU Free Documentation License,
версии 1.2 или любой более поздней версии, опубликованной FSF,
если только иное не указано в самих материалах.