Skip to content

Commit 85d9333

Browse files
authored
Merge pull request #195 from robotools/list2.removeSeleciton()
add support for enableDelete and removeSelection()
2 parents a40100e + b47d349 commit 85d9333

File tree

1 file changed

+47
-1
lines changed

1 file changed

+47
-1
lines changed

Lib/vanilla/vanillaList2.py

+47-1
Original file line numberDiff line numberDiff line change
@@ -294,6 +294,11 @@ def tableView_acceptDrop_row_dropOperation_(
294294

295295
class VanillaList2TableViewSubclass(AppKit.NSTableView):
296296

297+
def keyDown_(self, event):
298+
didSomething = self.vanillaWrapper()._keyDown(event)
299+
if not didSomething:
300+
super().keyDown_(event)
301+
297302
def draggingEntered_(self, draggingInfo):
298303
super().draggingEntered_(draggingInfo)
299304
return self.vanillaWrapper()._dropCandidateEntered(draggingInfo)
@@ -405,7 +410,7 @@ class List2(ScrollView, DropTargetProtocolMixIn):
405410
406411
**menuCallback** Callback to be called when a contextual menu is requested.
407412
408-
# **enableDelete** A boolean representing if items in the list can be deleted via the interface.
413+
**enableDelete** A boolean representing if items in the list can be deleted via the interface.
409414
410415
**enableTypingSensitivity** A boolean representing if typing in the list will jump to the
411416
closest match as the entered keystrokes.
@@ -508,6 +513,7 @@ def __init__(self,
508513
allowsEmptySelection=True,
509514
allowsSorting=True,
510515
allowColumnReordering=True,
516+
enableDelete=False,
511517
enableTypingSensitivity=False,
512518
showColumnTitles=True,
513519
drawFocusRing=True,
@@ -561,6 +567,7 @@ def __init__(self,
561567
self._tableView.setAllowsMultipleSelection_(allowsMultipleSelection)
562568
self._tableView.setAllowsColumnReordering_(allowColumnReordering)
563569
self._allowsSorting = allowsSorting
570+
self._enableDelete = enableDelete
564571
self._tableView.setAllowsTypeSelect_(enableTypingSensitivity)
565572
# visual attributes
566573
if not showColumnTitles:
@@ -860,6 +867,18 @@ def scrollToIndex(self, row):
860867
"""
861868
self._tableView.scrollRowToVisible_(row)
862869

870+
def removeSelection(self):
871+
"""
872+
Remove selected items.
873+
"""
874+
selection = self.getSelectedIndexes()
875+
if not selection:
876+
return
877+
items = self.get()
878+
for index in reversed(sorted(selection)):
879+
del items[index]
880+
self.set(items)
881+
863882
# Drag
864883

865884
_dragCandidateCallback = None
@@ -882,6 +901,33 @@ def _getPasteboardDataForIndex(self, index):
882901
return None
883902
return makePasteboardItem(typesAndValues)
884903

904+
# key down
905+
906+
def _keyDown(self, event):
907+
# this method is called by the NSTableView subclass after a key down
908+
# has occurred. the subclass expects that a boolean will be returned
909+
# that indicates if this method has done something (delete an item or
910+
# select an item). if False is returned, the delegate calls the super
911+
# method to insure standard key down behavior.
912+
#
913+
# get the characters
914+
characters = event.characters()
915+
# get the field editor
916+
#
917+
deleteCharacters = [
918+
AppKit.NSBackspaceCharacter,
919+
AppKit.NSDeleteFunctionKey,
920+
AppKit.NSDeleteCharacter,
921+
chr(0x007F),
922+
]
923+
if characters in deleteCharacters:
924+
if self._enableDelete:
925+
self.removeSelection()
926+
return True
927+
928+
return False
929+
930+
885931
# contextual menu
886932

887933
def _menuForEvent(self, event):

0 commit comments

Comments
 (0)