Select and drag multiple entries. Close #74
This commit is contained in:
@@ -143,6 +143,9 @@
|
|||||||
(method isSelected [:Entry e]
|
(method isSelected [:Entry e]
|
||||||
!(= -1 (_selectedEntries.indexOf e)))
|
!(= -1 (_selectedEntries.indexOf e)))
|
||||||
|
|
||||||
|
(method getSelectedEntries []
|
||||||
|
(_selectedEntries.copy))
|
||||||
|
|
||||||
(defNew [&prop :Archive archive
|
(defNew [&prop :Archive archive
|
||||||
&prop :ArchiveUI ui]
|
&prop :ArchiveUI ui]
|
||||||
[&mut :Array<Entry> _selectedEntries []
|
[&mut :Array<Entry> _selectedEntries []
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
(loadFrom "nat-archive-tool" "src/nat/Lib.kiss")
|
(loadFrom "nat-archive-tool" "src/nat/Lib.kiss")
|
||||||
|
|
||||||
(defNew [:String positionKey
|
(defNew [&prop :EntrySpriteSystem system
|
||||||
|
&prop :String positionKey
|
||||||
&prop :Archive archive
|
&prop :Archive archive
|
||||||
&prop :Entry e
|
&prop :Entry e
|
||||||
&prop :ArchiveController controller]
|
&prop :ArchiveController controller]
|
||||||
@@ -21,15 +22,42 @@
|
|||||||
(enableMouseDrag)
|
(enableMouseDrag)
|
||||||
}))
|
}))
|
||||||
|
|
||||||
**(set mousePressedCallback
|
(set mouseStartDragCallback
|
||||||
->[self _x _y]
|
->[self _dx _dy]
|
||||||
{
|
(doFor sprite ~(system.getSelectedSprites)
|
||||||
(controller.ToggleSelectEntry e)
|
(unless (= sprite.e.id this.e.id)
|
||||||
})
|
(sprite.fixToSprite this))))
|
||||||
|
|
||||||
(set mouseStopDragCallback
|
(set mouseStopDragCallback
|
||||||
->[self _dx _dy]
|
->[self _dx _dy]
|
||||||
(withWritableComponents archive e [positions Positions]
|
{
|
||||||
(dictSet positions positionKey (object x (cast this.x Float) y (cast this.y Float) z 0.0)))))
|
(savePos)
|
||||||
|
(doFor sprite (system.getSelectedSprites)
|
||||||
|
(unless (= sprite.e.id this.e.id)
|
||||||
|
(sprite.endFixToSprite)))
|
||||||
|
}))
|
||||||
|
|
||||||
|
(prop &mut :EntrySprite fixedToSprite)
|
||||||
|
(prop &mut :FlxPoint fixedOffset)
|
||||||
|
|
||||||
|
(method savePos []
|
||||||
|
(withWritableComponents archive e [positions Positions]
|
||||||
|
(dictSet positions positionKey (object x (cast this.x Float) y (cast this.y Float) z 0.0))))
|
||||||
|
|
||||||
|
(method &override :Void update [:Float elapsed]
|
||||||
|
(super.update elapsed)
|
||||||
|
(when fixedToSprite
|
||||||
|
(set x (+ fixedToSprite.x fixedOffset.x))
|
||||||
|
(set y (+ fixedToSprite.y fixedOffset.y))))
|
||||||
|
|
||||||
|
(method fixToSprite [:EntrySprite sprite]
|
||||||
|
(set fixedToSprite sprite)
|
||||||
|
(set fixedOffset (new FlxPoint (- x sprite.x) (- y sprite.y))))
|
||||||
|
|
||||||
|
|
||||||
|
(method endFixToSprite []
|
||||||
|
(savePos)
|
||||||
|
(set fixedToSprite null))
|
||||||
|
|
||||||
(method updateColor []
|
(method updateColor []
|
||||||
(if (controller.isSelected e)
|
(if (controller.isSelected e)
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
(withWritableComponents archive e [positions Positions]
|
(withWritableComponents archive e [positions Positions]
|
||||||
(when !(positions.exists positionKey)
|
(when !(positions.exists positionKey)
|
||||||
(dictSet positions positionKey (object x 0.0 y 0.0 z 0.0))))
|
(dictSet positions positionKey (object x 0.0 y 0.0 z 0.0))))
|
||||||
(let [sprite (new EntrySprite positionKey archive e controller)]
|
(let [sprite (new EntrySprite this positionKey archive e controller)]
|
||||||
(playState.entryGroup.add sprite)
|
(playState.entryGroup.add sprite)
|
||||||
(dictSet sprites e.id sprite))))
|
(dictSet sprites e.id sprite))))
|
||||||
|
|
||||||
@@ -28,3 +28,6 @@
|
|||||||
// When an Entry is hidden, we can bet the user doesn't want it selected anymore
|
// When an Entry is hidden, we can bet the user doesn't want it selected anymore
|
||||||
(controller.DeSelectEntry e)
|
(controller.DeSelectEntry e)
|
||||||
}))
|
}))
|
||||||
|
|
||||||
|
(method getSelectedSprites []
|
||||||
|
(filter (for e (controller.getSelectedEntries) (dictGet sprites e.id))))
|
||||||
@@ -47,11 +47,14 @@
|
|||||||
// mouseDown
|
// mouseDown
|
||||||
->s {
|
->s {
|
||||||
(set mouseDown (FlxG.mouse.getScreenPosition))
|
(set mouseDown (FlxG.mouse.getScreenPosition))
|
||||||
(controller.SelectEntries [])
|
(let [&mut clickedOnSomething false]
|
||||||
(entryGroup.forEach
|
(entryGroup.forEach
|
||||||
->entrySprite
|
->entrySprite
|
||||||
(when (.containsPoint (entrySprite.getScreenBounds) (FlxG.mouse.getScreenPosition))
|
(when (.containsPoint (entrySprite.getScreenBounds) (FlxG.mouse.getScreenPosition))
|
||||||
(controller.SelectEntry entrySprite.e)))
|
(set clickedOnSomething true)
|
||||||
|
(unless (controller.isSelected entrySprite.e)
|
||||||
|
(controller.SelectEntry entrySprite.e))))
|
||||||
|
(unless clickedOnSomething (controller.SelectEntries [])))
|
||||||
}
|
}
|
||||||
// mouseUp
|
// mouseUp
|
||||||
->s {
|
->s {
|
||||||
@@ -62,6 +65,7 @@
|
|||||||
->s {}
|
->s {}
|
||||||
// mouseOut
|
// mouseOut
|
||||||
->s {}
|
->s {}
|
||||||
|
// also send events to sprites that overlap the dragging background
|
||||||
true
|
true
|
||||||
true
|
true
|
||||||
false)
|
false)
|
||||||
|
|||||||
Reference in New Issue
Block a user