選択の管理

Web アプリケーションでの選択は、IlvSelectionManager および IlvSelectInteractor クラスを介して処理されます。
IlvSelectionManager を使用すると、ビュー内の 1 つ以上のオブジェクトを選択して、現行選択に移すことができます。IlvSelectInteractor は、直接に選択マネージャーを使用してこうしたタスクを実行します。
メモ
選択は、マルチセッション・モードでのみ意味を持ちます。

クライアント・サイド構成

クライアント・サイドでの選択を使用するには、次のスクリプトをインポートします。
<script TYPE="text/javascript" src="script/IlvAbstractSelectionManager.js"></
script>
<script TYPE="text/javascript" src="script/framework/IlvSelectionManager.js"></
script>
<script TYPE="text/javascript" src="script/framework/IlvSelectInteractor.js"></
script>
クライアント・サイドで選択マネージャーを取得するには、次のコードを使用します。
var selectionManager = view.getSelectionManager();

サーバー・サイド構成

デフォルトでは、イメージ・サーブレット・サポートで選択機能が有効になっていません。
選択機能を使用可能にするには、setSelectionEnabled(true) を呼び出す必要があります。
例:
public class DiagrammerServlet  extends IlvDiagrammerServlet  {

  protected IlvSDMServletSupport createServletSupport(ServletContext context) {
    return new DiagrammerServletSupport(context);
  }

}

public class DiagrammerServletSupport extends IlvDiagrammerServletSupport {  
  public DiagrammerServletSupport(ServletContext context) {
    super(context);    
    setSelectionEnabled(true); 
  }  
}

イメージ・モードまたは矩形モード

選択マネージャーは、オブジェクトの選択を表示するのに次の 2 つのモードを提供しています。
  • イメージ・モード: クライアントで選択が行われると、そのつどイメージ要求が発行されます。
  • 矩形モード: クライアントで選択が行われると、そのつど選択された各オブジェクトのバウンディング・ボックスがサーバーに照会され、クライアントで表示されます。
    バウンディング・ボックスの矩形の色と厚さは、選択マネージャーを通じて構成できます。

プロパティー

選択サーブレットは、選択された各オブジェクトの追加情報を提供するように構成できます。この情報は、クライアントで使用できる追加プロパティーと対応しています。
これを行うには、選択サポート実装のサブクラスを作成して、getAdditionalProperties(IlvSelectionResponse response, Object object) をオーバーライドする必要があります。次に例を示します。
次の選択サポートは、SDM ノードのプロパティーを追加します。
//Subclass to override the getAdditionalProperties method
public class DiagrammerSelectionSupport extends IlvDiagrammerSelectionSupport {

  public DiagrammerSelectionSupport(IlvDiagrammerServletSupport support) {
    super(support);
  }

  protected ArrayList getAdditionalProperties(IlvSelectionResponse response,
   Object object) {
    ArrayList props = super.getAdditionalProperties(response, object);
    
    IlvSDMNode node = (IlvSDMNode) object;
    IlvDiagrammer diagrammer = (IlvDiagrammer)
       response.getProperty(DIAGRAMMER_KEY);
    IlvSDMModel model = diagrammer.getEngine().getModel();
           
    String names[] = model.getObjectPropertyNames(node);
    
    for (int i = 0; i < names.length; i++) {
      ArrayList l = new ArrayList();
      l.add(names[i]);
      l.add(model.getObjectProperty(node, names[i]));
      props.add(l);
    }
    
     return props;
  }

}

//Use the new selection selection support class in the servlet support.
public class DiagrammerServletSupport extends IlvDiagrammerServletSupport {
  
  [...]

  protected IlvSelectionSupport createSelectionSupport() {
    return new DiagrammerSelectionSupport(this);
  }
  
}
イメージ・モードでは、選択情報を取得するために追加要求を発行する必要があります (この情報はデフォルトでは無効になっています)。 各選択でこの追加要求を強制するには、view.getSelectionManager().setForceUpdateProperties(true)を使用します。
矩形モードでは、選択情報は常に有効になっています。
クライアント・サイドで選択情報を取得するには、次の 2 つの方法があります。
  • 任意の時点の現行選択を取得する。
    view.getSelectionManager().getSelection()
  • 選択変更のリスナーを登録する。
    このリスナーは、現行選択を通知されます。
選択矩形の properties で追加プロパティーが使用可能です。
このセクションで前に示した選択サポートの例を使用する場合、次のリスナー例では、選択したオブジェクトのプロパティーがパネルに表示されます。
function showProperties(rList) {

  if (rList.length == 1) {
    var p = "<table>";

    for(var i=0; i<rList[0].getProperties(length); i++){
      var props = rList[0].getProperties();
      p += "<td>" + props[i][0]+ "</td>";
      p += "<td>" + props[i][1]+ "</td>";
    }						
    p +="<table>";
    propPanel.setContent(p);
  }
}

リスナー

選択マネージャーが矩形モードになっている場合に選択の記録を保持するために、選択マネージャーにリスナーを登録できます。リスナーを選択マネージャーに追加するには、次のメソッドを使用します。
view.getSelectionManager().addSelectionChangedListener(listener)
listener は、選択 (追加プロパティーがある矩形のリスト) に対応する 1 つのパラメーターを含む関数です。
イメージ・モードでは、選択情報を取得するために追加要求を発行する必要があります。デフォルトでは、リスナーは通知されません。
各選択でこの 2 番目の要求を強制するには、次を使用します。
view.getSelectionManager().setForceUpdateProperties(true)

移動

クライアント・サイドおよびサーバー・サイドでオブジェクトの移動が許可されている場合、IlvSelectInteractor はオブジェクトのドラッグ・アンド・ドロップを許可します。
重要
自動レイアウトによってユーザー・アクションがオーバーライドされることのないように、この機能を使用する場合はノード・レイアウトを無効にする必要があります。