【问题标题】:Eclipse Scout check when leave page离开页面时的 Eclipse Scout 检查
【发布时间】:2014-08-06 11:08:21
【问题描述】:

我正在编写一个侦察应用程序,但偶然发现了一些问题。 在我的标准大纲中,我有不止一页。在页面 A 我有一些带有保存按钮的可编辑表格。 B 页中的内容对于本次讨论并不重要。

Outline
   page A
   page B

如果选择了页面 A 并且我编辑了一些数据,我希望在单击页面 B 时收到通知,通知某些数据未保存。

所以在页面 A 和 B 之间切换大纲之前,我希望控制不切换到页面 B,因为 A 中的相同数据没有保存。

我实际上已经通过扩展页面解决了这个问题,但我正在寻找是否有一些标准的预定义方式。

【问题讨论】:

  • 我能想到的唯一方法是您的AbstractOutline 上的setPageChangeStrategy。在那里您可以防止页面实际被更改,但我不知道如何防止在树中选择节点。理想情况下,您希望在用户选择新页面之前 拦截事件。

标签: eclipse treenode savechanges eclipse-scout


【解决方案1】:

不幸的是,没有办法阻止节点选择真正发生。正如您所提到的,您可以通过分别覆盖 execPageActivated 和 execPageDeactivated 方法来侦听 Page 中的激活和停用事件。但是通过使用这种方法,您无法控制节点切换。

通过注入自定义 DefaultPageChangeStrategy 在 Outline 类中提供自己的 createPageChangeStrategy 实现,您可以获得更多控制权。因此,每次节点更改发生在相应的 pageChange 事件中时,您都会收到通知。只要您的页面无效,您就可以防止页面切换发生并恢复原始树选择。

请看下面的例子:

@Override
IPageChangeStrategy createPageChangeStrategy() {
    return new DefaultPageChangeStrategy() {

      @Override
      public void pageChanged(IOutline outline, IPage deselectedPage, IPage selectedPage) {
        if (deselectedPage instanceof APage && !((APage) deselectedPage).isValid()) { // #isValid is your check method for validity.
          // Do not propagate the PageChangeEvent and restore the selection of the invalid page.

          // Uninstall the PageChangeStrategy to ignore the event of restoring the selection.
          final IPageChangeStrategy pageChangeStrategy = this;
          setPageChangeStrategy(null);

          // Restore the selection and install the PageChangeStrategy anew.
          new ClientSyncJob("Restore node selection", ClientSession.get()) {

            @Override
            protected void runVoid(IProgressMonitor monitor) throws Throwable {
              YourOutline.this.selectNode(deselectedPage);
              setPageChangeStrategy(pageChangeStrategy);
            }
          }.schedule();
        }
        else {
          super.pageChanged(outline, deselectedPage, selectedPage);
        }
      }
    };
  }

【讨论】:

    猜你喜欢
    • 2015-04-28
    • 1970-01-01
    • 2016-07-24
    • 2018-03-19
    • 2016-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-04
    相关资源
    最近更新 更多