blob: d92b680d8ff651ee23ad09d8fb52cc2360622aab [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2011-2015 EclipseSource Muenchen GmbH and others.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Lucas Koehler - initial API and implementation
******************************************************************************/
package org.eclipse.emf.emfstore.fx.internal.projects;
import javax.annotation.PostConstruct;
import javax.inject.Inject;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecp.util.e4.fx.ModelElementOpenerFX;
import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
import org.eclipse.emf.emfstore.client.ESWorkspaceProvider;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.control.Button;
import javafx.scene.control.TreeCell;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeView;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Priority;
import javafx.util.Callback;
public class ProjectsView {
// @Inject
// private ESelectionService selectionService;
ComposedAdapterFactory adapterFactory;
@Inject
public ProjectsView() {
adapterFactory = new ComposedAdapterFactory(
ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
}
@PostConstruct
public void postConstruct(BorderPane parent) {
final TreeView<Object> localProjectsView = new TreeView<>();
final Button btnAddProject = new Button("Add LocalProject"); //$NON-NLS-1$
btnAddProject.setMaxWidth(Double.MAX_VALUE);
final EmfStoreLocalTreeItem projectTreeItem = new EmfStoreLocalTreeItem(
this, ESWorkspaceProvider.INSTANCE.getWorkspace(),
localProjectsView);
btnAddProject.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
ESWorkspaceProvider.INSTANCE.getWorkspace().createLocalProject("test"); //$NON-NLS-1$
// projectTreeItem.updateChildren();
}
});
final HBox box = new HBox();
HBox.setHgrow(btnAddProject, Priority.ALWAYS);
box.getChildren().add(btnAddProject);
localProjectsView.setRoot(projectTreeItem);
localProjectsView.setShowRoot(false);
localProjectsView
.setCellFactory(new Callback<TreeView<Object>, TreeCell<Object>>() {
@Override
public TreeCell<Object> call(TreeView<Object> param) {
return new ESLocalProjectTreeCell(adapterFactory);
}
});
localProjectsView.getSelectionModel().selectedItemProperty()
.addListener(new ChangeListener<TreeItem<Object>>() {
@Override
public void changed(
ObservableValue<? extends TreeItem<Object>> observable,
TreeItem<Object> oldValue, TreeItem<Object> newValue) {
if (newValue != null && EObject.class.isInstance(newValue.getValue())) {
// selectionService.setSelection(newValue.getValue());
ModelElementOpenerFX.openModelElement(newValue.getValue());
}
final TreeItem<Object> selectedItem = localProjectsView
.getSelectionModel().getSelectedItem();
if (selectedItem == null) {
return;
}
}
});
parent.setTop(box);
parent.setCenter(localProjectsView);
}
}