123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- <!DOCTYPE html>
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>The source code</title>
- <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />
- <script type="text/javascript" src="../resources/prettify/prettify.js"></script>
- <style type="text/css">
- .highlight { display: block; background-color: #ddd; }
- </style>
- <script type="text/javascript">
- function highlight() {
- document.getElementById(location.hash.replace(/#/, "")).className = "highlight";
- }
- </script>
- </head>
- <body onload="prettyPrint(); highlight();">
- <pre class="prettyprint lang-js"><span id='Ext-view-DragZone'>/**
- </span> * @private
- */
- Ext.define('Ext.view.DragZone', {
- extend: 'Ext.dd.DragZone',
- containerScroll: false,
- constructor: function(config) {
- var me = this,
- view,
- ownerCt,
- el;
- Ext.apply(me, config);
- // Create a ddGroup unless one has been configured.
- // User configuration of ddGroups allows users to specify which
- // DD instances can interact with each other. Using one
- // based on the id of the View would isolate it and mean it can only
- // interact with a DropZone on the same View also using a generated ID.
- if (!me.ddGroup) {
- me.ddGroup = 'view-dd-zone-' + me.view.id;
- }
- // Ext.dd.DragDrop instances are keyed by the ID of their encapsulating element.
- // So a View's DragZone cannot use the View's main element because the DropZone must use that
- // because the DropZone may need to scroll on hover at a scrolling boundary, and it is the View's
- // main element which handles scrolling.
- // We use the View's parent element to drag from. Ideally, we would use the internal structure, but that
- // is transient; DataView's recreate the internal structure dynamically as data changes.
- // TODO: Ext 5.0 DragDrop must allow multiple DD objects to share the same element.
- view = me.view;
- ownerCt = view.ownerCt;
- // We don't just grab the parent el, since the parent el may be
- // some el injected by the layout
- if (ownerCt) {
- el = ownerCt.getTargetEl().dom;
- } else {
- el = view.el.dom.parentNode;
- }
- me.callParent([el]);
- me.ddel = Ext.get(document.createElement('div'));
- me.ddel.addCls(Ext.baseCSSPrefix + 'grid-dd-wrap');
- },
- init: function(id, sGroup, config) {
- this.initTarget(id, sGroup, config);
- this.view.mon(this.view, {
- itemmousedown: this.onItemMouseDown,
- scope: this
- });
- },
- onValidDrop: function(target, e, id) {
- this.callParent();
- // focus the view that the node was dropped onto so that keynav will be enabled.
- target.el.focus();
- },
-
- onItemMouseDown: function(view, record, item, index, e) {
- if (!this.isPreventDrag(e, record, item, index)) {
- // Since handleMouseDown prevents the default behavior of the event, which
- // is to focus the view, we focus the view now. This ensures that the view
- // remains focused if the drag is cancelled, or if no drag occurs.
- this.view.focus();
- this.handleMouseDown(e);
- // If we want to allow dragging of multi-selections, then veto the following handlers (which, in the absence of ctrlKey, would deselect)
- // if the mousedowned record is selected
- if (view.getSelectionModel().selectionMode == 'MULTI' && !e.ctrlKey && view.getSelectionModel().isSelected(record)) {
- return false;
- }
- }
- },
- // private template method
- isPreventDrag: function(e) {
- return false;
- },
- getDragData: function(e) {
- var view = this.view,
- item = e.getTarget(view.getItemSelector());
- if (item) {
- return {
- copy: view.copy || (view.allowCopy && e.ctrlKey),
- event: new Ext.EventObjectImpl(e),
- view: view,
- ddel: this.ddel,
- item: item,
- records: view.getSelectionModel().getSelection(),
- fromPosition: Ext.fly(item).getXY()
- };
- }
- },
- onInitDrag: function(x, y) {
- var me = this,
- data = me.dragData,
- view = data.view,
- selectionModel = view.getSelectionModel(),
- record = view.getRecord(data.item),
- e = data.event;
- // Update the selection to match what would have been selected if the user had
- // done a full click on the target node rather than starting a drag from it
- if (!selectionModel.isSelected(record)) {
- selectionModel.select(record, true);
- }
- data.records = selectionModel.getSelection();
- me.ddel.update(me.getDragText());
- me.proxy.update(me.ddel.dom);
- me.onStartDrag(x, y);
- return true;
- },
- getDragText: function() {
- var count = this.dragData.records.length;
- return Ext.String.format(this.dragText, count, count == 1 ? '' : 's');
- },
- getRepairXY : function(e, data){
- return data ? data.fromPosition : false;
- }
- });</pre>
- </body>
- </html>
|