From d5677d1cdfc5dfb82a4f74cba8692ed47d8ef6df Mon Sep 17 00:00:00 2001 From: Rafael Date: Tue, 13 Jan 2026 00:18:51 -0300 Subject: [PATCH 1/2] add drag and drop to open .zip files and folders --- .../org/weasis/base/ui/gui/WeasisWin.java | 27 ++++++++++++++++++- .../dicom/explorer/DicomSeriesHandler.java | 25 +++++++++++++++-- .../weasis/dicom/explorer/ImportDicom.java | 1 + 3 files changed, 50 insertions(+), 3 deletions(-) diff --git a/weasis-base/weasis-base-ui/src/main/java/org/weasis/base/ui/gui/WeasisWin.java b/weasis-base/weasis-base-ui/src/main/java/org/weasis/base/ui/gui/WeasisWin.java index a3ca08fe4..0ddf77e4b 100755 --- a/weasis-base/weasis-base-ui/src/main/java/org/weasis/base/ui/gui/WeasisWin.java +++ b/weasis-base/weasis-base-ui/src/main/java/org/weasis/base/ui/gui/WeasisWin.java @@ -1151,9 +1151,34 @@ protected boolean dropFiles(List files, TransferSupport support) { } } + // Separate zip files from regular files + List zipFiles = new ArrayList<>(); + List regularFiles = new ArrayList<>(); + for (File file : files) { + if (!file.isDirectory() && file.getName().toLowerCase().endsWith(".zip")) { // NON-NLS + zipFiles.add(file); + } else { + regularFiles.add(file); + } + } + + // Process zip files using DicomSeriesHandler if available + if (!zipFiles.isEmpty()) { + try { + Class dicomSeriesHandlerClass = Class.forName("org.weasis.dicom.explorer.DicomSeriesHandler"); // NON-NLS + java.lang.reflect.Method dropDicomFilesMethod = dicomSeriesHandlerClass.getMethod("dropDicomFiles", List.class); + Boolean result = (Boolean) dropDicomFilesMethod.invoke(null, zipFiles); + if (Boolean.TRUE.equals(result)) { + // Zip files processed successfully + } + } catch (Exception e) { + LOGGER.warn("Cannot process DICOM zip files via DicomSeriesHandler", e); + } + } + final List dirs = new ArrayList<>(); Map> codecs = new HashMap<>(); - for (File file : files) { + for (File file : regularFiles) { if (file.isDirectory()) { dirs.add(file); continue; diff --git a/weasis-dicom/weasis-dicom-explorer/src/main/java/org/weasis/dicom/explorer/DicomSeriesHandler.java b/weasis-dicom/weasis-dicom-explorer/src/main/java/org/weasis/dicom/explorer/DicomSeriesHandler.java index fafb68391..05582faf6 100755 --- a/weasis-dicom/weasis-dicom-explorer/src/main/java/org/weasis/dicom/explorer/DicomSeriesHandler.java +++ b/weasis-dicom/weasis-dicom-explorer/src/main/java/org/weasis/dicom/explorer/DicomSeriesHandler.java @@ -37,6 +37,7 @@ import org.weasis.dicom.codec.DicomSeries; import org.weasis.dicom.explorer.HangingProtocols.OpeningViewer; + public class DicomSeriesHandler extends SequenceHandler { private static final Logger LOGGER = LoggerFactory.getLogger(DicomSeriesHandler.class); protected final ViewCanvas viewCanvas; @@ -164,8 +165,28 @@ public static boolean dropDicomFiles(List files) { DicomModel model = (DicomModel) dicomView.getDataExplorerModel(); OpeningViewer openingViewer = OpeningViewer.getOpeningViewerByLocalKey(LocalImport.LAST_OPEN_VIEWER_MODE); - DicomModel.LOADING_EXECUTOR.execute( - new LoadLocalDicom(files.toArray(File[]::new), true, model, openingViewer)); + + // Drag and Drop to open zip files + List zipFiles = new ArrayList<>(); + List regularFiles = new ArrayList<>(); + + for (File file : files) { + if (file.getName().toLowerCase().endsWith(".zip")) { // NON-NLS + zipFiles.add(file); + } else { + regularFiles.add(file); + } + } + + for (File zipFile : zipFiles) { + DicomZipImport.loadDicomZip( + zipFile, model, openingViewer, GuiUtils.getUICore().getApplicationWindow()); + } + + if (!regularFiles.isEmpty()) { + DicomModel.LOADING_EXECUTOR.execute( + new LoadLocalDicom(regularFiles.toArray(File[]::new), true, model, openingViewer)); + } return true; } return false; diff --git a/weasis-dicom/weasis-dicom-explorer/src/main/java/org/weasis/dicom/explorer/ImportDicom.java b/weasis-dicom/weasis-dicom-explorer/src/main/java/org/weasis/dicom/explorer/ImportDicom.java index 9fcaaf735..d575ff921 100755 --- a/weasis-dicom/weasis-dicom-explorer/src/main/java/org/weasis/dicom/explorer/ImportDicom.java +++ b/weasis-dicom/weasis-dicom-explorer/src/main/java/org/weasis/dicom/explorer/ImportDicom.java @@ -14,5 +14,6 @@ public interface ImportDicom extends PageItem { + void importDICOM(DicomModel dicomModel, JProgressBar info); } From 5102fdd89876093f36ed9e25a2cd944f683ac265 Mon Sep 17 00:00:00 2001 From: Rafael Date: Tue, 13 Jan 2026 00:32:02 -0300 Subject: [PATCH 2/2] add drag and drop to open .zip files and folders --- .../src/main/java/org/weasis/base/ui/gui/WeasisWin.java | 1 + 1 file changed, 1 insertion(+) diff --git a/weasis-base/weasis-base-ui/src/main/java/org/weasis/base/ui/gui/WeasisWin.java b/weasis-base/weasis-base-ui/src/main/java/org/weasis/base/ui/gui/WeasisWin.java index 0ddf77e4b..66eb94193 100755 --- a/weasis-base/weasis-base-ui/src/main/java/org/weasis/base/ui/gui/WeasisWin.java +++ b/weasis-base/weasis-base-ui/src/main/java/org/weasis/base/ui/gui/WeasisWin.java @@ -1164,6 +1164,7 @@ protected boolean dropFiles(List files, TransferSupport support) { // Process zip files using DicomSeriesHandler if available if (!zipFiles.isEmpty()) { + try { Class dicomSeriesHandlerClass = Class.forName("org.weasis.dicom.explorer.DicomSeriesHandler"); // NON-NLS java.lang.reflect.Method dropDicomFilesMethod = dicomSeriesHandlerClass.getMethod("dropDicomFiles", List.class);