/*
* File : HelpActivityComponent.java
* Created : 16-aug-2001 1:32
* 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;
import edu.xtec.jclic.boxes.AbstractBox;
import edu.xtec.jclic.boxes.ActiveBox;
import java.awt.AWTEvent;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.RenderingHints;
import java.awt.event.MouseEvent;
import javax.swing.BorderFactory;
import javax.swing.JPanel;
import javax.swing.border.BevelBorder;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
/**
* JClic activities have the pottibility to show a dialog window containig an
* object with help contents. Activities should call
* the <CODE>ShowHelp</CODE> method of {@link edu.xtec.jclic.PlayStation} to
* make this help window appear. The abstract class <CODE>HelpActivityComponent</CODE>
* can be used as a base class for this kind of help objects.
* @author Francesc Busquets (fbusquets@xtec.cat)
* @version 13.08.23
*/
public abstract class HelpActivityComponent extends JPanel implements ListSelectionListener{
/**
* Key used to store the preferred location property.
*/
public static final String PREFERRED_LOCATION="prefLoc";
/**
* The {@link edu.xtec.jclic.Activity.Panel} that this object belongs to.
*/
public Activity.Panel ap;
/**
* The currently selected box in the <CODE>HelpActivityComponent</CODE>, if any.
*/
public AbstractBox markedBox;
public boolean markedBoxWasVisible;
/** Creates new HelpActivityComponent */
public HelpActivityComponent(Activity.Panel setAct) {
super();
ap=setAct;
markedBox=null;
enableEvents(AWTEvent.MOUSE_EVENT_MASK);
setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));
putClientProperty(PREFERRED_LOCATION, new Point(ap.getLocationOnScreen()));
}
public void init(){}
public void end(){
unmarkBox();
}
public abstract void render(Graphics2D g2, Rectangle dirtyRegion);
@Override
public void paintComponent(Graphics g){
Graphics2D g2=(Graphics2D)g;
RenderingHints rh=g2.getRenderingHints();
g2.setRenderingHints(Constants.DEFAULT_RENDERING_HINTS);
super.paintComponent(g2);
render(g2, g2.getClipBounds());
g2.setRenderingHints(rh);
}
public void unmarkBox(){
ap.ps.stopMedia(1);
if(markedBox!=null){
markedBox.setMarked(!markedBox.isMarked());
markedBox.setInverted(!markedBox.isInverted());
markedBox.setVisible(markedBoxWasVisible);
markedBox=null;
}
}
public void markBox(AbstractBox bx, boolean play){
unmarkBox();
markedBox=bx;
if(bx!=null){
markedBoxWasVisible=bx.isVisible();
if(play && bx instanceof ActiveBox) ((ActiveBox)bx).playMedia(ap.ps);
bx.setMarked(!bx.isMarked());
bx.setInverted(!bx.isInverted());
bx.setVisible(true);
}
}
public void processMouse(MouseEvent p1){}
@Override
protected void processEvent(AWTEvent e){
if(e instanceof MouseEvent)
processMouse((MouseEvent)e);
super.processEvent(e);
}
public void valueChanged(ListSelectionEvent ev) {
}
@Override
public void doLayout(){
}
}