Context-afhankelijke plugins

Tot dusverre hebben we aangenomen dat alle plugins altijd nuttig zijn, en allemaal geplaatst in het hoofdmenu. Echter, sommige plugins hebben alleen betekenis (of geven iets extra's), in een bepaalde context. Bijvoorbeeld een plugin die de inhoud van een R X11 graphics-apparaat exporteert, heeft duidelijk alleen nut wanneer die geplaatst wordt in het menu van een X11-apparaat, en niet in de hoofdmenubalk. Ook moet zo'n plugin het nummer kennen van het apparaat waarvoor het zou moeten werken, zonder ernaar te moeten vragen.

We noemen zulke plugins context-afhankelijk. In overeenstemming daarmee worden zij in het .pluginmap-bestand niet (of niet alleen) geplaatst in de hoofd <hiërarchie>, maar eerder in een <context>-element. Tot nu toe worden slechts twee soorten contexts ondersteund (later meer hierover): X11 en het importeren van bestanden. We zullen dit nog bespreken. Zelfs als u alleen belangstelling heeft voor de context voor importeren, moet u ook even kijken naar die voor X11, aangezien die iets bewerkelijker is.

Context voor X11-apparaat

Om een plugin in de context van een X11-apparaat te gebruiken - dit betekent het plaatsen ervan in de menubalk van het venster dat u ziet na het in de console aanroepen van x11(), moet u het eerst als gebruikelijk declareren in het .pluginmap-bestand:

<document [...]>
        <components>
                [...]
                <component id="mijn_x11_plugin" file="mijn_x11_plugin.xml" label="Een X11 context-plugin"/>
                [...]
        </components>
                

Echter, u hoeft die niet te definiëren in de hiërarchie (het kan wel, indien die ook nuttig is als top-level plugin):

<hierarchy>
                [...]
        </hierarchy>
                

In plaats daarvan, voeg een definitie toe van de "x11"-context, en voeg het toe aan de menu's daar:

<context id="x11">
                [...]
                <menu id="bewerken">
                        [...]
                        <entry id="mijn_x11_plugin"/>
                </menu>
        </context>
</document>
                

In de logische sectie van de plugin xml, kunt u nu twee <externe> eigenschappen declareren: devnum en context. context (indien gedeclareerd) wordt ingesteld op "x11" als de plugin in deze context wordt geactiveerd. devnum wordt ingesteld op het nummer van het graphics-apparaat waarin het moet werken. En dat is alles.

Context voor importeren van gegevens

Voordat u deze sectie leest, is het handig eerst de sectie te lezen over de context voor X11-apparaat, omdat hierin de grondbeginselen staan.

De context "import" wordt gebruikt voor het declareren van filter plugins voor import-bestanden . U plaatst die gewoon in een context met id="import" in het .pluginmap-bestand. Maar er is nog een probleempje bij het declareren van deze plugins: om een algemene selectiedialoog voor alle ondersteunde bestandstypen aan te bieden, moet u nog een beetje extra informatie declareren over uw component:

<document [...]>
        <components>
                [...]
                <component id="mijn_xyz_import_plugin" file="mijn_xyz_import_plugin.xml" label="Importeren XYZ-bestanden">
                        <attribute id="format" value="*.xyz *.zyx" label="XYZ-gegevensbestanden"/>
                </component>
                [...]
        </components>
        <hierarchy>
                [...]
        </hierarchy>
        <context id="importeren">
                [...]
                <menu id="importeren">
                        [...]
                        <entry id="mijn_xyz_import_plugin"/>
                </menu>
        </context>
        [...]
</document>
                

In de attribuutregel staat eenvoudig, dat bijbehorende extensies voor bestandsnamen *.xyz of *.zyx zijn, en de filterdialoog moet de naam XYZ-gegevensbestanden hebben in de dialoog voor het filteren van bestanden.

U kunt twee <externe> eigenschappen declareren in uw plugin. bestandnaam wordt ingesteld op de geselecteerdebestandnaam, en context wordt ingesteld op "importeren".