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
 

reinsle

Mitglied
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
 
G

Gast2

Gast
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);

    }
 

reinsle

Mitglied
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
 
G

Gast2

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

reinsle

Mitglied
Hy,

hab ichs doch geschafft dich zu verwirren :D

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:eek: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
 
G

Gast2

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

reinsle

Mitglied
Jap :D

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
 

reinsle

Mitglied
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.

Ähnliche Java Themen


Oben