OSDN Git Service

オブジェクトの削除についても記録に残すようにした。
[gokigen/MeMoMa.git] / app / src / main / java / jp / sourceforge / gokigen / memoma / holders / MeMoMaConnectLineHolder.java
1 package jp.sourceforge.gokigen.memoma.holders;
2
3 import java.util.Enumeration;
4 import java.util.Hashtable;
5 import android.util.Log;
6
7 import jp.sourceforge.gokigen.memoma.Main;
8
9
10 /**
11  *   表示オブジェクト間の接続情報を保持するクラス
12  * 
13  * @author MRSa
14  *
15  */
16 public class MeMoMaConnectLineHolder
17 {
18         private final IOperationHistoryHolder historyHolder;
19     public static final int ID_NOTSPECIFY = -1;
20     private Hashtable<Integer, ObjectConnector>  connectLines;
21     private Integer serialNumber = 1;
22
23     public MeMoMaConnectLineHolder(IOperationHistoryHolder historyHolder)
24     {
25         this.historyHolder = historyHolder;
26         connectLines = new Hashtable<>();
27         connectLines.clear();
28     }
29
30     public Enumeration<Integer> getLineKeys()
31     {
32         return (connectLines.keys());
33     }
34
35     public ObjectConnector getLine(Integer key)
36     {
37         return (connectLines.get(key));
38     }
39
40     public boolean disconnectLines(Integer key)
41     {
42         ObjectConnector removeTarget = connectLines.remove(key);
43         if (removeTarget != null)
44         {
45             historyHolder.addHistory(key, IOperationHistoryHolder.ChangeKind.DELETE_CONNECT_LINE, removeTarget);
46         }
47         Log.v(Main.APP_IDENTIFIER, "DISCONNECT LINES : " + key);
48         return (true);
49     }
50
51     public void setSerialNumber(int id)
52     {
53         serialNumber = (id == ID_NOTSPECIFY) ? ++serialNumber : id;
54     }
55
56     public int getSerialNumber()
57     {
58         return (serialNumber);
59     }
60
61     public void removeAllLines()
62     {
63         connectLines.clear();
64         serialNumber = 1;
65     }
66
67     public void dumpConnectLine(ObjectConnector conn)
68     {
69         if (conn == null)
70         {
71             return;
72         }
73         Log.v(Main.APP_IDENTIFIER, "LINE " + conn.getKey() + " [" + conn.getFromObjectKey() + " -> " + conn.getToObjectKey() + "] ");
74     }
75
76     /**
77      *    keyToRemove で指定されたobjectの接続をすべて削除する
78      *
79      * @param keyToRemove\
80      */
81     public void removeAllConnection(Integer keyToRemove)
82     {
83         Enumeration<Integer> keys = connectLines.keys();
84         while (keys.hasMoreElements())
85         {
86             Integer key = keys.nextElement();
87             ObjectConnector connector = connectLines.get(key);
88             if ((connector.getFromObjectKey() == keyToRemove)||(connector.getToObjectKey() == keyToRemove))
89             {
90                 // 削除するキーが見つかった!
91                 connectLines.remove(key);
92             }
93         }
94     }
95
96     public ObjectConnector createLine(int id)
97     {
98         ObjectConnector connector = new ObjectConnector(id, 1, 1, LineStyleHolder.LINESTYLE_STRAIGHT_NO_ARROW, LineStyleHolder.LINESHAPE_NORMAL, LineStyleHolder.LINETHICKNESS_THIN, historyHolder);
99         connectLines.put(id, connector);
100         return (connector);
101     }
102
103     public ObjectConnector setLines(Integer fromKey, Integer toKey, LineStyleHolder lineHolder)
104     {
105         ObjectConnector connector = new ObjectConnector(serialNumber, fromKey, toKey, lineHolder.getLineStyle(), lineHolder.getLineShape(), lineHolder.getLineThickness(), historyHolder);
106
107         connectLines.put(serialNumber, connector);
108         serialNumber++;
109         return (connector);
110     }
111 }