Hallo,
ich habe eine RCP Applikation.
In dieser benutze ich einen eigenen Editor. In diesem Editor stelle ich in einer 10 x 10 Matrix 100 Composites dar. Jedes Composite hat ein Label mit einem Bild. Zudem repäsentiert jedes Composite ein Object aus meinem Model.
Dafür habe ich eine Klasse geschriben, die Composite erbt. Als Interface habe ich ISelectionProvider angegeben. Bei einem Mausklick auf ein Bild führe ich folgendes aus:
Ein sample Object wird hier der Auswahl übergeben.
In setSelection wird
ausgeführt.
Hier die Klasse.
In meinem Editor hate ich einen Listener angemeldet :
entry ist dabei ein Composite. Es gibt also genau 100 listener, für jedes Composite einen.
Soweit funktioniert auch alles. Im Event wird als selection das sample Objekt mitgeliefert.
Jetzt ist es ja so, dass z.B. bei einem TableViewer mittels der Methode
der Viewer zu einem Auswahlbereitsteler wird.
Eclipse kann dann , z.B. in seinen Actions global auf solch ein Event zugreifen und Aktionen ausführen.
Klicke ich beispielsweise in einem TableViewer einen Eintrag an, der ebenfalls ein sample Objekt repräsentiert, so wird die SampleAction durch diesen Code in der Sample Action sichtbar.:
Wobei die Aktion in der Toolbar "liegt" und in ApplicationActionBarAdvisor deklariert wurde.
ZUrück zu meinen 100 Composites
Bei einem Mausklick auf ein Bild, werden zwar alle Events geworfen und abgehört, inklusieve werde die richtigen Objekte in den events verschickt. Nur leider wird die selectionChanged() Methode der Action nicht angesprungen.
Ich vermute, dass man Eclipse irgentwie mitteilen muss, dass eine Auswahl getroffen wurde. Nur wie?
zur Erstellung eines Compoiste entry führt leider zu Fehlern.
weiß das jemend was ich machen muss?
Danke & Gruß
Ps: sorry für den Roman
ich habe eine RCP Applikation.
In dieser benutze ich einen eigenen Editor. In diesem Editor stelle ich in einer 10 x 10 Matrix 100 Composites dar. Jedes Composite hat ein Label mit einem Bild. Zudem repäsentiert jedes Composite ein Object aus meinem Model.
Dafür habe ich eine Klasse geschriben, die Composite erbt. Als Interface habe ich ISelectionProvider angegeben. Bei einem Mausklick auf ein Bild führe ich folgendes aus:
Code:
public void mouseDown(MouseEvent e) {
selection = new StructuredSelection(sample);
setSelection(selection);
}
In setSelection wird
Code:
firePostSelectionChanged(new SelectionChangedEvent(this, selection));
Hier die Klasse.
Code:
protected void firePostSelectionChanged(final SelectionChangedEvent event) {
Object[] listeners = postSelectionChangedListeners.getListeners();
for (int i = 0; i < listeners.length; ++i) {
final ISelectionChangedListener l = (ISelectionChangedListener) listeners[i];
SafeRunnable.run(new SafeRunnable() {
public void run() {
l.selectionChanged(event);
}
});
}
}
In meinem Editor hate ich einen Listener angemeldet :
Code:
entry.addPostSelectionChangedListener(new ISelectionChangedListener(){
public void selectionChanged(SelectionChangedEvent event) {
// ???
}
});
entry ist dabei ein Composite. Es gibt also genau 100 listener, für jedes Composite einen.
Soweit funktioniert auch alles. Im Event wird als selection das sample Objekt mitgeliefert.
Jetzt ist es ja so, dass z.B. bei einem TableViewer mittels der Methode
Code:
getSite().setSelectionProvider(tableViewer);
Eclipse kann dann , z.B. in seinen Actions global auf solch ein Event zugreifen und Aktionen ausführen.
Klicke ich beispielsweise in einem TableViewer einen Eintrag an, der ebenfalls ein sample Objekt repräsentiert, so wird die SampleAction durch diesen Code in der Sample Action sichtbar.:
Code:
public void selectionChanged(IWorkbenchPart part, ISelection incoming) {
if (incoming instanceof IStructuredSelection) {
selection = (IStructuredSelection) incoming;
setEnabled(selection.getFirstElement() instanceof Sample);
} else {
setEnabled(false);
}
}
Wobei die Aktion in der Toolbar "liegt" und in ApplicationActionBarAdvisor deklariert wurde.
ZUrück zu meinen 100 Composites
Bei einem Mausklick auf ein Bild, werden zwar alle Events geworfen und abgehört, inklusieve werde die richtigen Objekte in den events verschickt. Nur leider wird die selectionChanged() Methode der Action nicht angesprungen.
Ich vermute, dass man Eclipse irgentwie mitteilen muss, dass eine Auswahl getroffen wurde. Nur wie?
Code:
getSite().setSelectionProvider(entry);
weiß das jemend was ich machen muss?
Danke & Gruß
Ps: sorry für den Roman