/* * @(#)DrawToolsPane.java * * Copyright (c) 2007-2008 The authors and contributors of JHotDraw. * You may not use, copy or modify this file, except in compliance with the * accompanying license terms. */ package org.jhotdraw.samples.svg.gui; import org.jhotdraw.app.action.edit.DuplicateAction; import org.jhotdraw.draw.tool.CreationTool; import org.jhotdraw.draw.tool.TextCreationTool; import org.jhotdraw.draw.tool.TextAreaCreationTool; import java.awt.event.MouseEvent; import javax.swing.border.*; import org.jhotdraw.gui.plaf.palette.*; import org.jhotdraw.samples.svg.*; import org.jhotdraw.util.*; import java.awt.*; import java.awt.event.MouseAdapter; import java.util.*; import javax.swing.*; import org.jhotdraw.draw.*; import org.jhotdraw.draw.action.*; import org.jhotdraw.samples.svg.action.*; import org.jhotdraw.samples.svg.figures.*; import static org.jhotdraw.samples.svg.SVGAttributeKeys.*; /** * DrawToolsPane. * * @author Werner Randelshofer * @version $Id$ */ public class ToolsToolBar extends AbstractToolBar { private static final long serialVersionUID = 1L; /** Creates new instance. */ public ToolsToolBar() { ResourceBundleUtil labels = ResourceBundleUtil.getBundle("org.jhotdraw.samples.svg.Labels"); setName(labels.getString("tools.toolbar")); } @Override protected JComponent createDisclosedComponent(int state) { JPanel p = null; switch (state) { case 1: { p = new JPanel(); p.setOpaque(false); p.setBorder(new EmptyBorder(5, 5, 5, 8)); // Abort if no editor is set if (editor == null) { break; } ResourceBundleUtil labels = ResourceBundleUtil.getBundle("org.jhotdraw.samples.svg.Labels"); GridBagLayout layout = new GridBagLayout(); p.setLayout(layout); GridBagConstraints gbc; AbstractButton btn; CreationTool creationTool; PathTool pathTool; TextCreationTool textTool; TextAreaCreationTool textAreaTool; SVGCreateFromFileTool imageTool; HashMap<AttributeKey<?>, Object> attributes; btn = ButtonFactory.addSelectionToolTo(this, editor, ButtonFactory.createDrawingActions(editor, disposables), createSelectionActions(editor)); btn.setUI((PaletteButtonUI) PaletteButtonUI.createUI(btn)); btn.addMouseListener(new SelectionToolButtonHandler(editor)); gbc = new GridBagConstraints(); gbc.gridx = 0; gbc.gridy = 0; p.add(btn, gbc); labels.configureToolBarButton(btn, "selectionTool"); attributes = new HashMap<AttributeKey<?>, Object>(); btn = ButtonFactory.addToolTo(this, editor, creationTool = new CreationTool(new SVGRectFigure(), attributes), "createRectangle", labels); creationTool.setToolDoneAfterCreation(false); btn.setUI((PaletteButtonUI) PaletteButtonUI.createUI(btn)); gbc = new GridBagConstraints(); gbc.gridx = 0; gbc.gridy = 1; gbc.insets = new Insets(3, 0, 0, 0); p.add(btn, gbc); btn = ButtonFactory.addToolTo(this, editor, creationTool = new CreationTool(new SVGEllipseFigure(), attributes), "createEllipse", labels); creationTool.setToolDoneAfterCreation(false); btn.setUI((PaletteButtonUI) PaletteButtonUI.createUI(btn)); gbc = new GridBagConstraints(); gbc.gridx = 1; gbc.gridy = 1; gbc.insets = new Insets(3, 3, 0, 0); p.add(btn, gbc); btn = ButtonFactory.addToolTo(this, editor, pathTool = new PathTool(new SVGPathFigure(), new SVGBezierFigure(true), attributes), "createPolygon", labels); pathTool.setToolDoneAfterCreation(false); btn.setUI((PaletteButtonUI) PaletteButtonUI.createUI(btn)); gbc = new GridBagConstraints(); gbc.gridx = 2; gbc.gridy = 1; gbc.insets = new Insets(3, 3, 0, 0); p.add(btn, gbc); attributes = new HashMap<AttributeKey<?>, Object>(); attributes.put(AttributeKeys.FILL_COLOR, null); attributes.put(PATH_CLOSED, false); btn = ButtonFactory.addToolTo(this, editor, creationTool = new CreationTool(new SVGPathFigure(), attributes), "createLine", labels); creationTool.setToolDoneAfterCreation(false); btn.setUI((PaletteButtonUI) PaletteButtonUI.createUI(btn)); gbc = new GridBagConstraints(); gbc.gridx = 1; gbc.gridy = 0; gbc.insets = new Insets(0, 3, 0, 0); p.add(btn, gbc); btn = ButtonFactory.addToolTo(this, editor, pathTool = new PathTool(new SVGPathFigure(), new SVGBezierFigure(false), attributes), "createScribble", labels); pathTool.setToolDoneAfterCreation(false); btn.setUI((PaletteButtonUI) PaletteButtonUI.createUI(btn)); gbc = new GridBagConstraints(); gbc.gridx = 2; gbc.gridy = 0; gbc.insets = new Insets(0, 3, 0, 0); p.add(btn, gbc); attributes = new HashMap<AttributeKey<?>, Object>(); attributes.put(AttributeKeys.FILL_COLOR, Color.black); attributes.put(AttributeKeys.STROKE_COLOR, null); btn = ButtonFactory.addToolTo(this, editor, textTool = new TextCreationTool(new SVGTextFigure(), attributes), "createText", labels); textTool.setToolDoneAfterCreation(true); btn.setUI((PaletteButtonUI) PaletteButtonUI.createUI(btn)); gbc = new GridBagConstraints(); gbc.gridx = 0; gbc.gridy = 2; gbc.insets = new Insets(3, 0, 0, 0); p.add(btn, gbc); textAreaTool = new TextAreaCreationTool(new SVGTextAreaFigure(), attributes); textAreaTool.setRubberbandColor(Color.BLACK); textAreaTool.setToolDoneAfterCreation(true); btn = ButtonFactory.addToolTo(this, editor, textAreaTool, "createTextArea", labels); btn.setUI((PaletteButtonUI) PaletteButtonUI.createUI(btn)); gbc = new GridBagConstraints(); gbc.gridx = 1; gbc.gridy = 2; gbc.insets = new Insets(3, 3, 0, 0); p.add(btn, gbc); attributes = new HashMap<AttributeKey<?>, Object>(); attributes.put(AttributeKeys.FILL_COLOR, null); attributes.put(AttributeKeys.STROKE_COLOR, null); btn = ButtonFactory.addToolTo(this, editor, imageTool = new SVGCreateFromFileTool(new SVGImageFigure(), new SVGGroupFigure(), attributes), "createImage", labels); imageTool.setToolDoneAfterCreation(true); imageTool.setUseFileDialog(true); btn.setUI((PaletteButtonUI) PaletteButtonUI.createUI(btn)); gbc = new GridBagConstraints(); gbc.gridx = 2; gbc.gridy = 2; gbc.insets = new Insets(3, 3, 0, 0); p.add(btn, gbc); } break; } return p; } public Collection<Action> createSelectionActions(DrawingEditor editor) { LinkedList<Action> list = new LinkedList<Action>(); AbstractSelectedAction a; list.add(new DuplicateAction()); list.add(null); // separator list.add(a = new GroupAction(editor, new SVGGroupFigure())); disposables.add(a); list.add(a = new UngroupAction(editor, new SVGGroupFigure())); disposables.add(a); list.add(a = new CombineAction(editor)); disposables.add(a); list.add(a = new SplitAction(editor)); disposables.add(a); list.add(null); // separator list.add(a = new BringToFrontAction(editor)); disposables.add(a); list.add(a = new SendToBackAction(editor)); disposables.add(a); return list; } @Override protected String getID() { return "tools"; } @Override protected int getDefaultDisclosureState() { return 1; } private static class SelectionToolButtonHandler extends MouseAdapter { private DrawingEditor editor; private boolean wasSelectedOnPressed = false; public SelectionToolButtonHandler(DrawingEditor editor) { this.editor = editor; } @Override public void mouseClicked(MouseEvent e) { if (wasSelectedOnPressed) { DrawingView view = editor.getActiveView(); if (view != null) { view.setHandleDetailLevel(view.getHandleDetailLevel() + 1); } } } @Override public void mousePressed(MouseEvent e) { // Note: we blindly assume here that selection changes occur on mouse release!! wasSelectedOnPressed = ((AbstractButton) e.getSource()).isSelected(); } } /** 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. */ // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { setOpaque(false); }// </editor-fold>//GEN-END:initComponents // Variables declaration - do not modify//GEN-BEGIN:variables // End of variables declaration//GEN-END:variables }