Newer
Older
AnchorGarden_M / src / main / java / jaist / css / covis / RootBuffer.java
@motoki miura motoki miura on 21 Jun 2022 2 KB ppath error
package jaist.css.covis;

import java.util.ArrayList;
import java.util.HashSet;

import org.piccolo2d.PCamera;
import org.piccolo2d.PLayer;
import org.piccolo2d.PRoot;

/**
 * ATNBuffer(バッファ)のスーパークラス.画面表示モデルのルート(root), および表示レイヤ(layer)を持つ.
 * 
 * 
 */
public class RootBuffer {
	public static ArrayList<CoVisBuffer> buffers = new ArrayList<CoVisBuffer>();
	
	/**
	 * このBufferを表示中のウィンドウリスト
	 */
	public HashSet<AnchorGarden> showingWindows;
	public PRoot root;
	public PLayer layer;
	public String name;
	public static String bufferName = "World";
	static int bufferid;
	boolean hasModifiedUnsaved;
	public RootBuffer(){
		root = new PRoot();
		layer = new PLayer();
		root.addChild(layer);
		
		name = bufferName+" "+String.valueOf(RootBuffer.bufferid);
		RootBuffer.bufferid++;
		buffers.add((CoVisBuffer)this);
//		PText test = new PText(name);
//		layer.addChild(test);
//		test.offset(-200, -200);
		RootBuffer.updateAllBufferMenu();
	}
	public void addCamera(PCamera cam){
		root.addChild(cam);
		cam.addLayer(layer);
	}
	public void delete(){
		buffers.remove(this);
		RootBuffer.updateAllBufferMenu();
	}
	public static void updateAllBufferMenu(){
		for(RootWindow pw: RootWindow.windows){
			pw.updateBufferMenu();
		}
	}
	public static CoVisBuffer find(String s){
		for(CoVisBuffer b: buffers){
			if (b.name.equals(s)) return b;
		}
		return null;
	}
	
	public void addShowingWindow(AnchorGarden w){
		if (showingWindows == null) showingWindows = new HashSet<AnchorGarden>();
		showingWindows.add(w);
	}
	public void removeShowingWindow(AnchorGarden w){
		if (showingWindows == null) showingWindows = new HashSet<AnchorGarden>();
		showingWindows.remove(w);
//		if(showingWindows.size()==0){ // もし、参照するウィンドウが0になったら
//			((ATNBuffer)this).updateContAction.setSelected(false); //DB連続更新を切る
//		}
//              ここでupdateContActionのプロパティを変更するのではなく、実際の更新箇所でウィンドウ数をチェックする。
		//    ほうが便利(頻繁に繰り返し切り替えることがあるかもしれないので)DBUpdateContinuousThread.runでチェック。
	}
	public void repaint(){
		for(AnchorGarden w:showingWindows){
			w.canvas.repaint();
		}
	}
	public AnchorGarden getWindow(){
		if (showingWindows == null) return null;
		for(AnchorGarden w:showingWindows){
			return w; // どれでもいいから返す
		}
		return null;
	}
}