# Menü einer RCP Anwendung anpassen



## KlaDi (21. Dezember 2006)

Hallo, 

ich versuche eine RCP Anwendungs zu schreiben und bin gerade dabei mal meine Menüleiste zu erstellen. Das klappt auch soweit ganz gut: 


```
public class ApplicationActionBarAdvisor extends ActionBarAdvisor { 

   // Actions - important to allocate these only in makeActions, and then use 
   // them 
   // in the fill methods. This ensures that the actions aren't recreated 
   // when fillActionBars is called with FILL_PROXY. 
   private IWorkbenchAction exitAction; 
   private IWorkbenchAction saveAction; 
   private IWorkbenchAction save_asAction; 
   private IWorkbenchAction printAction; 
   private IWorkbenchAction helpAction; 
   private IWorkbenchAction aboutAction; 
    
   public ApplicationActionBarAdvisor(IActionBarConfigurer configurer) { 
      super(configurer); 
   } 

   protected void makeActions(final IWorkbenchWindow window) { 
      // Creates the actions and registers them. 
      // Registering is needed to ensure that key bindings work. 
      // The corresponding commands keybindings are defined in the plugin.xml 
      // file. 
      // Registering also provides automatic disposal of the actions when 
      // the window is closed. 

      //Dateimenü 
      exitAction = ActionFactory.QUIT.create(window); 
      register(exitAction); 
      saveAction = ActionFactory.SAVE.create(window); 
      register(saveAction); 
      save_asAction = ActionFactory.SAVE_AS.create(window); 
      register(save_asAction); 
      printAction = ActionFactory.PRINT.create(window); 
      register(printAction); 
       
      //Hilfemenü 
      helpAction = ActionFactory.HELP_CONTENTS.create(window); 
      register(helpAction); 
      aboutAction = ActionFactory.ABOUT.create(window); 
      register(aboutAction); 
       
   } 

   protected void fillMenuBar(IMenuManager menuBar) { 
      //Dateimenü 
      MenuManager fileMenu = new MenuManager("&Datei", 
            IWorkbenchActionConstants.M_FILE); 
       
      menuBar.add(fileMenu); 
      fileMenu.add(saveAction); 
      fileMenu.add(save_asAction); 
      fileMenu.add(new Separator()); 
      fileMenu.add(printAction); 
      fileMenu.add(new Separator()); 
      fileMenu.add(exitAction); 
       
      menuBar.add(administratorMenu); 
//      administratorMenu.add(); 
       
      //Hilfemenü 
      MenuManager helpMenu = new MenuManager("&Hilfe", IWorkbenchActionConstants.M_HELP); 
      menuBar.add(helpMenu); 
      helpMenu.add(helpAction); 
      helpMenu.add(new Separator()); 
      helpMenu.add(aboutAction); 
       
   } 


}
```

Nun möchte ich aber fürs Speichern und Speichern als eigene Funktion verwenden. Wie kann ich das bewerkstelligen? Kann ich die bereitgestellten Funktion irgendwie überschreiben oder muss ich mir die Menüpunkte irgendwie selbst zusammenbasteln?

Gruß KlaDi.


----------



## Thomas Darimont (21. Dezember 2006)

Hallo,

entweder leitest du von org.eclipse.ui.internal.SaveAction ab und überschreibst die run() Methode
(Was IMHO keine gute Idee ist, weil man sich dadurch von internal API abhängig macht)
Oder du leitest von org.eclipse.jface.action.Action ab und implementierst die entsprechenden Methoden (run, etc.)
selbst.

Im XXX extends ActionBarAdvisor erzeugst du dann unter makeActions(...) einfach deine eigene SaveAction, speicherst
sie in einem Instanz Member und registrierst diese via register(...).
Anschließend fügst du die Action an den entsprechenden Stellen via fillMenuBar(...) und fillCoolBar(...)
ein, ganz einfach.

Gruß Tom


----------



## KlaDi (22. Dezember 2006)

Hallo Tom,

vielen Dank erstmal für Deine Hilfe!
Also ich würde gerne dann mit org.eclipse.jface.action.Action arbeiten. Aber irgendwie happerts bei mir an der Ausführung.
Ich mal ApplicationActionBarAdvisor extends ActionBarAdvisor so angepasst:


```
import org.eclipse.jface.action.Action;
import meineRcp.Actions

public class ApplicationActionBarAdvisor extends ActionBarAdvisor {

	// Actions - important to allocate these only in makeActions, and then use
	// them
	// in the fill methods. This ensures that the actions aren't recreated
	// when fillActionBars is called with FILL_PROXY.
	private IWorkbenchAction exitAction;
	private IWorkbenchAction helpAction;
	private IWorkbenchAction aboutAction;
	private Action saveAction;
                }
	protected void makeActions(final IWorkbenchWindow window) {
		// Creates the actions and registers them.
		// Registering is needed to ensure that key bindings work.
		// The corresponding commands keybindings are defined in the plugin.xml
		// file.
		// Registering also provides automatic disposal of the actions when
		// the window is closed.

		//Dateimenü
		exitAction = ActionFactory.QUIT.create(window);
		register(exitAction);

		saveAction = new saveAction();
		register(saveAction);
                }
	protected void fillMenuBar(IMenuManager menuBar) {
		//Dateimenü
		MenuManager fileMenu = new MenuManager("&Datei",
				IWorkbenchActionConstants.M_FILE);
		menuBar.add(fileMenu);

		fileMenu.add(saveAction);
		fileMenu.add(exitAction);
		
		//Adminstrationsmenü
		MenuManager administratorMenu = new MenuManager("&Administration");
		menuBar.add(administratorMenu);
//		administratorMenu.add();
		
		//Hilfemenü
		MenuManager helpMenu = new MenuManager("&Hilfe", IWorkbenchActionConstants.M_HELP);
		menuBar.add(helpMenu);
		helpMenu.add(helpAction);
		helpMenu.add(new Separator());
		helpMenu.add(aboutAction);
		
	}
}
```

Dazu noch die Datei:

```
package meineRcp.Actions;

import org.eclipse.jface.action.Action;

public class saveAction extends Action {

}
```
Aber wie ich die jetzt füllen soll ist mir noch schleierhaft, ich hab auch schon bei Google gesucht und in einigen meiner Bücher, aber irgendwie nichts dazu gefunden, was mir weiterhilft. Es soll erstmal nur ein einfacher FileDialog zum speichern geöffnet werden. Außerdem läßt sich so, wie sie jetzt ist meine RCP-Anwendung nicht mehr starten.

Gruß KlaDi.


----------

