Додатки, які залежать від контексту

Досі ми припускали, що усі додатки є самодостатніми і усі додатки створюють власний пункт у меню. Втім, деякі додатки працюють лише (або і) у певному контексті. Наприклад, додаток для експортування вмісту графічного пристрою X11 R, очевидно, корисний, коли його пункт розташовано у меню пристрою X11, а не у основному меню вікна програми. Крім того, такому додатку доведеться передавати номер пристрою, з яким йому доведеться працювати, без додаткового отримання від користувача даних щодо цього.

Такі додатки ми будемо називати контекстно-залежними. Відповідно, у файлі .pluginmap їх не буде розташовано у основному елементі <hierarchy> (або буде розташовано не лише там). Вони розташовуватимуться у елементі <context>. У поточній версії передбачено лише два різних контексти (додаткові контексти буде додано у майбутніх версіях): x11 та імпортування файлів. Послідовно розгляньмо кожен з контекстів. Навіть якщо вам цікавий лише контекст імпортування, будь ласка, прочитайте й розділ щодо контексту x11, оскільки він є трохи докладнішим.

Контекст пристрою X11

Щоб використати додаток у контексті пристрою x11, тобто додати його пункт у меню вікна, яке ви отримуєте після виклику x11() у консолі, спочатку оголосимо його у звичайний спосіб у файлі .pluginmap:

<document [...]>
        <components>
                [...]
                <component id="my_x11_plugin" file="my_x11_plugin.xml" label="An X11 context plugin"/>
                [...]
        </components>
                

Втім, вам не потрібно визначати його у ієрархії (ви можете, якщо він працюватиме і як додаток верхнього рівня):

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

Замість цього, додайте визначення контексту «x11» і додайте пункт у меню так:

<context id="x11">
                [...]
                <menu id="edit">
                        [...]
                        <entry id="my_x11_plugin"/>
                </menu>
        </context>
</document>
                

У розділі логіки файла xml додатка ви можете тепер оголосити дві властивості <external>: devnum і context. Для властивості context (якщо її оголошено) буде встановлено значення "x11", якщо додаток викликано у відповідному контексті. Для властивості devnum буде встановлено значення номера графічного пристрою, з якими слід працювати. Ось і все.

Контекст імпортування даних

Перш ніж читати цей розділ, будь ласка, прочитайте розділ щодо контексту пристрою X11, оскільки там наведено пояснення базових понять.

Контекст "import" використовується для оголошення додатків фільтрування файлів. Ви просто додаєте оголошення з контекстом та id="import" до файла .pluginmap. Втім, у оголошеннях таких додатків є одна особливість: для забезпечення однорідності вигляду діалогового вікна вибору файлів для усіх підтримуваних типів файлів, вам слід оголосити ось що для вашого компонента:

<document [...]>
        <components>
                [...]
                <component id="my_xyz_import_plugin" file="my_xyz_import_plugin.xml" label="Import XYZ files">
                        <attribute id="format" value="*.xyz *.zyx" label="XYZ data files"/>
                </component>
                [...]
        </components>
        <hierarchy>
                [...]
        </hierarchy>
        <context id="import">
                [...]
                <menu id="import">
                        [...]
                        <entry id="my_xyz_import_plugin"/>
                </menu>
        </context>
        [...]
</document>
                

Рядок атрибута просто повідомляє, що пов’язаними суфіксами назв для файлів XYZ є *.xyz або *.zyx, і що фільтр слід називати у діалоговому вікні вибору файлів «XYZ data files».

У вашому додатку ви можете оголосити дві властивості <external>. filename буде встановлено у значення файла з вказаною назвою, а context буде встановлено у значення "import".