2010-06-02 2 views
1

내 응용 프로그램에서 사용자가 탭을 떠나기 전에 변경 사항을 저장하기를 원합니다 (CTabFolder으로 구현 됨). (이것은 다른 컨트롤이 변경되기 전에 발생합니까? 왜 그것도 doit 필드가 않습니다) SWT/JFace에서 PreSelection 이벤트 부족에 대한 해결 방법은 무엇입니까?

는 버그질라에 찾고

나는 SelectionEvent을 처리하기 위해 노력하지만, 탭이 변경되었습니다 후 화재 나는 https://bugs.eclipse.org/bugs/show_bug.cgi?id=193453https://bugs.eclipse.org/bugs/show_bug.cgi?id=193064을 찾았습니다. 어느 쪽도 고정되어 있지 않습니다.

이 요구 사항은 일반적 일 수 있으므로 해결 방법이 있습니까?

답변

1

CTabFolder가 지원하는 org.eclipse.ui.part.MultiPageEditorPart와 작동하는 해결 방법이 있습니다. 직선적 인 CTabFolder 구현을 위해이를 적용 할 것입니다.

tabFolder.addSelectionListener(new SelectionAdapter() { 
    public void widgetSelected(SelectionEvent e) { 
     pageChange(tabFolder.indexOf((CTabItem) e.item)); 
    } 
}); 

그런 다음 나는이 같은 pageChange()를 구현 : canChangePages에서

protected void pageChange(int newPageIndex) { 
    boolean changingPages = this.changingPages; 
    this.changingPages = true; 
    int oldPageIndex = tabFolder.getSelectionIndex(); 

    if (isDirty() && !changingPages) { 
     tabFolder.setSelection(oldPageIndex); 

     if (canChangePages()) { 
      tabFolder.setSelection(newPageIndex); 
     } 
    } 

    this.changingPages = false; 
} 

() 나는 당신이 대화 저장하고주고 싶어 팝업

첫째는 선택 리스너를 사용 사용자는 예, 아니오 또는 취소를 선택할 수 있습니다. 예는 정보를 저장하고 true를 반환합니다. No는 정보를 마지막으로 저장된 상태로 되돌리고 true를 반환합니다. 취소하면 false가 반환됩니다. 단순히 저장을 시도하고 저장이 실패 할 경우에만 false를 반환 할 수 있습니다.

canChangePages()를 호출하기 전에 이전 페이지로 다시 전환하는 것이 이상하게 보일 수 있습니다. 이 호출은 신속하게 실행되므로 탭이 절대로 전환되지 않았다는 환상을 제공합니다. canChangePages()가 사용자에게 걸리는 시간이 아무리 길어도 그 방법으로 승인되지 않는 한 탭 변경 사항이 표시되지 않습니다.

+0

나는 CTabFolders와 Trees 모두에 대해 동일한 해결 방법을 생각해 냈습니다 :) 나는 약간의 깜박임을 예상했지만 아무 것도 보지 못했습니다. 그리고 운좋게도 CTabFolder는 실제로 탭을 닫기 전에 이벤트를 시작합니다. –

+0

2015 년 현재,''tabFolder.getSelectionIndex()''는 항상''tabFolder.indexOf ((CTabItem) e.item)와 같은 값을 리턴합니다. '. 그래서''newPageIndex''는''SelectionListener'' 안에서 항상''oldPageIndex''와 같습니다. 누군가가 이와 관련하여 어려움을 겪고 있다면이 문제를 극복하기 위해 이전 페이지 색인을 유지하십시오. – user1438038

관련 문제