package eu.doppel_helix.netbeans.mantisintegration.swing; import biz.futureware.mantisconnect.IssueNoteData; import java.awt.Component; import java.awt.Container; import java.awt.Dimension; import java.awt.LayoutManager; import java.math.BigInteger; import java.text.SimpleDateFormat; import javax.swing.text.DefaultCaret; public class NoteDisplay extends javax.swing.JPanel { private final static BigInteger privateVal = BigInteger.valueOf(50); private final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); private final LayoutManager layout = new LayoutManager() { @Override public void addLayoutComponent(String name, Component comp) { } @Override public void removeLayoutComponent(Component comp) { } @Override public Dimension preferredLayoutSize(Container parent) { int maxWidth = parent.getWidth(); maxWidth -= 200; noteTextPane.setMaximumSize(new Dimension(maxWidth, Integer.MAX_VALUE)); noteTextPane.doLayout(); return new Dimension(parent.getWidth(), (int) Math.max( getPreferredHeight(), noteTextPane.getMinimumSize().getHeight())); } @Override public Dimension minimumLayoutSize(Container parent) { int maxWidth = parent.getWidth(); maxWidth -= 200; noteTextPane.setMaximumSize(new Dimension(maxWidth, Integer.MAX_VALUE)); noteTextPane.doLayout(); return new Dimension(parent.getWidth(), (int) Math.max( getMinimumHeight(), noteTextPane.getMinimumSize().getHeight())); } @Override public void layoutContainer(Container parent) { leftPanel.setBounds(0, 0, 200, parent.getHeight()); noteTextPane.setBounds(202, 0, parent.getWidth() - 202, parent.getHeight()); } private int getMinimumHeight() { double height = reporterLabel.getMinimumSize().getHeight(); height += submitDateLabel.getMinimumSize().getHeight(); height += editDateLabel.getMinimumSize().getHeight(); height += privateLabel.getMinimumSize().getHeight(); height += timeTrackingLabel.getMinimumSize().getHeight(); height += 20; // Somewhere my calculation is off return (int) height; } private int getPreferredHeight() { double height = reporterLabel.getPreferredSize().getHeight(); height += submitDateLabel.getPreferredSize().getHeight(); height += editDateLabel.getPreferredSize().getHeight(); height += privateLabel.getPreferredSize().getHeight(); height += timeTrackingLabel.getPreferredSize().getHeight(); height += 20; // Somewhere my calculation is off return (int) height; } }; public NoteDisplay() { initComponents(); setLayout(layout); } public NoteDisplay(IssueNoteData noteData, boolean showTimeTrack) { this(); setNoteData(noteData, showTimeTrack); } public void setNoteData(IssueNoteData noteData, boolean showTimeTrack) { reporterLabel.setText(noteData.getReporter().getName()); submitDateLabel.setText(sdf.format(noteData.getDate_submitted().getTime())); if(noteData.getLast_modified() != null) { editDateLabel.setVisible(true); editDateLabel.setText("edited on:" + sdf.format(noteData.getLast_modified().getTime())); } else { editDateLabel.setVisible(false); editDateLabel.setText(""); } if(privateVal.equals(noteData.getView_state().getId())) { privateLabel.setText("[private]"); } else { privateLabel.setText(""); } // TimeTracking is returned in minutes BigInteger timeTrack = noteData.getTime_tracking(); if(showTimeTrack && timeTrack != null && timeTrack.compareTo(BigInteger.ZERO) > 0) { BigInteger[] parts = timeTrack.divideAndRemainder(BigInteger.valueOf(60)); timeTrackingLabel.setVisible(true); timeTrackingLabel.setText(String.format("Time: %02d:%02d",parts[0], parts[1])); } else { timeTrackingLabel.setVisible(false); } DefaultCaret dc = (DefaultCaret) noteTextPane.getCaret(); dc.setUpdatePolicy(DefaultCaret.NEVER_UPDATE); noteTextPane.setText(noteData.getText()); } /** * 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() { java.awt.GridBagConstraints gridBagConstraints; leftPanel = new javax.swing.JPanel(); reporterLabel = new javax.swing.JLabel(); submitDateLabel = new javax.swing.JLabel(); editDateLabel = new javax.swing.JLabel(); privateLabel = new javax.swing.JLabel(); timeTrackingLabel = new javax.swing.JLabel(); noteTextPane = new javax.swing.JTextPane(); setBackground(new java.awt.Color(255, 255, 255)); setAlignmentX(0.0F); setOpaque(false); setLayout(new java.awt.GridBagLayout()); leftPanel.setBorder(javax.swing.BorderFactory.createEmptyBorder(5, 5, 5, 5)); leftPanel.setMaximumSize(new java.awt.Dimension(200, 32767)); leftPanel.setMinimumSize(new java.awt.Dimension(200, 100)); leftPanel.setPreferredSize(new java.awt.Dimension(200, 100)); leftPanel.setLayout(new javax.swing.BoxLayout(leftPanel, javax.swing.BoxLayout.PAGE_AXIS)); reporterLabel.setFont(reporterLabel.getFont().deriveFont(reporterLabel.getFont().getStyle() | java.awt.Font.BOLD, reporterLabel.getFont().getSize()+1)); org.openide.awt.Mnemonics.setLocalizedText(reporterLabel, org.openide.util.NbBundle.getMessage(NoteDisplay.class, "NoteDisplay.reporterLabel.text")); // NOI18N leftPanel.add(reporterLabel); submitDateLabel.setFont(submitDateLabel.getFont().deriveFont(submitDateLabel.getFont().getStyle() & ~java.awt.Font.BOLD, submitDateLabel.getFont().getSize()-1)); org.openide.awt.Mnemonics.setLocalizedText(submitDateLabel, org.openide.util.NbBundle.getMessage(NoteDisplay.class, "NoteDisplay.submitDateLabel.text")); // NOI18N leftPanel.add(submitDateLabel); editDateLabel.setFont(editDateLabel.getFont().deriveFont(editDateLabel.getFont().getStyle() & ~java.awt.Font.BOLD, editDateLabel.getFont().getSize()-1)); org.openide.awt.Mnemonics.setLocalizedText(editDateLabel, org.openide.util.NbBundle.getMessage(NoteDisplay.class, "NoteDisplay.editDateLabel.text")); // NOI18N leftPanel.add(editDateLabel); privateLabel.setFont(privateLabel.getFont().deriveFont(privateLabel.getFont().getStyle() & ~java.awt.Font.BOLD, privateLabel.getFont().getSize()-1)); org.openide.awt.Mnemonics.setLocalizedText(privateLabel, org.openide.util.NbBundle.getMessage(NoteDisplay.class, "NoteDisplay.privateLabel.text")); // NOI18N leftPanel.add(privateLabel); timeTrackingLabel.setFont(timeTrackingLabel.getFont().deriveFont(timeTrackingLabel.getFont().getStyle() & ~java.awt.Font.BOLD, timeTrackingLabel.getFont().getSize()-1)); org.openide.awt.Mnemonics.setLocalizedText(timeTrackingLabel, org.openide.util.NbBundle.getMessage(NoteDisplay.class, "NoteDisplay.timeTrackingLabel.text")); // NOI18N leftPanel.add(timeTrackingLabel); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.fill = java.awt.GridBagConstraints.VERTICAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; gridBagConstraints.weighty = 1.0; add(leftPanel, gridBagConstraints); noteTextPane.setEditable(false); noteTextPane.setBackground(leftPanel.getBackground()); noteTextPane.setBorder(javax.swing.BorderFactory.createEmptyBorder(5, 5, 5, 5)); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.weightx = 1.0; add(noteTextPane, gridBagConstraints); }// </editor-fold>//GEN-END:initComponents // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JLabel editDateLabel; private javax.swing.JPanel leftPanel; private javax.swing.JTextPane noteTextPane; private javax.swing.JLabel privateLabel; private javax.swing.JLabel reporterLabel; private javax.swing.JLabel submitDateLabel; private javax.swing.JLabel timeTrackingLabel; // End of variables declaration//GEN-END:variables }