2016-12-16 10 views
1

私はHashtree(Merkletree)を表示するかなり大きなZESTツリーを持っています。その大きさと限られた利用可能なスペースのため、それはあなたはもうそれを読み取ることができません圧縮されます:含まれているシェル内でZESTグラフをスクロールする方法

my ZEST Graph

そこで私は/実際のシェルが持っているよりも、より多くのスペースをつかむことができるようにしたい、とスクロールを実装マウスで移動するオプションをドラッグします。

しかし、私はそれを含むことができるサブ要素を見つけることができませんが、それは私が持っている空間に満たされません。

すでにSashForm(org.eclipse.swt.custom.SashForm)を試しましたが、ウィンドウより大きくなることはありませんでした。

私の計画を実行する可能性はありますか、それともSWTでは一般的にサポートされていませんか?

+0

が含まれていませんでした、緑のチェックマークをクリックして「受け入れ」としてそれをマークしてください。これにより、まだ回答のない古い投稿に焦点を当てることができます。 –

答えて

0

私はZestについてほとんど知らないので、Zest自身がズームやスクロールを提供するかどうかを最初に調べるべきです。

組み込みのサポートがない場合は、SWTのScrolledCompositeを使用できます。詳細については、こちらを参照してください:

+0

awnserありがとう、私は実際にコンポジットとSashFormの組み合わせで動作するように管理し、終了時にコードを投稿します。 – tassadarius

0

SWT.V_SCROLL | SWT.H_SCROLLGraphのスタイルを設定することで、あなたグラフをスクロール可能にすることができます。

Graph graph = new Graph(shell, SWT.H_SCROLL | SWT.V_SCROLL); 
+0

これは実際には機能しません。はい、グラフはスクロール可能になりますが、拡張されていないGridLayoutから割り当てられたスペースを取得します。グラフはその境界にとどまり、スクロール可能ですが、積極的にスペースを増やすことはありません – tassadarius

0

しばらくして、私はまともなやり方でそれを働かせました。私はsetSizeメソッドで単純なPaintListenerを使用します。ズームの場合は、org.eclipse.gef.editparts.ZoomManagerクラスを使用します。私は一つの大きな不利な点を見出しました。このクラスは多くのパフォーマンスを必要とします。

コードがなぜ、どのように明確になることを願っています。

public class ZoomableZestGraph extends Composite { 

private GraphViewer graphViewer; 
private Graph graph; 

public ZoomableZestGraph(Composite parent, int style) { 
    super(parent, style); 
    this.setLayout(new GridLayout(1, true));  
    this.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1,1)); 


    //create a GraphViewer and Graph 
    graphViewer = new GraphViewer(this, SWT.V_SCROLL | SWT.H_SCROLL); 
    graph = graphViewer.getGraphControl(); 
    graph.setLayoutAlgorithm(new TreeLayoutAlgorithm(LayoutStyles.NO_LAYOUT_NODE_RESIZING), true); 
    graph.setHorizontalScrollBarVisibility(Graph.ALWAYS); 
    graph.setVerticalScrollBarVisibility(Graph.ALWAYS); 


    //Fill our graph with some nodes and connect them 
    GraphNode node1 = new GraphNode(graph, SWT.NONE, "Earendil"); 
    GraphNode node2 = new GraphNode(graph, SWT.NONE, "Elros"); 
    GraphNode node3 = new GraphNode(graph, SWT.NONE, "Elrond"); 
    GraphNode node4 = new GraphNode(graph, SWT.NONE, "Elladan"); 
    GraphNode node5 = new GraphNode(graph, SWT.NONE, "Elrohir"); 
    GraphNode node6 = new GraphNode(graph, SWT.NONE, "Arwen"); 


    new GraphConnection(graph, ZestStyles.CONNECTIONS_DIRECTED, node1, node2); 
    new GraphConnection(graph, ZestStyles.CONNECTIONS_DIRECTED, node1, node3); 
    new GraphConnection(graph, ZestStyles.CONNECTIONS_DIRECTED, node2, node4); 
    new GraphConnection(graph, ZestStyles.CONNECTIONS_DIRECTED, node2, node5); 
    new GraphConnection(graph, ZestStyles.CONNECTIONS_DIRECTED, node2, node6); 

    /* 
    This graphViewer consists of 2 components: the control and the graph (Figure) 
    We want to give the control a size by the layout and the graph a custom, bigger value. 
    For the control (graphViewer.getControl) I simply grab all available space 
    */ 
    GridDataFactory.fillDefaults().grab(true, true).applyTo(graphViewer.getControl()); 

    //For the graph we have to create a PaintListener. 
    graph.addPaintListener(new PaintListener() { 

     @Override 
     public void paintControl(PaintEvent e) { 
     graph.setSize(1300, 1080); 

     } 
    }); 
    //The Graph now fills the shell/parent composite, 
    //but the actual graph size can be set as we want in the paint //listener 

    //Zooming with the class org.eclipse.gef.editparts.ZoomManager 
    //As arguments we need a ScalableFigure which we receive by graph.getRootLayer and the Viewport. 
    ZoomManager zoomManager = new ZoomManager(graph.getRootLayer(), graph.getViewport()); 

    //we bind the zoom mechanic to a simple mouse wheel listener 
    graph.addMouseWheelListener(new MouseWheelListener() { 

     @Override 
     public void mouseScrolled(MouseEvent e) { 
      if (e.count < 0) { 
       zoomManager.zoomOut(); 
      } else { 
       zoomManager.zoomIn(); 
      } 
     } 
    }); 
    //We give the focus to our graphViewer, so it receives the MouseWheel Events 
    graphViewer.getControl().forceFocus(); 
    } 

    @Override 
    protected void checkSubclass() { 
    //we are a composite subclass 
    } 

} 

注:あなたは答えは問題を解決したと感じた場合、私は輸入

関連する問題