Команды go для контроля над SWT - PullRequest
0 голосов
/ 31 марта 2020

Для Bndtools я создал подкласс PackageExplorerPart и добавил (поразительно полезный) элемент управления Text Search.

Однако, когда элемент управления «Текст» выбран / находится в фокусе, и я вставляю, вставленное содержимое попадает в TreeView и создает проект сниппета, что очень раздражает.

Я отладил код, но могу только найдите, что обработчик команд PASTE всегда идет к TreeView, а не к элементу управления в фокусе. К сожалению, я не могу найти, где это настроено. Я попытался понять документацию, но не смог понять, где искать.

Поэтому в основном мне нужно знать, как убедиться, что мой текстовый компонент всегда является целью обработчика PASTE.

Demo of search field

1 Ответ

1 голос
/ 01 мая 2020

Любая часть рабочей среды в Eclipse получает шанс зарегистрировать глобальные обработчики действий с помощью метода IViewSite или IEditorSite getActionBars(). Если вы создаете подкласс для другой части, вам необходимо убедиться, что после того, как суперкласс зарегистрировал свои обработчики, вы переназначите все свои действия с sh своими собственными обработчиками.

Так что в вашем случае, когда вы хотите перенаправив «вставить» на ваш текстовый элемент управления, вы можете сделать что-то вроде этого:

IActionBars actionBars = getViewSite().getActionBars();

IAction originalPaste = actionBars.getGlobalActionHandler(ActionFactory.PASTE.getId());

actionBars.setGlobalActionHandler(ActionFactory.PASTE.getId(), new Action() {
    @Override
    public void runWithEvent(Event event) {
        Text filterText = filterPart.getFilterControl();
        if (Objects.equals(event.widget, filterText)) {
            filterText.paste();
        } else {
            originalPaste.runWithEvent(event);
        }
    }
});
...