RCP und Listerner für Views

CoTech

Grünschnabel
Hallo zusammen,

bin jetzt seit 2 Tagen am Suchen und bin leider nicht fündig geworden.

Mein Problem ist folgendes.
1. Ich habe eine Perspektive.
2. Ich habe 2 Views die in dieser Perspektive dargestellt werden.

Soweit noch alles einfach.

Ich will jetzt folgende Funktion realisieren.
Bei der 1. View ist ein TreeViewer, welches beim Klick auf ein Element im Tree die 2. View aktualisieren soll.

Dafür sind jetzt Listener (SelectionListener) vorgesehen.
Ich kann auch meinen TreeViewer einer SelectionListener hinzufügen.

Das Problem ist nur, dass ich im Listener selber nicht die 2. View kenne und somit auch nicht auf die View aktualisieren kann.

Folgenden Code habe ich:
Perspektive.java
Code:
public class Perspective implements IPerspectiveFactory {

	public void createInitialLayout(IPageLayout layout) {
		String editorArea = layout.getEditorArea();
		layout.setEditorAreaVisible(false);
		layout.setFixed(true);
		
//		layout.addStandaloneView(BusinessProcessTreeView.ID,  false, IPageLayout.LEFT, 1.0f, editorArea);
		layout.addView(BusinessProcessTreeView.ID, IPageLayout.LEFT, 0.25f, editorArea);
		layout.addView(PropertytableView.ID, IPageLayout.RIGHT, 0.75f, editorArea);
		
	}

}

BusinessProcessTreeView.java
Code:
	public void createPartControl(Composite parent) {
		viewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
		drillDownAdapter = new DrillDownAdapter(viewer);
		viewer.setContentProvider(new ViewContentProvider());
		viewer.setLabelProvider(new ViewLabelProvider());
		viewer.setInput(getViewSite());
		viewer.addSelectionChangedListener(new ISelectionChangedListener() {
			   public void selectionChanged(SelectionChangedEvent event) {
			       // if the selection is empty clear the label
				   System.out.println("Hallo das geht ja");
			   }
			});
	}

So sieht nun mein Code aus.

Ich hoffe da kann mir jemand weiterhelfen.
Es muss doch irgendwie konfigurierbar sein?

Gruß und Danke
CoTech
 
Danke für die Hilfe, es war genaud as was ich gesucht habe.

Hab da jezt ein anderes Problem.

Wenn ich ein JFace Dialog (InputDialog) in der RUN Methode der einer Action starte, wie kann ich dann am elegantesten den Rückgabewert zurück geben und meiner View weiter reichen.

Nach dem die View den Wert erhalten hat, sollen alle anderne View auf die Änderung reagieren.

Zur Zeit sieht es so aus.

Das ist die Action
Code:
	public NewBusinessProcessAction(IWorkbenchWindow window, String label, String viewId) {
		this.window = window;
		this.viewId = viewId;
        setText(label);
	}
	
	public void run() {
		//Call Input Dialog
		InputDialog inputDialog = new InputDialog(window.getShell(), "Erzeuge einen neuen Geschäftsvorfall", "", null, null);
		int result = inputDialog.open();
		if (result == Window.OK){
			BusinessProcess bp = BusinessProcessGenerator.generateBusinessProcess(inputDialog.getValue());
			try {
				BusinessProcessTreeView bpView = (BusinessProcessTreeView)window.getActivePage().showView(viewId);
				bpView.setNewBusienssProcessData(bp);
			} catch (PartInitException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

DIe ist die Methode bei der View
Code:
	public void setNewBusienssProcessData(BusinessProcess newBusinessProcess){
		viewer.setInput(newBusinessProcess);
	}

Das klappt auch aber die anderen View (PropertyView und TextView) sollten eigentlich gelöscht sein und keinen Daten anzeigen, da alles jezt neu ist.

Gibt es da passende Listener ?

Gruß und Danke
CoTech
 
Zurück