2014-06-18 2 views
2

Я работаю над плагином Eclipse, у которого есть два TreeViewer, один из них с параметром SWT.RIGHT_TO_LEFT. Это выглядит так: Plugin ScreenJava TreeViewer SWT.RIGHT_TO_LEFT

Как вы видите, структура дерева рисуется справа налево, и это то, что мне нужно. Но и вот моя проблема, текст также инвертируется, но только тогда, когда специальные символы находятся в строке. PID.5.7 преобразуется в 7.5.PID. Вот как я создаю TreeViewer и текст:

xmlTreeOut = new TreeViewer(composite, SWT.RIGHT_TO_LEFT | SWT.DOUBLE_BUFFERED); 
... 
xmlTreeOut.getTree().addPaintListener(new PaintListener() { 
public void paintControl(PaintEvent e) { 
     //loop over treeItems and for each 
     ... 
     TextLayout textLayout = new TextLayout(Display.getDefault()); 
     textLayout.setText(xmlName + xmlValue); 
     textLayout.draw(event.gc, root.getBounds().x + 2, root.getBounds().y + 1); 
     ... 
    } 
}); 

Кто-нибудь есть решение этой проблемы? Я хотел бы иметь мою строку точно так же, как я ее пишу в TextLayout.

EDIT:

Я добавил упомянутый

textLayout.setOrientation(SWT.RIGHT_TO_LEFT); 

Теперь мой выход, как это:

enter image description here

Как вы можете видеть, что это работает для струнных, как PID. 7.5, но если есть строки, разделенные пробелом и содержащие только специальные символы, их инверсия. Как "MSH.1 |" становится "| MSH.1"

(удалены style2 и использовать только один стиль в TextLayout)

EDIT 2:

ВОЗМОЖНОЕ РЕШЕНИЕ РЕШЕНИЕ:

я проверить сейчас, если мой Строка начинается с слова, которое не имеет az, AZ. Я просто добавляю «x» с StyleColor = WHITE спереди. Таким образом, все значения отображаются неправильно.

ответ

1

Я не проверял это, но метод TextLayout#setOrientation(int orientation) выглядит то, что вам нужно:

Устанавливает ориентацию приемника, который должен быть один из SWT.LEFT_TO_RIGHT или SWT.RIGHT_TO_LEFT.

Просто установите его SWT.LEFT_TO_RIGHT для обоих TreeViewer с (или, может быть SWT.RIGHT_TO_LEFT на право TreeViewer инвертировать предыдущий справа налево?).

+0

Спасибо за быстрый ответ, да, я увидел setOrientation, но не попытался установить его снова RIGHT_TO_LEFT. Он работает, но только наполовину. Я добавляю экран «нового» результата в свой первый пост. – Darkpara

+0

@ Darkpara Хм, я не могу придумать лучшего решения, чем расщепление на символе пробела, инвертирование массива, объединение его снова и использование его ... – Baz

+0

Было бы возможно, если бы все было одинаково. Смотрите новый экран, String только инвертируется, когда «слово» содержит только специальные символы, в случае с двумя словами (обычные символы) это не инвертирует .. это действительно странно – Darkpara