RibbonToolbar.java

00001 package edu.stanford.hci.r3.util.components.ribbons;
00002 
00003 import java.awt.BorderLayout;
00004 import java.awt.CardLayout;
00005 import java.awt.Color;
00006 import java.awt.Component;
00007 import java.awt.GradientPaint;
00008 import java.awt.Graphics;
00009 import java.awt.Graphics2D;
00010 import java.util.ArrayList;
00011 import java.util.HashMap;
00012 import java.util.List;
00013 
00014 import javax.swing.BoxLayout;
00015 import javax.swing.JPanel;
00016 
00017 import edu.stanford.hci.r3.util.graphics.GraphicsUtils;
00018 import edu.stanford.hci.r3.util.layout.StackedLayout;
00019 
00034 public class RibbonToolbar extends JPanel implements RibbonConstants {
00035 
00039         private final CardLayout cardLayout = new CardLayout();
00040 
00044         private JPanel categories;
00045 
00049         private HashMap<String, JPanel> categoriesToPanels = new HashMap<String, JPanel>();
00050 
00054         private List<RibbonCategoryLabel> categoryTabList = new ArrayList<RibbonCategoryLabel>();
00055 
00059         private List<RibbonPanel> tools = new ArrayList<RibbonPanel>();
00060 
00064         private JPanel toolsPanel;
00065 
00069         public RibbonToolbar() {
00070                 setLayout(new BorderLayout());
00071                 add(getCategories(), BorderLayout.NORTH);
00072                 add(getTools(), BorderLayout.CENTER);
00073         }
00074 
00078         public void addCategories(String... categoryNames) {
00079                 for (String name : categoryNames) {
00080                         addCategory(name);
00081                 }
00082         }
00083 
00090         public void addCategory(String categoryName) {
00091                 // the clickable label at the top
00092                 final RibbonCategoryLabel labelledTab = new RibbonCategoryLabel(categoryName, this);
00093                 categories.add(labelledTab, "LeftTall");
00094                 categoryTabList.add(labelledTab);
00095 
00096                 // select the first one!
00097                 if (categoryTabList.size() == 1) {
00098                         labelledTab.setSelected(true);
00099                 } else {
00100                         labelledTab.setSelected(false);
00101                 }
00102 
00103                 final JPanel categoryPanel = getNewCategoryPanel();
00104 
00105                 // put it into the card panel
00106                 getTools().add(categoryName, categoryPanel);
00107                 labelledTab.setCardLayoutInfo(cardLayout, getTools());
00108 
00109                 // the corresponding panel of tools
00110                 categoriesToPanels.put(categoryName, categoryPanel);
00111         }
00112 
00117         public void addToolsToCategoryPanel(String panelName, List<RibbonPanel> panels) {
00118                 for (RibbonPanel rp : panels) {
00119                         addToolToCategoryPanel(panelName, rp);
00120                 }
00121         }
00122 
00130         private void addToolToCategoryPanel(String categoryName, RibbonPanel rp) {
00131                 final JPanel panel = categoriesToPanels.get(categoryName);
00132                 // System.out.println(categoriesToPanels.keySet());
00133                 panel.add(rp);
00134                 panel.invalidate();
00135         }
00136 
00143         private Component getCategories() {
00144                 if (categories == null) {
00145                         categories = new JPanel() {
00149                                 final GradientPaint gradient = new GradientPaint(0, 0, new Color(202, 198, 195),
00150                                                 getWidth(), 0, new Color(234, 234, 234), false);
00151 
00155                                 protected void paintComponent(Graphics g) {
00156                                         super.paintComponent(g);
00157                                         final Graphics2D g2d = (Graphics2D) g;
00158                                         g2d.setRenderingHints(GraphicsUtils.getBestRenderingHints());
00159                                         g2d.setPaint(gradient);
00160                                         g2d.fillRect(0, 0, getWidth(), getHeight());
00161                                 }
00162 
00163                         };
00164                         categories.setLayout(new StackedLayout(StackedLayout.HORIZONTAL));
00165                 }
00166                 return categories;
00167         }
00168 
00175         private JPanel getNewCategoryPanel() {
00176                 final JPanel jp = new JPanel() {
00177 
00181                         protected void paintComponent(Graphics g) {
00182                                 super.paintComponent(g);
00183 
00184                                 final Graphics2D g2d = (Graphics2D) g;
00185 
00186                                 g2d.setColor(HEADER_COLOR);
00187                                 g2d.fillRect(0, 0, getWidth(), HEADER_HEIGHT);
00188 
00189                                 // paint the background panel gradient
00190                                 final GradientPaint midToBottomGradient = new GradientPaint(0, HEADER_HEIGHT,
00191                                                 PANEL_BEGIN_COLOR, 0, getHeight(), PANEL_END_COLOR, false);
00192 
00193                                 g2d.setPaint(midToBottomGradient);
00194                                 g2d.fillRect(0, HEADER_HEIGHT, getWidth(), getHeight());
00195                         }
00196                 };
00197 
00198                 jp.setLayout(new BoxLayout(jp, BoxLayout.X_AXIS));
00199                 return jp;
00200         }
00201 
00208         private JPanel getTools() {
00209                 if (toolsPanel == null) {
00210                         toolsPanel = new JPanel();
00211                         toolsPanel.setLayout(cardLayout);
00212                 }
00213                 return toolsPanel;
00214         }
00215 
00222         public void registerTool(RibbonPanel rp) {
00223                 tools.add(rp);
00224         }
00225 
00231         public void setSelectedLabel(RibbonCategoryLabel labelToSelect) {
00232                 for (RibbonCategoryLabel tab : categoryTabList) {
00233                         if (tab.equals(labelToSelect)) {
00234                                 tab.setSelected(true);
00235                         } else {
00236                                 tab.setSelected(false);
00237                         }
00238                 }
00239         }
00240 }

Generated on Sat Apr 14 18:21:38 2007 for R3 Paper Toolkit by  doxygen 1.4.7