Eclipse RCP - undo programmatisch überschreiben

DarkWizzard

Mitglied
Hallo!

Ich hab mal wieder ein kleines Problem mit Eclipse.

Ich lege Commands programmatisch an. Das klappt gut wenn ich einen komplett neuen Befehl mache und bei manchen die schon so drin sind, wie z.B. beim Kopieren-Befehl:

Code:
ICommandService cmdService = (ICommandService) getSite().getService(ICommandService.class);
IHandlerService handlerService = (IHandlerService)getSite().getService(IHandlerService.class);

Command cmd = cmdService.getCommand("org.eclipse.ui.edit.copy");
if (!cmd.isDefined()) {
  Categorie cat = cmdService.getCategory("newCommands");
  if (!cat.isDefined()) {
    cat.define("newCommands", "own created commands");
  }
  cmd.define("Kopieren", "Kopieren", cat);
} else {
  IHandler handler = new AbstractHandler() {
    @Override
    public Object execute(ExecutionEvent event) throws ExecutionException {
      foo();
      return null;
    }
  };
  handlerService.activateHandler("org.eclipse.ui.edit.copy", handler);
}

Das klappt. Wenn ich das aber für den Undo-Befehl machen will klappt das anscheinend nicht, auf jeden Fall ist der immer ausgegraut. Hat jemand ne Idee?

Code:
ICommandService cmdService = (ICommandService) getSite().getService(ICommandService.class);
IHandlerService handlerService = (IHandlerService)getSite().getService(IHandlerService.class);

Command cmd = cmdService.getCommand("org.eclipse.ui.edit.undo");
if (!cmd.isDefined()) {
  Categorie cat = cmdService.getCategory("newCommands");
  if (!cat.isDefined()) {
    cat.define("newCommands", "own created commands");
  }
  cmd.define("Undo", "Undo", cat);
} else {
  IHandler handler = new AbstractHandler() {
    @Override
    public Object execute(ExecutionEvent event) throws ExecutionException {
      foo();
      return null;
    }
  };
  handlerService.activateHandler("org.eclipse.ui.edit.undo", handler);
}

Schonmal vielen Dank im vorraus!



PS.: Ich verweise noch einmal auf mein anderes Problem was vermutlich noch etwas vertrickter ist und bei dem anscheinend keiner ne Idee hat: Eclipse - programmatisches Anlegen von Menüeinträgen vor Pluginstart
 
Hallo,

ich hab jetzt an wenigen verschiedenen Stellen (findet man ja nicht viel zu) was davon gelesen dass ich dem Undo-Command einen UndoContext zuweisen muss. Entweder den Globalen oder ich schreib mir nen eigenen.

Jetzt passt das aber leider nicht so ganz zu dem, was ich machen soll.
Ich schreibe quasi einen Editor-Container, oder Wrapper, indem ich meine eigentlichen Editoren einbette. Diese sollen nämlich nach Möglichkeit gar nichts mit Eclipse zu tun haben, damit sie bei Bedarf auch leicht auf andere Plattformen, wie zum Beispiel Netbeans, portiert werden können und möglichst nicht oder nur wenig verändert werden müssen wenn sich was bei der Eclipse-Plattform ändert.

Und da hab ich natürlich eigene Klassen für Operationen die ich dann nur über Wrapper an Eclipse dran flansche. Das gilt auch für die Undo- und Redo-Operationen und die Befehls-History. Deswegen passt mir das mit dem UndoContext nicht.

Kann man da vllt. einen Fake-UndoContext machen der einfach den Undo-Befehl aktiviert bzw. deaktiviert je nachdem wie ichs grad brauche, aber meinen Handler ausführt?

Grüße,
DarkWizzard
 
Zurück