/* * File : TextActivityPane.java * Created : 28-may-2001 17:19 * By : fbusquets * * JClic - Authoring and playing system for educational activities * * Copyright (C) 2000 - 2005 Francesc Busquets & Departament * d'Educacio de la Generalitat de Catalunya * * 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 (see the LICENSE file). */ package edu.xtec.jclic.activities.text; import edu.xtec.jclic.*; import edu.xtec.jclic.boxes.*; import java.awt.*; import java.awt.event.MouseEvent; import javax.swing.text.*; /** * * @author Francesc Busquets (fbusquets@xtec.cat) * @version 13.08.28 */ public class TextActivityPane extends javax.swing.JTextPane { TextActivityBase.Panel tabp; TextActivityBase tab; ActiveBox bx; /** Creates new TextActivityPane */ public TextActivityPane(TextActivityBase.Panel tabp) { super(); this.tabp=tabp; tab=(TextActivityBase)tabp.getActivity(); bx=new ActiveBox(null, tabp, null); bx.setVisible(false); setEditorKit(new javax.swing.text.rtf.RTFEditorKit()); enableEvents(AWTEvent.MOUSE_EVENT_MASK); } @Override protected void processEvent(AWTEvent e){ if(e instanceof MouseEvent){ if(!processMouse((MouseEvent)e)){ ((MouseEvent)e).consume(); return; } } super.processEvent(e); } public boolean processMouse(MouseEvent e){ boolean result=true; if(e.getID()==MouseEvent.MOUSE_PRESSED){ if(tabp.showingPrevScreen){ tabp.ps.startActivity(tabp); result=false; } else if(tabp.isPlaying()){ if(bx.isVisible() && bx.contains(e.getPoint())){ if(bx.getContent().mediaContent!=null) bx.playMedia(tabp.ps); result=false; } } } return result; } public void enableActiveBox(ActiveBoxContent abc, Point location){ if(abc.dimension!=null){ bx.setContent(abc); bx.setBounds(new Rectangle(location, abc.dimension)); bx.setVisible(true); bx.repaint(); } } public void disableActiveBox(){ bx.setVisible(false); } @Override public void paint(Graphics g){ Graphics2D g2=(Graphics2D)g; super.paint(g2); if(bx.isVisible()){ RenderingHints rh=g2.getRenderingHints(); g2.setRenderingHints(Constants.DEFAULT_RENDERING_HINTS); //RenderingHints rh=tab.ac.setScreenRenderingHints(g2); while(true){ BoxBase.flagFontReduced=false; bx.update(g2, g2.getClipBounds(), this); if(!BoxBase.flagFontReduced) break; } g2.setRenderingHints(rh); } } @Override public void setStyledDocument(StyledDocument doc){ transferFocus(); // JRE 1.4 workaround, part 1: Save a clean copy of the default style attributes Style defaultStyle=doc.getStyle(StyleContext.DEFAULT_STYLE); AttributeSet as=defaultStyle.copyAttributes(); super.setStyledDocument(doc); // JRE 1.4 workaround, part 2: Restore lost attributes defaultStyle.addAttributes(as); //setBackground(StyleConstants.getBackground(getStyle(StyleContext.DEFAULT_STYLE))); setBackground(StyleConstants.getBackground(defaultStyle)); Style st=tab.styleContext.getStyle(TextActivityDocument.TARGET); if(st!=null) setCaretColor(StyleConstants.getForeground(st)); requestFocus(); } protected void targetChanged(TextTarget tt){ } }