# Eclipse RCP: Kontextsensitive Buttons für Editor und Hilfebutton für Wizard hinzufügen



## Bergtroll (10. Aug 2010)

Hellohello,

also trotz intensiver Suche seit heute morgen finde ich nicht heraus, wie mans macht... Ich habe einen selbstgebauten Editor und sobald der geöffnet ist und den Fokus hat, möchte ich sowohl im Toolbar als auch im Menu ein zugehöriges Command aktivieren, dass es erlaubt, den Inhalt als Bild zu speichern. Wie sage ich dem Eclipse, dass sobald ein VisualizationEditor den Fokus hat, das Command sichtbar und aktiv sein soll? Wie könnte ich das saveAs Command dafür einsetzen?

Außerdem weigert sich mein Wizard, einen Hilfebutton anzuzeigen. Mein letzter Versuch war:
www.macrobug.com Blog Archive  Displaying help in Wizards in Eclipse

Vielen Dank
Bergtroll


----------



## Wildcard (10. Aug 2010)

Du kannst die Sichtbarkeit von Toolbar Buttons über das visibleWhen Element Steuern.
Dort kannst du Property Tester mit logischen Bedingungen verknüpfen. Es gibt bereits jede Menge built-in Property Tester die du verwenden kannst:
Command Core Expressions - Eclipsepedia
In deinem Fall ist wohl activeEditorId das richtige.


----------



## Bergtroll (10. Aug 2010)

Japp, das arbeitet, vielen Dank


----------



## Bergtroll (11. Aug 2010)

Also dieser verfluchte Hilfebutton taucht einfach nicht auf , hier ist, was ich gemacht habe:

Nach :rtfm: habe ich Folgendes konstruiert

Mein Netcdf Constructor ist


```
public NetcdfWizard() {
    this.setHelpAvailable(true);
    System.out.println("isHelpAvailable: "+ this.isHelpAvailable());
}
```
--> Console output sagt: "isHelpAvailable: true" sobald der wizard gestartet ist.

Meine einzige WizardPage enthält die Methode


```
@Override
public void performHelp() {
    PlatformUI.getWorkbench().getHelpSystem().displayHelp("de.jscivision.netcdf.wizardhelp");
}
```

Meine plugin.xml für das Bundle vom Wizard ist

```
<plugin>
   <extension
         point="org.eclipse.ui.newWizards">
      <wizard
            category="de.jscivision.app.visualizationWizards"
            class="de.jscivision.netcdf.wizards.NetcdfWizard"
            icon="icons/netcdf_logo.png"
            id="de.jscivision.netcdf.visualizationWizard"
            name="Netcdf Wizard">
      </wizard>
   </extension>
   <extension
         id="de.jscivision.netcdf.wizardhelp"
         point="org.eclipse.help.contexts">
      <contexts
            file="help/netcdfWizardHelpContent.xml">
      </contexts>
   </extension>
</plugin>
```

Mein "help/netcdfWizardHelpContent.xml" file ist


```
<?xml version="1.0" encoding="UTF-8"?>
<contexts>
      <context  id="wizardhelp">
        <description>Gets help about this wizard</description>
        <topic href="./wizard.html"  label="My wizard help"/>
        <topic href="./toc.html"  label="General help"/>
  </context>
</contexts>
```

Und die HTML files existieren auch, aber dieser verfluchte Button taucht einfach nicht auf ;( :shock: ???:L

Noch hoffnungsvoll,
Bergtroll


----------



## Bergtroll (11. Aug 2010)

Hmmm.... mit der Taste F1 wird die richtige Hilfe angezeigt, der Button fehlt allerdings immer noch... Keiner ne Idee ?


----------



## Bergtroll (11. Aug 2010)

Also ich habe es jetzt irgendwie hinbekommen, aber das ganze verwirrt mich. Hier was ich herausgefunden habe:

1. Solange der Wizard die newWizard Extension benutzt und über diese aufgerufen wird, war es mir überhaupt nicht möglich, das Fragezeichen oder einen Help Button zu sehen, die Kontexthilfe konnte trotzdem mit F1 aufgerufen werden.

2. Ein Aufruf von "setHelpAvailable(true)" im Wizard selbst erzeugt einen Help Button, sofern der Wizard manuell, z.B. aus einem CommandHandler heraus, einem WizardDialog übergeben wird. Allerdings wird keine Hilfe angezeigt, wenn man den Button klickt. Im Gegenteil war es nach dem ersten Klick auch nicht mehr möglich, die Hilfe mit F1 aufzurufen.

3. Es gibt zwei Möglichkeiten, den WizardDialog dazu zu bringen, ein Fragezeichen anzuzeigen. 

a) Die erste Möglichkeit ist die statische Methode WizardDialog.setHelpAvailable(true), die vermutlich dazu führen wird, dass in allen WizardDialogen das Fragezeichen angezeigt wird. Da ich momentan nur einen Wizard fertig habe, kann ich das nicht bestätigen.

b) Die zweite Möglichkeit ist, im Wizard die "setContainer" Methode  wie folgt zu überschreiben:

```
@Override
public void setContainer(IWizardContainer wizardContainer) {
	if (null != wizardContainer && wizardContainer instanceof WizardDialog) {
		WizardDialog dialog = (WizardDialog) wizardContainer;
		dialog.setHelpAvailable(true);
	}
	super.setContainer(wizardContainer);
}
```

4. Mit einem Hilfekontext wird dieses Fragezeichen allerdings nur verknüpft, wenn das Hilfesystem korrekt installiert ist, und auf der jeweiligen WizardPage dem Hilfesystem auch die richtige HelpContext Extensions mitgeteilt wird. Ich habe das auf meiner FileSelectionPage jetzt in der überschriebenen Methode "createControl()" so geregelt:

```
@Override
public void createControl(Composite parent) {
	PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, CONTEXT_ID);
	initGuiElements(parent);
	topComposite.layout();
	setControl(topComposite);
}
```

EDIT:
Die CONTEXT_ID ist eine Kombination aus PluginID und ContextID, in meinem Fall "de.jscivision.app.help.netcdfwizardhelp". Damit ihr auch seht, wie das in den zugehörigen XML Deklarationen aussieht:

In der plugin.xml des bundles de.jscivision.app.help

```
<extension
        point="org.eclipse.help.contexts">
     <contexts
           file="contexts.xml"
            plugin="de.jscivision.app.help">
     </contexts>
</extension>
```

Inhalt des files der contexts.xml im root des bundles de.jscivision.app.help

```
<?xml version="1.0" encoding="UTF-8"?>
<?NLS TYPE="org.eclipse.help.contexts"?>

<contexts>
	<context  id="netcdfwizardhelp">
		<description>This is the sample context-sensitive help. There is a link to the help content below.</description>
		<topic href="html/wizards/netcdf.html"  label="Netcdf Wizard UI Explanation"/>
	</context>
</contexts>
```

Wie man sehen kann, ist die CONTEXT_ID eine Kombination aus den Informationen beider Dateien.

Damit wird die Hilfe bei mir im Wizard angezeigt. Wenn man aber, wie in 2.) ausgeführt, einen Help Button erzeugt und diesen klickt, ist hernach die Kontextsensitive Hilfe per "?" auch gebrochen. Und wie erwähnt, als newWizardExtension läuft garnix davon.

Hoffe, das hilft euch auch mal weiter 

Viele Grüße
Bergtroll


----------

