Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Hallo zusammen,
in meinem Editor (erbt von EditorPart) muss ich mehrere Modelle gleichen Typs darstellen. Für diese Modellart existiert bereits ein Editor (erbt auch von der Klasse EditorPart).
Ist es möglich mehrere dieser bereits existierenden Editoren in meinem Editor anzuzeigen? Am besten wäre es, wenn jeder EditorPart auf einer Section angezeigt werden würde.
Es geht mir hier nur darum, ob mein Vorhaben überhaupt möglich ist, da ich beim bisherigen googeln nicht wirklich weiter gekommen bin.
erstmal danke für die Antwort. Ist es denn überhaupt üblich so etwas zu tun, also bereits vorhandene Editoren einzubinden? Oder macht man sowas eigentlich nicht?
Ich hab das nun mal versucht. Es werden zwar keine Fehler ausgegeben, allerdings haben die Sections keinen Inhalt.
Evtl ist ja gleich auf den ersten Blick ein Fehler zu sehen?!
Ich hab das bisher nur bei VE gesehen und dort würde ich auch mal schauen (der Java Editor wird in die Visual Class eingebunden).
Die Error Log zeigt auch keine Fehler an? Was spuckt dir der Debugger über die EditorParts aus?
Liegt SimulationEditor im Quellcode vor, so das du mal nachsehen kannst was da passiert bzw. nicht passiert?
Hallo,
der SimulationEditor liegt im Quellcode vor und ich habe nun auch schon eine ganze Weile debuggt. Es treten keine Fehler auf.
Beim VE hab ich jetzt noch nicht reingeguckt, aber müsste ich nicht noch der Section mitteilen, dass die Instanz vom SimulationEditor der Client der Section ist?
Wenn man einen Viewer auf der Section platziert muss man ja auch Section#setClient(Control control) aufrufen. Etwas in dieser Art müsste ich doch sicher auch für den EditorPart machen oder?
Vielleicht liegt da ja der Fehler, nur habe ich keine Methode gefunden um den EditorPart als Client zu setzen.
Hol dir die Children der Section, dann hast du dein Control...
Es ist übrigens immer besser im Kleinen zu testen, d.h. ohne Section, nur mit Composite.
Hallo,
die Hoffnung den fertigen Editor einbinden zu können habe ich nun aufgegeben. Ich versuche nun meine Models in TreeViewern darzustellen. Dabei sollen die Views unabhängig voneinander auf SelectionEvents reagieren können, d.h. jeder View reagiert/ändert seinen Zustand wenn ein Element aus ihm selbst angeklickt wurde.
Allerdings läuft das noch nicht wie gewünscht :cry:
Code:
public class MyEditor extends EditorPart implements ISelectionListener {
private RunTaskAction runtaskaction;
...
@Override
public void createPartControl(Composite parent) {
FormToolkit toolkit = new FormToolkit(parent.getDisplay());
ScrolledForm form = toolkit.createScrolledForm(parent);
Composite body = form.getBody();
GridLayout gridLayout = new GridLayout();
gridLayout.makeColumnsEqualWidth = false;
gridLayout.numColumns = 3;
body.setLayout(gridLayout);
for (MyModel modelInstance : anotherModel.getList()){
try {
EditPartFactory editpartfactory = new TaskModelSimulationEditPartFactory();
Section section = toolkit.createSection(body, Section.TITLE_BAR | Section.TWISTIE | Section.EXPANDED);
section.setText(tmsInstance.getName());
TreeViewer treeViewer = new TreeViewer();
treeViewer.createControl(section);
DefaultEditDomain editDomain = new DefaultEditDomain(this);
editDomain.addViewer(treeViewer);
treeViewer.setEditPartFactory(editpartfactory);
getSite().setSelectionProvider(treeViewer); //hier muss irgendetwas anderes passieren
treeViewer.setContents(modelInstance.getSimulation().get(0));
section.setClient(treeViewer.getControl());
section.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
editDomain.setActiveTool(new RunTaskTool(runtaskaction));
} catch (PartInitException e) {
e.printStackTrace();
}
}
}
public void selectionChanged(IWorkbenchPart part, ISelection selection) {
if (this.equals(getSite().getPage().getActiveEditor())) {
runtaskaction.update();
}
}
@Override
public void init(IEditorSite site, IEditorInput input) throws PartInitException {
if (!(input instanceof IFileEditorInput)){
throw new PartInitException("Input must be from type IFileEditorInput");
}
simulation = createEnsembleModelSimulation(((IFileEditorInput) input).getFile());
setSite(site);
setInput(input);
updateTitle();
createActions();
getSite().getWorkbenchWindow().getSelectionService().addSelectionListener(this);
}
Hier wird nun der TreeViewer erstellt. Als Tool wird ein RunTaskTool übergeben, welches z.B. auf einen Doppelklick reagiert. Allerdings funktioniert dies nur für den zuletzt erstellten TreeViewer, was auch logisch ist, weil er ja als SelectionProvider angemeldet ist. Alle anderen TreeViewer reagieren nicht auf Events.
Gibt es eine Möglichkeit, das jeder Viewer auf seine eigenen Events reagiert und nicht nur der zuletzt erstellte Viewer? Ich habe bereits überlegt einen eigenen SelectionProvider zu schreiben, der alle TreeViewer verwaltet und dann dem selektierten Viewer die Selection übergibt. Könnte das klappen und wenn ja wie müsste das ungefähr aussehen?
Ich hoffe es ist ungefähr klar geworden, was ich möchte :bahnhof: