/* * codjo.net * * Common Apache License 2.0 */ package net.codjo.dataprocess.gui.util; import net.codjo.dataprocess.common.Log; import net.codjo.dataprocess.common.userparam.User; import net.codjo.dataprocess.common.userparam.User.Repository; import net.codjo.gui.toolkit.fileChooser.FileChooserManager; import net.codjo.mad.gui.framework.GuiContext; import net.codjo.mad.gui.framework.MutableGuiContext; import java.awt.Color; import java.awt.Component; import java.awt.Container; import java.awt.Dimension; import java.awt.Font; import java.awt.Rectangle; import java.awt.Window; import java.awt.event.ComponentEvent; import java.awt.event.ComponentListener; import java.awt.event.KeyEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.File; import java.net.URL; import java.util.List; import javax.swing.Icon; import javax.swing.ImageIcon; import javax.swing.JComponent; import javax.swing.JDesktopPane; import javax.swing.JFrame; import javax.swing.JInternalFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JScrollBar; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.KeyStroke; /** * */ public class GuiUtils { static final String ESC_ACTION_KEY = "ESC_ACTION_KEY"; private static final String WALLPAPER = "WALLPAPER"; private GuiUtils() { } public static void setSize(JComponent conponent, int width, int height) { conponent.setMinimumSize(new Dimension(width, height)); conponent.setPreferredSize(new Dimension(width, height)); } public static void setMaxSize(Component conponent, int width, int height) { conponent.setMaximumSize(new Dimension(width, height)); conponent.setMinimumSize(new Dimension(width, height)); conponent.setPreferredSize(new Dimension(width, height)); } public static Icon loadIcon(Class c1, String fileName) { URL resource = c1.getResource(fileName); return new ImageIcon(resource); } public static void setInitialFocus(Window w1, Component component) { w1.addWindowListener(new FocusWindowAdapter(component)); } public static void setInitialFocus(JInternalFrame w1, Component component) { w1.addComponentListener(new FocusComponentListener(component)); // JInternalFrame est un component } /** * Utilis� pour d�clencher un �v�nement sur les JInternalFrame lors de l'appuie sur la touche 'ESCAPE' */ public static void escapeKeyAction(JComponent component, javax.swing.AbstractAction abstractAction) { component.getRootPane().getActionMap().put(ESC_ACTION_KEY, abstractAction); component.getRootPane().getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT) .put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), ESC_ACTION_KEY); } /** * Force l'ajout d'une scrollbar horizontale sur une JTable. */ public static void addHorizontalScrollBar(JTable table, JScrollPane pane) { table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); pane.setHorizontalScrollBar(new JScrollBar(JScrollBar.HORIZONTAL)); table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); } public static JFrame getParentFrame(Component component) { Container container = component.getParent(); if (container instanceof JFrame || container == null) { return (JFrame)container; } else { return getParentFrame(container); } } private static class FocusWindowAdapter extends WindowAdapter { Component component; FocusWindowAdapter(Component component) { this.component = component; } @Override public void windowOpened(WindowEvent evt) { component.requestFocus(); // On supprime le listener car apr�s ouverture de la fen�tre il ne sert plus � rien evt.getWindow().removeWindowListener(this); } } private static class FocusComponentListener implements ComponentListener { Component component; FocusComponentListener(Component c1) { component = c1; } public void componentResized(ComponentEvent event) { } public void componentMoved(ComponentEvent event) { component.requestFocus(); // On supprime le listener car apr�s ouverture de la fen�tre il ne sert plus � rien event.getComponent().removeComponentListener(this); } public void componentShown(ComponentEvent event) { component.requestFocus(); // On supprime le listener car apr�s ouverture de la fen�tre il ne sert plus � rien event.getComponent().removeComponentListener(this); } public void componentHidden(ComponentEvent event) { } } public static void setWallPaper(GuiContext ctxt, Icon icon, Rectangle rect, Color bgDev, Color bgRecette, Color bgProd) { removeWallPaper(ctxt); JLabel label = new JLabel(icon, JLabel.CENTER); label.setBounds(rect); label.setName(WALLPAPER); ctxt.getDesktopPane().add(label); String userEnvironment = System.getProperty("user.environment"); if (userEnvironment != null && userEnvironment.startsWith("Production")) { ctxt.getDesktopPane().setBackground(bgProd); } else if (userEnvironment != null && userEnvironment.startsWith("Recette")) { ctxt.getDesktopPane().setBackground(bgRecette); } else { ctxt.getDesktopPane().setBackground(bgDev); } } public static void removeWallPaper(GuiContext ctxt) { JDesktopPane desktopPane = ctxt.getDesktopPane(); Component[] components = desktopPane.getComponents(); for (Component component : components) { if (component instanceof JLabel) { if (WALLPAPER.equalsIgnoreCase(component.getName())) { desktopPane.remove(component); } } } } public static void showErrorDialog(Component component, Class logger, String message, Throwable error) { Log.error(logger, message, error); ErrorDialog.show(component, message, error); } public static void setToLeftSide(Component cp) { if (cp.getParent() == null) { throw new IllegalStateException("L'appel � la m�thode 'setToLeftSide'" + " doit s'effectuer apr�s l'ajout au desktop"); } Dimension containerSize = cp.getParent().getSize(); Dimension frameSize = cp.getSize(); frameSize.height = containerSize.height; frameSize.width = containerSize.width / 4; cp.setSize(frameSize); cp.setLocation(0, 0); } public static void showRepositoryMessage(MutableGuiContext ctxt, User user) { List<Repository> notValidRepositoryList = user.getNotValidRepositoryList(); if (!notValidRepositoryList.isEmpty()) { StringBuilder sb = new StringBuilder(); for (Repository repository : notValidRepositoryList) { sb.append(repository.getName()).append(" n'est plus accessible � partir du ") .append(repository.getExpirydate().trim()).append('\n'); } JOptionPane.showMessageDialog(ctxt.getMainFrame(), "Il y a des repositories dont vous n'avez maintenant plus acc�s :\n" + sb, "Information importante", JOptionPane.WARNING_MESSAGE); } if (user.getCurrentRepository() == null) { JOptionPane.showMessageDialog(ctxt.getMainFrame(), "Vous n'avez actuellement acc�s � aucun repository.\n" + "Merci de contacter un responsable de l'application svp.", "Information importante", JOptionPane.WARNING_MESSAGE); } } public static String showChooserForExport(String fileName, String chooserTitle, String fileTypeLabel, String extension, Component parent) { File file = FileChooserManager.showChooserForSave(((fileName != null) ? new File(fileName) : null), chooserTitle, fileTypeLabel, extension, parent); if (file != null) { return file.getAbsolutePath(); } return null; } public static void setBackgroundColor(MutableGuiContext ctxt, boolean showEnvironment, Color bgDev, Color bgRecette, Color bgProd, int size) { GuiUtils.removeWallPaper(ctxt); String userEnvironment = System.getProperty("user.environment"); JLabel label = new JLabel("D�veloppement", JLabel.CENTER); label.setBounds(new Rectangle(365, 219, 550, 412)); label.setName("WALLPAPER"); label.setFont(label.getFont().deriveFont(Font.BOLD, size)); if (userEnvironment != null && userEnvironment.startsWith("Production")) { label.setText("Production"); ctxt.getDesktopPane().setBackground(bgProd); } else if (userEnvironment != null && userEnvironment.startsWith("Recette")) { label.setText("Recette"); ctxt.getDesktopPane().setBackground(bgRecette); } else { ctxt.getDesktopPane().setBackground(bgDev); } if (showEnvironment) { ctxt.getDesktopPane().add(label); } } public static void setBackgroundColor(MutableGuiContext ctxt, boolean showEnvironment, Color bgDev, Color bgRecette, Color bgProd) { setBackgroundColor(ctxt, showEnvironment, bgDev, bgRecette, bgProd, 40); } }