Skip to content

Commit

Permalink
Merge pull request #1 from gottadiveintopython/example_gridlayout
Browse files Browse the repository at this point in the history
add DraggableBoxLayoutBehavior and DraggableGridLayoutBehavior
  • Loading branch information
matham committed Sep 28, 2019
2 parents d970db8 + 439fd5d commit 2fe9e1e
Showing 1 changed file with 35 additions and 9 deletions.
44 changes: 35 additions & 9 deletions kivy_garden/drag_n_drop/__init__.py
Expand Up @@ -119,7 +119,8 @@ def initiate_drag(self):

__all__ = (
'DraggableObjectBehavior', 'DraggableLayoutBehavior', 'DraggableController',
'PreviewWidget', 'SpacerWidget')
'PreviewWidget', 'SpacerWidget', 'DraggableBoxLayoutBehavior',
'DraggableGridLayoutBehavior')

__version__ = '0.1.0'

Expand Down Expand Up @@ -472,7 +473,8 @@ class DraggableLayoutBehavior(object):

def __init__(self, **kwargs):
super(DraggableLayoutBehavior, self).__init__(**kwargs)
self.spacer_widget = SpacerWidget()
if self.spacer_widget is None:
self.spacer_widget = SpacerWidget()
self.fbind('spacer_props', self._track_spacer_props)
self._track_spacer_props()

Expand Down Expand Up @@ -676,9 +678,39 @@ def on_touch_up(self, touch):
return True


class DraggableBoxLayoutBehavior(DraggableLayoutBehavior):
def compare_pos_to_widget(self, widget, pos):
if self.orientation == 'vertical':
return 'before' if pos[1] >= widget.center_y else 'after'
return 'before' if pos[0] < widget.center_x else 'after'


class DraggableGridLayoutBehavior(DraggableLayoutBehavior):
def compare_pos_to_widget(self, widget, pos):
x, y = pos
if y > widget.top:
return 'before'
elif y < widget.y:
return 'after'
elif x > widget.right:
return 'after'
elif x < widget.x:
return 'before'
else:
spacer = self.spacer_widget
if widget.parent is spacer.parent:
children = widget.parent.children
if children.index(spacer) > children.index(widget):
return 'after'
return 'before'


Factory.register('DraggableObjectBehavior', DraggableObjectBehavior)
Factory.register('DraggableController', DraggableController)
Factory.register('DraggableLayoutBehavior', DraggableLayoutBehavior)
Factory.register('DraggableBoxLayoutBehavior', DraggableBoxLayoutBehavior)
Factory.register('DraggableGridLayoutBehavior', DraggableGridLayoutBehavior)


if __name__ == '__main__':
from kivy.app import App
Expand All @@ -687,13 +719,7 @@ def on_touch_up(self, touch):

drag_controller = DraggableController()

class DraggableBoxLayout(DraggableLayoutBehavior, BoxLayout):

def compare_pos_to_widget(self, widget, pos):
if self.orientation == 'vertical':
return 'before' if pos[1] >= widget.center_y else 'after'
return 'before' if pos[0] < widget.center_x else 'after'

class DraggableBoxLayout(DraggableBoxLayoutBehavior, BoxLayout):
def handle_drag_release(self, index, drag_widget):
self.add_widget(drag_widget, index)

Expand Down

0 comments on commit 2fe9e1e

Please sign in to comment.