{"id":64,"date":"2011-06-16T13:08:58","date_gmt":"2011-06-16T11:08:58","guid":{"rendered":"https:\/\/sgaul.de\/?p=64"},"modified":"2012-12-04T22:11:44","modified_gmt":"2012-12-04T21:11:44","slug":"aktivenichtaktive-menueintrage-in-eclipse-erstellen","status":"publish","type":"post","link":"https:\/\/sgaul.de\/2011\/06\/16\/aktivenichtaktive-menueintrage-in-eclipse-erstellen\/","title":{"rendered":"Aktive\/nichtaktive Men\u00fceintr\u00e4ge in Eclipse erstellen"},"content":{"rendered":"

W\u00e4hrend der Entwicklung eines Eclipse-Plugins zur zeitgleichen Bearbeitung von Dokumenten, Real-Time Collaboration for Eclipse<\/a> genannt, hat sich die Erzeugung von Men\u00fceintr\u00e4gen als recht kompliziert erwiesen. Gerade im Vergleich zu anderen GUI-Elementen kam ich hier nur langsam voran.<\/p>\n

Schnell und einfach Men\u00fceintr\u00e4ge f\u00fcr ein Plugin erstellen<\/h2>\n

Der Einstieg ist eigentlich recht simpel. In der Eclipse-Plugin-Manifest-Verwaltung<\/em> muss unter dem Reiter Extensions<\/em> ein neues Actionset erzeugt werden. Hierzu klickt man auf Add,<\/em> dann am bestem im Reiter Extension Wizard <\/em>das „Hello, world“ action set<\/em> w\u00e4hlen, welches bereits ein Beispielmen\u00fc und einen Action-Delegator (IWorkbenchWindowActionDelegate<\/em>) erzeugt. Der Delegator delegiert Aktionen, wenn der Nutzer auf einen entsprechenden Men\u00fceintrag geklickt hat.<\/p>\n

Nach ein bisschen weiterer Arbeit kann das alles so aussehen:<\/p>\n

\"\"<\/a>
Der Plugin-Editor von Eclipse<\/figcaption><\/figure>\n

In der erstellten Delegate-Klasse kann man nun unter der Methode run<\/em> die gew\u00fcnschten Aktionen des Men\u00fceintrags ausf\u00fchren. Man muss auch nicht f\u00fcr jede Kleinigkeit eine neue Klasse erstellen, sondern kann innerhalb einer Run-Methode Fallunterscheidung verwenden:<\/p>\n

if (action.getId().equals(\"de.uni_rostock.rtce.menu.add_shared\")) {\r\n    \/\/ dann das\r\n} else if (...) {\r\n    \/\/ dann so\r\n}<\/pre>\n

Men\u00fceintr\u00e4ge ausgrauen (disable<\/em>) und reaktivieren (enable<\/em>)<\/h2>\n

Aktionen lassen sich aktivieren und deaktivieren. Dies graut automatisch entsprechende Men\u00fceintr\u00e4ge und Icons aus. Jeder Men\u00fceintrag hat seine eigene Action, auf die man immer Zugriff hat, wenn ein anderer Editor oder Eclipse-View in den Fokus kommt. Wenn dies passiert, wird im Aktionsdelegator die Methode selectionChanged<\/em> aufgerufen. Dieses \u00fcbergibt die Aktion als Parameter, welche dann ein- und ausgeschaltet werden kann:<\/p>\n

public void selectionChanged(IAction action, ISelection selection) {\r\n    \/\/ Aktion deaktivieren\r\n    action.setEnabled(false);\r\n    \/\/ Unter einer bestimmten Bedingung aktivieren\r\n    if ([condition]) {\r\n        action.setEnabled(true);\r\n    }\r\n}<\/pre>\n","protected":false},"excerpt":{"rendered":"

W\u00e4hrend der Entwicklung eines Eclipse-Plugins zur zeitgleichen Bearbeitung von Dokumenten, Real-Time Collaboration for Eclipse genannt, hat sich die Erzeugung von Men\u00fceintr\u00e4gen als recht kompliziert erwiesen. Gerade im Vergleich zu anderen GUI-Elementen kam ich hier nur langsam voran. <\/p>\n","protected":false},"author":1,"featured_media":65,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[91],"tags":[5,6],"_links":{"self":[{"href":"https:\/\/sgaul.de\/wp-json\/wp\/v2\/posts\/64"}],"collection":[{"href":"https:\/\/sgaul.de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sgaul.de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sgaul.de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sgaul.de\/wp-json\/wp\/v2\/comments?post=64"}],"version-history":[{"count":20,"href":"https:\/\/sgaul.de\/wp-json\/wp\/v2\/posts\/64\/revisions"}],"predecessor-version":[{"id":1800,"href":"https:\/\/sgaul.de\/wp-json\/wp\/v2\/posts\/64\/revisions\/1800"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sgaul.de\/wp-json\/wp\/v2\/media\/65"}],"wp:attachment":[{"href":"https:\/\/sgaul.de\/wp-json\/wp\/v2\/media?parent=64"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sgaul.de\/wp-json\/wp\/v2\/categories?post=64"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sgaul.de\/wp-json\/wp\/v2\/tags?post=64"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}