Поддержка перетаскивания SWT для текстового виджета - PullRequest
2 голосов
/ 27 мая 2009

Я недавно написал приложение, используя SWT. В одном из его диалоговых окон у меня есть несколько виджетов, одним из которых является Text, который предназначен для поддержки DND с другими виджетами. Сначала я добавил поддержку DND для двух виджетов Tree в одном и том же диалоговом окне (перетаскивая источник и цель перетаскивания). Прежде чем я добавил поддержку DND для этого текстового виджета, я заметил, что на платформе Linux (gtk) текстовый виджет SWT автоматически получает поддержку перетаскивания. То есть я уже могу перетаскивать из других виджетов «Дерево» и перетаскивать этот текст (в любую позицию для вставки туда), а также выделять и перетаскивать любой текст из этого текста в другой виджет «Дерево» или «Текст».

Однако это работает только на платформе Linux, но не на Windows. Эта же программа, если она работает в Windows, не будет иметь никакой поддержки DND для этого текстового виджета (виджеты Tree, конечно, имеют поддержку DND, поскольку я специально для них пишу).

Итак, вот чего я хочу добиться и в Windows:

  1. Перетащите текст в любую позицию в текстовом виджете.
  2. перед падением и во время зависания, может четко видеть положение каретки, где предполагаемое положение опускаться. позиция каретки должна двигаться вместе с курсором мыши.
  3. поддержка многострочных текстовых виджетов

РЕШЕНИЕ:

DropTarget target = new DropTarget(sytledText, DND.DROP_MOVE | DND.DROP_COPY);
target.setTransfer(new Transfer[] { TextTransfer.getInstance() });
target.addDropListener(new StyleTextDropTargetEffect(sytledText));
  1. Использовать StyledText вместо текстового виджета
  2. Используйте StyledTextDropTargetEffect (или расширяйте его) и добавьте его в качестве прослушивателя dr op

1 Ответ

3 голосов
/ 22 июня 2009
  1. &
  2. AFAIK в Windows, вы не можете сделать это легко используя виджет Текст. Вы можете вставить текст в последней позиции курсора или в конце текста. Вы можете рассмотреть возможность использования виджета StyledText, который поддерживает опускание в любом положении и «зависание каретки».
  3. И Text, и StyledText поддерживают стиль SWT.MULTI для многострочного использования.

Вы можете найти множество отличных фрагментов кода на странице SWT snippets , включая примеры перетаскивания с помощью виджета StyledText. Также есть хорошее введение для DND в SWT .

...