Java tutorial
/* * Copyright (c) 2010-2012 Research In Motion Limited. All rights reserved. * * This program and the accompanying materials are made available * under the terms of the Eclipse Public License, Version 1.0, * which accompanies this distribution and is available at * * http://www.eclipse.org/legal/epl-v10.html * */ package net.rim.ejde.internal.ui.editors.model; import net.rim.ejde.internal.core.ContextManager; import net.rim.ejde.internal.core.IConstants; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.jface.viewers.ILabelProviderListener; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.TreePath; import org.eclipse.jface.viewers.TreeSelection; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableItem; import org.eclipse.swt.widgets.Text; import org.eclipse.swt.widgets.Tree; import org.eclipse.swt.widgets.TreeItem; import org.eclipse.ui.forms.SectionPart; import org.eclipse.ui.views.contentoutline.ContentOutlinePage; /** * The outline view page for the editor. Please note, some of this code was created for demo purposes only and does not reflect * the final implementation. Some areas of this code should be changed and coded better once implementation of the outline view * officially begins. Also note that the outline view prototype is currently disabled and to re-enable it, please uncomment the * appropriate code in getAdapter() method. * * @author jkeshavarzi * */ public class BlackBerryProjectOutlinePage extends ContentOutlinePage implements ISelectionChangedListener { BlackBerryProjectFormEditor _editor; public BlackBerryProjectOutlinePage(BlackBerryProjectFormEditor editor) { this._editor = editor; } @Override public void createControl(Composite parent) { super.createControl(parent); TreeViewer contentOutlineViewer = getTreeViewer(); contentOutlineViewer.addSelectionChangedListener(this); contentOutlineViewer.setContentProvider(new ContentProvider()); contentOutlineViewer.setLabelProvider(new LabelProvider()); contentOutlineViewer.setInput(_editor.getPages()); } @Override public void selectionChanged(SelectionChangedEvent event) { super.selectionChanged(event); Object source = event.getSource(); BlackBerryProjectPropertiesPage page = null; Control control = null; if (source instanceof TreeViewer) { TreeViewer v = (TreeViewer) source; TreeSelection t = (TreeSelection) v.getSelection(); Object obj = t.getFirstElement(); if (obj instanceof BlackBerryProjectPropertiesPage) { page = (BlackBerryProjectPropertiesPage) obj; } else { page = (BlackBerryProjectPropertiesPage) t.getPaths()[0].getFirstSegment(); } if (_editor.getActivePage() != page.getIndex()) { _editor.setActivePage(page.getIndex()); } if (obj instanceof Control) { control = (Control) obj; control.setFocus(); if (control instanceof Text) { Text text = (Text) control; text.selectAll(); } } else if (obj instanceof TableItem) { // Table table = (Table) t.getPaths()[ 0 ].getParentPath().getLastSegment(); TreePath path = t.getPaths()[0]; Object parentObject = path.getSegment(path.getSegmentCount() - 2); if (parentObject instanceof Table) { Table table = (Table) parentObject; table.select(BlackBerryProjectPropertiesPage .getItemIndex(table, v.getTree().getSelection()[0].getText()).intValue()); } } } } public void updateTreeSelection(Control control) { TreeViewer viewer = getTreeViewer(); Tree tree = viewer.getTree(); TreeItem item = null; if (tree.getSelection() == null) { return; } if (control instanceof Table) { Table table = (Table) control; TableItem selections[] = table.getSelection(); if (selections.length > 0) { item = getTableItem(tree, selections[0].getText(2)); } } else { item = getControlItem(tree, control.getData(BlackBerryProjectPropertiesPage.CONTROL_TITLE_KEY).toString()); } if (item != null) { TreeItem selectedItem[] = tree.getSelection(); if ((selectedItem.length > 0) && selectedItem[0].equals(item)) { return; } tree.deselectAll(); tree.select(item); } } public void updateTreeSelection(BlackBerryProjectPropertiesPage page) { TreeViewer viewer = getTreeViewer(); Tree tree = viewer.getTree(); TreeItem item = getPageItem(tree, page.getTitle()); if (item != null) { TreeItem selectedItem[] = tree.getSelection(); if ((selectedItem.length > 0) && selectedItem[0].equals(item)) { return; } tree.deselectAll(); tree.select(item); } } private TreeItem getControlItem(Tree tree, String text) { // TODO Change this demo prototype code. Find a better way to get a control item. for (TreeItem item : tree.getItems()[0].getItems()) { if (item.getText().equals(text)) { return item; } } return null; } private TreeItem getTableItem(Tree tree, String text) { // TODO Change this demo prototype code. Find a better way to get a table item. for (TreeItem item : tree.getItems()[0].getItems()[4].getItems()) { if (item.getText().equals(text)) { return item; } } return null; } private TreeItem getPageItem(Tree tree, String text) { // TODO Change this demo prototype code. Find a better way to get a page item. for (TreeItem item : tree.getItems()) { if (item.getText().equals(text)) { return item; } } return null; } private class LabelProvider implements ILabelProvider { Image image = null; @Override public Image getImage(Object element) { if (element instanceof BlackBerryProjectPropertiesPage) { ImageDescriptor desc = ContextManager.getImageDescriptor("icons/obj16/page_obj.gif"); //$NON-NLS-1$ image = desc.createImage(); return image; } if (element instanceof TableItem) { TableItem item = (TableItem) element; return item.getImage(1); } return null; } @Override public String getText(Object element) { if (element instanceof BlackBerryProjectPropertiesPage) { return ((BlackBerryProjectPropertiesPage) element).getTitle(); } else if (element instanceof SectionPart) { return ((SectionPart) element).getSection().getText(); } else if (element instanceof Control) { Object text = ((Control) element).getData(BlackBerryProjectPropertiesPage.CONTROL_TITLE_KEY); return text == null ? IConstants.EMPTY_STRING : text.toString(); } else if (element instanceof TableItem) { TableItem item = ((TableItem) element); Object obj = item.getParent().getData(BlackBerryProjectPropertiesPage.TABLE_TEXT_INDEX_KEY); if ((obj != null) && (obj instanceof Integer)) { return item.getText(((Integer) obj).intValue()); } } return null; } @Override public void addListener(ILabelProviderListener listener) { // Do Nothing } @Override public void dispose() { // Do Nothing } @Override public boolean isLabelProperty(Object element, String property) { return false; } @Override public void removeListener(ILabelProviderListener listener) { // Do Nothing } } private class ContentProvider implements ITreeContentProvider { @Override public Object[] getChildren(Object parentElement) { if (parentElement instanceof BlackBerryProjectPropertiesPage) { return ((BlackBerryProjectPropertiesPage) parentElement).getSections(); } else if (parentElement instanceof AbstractSection) { return ((AbstractSection) parentElement).getOutlineControls(); } else if (parentElement instanceof Table) { return ((Table) parentElement).getItems(); } return null; } @Override public Object getParent(Object element) { return null; } @Override public boolean hasChildren(Object element) { if ((element instanceof BlackBerryProjectPropertiesPage) || (element instanceof SectionPart) || (element instanceof Table)) { return true; } return false; } @Override public Object[] getElements(Object inputElement) { if (inputElement instanceof BlackBerryProjectPropertiesPage[]) { return (BlackBerryProjectPropertiesPage[]) inputElement; } else if (inputElement instanceof TableItem[]) { return (TableItem[]) inputElement; } return new Object[] {}; } @Override public void dispose() { // Do Nothing } @Override public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { // Do Nothing } } }