OpenConcerto

Dépôt officiel du code source de l'ERP OpenConcerto
sonarqube

svn://code.openconcerto.org/openconcerto

Rev

Rev 182 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 182 Rev 185
Line 31... Line 31...
31
import java.awt.FileDialog;
31
import java.awt.FileDialog;
32
import java.awt.FlowLayout;
32
import java.awt.FlowLayout;
33
import java.awt.Frame;
33
import java.awt.Frame;
34
import java.awt.GridBagConstraints;
34
import java.awt.GridBagConstraints;
35
import java.awt.GridBagLayout;
35
import java.awt.GridBagLayout;
-
 
36
import java.awt.Toolkit;
36
import java.awt.datatransfer.DataFlavor;
37
import java.awt.datatransfer.DataFlavor;
37
import java.awt.datatransfer.Transferable;
38
import java.awt.datatransfer.Transferable;
-
 
39
import java.awt.datatransfer.UnsupportedFlavorException;
38
import java.awt.dnd.DnDConstants;
40
import java.awt.dnd.DnDConstants;
39
import java.awt.dnd.DropTarget;
41
import java.awt.dnd.DropTarget;
40
import java.awt.dnd.DropTargetDropEvent;
42
import java.awt.dnd.DropTargetDropEvent;
41
import java.awt.event.ActionEvent;
43
import java.awt.event.ActionEvent;
42
import java.awt.event.ActionListener;
44
import java.awt.event.ActionListener;
43
import java.awt.event.MouseAdapter;
45
import java.awt.event.MouseAdapter;
44
import java.awt.event.MouseEvent;
46
import java.awt.event.MouseEvent;
-
 
47
import java.awt.image.BufferedImage;
45
import java.io.File;
48
import java.io.File;
46
import java.io.IOException;
49
import java.io.IOException;
47
import java.net.URI;
50
import java.net.URI;
48
import java.net.URISyntaxException;
51
import java.net.URISyntaxException;
49
import java.sql.SQLException;
52
import java.sql.SQLException;
Line 53... Line 56...
53
import java.util.Comparator;
56
import java.util.Comparator;
54
import java.util.HashSet;
57
import java.util.HashSet;
55
import java.util.List;
58
import java.util.List;
56
import java.util.Set;
59
import java.util.Set;
57
 
60
 
-
 
61
import javax.imageio.ImageIO;
58
import javax.swing.BorderFactory;
62
import javax.swing.BorderFactory;
59
import javax.swing.JButton;
63
import javax.swing.JButton;
60
import javax.swing.JLabel;
64
import javax.swing.JLabel;
61
import javax.swing.JOptionPane;
65
import javax.swing.JOptionPane;
62
import javax.swing.JPanel;
66
import javax.swing.JPanel;
Line 66... Line 70...
66
import javax.swing.event.ListDataEvent;
70
import javax.swing.event.ListDataEvent;
67
import javax.swing.event.ListDataListener;
71
import javax.swing.event.ListDataListener;
68
 
72
 
69
public class AttachmentPanel extends JPanel {
73
public class AttachmentPanel extends JPanel {
70
 
74
 
71
    private final SQLRowAccessor rowSource;
75
    private SQLRowAccessor rowSource;
72
    private final Collection<SQLRowAccessor> rowSecondaires;
76
    private final Collection<SQLRowAccessor> rowSecondaires;
73
    private List<ListDataListener> listeners = new ArrayList<>();
77
    private List<ListDataListener> listeners = new ArrayList<>();
74
 
78
 
75
    private int idParent = 1;
79
    private int idParent = 1;
76
    private List<Integer> parents = new ArrayList<>();
80
    private List<Integer> parents = new ArrayList<>();
Line 92... Line 96...
92
        this.parentsNames.add("Racine");
96
        this.parentsNames.add("Racine");
93
        initUI();
97
        initUI();
94
        setFocusable(true);
98
        setFocusable(true);
95
    }
99
    }
96
 
100
 
-
 
101
    public void setRowSource(SQLRowAccessor rowSource) {
-
 
102
        this.rowSource = rowSource;
-
 
103
        initUI();
-
 
104
    }
-
 
105
 
97
    public void addListener(ListDataListener l) {
106
    public void addListener(ListDataListener l) {
98
        this.listeners.add(l);
107
        this.listeners.add(l);
99
    }
108
    }
100
 
109
 
101
    public void removeListener(ListDataListener l) {
110
    public void removeListener(ListDataListener l) {
Line 114... Line 123...
114
 
123
 
115
    public void initUI() {
124
    public void initUI() {
116
        this.filePanels.clear();
125
        this.filePanels.clear();
117
        this.invalidate();
126
        this.invalidate();
118
        this.removeAll();
127
        this.removeAll();
-
 
128
        if (rowSource != null) {
119
        GridBagConstraints c = new DefaultGridBagConstraints();
129
            GridBagConstraints c = new DefaultGridBagConstraints();
120
 
130
 
121
        // Recupération de la liste des fichiers
131
            // Recupération de la liste des fichiers
122
 
132
 
123
        // TODO requete dans un SwingWorker
133
            // TODO requete dans un SwingWorker
Line 215... Line 225...
215
        toolbar.add(addFolderButton);
225
            toolbar.add(addFolderButton);
216
        final JButton addFileButton = new JButton("Ajouter un fichier");
226
            final JButton addFileButton = new JButton("Ajouter un fichier");
217
        toolbar.add(addFileButton);
227
            toolbar.add(addFileButton);
218
        final JButton addURLButton = new JButton("Ajouter une URL");
228
            final JButton addURLButton = new JButton("Ajouter une URL");
219
        toolbar.add(addURLButton);
229
            toolbar.add(addURLButton);
-
 
230
            final JButton copyClipboard = new JButton("Coller l'image");
-
 
231
            toolbar.add(copyClipboard);
220
 
232
 
221
        final JProgressBar progressBar = new JProgressBar(0, 100);
233
            final JProgressBar progressBar = new JProgressBar(0, 100);
222
        progressBar.setValue(100);
234
            progressBar.setValue(100);
223
        progressBar.setStringPainted(true);
235
            progressBar.setStringPainted(true);
224
        progressBar.setVisible(false);
236
            progressBar.setVisible(false);
Line 281... Line 293...
281
	                initUI();
293
                        initUI();
282
	            }
294
                    }
283
	        }
295
                }
284
	    });
296
            });
285
 
297
 
-
 
298
            copyClipboard.addActionListener(new ActionListener() {
-
 
299
 
-
 
300
                @Override
-
 
301
                public void actionPerformed(ActionEvent e) {
-
 
302
 
-
 
303
                    Transferable content = Toolkit.getDefaultToolkit().getSystemClipboard().getContents(null);
-
 
304
                    if (content == null) {
-
 
305
                        System.err.println("error: nothing found in clipboard");
-
 
306
                        return;
-
 
307
                    }
-
 
308
                    if (!content.isDataFlavorSupported(DataFlavor.imageFlavor)) {
-
 
309
                        System.err.println("error: no image found in clipbaord");
-
 
310
                        return;
-
 
311
                    }
-
 
312
 
-
 
313
                    try {
-
 
314
                        final BufferedImage img = (BufferedImage) content.getTransferData(DataFlavor.imageFlavor);
-
 
315
                        final File tmp = File.createTempFile("Image", ".png");
-
 
316
                        ImageIO.write(img, "png", tmp);
-
 
317
                        final AttachmentUtils utils = new AttachmentUtils();
-
 
318
                        utils.uploadFile(tmp, AttachmentPanel.this.rowSource, AttachmentPanel.this.idParent);
-
 
319
                        initUI();
-
 
320
                        tmp.delete();
-
 
321
                    } catch (UnsupportedFlavorException | IOException | SQLException e1) {
-
 
322
                        ExceptionHandler.handle(AttachmentPanel.this, "Erreur lors de la récupération de l'image", e1);
-
 
323
                    }
-
 
324
                }
-
 
325
 
-
 
326
            });
-
 
327
 
286
        ScrollablePanel files = new ScrollablePanel() {
328
            ScrollablePanel files = new ScrollablePanel() {
287
            @Override
329
                @Override
288
            public Dimension getPreferredSize() {
330
                public Dimension getPreferredSize() {
289
                int w = getSize().width;
331
                    int w = getSize().width;
290
                int nbPerRow = (w - 5) / (FilePanel.PREFERRED_WIDTH + 5);
332
                    int nbPerRow = (w - 5) / (FilePanel.PREFERRED_WIDTH + 5);
Line 403... Line 445...
403
                Transferable t = dtde.getTransferable();
445
                    Transferable t = dtde.getTransferable();
404
                try {
446
                    try {
405
                    if (t.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
447
                        if (t.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
406
                        @SuppressWarnings("unchecked")
448
                            @SuppressWarnings("unchecked")
407
                        List<File> fileList = (List<File>) t.getTransferData(DataFlavor.javaFileListFlavor);
449
                            List<File> fileList = (List<File>) t.getTransferData(DataFlavor.javaFileListFlavor);
408
                        // TODO faire en arriere plan, mettre une jauge à droite du bouton ajouter
450
                            // TODO faire en arriere plan, mettre une jauge à droite du bouton
-
 
451
                            // ajouter
409
                        // et mettre un bouton d'annulation
452
                            // et mettre un bouton d'annulation
410
                        AttachmentUtils utils = new AttachmentUtils();
453
                            AttachmentUtils utils = new AttachmentUtils();
411
                        boolean cancelledByUser = false;
454
                            boolean cancelledByUser = false;
412
                        for (File f : fileList) {
455
                            for (File f : fileList) {
413
                            if (cancelledByUser) {
456
                                if (cancelledByUser) {
Line 431... Line 474...
431
        };
474
            };
432
        files.setDropTarget(dt);
475
            files.setDropTarget(dt);
433
        scroll.getViewport().setDropTarget(dt);
476
            scroll.getViewport().setDropTarget(dt);
434
        fireDataChanged();
477
            fireDataChanged();
435
    }
478
        }
-
 
479
    }
436
 
480
 
437
    public Set<Attachment> getSelectedAttachments() {
481
    public Set<Attachment> getSelectedAttachments() {
438
        return this.selectedAttachments;
482
        return this.selectedAttachments;
439
    }
483
    }
440
 
484