田源
2024-03-07 4b4083fd73dc27ece42f4835483565eef0e4f608
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
package com.vci.client.uif.engine.client.compare.dialog;
 
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
 
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JComponent;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.KeyStroke;
 
import com.vci.client.uif.engine.client.compare.dialog.renderer.CompareTreeNodeIcons;
 
/**
 * 编辑菜单
 * @author VCI-STGK006
 *
 */
public class CompareDialogPopupMenu {
    
    /**
     * 父窗口
     */
    private NodeCompareDialog ed;
    /**
     * 右键菜单
     */
    private JPopupMenu pm;
    
    /**
     * 打开
     */
    private JMenuItem openMi;
    
    /**
     * 忽略菜单
     */
    private JMenuItem ignoredMi;
    
    /**
     * 更新link关系
     */
    private JMenuItem updateLinkMi;
    
    /**
     * 逐条修改菜单
     */
    private JMenuItem updateRightSingleMi;
    
    /**
     * 批量更新菜单
     */
    private JMenuItem updateRightBatchMi;
    
    /**
     * 解除关系
     */
    private JMenuItem deleteMi;
    
    /**
     * 保存按钮
     */
    private JMenuItem saveMi;
    
    /**
     * 调试功能,复制节点对象数据信息到系统剪切板
     */
    private JMenuItem debugMi;
    
    /**
     * 构造器
     * @param eat Action
     * @param excelTree Excel树
     * @param dsTree 数据库树
     */
    public CompareDialogPopupMenu(NodeCompareDialog ed) {
        this.ed = ed;
        createMenuItem();
    }
 
    /**
     * 构造器
     * @param eat
     * @param excelTree
     * @param dsTree
     * @param paramString
     */
    public CompareDialogPopupMenu(NodeCompareDialog ed, String title) {
        this.ed = ed;
        createMenuItem(title);
    }
    
    /**
     * 创建右键菜单
     * @param titles 菜单标题
     */
    public void createMenuItem(String ...titles) {
        if(titles == null || titles.length < 1) {
            pm = new JPopupMenu();
        } else {
            pm = new JPopupMenu(titles[0]);
        }
        //打开
        Action open = new AbstractAction("打开(O)") {
            private static final long serialVersionUID = 5145219953960994047L;
            @Override
            public void actionPerformed(ActionEvent e) {
                ed.doubleClickAction();
            }
        };
        openMi = new JMenuItem(open);
        openMi.setMnemonic(KeyEvent.VK_O);
        openMi.setAccelerator(
                KeyStroke.getKeyStroke(KeyEvent.VK_O, InputEvent.CTRL_DOWN_MASK, true));
        //忽略
        Action ignored = new AbstractAction("忽略/还原(G)", 
                CompareTreeNodeIcons.getInstance().getIcon("Ignored20x15.png")) {
            private static final long serialVersionUID = 5657208377333035328L;
            @Override
            public void actionPerformed(ActionEvent e) {
                ed.ignored();
            }
        }; 
        ignoredMi = new JMenuItem(ignored);
        ignoredMi.setMnemonic(KeyEvent.VK_G);
        ignoredMi.setAccelerator(
                KeyStroke.getKeyStroke(KeyEvent.VK_G, InputEvent.CTRL_DOWN_MASK, true));
        ignoredMi.setVisible(false);
        
        Action updateLink = new AbstractAction("更新链接(E)",
                CompareTreeNodeIcons.getInstance().getIcon("UpdateLink20x15.png")) {
            private static final long serialVersionUID = 3894180318359539111L;
            public void actionPerformed(ActionEvent e) {
                ed.updateLink();
            }
        };
        updateLinkMi = new JMenuItem(updateLink);
        updateLinkMi.setMnemonic(KeyEvent.VK_E);
        updateLinkMi.setAccelerator(
                KeyStroke.getKeyStroke(KeyEvent.VK_E, InputEvent.CTRL_DOWN_MASK, true));
        
        //单个更新
        Action updateRightSingle = new AbstractAction("更新数据(R)", 
                CompareTreeNodeIcons.getInstance().getIcon("UpdateRightSingle20x15.png")) {
            private static final long serialVersionUID = 1L;
            @Override
            public void actionPerformed(ActionEvent e) {
                ed.updateRightSingle();
            }
        };
        updateRightSingleMi = new JMenuItem(updateRightSingle);
        updateRightSingleMi.setMnemonic(KeyEvent.VK_R);
        updateRightSingleMi.setAccelerator(
                KeyStroke.getKeyStroke(KeyEvent.VK_R, InputEvent.CTRL_DOWN_MASK));
        
        //递归更新
        Action updateRightBatch = new AbstractAction("批量更新(T)", 
                CompareTreeNodeIcons.getInstance().getIcon("UpdateRightBatch20x15.png")){
            private static final long serialVersionUID = 1L;
            @Override
            public void actionPerformed(ActionEvent e) {
                ed.updateRigthBatch();
            }
        };
        updateRightBatchMi = new JMenuItem(updateRightBatch);
        updateRightBatchMi.setMnemonic(KeyEvent.VK_T);
        updateRightBatchMi.setAccelerator(
                KeyStroke.getKeyStroke(KeyEvent.VK_T, InputEvent.CTRL_DOWN_MASK));
        
        //删除关系
        Action delete = new AbstractAction("删除(D)",
                CompareTreeNodeIcons.getInstance().getIcon("Delete20x15.png")) {
            private static final long serialVersionUID = 1L;
            @Override
            public void actionPerformed(ActionEvent e) {
                ed.deleteAction();
            }
        };
        deleteMi = new JMenuItem(delete);
        deleteMi.setMnemonic(KeyEvent.VK_D);
        deleteMi.setAccelerator(
                KeyStroke.getKeyStroke(KeyEvent.VK_D, InputEvent.CTRL_DOWN_MASK));
        
        //保存
        //绑定保存事件
        Action save = new AbstractAction("保存(S)",
                CompareTreeNodeIcons.getInstance().getIcon("Save20x15.png")) {
            private static final long serialVersionUID = 7678552486046381848L;
            @Override
            public void actionPerformed(ActionEvent e) {
                ed.save();
            }
        };
        saveMi = new JMenuItem(save);
        saveMi.setMnemonic(KeyEvent.VK_S);
        saveMi.setAccelerator(
                KeyStroke.getKeyStroke(KeyEvent.VK_S, InputEvent.CTRL_DOWN_MASK));
        
        //debug
        //复制节点数据到系统剪切板
        Action debugCopyData = new AbstractAction("复制节点数据(1)") {
            private static final long serialVersionUID = -7166740287624602439L;
            public void actionPerformed(ActionEvent paramActionEvent) {
                ed.debugCopyNodeData();
            }
        };
        debugMi = new JMenuItem(debugCopyData);
        debugMi.setMnemonic(KeyEvent.VK_1);
        debugMi.setAccelerator(
                KeyStroke.getKeyStroke(KeyEvent.VK_1, InputEvent.CTRL_DOWN_MASK, true));
        
        pm.add(openMi);
        pm.addSeparator();
        pm.add(ignoredMi);
        pm.add(updateLinkMi);
        pm.add(updateRightSingleMi);
        pm.add(updateRightBatchMi);
        pm.addSeparator();
        pm.add(deleteMi);
    }
    
    /**
     * 
     */
    public void show(Component paramComponent, int paramInt1, int paramInt2) {
        pm.show(paramComponent, paramInt1, paramInt2);
    }
    
    /**
     * 绑定快捷键和事件
     * @param com
     */
    public void bindHotkeys(JComponent com) {
        //绑定打开事件
        bindHotkeys(com, openMi);
        //绑定忽略事件
        bindHotkeys(com, ignoredMi);
        //绑定更新link事件
        bindHotkeys(com, updateLinkMi);
        //绑定更新事件
        bindHotkeys(com, updateRightSingleMi);
        //绑定批量更新事件
        bindHotkeys(com, updateRightBatchMi);
        //绑定删除事件
        bindHotkeys(com, deleteMi);
        //绑定保存事件
        bindHotkeys(com, saveMi);
        //debug
        bindHotkeys(com, debugMi);
    }
    
    /**
     * 将菜单快捷键绑定到控件上
     * 当焦点在窗口中时,会触发绑定事件
     * 所以整个窗口中只有一个控件绑定就可以了
     * @param com 控件
     * @param item 菜单
     */
    private void bindHotkeys(JComponent com, JMenuItem item) {
        Action action = item.getAction();
        Object actionKey = action.getValue(Action.NAME);
        //com.getInputMap().put(item.getAccelerator(), actionKey);
        com.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(item.getAccelerator(), actionKey);
        com.getActionMap().put(actionKey, action);
    }
}