package br.ufpr.c3sl.fontControl; import java.awt.Canvas; import java.awt.Component; import java.awt.Container; import java.awt.Font; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.Observable; import java.util.Observer; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JPanel; import javax.swing.SwingUtilities; import br.ufpr.c3sl.view.PageHTML.JPanelHTML; import br.ufpr.c3sl.view.principal.JpCarrie; public class FontControl implements Observer{ private FontSize fontSize = FontSize.getInstance(); private static ArrayList<Container> externalContainersForControlFont = new ArrayList<Container>(); //TODO:Fazer font size no static private void changeFontSize(Container c) { Font f; if (c instanceof JPanelHTML) { JPanelHTML compPane = (JPanelHTML) c; if (compPane.getTextualContent() != null) { Pattern pattern = Pattern.compile("font-size: (.*?)px;"); Matcher matcher = pattern.matcher(compPane.getTextualContent()); String text = compPane.getTextualContent(); int offset = 0; while(matcher.find()) { Integer size = Integer.parseInt(matcher.group(1)); Integer newSize = fontSize.getSize(size); text = text.substring(0, matcher.start() + offset) + "font-size: " + newSize + "px;" + text.substring(matcher.end() + offset); offset += newSize.toString().length() - size.toString().length(); } compPane.setTextualContent(text); compPane.refreshPane(); } } for (Component comp : c.getComponents()) { f = new Font(comp.getFont().getFamily(), comp.getFont().getStyle(), fontSize.getSize(comp.getFont().getSize())); if (comp instanceof JMenu) { int count = ((JMenu) comp).getItemCount(); for (int i = 0; i < count; i++) { ((JMenu) comp).getItem(i).setFont(f); } } if (comp instanceof JLabel) { JLabel compLabel = (JLabel) comp; if (compLabel.getText() != null) { Pattern pattern = Pattern.compile("font-size: (.*?)px;"); Matcher matcher = pattern.matcher(compLabel.getText()); String text = compLabel.getText(); int offset = 0; while(matcher.find()) { Integer size = Integer.parseInt(matcher.group(1)); Integer newSize = fontSize.getSize(size); text = text.substring(0, matcher.start() + offset) + "font-size: " + newSize + "px;" + text.substring(matcher.end() + offset); offset += newSize.toString().length() - size.toString().length(); } compLabel.setText(text); } } comp.setFont(f); if (!(comp instanceof Canvas)) changeFontSize((Container)comp); } } public static void controlFontForExternalContainer(Container c){ externalContainersForControlFont.add(c); } public static void removeControlFontForExternalContainer(Container c){ externalContainersForControlFont.remove(c); } @Override public void update(Observable o, Object arg) { Collection<JPanel> list = JpCarrie.getInstance().getPaginator().getAllPanels(); // JPanel main = JpCarrie.getInstance().getMainPanel(); // changeFontSize(main); // SwingUtilities.updateComponentTreeUI(main); final Iterator<JPanel> panels = list.iterator(); while (panels.hasNext()) { JPanel panel = panels.next(); changeFontSize(panel); SwingUtilities.updateComponentTreeUI(panel); } // TODO Auto-generated method stub for (Container c : externalContainersForControlFont) { changeFontSize(c); SwingUtilities.updateComponentTreeUI(c); } } }