Archive for 1月, 2008

iDotメモ1

金曜日, 1月 25th, 2008

iDot Version 1.0メモ

http://stwww.weizmann.ac.il/g-cs/benari/idot/index.html

上記ホームページの情報から、iDotとは
Graphviz言語で記述された方向があるグラフを表示するためのビューアで、
機能は、次のとおり。

  • ノードのダブルクリックでそのノードと直接関係するノードが表示できる
  • ノードとエッジ(ノード間の矢印)のドラッグアンドドロップによるレイアウト変更
  • キャンバス上でのマウス左クリックによるパン
  • キャンバス上でのマウス右クリックによるズーム(マウスホイールでも操作可)

動作環境
Java Runtime Environment 1.5以上
prefuseグラフィックライブラリを使用

ライセンスは「GNU General Public License」。
ソースコードが公開されているので中身を見てみる。
まずはmainメソッドがあるクラスidot.iDotから開始。

package idot;
….
  /**
  * State Diagram Visualizer application. This program reads state diagrams
  * produced by the SpinSpider tool and saved in the dot format and displays the
  * diagram interactively to the user, who can then perform different “filters”
  * on the diagram to gain deeper understanding of the operation of the
  * illustrated program or algorithm.
  *
  * Originally based on a sample graph editor in the * href=”http://prefuse.org”>prefuse library made by * href=”http://jheer.org”>Jeffrey Heer.
  */

  public class iDot extends JFrame {

….

  /**
  * Entry point of the program. If there are no command line parameters, an
  * empty application window is opened. If there are command line parameters,
  * they are considered to be names of files containing state diagrams to be
  * loaded by the application. Every specified file will be opened in a
  * separate window.
  *
  * @param argv
  * the command line parameters
  */

  public static void main(String argv[]) {
    if (argv.length > 0)
      for (String filename : argv)
        new iDot().loadFile(new File(filename));
      else
      new iDot();
  }

….

}

iDotクラスは、javax.swing.JFrameクラスを継承している。
mainメソッドでiDotオブジェクトを作成する。ファイル名が渡されればファイルを読み込む。複数のファイルパスを引数に受け取るとファイルの数だけピューアが起動する。
次にコンストラクタ。

/**
* Default constructor. Will initialize the view with an empty graph.
*/

public iDot() {
  this(new Graph(true), null);//なぜだろう?
}

/**
* A constructor specifying the graph to load to the program.
*
* @param graph
* the graph to be loaded initially
* @param originOfGraph
* an optional string providing additional information about the
* graph to be shown in the title bar of the program
*/

public iDot(Graph graph, String originOfGraph) {
  super();
  setLookAndFeel();
  fileChooser = new JFileChooser(INITIAL_PATH);//①
  fileChooser.addChoosableFileFilter(new ExtensionFileFilter(“.dot”,”*.dot (DOT files)”));
  MenuController controller = new MenuController();
  JToolBar toolBar = new JToolBar();
  display = new DotDisplay(graph);//②
  graphState = originOfGraph;
  updateTitle();
  initToolBar(toolBar, controller);//③
  JPanel contentPane = new JPanel();
  contentPane.setLayout(new java.awt.BorderLayout());
  contentPane.add(toolBar, java.awt.BorderLayout.NORTH);//④
  contentPane.add(display, java.awt.BorderLayout.CENTER);//⑤
  setContentPane(contentPane);
  setDefaultCloseOperation(EXIT_ON_CLOSE);
  setFont(font);
  setSize(WIDTH, HEIGHT);
  setLocationRelativeTo(null);
  setVisible(true);
}

デフォルトコンストラクタは、引数付のコンストラクタをコールする。
ここで、Graphクラスが登場するが、これはprefuseライブラリのクラスprefuse.data.Graphで表示するデータを表している。この段階では表示するデータがないのでGraphオブジェクトは不要だと思うが、なぜか作成している。
コンストラクタでは、
①JFileChooserオブジェクトを作成し、メンバに設定
②DotDisplayオブジェクトを作成し、メンバに設定
③ツールバー作成、初期化
④JPanelオブジェクトにツールバーを登録
⑤JPanelオブジェクトにディスプレイを追加

iDotメモ2へ