5.2. Drag&Drop файлов#

Attention

Приём перетаскиваемого файла реализован только для списков и деревьев.

5.2.1. Активация функциональности#

Для активации бросания файлов на фрейм, в Avm необходимо указать свойство:

Код Avm#
1  <frame dragDrop.files.isDropEnabled="true"> </frame>

Перекрыть в Avi-выборки метод-обработчик onDropFiles. Или создать свой обработчик, имя которого указать в свойстве фрейма dragDrop.files.dropOperation.

Код Avi#
1  override protected def onDropFiles(event: DropFilesEvent): Unit = {
2    dialogs.showMessage("onDropFiles: Загружены файл(ы):\r\n"
3      + event.uploadResults.map(it => s"""${it.fileName} -> ${it.file.getAbsolutePath}""").mkString("\r\n"));
4  }

Если для фрейма активировано бросание файла, то при перетаскивании файла в область главного контрола фрейма, курсор мыши примет вид:

../../../_images/drag_and_drop_files-allow.png

В остальных случаях курсор будет иметь вид:

../../../_images/drag_and_drop_files-reject.png

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

По завершении загрузки файлов будет вызвана указанная в свойстве фрейма dragDrop.files.dropOperation операция-обработчик.

5.2.2. Ограничения на загрузку файлов#

Возможно наложение ограничений на загружаемые файлы:

  • По расширению.

  • По размеру отдельного файла.

  • По суммарному размеру файлов.

  • По общему количеству файлов.

Наложение ограничений выполняется указанием свойств фрейма:

Код Avm#
1<frame
2    dragDrop.files.filter.exts="jpg,jpeg,iso,zip"
3    dragDrop.files.filter.maxSize="20M"
4    dragDrop.files.filter.maxTotalSize="256M"
5    dragDrop.files.filter.maxCount="20"/>
6</frame>

5.2.3. Управление из кода операций#

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

Код Avi#
1@Oper(caption = "Разрешить/Запретить перетаскивание файлов", imageIndex = 23)
2def tb_switchIsFileDropEnabled(): Unit = {
3  selection.view.dragDrop.files.isDropEnabled = !selection.view.dragDrop.files.isDropEnabled
4}