/*******************************************************************************
* Copyright (c) 2010 Martin Schnabel <mb0@mb0.org>.
* 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
******************************************************************************/
package org.axdt.swc.ui;
import java.util.ArrayList;
import org.axdt.core.ui.img.AxdtImageHelper;
import org.axdt.core.ui.img.AxdtImages;
import org.axdt.swc.ui.model.SwcContainer;
import org.axdt.swc.ui.model.SwcEntry;
import org.axdt.swc.ui.model.SwcInfo;
import org.axdt.swc.ui.model.SwcModel;
import org.axdt.swc.ui.model.SwcModelObject;
import org.axdt.swc.ui.model.SwcPackage;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorRegistry;
import org.eclipse.ui.IEditorSite;
import org.eclipse.ui.IFileEditorInput;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.part.EditorPart;
public class SwcEditorView extends EditorPart {
@Override
public void doSave(IProgressMonitor monitor) {
}
@Override
public void doSaveAs() {
}
@Override
public void init(IEditorSite site, IEditorInput input)
throws PartInitException {
setSite(site);
setInput(input);
}
@Override
public boolean isDirty() {
return false;
}
@Override
public boolean isSaveAsAllowed() {
return false;
}
@Override
public void createPartControl(Composite parent) {
Composite base = new Composite(parent, SWT.NONE);
base.setLayout(new FillLayout());
TreeViewer treeViewer = new TreeViewer(base);
treeViewer.setLabelProvider(new SwcLabelProvider());
treeViewer.setContentProvider(new SwcContentProvider());
IEditorInput input = getEditorInput();
SwcInfo info = new SwcInfo();
if (input instanceof IFileEditorInput) {
IFileEditorInput fileInput = (IFileEditorInput) input;
info.readFile(fileInput.getFile());
}
treeViewer.setInput(info.getModel());
treeViewer.expandToLevel(3);
}
@Override
public void setFocus() {
}
}
class SwcLabelProvider extends LabelProvider {
IEditorRegistry editorRegistry = PlatformUI.getWorkbench()
.getEditorRegistry();
ISharedImages sharedImages = PlatformUI.getWorkbench().getSharedImages();
AxdtImageHelper imageHelper = AxdtImageHelper.getInstance();
@Override
public String getText(Object element) {
return element.toString();
}
@Override
public Image getImage(Object element) {
if (element instanceof SwcPackage) {
return imageHelper.getImage(AxdtImages.PACKAGE);
} else if (element instanceof SwcContainer) {
if (((SwcContainer) element).getParent() instanceof SwcModel
&& "catalog".equals(element.toString()))
return imageHelper.getImage(AxdtImages.SWC_FILE);
return sharedImages.getImage(ISharedImages.IMG_OBJ_FOLDER);
} else if (element instanceof SwcEntry) {
return editorRegistry.getImageDescriptor(element.toString())
.createImage();
}
return super.getImage(element);
}
}
class SwcContentProvider implements ITreeContentProvider {
public void dispose() {
}
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
}
public Object[] getChildren(Object element) {
ArrayList<Object> list = new ArrayList<Object>();
if (element instanceof SwcContainer) {
SwcContainer o = (SwcContainer) element;
list.addAll(o.getContainers());
list.addAll(o.getEntries());
}
return list.toArray();
}
public Object getParent(Object element) {
if (element instanceof SwcModelObject) {
SwcModelObject o = (SwcModelObject) element;
return o.getParent();
}
return null;
}
public boolean hasChildren(Object element) {
if (element instanceof SwcContainer) {
SwcContainer o = (SwcContainer) element;
return o.hasContainers() || o.hasEntries();
}
return false;
}
public Object[] getElements(Object inputElement) {
return getChildren(inputElement);
}
}