package nl.dykema.jxmlnote.toolbar.hribbon; import java.awt.event.ActionListener; import java.util.Iterator; import java.util.Vector; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JMenuItem; import javax.swing.JPopupMenu; import nl.dykema.hribbon.HRibbonBand; import nl.dykema.hribbon.HRibbonButton; import nl.dykema.hribbon.HRibbonMenuButton; import nl.dykema.jxmlnote.toolbar.JXMLNoteIcon; import nl.dykema.jxmlnote.toolbar.JXMLNoteToolBar; public class JXMLNoteHRibbonBand { public static HRibbonBand ToolBarToBand(JXMLNoteToolBar bar, HRibbonBand band) { band.setMaxLowButtonsPerRow(1); Vector<String> sections=bar.currentSections(); Iterator<String> it=sections.iterator(); boolean first=true; boolean prevMenu=false; while (it.hasNext()) { String section=it.next(); String sectionText=bar.getSectionTextForSection(section); int index=sectionText.indexOf('_'); String key=null; if (index>=0) { key=sectionText.substring(index+1,index+2); sectionText=sectionText.substring(0,index)+sectionText.substring(index+1); } int i,n; JPopupMenu menu=null; if (section.charAt(0)=='@') { if (!prevMenu && !first) { band.newGroup(); } menu=new JPopupMenu(); menu.setFocusable(false); sectionText.replace("▾".subSequence(0, 1), ""); prevMenu=true; } else { if (!first) { band.newGroup(); } prevMenu=false; } first=false; for(i=0,n=bar.getNumberOfToolsForSection(section);i<n;i++) { if (section.charAt(0)=='@') { JMenuItem item=bar.getMenuItem(section,i); if (item!=null) { JXMLNoteIcon xnicn=(JXMLNoteIcon) item.getIcon(); JMenuItem mb=new JMenuItem(item.getText(), xnicn); mb.setActionCommand(item.getActionCommand()); //mb.setFocusable(false); //mb.getActionModel().setActionCommand(item.getActionCommand()); //if (key!=null) { mb.setActionKeyTip(key); } for (ActionListener l : item.getActionListeners()) { mb.addActionListener(l); } menu.add(mb); } // handle menu } else { JComponent comp=bar.getComponent(section, i); if (comp instanceof JButton) { JButton b=(JButton) comp; String txt = b.getToolTipText(); // NOT b.getText() (= empty). String cmd = b.getActionCommand(); String tooltip = b.getToolTipText(); //System.out.println("action = "+cmd + ", txt = "+ txt + ", tt = " + tooltip); HRibbonButton cb=new HRibbonButton(txt); cb.setName(cmd); cb.setActionCommand(cmd); cb.setToolTipText(tooltip); //if (key!=null) { cb.setActionKeyTip(key); } cb.setFocusable(false); JXMLNoteIcon xnicn=(JXMLNoteIcon) b.getIcon(); //ResizableIcon icn=(xnicn==null) ? null : new RIcon(xnicn); cb.setIcon(xnicn); // //cb.getActionModel().setActionCommand(b.getActionCommand()); for (ActionListener l : b.getActionListeners()) { cb.addActionListener(l); } int prio = HRibbonBand.Priority.LOW; if (section.charAt(0)=='!') { prio = HRibbonBand.Priority.TOP; } else if (section.charAt(0)=='+') { prio = HRibbonBand.Priority.MEDIUM; } band.addButton(cb, prio); } else { // don't know what to do. } } } if (menu!=null) { HRibbonMenuButton but = new HRibbonMenuButton(sectionText); band.addMenu(but, menu, HRibbonBand.Priority.MEDIUM); } } return band; } }