!7 sclass VidFile { File file; double length = -1; } /*c*/module AJCBatch > DynObjectTable { visualize { JComponent sup = super.visualize(); ret jHandleMultiFileDrop(vf> onFileDrop, withCenteredTitle("Input videos (you can drag&drop files here):", withRightAlignedButtons(sup, tableDependentButton(table, "Remove selected", r removeSelected) )); } void onFileDrop(L files) enter { print("Have file drop"); Set haveFiles = collectAsSet file(data()); addAll(map(listMinusSet(files, haveFiles), f -> nu VidFile(file := f))); } start { itemToMap = func(VidFile v) -> Map { litorderedmap( "Video" := fileName(v.file), "Folder" := dirPath(v.file), "Duration" := v.length < 0 ? "?" : formatMinuteAndSeconds(iceil(v.length)) ) }; } }