/* Violet - A program for editing UML diagrams. Copyright (C) 2007 Cay S. Horstmann (http://horstmann.com) Alexandre de Pellegrin (http://alexdp.free.fr); This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ package com.horstmann.violet.application.gui; import java.awt.BorderLayout; import java.awt.Component; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.GradientPaint; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; import java.awt.Paint; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.BoxLayout; import javax.swing.Icon; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuItem; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.ScrollPaneConstants; import javax.swing.border.EmptyBorder; import com.horstmann.violet.application.menu.FileMenu; import com.horstmann.violet.application.swingextension.WelcomeButtonUI; import com.horstmann.violet.framework.injection.bean.ManiocFramework.BeanInjector; import com.horstmann.violet.framework.injection.bean.ManiocFramework.InjectedBean; import com.horstmann.violet.framework.injection.resources.ResourceBundleInjector; import com.horstmann.violet.framework.injection.resources.annotation.ResourceBundleBean; import com.horstmann.violet.framework.plugin.PluginRegistry; import com.horstmann.violet.framework.theme.ITheme; import com.horstmann.violet.framework.theme.ThemeManager; public class WelcomePanel extends JPanel { public WelcomePanel(FileMenu fileMenu) { ResourceBundleInjector.getInjector().inject(this); BeanInjector.getInjector().inject(this); this.fileMenu = fileMenu; setOpaque(false); setLayout(new BorderLayout()); add(getScrollableOptionPanel(), BorderLayout.CENTER); add(getFootTextPanel(), BorderLayout.SOUTH); } public void paint(Graphics g) { Graphics2D g2 = (Graphics2D) g; Paint currentPaint = g2.getPaint(); ITheme cLAF = ThemeManager.getInstance().getTheme(); GradientPaint paint = new GradientPaint(getWidth() / 2, -getHeight() / 4, cLAF.getWelcomeBackgroundStartColor(), getWidth() / 2, getHeight() + getHeight() / 4, cLAF.getWelcomeBackgroundEndColor()); g2.setPaint(paint); g2.fillRect(0, 0, getWidth(), getHeight()); g2.setPaint(currentPaint); super.paint(g); } private JScrollPane getScrollableOptionPanel() { if (this.scrollableOptionPanel == null) { this.scrollableOptionPanel = new JScrollPane(getOptionPanel()); this.scrollableOptionPanel.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED); this.scrollableOptionPanel.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED); this.scrollableOptionPanel.setOpaque(false); this.scrollableOptionPanel.getViewport().setOpaque(false); this.scrollableOptionPanel.setBorder(new EmptyBorder(0, 0, 0, 0)); } return this.scrollableOptionPanel; } private JPanel getOptionPanel() { if (this.optionPanel == null) { this.optionPanel = new JPanel(); this.optionPanel.setOpaque(false); this.optionPanel.setLayout(new BoxLayout(this.optionPanel, BoxLayout.Y_AXIS)); final JMenu newMenu = this.fileMenu.getFileNewMenu(); for (int i = 0; i < newMenu.getItemCount(); i++) { final JMenuItem item = newMenu.getItem(i); boolean isSubMenu = JMenu.class.isInstance(item); if (!isSubMenu) { String label = item.getText(); JButton newDiagramShortcut = new JButton(label.toLowerCase()); newDiagramShortcut.setUI(new WelcomeButtonUI()); newDiagramShortcut.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { item.doClick(); } }); this.optionPanel.add(newDiagramShortcut); } if (isSubMenu) { JMenu subMenu = (JMenu) item; String label = subMenu.getText(); JLabel title = new JLabel(label.toLowerCase()); ITheme cLAF = ThemeManager.getInstance().getTheme(); title.setFont(cLAF.getWelcomeBigFont()); title.setForeground(cLAF.getWelcomeBackgroundEndColor()); title.setBorder(new EmptyBorder(0, 45, 0, 30)); title.setAlignmentX(Component.LEFT_ALIGNMENT); this.optionPanel.add(title); JPanel diagramsPanel = new JPanel(); diagramsPanel.setLayout(new FlowLayout(FlowLayout.LEFT)); diagramsPanel.setOpaque(false); diagramsPanel.setBorder(new EmptyBorder(0, 30, 0, 30)); for (int j = 0; j < subMenu.getItemCount(); j++) { final JMenuItem subItem = subMenu.getItem(j); JPanel diagramClickablePanel = getDiagramClickablePanel(subItem); diagramsPanel.add(diagramClickablePanel); } diagramsPanel.setAlignmentX(Component.LEFT_ALIGNMENT); this.optionPanel.add(diagramsPanel); } } } return this.optionPanel; } private JPanel getDiagramClickablePanel(final JMenuItem diagramMenuItem) { JPanel panel = new JPanel(); panel.setOpaque(false); panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); panel.setBorder(new EmptyBorder(10, 10, 10, 10)); String subLabel = diagramMenuItem.getText(); JButton newDiagramTextButton = new JButton(subLabel.toLowerCase()); newDiagramTextButton.setUI(new WelcomeButtonUI()); newDiagramTextButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { diagramMenuItem.doClick(); } }); panel.add(newDiagramTextButton); JButton newDiagramImageButton = new JButton(); newDiagramImageButton.setPreferredSize(new Dimension(DIAGRAM_ICON_WIDTH, DIAGRAM_ICON_HEIGHT)); newDiagramImageButton.setUI(new WelcomeButtonUI()); Icon sampleDiagramIcon = diagramMenuItem.getRolloverIcon(); if (sampleDiagramIcon != null) { ImageIcon resizedImageIcon = getResizedImageIcon((ImageIcon) sampleDiagramIcon); newDiagramImageButton.setIcon(resizedImageIcon); } newDiagramImageButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { diagramMenuItem.doClick(); } }); panel.add(newDiagramImageButton); return panel; } private JPanel getFootTextPanel() { if (this.footTextPanel == null) { this.footTextPanel = new JPanel(); this.footTextPanel.setOpaque(false); this.footTextPanel.setBorder(new EmptyBorder(0, 0, 10, 0)); this.footTextPanel.setLayout(new BoxLayout(this.footTextPanel, BoxLayout.Y_AXIS)); this.footTextPanel.setAlignmentX(Component.CENTER_ALIGNMENT); JLabel text = new JLabel(this.footText); ITheme cLAF = ThemeManager.getInstance().getTheme(); text.setFont(cLAF.getWelcomeSmallFont()); text.setForeground(cLAF.getWelcomeBigForegroundColor()); text.setAlignmentX(Component.CENTER_ALIGNMENT); this.footTextPanel.add(text); } return this.footTextPanel; } private ImageIcon getResizedImageIcon(ImageIcon originalImageIcon) { Image scaledInstance = originalImageIcon.getImage().getScaledInstance(DIAGRAM_ICON_WIDTH, DIAGRAM_ICON_HEIGHT, java.awt.Image.SCALE_SMOOTH); return new ImageIcon(scaledInstance); } private JScrollPane scrollableOptionPanel; private JPanel optionPanel; private JPanel footTextPanel; private FileMenu fileMenu; private static final int DIAGRAM_ICON_HEIGHT = 240; private static final int DIAGRAM_ICON_WIDTH = 240; @ResourceBundleBean(key = "welcomepanel.foot_text") private String footText; /** Plugin registry */ @InjectedBean private PluginRegistry pluginRegistry; }