📄 virtualfilesystemview.java
字号:
/*******************************************************************************
* Copyright (c) 2007 Siemens AG
*
* 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:
* Kai T鰀ter - initial API and implementation
*******************************************************************************/
package com.siemens.ct.mp3m.ui.views.physical;
import java.io.File;
import org.eclipse.core.runtime.IAdapterFactory;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.ILazyTreeContentProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
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.widgets.Composite;
import org.eclipse.ui.model.WorkbenchLabelProvider;
import org.eclipse.ui.part.ViewPart;
import org.eclipse.ui.progress.UIJob;
import com.siemens.ct.mp3m.model.physical.Mp3Directory;
import com.siemens.ct.mp3m.model.physical.Mp3File;
import com.siemens.ct.mp3m.ui.views.AdapterFactory;
import com.siemens.ct.mp3m.ui.views.EditorFactory;
import com.siemens.ct.mp3m.ui.views.PathEditorInput;
import com.siemens.ct.mp3m.utilities.LogUtil;
public class VirtualFileSystemView extends ViewPart {
public static final String ID = "com.siemens.ct.mp3m.ui.views.physical.VirtualFileSystemView";
private TreeViewer treeViewer;
private IAdapterFactory adapterFactory = new AdapterFactory();
public VirtualFileSystemView() {
super();
}
public void createPartControl(Composite parent) {
treeViewer = new TreeViewer(parent, SWT.VIRTUAL);
getSite().setSelectionProvider(treeViewer);
Platform.getAdapterManager().registerAdapters(adapterFactory, Mp3File.class);
treeViewer.setLabelProvider(new WorkbenchLabelProvider());
treeViewer.setContentProvider(new TreeContentProvider(treeViewer));
treeViewer.setUseHashlookup(true);
Mp3Directory root = new Mp3Directory("root");
File[] roots = File.listRoots();
for (File fileRoot : roots) {
Mp3Directory mp3Root = new Mp3Directory(fileRoot.getAbsolutePath());
mp3Root.setFullPath(fileRoot.getAbsolutePath());
root.addMp3File(mp3Root);
}
treeViewer.setInput(root);
treeViewer.setChildCount(root, roots.length);
Mp3DoubleclickListener listener = new Mp3DoubleclickListener();
treeViewer.addDoubleClickListener(listener);
}
public void dispose() {
Platform.getAdapterManager().unregisterAdapters(adapterFactory);
super.dispose();
}
public void setFocus() {
treeViewer.getControl().setFocus();
}
class Mp3DoubleclickListener implements IDoubleClickListener {
public void doubleClick(DoubleClickEvent event) {
IStructuredSelection selection = (IStructuredSelection) event.getSelection();
Mp3File source = ((Mp3File) selection.getFirstElement());
final String fullPath = source.getFullPath();
if (fullPath != null) {
PathEditorInput pathEditorInput = new PathEditorInput(fullPath);
String editorId = EditorFactory.getDefaultMp3EditorId();
try {
getViewSite().getWorkbenchWindow().getActivePage().openEditor(pathEditorInput,
editorId);
} catch (Exception e) {
LogUtil.logError("com.siemens.ct.mp3m.ui.views.physical",
"cannot open editor with id: " + editorId);
}
}
}
}
class TreeLabelProvider extends LabelProvider {
@Override
public String getText(Object element) {
System.out.println("TreeLabelProvider.getText()");
return ((Mp3File) element).getName();
}
}
class TreeContentProvider implements ILazyTreeContentProvider {
class PrefetchModelJob extends Job {
private Mp3Directory mp3Dir;
private Mp3Directory parent;
int index;
int count;
private UIJob uiJob = new UIJob("Update UI") {
@Override
public IStatus runInUIThread(IProgressMonitor monitor) {
if(treeViewer.getControl().isDisposed())
return Status.CANCEL_STATUS;
// System.out.println("PrefetchModelUIJob: start: " + parent + ":" + index);
treeViewer.replace(parent, index, mp3Dir);
treeViewer.setChildCount(mp3Dir, count);
// System.out.println("PrefetchModelUIJob: end: " + parent + ":" + index);
return Status.OK_STATUS;
}
};
public PrefetchModelJob(String name, Mp3Directory parent, int index, Mp3Directory mp3Dir) {
super(name);
this.parent = parent;
this.mp3Dir = mp3Dir;
this.index = index;
}
public IStatus run(IProgressMonitor monitor) {
if(treeViewer.getControl().isDisposed())
return Status.CANCEL_STATUS;
// System.out.println("PrefetchModelJob.run(): START: " + parent + ":" + index);
count = prefetchModel(mp3Dir);
// Simulate long running operation
/*
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
*/
uiJob.schedule();
// System.out.println("PrefetchModelJob.run(): END: "+ parent + ":" + index);
return Status.OK_STATUS;
}
};
private final TreeViewer treeViewer;
public TreeContentProvider(TreeViewer treeViewer) {
this.treeViewer = treeViewer;
}
public void updateChildCount(Object element, int currentChildCount) {
}
public int prefetchModel(Mp3Directory mp3Dir) {
File dir = new File(mp3Dir.getFullPath());
File[] files = dir.listFiles();
int count = 0;
if (files != null) {
for (File file : files) {
if (file.isDirectory() || file.getName().endsWith(".mp3")) {
count += 1;
Mp3File entry;
if (file.isDirectory()) {
entry = new Mp3Directory(file.getName());
} else {
entry = new Mp3File(file.getName());
}
entry.setFullPath(file.getAbsolutePath());
mp3Dir.addMp3File(entry);
}
}
}
mp3Dir.setContentsInitialized(true);
return count;
}
public void updateElement(Object parent, int index) {
Mp3Directory parentDir = (Mp3Directory) parent;
Mp3File mp3File = parentDir.getMp3Files()[index];
int count = 0;
if (mp3File instanceof Mp3Directory) {
// count = prefetchModel((Mp3Directory) mp3File);
PrefetchModelJob job = new PrefetchModelJob("Update Model",parentDir, index, (Mp3Directory) mp3File);
job.schedule();
}
treeViewer.replace(parent, index, mp3File);
treeViewer.setChildCount(mp3File, count);
}
public void dispose() {
}
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
treeViewer.getTree().setItemCount(0);
}
public Object getParent(Object element) {
return null;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -