there is on eissue concerning the editingmode.
Maybe a kind of bug.
a stumbled on this.
like other editinputs do.
This is a little bit annoying because i have to manage the editstate when exiting
the editmode with up or down arrow to switch to the next field.
I need the correct edited value to write it immediately into a database when changed
Here some code to test. Arrowing up and down in editmode does work.
The recognition of changed values (when up or down) depends on the last editinput.
DEL is not recognized.
Code: Select all
;
; List
EnableExplicit
Enumeration ;window
  #win
EndEnumeration
Enumeration ;gadgets
  #b_Get
  #b_Quit
  #Li  
EndEnumeration
Enumeration ;shortcuts menu
  #sk_down
  #sk_up
  
EndEnumeration
Global.l celly, cellx, cellheight, celltop, cellleft, cellmaxrow, celledited, celleditmode
Global.s celltextedit, celltext
Procedure LvFilterCallback(LV.l, Filterstring.s, Column.l, Event.l) ; simple search example
  Protected itemNumber.l, I.l
  If Filterstring
    itemNumber = -1
    If IsGadget(LV)
      For I = 0 To CountGadgetItems(LV) - 1 
        If FindString(UCase(GetGadgetItemText(LV, I, Column)), UCase(FilterString),0) 
          itemNumber = I
          Break
        EndIf
      Next 
      If itemNumber <> -1 ; if string found, scroll to row
        PureLVSORT_ScrollToRow(LV, itemNumber)
        PureCOLOR_SetCellColor(LV, itemnumber,Column,#Blue,$FFDEAD)
      EndIf
    EndIf
  EndIf
EndProcedure
Procedure.l LvEditCallback(Event.l, ListIconNumber.l, Column.l, Row.l, Text.s)
  Select Event
    Case #PureLVSORT_EditStart
      Debug "Edit Start"
      celltext=GetGadgetItemText(ListIconNumber,row,column)
      Debug "edt_start :"+celltext
      celleditmode=1
      ; Return  :	- 0 to enable stringgadget (default)
      ; 		- *string to enable a spingadget [the string holds the choice items (separator = '|']
    Case #PureLVSORT_EditText
      Debug "Edit Text"
      celltextedit=text
      celledited+1
      Debug "edt_edit :"+celltextedit
      ;Debug "im callback "+celltextedit
      ;         ; Return  :	- 0 to keep the text (default)
      ;         ; 		- *string to change the text [the string holds the changed text]
    Case #PureLVSORT_EditEnd
      Debug "Edit End"
      If celledited
        If celltext<>celltextedit
          Debug "-----------------"
          Debug "     down before :"+celltext
          Debug "     down after:"+celltextedit
          Debug "     Ok can be written"
          Debug "-----------------"
        EndIf
        
        celledited=0
        celltextedit=""
        celltext=""
        celleditmode=0
      EndIf
      
    Case #PureLVSORT_EditEscape
      Debug "Edit ESC"
      celleditmode=0
  EndSelect
EndProcedure
Procedure reload()
  Define cols=5,c, r, rows=10 , i , tmp.s, out.s
  HideGadget(#Li,1)
  ClearGadgetItems(#Li)
  
  While GetGadgetItemText(#Li, -1); , 0)
    RemoveGadgetColumn(#Li,0)
  Wend
  RemoveGadgetColumn(#Li,0)
  
  For c=0 To cols
    tmp="Column "+Str(c)
    AddGadgetColumn(#li,c,tmp,20)
  Next c
  tmp=""
  
  For r=0 To rows
    For c=0 To cols
      For i=1 To 5
        tmp+Chr(Random(25)+97)
      Next i
      out+tmp+Chr(10)
      tmp=""
    Next c
    AddGadgetItem(#Li,-1,out)
    out=""
  Next r
  
  PureLVSORT_SelectGadgetToSort(#Li,#PureLVSORT_ShowClickedHeader_No)
  PureLVSORT_DefineFilterCallback(@LvFilterCallback())
  PureLVSORT_SetFilterTimeOut(100)
  PureLVSORT_SetFilter(#Li)
  
  For c=0 To 10
    PureLVSORT_SetColumnWidth(#Li,c,#PureLVSORT_UseHeader)
  Next c
  
  PureLVSORT_SetFilter(#Li)
  
  PureLVSORT_SetFilterTimeOut(25)
  PureLVSORT_DefineFilterCallback(@LvFilterCallback())
  For c=0 To 10-1
    PureLVSORT_MakeColumnEditable(#Li,c,#True)
  Next c
  
  PureLVSORT_SetEditingCallback(@LvEditCallback())
  PureLVSORT_SetEditingColors(RGB(255,222,192),#PureCOLOR_SystemColor)
  HideGadget(#Li,0)
  cellmaxrow=CountGadgetItems(#Li)-1
EndProcedure
Procedure LvMouseClick(GId.i, *vP.Point)
  
  Define vID=GadgetID(GId)
  
  Protected pLVH.LVHITTESTINFO
  
  GetCursorPos_   (*vP)  ;wo ist Maus 
  MapWindowPoints_(0, vID, *vP, 1)
  pLVH\pt\x = *vP\x
  pLVH\pt\y = *vP\y
  SendMessage_(vID, #LVM_SUBITEMHITTEST, 0, pLVH)                
  *vP\y = pLVH\iItem      ;row ab 0
  *vP\x = pLVH\iSubItem   ;col ab 0
  celly=*vP\y
  cellx=*vP\x
  ; --- Ergänzung
  Protected rec.RECT , i
  SendMessage_(vid, #LVM_GETSUBITEMRECT, *vp\y, rec)
  rec\left=0
  rec\right=rec\left+GetGadgetItemAttribute(GId,-1,#PB_ListIcon_ColumnWidth,0)
  If *vP\x >0
    For i=1 To *vP\x
      rec\left+GetGadgetItemAttribute(GId,-1,#PB_ListIcon_ColumnWidth, i-1)
      rec\right=rec\left+GetGadgetItemAttribute(GId,-1,#PB_ListIcon_ColumnWidth,i)
    Next
  EndIf
  
  cellheight= rec\bottom-rec\top
  celltop  = rec\top+1
  cellleft = rec\left+1
EndProcedure
ExamineDesktops()
;window, gadgets
Define.l dw=DesktopWidth(0)
Define.l dh=DesktopHeight(0)
Define.l wx,ww,wy,wh
Define.l c
Define p.Point
;events
Define.l event,eventtype,gadget,Menu
Define.l quit
ww=500
wh=500
wx=100;dw/2-ww/2
wy=100;dh/2-wh/2
OpenWindow(#win,wx,wy,ww,wh,"Schaumerma",#PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget)
ButtonGadget(#b_Get,0,0,50,20,"reload")
ListIconGadget(#Li,0,20,ww,wh-20,"this",20,#PB_ListIcon_GridLines|#PB_ListIcon_FullRowSelect)
HideGadget(#Li,1)
AddKeyboardShortcut(#Win,#PB_Shortcut_Down,#sk_down)
AddKeyboardShortcut(#Win,#PB_Shortcut_Up,#sk_up)
reload()
Define.s Info.s= "Enter Editingmode by doubleclicking (L) one field."+#CRLF$
Info+"Typing on the keyboard will change the TEXT in the Callback accordingly"+#CRLF$
Info+"Only DEL has some kind of ''delay''"+#CRLF$+#CRLF$
Info+" Run in IDE with debug on"
MessageRequester("",Info)
Repeat
  event=WaitWindowEvent()
  eventtype=EventType()
  menu=EventMenu()
  gadget=EventGadget()
  
  Select event
      
    Case #PB_Event_Gadget
      Select gadget
        Case #b_get
          reload()
        Case #Li
          Select eventtype
            Case #PB_EventType_LeftDoubleClick
              LvMouseClick(#Li, p)
              Debug "Mouse celltop "+Str(celltop)
              Debug "Mouse cellheight "+Str(cellheight)
              Debug "Mouse Col "+Str(cellx)
              Debug "Mouse Row "+Str(celly)
              
          EndSelect
      EndSelect
      
    Case #PB_Event_Menu
      
      Select menu
        Case #sk_down
          ;one down
          If celleditmode
            If celledited
              If celltext<>celltextedit
                Debug "-----------------"
                Debug "     down before :"+celltext
                Debug "     down after:"+celltextedit
                Debug "     Ok can be written"
                Debug "-----------------"
              EndIf
              
              celledited=0
              celltextedit=""
              celltext=""
            EndIf
            If celly <= cellmaxrow-1  
              celltop+cellheight
              celly+1
              Debug "celltop "+Str(celltop)+" cellheight "+Str(cellheight)+" Col "+Str(cellx)+" Row "+Str(celly)
              PostMessage_(GadgetID(#Li), #WM_LBUTTONDBLCLK, 0, cellleft| (celltop <<16)) ;<---- double click on x = 12 y = 42 (mouse coordinates)
              
            EndIf
          EndIf
        Case #sk_up
          ;up one up
          If celleditmode
            If celledited
              If celltext<>celltextedit
                Debug "-----------------"
                Debug "     down before :"+celltext
                Debug "     down after:"+celltextedit
                Debug "     Ok can be written"
                Debug "-----------------"
              EndIf
              celledited=0
              celltextedit=""
              celltext=""
            EndIf
            
            If celly >=0+1
              
              celltop-cellheight
              celly-1
              Debug "celltop "+Str(celltop)+" cellheight "+Str(cellheight)+" Col "+Str(cellx)+" Row "+Str(celly)
              
              PostMessage_(GadgetID(#Li), #WM_LBUTTONDBLCLK, 0, cellleft| (celltop <<16)) ;<---- double click on x = 12 y = 42 (mouse coordinates)
            EndIf
          EndIf
          
      EndSelect
      
    Case #PB_Event_CloseWindow
      quit+1
  EndSelect
  
Until quit
End