2012-04-03 2 views
3

SWT JavaアプリケーションのOS X版のビューを実装していて、SWTツリーでNSOutlineViewが提供する「ソースリスト」オプションを使用したいと考えています。MacのSWTツリー - 「ソースリスト」

私は#createHandle()メソッドにこのコードを追加することにより、Tree.classの私の独自のバージョンをハッキングすることでこれを実現し:基本的にちょうど旗基礎となるNSOutlineViewをNSTableViewSelectionHighlightStyleSourceListスタイルを使用する

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

それは次のようになります。

source list

作品のどのようなものが、完全にNSOutlineViewの動作をエミュレートしません。ルート・ノードを選択した場合たとえば、タイトルは十分なスペースを持っているにもかかわらず、それはまだこのようにそれを切り捨て:

source list with truncated title

これでもう一つの問題は、私はカテゴリ(またはグループを実装する方法がわからないということです

/

Finder.app example

お知らせFAVORITESカテゴリ、そしてそれがどのようにフォーマットされます。あなたのようなフォルダ)は、例えば以下のFinder.app/iTunes.app/Mail.app/theで参照してください。これは、outlineViewデリゲートにoutlineView:isGroupItem方法にtrueを返すことにより、定期的にObjCアプリケーションで扱うが、私はどこにあることをハックする見当がつかないされる。

だから私の質問は

どのように実装して行くんですOS XのSWTのカテゴリー(isGroupItem)機能?

+0

こんにちは@Rick - 私は同じ問題を抱えています。回避策として、私は現在ビューをいくつかのテーブルに分割し、自分自身でラベルを使用してカテゴリヘッダを描画します。これは残念なことに、全体の領域がスクロール可能ではなく、部分(テーブル)のみであるため、コンポジットコントロール全体が適切なUIのように動作しなくなります – Vladimir

+0

私の状況はさらに悪化します - カテゴリ別にアウトラインビューのクロスプラットフォーム版を作成する必要があります:-) – Vladimir

答えて

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

さようなら私は気になるよ!これはすばらしく見える!私はいつかそれを試して結果を投稿します。 ありがとう! –

関連する問題