Code : Tout sélectionner
Func _GUICtrlListView_SimpleSort($hWnd, ByRef $vDescending, $iCol)
If $Debug_LV Then __UDF_ValidateClassName($hWnd, $__LISTVIEWCONSTANT_ClassName)
If _GUICtrlListView_GetItemCount($hWnd) Then
Local $b_desc
If (IsArray($vDescending)) Then
$b_desc = $vDescending[$iCol]
Else
$b_desc = $vDescending
EndIf
Local $columns = _GUICtrlListView_GetColumnCount($hWnd)
Local $items = _GUICtrlListView_GetItemCount($hWnd)
Local $temp_item = ""
Local $SeparatorChar = Opt('GUIDataSeparatorChar')
For $x = 1 To $columns
$temp_item = $temp_item & " " & $SeparatorChar
Next
$temp_item = StringTrimRight($temp_item, 1)
Local $a_lv[$items][$columns*2 + 1]
Local $i_selected = StringSplit(_GUICtrlListView_GetSelectedIndices($hWnd), $SeparatorChar)
Local $v_item, $iFocused = -1
For $x = 0 To UBound($a_lv) - 1 Step 1
If $iFocused = -1 Then
If _GUICtrlListView_GetItemFocused($hWnd, $x) Then $iFocused = $x
EndIf
_GUICtrlListView_SetItemSelected($hWnd, $x, False)
;~ _GUICtrlListView_SetItemState($hWnd, $x, 0, BitOR($LVIS_SELECTED, $LVIS_FOCUSED))
For $Y = 0 To $columns - 1 Step 1
$v_item = StringStripWS(_GUICtrlListView_GetItemText($hWnd, $x, $Y), 2)
If (StringIsFloat($v_item) Or StringIsInt($v_item)) Then
$a_lv[$x][$Y] = Number($v_item)
Else
$a_lv[$x][$Y] = $v_item
EndIf
$a_lv[$x][$columns+$Y+1] = _GUICtrlListView_GetItemImage($hWnd, $x, $Y)
Next
$a_lv[$x][$Y] = $x
Next
_ArraySort($a_lv, $b_desc, 0, 0, $iCol)
For $x = 0 To UBound($a_lv) - 1 Step 1
For $Y = 0 To $columns - 1 Step 1
;~ _GUICtrlListViewSetItemText($hWnd, $x, $Y, $a_lv[$x][$Y])
_GUICtrlListView_SetItemText($hWnd, $x, $a_lv[$x][$Y], $Y)
_GUICtrlListView_SetItemImage($hWnd, $x, $a_lv[$x][$columns+$Y+1], $Y)
Next
For $Z = 1 To $i_selected[0]
If $a_lv[$x][$columns] = $i_selected[$Z] Then
If $a_lv[$x][$columns] = $iFocused Then
_GUICtrlListView_SetItemSelected($hWnd, $x, True, True)
Else
_GUICtrlListView_SetItemSelected($hWnd, $x, True)
EndIf
;~ _GUICtrlListView_SetItemState($hWnd, $x, $LVIS_SELECTED, BitOR($LVIS_SELECTED, $LVIS_FOCUSED))
;~ If $a_lv[$x][UBound($a_lv, 2) - 1] = $iFocused Then _GUICtrlListView_SetItemState($hWnd, $x, $LVIS_FOCUSED, $LVIS_FOCUSED)
ExitLoop
EndIf
Next
Next
If (IsArray($vDescending)) Then
$vDescending[$iCol] = Not $b_desc
Else
$vDescending = Not $b_desc
EndIf
EndIf
EndFunc ;==>_GUICtrlListView_SimpleSort