# Werte an Views übergeben



## tech84 (20. Jan 2010)

Hi,

ich habe 3 Views

- eine View mit einem Tree (Projektverwaltung)
- eine View mit einem Diagramm
- eine View mit einer Tabelle

Im Handler von den Views (Diagramm,Tabelle) hole ich mir die aktuelle Auswahl im Baum, um die Datei anzuzeigen:


```
ISelection selection = view.getSite().getSelectionProvider().getSelection();
...
dataFile = dataIO.getMainDir() + "/" + data.getProject().getName() + "/" + data.getfileName();
```

anschließend übergebe ich die Datei bzw. den Pfad an einen Controller um die Daten für die view bereitzustellen. Nun hätte ich diesbzgl. ein paar Fragen:



1.) Kann ich irgendwie 
	
	
	
	





```
data.getfileName()
```
 vom handler an die jeweils öffnende View übergeben s.d. ich als Titel der View den Namen der aktuellen Datei setzen kann?

2.) Ist es möglich mehrere mehrere "Chart/Tabellen"-Views gleichzeitig zu öffnen? (Jeweils gefüllt mit den Inhalten der jeweiligen Dateien)



Wäre super wenn mir da jemand helfen könne, ich weiß absolut nicht wie ich das anstellen soll..:autsch:

gruß,


tech


----------



## Koringar (21. Jan 2010)

Hi,

1. Das geht bei View standard mäßig nicht, aber ich habe bei jeder View eine eigene View implementiert die das macht. Musste eben selber auch machen.
Den Titel der View kannste innerhalb der View selbst mit 'setPartName' ändern.

2. Klar geht das, dafür muss die View selber aber auch als Multiple makiert sein. Und dann kannste du Sie mehrmals öffnen.


----------



## Gast2 (21. Jan 2010)

Es gibt übrigens als Trenner File.seperator oder sowas...


----------



## tech84 (21. Jan 2010)

Hi,

also das mit _AllowMultiple="true"_ habe ich schon versucht, bringt aber leider garnix :-( Ich habe mal einen Testhandler und eine View gebastelt - bei der das ganze ebenfalls nicht funktioniert, vielleicht könnt ihr mir ja sagen wo der Fehler liegt..


View:

```
...

public class testview extends ViewPart{
	public static final String ID = "de.fh.testview";

	private Text text;
	private VisuController cr = new VisuController();

	
	public testview() {
	}

	@Override
	public void createPartControl(Composite parent) {
		parent.setLayout(new FillLayout(SWT.VERTICAL));
		
		Label lblFirstvalue = new Label(parent, SWT.NONE);
		lblFirstvalue.setText("FirstValue");
		
		text = new Text(parent, SWT.BORDER);
		text.setText(String.valueOf(cr.getMinValue(0)));

	}

	@Override
	public void setFocus() {
		
	}

}
```

Handler:



```
public class testViewHandler extends AbstractHandler{

	@Override
	public Object execute(ExecutionEvent event) throws ExecutionException {
	
		VisuController  cr = new VisuController();
		DataIO dataIO = new DataIO();		
		String dataFile = null;		
		
		IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindowChecked(event);		
		IWorkbenchPage page = window.getActivePage();
		View view = (View) page.findView(View.ID);		
		ISelection selection = view.getSite().getSelectionProvider().getSelection();	

		
		if (selection != null && selection instanceof IStructuredSelection) {
			IStructuredSelection sel = (IStructuredSelection) selection;

			Iterator<Data> iterator = sel.iterator();

			Data data = iterator.next();
			dataFile = dataIO.getMainDir() + "/" + data.getProject().getName()
					+ "/" + data.getfileName();

			try {

				view.getViewer().refresh();
			} catch (Exception e) {
				System.out.println("Error: " + e);
			}
		}

		cr.fileImport(dataFile);
		try {
			window.getActivePage().showView("de.fh.testview");

		} catch (PartInitException e) {
			e.printStackTrace();
		}		
		
		return null;
	}
}
```

und hier ein auszug aus der Plugin.xml


```
<view
            allowMultiple="true"
            class="de.fh.app"
            id="de.fh.testview"
            name="testview"
            restorable="true">
      </view>
```


Könnt ihr mir vielleicht sagen weshalb das mit dem Anzeigen mehrer views nicht geht? Das mit dem " ich habe bei jeder View eine eigene View implementiert" verstehe ich auch nicht genau, wie ist das gemeint? in einer View ne View implementiert? :autsch:


Danke schonmal für die Hilfe..

gruß,tech


----------



## Koringar (21. Jan 2010)

Eigentlich ist es ziemlich einfach, bei 'showView' gibt es zwei Methode. Die eine ist für normale Views und die andere für MultipleViews

```
//Normales öffnen einer View
window.getActivePage().showView("de.fh.testview");

//Öffnen einer Multiple View
window.getActivePage().showView("de.fh.testview", "secondId", IWorkbenchPage.VIEW_ACTIVATE);
//Da bei Eclipse jede View trotzdem einzigartig sein muss, wird einfach eine SecondId mit angehangen 
//und macht das auch Einzigartig, obwohl es eine MultipleView ist. Dort kannste vergeben was du denkst 
//das es Sinnvoll ist. Der dritte Parameter gibt an, wie die View geöffnet werden soll, in dem fall wird sie 
//nach dem öffnen sofort auch aktiviert (also ausgewählt).
```

Das zweite meine ich so, das du in deiner View eine Mehtode implementierst z.b. 'setInput(String pPfad)' (wie bei einem Editor) oder sowas und darüber dann denn Inhalt setzt.


----------



## tech84 (21. Jan 2010)

Hey, vielen Dank erstmal für die Hilfe! Habe die View exakt mit dem Befehl geöffnet und AllowMultiple ist an - aber es passiert nix, der zeigt weiterhin nur max 1x die View an. Muss ich der View eigentlich irgendwo sagen, dass sie´ne secondaryId hat? Wie läuft das denn dann bei mehr als 2 Views?? oder ist diese secondaryID nur "formsache"?


----------



## tech84 (21. Jan 2010)

es funktioniert 


```
window.getActivePage().showView("de.fh.testview", Integer.toString(instanceNum++), IWorkbenchPage.VIEW_ACTIVATE);
```


----------



## Koringar (22. Jan 2010)

Ah haste es selber rausgefunden.

Wie gesagt in Eclipse ist es so das jede View einzigartig sein muss!!! Damit man aber mehere Views des selben Typs öffnen kann wird die SecondId übergeben und die normale ID + die Second Id müssen eben auch einzigartig sein, sonst wird immer wieder die selbe View geöffnet.


----------

