Skip to content
This repository was archived by the owner on Nov 25, 2020. It is now read-only.

itemsOrdered Fix #39

Merged
merged 1 commit into from
Jun 4, 2014
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
66 changes: 39 additions & 27 deletions src/components/list/listviewcontroller.coffee
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,9 @@ module.exports = class KDListViewController extends KDViewController

getItemsOrdered:-> @itemsOrdered

getItemCount:-> @itemsOrdered.length
getListItems: -> @getListView().items

getItemCount:-> @getListItems().length

setListView:(listView)-> @listView = listView

Expand All @@ -128,7 +130,7 @@ module.exports = class KDListViewController extends KDViewController
{noItemFoundWidget} = @getOptions()
@getListView().addSubView @noItemView = noItemFoundWidget

showNoItemWidget:-> @noItemView?.show() if @itemsOrdered.length is 0
showNoItemWidget:-> @noItemView?.show() if @getListItems().length is 0
hideNoItemWidget:-> @noItemView?.hide()

# regressed, will put back whenever i'm here again. - SY
Expand Down Expand Up @@ -173,7 +175,7 @@ module.exports = class KDListViewController extends KDViewController
@emit "UnregisteringItem", itemInfo
{index, view} = itemInfo
actualIndex = if @getOptions().lastToFirst then @getListView().items.length - index - 1 else index
@itemsOrdered.splice actualIndex, 1
@getListItems().splice actualIndex, 1
if view.getData()?
delete @itemsIndexed[view.getItemDataId()]

Expand All @@ -183,20 +185,17 @@ module.exports = class KDListViewController extends KDViewController
@instantiateListItems items

removeAllItems: ->

{itemsOrdered} = @
@itemsOrdered.length = 0
@itemsIndexed = {}

listView = @getListView()
listView.empty() if listView.items.length

return itemsOrdered
return @getListItems()

moveItemToIndex: (item, newIndex) ->

newIndex = Math.max(0, Math.min(@itemsOrdered.length-1, newIndex))
@itemsOrdered = @getListView().moveItemToIndex(item, newIndex).slice()
newIndex = Math.max(0, Math.min(@getListItems().length-1, newIndex))
@getListView().moveItemToIndex(item, newIndex).slice()

###
HANDLING MOUSE EVENTS
Expand Down Expand Up @@ -281,35 +280,41 @@ module.exports = class KDListViewController extends KDViewController
direction = if event.which is 40 then "down" else "up"
addend = if event.which is 40 then 1 else -1

selectedIndex = @itemsOrdered.indexOf @selectedItems[0]
lastSelectedIndex = @itemsOrdered.indexOf @selectedItems[@selectedItems.length - 1]
items = @getListItems()

selectedIndex = items.indexOf @selectedItems[0]
lastSelectedIndex = items.indexOf @selectedItems[@selectedItems.length - 1]

if @itemsOrdered[selectedIndex + addend]
if items[selectedIndex + addend]
unless event.metaKey or event.ctrlKey or event.shiftKey
# navigate normally if meta key is NOT pressed
@selectItem @itemsOrdered[selectedIndex + addend]
@selectItem items[selectedIndex + addend]
else
# take extra actions if meta key is pressed
if @selectedItems.indexOf(@itemsOrdered[lastSelectedIndex + addend]) isnt -1
if @selectedItems.indexOf(items[lastSelectedIndex + addend]) isnt -1
# to be deselected item is in @selectedItems
if @itemsOrdered[lastSelectedIndex]
@deselectSingleItem @itemsOrdered[lastSelectedIndex]
if items[lastSelectedIndex]
@deselectSingleItem items[lastSelectedIndex]
else
# to be deselected item is NOT in @selectedItems
if @itemsOrdered[lastSelectedIndex + addend ]
@selectSingleItem @itemsOrdered[lastSelectedIndex + addend ]
if items[lastSelectedIndex + addend ]
@selectSingleItem items[lastSelectedIndex + addend ]

selectNextItem:(item, event)->

items = @getListItems()

[item] = @selectedItems unless item
selectedIndex = @itemsOrdered.indexOf item
@selectItem @itemsOrdered[selectedIndex + 1]
selectedIndex = items.indexOf item
@selectItem items[selectedIndex + 1]

selectPrevItem:(item, event)->

items = @getListItems()

[item] = @selectedItems unless item
selectedIndex = @itemsOrdered.indexOf item
@selectItem @itemsOrdered[selectedIndex + -1]
selectedIndex = items.indexOf item
@selectItem items[selectedIndex + -1]


deselectAllItems:->
Expand All @@ -322,30 +327,37 @@ module.exports = class KDListViewController extends KDViewController

deselectSingleItem:(item)->
item.removeHighlight()

items = @getListItems()

@selectedItems.splice @selectedItems.indexOf(item), 1
if item is @itemsOrdered[@itemsOrdered.length-1]
if item is items[items.length-1]
@getListView().unsetClass "last-item-selected"
@itemDeselectionPerformed [item]

selectSingleItem:(item)->

items = @getListItems()

if item.getOption("selectable") and !(item in @selectedItems)
item.highlight()
@selectedItems.push item
if item is @itemsOrdered[@itemsOrdered.length-1]
if item is items[items.length-1]
@getListView().setClass "last-item-selected"
@itemSelectionPerformed()

selectAllItems:->

@selectSingleItem item for item in @itemsOrdered
@selectSingleItem item for item in @getListItems()


selectItemsByRange:(item1, item2)->

indicesToBeSliced = [@itemsOrdered.indexOf(item1), @itemsOrdered.indexOf(item2)]
items = @getListItems()

indicesToBeSliced = [items.indexOf(item1), items.indexOf(item2)]
indicesToBeSliced.sort (a, b)-> a - b
itemsToBeSelected = @itemsOrdered.slice indicesToBeSliced[0], indicesToBeSliced[1] + 1
itemsToBeSelected = items.slice indicesToBeSliced[0], indicesToBeSliced[1] + 1
@selectSingleItem item for item in itemsToBeSelected
@itemSelectionPerformed()

Expand Down