Programatische Erweiterung des Menues eines

Status
Nicht offen für weitere Antworten.

reinsle

Mitglied
Hallo Forum,

wie im vorherigen Post baue ich an einer Anwendung, die eine Verbindung zu einer Datenbank aufbauen kann. Jetzt möchte ich gerne optional mehrere Verbindungen anbieten. Vom UI her habe ich mir das so gedacht, das ich für den Connect-Command eine Pull-Down-Componente verwende. Hier kann ich ja ein Menue definieren. Gibt es eine Möglichkeit, dieses Menue per Code zu erweitern? Ich würde gerne die verfügbaren Connections, die über eine Preference-Page konfiguriert werden, über das Drop-Down anbieten, dann kann der User eine Connection wählen, und mit dieser dann arbeiten. Dazu sollen dann bei einer aktiven Verbindung die anderen Einträge disables sein. Ist sowas machbar?

Vielen Dank

Robert
 
Hy SirWayne,

ich kenne das Tutorial, aber da ist nur der Weg über die Plugin.xml drinne (Ausser ich hab was überlesen *gg*).

Über die plugin.xml gehts bei mir nicht, da die Datenbankverbindungen nicht von vorneherein feststehen, diese sind über einen Preference-Dialog konfiguriert. Da komm ich imo noch per Programm hin.

Robert
 
Hier mal ein Beispiel
Java:
public class ApplicationActionBarAdvisor extends ActionBarAdvisor {

    private IWorkbenchAction saveAction;

    public ApplicationActionBarAdvisor(IActionBarConfigurer configurer) {
        super(configurer);
    }

    protected void makeActions(IWorkbenchWindow window){
      saveAction = ActionFactory.SAVE.create(window);
      register(saveAction);
    }

    protected void fillMenuBar(IMenuManager menuBar) {

      final MenuManager fileMenu = new MenuManager("&File", IWorkbenchActionConstants.M_FILE);
fileMenu .add(saveActions);
    }

    protected void fillCoolBar(ICoolBarManager coolBar) {

      IToolBarManager toolbar1 = new ToolBarManager(SWT.FLAT | SWT.RIGHT);

    }
 
Hy SirWayne,

vielleicht stelle ich mich jetzt gerade besonders blöde an, aber wenn ich in ein Menue eingreifen will, dann brauch ich doch die Referenz auf das Top-Menue.

Beispiel:

Java:
	protected void fillMenuBar(IMenuManager menuBar) {
		MenuManager fileMenu = new MenuManager("&File",
				IWorkbenchActionConstants.M_FILE);
		menuBar.add(fileMenu);
	}

hier wird als Beispiel das File-Menu dem Haupt-Menue hinzugefügt. Dazu habe ich aber zugriff auf das Hauptmenue. Den habe ich aber in meinem Beispiel / Problem nicht. Bzw. um es richtiger zu sagen, ich meine ihn nicht zu haben, oder hab ihn noch ned gefunden 🙂

Robert
 
he was??? Versteh ich nicht...
Du hast den menumanager und da kannst du deine untermenus adden...
Was genau ist dein Problem?
 
Hy,

hab ichs doch geschafft dich zu verwirren 😀

Also ich hab einen Handler definiert. Dazu über die Plugin.xml ein Command. Dieses Command bau ich jetzt in meine Toolbar ein:

[XML]
<extension
point="org.eclipse.ui.menus">
<menuContribution
locationURI="toolbar😱rg.eclipse.ui.main.toolbar?after=additions">
<toolbar
id="...connection">
<command
commandId="...command.ConnectionCommand"
icon="icons/remdisc.gif"
label="Connect"
style="pulldown"
tooltip="Aufbau der Datenbankverbindung">
</command>
</toolbar>
</menuContribution>
</extension>
[/XML]

Zusätzlich hab ich das Menue definiert:

[XML]
<menuContribution
locationURI="menu:...command.ConnectionCommand">
<command
commandId="...command.PreferencesCommand"
icon="icons/db16x16.gif"
style="push">
</command>
</menuContribution>
[/XML]

Das ist jetzt das Menue, wenn ich auf den Pull-Down am Button klicke, aufgeht.
Und genau dieses Menue würde ich jetzt gerne erweitern. Allerdings wie gesagt aus dem Programmcode heraus. Weil die Actionen, die ich hier brauche abhängig von den definierten Connections sind, die ich über eine Preference-Page hab.

Robert
 
Irgendwie reden wir aneinander vorbei...
Du hast einen DropDown Button in deiner Toolbar und willst nun das contextMenü erstellen?
 
Jap 😀

und was ich im Moment (noch) nicht kapiere, wie ich das menue, das ich per plugin.xml erstellt habe, im Java-Code erweitern kann.

Robert
 
Hy zusammen,

also es geht doch *ggg*

Manchmal hilft Augen auf beim Eierkauf.

Was mich stutzig gemacht hat, das man beim Menue eine class-Angabe hat. Dort habe ich mal weitergeforscht.

rnvs4fs9.png


Die Java-Klasse:

Java:
	public void createContributionItems(IServiceLocator serviceLocator,
			IContributionRoot additions) {
		try {
			ConnectionDescriptorList list = ConnectionPreferencePage.readConnectionsFromStore(ConnectionActivator.getDefault().getPreferenceStore());
			for (int i = 0; i < list.getConnections().size(); i++) {
				ConnectionDescriptor desc = list.getConnections().get(i);
				CommandContributionItemParameter p = new CommandContributionItemParameter(serviceLocator, "", "de.on_ergy.sova.connection.command.ActiveConnectionCommand", SWT.PUSH);
				p.label = desc.getName();
				if (desc.getName().equals(list.getActiveName())) {
					p.icon = ConnectionActivator.imageDescriptorFromPlugin(ConnectionActivator.PLUGIN_ID, ConnectionImageRegistry.ICON_AKTIV);
				}
				CommandContributionItem item = new CommandContributionItem(p);
				item.setVisible(!ConnectionActivator.isConnected());
				additions.addContributionItem(item, null);
				
			}
		} catch (Exception e) {
			LOG.error(e.getMessage(), e);
			Status status = new Status(IStatus.ERROR, ConnectionActivator.PLUGIN_ID, e.getMessage(), e);
			ErrorDialog ed = new ErrorDialog(Display.getDefault().getActiveShell(), "Fehler", "Fehler beim auslesen der Connections", status, IStatus.ERROR);
			ed.open();
		}
		CommandContributionItemParameter p = new CommandContributionItemParameter(serviceLocator, "", "de.on_ergy.sova.connection.command.PreferencesCommand", SWT.PUSH);
		p.icon = ConnectionActivator.imageDescriptorFromPlugin(ConnectionActivator.PLUGIN_ID, ConnectionImageRegistry.ICON_DB);
		CommandContributionItem item = new CommandContributionItem(p);
		additions.addContributionItem(item, null);
	}

und damit geht auch das dynamische erweitern des Push-Down Menues.

Robert
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben