| /******************************************************************************* |
| * Copyright (c) 2005 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.draw2d.examples.tree; |
| |
| import org.eclipse.swt.events.SelectionAdapter; |
| import org.eclipse.swt.events.SelectionEvent; |
| import org.eclipse.swt.graphics.FontData; |
| import org.eclipse.swt.layout.GridData; |
| import org.eclipse.swt.layout.GridLayout; |
| import org.eclipse.swt.widgets.Button; |
| import org.eclipse.swt.widgets.Composite; |
| import org.eclipse.swt.widgets.Group; |
| import org.eclipse.swt.widgets.Label; |
| import org.eclipse.swt.widgets.Scale; |
| |
| import org.eclipse.draw2d.ColorConstants; |
| import org.eclipse.draw2d.IFigure; |
| import org.eclipse.draw2d.MouseEvent; |
| import org.eclipse.draw2d.MouseListener; |
| import org.eclipse.draw2d.PositionConstants; |
| import org.eclipse.draw2d.examples.AbstractExample; |
| import org.eclipse.swt.SWT; |
| |
| /** |
| * @author hudsonr |
| * Created on Apr 18, 2003 |
| */ |
| public class TreeExample extends AbstractExample { |
| |
| boolean animate; |
| |
| public static void main(String[] args) { |
| new TreeExample().run(); |
| } |
| |
| TreeRoot root; |
| |
| PageNode selected; |
| |
| IFigure createPageNode(String title) { |
| final PageNode node = new PageNode(title); |
| node.addMouseListener(new MouseListener.Stub() { |
| public void mousePressed(MouseEvent me) { |
| setSelected(node); |
| } |
| public void mouseDoubleClicked(MouseEvent me) { |
| doExpandCollapse(); |
| } |
| }); |
| return node; |
| } |
| |
| void doAddChild() { |
| if (selected == null) |
| return; |
| TreeBranch parent = (TreeBranch)selected.getParent(); |
| parent.getContentsPane().add(new TreeBranch(createPageNode("child"), parent.getStyle())); |
| } |
| |
| void doAlignCenter() { |
| if (selected == null) |
| return; |
| TreeBranch parent = (TreeBranch)selected.getParent(); |
| parent.setAlignment(PositionConstants.CENTER); |
| } |
| |
| void doAlignLeft() { |
| if (selected == null) |
| return; |
| TreeBranch parent = (TreeBranch)selected.getParent(); |
| parent.setAlignment(PositionConstants.LEFT); |
| } |
| |
| void doDeleteChild() { |
| if (selected == null) |
| return; |
| TreeBranch parent = (TreeBranch)selected.getParent(); |
| IFigure contents = parent.getContentsPane(); |
| if (contents.getChildren().isEmpty()) |
| return; |
| contents.remove( |
| (IFigure)contents.getChildren().get(contents.getChildren().size() - 1)); |
| } |
| |
| void doExpandCollapse() { |
| if (selected == null) |
| return; |
| TreeBranch parent = (TreeBranch)selected.getParent(); |
| if (parent.getContentsPane().getChildren().isEmpty()) |
| return; |
| if (animate) { |
| if (parent.isExpanded()) |
| parent.collapse(); |
| else |
| parent.expand(); |
| } else |
| parent.setExpanded(!parent.isExpanded()); |
| } |
| |
| void doStyleHanging() { |
| if (selected == null) |
| return; |
| TreeBranch parent = (TreeBranch)selected.getParent(); |
| parent.setStyle(TreeBranch.STYLE_HANGING); |
| } |
| |
| void doStyleNormal() { |
| if (selected == null) |
| return; |
| TreeBranch parent = (TreeBranch)selected.getParent(); |
| parent.setStyle(TreeBranch.STYLE_NORMAL); |
| } |
| |
| /** |
| * @see org.eclipse.draw2d.examples.AbstractExample#getContents() |
| */ |
| protected IFigure getContents() { |
| getFigureCanvas().setBackground(ColorConstants.white); |
| root = new TreeRoot(createPageNode("Graph Root")); |
| |
| TreeBranch branch, subbranch; |
| root.getContentsPane().add(branch = new TreeBranch(createPageNode("Normal Style"))); |
| root.getContentsPane().add(new TreeBranch(createPageNode("Child"))); |
| branch.getContentsPane().add(new TreeBranch(createPageNode("Child 1"))); |
| branch.getContentsPane().add(new TreeBranch(createPageNode("Child 2"))); |
| branch.getContentsPane().add(subbranch = new TreeBranch(createPageNode("Child 3"))); |
| |
| subbranch.getContentsPane().add(new TreeBranch(createPageNode("child"))); |
| subbranch.getContentsPane().add(new TreeBranch(createPageNode("child"))); |
| subbranch.getContentsPane().add(new TreeBranch(createPageNode("child"))); |
| |
| root.getContentsPane().add(branch = new TreeBranch(createPageNode("Normal Style"), TreeBranch.STYLE_NORMAL)); |
| root.getContentsPane().add(new TreeBranch(createPageNode("Child"))); |
| branch.getContentsPane().add(new TreeBranch(createPageNode("Child 1"), TreeBranch.STYLE_HANGING)); |
| branch.getContentsPane().add(subbranch = new TreeBranch(createPageNode("Child 2"), TreeBranch.STYLE_HANGING)); |
| subbranch.getContentsPane().add(new TreeBranch(createPageNode("child"))); |
| subbranch.getContentsPane().add(new TreeBranch(createPageNode("child"))); |
| |
| root.getContentsPane().add(branch = new TreeBranch(createPageNode("Normal Style"))); |
| branch.getContentsPane().add(new TreeBranch(createPageNode("Child 1"))); |
| branch.getContentsPane().add(new TreeBranch(createPageNode("Child 2"))); |
| branch.getContentsPane().add(new TreeBranch(createPageNode("Child 3"))); |
| |
| return root; |
| } |
| |
| /** |
| * @see org.eclipse.draw2d.examples.AbstractExample#run() |
| */ |
| protected void hookShell() { |
| Composite localShell = new Composite(shell, 0); |
| localShell.setLayoutData(new GridData(GridData.FILL_VERTICAL)); |
| |
| localShell.setLayout(new GridLayout()); |
| Group rootGroup = new Group(localShell, 0); |
| rootGroup.setText("Root Properties"); |
| FontData data = rootGroup.getFont().getFontData()[0]; |
| data.setStyle(SWT.BOLD); |
| rootGroup.setLayout(new GridLayout()); |
| |
| final Button orientation = new Button(rootGroup, SWT.CHECK); |
| orientation.setText("Horizontal Orientation"); |
| orientation.setSelection(true); |
| orientation.addSelectionListener(new SelectionAdapter() { |
| public void widgetSelected(SelectionEvent e) { |
| root.setHorizontal(orientation.getSelection()); |
| } |
| }); |
| |
| final Button useAnimation = new Button(rootGroup, SWT.CHECK); |
| useAnimation.setText("Use Animation"); |
| useAnimation.setSelection(false); |
| useAnimation.addSelectionListener(new SelectionAdapter() { |
| public void widgetSelected(SelectionEvent e) { |
| animate = useAnimation.getSelection(); |
| } |
| }); |
| |
| final Button compress = new Button(rootGroup, SWT.CHECK); |
| compress.setText("Compress Tree"); |
| compress.setSelection(false); |
| compress.addSelectionListener(new SelectionAdapter() { |
| public void widgetSelected(SelectionEvent e) { |
| root.setCompression(compress.getSelection()); |
| root.invalidateTree(); |
| root.revalidate(); |
| } |
| }); |
| |
| |
| |
| final Label majorLabel = new Label(rootGroup, 0); |
| majorLabel.setText("Major Spacing: 10"); |
| final Scale major = new Scale(rootGroup, 0); |
| major.setMinimum(5); |
| major.setIncrement(5); |
| major.setMaximum(50); |
| major.setSelection(10); |
| major.addSelectionListener(new SelectionAdapter() { |
| public void widgetSelected(SelectionEvent e) { |
| root.setMajorSpacing(major.getSelection()); |
| majorLabel.setText("Major Spacing: " + root.getMajorSpacing()); |
| } |
| }); |
| |
| final Label minorLabel = new Label(rootGroup, 0); |
| minorLabel.setText("Minor Spacing: 10"); |
| final Scale minor = new Scale(rootGroup, 0); |
| minor.setMinimum(5); |
| minor.setIncrement(5); |
| minor.setMaximum(50); |
| minor.setSelection(10); |
| minor.addSelectionListener(new SelectionAdapter() { |
| public void widgetSelected(SelectionEvent e) { |
| root.setMinorSpacing(minor.getSelection()); |
| minorLabel.setText("Minor Spacing: " + root.getMinorSpacing()); |
| } |
| }); |
| |
| Group selectedGroup = new Group(localShell, 0); |
| selectedGroup.setText("Selected Node:"); |
| selectedGroup.setLayout(new GridLayout(2, true)); |
| |
| Button addChild = new Button(selectedGroup, 0); |
| addChild.setText("More Children"); |
| addChild.addSelectionListener(new SelectionAdapter() { |
| public void widgetSelected(SelectionEvent e) { |
| doAddChild(); |
| } |
| }); |
| |
| |
| Button removeChild = new Button(selectedGroup, 0); |
| removeChild.setText("Fewer Children"); |
| removeChild.addSelectionListener(new SelectionAdapter() { |
| public void widgetSelected(SelectionEvent e) { |
| doDeleteChild(); |
| } |
| }); |
| |
| Button alignCenter = new Button(selectedGroup, 0); |
| alignCenter.setText("Align Center"); |
| alignCenter.addSelectionListener(new SelectionAdapter() { |
| public void widgetSelected(SelectionEvent e) { |
| doAlignCenter(); |
| } |
| }); |
| Button alignLeft = new Button(selectedGroup, 0); |
| alignLeft.setText("Align Top/Left"); |
| alignLeft.addSelectionListener(new SelectionAdapter() { |
| public void widgetSelected(SelectionEvent e) { |
| doAlignLeft(); |
| } |
| }); |
| |
| Button normal = new Button(selectedGroup, 0); |
| normal.setText("Normal"); |
| normal.addSelectionListener(new SelectionAdapter() { |
| public void widgetSelected(SelectionEvent e) { |
| doStyleNormal(); |
| } |
| }); |
| |
| Button hanging = new Button(selectedGroup, 0); |
| hanging.setText("Hanging"); |
| hanging.addSelectionListener(new SelectionAdapter() { |
| public void widgetSelected(SelectionEvent e) { |
| doStyleHanging(); |
| } |
| }); |
| |
| Button expandCollapse = new Button(selectedGroup, 0); |
| expandCollapse.setText("expand/collapse"); |
| expandCollapse.addSelectionListener(new SelectionAdapter() { |
| public void widgetSelected(SelectionEvent e) { |
| doExpandCollapse(); |
| } |
| }); |
| } |
| |
| void setSelected(PageNode node) { |
| if (selected != null) { |
| selected.setSelected(false); |
| } |
| selected = node; |
| selected.setSelected(true); |
| } |
| |
| } |