Logo Search packages:      
Sourcecode: jclic version File versions  Download package

TextActivityEditorTextPanel.java

/*
 * File    : TextActivityEditorTextPanel.java
 * Created : 10-jun-2002 09:59
 * 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.edit.*;
import edu.xtec.jclic.beans.ColorButton;
import edu.xtec.jclic.beans.SmallIntEditor;
import edu.xtec.jclic.boxes.*;
import edu.xtec.util.Options;
import edu.xtec.util.FontCheck;
import edu.xtec.jclic.misc.Utils;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.text.*;
import javax.swing.event.*;
import edu.xtec.util.Resizer;
import edu.xtec.util.ResizerPanel;
import edu.xtec.util.ResourceManager;
import edu.xtec.util.SmallButtonBorder;
import java.awt.event.MouseMotionListener;
import java.util.EventObject;
import java.util.Vector;

/**
 *
 * @author Francesc Busquets (fbusquets@xtec.net)
 * @version 1.0
 */
00050 public class TextActivityEditorTextPanel extends ActivityEditorInternalPanel implements Resizer.ResizerListener {
    
    //protected boolean loading;
    protected Resizer resizer;
    protected boolean skipUpdate;
    protected String fontName;
    protected int fontSize;
    protected boolean changeCombos=true;
    
    /** Creates new form MenuEditorPanel */
00060     public TextActivityEditorTextPanel(ActivityEditorPanel parent) {
        super(parent);
        initComponents();
        textScroll.setBorder(BorderFactory.createEmptyBorder());
        textScroll.getVerticalScrollBar().setBorder(BorderFactory.createLineBorder(Color.darkGray, 1));
        textPane.addCaretListener(caretListener);
        resizer=new Resizer(previewPanel, null, false, this);
    }
    
    CaretListener caretListener = new CaretListener() {
        public void caretUpdate(CaretEvent e) {
            showAttributes(e.getDot());
        }
    };
    
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
00080     private void initComponents() {//GEN-BEGIN:initComponents
        javax.swing.JPanel actPanel;
        javax.swing.JLabel bgColorLb;
        javax.swing.JTabbedPane ctrlPanel;
        java.awt.GridBagConstraints gridBagConstraints;
        javax.swing.JLabel heightLb;
        javax.swing.JPanel stylePanel;
        javax.swing.JLabel textColorLb;
        javax.swing.JLabel widthLb;

        alignGrp = new javax.swing.ButtonGroup();
        mainScroll = new javax.swing.JScrollPane();
        previewPanel = new PreviewPanel();
        textScroll = new javax.swing.JScrollPane();
        textPane = new javax.swing.JTextPane();
        ctrlPanel = new javax.swing.JTabbedPane();
        actPanel = new javax.swing.JPanel();
        targetBtn = new javax.swing.JToggleButton();
        editTargetBtn = new javax.swing.JButton();
        insertBoxBtn = new javax.swing.JButton();
        prevScreenBtn = new javax.swing.JButton();
        optionsBtn = new javax.swing.JButton();
        typeBtn = new javax.swing.JButton();
        widthLb = new javax.swing.JLabel();
        widthEdit = new edu.xtec.jclic.beans.SmallIntEditor();
        heightLb = new javax.swing.JLabel();
        heightEdit = new edu.xtec.jclic.beans.SmallIntEditor();
        stylePanel = new javax.swing.JPanel();
        styleBtn = new javax.swing.JButton();
        fontFaceCombo = new JComboBox(FontCheck.getFontList(false));
        fontSizeCombo = new JComboBox(FontCheck.fontSizes);
        boldBtn = new javax.swing.JToggleButton();
        italicBtn = new javax.swing.JToggleButton();
        underlineBtn = new javax.swing.JToggleButton();
        alLeftBtn = new javax.swing.JToggleButton();
        alCenterBtn = new javax.swing.JToggleButton();
        alRightBtn = new javax.swing.JToggleButton();
        textColorLb = new javax.swing.JLabel();
        textColorBtn = new edu.xtec.jclic.beans.ColorButton();
        textColorBtn.setOptions(options);
        bgColorLb = new javax.swing.JLabel();
        bgColorBtn = new edu.xtec.jclic.beans.ColorButton();
        bgColorBtn.setOptions(options);

        setLayout(new java.awt.BorderLayout());

        previewPanel.setPreferredSize(new java.awt.Dimension(780, 580));
        textPane.setPreferredSize(new java.awt.Dimension(Activity.DEFAULT_WIDTH, Activity.DEFAULT_HEIGHT));
        textScroll.setViewportView(textPane);

        previewPanel.add(textScroll);

        mainScroll.setViewportView(previewPanel);

        add(mainScroll, java.awt.BorderLayout.CENTER);

        actPanel.setLayout(new java.awt.GridBagLayout());

        targetBtn.setIcon(new javax.swing.ImageIcon(getClass().getResource("/edu/xtec/resources/icons/text_target.gif")));
        targetBtn.setToolTipText(options.getMsg("edit_text_act_target_toggle"));
        targetBtn.setBorder(new SmallButtonBorder(targetBtn, true));
        targetBtn.addActionListener(this);
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
        gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
        actPanel.add(targetBtn, gridBagConstraints);

        editTargetBtn.setIcon(new javax.swing.ImageIcon(getClass().getResource("/edu/xtec/resources/icons/text_target_edit.gif")));
        editTargetBtn.setToolTipText(options.getMsg("edit_text_act_edit_target"));
        editTargetBtn.setBorder(new SmallButtonBorder(editTargetBtn, true));
        editTargetBtn.setEnabled(false);
        editTargetBtn.addActionListener(this);
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
        gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 8);
        actPanel.add(editTargetBtn, gridBagConstraints);

        insertBoxBtn.setIcon(new javax.swing.ImageIcon(getClass().getResource("/edu/xtec/resources/icons/insert_box.gif")));
        insertBoxBtn.setToolTipText(options.getMsg("edit_text_act_insertCell"));
        insertBoxBtn.setBorder(new SmallButtonBorder(prevScreenBtn, true));
        insertBoxBtn.addActionListener(this);
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.insets = new java.awt.Insets(2, 8, 2, 8);
        actPanel.add(insertBoxBtn, gridBagConstraints);

        prevScreenBtn.setIcon(new javax.swing.ImageIcon(getClass().getResource("/edu/xtec/resources/icons/prev_screen.gif")));
        prevScreenBtn.setToolTipText(options.getMsg("edit_text_act_prevScreen_title"));
        prevScreenBtn.setBorder(new SmallButtonBorder(prevScreenBtn, true));
        prevScreenBtn.addActionListener(this);
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.insets = new java.awt.Insets(2, 8, 2, 8);
        actPanel.add(prevScreenBtn, gridBagConstraints);

        optionsBtn.setIcon(new javax.swing.ImageIcon(getClass().getResource("/edu/xtec/resources/icons/check.gif")));
        optionsBtn.setToolTipText(options.getMsg("edit_text_act_check_bt"));
        optionsBtn.setBorder(new SmallButtonBorder(optionsBtn, true));
        optionsBtn.addActionListener(this);
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.insets = new java.awt.Insets(2, 8, 2, 8);
        actPanel.add(optionsBtn, gridBagConstraints);

        typeBtn.setIcon(new javax.swing.ImageIcon(getClass().getResource("/edu/xtec/resources/icons/type.gif")));
        typeBtn.setToolTipText(options.getMsg("edit_text_act_typeBtn"));
        typeBtn.setBorder(new SmallButtonBorder(typeBtn, true));
        typeBtn.addActionListener(this);
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.insets = new java.awt.Insets(2, 8, 2, 8);
        actPanel.add(typeBtn, gridBagConstraints);

        widthLb.setIcon(new javax.swing.ImageIcon(getClass().getResource("/edu/xtec/resources/icons/adjust_width.gif")));
        widthLb.setLabelFor(widthEdit);
        widthLb.setText(":");
        widthLb.setIconTextGap(0);
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
        gridBagConstraints.insets = new java.awt.Insets(2, 8, 2, 2);
        actPanel.add(widthLb, gridBagConstraints);

        widthEdit.setToolTipText(options.getMsg("edit_act_width_tooltip"));
        widthEdit.setMax(999);
        widthEdit.setMin(50);
        widthEdit.addPropertyChangeListener(SmallIntEditor.PROP_VALUE, this);
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
        gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 8);
        actPanel.add(widthEdit, gridBagConstraints);

        heightLb.setIcon(new javax.swing.ImageIcon(getClass().getResource("/edu/xtec/resources/icons/adjust_height.gif")));
        heightLb.setLabelFor(heightEdit);
        heightLb.setText(":");
        heightLb.setIconTextGap(0);
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
        gridBagConstraints.insets = new java.awt.Insets(2, 8, 2, 2);
        actPanel.add(heightLb, gridBagConstraints);

        heightEdit.setToolTipText(options.getMsg("edit_act_height_tooltip"));
        heightEdit.setMax(999);
        heightEdit.setMin(50);
        heightEdit.addPropertyChangeListener(SmallIntEditor.PROP_VALUE, this);
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
        gridBagConstraints.weightx = 1.0;
        gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 8);
        actPanel.add(heightEdit, gridBagConstraints);

        ctrlPanel.addTab(options.getMsg("edit_text_act_content"), new javax.swing.ImageIcon(getClass().getResource("/edu/xtec/resources/icons/content.gif")), actPanel);

        stylePanel.setLayout(new java.awt.GridBagLayout());

        styleBtn.setIcon(new javax.swing.ImageIcon(getClass().getResource("/edu/xtec/resources/icons/doc_styles.gif")));
        styleBtn.setToolTipText(options.getMsg("edit_text_act_editStylesBtn"));
        styleBtn.setBorder(new SmallButtonBorder(styleBtn, true));
        styleBtn.addActionListener(this);
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 8);
        stylePanel.add(styleBtn, gridBagConstraints);

        fontFaceCombo.setEditable(true);
        fontFaceCombo.setPreferredSize(new java.awt.Dimension(120, fontFaceCombo.getPreferredSize().height));
        fontFaceCombo.addActionListener(this);
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.insets = new java.awt.Insets(2, 8, 2, 2);
        stylePanel.add(fontFaceCombo, gridBagConstraints);

        fontSizeCombo.setEditable(true);
        fontSizeCombo.setPreferredSize(new java.awt.Dimension(50, fontSizeCombo.getPreferredSize().height));
        fontSizeCombo.addActionListener(this);
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 8);
        stylePanel.add(fontSizeCombo, gridBagConstraints);

        boldBtn.setIcon(new javax.swing.ImageIcon(getClass().getResource("/edu/xtec/resources/icons/font_bold.gif")));
        boldBtn.setToolTipText(options.getMsg("edit_font_bold"));
        boldBtn.setBorder(new SmallButtonBorder(boldBtn, true));
        boldBtn.addActionListener(this);
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.insets = new java.awt.Insets(2, 8, 2, 2);
        stylePanel.add(boldBtn, gridBagConstraints);

        italicBtn.setIcon(new javax.swing.ImageIcon(getClass().getResource("/edu/xtec/resources/icons/font_italic.gif")));
        italicBtn.setToolTipText(options.getMsg("edit_font_italic"));
        italicBtn.setBorder(new SmallButtonBorder(italicBtn, true));
        italicBtn.addActionListener(this);
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
        stylePanel.add(italicBtn, gridBagConstraints);

        underlineBtn.setIcon(new javax.swing.ImageIcon(getClass().getResource("/edu/xtec/resources/icons/font_underline.gif")));
        underlineBtn.setToolTipText(options.getMsg("edit_font_underline"));
        underlineBtn.setBorder(new SmallButtonBorder(underlineBtn, true));
        underlineBtn.addActionListener(this);
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 8);
        stylePanel.add(underlineBtn, gridBagConstraints);

        alLeftBtn.setIcon(new javax.swing.ImageIcon(getClass().getResource("/edu/xtec/resources/icons/al_left.gif")));
        alLeftBtn.setToolTipText(options.getMsg("edit_text_align_left"));
        alignGrp.add(alLeftBtn);
        alLeftBtn.setBorder(new SmallButtonBorder(alLeftBtn, true));
        alLeftBtn.addActionListener(this);
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.insets = new java.awt.Insets(2, 8, 2, 2);
        stylePanel.add(alLeftBtn, gridBagConstraints);

        alCenterBtn.setIcon(new javax.swing.ImageIcon(getClass().getResource("/edu/xtec/resources/icons/al_center.gif")));
        alCenterBtn.setToolTipText(options.getMsg("edit_text_align_center"));
        alignGrp.add(alCenterBtn);
        alCenterBtn.setBorder(new SmallButtonBorder(alCenterBtn, true));
        alCenterBtn.addActionListener(this);
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
        stylePanel.add(alCenterBtn, gridBagConstraints);

        alRightBtn.setIcon(new javax.swing.ImageIcon(getClass().getResource("/edu/xtec/resources/icons/al_right.gif")));
        alRightBtn.setToolTipText(options.getMsg("edit_text_align_right"));
        alignGrp.add(alRightBtn);
        alRightBtn.setBorder(new SmallButtonBorder(alRightBtn, true));
        alRightBtn.addActionListener(this);
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 8);
        stylePanel.add(alRightBtn, gridBagConstraints);

        textColorLb.setIcon(new javax.swing.ImageIcon(getClass().getResource("/edu/xtec/resources/icons/fg.gif")));
        textColorLb.setText(":");
        textColorLb.setIconTextGap(0);
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
        gridBagConstraints.insets = new java.awt.Insets(2, 8, 2, 2);
        stylePanel.add(textColorLb, gridBagConstraints);

        textColorBtn.setToolTipText(options.getMsg("edit_act_textColor_tooltip"));
        textColorBtn.addPropertyChangeListener(ColorButton.PROP_COLOR, this);
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
        gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 6);
        stylePanel.add(textColorBtn, gridBagConstraints);

        bgColorLb.setIcon(new javax.swing.ImageIcon(getClass().getResource("/edu/xtec/resources/icons/bg.gif")));
        bgColorLb.setText(":");
        bgColorLb.setIconTextGap(0);
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
        gridBagConstraints.insets = new java.awt.Insets(2, 6, 2, 2);
        stylePanel.add(bgColorLb, gridBagConstraints);

        bgColorBtn.setToolTipText(options.getMsg("edit_act_bgColor_tooltip"));
        bgColorBtn.addPropertyChangeListener(ColorButton.PROP_COLOR, this);
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
        gridBagConstraints.weightx = 1.0;
        gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
        stylePanel.add(bgColorBtn, gridBagConstraints);

        ctrlPanel.addTab(options.getMsg("edit_text_act_style"), new javax.swing.ImageIcon(getClass().getResource("/edu/xtec/resources/icons/styles.gif")), stylePanel);

        add(ctrlPanel, java.awt.BorderLayout.NORTH);

    }//GEN-END:initComponents
    
    
    protected TextActivityBase getTextActivity(){
        return (TextActivityBase)getActivity();
    }
    
    protected TextActivityBaseEditor getTextActivityEditor(){
        return (TextActivityBaseEditor)getActivityEditor();
    }

    public void setEnabled(boolean enabled){
        
        super.setEnabled(enabled);
        textPane.setEnabled(enabled);
        widthEdit.setEnabled(enabled);
        heightEdit.setEnabled(enabled);
        fontFaceCombo.setEnabled(enabled);
        fontSizeCombo.setEnabled(enabled);
        boldBtn.setEnabled(enabled);
        italicBtn.setEnabled(enabled);
        underlineBtn.setEnabled(enabled);
        textColorBtn.setEnabled(enabled);
        bgColorBtn.setEnabled(enabled);
        targetBtn.setEnabled(enabled);
        alCenterBtn.setEnabled(enabled);
        alRightBtn.setEnabled(enabled);
        alLeftBtn.setEnabled(enabled);
        resizer.setEnabled(enabled);
        if(!enabled){
            editTargetBtn.setEnabled(false);
            typeBtn.setEnabled(false);
        }        
    }
    
    private static final Dimension DEFAULT_SIZE=new Dimension(TextActivityBase.DEFAULT_WIDTH, TextActivityBase.DEFAULT_HEIGHT);
    public void fillData() {
        TextActivityBaseEditor tabe=getTextActivityEditor();
        TextActivityBase act = tabe==null ? null : tabe.getTextActivity();
        typeBtn.setEnabled(tabe!=null && tabe.hasType());
        DefaultStyledDocument doc = act==null ? new DefaultStyledDocument() : act.tad;        
        
        // Workaround for JRE 1.4+, part 1: Save a clean copy of the default style attributes
        Style defaultStyle=doc.getStyle(StyleContext.DEFAULT_STYLE);
        AttributeSet as=defaultStyle.copyAttributes();        
        //
        textPane.setStyledDocument(doc);
        //
        // Workaround for JRE 1.4+, part 2: Restore lost attributes
        defaultStyle.addAttributes(as);
        
        doc.addDocumentListener(this);
        Dimension d = act==null ? DEFAULT_SIZE : act.getWindowSize();
        if(act==null || act.tad.getLength()==0)
            textPane.setBounds(0, 0, d.width, d.height);
        widthEdit.setValue(d.width);
        heightEdit.setValue(d.height);
        textPane.setBackground(act==null ? Color.white : StyleConstants.getBackground(textPane.getStyle(StyleContext.DEFAULT_STYLE)));
        textScroll.setBounds(0, 0, d.width, d.height);
        resizer.setRect(textScroll.getBounds());
        resizer.setEnabled(act!=null);
        if(act!=null){
            JPanelActiveBox[] boxes=act.tad.getPanelBoxes();
            for(int i=0; i<boxes.length; i++){
                boxes[i].catchMouseEvents=false;
                new Resizer(boxes[i], null, true, this);
            }
            javax.swing.SwingUtilities.invokeLater(new Runnable(){
                public void run(){
                    textPane.revalidate();
                }
            });
        }
    }
    
    public void resizeObjectTo(Rectangle r, JComponent jc){
        if(jc==previewPanel){
            TextActivityBase act=getTextActivity();
            if(act!=null){
                textScroll.setBounds(r.x, r.y, r.width, r.height);                
                act.setWindowSize(textScroll.getSize());          
                widthEdit.setValue(r.width);
                heightEdit.setValue(r.height);
                textScroll.revalidate();
                repaint();
                setModified(true);
            }
        }
        else if(jc instanceof JPanelActiveBox){
            JPanelActiveBox jpab=(JPanelActiveBox)jc;
            jpab.setBounds(r.x, r.y, r.width, r.height);
            Dimension d=new Dimension(r.width, r.height);
            jpab.getActiveBoxContent().setDimension(d);
            jpab.setPreferredSize(d);
            jpab.setMaximumSize(d);
            //jpab.adjustSize();
            setModified(true);
        }
    }
    
    public void editObject(Rectangle r, JComponent jc, Point pt){
        if(jc instanceof JPanelActiveBox){
            JPanelActiveBox jpab=(JPanelActiveBox)jc;
            if(jpab!=null && jpab.ab!=null){
                ActiveBoxContent abc=ActiveBoxContentEditor.getActiveBoxContent(
                jpab.ab.getContent(),
                jpab, options,
                getActivityEditor().getMediaBagEditor(), jpab.ab);
                if(abc!=null){
                    jpab.setActiveBoxContent(abc);
                    Dimension d=abc.getDimension();
                    if(d!=null)
                        resizeObjectTo(new Rectangle(jpab.getX(), jpab.getY(), d.width, d.height), jpab);
                    setModified(true);
                }
            }
        }
    }
    
    public void saveData(){
        TextActivityBase act=getTextActivity();
        if(act!=null){
            // ???
        }
    }
        
    protected javax.swing.Icon getIcon(){
        return ResourceManager.getImageIcon("icons/text_edit.gif");
    }
    
    protected String getTitle() {
        return options.getMsg("edit_act_panels_text");
    }
    
    protected String getTooltip() {
        return options.getMsg("edit_act_panels_text_tooltip");
    }
    
    public boolean documentChangePerformed(DocumentEvent ev){
        if(ev!=null && ev.getType()==DocumentEvent.EventType.REMOVE && getTextActivity()!=null)
            getTextActivity().tad.tmb.removeUnattachedElements();
        return ev!=null;
    }
    
    
    public boolean eventPerformed(EventObject ev){
        boolean result=false;
        TextActivityBaseEditor tabe=getTextActivityEditor();
        if(tabe!=null && !skipUpdate){
            TextActivityBase ta=tabe.getTextActivity();
            MutableAttributeSet attr = new SimpleAttributeSet();
            boolean paragraphAttr=false;
            boolean charAttr=false;
            boolean replace=false;
            Object src=(ev==null ? null : ev.getSource());
            int xStart = textPane.getSelectionStart();
            int xFinish = textPane.getSelectionEnd();
            int len=0;
            if(xStart!=xFinish){
                if(xFinish<xStart){
                    int s=xStart;
                    xStart=xFinish;
                    xFinish=s;
                }
                len=xFinish-xStart;
            }
            
            if(src.equals(fontFaceCombo)){
                fontName = fontFaceCombo.getSelectedItem().toString();
                StyleConstants.setFontFamily(attr, fontName);
                charAttr=true;
            }
            else if(src.equals(fontSizeCombo)){
                int fs=0;
                try{
                    fs=Integer.parseInt(fontSizeCombo.getSelectedItem().toString());
                } catch(NumberFormatException ex){
                    return false;
                }
                if(fs>=1){
                    fontSize=fs;
                    StyleConstants.setFontSize(attr, fontSize);
                    charAttr=true;
                }
            }
            else if(src==boldBtn){
                StyleConstants.setBold(attr, boldBtn.isSelected());
                charAttr=true;
            }
            else if(src==italicBtn){
                StyleConstants.setItalic(attr, italicBtn.isSelected());
                charAttr=true;
            }
            else if(src==underlineBtn){
                StyleConstants.setUnderline(attr, underlineBtn.isSelected());
                charAttr=true;
            }
            else if(src==textColorBtn){
                StyleConstants.setForeground(attr, textColorBtn.getColor());
                charAttr=true;
            }
            else if(src==targetBtn){
                boolean b=targetBtn.isSelected();
                TargetMarker tm = b
                ? createNewTarget()
                : ta.tad.tmb.getElementByOffset(xFinish, true);
                if(tm==null)
                    return false;
                if(!b && !deleteTarget(tm))
                    return true;
                textPane.setCaretPosition(xStart);
                SwingUtilities.invokeLater(new Runnable(){
                    public void run(){
                        showAttributes(-1);
                    }
                });
            }
            else if(tabe.canEditTarget() && src==editTargetBtn){
                tabe.editTarget(xFinish, options, this);
                //if(tabe.editTarget(xFinish, options, this))
                //    setModified(true);
            }
            else if(src==insertBoxBtn){                
                JPanelActiveBox jpab=tabe.createNewBox(xStart, options, this);
                if(jpab!=null){
                    jpab.catchMouseEvents=false;
                    new Resizer(jpab, null, true, this);
                }
            }
            else if(src==optionsBtn){
                tabe.editCheckOptions(options, this);
            }
            else if(src==typeBtn && tabe.hasType()){
                tabe.editType(options, this);
            }
            else if(src==bgColorBtn){
                if(len==0){
                    
                }
                else{
                    StyleConstants.setBackground(attr, bgColorBtn.getColor());
                    charAttr=true;
                }
            }
            else if(src==alLeftBtn || src==alCenterBtn || src==alRightBtn){
                int align = src==alCenterBtn ? StyleConstants.ALIGN_CENTER
                : src==alRightBtn ? StyleConstants.ALIGN_RIGHT
                : StyleConstants.ALIGN_LEFT;
                StyleConstants.setAlignment(attr, align);
                paragraphAttr=true;
            }
            else if(src==styleBtn){
                StyleContext sc=TextStyleEditorPanel.editStyleContext(options, ta.tad.styleContext, this);
                if(sc!=null){
                    try{
                        //ta.tad=TextActivityDocument.getTextActivityDocument(ta.tad.getJDomElement(sc), ta);
                        ta.setStyleContext(sc);
                        setInitializing(true);
                        fillData();
                        setInitializing(false);
                    } catch(Exception ex){
                        System.err.println("error applying styles:\n"+ex);
                    }
                }
            }
            else if(src==prevScreenBtn){
                if(TextPrevScreenEditorPanel.editPrevScreen(options, (TextActivityBaseEditor)getActivityEditor(), this))
                    setModified(true);
            }
            else if(src==widthEdit || src==heightEdit){
                ta.setWindowSize(new Dimension(widthEdit.getValue(), heightEdit.getValue()));
                previewPanel.revalidate();                
            }
            
            changeCombos=false;
            
            if (paragraphAttr)
                ta.tad.setParagraphAttributes(xStart, len, attr, replace);
            if(charAttr){
                if(len>0)
                    ta.tad.setCharacterAttributes(xStart, len, attr, replace);
                else {
                    MutableAttributeSet inputAttributes=textPane.getInputAttributes();
                    inputAttributes.addAttributes(attr);
                }
            }
            
            textPane.grabFocus();
            changeCombos=true;
            result=true;
        }
        return result;
    }
    
    protected TargetMarker createNewTarget(){
        TargetMarker result=null;
        TextActivityBaseEditor tabe=getTextActivityEditor();
        if(tabe!=null){
            int from=textPane.getSelectionStart();
            int to=textPane.getSelectionEnd();
            result=tabe.createNewTarget(from, to, options, this);
        }
        return result;
    }
    
    protected boolean deleteTarget(TargetMarker tm){
        boolean result=false;
        TextActivityBaseEditor tabe=getTextActivityEditor();
        if(tabe!=null)
            result=tabe.deleteTarget(tm, options, this);
        return result;
    }
    
    protected void showAttributes(int p) {
        TextActivityBaseEditor tabe=getTextActivityEditor();
        if(tabe!=null){
            TextActivityBase ta=tabe.getTextActivity();
            skipUpdate = true;
            if(p<0)
                p=Math.max(0, textPane.getCaretPosition());
            AttributeSet a = ta.tad.getCharacterElement(p).getAttributes();
            String name = StyleConstants.getFontFamily(a);
            if(!name.equals(fontName) && changeCombos) {
                fontName = name;
                fontFaceCombo.setSelectedItem(name);
            }
            int size = StyleConstants.getFontSize(a);
            if (fontSize!=size && changeCombos) {
                fontSize = size;
                fontSizeCombo.setSelectedItem(Integer.toString(fontSize));
            }
            boldBtn.setSelected(StyleConstants.isBold(a));
            italicBtn.setSelected(StyleConstants.isItalic(a));
            underlineBtn.setSelected(StyleConstants.isUnderline(a));
            
            Color c=StyleConstants.getForeground(a);
            if(!c.equals(textColorBtn.getColor()))
                textColorBtn.setColor(c);
            
            c=StyleConstants.getBackground(a);
            if(!c.equals(bgColorBtn.getColor()))
                bgColorBtn.setColor(c);
            
            targetBtn.setSelected(a.isDefined(TextActivityDocument.TARGET));
            editTargetBtn.setEnabled(tabe.canEditTarget() && a.isDefined(TextActivityDocument.TARGET));
            
            int alignment=StyleConstants.getAlignment(a);
            alCenterBtn.setSelected(alignment==StyleConstants.ALIGN_CENTER);
            alRightBtn.setSelected(alignment==StyleConstants.ALIGN_RIGHT);
            alLeftBtn.setSelected(alignment!=StyleConstants.ALIGN_RIGHT && alignment!=StyleConstants.ALIGN_CENTER);
            
            skipUpdate = false;
        }
    }
    
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JToggleButton alCenterBtn;
    private javax.swing.JToggleButton alLeftBtn;
    private javax.swing.JToggleButton alRightBtn;
    private javax.swing.ButtonGroup alignGrp;
    private edu.xtec.jclic.beans.ColorButton bgColorBtn;
    private javax.swing.JToggleButton boldBtn;
    private javax.swing.JButton editTargetBtn;
    private javax.swing.JComboBox fontFaceCombo;
    private javax.swing.JComboBox fontSizeCombo;
    private edu.xtec.jclic.beans.SmallIntEditor heightEdit;
    private javax.swing.JButton insertBoxBtn;
    private javax.swing.JToggleButton italicBtn;
    private javax.swing.JScrollPane mainScroll;
    private javax.swing.JButton optionsBtn;
    private javax.swing.JButton prevScreenBtn;
    private javax.swing.JPanel previewPanel;
    private javax.swing.JButton styleBtn;
    private javax.swing.JToggleButton targetBtn;
    private edu.xtec.jclic.beans.ColorButton textColorBtn;
    private javax.swing.JTextPane textPane;
    private javax.swing.JScrollPane textScroll;
    private javax.swing.JButton typeBtn;
    private javax.swing.JToggleButton underlineBtn;
    private edu.xtec.jclic.beans.SmallIntEditor widthEdit;
    // End of variables declaration//GEN-END:variables
    
    
    protected class PreviewPanel extends ResizerPanel{
        public void doLayout(){
            if(textScroll!=null){
                TextActivityBase act=getTextActivity();
                Dimension d=(act!=null
                ? act.getWindowSize()
                : new Dimension(Activity.DEFAULT_WIDTH, Activity.DEFAULT_HEIGHT));
                textScroll.setBounds(0, 0, d.width, d.height);
            }
        }
    }
}

Generated by  Doxygen 1.6.0   Back to index