#PBFORMS Created V2.01
#COMPILE EXE
#DIM ALL

#PBFORMS Begin Includes
'''#Resource "EditListView.pbr"
'''%USEMACROS = 1
#INCLUDE ONCE "WIN32API.INC"
#INCLUDE ONCE "COMMCTRL.INC"
#INCLUDE ONCE "PBForms.INC"
#PBFORMS End Includes

''''''''''''''''''''''''
#INCLUDE ONCE "LVEd.INC"
''''''''''''''''''''''''

#PBFORMS Begin Constants
%LV1     = 1001
%MainDlg =  101
%Txt1    = 1002
%Txt2    = 1003
#PBFORMS End Constants

DECLARE CALLBACK FUNCTION ShowMainDlgProc()
DECLARE FUNCTION ShowMainDlg(BYVAL hParent AS DWORD) AS LONG
#PBFORMS Declarations

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'   user supplied call function : information OR get permission for operation
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
FUNCTION MyListViewMessages(BYVAL hDlg AS LONG, BYVAL ID AS LONG, BYVAL message AS LONG, BYVAL rowNo AS LONG, BYVAL colNo AS LONG) AS LONG
    SELECT CASE AS LONG message
    CASE %LVEdMsg_ColClick
        CONTROL SET TEXT hDlg, %Txt1, "column clicked: " + FORMAT$(colNo)
    CASE %LVEdMsg_ItemClick
        CONTROL SET TEXT hDlg, %Txt2, "item clicked: row = " + FORMAT$(rowNo) + ", col = " + FORMAT$(colNo)
    CASE %LVEdMsg_OkEdit
        FUNCTION = %true 'edit all cells
    CASE %LVEdMsg_ItemChanged
        CONTROL SET TEXT hDlg, %Txt1, "item changed: row = " + FORMAT$(rowNo) + ", col = " + FORMAT$(colNo)
    CASE %LVEdMsg_OkRowInsert
        FUNCTION = %true
    CASE %LVEdMsg_RowInserted
        CONTROL SET TEXT hDlg, %Txt1, "new row inserted: row = " + FORMAT$(rowNo)
        LISTVIEW SET TEXT hDlg, ID, rowNo, 1, "new row, " + FORMAT$(rowNo)
    CASE %LVEdMsg_OkRowDelete
        FUNCTION = %true
    END SELECT
END FUNCTION
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

FUNCTION PBMAIN()
    PBFormsInitComCtls (%ICC_WIN95_CLASSES OR %ICC_DATE_CLASSES OR %ICC_INTERNET_CLASSES)
    ShowMainDlg %HWND_DESKTOP
END FUNCTION

CALLBACK FUNCTION ShowMainDlgProc()
    '''''''''''''''''''
    'static OR global UDT for each ListView
    '''''''''''''''''''
    STATIC tLV AS LVEdT
    '''''''''''''''''''

    '''''''''''''''''''''''''''
    '   Edit ListView message cracker macro - handle all dialog's listviews
    '''''''''''''''''''''''''''
    McLVEd_DailogMessageCracker
    '''''''''''''''''''''''''''

    SELECT CASE AS LONG CB.MSG
        CASE %WM_INITDIALOG
            ''''''''''''''''''''''''''''''''''''''''''''''''''''
            '   listview setup
            ''''''''''''''''''''''''''''''''''''''''''''''''''''
            LVEd_Setup(tLV, CB.HNDL, %LV1, CODEPTR(MyListViewMessages))
            ''''''''''''''''''''''''''''''''''''''''''''''''''''
        CASE %WM_NCACTIVATE
            STATIC hWndSaveFocus AS DWORD
            IF ISFALSE CB.WPARAM THEN
                hWndSaveFocus = GetFocus()
            ELSEIF hWndSaveFocus THEN
                SetFocus(hWndSaveFocus)
                hWndSaveFocus = 0
            END IF
    END SELECT
END FUNCTION

FUNCTION SampleListView(BYVAL hDlg AS DWORD, BYVAL lID AS LONG, BYVAL lColCnt _
    AS LONG, BYVAL lRowCnt AS LONG) AS LONG
    LOCAL lCol   AS LONG
    LOCAL lRow   AS LONG
    LOCAL lStyle AS LONG

    LISTVIEW GET STYLEXX hDlg, lID TO lStyle
    LISTVIEW SET STYLEXX hDlg, lID, lStyle OR %LVS_EX_FULLROWSELECT OR _
        %LVS_EX_GRIDLINES

    ' Load column headers.
    FOR lCol = 1 TO lColCnt
        LISTVIEW INSERT COLUMN hDlg, lID, lCol, USING$("Column #", lCol), 0, 0
    NEXT lCol

    ' Load sample data.
    FOR lRow = 1 TO lRowCnt
        LISTVIEW INSERT ITEM hDlg, lID, lRow, 0, USING$("Column # Row #", _
            lCol, lRow)
        FOR lCol = 1 TO lColCnt
            LISTVIEW SET TEXT hDlg, lID, lRow, lCol, USING$("Column # Row #", _
                lCol, lRow)
        NEXT lCol
    NEXT lRow

    ' Auto size columns.
    FOR lCol = 1 TO lColCnt
        LISTVIEW FIT HEADER hDlg, lID, lCol
    NEXT lCol
END FUNCTION

FUNCTION ShowMainDlg(BYVAL hParent AS DWORD) AS LONG
    LOCAL lRslt AS LONG

#PBFORMS Begin Dialog %MainDlg->->
    LOCAL hDlg  AS DWORD

    DIALOG NEW hParent, "Edit ListView Test - click item to edit", 141, 74, 349, 221, _
        %WS_OVERLAPPED OR %WS_CAPTION OR %WS_SYSMENU OR %WS_MINIMIZEBOX OR _
        %WS_CLIPSIBLINGS OR %WS_VISIBLE OR %DS_MODALFRAME OR %DS_3DLOOK OR _
        %DS_NOFAILCREATE OR %DS_SETFONT, %WS_EX_CONTROLPARENT OR _
        %WS_EX_APPWINDOW OR %WS_EX_LEFT OR %WS_EX_LTRREADING OR _
        %WS_EX_RIGHTSCROLLBAR, TO hDlg
    CONTROL ADD LISTVIEW, hDlg, %LV1, "", 8, 4, 332, 172, %WS_CHILD OR _
        %WS_VISIBLE OR %WS_TABSTOP OR %LVS_REPORT OR %LVS_SINGLESEL OR _
        %LVS_SHOWSELALWAYS, %WS_EX_STATICEDGE OR %WS_EX_LEFT
    CONTROL ADD TEXTBOX,  hDlg, %Txt1, "", 8, 184, 332, 12
    CONTROL ADD TEXTBOX,  hDlg, %Txt2, "", 8, 200, 332, 12
#PBFORMS End Dialog

    SampleListView hDlg, %LV1, 10, 20

    DIALOG SHOW MODAL hDlg, CALL ShowMainDlgProc TO lRslt

#PBFORMS Begin CleanUp %MainDlg
#PBFORMS End CleanUp

    FUNCTION = lRslt
END FUNCTION
