Ett kommando är deklarationen av en användaråtgärd per id. Kommandon används till att deklarera semantiska åtgärder så att de åtgärdsimplementationer som definieras i åtgärdsuppsättningar kan koppla ihop sig med ett visst semantiskt kommando. Separationen av kommandot från åtgärdsimplementationen gör det möjligt för flera insticksprogram att definiera åtgärder som implementerar samma semantiska kommando. Kommandot är vad som blid kopplat till en viss tangentbindning.
Arbetsmiljön definierar många vanliga kommandon i sin plugin.xml-fil och insticksprogram uppmuntras koppla sina egna åtgärder till dessa kommandon där det är vettigt. På det här sättet kan semantiskt likartade åtgärder som implementeras i olika insticksprogram dela samma tangentbindning.
Kommandon definieras med utökningspunkten . Följande kommer från arbetsmiljökoden:
<extension point="org.eclipse.ui.commands"> ... <command name="%command.save.name" description="%command.save.description" categoryId="org.eclipse.ui.category.file" id="org.eclipse.ui.file.save"> </command> ...
Kommandodefinitionen anger namn, beskrivning och id för åtgärden. Den anger också idt för kommandot, som används till att gruppera kommandon i dialogrutan Inställningar. Kategorierna definieras också i utökningspunkten org.eclipse.ui.commands:
... <category name="%category.file.name" description="%category.file.description" id="org.eclipse.ui.category.file"> </category> ...
Lägg märke till att det inte finns någon implementation angiven för ett kommando. Ett kommando blir bara konkret när ett insticksprogram kopplar dess åtgärd till kommando-idt.
Åtgärder kan kopplas till ett kommando i programkod eller i plugin.xml-filen för åtgärdsuppsättningar. Ditt val beror på var åtgärden definieras.
Om du skapar förekomster av åtgärder i programkod kan de även kopplas till en åtgärd med protokollet IAction. Detta görs vanligen när åtgärden skapas. SaveAction använder denna teknik när den initierar sig själv.
public SaveAction(IWorkbenchWindow window) { ... setText... setToolTipText... setImageDescriptor... setActionDefinitionId("org.eclipse.ui.file.save"); }
(Obs! Metodnamnet setActionDefinitionID skulle mer lämpligt kunna kallas för setCommandID. Metodnamnet återspeglar den ursprungliga implementationen av tangentbindningar och använder förlegad terminologi.)
Genom att anropa setActionDefinitionID kopplas implementationsåtgärden (SaveAction) till det kommando-id som användes i kommandodefinitionskoden. Det är en bra vana att definiera konstanter för dina åtgärdsdefinitioner så att det blir enkelt att hänvisa till dem i programkod.
Om du definierar en åtgärd i en åtgärdsuppsättning behöver du oftast inte skapa en förekomst av en åtgärd själv. Arbetsmiljön gör det åt dig när användaren anropar åtgärden från en meny eller tangentbordet. I det här fallet kan du koppla åtgärden till ett kommando-ID i XML-koden. Nedan visas en hypotetisk kod för en åtgärdsuppsättning:
<extension point = "org.eclipse.ui.actionSets"> <actionSet id="com.example.actions.actionSet" label="Example Actions" visible="true"> <action id="com.example.actions.action1" menubarPath="additions" label="Example Save Action" class="org.example.actions.ExampleActionDelegate" definitionID="org.eclipse.ui.file.save"> </action> ... </actionSet> </extension>
Attributet definitionID används till att deklarera ett kommando-ID för åtgärden.
Genom att använda en annan teknik och koppla åtgärden till ett kommando-ID ser du till att alla tangentbindningar som definieras för kommandot org.eclipse.ui.file.save anropar din åtgärd när det behövs.
Låt oss nu ta en titt på hur de tangentbindningarna definieras.