wangting
2024-09-27 a3e87f78ee262ca9bb7d9b0c997639d5f3295890
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
package com.vci.client.uif.engine.client.tree;
 
import java.util.ArrayList;
import java.util.List;
 
import javax.swing.tree.TreePath;
 
import com.vci.client.ui.tree.VCIBaseTreeModel;
import com.vci.client.ui.treeTable.TreeTableModel;
import com.vci.client.uif.engine.client.IDataModel;
import com.vci.client.uif.engine.client.IRegionPanel;
import com.vci.client.uif.engine.client.IUILayoutModel;
import com.vci.client.uif.engine.common.IDataNode;
import com.vci.common.utility.ObjectUtility;
 
public class TreePanelModel extends VCIBaseTreeModel implements IDataModel{
 
    private static final long serialVersionUID = 8950763390449482192L;
    private String key = null;
    private IUILayoutModel uiLayoutModel = null;
    //当前选择的树节点数据
    private Object[] selectObjs = null;
    //根节点
    private TreeNode rootNode = null;
    //关联的树容器Panel(UI)
    private TreePanel mainPanel = null;
    //当前所选择的数据
    private Object clickObject = null;
    //
    private IRegionPanel regionPanel = null;
    
    public TreePanelModel(TreeNode treeNode, TreePanel panel) {
        super(treeNode);
        rootNode = treeNode;
        this.mainPanel = panel;
        key = ObjectUtility.getNewObjectID36();
        setRegionPanel(panel);
    }
 
    @Override
    public String getKey() {
        return key;
    }
 
    @Override
    public int[] getSelectObjectRowIndexs() {
        // TODO Auto-generated method stub
        return null;
    }
 
    @Override
    public Object[] getSelectObjects() {
        return this.selectObjs;
    }
    
    public void setSelectObjects(Object[] objs) {
        selectObjs = objs;
    }
    
    @Override
    public void setClickObject(Object selectObjs) {
        this.clickObject = selectObjs;
    }
    
    @Override
    public Object getClickObject() {
        return this.clickObject;
    }
 
    @Override
    public Object getRootObject() {
        return this.rootNode.getObj();
    }
 
    @Override
    public void setUILayoutModel(IUILayoutModel uiLayoutModel) {
        this.uiLayoutModel = uiLayoutModel;
    }
 
    @Override
    public IUILayoutModel getUILayoutModel() {
        return this.uiLayoutModel;
    }
 
    @Override
    public void refreshCache(Object clientObject) {
        // TODO Auto-generated method stub
        
    }
 
    /**
     * 返回此 model 所在的 regionPanel
     */
    @Override
    public IRegionPanel getRegionPanel() {
        return regionPanel;
    }
 
    /**
     * 设置此 model 所在的 regionPanel
     * @param regionPanel 此 model 所在的 regionPanel
     */
    @Override
    public void setRegionPanel(IRegionPanel regionPanel) {
        this.regionPanel = regionPanel;
    }
    
    @Override
    public boolean selectedHasRoot(){
        boolean res = false;
        TreePath[] treePaths = mainPanel.getTree().getSelectionPaths();
        for(TreePath treePath : treePaths){
            boolean pathIsRoot = treePathIsRoot(treePath);
            return pathIsRoot;
        }
        return res;
    }
    @Override
    public boolean lastSelectedIsRoot(){
        return treePathIsRoot(mainPanel.getTree().getSelectionPath());
    }
    
    private boolean treePathIsRoot(TreePath treePath){
        boolean res = false;
        Object lastObject = mainPanel.getTree().getLastSelectedPathComponent();
        if(lastObject instanceof TreeTableModel.TreeTableNode){
            TreeTableModel.TreeTableNode treeNode = (TreeTableModel.TreeTableNode)lastObject;
            res = (treeNode.getParent() == null);
        }
        return res;
    }
    
    private IDataModel  sourceModel;
    @Override
    public void setSourceModel(IDataModel  sourceModel){
        this.sourceModel = sourceModel;
    }
    
    @Override
    public IDataModel getSourceModel(){
        return sourceModel;
    }
    
    private IDataNode sourceData = null;
    /**
     * 返回 此IRegionPanel初始时、唯一恒定不变的SourceData对象
     * @return 此IRegionPanel初始时、唯一恒定不变的SourceData对象
     */
    public IDataNode getSourceData() {
        return sourceData;
    }
    
    /**
     * 设置此IRegionPanel初始时、唯一恒定不变的SourceData对象
     * @param sourceData 此IRegionPanel初始时、唯一恒定不变的SourceData对象
     */
    public void setSourceData(IDataNode sourceData) {
        this.sourceData = sourceData;
    }
    
    protected List<IDataModel> innerDataModelsInTabPanel = null;
    /**
     * @Title        :设置嵌套子页签 by zhonggy 2015-07
     * @Description    :
     * @param innerDataModelsInTabPanel
     */
    public void setInnerTabModels(List<IDataModel> innerDataModelsInTabPanel){
        this.innerDataModelsInTabPanel = innerDataModelsInTabPanel;
    }
    
    private boolean regionUIIsActive = false; //默认不需要加载激活界面
    protected IDataModel innerActiveDataModel = null;
    @Override
    /**
     * @Title        :控件是否激活显示(如果激活界面,当源界面数据变化后刷新时,当前界面数据需要及时刷新,否则不用刷新)
     * @Description    :
     * @param isActive
     */
    /*public void setActive(boolean isActive) {
        this.regionUIIsActive = isActive;
    }*/
    public void setActive(boolean isActive) {
        this.regionUIIsActive = isActive;
        if (isActive) {
            //设置兄弟页签为非激活
            if (brotherModels != null && brotherModels.size() >0) {
                for (IDataModel item : brotherModels) {
                    if (item != this) {
                        item.setActive(false);
                    }
                }
            }
            if (innerActiveDataModel != null) {
                innerActiveDataModel.setActive(true);
            }
        }else if(innerDataModelsInTabPanel != null) {
            innerActiveDataModel = null;
            for (IDataModel item : innerDataModelsInTabPanel) {
                if (item.isActive()) {
                    innerActiveDataModel = item;
                    innerActiveDataModel.setActive(false);
                }
            }
        }
    }
    
    @Override
    /**
     * @Title        :控件是否激活显示(如果激活界面,当源界面数据变化后刷新时,当前界面数据需要及时刷新,否则不用刷新)
     * @Description    :
     * @return
     */
    public boolean isActive(){
        return regionUIIsActive;
    }
    
    private boolean needRefreshUI = false; //当前控件触发刷新
    
    /**
     * 界面是否需要刷新
     * @Title        :isNeedRefreshUI
     * @Description    :
     * @return
     */
    public boolean isNeedRefreshUI(){
        return needRefreshUI;
    }
 
    /**
     * 设置界面是否需要刷新
     * @param needRefreshUI
     */
    public void setNeedRefreshUI(boolean needRefreshUI){
        this.needRefreshUI = needRefreshUI;
    }
    
    @Override
    public void refresh(IDataModel fromDataModel) {
        //TODO -本身的刷新
        //先获取对象,而后更新对象的本身的信息,重新设置node的显示值。
        this.sourceModel = fromDataModel;
        mainPanel.refreshUI();
    }
    
    private List<IDataModel> brotherModels = null;
    /**
     * @Title        :兄弟Models
     * @Description    :
     * @param dataModelsInTabPanel
     */
    public void setBrotherModels(List<IDataModel> models){
        this.brotherModels = new ArrayList<IDataModel>();
        for (IDataModel iDataModel : models) {
            if (iDataModel != this) {
                brotherModels.add(iDataModel);
            }
        }
    }
    
    /**
     * 处理UI组件的UI刷新(先刷新UI Module,通过UI Module刷新UI组件) add by zhonggy 2015-07
     */
    public void refreshUI(IDataModel fromDataModel){
        this.sourceModel = fromDataModel;
        needRefreshUI = true;
        if (regionUIIsActive && regionPanel != null) {
            needRefreshUI = false;
            regionPanel.refreshUI();
        }
    }
    
    @Override
    /**
     * 处理UI刷新
     */
    public void refreshUI() {
        this.setActive(true);
        if (needRefreshUI && regionPanel != null) {
            needRefreshUI = false;
            regionPanel.refreshUI();
        }
    }
}