Прокрутите до перетащенного объекта, когда он выпущен за пределами текущего представления редактора GEF.

У меня есть редактор GEF с перетаскиваемыми фигурами. Я переопределил createChangeConstraintCommand основной EditPart XYLayoutEditPolicy. Это позволяет мне легко перемещать (перетаскивать) фигуры.

Проблема в том, что если я перетаскиваю один из них за пределы текущего вида, хотя прокрутка появляется и фигура перемещается, вид не прокручивается автоматически к перетащенному объекту.

Любая идея, как реализовать эту функцию «автопрокрутки»? (Было бы еще лучше, если бы «выбранная» (перетаскиваемая) фигура всегда была видна в представлении.)


person Bernadette Varga    schedule 29.01.2015    source источник


Ответы (1)


Учитывая удаленный объект editpart, вы должны использовать метод EditPartViewer#reveal(EditPart). Сделайте это, например:

editpart.getViewer().reveal(editpart)
person aboyko    schedule 29.01.2015
comment
Я вызвал функцию раскрытия асинхронно (!) из метода notifyChanged элемента редактирования. Это позволяет мне прокручивать экран при удалении объекта после выполнения команды changeconstraint. Но у меня все еще нет успеха с перетаскиванием... перетаскивание контролируется политикой редактирования. В этом случае, откуда я должен вызвать метод раскрытия? - person Bernadette Varga; 30.01.2015
comment
Другими словами, вы хотели бы показать, что часть редактирования перетаскивается, когда она перетаскивается за пределы области просмотра? Это правильно? - person aboyko; 30.01.2015
comment
Да, это именно то, что я хочу. - person Bernadette Varga; 30.01.2015
comment
Используйте org.eclipse.draw2d.FigureCanvas.scrollSmoothTo(int x, int y). Для этого вам понадобятся x и y в соответствующей системе координат. См. реализацию org.eclipse.gef.ui.parts.ScrollingGraphicalViewer.reveal (часть EditPart), чтобы понять, как выполняется преобразование координат. - person aboyko; 30.01.2015
comment
Благодарим за ваше предложение! Я переопределил метод createChangeConstraintCommand в XYLayoutEditPolicy с помощью: Display.getDefault().asyncExec(new Runnable() {@Override public void run() {int x = request.getTransformedRectangle((Rectangle) ограничение).x; int y = request.getTransformedRectangle((Rectangle) ограничение).y; ((FigureCanvas) child.getViewer().getControl()).scrollSmoothTo(x, y); }}); Это успешно позволяет отображать часть редактирования при перетаскивании, но мышь не остается над фигурой (она смещается), что очень раздражает... - person Bernadette Varga; 02.02.2015