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
}