/*************************************************** * * cismet GmbH, Saarbruecken, Germany * * ... and it just works. * ****************************************************/ /* * DocumentPanel.java * * Created on 26. August 2008, 11:18 */ package de.cismet.tools.gui.documents; import java.awt.EventQueue; import java.awt.Image; import javax.swing.ImageIcon; import javax.swing.JList; import javax.swing.event.ListDataEvent; import javax.swing.event.ListDataListener; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; /** * DOCUMENT ME! * * @author hell * @version $Revision$, $Date$ */ public class DocumentPanel extends javax.swing.JPanel { //~ Instance fields -------------------------------------------------------- DocumentListModel dlm = new DocumentListModel(); private final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(this.getClass()); // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JLabel lblPreview; private javax.swing.JLabel lblUrl; private javax.swing.JList lstDocuments; private javax.swing.JPanel panPreview; private javax.swing.JScrollPane scpLstDocuments; // End of variables declaration//GEN-END:variables //~ Constructors ----------------------------------------------------------- /** * Creates new form DocumentPanel. */ public DocumentPanel() { initComponents(); lstDocuments.setModel(dlm); dlm.addListDataListener(new ListDataListener() { @Override public void intervalAdded(final ListDataEvent e) { handleVisibility(); } @Override public void intervalRemoved(final ListDataEvent e) { handleVisibility(); } @Override public void contentsChanged(final ListDataEvent e) { } }); lstDocuments.setCellRenderer(new DocumentListCellRenderer()); lstDocuments.addListSelectionListener(new ListSelectionListener() { @Override public void valueChanged(final ListSelectionEvent e) { final Object selection = lstDocuments.getSelectedValue(); if (selection != null) { final Document d = (Document)selection; new Thread("DocumentPanel valueChanged()") { @Override public void run() { EventQueue.invokeLater(new Runnable() { @Override public void run() { lblPreview.setIcon(null); lblPreview.setText( org.openide.util.NbBundle.getMessage( DocumentPanel.class, "DocumentPanel.lblPreview.text.progress")); // NOI18N lblUrl.setText(d.getDocumentURI()); } }); int w = lblPreview.getWidth() - 10; int h = lblPreview.getHeight() - 10; if (w < 2) { w = 2; } if (h < 2) { h = 2; } final Image i = d.getPreview(w, h); EventQueue.invokeLater(new Runnable() { @Override public void run() { if (i != null) { lblPreview.setText(""); // NOI18N lblPreview.setIcon(new ImageIcon(i)); } else { lblPreview.setIcon(null); lblPreview.setText( org.openide.util.NbBundle.getMessage( DocumentPanel.class, "DocumentPanel.lblPreview.text.default")); // NOI18N } lblUrl.setText(d.getDocumentURI()); } }); } }.start(); } } }); handleVisibility(); } //~ Methods ---------------------------------------------------------------- /** * This method is called from within the constructor to initialize the form. WARNING: Do NOT modify this code. The * content of this method is always regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { scpLstDocuments = new javax.swing.JScrollPane(); lstDocuments = new javax.swing.JList(); panPreview = new javax.swing.JPanel(); lblPreview = new javax.swing.JLabel(); lblUrl = new javax.swing.JLabel(); scpLstDocuments.setPreferredSize(new java.awt.Dimension(120, 138)); lstDocuments.setModel(new javax.swing.AbstractListModel() { String[] strings = { "Item 1", "Item 2", "Item 3", "Item 4", "Item 5" }; @Override public int getSize() { return strings.length; } @Override public Object getElementAt(final int i) { return strings[i]; } }); scpLstDocuments.setViewportView(lstDocuments); panPreview.setBorder(javax.swing.BorderFactory.createCompoundBorder( javax.swing.BorderFactory.createEmptyBorder(0, 10, 0, 0), javax.swing.BorderFactory.createTitledBorder( org.openide.util.NbBundle.getMessage( DocumentPanel.class, "DocumentPanel.panPreview.border.insideBorder.title")))); // NOI18N panPreview.setOpaque(false); panPreview.addComponentListener(new java.awt.event.ComponentAdapter() { @Override public void componentResized(final java.awt.event.ComponentEvent evt) { panPreviewComponentResized(evt); } }); panPreview.setLayout(new java.awt.BorderLayout()); lblPreview.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); lblPreview.setText(org.openide.util.NbBundle.getMessage( DocumentPanel.class, "DocumentPanel.lblPreview.text.default")); // NOI18N lblPreview.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); lblPreview.addMouseListener(new java.awt.event.MouseAdapter() { @Override public void mouseClicked(final java.awt.event.MouseEvent evt) { lblPreviewMouseClicked(evt); } }); panPreview.add(lblPreview, java.awt.BorderLayout.CENTER); lblUrl.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT); lblUrl.setText(org.openide.util.NbBundle.getMessage(DocumentPanel.class, "DocumentPanel.lblUrl.text")); // NOI18N final javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup( layout.createSequentialGroup().addComponent( scpLstDocuments, javax.swing.GroupLayout.PREFERRED_SIZE, 166, javax.swing.GroupLayout.PREFERRED_SIZE).addComponent( panPreview, javax.swing.GroupLayout.DEFAULT_SIZE, 240, Short.MAX_VALUE).addContainerGap()).addGroup( layout.createSequentialGroup().addComponent( lblUrl, javax.swing.GroupLayout.DEFAULT_SIZE, 399, Short.MAX_VALUE).addGap(19, 19, 19))); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup( layout.createSequentialGroup().addGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup( layout.createSequentialGroup().addGap(8, 8, 8).addComponent( scpLstDocuments, javax.swing.GroupLayout.DEFAULT_SIZE, 180, Short.MAX_VALUE).addGap(3, 3, 3)).addComponent( panPreview, javax.swing.GroupLayout.DEFAULT_SIZE, 191, Short.MAX_VALUE)).addComponent(lblUrl))); } // </editor-fold>//GEN-END:initComponents /** * DOCUMENT ME! */ private void handleVisibility() { if (dlm.size() <= 1) { lstDocuments.setSelectedIndex(0); scpLstDocuments.setVisible(false); } else { scpLstDocuments.setVisible(true); } } /** * DOCUMENT ME! * * @param evt DOCUMENT ME! */ private void panPreviewComponentResized(final java.awt.event.ComponentEvent evt) { //GEN-FIRST:event_panPreviewComponentResized final Object sel = lstDocuments.getSelectedValue(); if (sel != null) { final Document selD = (Document)sel; EventQueue.invokeLater(new Runnable() { @Override public void run() { lstDocuments.clearSelection(); lstDocuments.setSelectedValue(selD, true); } }); } } //GEN-LAST:event_panPreviewComponentResized /** * DOCUMENT ME! * * @param evt DOCUMENT ME! */ private void lblPreviewMouseClicked(final java.awt.event.MouseEvent evt) { //GEN-FIRST:event_lblPreviewMouseClicked final Document selD = (Document)lstDocuments.getSelectedValue(); if (!evt.isPopupTrigger() && (evt.getClickCount() > 1) && (selD != null)) { String gotoUrl = selD.getDocumentURI(); try { de.cismet.tools.BrowserLauncher.openURL(gotoUrl); } catch (Exception e2) { log.warn("das 1te Mal ging schief.Fehler beim Oeffnen von:" + gotoUrl + "\nLetzter Versuch", e2); // NOI18N try { gotoUrl = gotoUrl.replaceAll("\\\\", "/"); // NOI18N gotoUrl = gotoUrl.replaceAll(" ", "%20"); // NOI18N de.cismet.tools.BrowserLauncher.openURL("file:///" + gotoUrl); // NOI18N } catch (Exception e3) { log.error("Auch das 2te Mal ging schief.Fehler beim Oeffnen von:file://" + gotoUrl, e3); // NOI18N } } } } //GEN-LAST:event_lblPreviewMouseClicked /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public DocumentListModel getDocumentListModel() { return dlm; } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public JList getDocumentListComponent() { return lstDocuments; } }