diff --git a/src/main/java/fr/uha/gabalier/controller/Controller.java b/src/main/java/fr/uha/gabalier/controller/Controller.java new file mode 100644 index 0000000..84c4090 --- /dev/null +++ b/src/main/java/fr/uha/gabalier/controller/Controller.java @@ -0,0 +1,4 @@ +package fr.uha.gabalier.controller; + +public interface Controller { +} diff --git a/src/main/java/fr/uha/gabalier/core/ImageLoader.java b/src/main/java/fr/uha/gabalier/core/ImageLoader.java new file mode 100644 index 0000000..9827337 --- /dev/null +++ b/src/main/java/fr/uha/gabalier/core/ImageLoader.java @@ -0,0 +1,70 @@ +package fr.uha.gabalier.core; + +import fr.uha.gabalier.util.ImageLib; +import fr.uha.gabalier.view.Preview; + +import javax.swing.*; +import java.awt.*; +import java.io.File; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.CancellationException; +import java.util.concurrent.ExecutionException; + +public class ImageLoader extends SwingWorker, Integer> { + + private final File root; + private Preview app; + private List images; + private final int iconWidth; + + public ImageLoader(File root, Preview app, int iconWidth) { + this.root = root; + this.app = app; + this.iconWidth = iconWidth; + this.images = new ArrayList<>(); + } + + private void loadImages(File current) throws NullPointerException { + if (current.isFile()) { + final Image icon = ImageLib.createScaledImage(current, this.iconWidth, -1); + if (icon != null) { + images.add(icon); + publish(images.size()); + } + return; + } + + final File[] files = current.listFiles(); + if (files == null) throw new NullPointerException(); + for (File f : files) { + loadImages(f); + } + } + + @Override + protected List doInBackground() throws Exception { + loadImages(root); + return images; + } + + @Override + protected void process(List data) { + if (this.isCancelled()) return; + app.setStatus(String.valueOf(data.get(data.size() - 1))); + } + + @Override + protected void done() { + try { + app.setModel(this.get()); + app.setStatus(app.getModel().size() + "images loaded"); + } catch (CancellationException e) { + app.setStatus("Cancelled"); + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } finally { + app.postLoad(); + } + } +} diff --git a/src/main/java/fr/uha/gabalier/util/ImageLib.java b/src/main/java/fr/uha/gabalier/util/ImageLib.java new file mode 100644 index 0000000..1c743f0 --- /dev/null +++ b/src/main/java/fr/uha/gabalier/util/ImageLib.java @@ -0,0 +1,13 @@ +package fr.uha.gabalier.util; + +import java.awt.*; +import java.io.File; + +public final class ImageLib { + + public static Image createScaledImage(File file, int iconWidth, int i) { + return null; + } + + private ImageLib() {} +} diff --git a/src/main/java/fr/uha/gabalier/view/Preview.java b/src/main/java/fr/uha/gabalier/view/Preview.java new file mode 100644 index 0000000..7946c02 --- /dev/null +++ b/src/main/java/fr/uha/gabalier/view/Preview.java @@ -0,0 +1,25 @@ +package fr.uha.gabalier.view; + +import java.awt.*; +import java.util.List; + +public class Preview { + private List model; + private String status; + + public void setModel(List images) { + this.model = images; + } + + public List getModel() { + return model; + } + + public void setStatus(String status) { + this.status = status; + } + + public void postLoad() { + + } +} diff --git a/src/main/java/fr/uha/gabalier/view/View.java b/src/main/java/fr/uha/gabalier/view/View.java new file mode 100644 index 0000000..72e6d65 --- /dev/null +++ b/src/main/java/fr/uha/gabalier/view/View.java @@ -0,0 +1,4 @@ +package fr.uha.gabalier.view; + +public interface View { +}