diff options
author | Tom Schindl | 2014-11-27 08:53:58 +0000 |
---|---|---|
committer | Tom Schindl | 2014-11-27 08:53:58 +0000 |
commit | 40fdd636e4466129907cb6fc3709f5d296159d55 (patch) | |
tree | b47f112cfdb9eb9e0262f50b548d641d235cf47b /experimental | |
parent | 5434fe4a6b210d51747a2aed742c3bf769007d65 (diff) | |
download | org.eclipse.efxclipse-40fdd636e4466129907cb6fc3709f5d296159d55.tar.gz org.eclipse.efxclipse-40fdd636e4466129907cb6fc3709f5d296159d55.tar.xz org.eclipse.efxclipse-40fdd636e4466129907cb6fc3709f5d296159d55.zip |
use different icons
Diffstat (limited to 'experimental')
10 files changed, 137 insertions, 33 deletions
diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.freeedit/META-INF/MANIFEST.MF b/experimental/compensator/org.eclipse.fx.code.compensator.freeedit/META-INF/MANIFEST.MF index 1a336e8c5..150ac916b 100644 --- a/experimental/compensator/org.eclipse.fx.code.compensator.freeedit/META-INF/MANIFEST.MF +++ b/experimental/compensator/org.eclipse.fx.code.compensator.freeedit/META-INF/MANIFEST.MF @@ -47,4 +47,5 @@ Import-Package: javafx.animation;version="2.2.0", javafx.util;version="2.2.0", javafx.util.converter;version="2.2.0", javax.annotation;version="1.2.0", - javax.inject;version="1.0.0" + javax.inject;version="1.0.0", + org.eclipse.fx.ui.controls diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.freeedit/fragment.e4xmi b/experimental/compensator/org.eclipse.fx.code.compensator.freeedit/fragment.e4xmi index 2dcdca609..9132404f4 100644 --- a/experimental/compensator/org.eclipse.fx.code.compensator.freeedit/fragment.e4xmi +++ b/experimental/compensator/org.eclipse.fx.code.compensator.freeedit/fragment.e4xmi @@ -4,11 +4,11 @@ <elements xsi:type="advanced:Perspective" xmi:id="_Zg4MUPNlEeOKm6R57HGa4g" elementId="org.eclipse.fx.code.compensator.freeedit.perspective.0" label="Free edit"> <children xsi:type="basic:PartSashContainer" xmi:id="_ejlRMPNlEeOKm6R57HGa4g" elementId="org.eclipse.fx.code.compensator.freeedit.partsashcontainer.0" horizontal="true"> <children xsi:type="basic:PartStack" xmi:id="_fgaF0PNlEeOKm6R57HGa4g" elementId="org.eclipse.fx.code.compensator.freeedit.partstack.0" containerData="20"> - <children xsi:type="basic:Part" xmi:id="_iX7skPNlEeOKm6R57HGa4g" elementId="org.eclipse.fx.code.compensator.freeedit.part.0" contributionURI="bundleclass://org.eclipse.fx.code.compensator.freeedit/org.eclipse.fx.code.compensator.freeedit.FileList" label="Files" iconURI="platform:/plugin/org.eclipse.fx.code.compensator.freeedit/icons/22/view-list-tree.png"/> + <children xsi:type="basic:Part" xmi:id="_iX7skPNlEeOKm6R57HGa4g" elementId="org.eclipse.fx.code.compensator.freeedit.part.0" contributionURI="bundleclass://org.eclipse.fx.code.compensator.freeedit/org.eclipse.fx.code.compensator.freeedit.FileList" label="Files" iconURI="platform:/plugin/org.eclipse.fx.code.compensator.freeedit/icons/16/view-list-tree.png"/> </children> <children xsi:type="basic:PartStack" xmi:id="_f6c9gPNlEeOKm6R57HGa4g" elementId="org.eclipse.fx.code.compensator.freeedit.partstack.1" containerData="60"/> <children xsi:type="basic:PartStack" xmi:id="_gQ-nIPNlEeOKm6R57HGa4g" elementId="org.eclipse.fx.code.compensator.freeedit.partstack.2" containerData="20"> - <children xsi:type="basic:Part" xmi:id="_tzdUsPNlEeOKm6R57HGa4g" elementId="org.eclipse.fx.code.compensator.freeedit.part.1" contributionURI="bundleclass://org.eclipse.fx.code.compensator.freeedit/org.eclipse.fx.code.compensator.freeedit.FileOutline" label="Outline" iconURI="platform:/plugin/org.eclipse.fx.code.compensator.freeedit/icons/22/code-class.png"/> + <children xsi:type="basic:Part" xmi:id="_tzdUsPNlEeOKm6R57HGa4g" elementId="org.eclipse.fx.code.compensator.freeedit.part.1" contributionURI="bundleclass://org.eclipse.fx.code.compensator.freeedit/org.eclipse.fx.code.compensator.freeedit.FileOutline" label="Outline" iconURI="platform:/plugin/org.eclipse.fx.code.compensator.freeedit/icons/16/view-process-tree.png"/> </children> </children> <variables>activeInput</variables> diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.freeedit/icons/16/application-x-zerosize.png b/experimental/compensator/org.eclipse.fx.code.compensator.freeedit/icons/16/application-x-zerosize.png Binary files differnew file mode 100644 index 000000000..1be2379f3 --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.freeedit/icons/16/application-x-zerosize.png diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.freeedit/icons/16/inode-directory.png b/experimental/compensator/org.eclipse.fx.code.compensator.freeedit/icons/16/inode-directory.png Binary files differnew file mode 100644 index 000000000..536da3d1c --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.freeedit/icons/16/inode-directory.png diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.freeedit/icons/16/view-list-tree.png b/experimental/compensator/org.eclipse.fx.code.compensator.freeedit/icons/16/view-list-tree.png Binary files differnew file mode 100644 index 000000000..488fde6dd --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.freeedit/icons/16/view-list-tree.png diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.freeedit/icons/16/view-process-tree.png b/experimental/compensator/org.eclipse.fx.code.compensator.freeedit/icons/16/view-process-tree.png Binary files differnew file mode 100644 index 000000000..af42132cf --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.freeedit/icons/16/view-process-tree.png diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.freeedit/icons/22/code-class.png b/experimental/compensator/org.eclipse.fx.code.compensator.freeedit/icons/22/code-class.png Binary files differdeleted file mode 100644 index 225aca941..000000000 --- a/experimental/compensator/org.eclipse.fx.code.compensator.freeedit/icons/22/code-class.png +++ /dev/null diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.freeedit/icons/22/view-list-tree.png b/experimental/compensator/org.eclipse.fx.code.compensator.freeedit/icons/22/view-list-tree.png Binary files differdeleted file mode 100644 index b1dde396c..000000000 --- a/experimental/compensator/org.eclipse.fx.code.compensator.freeedit/icons/22/view-list-tree.png +++ /dev/null diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.freeedit/src/org/eclipse/fx/code/compensator/freeedit/FileList.java b/experimental/compensator/org.eclipse.fx.code.compensator.freeedit/src/org/eclipse/fx/code/compensator/freeedit/FileList.java index 005ec2c5b..8e815413e 100644 --- a/experimental/compensator/org.eclipse.fx.code.compensator.freeedit/src/org/eclipse/fx/code/compensator/freeedit/FileList.java +++ b/experimental/compensator/org.eclipse.fx.code.compensator.freeedit/src/org/eclipse/fx/code/compensator/freeedit/FileList.java @@ -10,12 +10,22 @@ *******************************************************************************/ package org.eclipse.fx.code.compensator.freeedit; +import java.io.IOException; +import java.net.URISyntaxException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; import java.util.Collections; +import java.util.List; import javafx.collections.FXCollections; import javafx.collections.ObservableList; -import javafx.scene.control.ListCell; -import javafx.scene.control.ListView; +import javafx.scene.control.TreeCell; +import javafx.scene.control.TreeItem; +import javafx.scene.control.TreeView; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; import javafx.scene.input.MouseEvent; import javafx.scene.layout.BorderPane; @@ -31,34 +41,59 @@ import org.eclipse.e4.core.contexts.IEclipseContext; import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.common.notify.impl.AdapterImpl; import org.eclipse.emf.common.util.URI; +import org.eclipse.fx.code.compensator.editor.services.FileIconLookup; import org.eclipse.fx.code.compensator.model.workbench.File; +import org.eclipse.fx.code.compensator.model.workbench.Folder; import org.eclipse.fx.code.compensator.model.workbench.Resource; import org.eclipse.fx.code.compensator.model.workbench.Workbench; +import org.eclipse.fx.code.compensator.model.workbench.WorkbenchFactory; import org.eclipse.fx.code.compensator.model.workbench.WorkbenchPackage; + @SuppressWarnings("restriction") public class FileList { @Inject private Workbench workbench; - + @Inject private ECommandService commandService; - + @Inject private EHandlerService handlerService; - - private ObservableList<Resource> inputList = FXCollections.observableArrayList(); - private ListView<Resource> view; - + @Inject + private FileIconLookup lookup; + + private ObservableList<TreeItem<Resource>> inputList = FXCollections.observableArrayList(); + + private TreeView<Resource> view; + + private Image fileIcon; + private Image folderIcon; + + @PostConstruct public void initUI(BorderPane parent) { - view = new ListView<>(); - view.setCellFactory(FileList::listCell); + fileIcon = new Image(getClass().getClassLoader().getResource("/icons/16/application-x-zerosize.png").toExternalForm()); + folderIcon = new Image(getClass().getClassLoader().getResource("/icons/16/inode-directory.png").toExternalForm()); + + view = new TreeView<>(); + view.setCellFactory(this::treeCell); + view.setShowRoot(false); + + TreeItem<Resource> t = new TreeItem<>(); for( Resource r : workbench.getResources() ) { - inputList.add(r); + if( r instanceof Folder ) { + FolderTreeItem ti = new FolderTreeItem((Folder)r); + t.getChildren().add(ti); + inputList.add(ti); + } else { + TreeItem<Resource> ti = new TreeItem<>(r); + t.getChildren().add(ti); + inputList.add(ti); + } } - view.setItems(inputList); + view.setRoot(t); view.setOnMouseClicked(this::open); parent.setCenter(view); workbench.eAdapters().add(new AdapterImpl() { @@ -66,32 +101,53 @@ public class FileList { public void notifyChanged(Notification msg) { if( msg.getFeature() == WorkbenchPackage.Literals.WORKBENCH_ELEMENT__RESOURCES ) { if( msg.getEventType() == Notification.ADD ) { - inputList.add((Resource) msg.getNewValue()); + if( msg.getNewValue() instanceof File ) { + TreeItem<Resource> e = new TreeItem<>((Resource) msg.getNewValue()); + t.getChildren().add(e); + inputList.add(e); + } else { + FolderTreeItem e = new FolderTreeItem((Folder) msg.getNewValue()); + t.getChildren().add(e); + inputList.add(e); + } } } } }); } - + private void open(MouseEvent event) { if( event.getClickCount() == 2 ) { Command cmd = commandService.getCommand("org.eclipse.fx.code.compensator.app.command.1"); IEclipseContext staticCtx = EclipseContextFactory.create(); - staticCtx.set(File.class, (File)view.getSelectionModel().getSelectedItem()); - ParameterizedCommand pCmd = ParameterizedCommand.generateCommand(cmd, Collections.emptyMap()); - handlerService.executeHandler(pCmd, staticCtx); - staticCtx.dispose(); + if( view.getSelectionModel().getSelectedItem() != null && view.getSelectionModel().getSelectedItem().getValue() instanceof File ) { + staticCtx.set(File.class, (File)view.getSelectionModel().getSelectedItem().getValue()); + ParameterizedCommand pCmd = ParameterizedCommand.generateCommand(cmd, Collections.emptyMap()); + handlerService.executeHandler(pCmd, staticCtx); + staticCtx.dispose(); + } } } - - private static ListCell<Resource> listCell(ListView<Resource> param) { - return new ListCell<Resource>() { + + private TreeCell<Resource> treeCell(TreeView<Resource> param) { + return new TreeCell<Resource>() { @Override protected void updateItem(Resource item, boolean empty) { if( item != null && ! empty ) { if( item instanceof File ) { URI uri = URI.createURI(((File) item).getUrl()); setText(uri.lastSegment()); + String iconUri = lookup.getFileIcon(uri.toString()); + if( iconUri == null ) { + setGraphic(new ImageView(fileIcon)); + } else { + //TODO We need to cache images by URI + setGraphic(new ImageView(new Image(iconUri))); + } + } else if( item instanceof Folder ) { + URI uri = URI.createURI(((Folder) item).getUrl()); + setText(uri.segment(uri.segmentCount()-2)); + setGraphic(new ImageView(folderIcon)); } } else { setText(null); @@ -101,4 +157,49 @@ public class FileList { } }; } + + static class FolderTreeItem extends TreeItem<Resource> { + private boolean hasLoaded; + + public FolderTreeItem(Folder f) { + super(f); + getChildren().add(new TreeItem<>()); + + expandedProperty().addListener((o) -> { + if( isExpanded() ) { + if( ! this.hasLoaded ) { + loadChildren(); + } + } + }); + } + + private void loadChildren() { + try { + java.net.URI uri = new java.net.URI(((Folder)getValue()).getUrl()); + Path path = Paths.get(uri); + List<TreeItem<Resource>> l = new ArrayList<>(); + Files.newDirectoryStream(path).forEach((p) -> { + if( Files.isDirectory(p) ) { + Folder f = WorkbenchFactory.eINSTANCE.createFolder(); + f.setUrl(p.toUri().toString()); + l.add(new FolderTreeItem(f)); + } else { + File f = WorkbenchFactory.eINSTANCE.createFile(); + f.setUrl(p.toUri().toString()); + l.add(new TreeItem<>(f)); + } + }); + getChildren().setAll(l); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (URISyntaxException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + + } + } }
\ No newline at end of file diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.freeedit/src/org/eclipse/fx/code/compensator/freeedit/FileOutline.java b/experimental/compensator/org.eclipse.fx.code.compensator.freeedit/src/org/eclipse/fx/code/compensator/freeedit/FileOutline.java index 64db57827..3f7ee8b47 100644 --- a/experimental/compensator/org.eclipse.fx.code.compensator.freeedit/src/org/eclipse/fx/code/compensator/freeedit/FileOutline.java +++ b/experimental/compensator/org.eclipse.fx.code.compensator.freeedit/src/org/eclipse/fx/code/compensator/freeedit/FileOutline.java @@ -10,10 +10,12 @@ *******************************************************************************/ package org.eclipse.fx.code.compensator.freeedit; -import java.util.ArrayList; import java.util.Collections; import java.util.List; +import javafx.event.ActionEvent; +import javafx.scene.control.Button; +import javafx.scene.control.Label; import javafx.scene.control.TreeCell; import javafx.scene.control.TreeItem; import javafx.scene.control.TreeView; @@ -26,6 +28,7 @@ import javax.inject.Named; import org.eclipse.e4.core.di.annotations.Optional; import org.eclipse.fx.code.compensator.editor.Outline; import org.eclipse.fx.code.compensator.editor.Outline.OutlineItem; +import org.eclipse.fx.ui.controls.Util; public class FileOutline { private TreeView<OutlineItem> outlineView; @@ -40,19 +43,18 @@ public class FileOutline { TreeCell<OutlineItem> createCell(TreeView<OutlineItem> param) { return new TreeCell<OutlineItem>() { - private List<String> currentStyles = Collections.emptyList(); @Override protected void updateItem(OutlineItem item, boolean empty) { - super.updateItem(item, empty); - getStyleClass().removeAll(currentStyles); + if( item != null && ! empty ) { - setText(item.getLabel()); - currentStyles = item.getStyle(); - getStyleClass().addAll(currentStyles); + Label value = new Label(item.getLabel().toString()); + value.getStyleClass().addAll(item.getStyle()); + setGraphic(value); } else { - currentStyles = Collections.emptyList(); - setText(""); + setGraphic(null); } + + super.updateItem(item, empty); } }; } |