/* * Copyright 2011 gitblit.com. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.gitblit.authority; import java.awt.Color; import java.awt.Component; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.Font; import java.awt.Insets; import java.io.PrintWriter; import java.io.StringWriter; import java.util.Date; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JTextArea; import javax.swing.table.DefaultTableColumnModel; import javax.swing.table.TableCellRenderer; import javax.swing.table.TableColumn; import javax.swing.table.TableModel; import com.gitblit.client.DateCellRenderer; import com.gitblit.client.Translation; import com.gitblit.utils.StringUtils; public class Utils { public final static int LABEL_WIDTH = 175; public final static int MARGIN = 5; public final static Insets INSETS = new Insets(MARGIN, MARGIN, MARGIN, MARGIN); public final static String TIMESTAMP_FORMAT = "yyyy-MM-dd HH:mm"; public final static String DATE_FORMAT = "yyyy-MM-dd"; public static JTable newTable(TableModel model, String datePattern) { JTable table = new JTable(model); table.setRowHeight(table.getFont().getSize() + 8); table.setCellSelectionEnabled(false); table.setRowSelectionAllowed(true); table.getTableHeader().setReorderingAllowed(false); table.setGridColor(new Color(0xd9d9d9)); table.setBackground(Color.white); table.setDefaultRenderer(Date.class, new DateCellRenderer(datePattern, Color.orange.darker())); return table; } public static JPanel newFieldPanel(String label, Component c) { return newFieldPanel(label, c, null); } public static JPanel newFieldPanel(String label, Component c, String trailingLabel) { JLabel jlabel = new JLabel(label); jlabel.setPreferredSize(new Dimension(Utils.LABEL_WIDTH, 20)); JPanel panel = new JPanel(new FlowLayout(FlowLayout.LEFT)); panel.add(jlabel); panel.add(c); if (!StringUtils.isEmpty(trailingLabel)) { panel.add(new JLabel(trailingLabel)); } return panel; } public static void showException(Component c, Throwable t) { StringWriter writer = new StringWriter(); t.printStackTrace(new PrintWriter(writer)); String stacktrace = writer.toString(); try { writer.close(); } catch (Throwable x) { } JTextArea textArea = new JTextArea(stacktrace); textArea.setFont(new Font("monospaced", Font.PLAIN, 11)); JScrollPane jsp = new JScrollPane(textArea); jsp.setPreferredSize(new Dimension(800, 400)); JOptionPane.showMessageDialog(c, jsp, Translation.get("gb.error"), JOptionPane.ERROR_MESSAGE); } public static void packColumns(JTable table, int margin) { for (int c = 0; c < table.getColumnCount(); c++) { packColumn(table, c, 4); } } // Sets the preferred width of the visible column specified by vColIndex. // The column will be just wide enough to show the column head and the // widest cell in the column. margin pixels are added to the left and right // (resulting in an additional width of 2*margin pixels). private static void packColumn(JTable table, int vColIndex, int margin) { DefaultTableColumnModel colModel = (DefaultTableColumnModel) table.getColumnModel(); TableColumn col = colModel.getColumn(vColIndex); int width = 0; // Get width of column header TableCellRenderer renderer = col.getHeaderRenderer(); if (renderer == null) { renderer = table.getTableHeader().getDefaultRenderer(); } Component comp = renderer.getTableCellRendererComponent(table, col.getHeaderValue(), false, false, 0, 0); width = comp.getPreferredSize().width; // Get maximum width of column data for (int r = 0; r < table.getRowCount(); r++) { renderer = table.getCellRenderer(r, vColIndex); comp = renderer.getTableCellRendererComponent(table, table.getValueAt(r, vColIndex), false, false, r, vColIndex); width = Math.max(width, comp.getPreferredSize().width); } // Add margin width += 2 * margin; // Set the width col.setPreferredWidth(width); } }