示例#1
0
文件: DND.cs 项目: wshcdr/wxnet
        //---------------------------------------------------------------------

        public override DragResult OnData(int x, int y, DragResult def)
        {
            if (!GetData())
            {
                return(DragResult.wxDragNone);
            }

            TextDataObject dobj = (TextDataObject)m_dataObject;

            return(OnDropText(x, y, dobj.Text) ? def : DragResult.wxDragNone);
        }
示例#2
0
文件: DND.cs 项目: wshcdr/wxnet
        //---------------------------------------------------------------------

        public override DragResult OnData(int x, int y, DragResult def)
        {
            if (!GetData())
            {
                return(DragResult.wxDragNone);
            }

            FileDataObject dobj = (FileDataObject)m_dataObject;

            return(OnDropFiles(x, y, dobj.Filenames) ? def : DragResult.wxDragNone);
        }
示例#3
0
文件: DND.cs 项目: wshcdr/wxnet
        //---------------------------------------------------------------------

        public virtual DragResult OnEnter(int x, int y, DragResult def)
        {
            return((DragResult)wxDropTarget_OnEnter(wxObject, x, y, (int)def));
        }
示例#4
0
文件: DND.cs 项目: wshcdr/wxnet
        //---------------------------------------------------------------------

        public abstract DragResult OnData(int x, int y, DragResult def);
示例#5
0
    public static DragResult                      Draggable(Rect position, Int32 elementHeight, List <T> elements, Action <Rect, T, Boolean, Int32> drawElementAction, Func <T, Boolean> draggableFilter = null)
    {
        if (elements.Count <= 0)
        {
            return(new DragResult( ));
        }

        draggableFilter = draggableFilter ?? (o =>
        {
            if (o == null)
            {
                return(false);
            }

            if (elements.Count <= 1)
            {
                return(false);
            }

            if (IsDefaultItem(o))
            {
                return(false);
            }

            return(true);
        });

        Rect rect;
        var  controlID = GUIUtility.GetControlID(DragGUIHash, FocusType.Passive);
        var  r         = position;

        r.height = elementHeight;
        var index = 0;

        if ((GUIUtility.hotControl == controlID) && (Event.current.type == EventType.Repaint))
        {
            for (var i = 0; i < elements.Count; i++)
            {
                if (i != _draggedElement)
                {
                    if (IsDefaultItem(elements[i]))
                    {
                        index = i;
                        i++;
                    }
                    else
                    {
                        r.y = position.y + (_positions[i] * elementHeight);
                        drawElementAction(r, elements[i], false, i);
                    }
                }
            }
            rect = new Rect(r.x, position.y + (_positions[index] * elementHeight), r.width, ((_positions[index + 1] - _positions[index]) + 1f) * elementHeight);
        }
        else
        {
            for (var i = 0; i < elements.Count; i++)
            {
                r.y = position.y + (i * elementHeight);
                if (IsDefaultItem(elements[i]))
                {
                    index = i;
                    i++;
                }
                else
                {
                    drawElementAction(r, elements[i], false, i);
                }
            }
            rect = new Rect(r.x, position.y + (index * elementHeight), r.width, (float)(elementHeight * 2));
        }

        //GUI.Label(rect, ScriptExecutionOrderInspector._styles.defaultTimeContent, ScriptExecutionOrderInspector._styles.defaultTime);
        var flag = rect.height > (elementHeight * 2.5f);

        if (GUIUtility.hotControl == controlID)
        {
            if (flag)
            {
                GUI.color = new Color(1f, 1f, 1f, 0.5f);
            }
            r.y = position.y + (_positions[_draggedElement] * elementHeight);
            drawElementAction(r, elements[_draggedElement], true, _draggedElement);
            GUI.color = Color.white;
        }

        var result = new DragResult();

        result.PreviousIndex = _draggedElement;
        switch (Event.current.GetTypeForControl(controlID))
        {
        case EventType.MouseDown:
            if (position.Contains(Event.current.mousePosition))
            {
                GUIUtility.keyboardControl = 0;
                _draggedElement            = Mathf.FloorToInt((Event.current.mousePosition.y - position.y) / ((float)elementHeight));
                result.PreviousIndex       = _draggedElement;

                // Certain conditions where you can't drag the item
                if (!draggableFilter(elements[_draggedElement]))
                {
                    return(result);
                }

                _positions = new float[elements.Count];
                _targets   = new int[elements.Count];
                for (var i = 0; i < elements.Count; i++)
                {
                    _targets[i]   = i;
                    _positions[i] = i;
                }
                GUIUtility.hotControl = controlID;
                Event.current.Use();
            }
            return(result);

        case EventType.MouseUp:
            if (GUIUtility.hotControl == controlID)
            {
                result.NewIndex       = _targets[_draggedElement];
                _targets              = null;
                _positions            = null;
                _draggedElement       = -1;
                GUIUtility.hotControl = 0;
                Event.current.Use();
                return(result);
            }
            return(result);

        case EventType.MouseMove:
        case EventType.KeyDown:
        case EventType.KeyUp:
        case EventType.ScrollWheel:
            return(result);

        case EventType.MouseDrag:
            if (GUIUtility.hotControl == controlID)
            {
                _positions[_draggedElement] = ((Event.current.mousePosition.y - position.y) / ((float)elementHeight)) - 0.5f;
                _positions[_draggedElement] = Mathf.Clamp(_positions[_draggedElement], 0f, (float)(elements.Count - 1));
                var elementToPush = Mathf.RoundToInt(_positions[_draggedElement]);

                if (elementToPush != _targets[_draggedElement])
                {
                    for (var i = 0; i < elements.Count; i++)
                    {
                        _targets[i] = i;
                    }

                    var num9 = (elementToPush <= _draggedElement) ? 1 : -1;
                    for (var i = _draggedElement; i != elementToPush; i -= num9)
                    {
                        _targets[i - num9] = i;
                    }

                    _targets[_draggedElement] = elementToPush;
                }
                Event.current.Use();
                return(result);
            }
            return(result);

        case EventType.Repaint:
            if (GUIUtility.hotControl == controlID)
            {
                for (var i = 0; i < elements.Count; i++)
                {
                    if (i != _draggedElement)
                    {
                        _positions[i] = Mathf.MoveTowards(_positions[i], (float)_targets[i], 0.075f);
                    }
                }

                //GUIView.current.Repaint();
            }
            return(result);
        }

        return(result);
    }
 internal MoveItemRequestRejectedEvent(DragResult reason)
 {
     Reason = reason;
 }
示例#7
0
 protected override bool OnDragFailed(Gdk.DragContext drag_context, DragResult drag_result)
 {
     App.Current.DragContext.SourceDataType = null;
     App.Current.DragContext.SourceData     = null;
     return(base.OnDragFailed(drag_context, drag_result));
 }