/************************************************************************************
* Copyright (c) 2008 William Chen. *
* *
* 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 *
* *
* Use is subject to the terms of Eclipse Public License v1.0. *
* *
* Contributors: *
* William Chen - initial API and implementation. *
************************************************************************************/
package org.dyno.visual.swing.designer;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Insets;
import java.awt.LayoutManager;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.Window;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import javax.swing.JComponent;
import javax.swing.JLayeredPane;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.MenuElement;
import javax.swing.SwingUtilities;
import javax.swing.border.Border;
import org.dyno.visual.swing.VisualSwingPlugin;
import org.dyno.visual.swing.base.EditorAction;
import org.dyno.visual.swing.base.ExtensionRegistry;
import org.dyno.visual.swing.base.MenuSelectionManager;
import org.dyno.visual.swing.base.NamespaceManager;
import org.dyno.visual.swing.editors.VisualSwingEditor;
import org.dyno.visual.swing.editors.actions.SetLnfAction;
import org.dyno.visual.swing.plugin.spi.CompositeAdapter;
import org.dyno.visual.swing.plugin.spi.IContextCustomizer;
import org.dyno.visual.swing.plugin.spi.ILookAndFeelAdapter;
import org.dyno.visual.swing.plugin.spi.InvisibleAdapter;
import org.dyno.visual.swing.plugin.spi.WidgetAdapter;
import org.eclipse.albireo.core.Platform;
import org.eclipse.albireo.core.SwtPopupRegistry;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.commands.operations.IOperationHistory;
import org.eclipse.core.commands.operations.IUndoContext;
import org.eclipse.core.commands.operations.IUndoableOperation;
import org.eclipse.core.commands.operations.ObjectUndoContext;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IField;
import org.eclipse.jdt.core.IType;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.IEditorSite;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.actions.ActionFactory;
import org.eclipse.ui.actions.RetargetAction;
import org.eclipse.ui.actions.ActionFactory.IWorkbenchAction;
import org.eclipse.ui.operations.RedoActionHandler;
import org.eclipse.ui.operations.UndoActionHandler;
/**
*
* VisualDesigner
*
* @version 1.0.0, 2008-7-3
* @author William Chen
*/
public class VisualDesigner extends JComponent implements KeyListener {
private static final long serialVersionUID = -8003291919574427325L;
private Rectangle rootBounds;
private GlassPlane glass;
private JComponent container;
private JComponent popupLayer;
private Border designBorder;
private Component root;
private Banner banner;
private List<WidgetAdapter> clipboard;
private boolean lnfChanged;
private ICompilationUnit unit;
private VisualSwingEditor editor;
private Composite parent;
private IUndoContext undoContext;
private List<WidgetAdapter> selected;
private boolean locked;
private NamespaceManager namespace;
public NamespaceManager getNamespace() {
return namespace;
}
public Composite getEditorSite() {
return parent;
}
public boolean isLocked() {
return locked;
}
public void lock() {
locked = true;
}
public void unlock() {
locked = false;
}
public VisualDesigner(VisualSwingEditor editor, Composite parent) {
this.editor = editor;
this.undoContext = new ObjectUndoContext(editor);
this.parent = parent;
this.clipboard = new ArrayList<WidgetAdapter>();
this.selected = new ArrayList<WidgetAdapter>();
setFocusable(true);
setLayout(new DesignerLayout());
glass = new GlassPlane(this);
add(glass);
popupLayer = new JLayeredPane();
add(popupLayer);
glass.addKeyListener(this);
container = new ContainerPane();
add(container);
banner = new Banner();
add(banner);
setFocusCycleRoot(true);
setFocusTraversalPolicy(new DesignerFocusTraversalPolicy());
putClientProperty("popup.layer", popupLayer); //$NON-NLS-1$
}
private class ContainerPane extends JComponent {
private static final long serialVersionUID = 1L;
protected void paintComponent(Graphics g) {
super.paintComponent(g);
if (captured != null && root != null && rootBounds != null && designBorder != null) {
Insets insets = designBorder.getBorderInsets(this);
Graphics clipg = g.create(insets.left, insets.top, root.getWidth(), root.getHeight());
clipg.drawImage(captured, 0, 0, this);
clipg.dispose();
}
}
}
public IUndoContext getUndoContext() {
return undoContext;
}
public VisualSwingEditor getEditor() {
return editor;
}
public String getLnfClassname() {
return editor.getLnfClassname();
}
public GlassPlane getGlass() {
return glass;
}
public boolean editComponent(Component hovered) {
return glass.editComponent(hovered);
}
public Component getRoot() {
return root;
}
public void setLnfClassname(String lnfClassname) {
editor.setLnfClassname(lnfClassname);
setLnfChanged(true);
}
public void selectWidgets(Rectangle selectionRegion) {
if (root != null) {
CompositeAdapter rootAdapter = (CompositeAdapter) WidgetAdapter.getWidgetAdapter(root);
if (_selectWidget(selectionRegion, rootAdapter)) {
if (rootAdapter != null) {
rootAdapter.setSelected(false);
}
}
publishSelection();
repaint();
}
}
private boolean isAdapterVisible(WidgetAdapter root) {
boolean visible = root.getRootPane().isVisible();
if (visible) {
if (root.isRoot())
return true;
else {
WidgetAdapter adapter = root.getParentAdapter();
if (isAdapterVisible(adapter)) {
return ((CompositeAdapter) adapter).isChildVisible(root.getWidget());
} else
return false;
}
} else
return false;
}
private boolean _selectWidget(Rectangle sel, WidgetAdapter adapter) {
boolean selected = false;
Component current = adapter.getWidget();
Rectangle localBounds = SwingUtilities.getLocalBounds(current);
Rectangle globalBounds = SwingUtilities.convertRectangle(current, localBounds, this);
if (sel.contains(globalBounds) && isAdapterVisible(adapter)) {
adapter.setSelected(true);
selected = true;
}
if (adapter instanceof CompositeAdapter) {
CompositeAdapter compositeAdapter = (CompositeAdapter) adapter;
int size = compositeAdapter.getChildCount();
for (int i = 0; i < size; i++) {
Component child = compositeAdapter.getChild(i);
WidgetAdapter childAdapter = WidgetAdapter.getWidgetAdapter(child);
if (childAdapter != null && _selectWidget(sel, childAdapter)) {
selected = true;
}
}
}
return selected;
}
void trigPopup(final Point p, final List<Component> selected) {
editor.getDisplay().asyncExec(new Runnable() {
public void run() {
Point dp = new Point(p);
SwingUtilities.convertPointToScreen(dp, glass);
showPopup(dp, selected, true);
}
});
}
private void fillLnfAction(MenuManager lnfMenu) {
Collection<ILookAndFeelAdapter> lnfAdapters = ExtensionRegistry.getLnfAdapters();
for (ILookAndFeelAdapter lnfAdapter : lnfAdapters) {
if (lnfAdapter.getLookAndFeelInstance().isSupportedLookAndFeel()) {
String lnfName = lnfAdapter.getName();
String lnfClassname = lnfAdapter.getClassname();
IAction lnfAction = new SetLnfAction(this, lnfName, lnfClassname);
lnfMenu.add(lnfAction);
}
}
}
public void showPopup(Point dp, List<Component> selected, boolean isAWTParent) {
MenuManager manager = new MenuManager("#EDIT"); //$NON-NLS-1$
MenuManager lnfMenu = new MenuManager(Messages.VisualDesigner_SetLaf, "#LNF"); //$NON-NLS-2$
fillLnfAction(lnfMenu);
manager.add(lnfMenu);
List<IContextCustomizer> contexts = ExtensionRegistry.getContextCustomizers();
if (!contexts.isEmpty()) {
manager.add(new Separator());
WidgetAdapter rootAdapter = WidgetAdapter.getWidgetAdapter(root);
for (IContextCustomizer customizer : contexts) {
customizer.fillContextMenu(manager, rootAdapter, selected);
}
}
manager.add(new Separator());
IEditorSite site = editor.getEditorSite();
manager.add(undoAction);
manager.add(redoAction);
manager.add(new Separator());
IWorkbenchPage page = site.getPage();
IWorkbenchWindow window = site.getWorkbenchWindow();
page.getActiveEditor();
for (EditorAction action : editor.getActions()) {
if (action == null) {
manager.add(new Separator());
} else if (action.isRetargetable()) {
IWorkbenchAction workbenchAction = action.getActionFactory().create(window);
if (workbenchAction instanceof RetargetAction) {
RetargetAction retargetAction = (RetargetAction) workbenchAction;
page.addPartListener(retargetAction);
retargetAction.partActivated(editor);
}
manager.add(workbenchAction);
} else {
manager.add(action);
}
}
final Menu menu = manager.createContextMenu(parent);
menu.setLocation(dp.x, dp.y);
if (Platform.isGtk() && isAWTParent) {
SwtPopupRegistry.getInstance().setMenu(glass, false, menu);
} else {
menu.setVisible(true);
}
}
public void clearSelection() {
if (root != null) {
WidgetAdapter adapter = WidgetAdapter.getWidgetAdapter(root);
if (adapter != null) {
adapter.clearSelection();
}
}
selected = new ArrayList<WidgetAdapter>();
}
public void addSelectedWidget(WidgetAdapter adapter) {
if (!selected.contains(adapter))
selected.add(adapter);
}
public void removeSelectedWidget(WidgetAdapter adapter) {
selected.remove(adapter);
}
public List<WidgetAdapter> getSelectedWidgets() {
return selected;
}
public List<WidgetAdapter> getSelectedWidgetList() {
List<WidgetAdapter> adapters = new ArrayList<WidgetAdapter>();
List<Component> children = getSelectedComponents();
for (Component child : children) {
WidgetAdapter adapter = WidgetAdapter.getWidgetAdapter(child);
adapters.add(adapter);
}
return adapters;
}
public List<Component> getSelectedComponents() {
return new WidgetSelection(root);
}
public Component componentAt(Point p, int offset) {
if (root != null) {
MenuElement[] menu_selection = MenuSelectionManager.defaultManager().getSelectedPath();
if (menu_selection != null && menu_selection.length > 0) {
for (int i = menu_selection.length - 1; i >= 0; i--) {
if (menu_selection[i] instanceof JPopupMenu) {
JPopupMenu jpm = (JPopupMenu) menu_selection[i];
synchronized (jpm.getTreeLock()) {
if (!jpm.isShowing())
continue;
Rectangle b = jpm.getBounds();
Point jpml = jpm.getLocationOnScreen();
Point vdl = getLocationOnScreen();
b.x = jpml.x - vdl.x;
b.y = jpml.y - vdl.y;
if (b.contains(p)) {
MenuElement[] sub = jpm.getSubElements();
for (MenuElement submenu : sub) {
if (submenu instanceof JMenuItem) {
JMenuItem submenuItem = (JMenuItem) submenu;
Rectangle sb = submenuItem.getBounds();
sb.x += b.x;
sb.y += b.y;
if (sb.contains(p)) {
return submenuItem;
}
}
}
if (WidgetAdapter.getWidgetAdapter(jpm) != null)
return jpm;
}
}
}
}
}
Point mp = SwingUtilities.convertPoint(this, p, root);
if (isPointInRoot(mp, offset))
return root;
return _getComponentAt(root, mp, offset);
} else
return null;
}
private boolean isPointInRoot(Point p, int offset) {
int w = root.getWidth();
int h = root.getHeight();
if (p.x < -offset || p.y < -offset || p.x >= w + offset || p.y >= h + offset)
return false;
if (p.x >= offset && p.y >= offset && p.x < w - offset && p.y < h - offset)
return false;
return true;
}
private Component _getComponentAt(Component comp, Point p, int ad) {
WidgetAdapter adapter = WidgetAdapter.getWidgetAdapter(comp);
if (adapter == null)
return null;
if (adapter instanceof CompositeAdapter) {
CompositeAdapter compAdapter = (CompositeAdapter) adapter;
if (compAdapter.isEnclosingContainer()) {
if (compAdapter.interceptPoint(p, ad))
return comp;
}
int count = compAdapter.getChildCount();
for (int i = 0; i < count; i++) {
Component child = compAdapter.getChild(i);
WidgetAdapter childAdapter = WidgetAdapter.getWidgetAdapter(child);
if (child.isVisible() && childAdapter != null && childAdapter.isSelected()) {
Point location = SwingUtilities.convertPoint(comp, p, child);
Component jcomp = _getComponentAt(child, location, ad);
if (jcomp != null)
return jcomp;
}
}
for (int i = 0; i < count; i++) {
Component child = compAdapter.getChild(i);
WidgetAdapter childAdapter = WidgetAdapter.getWidgetAdapter(child);
if (child.isVisible() && childAdapter != null && !childAdapter.isSelected()) {
Point location = SwingUtilities.convertPoint(comp, p, child);
Component jcomp = _getComponentAt(child, location, ad);
if (jcomp != null)
return jcomp;
}
}
}
CompositeAdapter compParent = adapter.getParentAdapter();
if (compParent != null && compParent.isEnclosingContainer()) {
Rectangle bounds = compParent.getVisibleRect(comp);
if (bounds != null) {
if (p.x >= bounds.x - ad && p.x <= bounds.width + ad && p.y >= bounds.y - ad && p.y <= bounds.height + ad)
return comp;
}
}
if (p.x >= -ad && p.y >= -ad && p.x < comp.getWidth() + ad && p.y < comp.getHeight() + ad)
return comp;
else
return null;
}
Component getRootWidget() {
return root;
}
public void resetRoot() {
WidgetAdapter adapter = WidgetAdapter.getWidgetAdapter(root);
rootBounds = adapter.getDesignBounds();
root.setSize(rootBounds.width, rootBounds.height);
designBorder = adapter.getDesignBorder();
container.setBorder(designBorder);
validateContent();
setLnfChanged(false);
setFocus();
}
public void initRootWidget(WidgetAdapter adapter) {
if (root != null)
remove(root);
if (adapter != null) {
hideVisibleWindow(adapter);
root = adapter.getRootPane();
Container parent = root.getParent();
if (parent != null)
parent.remove(root);
IEditorSite site = editor.getEditorSite();
undoAction = new UndoActionHandler(site, getUndoContext());
redoAction = new RedoActionHandler(site, getUndoContext());
IActionBars actionBars = site.getActionBars();
actionBars.setGlobalActionHandler(ActionFactory.UNDO.getId(), undoAction);
actionBars.setGlobalActionHandler(ActionFactory.REDO.getId(), redoAction);
rootBounds = adapter.getDesignBounds();
root.setSize(rootBounds.width, rootBounds.height);
add(root);
root.setVisible(true);
designBorder = adapter.getDesignBorder();
container.setBorder(designBorder);
} else {
root = null;
designBorder = null;
rootBounds = null;
container.setBorder(null);
}
validateContent();
setLnfChanged(false);
setFocus();
}
private void hideVisibleWindow(WidgetAdapter adapter) {
Component widget = adapter.getWidget();
if(widget instanceof Window){
Window window = (Window)widget;
if(window.isVisible()){
window.setVisible(false);
}
}
}
private Image captured;
public void capture() {
if (root != null) {
captured = null;
System.gc();
captured = root.createVolatileImage(root.getWidth(), root.getHeight());
Graphics offg = captured.getGraphics();
root.paint(offg);
repaint();
}
}
public void clearCapture() {
captured = null;
repaint();
}
private UndoActionHandler undoAction;
private RedoActionHandler redoAction;
public void publishSelection() {
editor.asyncRunnable(new Runnable() {
public void run() {
editor.setSelection(new StructuredSelection(new Object[] { new WidgetSelection(root) }));
editor.refreshActionState();
}
});
}
public void validateContent() {
editor.validateContent();
}
public void refreshDesigner() {
validate();
clearCapture();
repaint();
}
public void changeFocused() {
CompositeAdapter focused = getFocused();
glass.setFocusedComposite(focused);
repaint();
}
public CompositeAdapter getFocused() {
if (root != null) {
WidgetSelection selected = new WidgetSelection(root);
WidgetAdapter parent = null;
for (int i = 0; i < selected.size(); i++) {
Component comp = selected.get(i);
WidgetAdapter child = WidgetAdapter.getWidgetAdapter(comp);
WidgetAdapter par = child.getParentAdapter();
if (parent == null) {
parent = par;
} else if (parent != par)
return null;
}
if (parent == null)
return null;
else
return (CompositeAdapter) parent;
} else
return null;
}
public boolean isWidgetEditing() {
return glass.isWidgetEditing();
}
public List<WidgetAdapter> getClipboard() {
return clipboard;
}
class DesignerLayout implements LayoutManager {
public void addLayoutComponent(String name, Component comp) {
}
public void layoutContainer(Container parent) {
if (root != null && rootBounds != null && designBorder != null) {
banner.setBounds(0, 0, 0, 0);
int w = root == null ? 0 : root.getWidth();
w = w <= 0 ? rootBounds.width : w;
int h = root == null ? 0 : root.getHeight();
h = h <= 0 ? rootBounds.height : h;
Insets insets = designBorder.getBorderInsets(parent);
container.setBounds(rootBounds.x - insets.left, rootBounds.y - insets.top, w + insets.left + insets.right, h + insets.top + insets.bottom);
if (root != null) {
root.setBounds(rootBounds.x, rootBounds.y, w, h);
}
} else {
int w = parent.getWidth();
int h = parent.getHeight();
banner.setBounds(0, 0, w, h);
}
int w = parent.getWidth();
int h = parent.getHeight();
popupLayer.setBounds(0, 0, w, h);
glass.setBounds(0, 0, w, h);
}
public Dimension minimumLayoutSize(Container parent) {
return new Dimension(rootBounds == null ? 24 : 2 * rootBounds.x, rootBounds == null ? 24 : 2 * rootBounds.y);
}
public Dimension preferredLayoutSize(Container parent) {
int w = root == null ? (rootBounds == null ? 320 : rootBounds.width) : root.getWidth();
int h = root == null ? (rootBounds == null ? 240 : rootBounds.height) : root.getHeight();
w += rootBounds == null ? 24 : 2 * rootBounds.x;
h += rootBounds == null ? 24 : 2 * rootBounds.y;
Dimension prefSize = new Dimension(0, 0);
int count = popupLayer.getComponentCount();
for (int i = 0; i < count; i++) {
Component comp = popupLayer.getComponent(i);
if (comp.isVisible()) {
Rectangle bounds = comp.getBounds();
if (bounds.x + bounds.width > prefSize.width)
prefSize.width = bounds.x + bounds.width;
if (bounds.y + bounds.height > prefSize.height)
prefSize.height = bounds.y + bounds.height;
}
}
return new Dimension(prefSize.width > w ? prefSize.width : w, prefSize.height > h ? prefSize.height : h);
}
public void removeLayoutComponent(Component comp) {
}
}
private boolean isAlignResize(int count, String id) {
WidgetSelection selection = new WidgetSelection(root);
if (selection.size() > count) {
WidgetAdapter parentAdapter = null;
for (Component selected : selection) {
WidgetAdapter selectedAdapter = WidgetAdapter.getWidgetAdapter(selected);
WidgetAdapter selectedParent = selectedAdapter.getParentAdapter();
if (parentAdapter == null) {
parentAdapter = selectedParent;
} else if (parentAdapter != selectedParent) {
return false;
}
}
if (parentAdapter == null) {
return false;
} else {
for (Component selected : selection) {
WidgetAdapter selectedAdapter = WidgetAdapter.getWidgetAdapter(selected);
if (!selectedAdapter.isResizable()) {
return false;
}
}
return ((CompositeAdapter) parentAdapter).isSelectionAlignResize(id);
}
} else {
return false;
}
}
public void keyPressed(KeyEvent e) {
if (isAlignResize(0, null)) {
boolean isMoved = false;
if (e.getKeyCode() == KeyEvent.VK_LEFT)
isMoved = true;
else if (e.getKeyCode() == KeyEvent.VK_RIGHT)
isMoved = true;
else if (e.getKeyCode() == KeyEvent.VK_UP)
isMoved = true;
else if (e.getKeyCode() == KeyEvent.VK_DOWN)
isMoved = true;
else if (e.getKeyCode() == KeyEvent.VK_PAGE_UP)
isMoved = true;
else if (e.getKeyCode() == KeyEvent.VK_PAGE_DOWN)
isMoved = true;
if (isMoved) {
WidgetSelection selection = new WidgetSelection(root);
Component child = selection.get(0);
WidgetAdapter childAdapter = WidgetAdapter.getWidgetAdapter(child);
CompositeAdapter parentAdapter = (CompositeAdapter) childAdapter.getParentAdapter();
IUndoableOperation operation = parentAdapter.doKeyPressed(e);
if (operation != null) {
IOperationHistory operationHistory = PlatformUI.getWorkbench().getOperationSupport().getOperationHistory();
operation.addContext(getUndoContext());
try {
operationHistory.execute(operation, null, null);
} catch (ExecutionException ex) {
VisualSwingPlugin.getLogger().error(ex);
}
}
}
}
}
public void keyReleased(KeyEvent e) {
}
public void keyTyped(KeyEvent e) {
}
public boolean isDirty() {
if (root == null)
return false;
WidgetAdapter rootAdapter = WidgetAdapter.getWidgetAdapter(root);
return rootAdapter.isDirty() || rootAdapter.isRenamed();
}
public void fireDirty() {
editor.fireDirty();
}
public void clearDirty() {
if (root != null) {
WidgetAdapter rootAdapter = WidgetAdapter.getWidgetAdapter(root);
rootAdapter.clearDirty();
fireDirty();
}
}
public void setLnfChanged(boolean b) {
lnfChanged = b;
if (lnfChanged)
fireDirty();
}
public boolean isLnfChanged() {
return lnfChanged;
}
public void setFocus() {
glass.setFocus();
}
public CompositeAdapter getFocusedContainer() {
if (root == null)
return null;
List<Component> selected = new WidgetSelection(root);
if (selected.isEmpty())
return null;
if (selected.size() == 1) {
WidgetAdapter adapter = WidgetAdapter.getWidgetAdapter(selected.get(0));
if (adapter.isRoot())
return (CompositeAdapter) adapter;
else if (adapter instanceof CompositeAdapter)
return (CompositeAdapter) adapter;
else
return adapter.getParentAdapter();
}
WidgetAdapter parent = null;
for (Component comp : selected) {
WidgetAdapter compAdapter = WidgetAdapter.getWidgetAdapter(comp);
if (parent == null) {
if (compAdapter.isRoot())
return null;
parent = compAdapter.getParentAdapter();
} else if (parent != compAdapter.getParentAdapter()) {
return null;
}
}
if (parent == null)
return null;
else if (parent instanceof CompositeAdapter)
return (CompositeAdapter) parent;
else
return parent.getParentAdapter();
}
public CompositeAdapter getSelectedContainer() {
if (root == null)
return null;
List<Component> selected = new WidgetSelection(root);
if (selected.isEmpty())
return null;
if (selected.size() == 1) {
WidgetAdapter adapter = WidgetAdapter.getWidgetAdapter(selected.get(0));
if (adapter.getParentAdapter() != null)
return adapter.getParentAdapter();
else
return (CompositeAdapter) adapter;
}
WidgetAdapter parent = null;
for (Component comp : selected) {
WidgetAdapter compAdapter = WidgetAdapter.getWidgetAdapter(comp);
if (parent == null) {
if (compAdapter.isRoot())
return null;
parent = compAdapter.getParentAdapter();
} else if (parent != compAdapter.getParentAdapter()) {
return null;
}
}
if (parent == null)
return null;
else if (parent instanceof CompositeAdapter)
return (CompositeAdapter) parent;
else
return parent.getParentAdapter();
}
public List<InvisibleAdapter> getInvisibles() {
if (root == null)
return null;
else {
return WidgetAdapter.getWidgetAdapter(root).getInvisibles();
}
}
public ICompilationUnit getCompilationUnit() {
return unit;
}
public void setCompilationUnit(ICompilationUnit unit) {
this.unit = unit;
}
public void initNamespaceWithUnit(ICompilationUnit unit) {
setCompilationUnit(unit);
WidgetAdapter rootAdapter = WidgetAdapter.getWidgetAdapter(root);
VSNamespaceManager vsname = new VSNamespaceManager(rootAdapter);
try {
IType[] types = unit.getAllTypes();
for (IType type : types) {
IField[] fields = type.getFields();
for (IField field : fields) {
vsname.addName(field.getElementName());
}
}
} catch (Exception e) {
VisualSwingPlugin.getLogger().error(e);
}
this.namespace = vsname;
}
public void setCursorType(int type) {
glass.setCursorType(type);
}
public void setError(Exception e) {
banner.setIcon(null);
banner.setError(true);
banner.setText(e.getMessage());
}
private List<WidgetAdapter> selectedWidget;
public void setSelectedWidget(List<WidgetAdapter> adapters) {
if (adapters == null) {
selectedWidget = null;
} else {
selectedWidget = new ArrayList<WidgetAdapter>();
for (WidgetAdapter adapter : adapters) {
selectedWidget.add(adapter);
}
}
}
public List<WidgetAdapter> getSelectedWidget() {
return selectedWidget;
}
public void clearToolSelection() {
editor.clearToolSelection();
}
public void showTooltipText(String string) {
this.glass.setToolTipText(string);
}
}