From: Stephen C. <cr...@us...> - 2005-11-23 15:15:50
|
Update of /cvsroot/lexi/lexi/src/com/jmonkey/office/lexi/support In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31500/src/com/jmonkey/office/lexi/support Modified Files: Editor.java EditorActionManager.java FontChooser.java Added Files: ParagraphChooser.java Log Message: Added a rudimentary paragraph format dialog that currently sets alignment and margins (in points). Index: FontChooser.java =================================================================== RCS file: /cvsroot/lexi/lexi/src/com/jmonkey/office/lexi/support/FontChooser.java,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** FontChooser.java 15 Oct 2005 06:09:57 -0000 1.9 --- FontChooser.java 23 Nov 2005 15:15:41 -0000 1.10 *************** *** 70,83 **** /** ! * Display the FontChooser and return the slected font. ! * ! * @param owner the owner frame for the chooser. ! * @param title the title text for the chooser ! * @param modal if <code>true</code> the chooser is a modal dialog. ! * @return java.awt.Font The selected font, or null. */ ! public FontChooser(JFrame owner, String title, boolean modal, ! AttributeSet initial) { ! super(owner, title, modal); setSize(700, 500); init(owner, initial); --- 70,78 ---- /** ! * @param owner this Dialog's parent window. ! * @param initial the initial font attributes */ ! public FontChooser(JFrame owner, AttributeSet initial) { ! super(owner, "Font Chooser", true); setSize(700, 500); init(owner, initial); Index: EditorActionManager.java =================================================================== RCS file: /cvsroot/lexi/lexi/src/com/jmonkey/office/lexi/support/EditorActionManager.java,v retrieving revision 1.19 retrieving revision 1.20 diff -C2 -d -r1.19 -r1.20 *** EditorActionManager.java 21 Nov 2005 13:46:05 -0000 1.19 --- EditorActionManager.java 23 Nov 2005 15:15:41 -0000 1.20 *************** *** 90,93 **** --- 90,95 ---- public static final String COLOUR_CHOOSER_ACTION_PREFIX = "Colour Chooser..."; public static final String FONT_CHOOSER_ACTION_PREFIX = "Font Chooser..."; + public static final String PARA_CHOOSER_ACTION_PREFIX = + "Paragraph Chooser..."; public static final String SEARCH_ACTION_PREFIX = "Find..."; public static final String REPLACE_ACTION_PREFIX = "Find & Replace..."; *************** *** 100,111 **** public static final String FILE_SAVECOPY_ACTION_PREFIX = "Save Copy..."; - // public static final String FONT_FAMILY_ACTION_PREFIX = - // "format-font-family@"; - // public static final String FONT_SIZE_ACTION_PREFIX = "format-font-size@"; - // public static final String FONT_COLOUR_ACTION_PREFIX = - // "format-font-colour@"; - - // StyleConstants.ALIGN_RIGHT; - // ========= PRIVATE MEMBERS =================== --- 102,105 ---- *************** *** 150,153 **** --- 144,149 ---- m_actions.put(FILE_OPENAS_ACTION_PREFIX, new OpenAsAction(FILE_OPENAS_ACTION_PREFIX, app, agent)); + m_actions.put(PARA_CHOOSER_ACTION_PREFIX, + new ParagraphChooserAction(PARA_CHOOSER_ACTION_PREFIX, app)); m_actions.put(PASTE_ACTION_PREFIX, new PasteAction()); m_actions.put(REDO_ACTION_PREFIX, new RedoAction()); *************** *** 260,267 **** protected void doEditorAction(Editor editor, ActionEvent e) { AttributeSet initial = editor.getCharacterAttributes(); ! FontChooser fc = new FontChooser(m_parent, "Font Chooser", true, initial); fc.setVisible(true); if (fc.getOutcome()) { String family = fc.getFontFamily(); int size = fc.getFontSize(); --- 256,264 ---- protected void doEditorAction(Editor editor, ActionEvent e) { AttributeSet initial = editor.getCharacterAttributes(); ! FontChooser fc = new FontChooser(m_parent, initial); fc.setVisible(true); if (fc.getOutcome()) { + // FIXME - ugly String family = fc.getFontFamily(); int size = fc.getFontSize(); *************** *** 353,356 **** --- 350,369 ---- // ============================================================== + public final class ParagraphChooserAction extends EditorAction { + public ParagraphChooserAction(String nm, JFrame component) { + super(nm, component); + } + + public void doEditorAction(Editor editor, ActionEvent e) { + AttributeSet initial = editor.getParagraphAttributes(); + ParagraphChooser pc = new ParagraphChooser(m_parent, initial); + pc.setVisible(true); + + if (pc.getOutcome()) { + editor.setParagraphAttributes(pc.getAttributes(), false); + } + } + } + public final class ColourChooserAction extends EditorAction { public ColourChooserAction(String nm, JFrame component) { *************** *** 1021,1025 **** } ! public final Action getPasteAction() { return (Action) m_actions.get(PASTE_ACTION_PREFIX); } --- 1034,1042 ---- } ! public final Action getParagraphChooserAction() { ! return (Action) m_actions.get(PARA_CHOOSER_ACTION_PREFIX); ! } ! ! public final Action getPasteAction() { return (Action) m_actions.get(PASTE_ACTION_PREFIX); } Index: Editor.java =================================================================== RCS file: /cvsroot/lexi/lexi/src/com/jmonkey/office/lexi/support/Editor.java,v retrieving revision 1.17 retrieving revision 1.18 diff -C2 -d -r1.17 -r1.18 *** Editor.java 21 Nov 2005 13:46:05 -0000 1.17 --- Editor.java 23 Nov 2005 15:15:41 -0000 1.18 *************** *** 26,30 **** package com.jmonkey.office.lexi.support; - //import com.jmonkey.core.util.Code; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; --- 26,29 ---- *************** *** 198,201 **** --- 197,202 ---- public abstract MutableAttributeSet getInputAttributes(); + + public abstract AttributeSet getParagraphAttributes(); /** --- NEW FILE: ParagraphChooser.java --- /** * Copyright (C) 2005 the Lexi Project. * * This file is part of the Lexi document editor. * * Lexi 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, or (at your option) * any later version. * * Lexi 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. * * You should have received a copy of the GNU General Public License * along with GNU Classpath; see the file COPYING. If not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301 USA. * * Linking this library statically or dynamically with other modules is * making a combined work based on this library. Thus, the terms and * conditions of the GNU General Public License cover the whole combination. */ package com.jmonkey.office.lexi.support; import java.awt.BorderLayout; import java.awt.Component; import java.awt.FlowLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JSeparator; import javax.swing.JTextField; import javax.swing.text.AttributeSet; import javax.swing.text.MutableAttributeSet; import javax.swing.text.SimpleAttributeSet; import javax.swing.text.StyleConstants; import com.jmonkey.office.lexi.Lexi; /** * This class implements a Dialog for selecting paragraph style attributes. */ public final class ParagraphChooser extends JDialog implements ActionListener, ItemListener { private Lexi m_app; private JTextField m_leftMargin, m_rightMargin, m_topMargin, m_bottomMargin; private JCheckBox m_leftAlign, m_rightAlign, m_centre, m_justify; private boolean m_outcome; /** * @param owner the owner frame for the chooser. * @param initial the initial paragraph attributes */ public ParagraphChooser(JFrame owner, AttributeSet initial) { super(owner, "Paragraph Chooser", true); setSize(700, 500); init(owner, initial); } /** * Handle the actions associated with the 'ok' and the 'cancel' buttons */ public void actionPerformed(ActionEvent e) { String command = e.getActionCommand(); if (command.equals("can-button")) { m_outcome = false; dispose(); } else if (command.equals("ok-button")) { m_outcome = true; dispose(); } } public boolean getOutcome() { return m_outcome; } public AttributeSet getParagraphProperties() { return null; } /** * Sets us up with the panels needed to create this font chooser */ private void init(Component c, AttributeSet initial) { m_app = (Lexi) c; JPanel main = new JPanel(); JPanel buttonPanel = new JPanel(); JPanel propertyPanel = new JPanel(); main.setLayout(new BorderLayout()); buttonPanel.setLayout(new FlowLayout()); propertyPanel.setLayout(new GridLayout(4, 3)); m_leftAlign = new JCheckBox("Left align", false); m_leftAlign.addItemListener(this); m_rightAlign = new JCheckBox("Right align", false); m_rightAlign.addItemListener(this); m_centre = new JCheckBox("Center", false); m_centre.addItemListener(this); m_justify = new JCheckBox("Justify", false); m_justify.addItemListener(this); m_leftMargin = new JTextField(); m_rightMargin = new JTextField(); m_topMargin = new JTextField(); m_bottomMargin = new JTextField(); // Select the initial alignment switch (StyleConstants.getAlignment(initial)) { case StyleConstants.ALIGN_LEFT: m_leftAlign.setSelected(true); break; case StyleConstants.ALIGN_RIGHT: m_rightAlign.setSelected(true); break; case StyleConstants.ALIGN_CENTER: m_centre.setSelected(true); break; case StyleConstants.ALIGN_JUSTIFIED: m_justify.setSelected(true); break; } propertyPanel.add(m_leftMargin); propertyPanel.add(new JLabel("Left margin")); propertyPanel.add(m_leftAlign); propertyPanel.add(m_rightMargin); propertyPanel.add(new JLabel("Right margin")); propertyPanel.add(m_rightAlign); propertyPanel.add(m_topMargin); propertyPanel.add(new JLabel("Top margin")); propertyPanel.add(m_centre); propertyPanel.add(m_bottomMargin); propertyPanel.add(new JLabel("Bottom margin")); propertyPanel.add(m_justify); // Button Pane JButton okButton = new JButton("OK"); okButton.setActionCommand("ok-button"); okButton.addActionListener(this); JButton cancelButton = new JButton("Cancel"); cancelButton.setActionCommand("can-button"); cancelButton.addActionListener(this); buttonPanel.add(okButton); buttonPanel.add(cancelButton); // Add Stuff to Main main.add(propertyPanel, BorderLayout.CENTER); main.add(buttonPanel, BorderLayout.SOUTH); getContentPane().add(main); pack(); // set the position of the dialog. setLocationRelativeTo(c); } /** * Handles the checkbox changes */ public void itemStateChanged(ItemEvent iEv) { if (iEv.getStateChange() == ItemEvent.SELECTED) { // Toggle off all other checkboxes. if (iEv.getItem() == m_leftAlign) { m_rightAlign.setSelected(false); m_centre.setSelected(false); m_justify.setSelected(false); } else if (iEv.getItem() == m_rightAlign) { m_leftAlign.setSelected(false); m_centre.setSelected(false); m_justify.setSelected(false); } else if (iEv.getItem() == m_centre) { m_leftAlign.setSelected(false); m_rightAlign.setSelected(false); m_justify.setSelected(false); } else if (iEv.getItem() == m_justify) { m_leftAlign.setSelected(false); m_centre.setSelected(false); m_rightAlign.setSelected(false); } } else if (iEv.getStateChange() == ItemEvent.DESELECTED && !m_leftAlign.isSelected() && !m_rightAlign.isSelected() && !m_centre.isSelected() && !m_justify.isSelected()) { // If all checkboxes are clear, tick the 'left align' checkbox. m_leftAlign.setSelected(true); } } public AttributeSet getAttributes() { MutableAttributeSet res = new SimpleAttributeSet(); if (m_leftAlign.isSelected()) { StyleConstants.setAlignment(res, StyleConstants.ALIGN_LEFT); } else if (m_rightAlign.isSelected()) { StyleConstants.setAlignment(res, StyleConstants.ALIGN_RIGHT); } else if (m_centre.isSelected()) { StyleConstants.setAlignment(res, StyleConstants.ALIGN_CENTER); } else if (m_justify.isSelected()) { StyleConstants.setAlignment(res, StyleConstants.ALIGN_JUSTIFIED); } if (isValidMargin(m_leftMargin)) { StyleConstants.setLeftIndent(res, getMargin(m_leftMargin)); } if (isValidMargin(m_rightMargin)) { StyleConstants.setRightIndent(res, getMargin(m_rightMargin)); } if (isValidMargin(m_topMargin)) { StyleConstants.setSpaceAbove(res, getMargin(m_topMargin)); } if (isValidMargin(m_bottomMargin)) { StyleConstants.setSpaceBelow(res, getMargin(m_bottomMargin)); } return res; } private boolean isValidMargin(JTextField field) { String text = field.getText(); if (text != null) { try { Integer.parseInt(text); return true; } catch (NumberFormatException ex) { } } return false; } private int getMargin(JTextField field) { return Integer.parseInt(field.getText()); } } |