1 *&---------------------------------------------------------------------*
2 *& Report RSDEMO_DRAG_DROP_EDIT_TREE *
3 *& *
4 *&---------------------------------------------------------------------*
5 *& *
6 *& *
7 *&---------------------------------------------------------------------*
8
9 REPORT rsdemo_drag_drop_edit_tree .
10 DATA ok_code TYPE sy-ucomm.
11 DATA node_itab_left LIKE node_str OCCURS 0.
12 DATA node_itab_right LIKE node_str OCCURS 0.
13 DATA node LIKE node_str.
14
15 DATA container TYPE REF TO cl_gui_custom_container.
16 DATA splitter TYPE REF TO cl_gui_easy_splitter_container.
17 DATA right TYPE REF TO cl_gui_container.
18 DATA left TYPE REF TO cl_gui_container.
19
20 DATA tree_right TYPE REF TO cl_gui_simple_tree.
21 DATA tree_left TYPE REF TO cl_gui_simple_tree.
22
23 DATA behaviour_left TYPE REF TO cl_dragdrop.
24 DATA behaviour_right TYPE REF TO cl_dragdrop.
25
26 DATA handle_tree_left TYPE i.
27 DATA handle_tree_right TYPE i.
28
29 *---------------------------------------------------------------------*
30 * CLASS lcl_treeobject DEFINITION
31 *---------------------------------------------------------------------*
32 * Definition of Data Container *
33 *---------------------------------------------------------------------*
34 CLASS lcl_drag_object DEFINITION.
35 PUBLIC SECTION.
36 DATA text TYPE STANDARD TABLE OF mtreesnode-text.
37 ENDCLASS.
38
39
40 *---------------------------------------------------------------------*
41 * CLASS dragdrop_receiver DEFINITION
42 *---------------------------------------------------------------------*
43 * ........ *
44 *---------------------------------------------------------------------*
45 CLASS lcl_dragdrop_receiver DEFINITION.
46 PUBLIC SECTION.
47 METHODS:
48 flavor_select FOR EVENT on_drop_get_flavor OF cl_gui_simple_tree
49 IMPORTING node_key flavors drag_drop_object,
50 left_drag FOR EVENT on_drag_multiple OF cl_gui_simple_tree
51 IMPORTING node_key_table drag_drop_object,
52 right_drop FOR EVENT on_drop OF cl_gui_simple_tree
53 IMPORTING node_key drag_drop_object,
54 drop_complete FOR EVENT on_drop_complete_multiple OF
55 cl_gui_simple_tree
56 IMPORTING node_key_table drag_drop_object.
57
58 ENDCLASS.
59
60 ************************************************************************
61
62
63 ************************************************************************
64
65 START-OF-SELECTION.
66 CALL SCREEN 100.
67 *&---------------------------------------------------------------------*
68 *& Module START OUTPUT
69 *&---------------------------------------------------------------------*
70 * text
71 *----------------------------------------------------------------------*
72 MODULE start OUTPUT.
73 SET PF-STATUS 'BASE'.
74 IF container is initial.
75 CREATE OBJECT container
76 EXPORTING container_name = 'CONTAINER'.
77 CREATE OBJECT splitter
78 EXPORTING parent = container
79 orientation = 1.
80 left = splitter->top_left_container.
81 right = splitter->bottom_right_container.
82 CREATE OBJECT tree_right
83 EXPORTING parent = right
84 node_selection_mode = tree_right->node_sel_mode_multiple.
85 CREATE OBJECT tree_left
86 EXPORTING parent = left
87 node_selection_mode = tree_left->node_sel_mode_multiple.
88
89 * Definition of drag drop behaviour
90 CREATE OBJECT behaviour_left.
91 CALL METHOD behaviour_left->add
92 EXPORTING
93 flavor = 'Tree_move'
94 dragsrc = 'X'
95 droptarget = ' '
96 effect = cl_dragdrop=>copy.
97 CALL METHOD behaviour_left->add
98 EXPORTING
99 flavor = 'Tree_copy'
100 dragsrc = 'X'
101 droptarget = ' '
102 effect = cl_dragdrop=>copy.
103
104 CALL METHOD behaviour_left->get_handle
105 IMPORTING handle = handle_tree_left.
106
107 * Drag Drop behaviour of tree control nodes are defined in the node
108 * structure
109 PERFORM fill_tree CHANGING handle_tree_left node_itab_left.
110 CALL METHOD tree_left->add_nodes
111 EXPORTING node_table = node_itab_left
112 table_structure_name = 'NODE_STR'.
113
114 CREATE OBJECT behaviour_right.
115
116 CALL METHOD behaviour_right->add
117 EXPORTING
118 flavor = 'Tree_copy'
119 dragsrc = ' '
120 droptarget = 'X'
121 effect = cl_dragdrop=>copy.
122 CALL METHOD behaviour_right->add
123 EXPORTING
124 flavor = 'Tree_move'
125 dragsrc = ' '
126 droptarget = 'X'
127 effect = cl_dragdrop=>copy.
128 CALL METHOD behaviour_right->get_handle
129 IMPORTING handle = handle_tree_right.
130
131 PERFORM fill_tree CHANGING handle_tree_right node_itab_right.
132 CALL METHOD tree_right->add_nodes
133 EXPORTING node_table = node_itab_right
134 table_structure_name = 'NODE_STR'.
135
136 * registration of drag and drop events
137 DATA dragdrop TYPE REF TO lcl_dragdrop_receiver.
138 CREATE OBJECT dragdrop.
139 SET HANDLER dragdrop->flavor_select FOR tree_right.
140 SET HANDLER dragdrop->left_drag FOR tree_left.
141 SET HANDLER dragdrop->right_drop FOR tree_right.
142 SET HANDLER dragdrop->drop_complete FOR tree_left.
143
144
145 CALL METHOD tree_left->expand_node
146 EXPORTING node_key = 'Root'.
147 CALL METHOD tree_right->expand_node
148 EXPORTING node_key = 'Root'.
149
150 ENDIF.
151 ENDMODULE. " START OUTPUT
152 *&---------------------------------------------------------------------*
153 *& Module EXIT INPUT
154 *&---------------------------------------------------------------------*
155 * text
156 *----------------------------------------------------------------------*
157 MODULE exit INPUT.
158 LEAVE PROGRAM.
159 ENDMODULE. " EXIT INPUT
160 *&---------------------------------------------------------------------*
161 *& Form fill_tree
162 *&---------------------------------------------------------------------*
163 * text
164 *----------------------------------------------------------------------*
165 * --> p1 text
166 * <-- p2 text
167 *----------------------------------------------------------------------*
168 FORM fill_tree CHANGING handle_tree TYPE i
169 node_itab LIKE node_itab_left.
170 DATA: node LIKE mtreesnode.
171
172 * node table of the left tree
173 CLEAR node.
174 node-node_key = 'Root'.
175 node-isfolder = 'X'.
176 node-text = 'Texte'.
177 node-dragdropid = ' '.
178 APPEND node TO node_itab.
179
180 CLEAR node.
181 node-node_key = 'Child1'.
182 node-relatkey = 'Root'.
183 node-isfolder = 'X'.
184 node-relatship = cl_gui_simple_tree=>relat_last_child.
185 node-text = 'DragDrop Text 1'.
186 node-dragdropid = handle_tree. " handle of behaviour
187 APPEND node TO node_itab.
188
189 CLEAR node.
190 node-node_key = 'Child2'.
191 node-relatkey = 'Root'.
192 node-isfolder = 'X'.
193 node-relatship = cl_gui_simple_tree=>relat_last_child.
194 node-text = 'DragDrop Text 2'.
195 node-dragdropid = handle_tree. " handle of behaviour
196 APPEND node TO node_itab.
197
198
199 ENDFORM. " fill_tree
200 *&---------------------------------------------------------------------*
201 *& Module USER_COMMAND_0100 INPUT
202 *&---------------------------------------------------------------------*
203 * text
204 *----------------------------------------------------------------------*
205 MODULE user_command_0100 INPUT.
206 CALL METHOD cl_gui_cfw=>dispatch.
207 ENDMODULE. " USER_COMMAND_0100 INPUT
208
209
210 *---------------------------------------------------------------------*
211 * CLASS DRAGDROP_RECEIVER IMPLEMENTATION
212 *---------------------------------------------------------------------*
213 * ........ *
214 *---------------------------------------------------------------------*
215 CLASS lcl_dragdrop_receiver IMPLEMENTATION.
216 METHOD flavor_select.
217 IF node_key <> 'Root'.
218 SEARCH flavors FOR 'Tree_move'.
219 IF sy-subrc = 0.
220 CALL METHOD drag_drop_object->set_flavor
221 EXPORTING newflavor = 'Tree_move'.
222 ELSE.
223 CALL METHOD drag_drop_object->abort.
224 ENDIF.
225 ELSE.
226 SEARCH flavors FOR 'Tree_copy'.
227 IF sy-subrc = 0.
228 CALL METHOD drag_drop_object->set_flavor
229 EXPORTING newflavor = 'Tree_copy'.
230 ELSE.
231 CALL METHOD drag_drop_object->abort.
232 ENDIF.
233 ENDIF.
234
235 ENDMETHOD.
236 METHOD left_drag.
237 DATA drag_object TYPE REF TO lcl_drag_object.
238 DATA node_key TYPE node_str-node_key.
239 CREATE OBJECT drag_object.
240 LOOP AT node_key_table INTO node_key.
241 READ TABLE node_itab_left WITH KEY node_key = node_key
242 INTO node.
243
244 APPEND node-text TO drag_object->text.
245 ENDLOOP.
246 drag_drop_object->object = drag_object.
247 ENDMETHOD.
248
249 METHOD right_drop.
250 DATA drag_object TYPE REF TO lcl_drag_object.
251 data new_nodes like node_itab_right.
252 data new_node type node_str.
253 CATCH SYSTEM-EXCEPTIONS move_cast_error = 1.
254 drag_object ?= drag_drop_object->object.
255 ENDCATCH.
256 IF sy-subrc = 1.
257 " data object has unexpected class
258 " => cancel Drag & Drop operation
259 CALL METHOD drag_drop_object->abort.
260 EXIT.
261 ENDIF.
262 loop at drag_object->text into new_node-text.
263 perform add_node changing node_key new_node new_nodes
264 node_itab_left.
265 endloop.
266 call method tree_right->add_nodes
267 exporting node_table = new_nodes
268 table_structure_name = 'NODE_STR'.
269 ENDMETHOD.
270 METHOD drop_complete.
271 DATA node_key TYPE node_str-node_key.
272 IF drag_drop_object->flavor = 'Tree_move_to_Edit'.
273 LOOP AT node_key_table INTO node_key.
274 CALL METHOD tree_left->delete_node
275 EXPORTING node_key = node_key.
276 DELETE node_itab_left WHERE node_key = node_key.
277 ENDLOOP.
278 ENDIF.
279
280 ENDMETHOD.
281 ENDCLASS.
282
283 *&---------------------------------------------------------------------*
284 *& Form ADD_NODE
285 *&---------------------------------------------------------------------*
286 * text
287 *----------------------------------------------------------------------*
288 * <--P_NEW_NODE text
289 * <--P_NEW_NODES text
290 * <--P_NODE_ITAB_LEFT text
291 *----------------------------------------------------------------------*
292 FORM ADD_NODE CHANGING node_key
293 NEW_NODE type node_str
294 NEW_NODES like node_itab_left
295 NODE_ITAB_LEFT like node_itab_left.
296 data lines type i.
297 describe table node_itab_left lines lines.
298 new_node-node_key = lines.
299 new_node-isfolder = 'X'.
300 new_node-dragdropid = handle_tree_right.
301 new_node-relatkey = node_key.
302
303 APPEND new_node TO new_nodes.
304 append new_node to node_itab_left.
305
306 ENDFORM. " ADD_NODE

SAP Drag or drop tree的更多相关文章

  1. 20 Best Drag and Drop jQuery Plugins--reference

    reference from:http://dizyne.net/20-best-drag-drop-jquery-plugins/ jQuery has done a great job repla ...

  2. delphi Drag and Drop sample 鼠标拖放操作实例

    Drag and Drop is a common operation that makes the interface user friendly: a user can drag/drop inf ...

  3. HTML5 之拖放(drag与drop)

    拖放(Drag 和 drop)是 HTML5 标准的组成部分. 拖放是一种常见的特性,即抓取对象以后拖到另一个位置. 在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放. HTML5 拖放实例 ...

  4. 通过HTML5的Drag and Drop生成拓扑图片Base64信息

    HTML5 原生的 Drag and Drop是很不错的功能,网上使用例子较多如 http://html5demos.com/drag ,但这些例子大部分没实际用途,本文将搞个有点使用价值的例子,通过 ...

  5. 基于HTML5的Drag and Drop生成图片Base64信息

    HTML5的Drag and Drop是很不错的功能,网上使用例子较多如 http://html5demos.com/drag ,但这些例子大部分没实际用途,本文将搞个有点使用价值的例子,通过Drag ...

  6. Android 用户界面---拖放(Drag and Drop)(三)

      设计拖放操作 本节主要内容如下: 1.  如何开始拖拽: 2.  在拖拽期间如何响应事件: 3.  如何响应落下事件: 4.  如何结束拖放操作. 开始拖拽 用户使用一个拖拽手势开始拖拽,通常是在 ...

  7. Android 用户界面---拖放(Drag and Drop)(二)

      拖拽事件监听器和回调方法 View对象既可以用实现View.OnDragListener接口的拖放事件监听器,也可以用View对象的onDragEvent(DragEvent)回调方法来接收拖拽事 ...

  8. Android 用户界面---拖放(Drag and Drop)(一)

    用Android的拖放框架,能够允许用户使用图形化的拖放手势,把数据从当前布局中的一个View对象中移到另一个View对象中.这个框架包括:拖拽事件类.拖拽监听器.以及辅助的方法和类. 尽管这个框架主 ...

  9. [Javascript + rxjs] Simple drag and drop with Observables

    Armed with the map and concatAll functions, we can create fairly complex interactions in a simple wa ...

随机推荐

  1. js 递归求1/2+1/4+1/6+....1/n的和,和1/1+1/3+1/5+.....+1/n的和

        function fun1(n) {         if (n == 2) {             return 1 / 2;         } if (n == 1) {       ...

  2. 2021.08.01 P3377 左偏树模板

    2021.08.01 P3377 左偏树模板 P3377 [模板]左偏树(可并堆) - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) #include<iostream> ...

  3. 在windows上安装elasticsearch7.6

    在windows上安装elasticsearch7.6 安装Java1.8 下载Java1.8 提取码:yi0c 链接:https://pan.baidu.com/s/1mNd2Yg-k6ob91bO ...

  4. Dapr 不是服务网格,只是我长的和他很像

    概述 我们快速看一遍官方文档:https://docs.dapr.io/concepts/service-mesh/#how-dapr-and-service-meshes-compare ,看看 D ...

  5. 翻译:使用 CoreWCF 升级 WCF 服务到 .NET 6

    翻译:使用 CoreWCF 升级 WCF 服务到 .NET 6 原文地址:https://devblogs.microsoft.com/dotnet/upgrading-a-wcf-service-t ...

  6. css,html实现元素超出部分省略号

    .line-1 { height: 25px; width: 200px; overflow: hidden; text-overflow: ellipsis; display: -webkit-bo ...

  7. JUC的数据库连接池小练习

    JUC练习数据库连接池实现 通过一个连接数组来充当连接池 一个原子的标记数组 通过cas来保持多线程下的安全,用synchronized来进行暂停和唤醒 @Slf4j public class MyC ...

  8. 【数据库】MYSQL如何添加索引

    1.使用ALTER TABLE语句创建索性 应用于表创建完毕之后再添加. 1.1语法 ALTER TABLE 表名 ADD 索引类型 (unique,primary key,fulltext,inde ...

  9. Python数据分析--工具安装及Numpy介绍(1)

    Anaconda 是一个跨平台的版本,通过命令行来管理安装包.进行大规模数据处理.预测分析和科学计算.它包括近 200 个工具包,大数据处理需要用到的常见包有 NumPy . SciPy . pand ...

  10. 好客租房21-react组件的两种创建方式(函数组件)

    1使用函数创建组件 函数组件:使用js的函数或者箭头函数创建的组件 约定1:函数组件名称必须以 开头 约定2:函数组件必须有返回值 表示该组件的结构 如果返回值为null 表示不渲染任何内容 2.1使 ...