Toolbar Button gegenseitig verriegeln

Status
Nicht offen für weitere Antworten.

Nud3l

Gesperrter Benutzer
Hallo


ich mochte in der Toolbar einen Start und Stop Button einbauen. Nur soll eben der Startbutton nur gedrückt werden wenn das ding noch nicht läuft und umgekehrt der Stopbutton.

Ich habe versucht mit

Java:
selectionChanged(IAction action, ISelection selection)

zuarbeiten aber irgendwie bekomme ich nur Fenster wechsel mit, aber nicht mit wenn ich was in der Toolbar drücke.

Mein nächster Ansatz war dann mit meine observer zuarbeiten den ich wieso brauch um mein ding zu starten nur komme ich nicht an die Action rann.

Zum Schluss habe ich es mit Commands probiert aber ich habe irgendwie voll die Probleme damit bekommen


Java:
public class StopCommand extends AbstractHandler {

  public Object execute(ExecutionEvent event) throws ExecutionException {
    System.out.println("StopCommand -- execute");
    this.setEnabled(true);
    return null;
  }
}[

[XML]
<extension
point="org.eclipse.ui.commands">
<command
defaultHandler="sbh.ocit.mockups.commands.StopCommand"
id="myOcitSimulation.Stoppcommand"
name="Stopp ">
</command>
</extension>
<extension
point="org.eclipse.ui.menus">
<menuContribution
locationURI="toolbar😱rg.eclipse.ui.main.toolbar">
<toolbar
id="myOcitSimulation.toolbar">
<command
commandId="myOcitSimulation.Stoppcommand"
disabledIcon="icons/bundles/114/1/.cp/icons/full/etool16/new_testcase.gif"
icon="icons/eclipse/org.eclipse.ant.ui/icons/full/dlcl16/refresh.gif"
label="Stopp"
style="push">
</command>
</toolbar>
</menuContribution>
</extension>
[/XML]

Irgendwie bekomme ich keine Reaktion wenn ich auf dem Button in der Toolbar drücke.

Bei CommandID kann ich mit Browse meinen Command finden und auswählen aber es läuft trotzdem nicht..

Ich weiß so langsam nicht mehr weiter...
 
Was ist denn "das Ding"? Gibts irgendnen Status, an dem man erkennen kann, ob es läuft oder nicht? Weil wenn ja, dann könntest du nen Listener auf "das Ding" setzen und je nach Status die Buttons aktivieren/deaktivieren.
 
Ja, daran habe ich auch schon gedacht. Nur weiß ich nicht wie ich auf die Button zu greife ist ja ähnlich mit den Ansatz der observer.

In der Action Klasse komme ich nie an den Button ran nur in der Methode
Java:
public void run(IAction action) {
in der Übergebenen IAction schaffe ich es den Button Status zu ändern.
 
Ok das Ding ist eine Simulation ich habe eine boolean Variable isrunning auf der ich eigentlich von überall zu greifen kann.

Das Problem ist ja nicht das ich nicht mit bekomme ob die Simulation läuft oder nicht nur das die tollbar Buttons für mich nicht erreichbar sind.

Hier mein rum probier Klasse

Java:
public class StopSimulatonActionDelegate extends AbstractHandler implements 
                                        IWorkbenchWindowActionDelegate,
                                        Observer  {

  private IWorkbenchWindow window;


  public void dispose() {
  }

  public void init(IWorkbenchWindow window) {
    this.window = window;
    OcitsimulationSingleton.getInstance().addObserver(this);
//    this.setEnabled(false);
//    this.setBaseEnabled(false);
  }

  public void run(IAction action) {


    if (OcitsimulationSingleton.getInstance().isSimulationRunning()) {

      try {
        OcitServerStart.stop();
        OcitsimulationSingleton.getInstance().stopTimer();
      } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
      MessageDialog.openInformation(window.getShell(), "Simulation ", "Simulation wurde gestoppt");
    }
    

  }

  public void update(Observable o, Object arg) {
   
    System.out.println("StopSimulatonActionDelegate -- update"); 
    
    if(OcitsimulationSingleton.getInstance().isSimulationRunning()){
      this.setEnabled(true);
    }else{
    this.setEnabled(false);
  }}

  public Object execute(ExecutionEvent event) throws ExecutionException {
    System.out.println("StopSimulatonActionDelegate -- execute"); 
    return null;
  }

  public void selectionChanged(IAction action, ISelection selection) {
    // TODO Auto-generated method stub
    
  }

}

this.setEnabled(true); klappt nicht
mit action.setEnabled(false); in der run Methode schon.

Vielleicht kann man über this.window.getWorkbench(). irgendwie an den Toolbar Butten kommen aber ich weiß nicht wie..
 
Java:
public void selectionChanged(IAction action, ISelection selection) {
// ...	
}

Probier doch mal ob du mit dieser Methode weiterkommst.
Ich weiß nicht genau auf welche Selektierungen der reagiert, aber wenn der auf alle möglichen Klicks achtet, dann ja wohl auch, sobald du per Klick deine Simulation ausführst. Probier damit mal rum. Kannst ja auch beim Debuggen mal schaun, welche Werte "selection" und "action" haben.
 
Ok das Ding ist eine Simulation ich habe eine boolean Variable isrunning auf der ich eigentlich von überall zu greifen kann.

Das Problem ist ja nicht das ich nicht mit bekomme ob die Simulation läuft oder nicht nur das die tollbar Buttons für mich nicht erreichbar sind.

Hier mein rum probier Klasse

Java:
public class StopSimulatonActionDelegate extends AbstractHandler implements 
                                        IWorkbenchWindowActionDelegate,
                                        Observer  {

  private IWorkbenchWindow window;


  public void dispose() {
  }

  public void init(IWorkbenchWindow window) {
    this.window = window;
    OcitsimulationSingleton.getInstance().addObserver(this);
//    this.setEnabled(false);
//    this.setBaseEnabled(false);
  }

  public void run(IAction action) {


    if (OcitsimulationSingleton.getInstance().isSimulationRunning()) {

      try {
        OcitServerStart.stop();
        OcitsimulationSingleton.getInstance().stopTimer();
      } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
      MessageDialog.openInformation(window.getShell(), "Simulation ", "Simulation wurde gestoppt");
    }
    

  }

  public void update(Observable o, Object arg) {
   
    System.out.println("StopSimulatonActionDelegate -- update"); 
    
    if(OcitsimulationSingleton.getInstance().isSimulationRunning()){
      this.setEnabled(true);
    }else{
    this.setEnabled(false);
  }}

  public Object execute(ExecutionEvent event) throws ExecutionException {
    System.out.println("StopSimulatonActionDelegate -- execute"); 
    return null;
  }

  public void selectionChanged(IAction action, ISelection selection) {
    // TODO Auto-generated method stub
    
  }

}

this.setEnabled(true); klappt nicht
mit action.setEnabled(false); in der run Methode schon.

Vielleicht kann man über this.window.getWorkbench(). irgendwie an den Toolbar Butten kommen aber ich weiß nicht wie..
 
Ich habe es jetzt ganz anders gelöst habe jetzt nur einen button bei dem ich immer alles ändere also vom start zum stop butten und zurück
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben