# PluginPanelItem

Структура `PluginPanelItem` описывает элемент файловой системы плагина. Она используется для возвращения информации о файловой системе плагина и для передачи плагину списка файлов для обработки.

    struct PluginPanelItem
    {
      FILETIME CreationTime;
      FILETIME LastAccessTime;
      FILETIME LastWriteTime;
      FILETIME ChangeTime;
      unsigned __int64 FileSize;
      unsigned __int64 AllocationSize;
      const wchar_t *FileName;
      const wchar_t *AlternateFileName;
      const wchar_t *Description;
      const wchar_t *Owner;
      const wchar_t * const *CustomColumnData;
      size_t CustomColumnNumber;
      PLUGINPANELITEMFLAGS Flags;
      struct
      {
        void *Data;
        FARPANELITEMFREECALLBACK FreeData;
      } UserData;
      uintptr_t FileAttributes;
      uintptr_t NumberOfLinks;
      uintptr_t CRC32;
      intptr_t Reserved[2];
    };

### Элементы

CreationTime
Время создания - структура FILETIME содержащая время создания файла. FindFirstFile и FindNextFile возвращают время файла в UTC-формате. Эти функции устанавливают элементы FILETIME в ноль, если файловая система, содержащая файл не поддерживает этот временной атрибут. Вы можете использовать функцию FileTimeToLocalFileTime для преобразования из UTC в локальное время и тогда использовать функцию FileTimeToSystemTime для преобразования локального времени в структуру SYSTEMTIME содержащую отдельные элементы для месяца, дня, года и так далее...
LastAccessTime
Структура FILETIME с временем последнего доступа к файлу. Время хранится в UTC формате; элементы структуры установлены в ноль, если файловая система не поддерживает этого свойства.
LastWriteTime
Структура FILETIME с временем последней записи в файл. Время хранится в UTC формате; элементы структуры установлены в ноль, если файловая система не поддерживает этого свойства.
ChangeTime
Структура FILETIME с временем последнего изменения файла. Время хранится в UTC формате; элементы структуры установлены в ноль, если файловая система не поддерживает этого свойства.
FileSize
Размер файла в байтах.
AllocationSize
Выделенный размер файла в байтах.
FileName
Указатель на строку с именем файла.
AlternateFileName
Указатель на строку с альтернативным именем файла.
Description
Указывает на описание файла. Плагин может использовать это поле для передачи описания файла Far Manager'у. Если вы не хотите указывать описания, установите `Description` в `NULL`. Если плагин использует стандартную обработку описаний Far Manager'а, и передал имена описаний Far Manager'у в функции GetOpenPanelInfoW, это поле также должно быть `NULL`.
Owner
Указывает на имя владельца файла. Плагин может использовать это поле для передачи имён владельцев файлов Far Manager'у. Если Вам это не нужно, установите это поле в `NULL`.
CustomColumnData
Указывает на массив адресов строк для определённых плагином типов колонок. Первая строка содержит данные для типа колонки C0, вторая - для C1 и т.д. Может быть задано до 100 дополнительных типов колонок от `C0` до `C99`. Если вы не нуждаетесь в дополнительных типах колонок, установите это поле в `NULL`.
CustomColumnNumber
Число строк с данными о дополнительных типах колонок.
Flags
Может быть комбинацией следующих значений (тип PLUGINPANELITEMFLAGS):

Флаг | Описание
--- | ---
PPIF_PROCESSDESCR | Использовать внутреннюю обработку описаний Far Manager'а. Этот флаг может быть установлен для обрабатываемых файлов в функциях DeleteFilesW, GetFilesW и PutFilesW. В этом случае Far Manager будет обновлять файлы описаний с именами, возвращёнными в функции GetOpenPanelInfoW.
PPIF_SELECTED | Этот флаг отвечает за выделение элемента. В функциях PutFilesW, GetFilesW и ProcessHostFileW, если операция не удалась, но часть файлов была успешно обработана, плагин может убрать выделение только с обработанных файлов. Для этого плагин должен очистить флаг `PPIF_SELECTED` у обрабатываемых элементов в переданном функции списке `PluginPanelItem`.
PPIF_NONE | Нулевой флаг.

UserData
Это поле может быть использовано плагином для хранения целого значения или указателя на структуру данных.
В последнем случае, когда `UserData.Data` указывает на структуру данных и требуется её освобождение, то плагин должен определить функцию UserData.FreeData, используемую Far Manager'ом для освобождения занятых ресурсов.
FileAttributes
Указывает атрибуты найденного файла. Этот элемент может быть комбинацией следующих значений:

Атрибут | Описание
--- | ---
FILE_ATTRIBUTE_ARCHIVE | Это архивный файл. Приложения должны использовать этот флаг для копирования, архивирования или удаления.
FILE_ATTRIBUTE_COMPRESSED | Файл или каталог сжат. Для файла это означает, что все данные его сжаты, для каталога - что компрессия по умолчанию применяется ко всем его файлам и подкаталогам.
FILE_ATTRIBUTE_DIRECTORY | Это каталог.
FILE_ATTRIBUTE_ENCRYPTED | Файл или каталог зашифрован. Для файла, это означает, что все данные в файле зашифрованы. Для директория, это означает, что шифрование является умолчанием для вновь созданных файлов и подкаталогов.
FILE_ATTRIBUTE_HIDDEN | Файл скрыт. Такой файл не включается в обычный листинг каталога.
FILE_ATTRIBUTE_NORMAL | У этого файла не установлены другие атрибуты. Это значение корректно только при использовании без остальных флагов.
FILE_ATTRIBUTE_OFFLINE | Данные файла не доступны непосредственно. Означает, что реальные данные файла были физически перемещены на устройства хранения.
FILE_ATTRIBUTE_READONLY | Файл только для чтения. Приложения могут читать такой файл, но не могут записывать или удалять его.
FILE_ATTRIBUTE_REPARSE_POINT | Каталог является точкой повторной обработки.
FILE_ATTRIBUTE_SPARSE_FILE | Файл является т.н. "Sparse file".
FILE_ATTRIBUTE_SYSTEM | Этот файл - часть операционной системы.
FILE_ATTRIBUTE_TEMPORARY | Это временный файл. Приложения должны записывать в такой файл только в крайней необходимости. Большая часть данных файла находится в памяти и не сбрасывается на диск, так как файл будет удален.
FILE_ATTRIBUTE_NOT_CONTENT_INDEXED | Этот файл или каталог не будут индексироваться службой индексирования.
FILE_ATTRIBUTE_VIRTUAL | Этот файл - виртуальный файл.

NumberOfLinks
Количество жёстких ссылок.
CRC32
Контрольная сумма. Far Manager не использует это поле. Если плагин использует это поле, необходимо выставить флаг OPIF_USECRC32.
Reserved
Поля зарезервированы для будущего использования. Установите в `0`.

### Замечания

1. Все данные, выделенные плагином для членов `FileName`, `AlternateFileName`, `Description`, `Owner` и `CustomColumnData`, должны быть освобождены им. Far Manager создаёт копии этих данных в своих внутренних структурах. Таким образом они могут быть освобождены в любой момент после передачи Far Manager'у в функции GetFindDataW.
2. При запросе файлового объекта с панели Far Manager'а - если файл имеет длинное имя, то полное имя возвращается в элементе `FileName`, а усеченная версия формата 8.3 сохраняется в `AlternateFileName`. Иначе `AlternateFileName` пусто.
3. При запросе файлового объекта с панели плагина - `AlternateFileName` может содержать любую строку сформированную плагином, т.е. за содержимое отвечает опрашиваемый плагин.
4. Не все файловые системы позволяют хранить время создания файла и последнего доступа к нему, и не все системы хранят их одинаково. Например, в файловой системе FAT под Windows NT время создания файла записывается с разрешением 10 миллисекунд, время последней модификации - 2 секунды, а время доступа - 1 день (то есть, фактически, записывается только дата доступа). На файловой системе NTFS время доступа имеет разрешение 1 час.

Смотрите также:
структуры, WIN32_FIND_DATA, FILETIME