一组用户在具有2个显示器的工作站上使用我的RCP应用程序。第二个显示器是一个小型USB设备,当它们四处移动时,它们可以握在手中。从标准角度拉出几个视图并移至USB显示屏。关闭并重新启动应用程序时,将正确保存和恢复所有窗口的位置。
当其中一个显示被删除时,问题就开始了。 (USB显示器似乎有点“摇摆不定”并自行重置)显示器上的视图移动到另一个显示器,并且重新激活显示器时位置不会恢复。我意识到这一切都非常明智,但我希望能够对情况作出反应,并提供一种快速恢复立场的方法。
一个想法是为双显示模式提供透视图,但我还没有找到一种方法来定义使用分离视图的透视图。
另一种方法是定义一个保存所有分离视图位置的动作和另一个恢复这些视图的动作。如何查询分离的视图及其位置?
我的最后一个想法建立在前一个想法的基础上。保存位置,任务扫描当前连接的显示。当移除并重新连接显示器时,将检测到该显示并恢复视图位置。
还有其他想法吗?脱离观点似乎是一个好主意,但它开始引起严重的挫败感。
更新
我试图捕捉移动并调整视图的事件大小,但是当移除显示并且Windows重新定位窗口时不会引发任何事件。 (来自http://eclipsesource.com/blogs/2010/06/23/tip-how-to-detect-that-a-view-was-detached/的想法)
@Override
public final void createPartControl(Composite parent)
{
this.parent = parent;
parent.addControlListener(new ControlAdapter() {
@Override
public void controlResized(ControlEvent e) {
updateDetached();
}
@Override
public void controlMoved(ControlEvent e)
{
updateDetached();
}
});
onCreatePartControl(parent);
updateDetached();
}
private void updateDetached()
{
isDetached = parent.getShell().getText().length() == 0;
if(isDetached)
{
System.out.println(parent.getShell().getDisplay().getBounds());
System.out.println(parent.getShell().getBounds());
}
}