2012-04-03 29 views
3

我正在實現SWT Java應用程序的OS X版本的視圖,並且希望使用由我的SWT樹中的NSOutlineView提供的「源列表」選項。Mac上的SWT樹 - '來源列表'

我實現了這個由將此代碼添加到#createHandle()方法黑客我自己Tree.class的版本:

long NSTableViewSelectionHighlightStyleSourceList = 1; 
long hi = OS.sel_registerName("setSelectionHighlightStyle:"); 
OS.objc_msgSend(widget.id, hi, NSTableViewSelectionHighlightStyleSourceList); 

基本上只是旗標的NSOutlineView使用NSTableViewSelectionHighlightStyleSourceList風格。

它看起來像這樣:

source list

哪種作品,但並不能完全模擬NSOutlineView行爲。例如,選擇根節點時,儘管標題有足夠的空間,它仍然截斷這樣的:

source list with truncated title

與此另一個問題是,我不知道如何實現類(或組/文件夾)就像你在Finder.app/iTunes.app/Mail.app/the下面的例子中看到:

Finder.app example

通知的FAVORITES類別,以及它是如何格式化。這是一個普通ObjC應用程序通過在outlineView委託outlineView:isGroupItem方法返回true處理,但我不知道從哪裏砍那個英寸

所以我的問題是

我怎麼去實現SWT在OS X上的類別(isGroupItem)功能?

+0

Hi @Rick - 我正在尋找同樣的問題。作爲解決方法,我目前將視圖拆分爲多個表格,並使用標籤自己繪製類別標題。這不幸的是,整個組合控件的行爲不像一個合適的用戶界面 - 因爲整個區域不可滾動,但只有部分(表格) – Vladimir 2012-05-07 07:04:45

+0

我的情況更糟糕 - 我需要使用類別製作大綱視圖的跨平臺版本:-) – Vladimir 2012-05-07 07:06:10

回答

6

我設法對SWT java源代碼和本機源代碼進行調整,以使其工作,如下圖所示。

爲Mac可可x86_64的一個自定義的SWT可以dowloaded here.

在時間到源所做的更改可以在此commit

中可以看出表示如何工作的如下所示的片斷。 SWT.SOURCE_LIST樣式用於將樹標記爲源列表,SWT.GROUP_ITEM樣式用於標記作爲組項的項目。

import org.eclipse.swt.SWT; 
import org.eclipse.swt.layout.FillLayout; 
import org.eclipse.swt.widgets.Display; 
import org.eclipse.swt.widgets.Shell; 
import org.eclipse.swt.widgets.Tree; 
import org.eclipse.swt.widgets.TreeItem; 

public class SourceList { 

    public static void main(String[] args) { 
     Display display = new Display(); 
     Shell shell = new Shell(display); 
     shell.setLayout(new FillLayout()); 

     final Tree tree = new Tree (shell, SWT.SOURCE_LIST); 

     for (int i=0; i<4; i++) { 
      final TreeItem iItem = new TreeItem (tree, SWT.GROUP_ITEM); 
      display.asyncExec(new Runnable() { 
       public void run() { 
        iItem.setExpanded(true); 
       } 
      }); 
      iItem.setText ("GROUP " + i); 
      for (int j = 0; j < 4; j++) { 
       TreeItem jItem = new TreeItem (iItem, 0); 
       jItem.setText ("TreeItem " + j); 
      } 
     } 

     shell.open(); 
     while (!shell.isDisposed()) { 
      if (!display.readAndDispatch()) 
       display.sleep(); 
     } 
     display.dispose(); 
    } 

} 
+0

嗯,我會被詛咒!這看起來很棒!我會在某個時候嘗試併發布結果。 謝謝! – 2012-12-05 15:51:17