Jump to content
Sign in to follow this  
HurleyShanabarger

ToDoList

Recommended Posts

Hey guys,

 

I wanted to have a small ToDo list for my computer but I didn't really find what I needed. Maybe somebody else has use for it.

Untitled.png

Spoiler
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Version=Beta
    #AutoIt3Wrapper_Icon=ToDo.ico
    #AutoIt3Wrapper_Outfile=..\ToDo.exe
    #AutoIt3Wrapper_Outfile_x64=..\ToDo.exe
    #AutoIt3Wrapper_Compression=4
    #AutoIt3Wrapper_Res_Comment=ToDoList
    #AutoIt3Wrapper_Res_Description=ToDoList
    #AutoIt3Wrapper_Res_Fileversion=1.1.0.0
    #AutoIt3Wrapper_Res_ProductVersion=1.1.0.0
    #Tidy_Parameters=/reel /sf /ri
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

#Region Includes
    ;|----------------------------------------------------------------------------------------------------------------|
    ;|---------------------------------------------- Standard includes -----------------------------------------------|
    ;|----------------------------------------------------------------------------------------------------------------|
    #include <File.au3>
    #include <Date.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GuiEdit.au3>
    #include <GuiListView.au3>
    #include <ListViewConstants.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <WinAPI.au3>
    #include <FontConstants.au3>
#EndRegion Includes

#Region Variables
    ;|----------------------------------------------------------------------------------------------------------------|
    ;|---------------------------------------- Global variables and constants ----------------------------------------|
    ;|----------------------------------------------------------------------------------------------------------------|

    Opt("GUIResizeMode", $GUI_DOCKALL)

    ;|-------------|
    ;| Script data |
    ;|-------------|
    Global Const $_gc_sScriptName = StringLeft(@ScriptName, StringInStr(@ScriptName, ".", 0, -1) - 1)
    Global Const $_gc_sDir_Dropbox = @ScriptDir
    Global Const $_gc_sFile = $_gc_sDir_Dropbox & "\_Settings\" & $_gc_sScriptName & ".dat"
    Global Const $_gc_hClr_Green = 0x267F00, $_gc_hClr_Black = 0x000000
    Global $_gv_hLV
#EndRegion Variables

#Region
    _GUI_Main()

    Func _GUI_Main()
        Local $_lv_iSysDPI = _SysGetDPI()
        Local $_lv_hGUI = GUICreate("SysControl_ToDo", 400, 400, @DesktopWidth - 410, 10, BitOR($WS_POPUP, 0), BitOR($WS_EX_TOOLWINDOW, $WS_EX_LAYERED))
        GUISetFont(8.5 / $_lv_iSysDPI)
        GUISetBkColor(0x123456)

        Local $_lv_iBttn_Mns = GUICtrlCreateButton("-", 2, 2, 21, 21)
        Local $_lv_iBttn_Pls = GUICtrlCreateButton("+", 25, 2, 21, 21)
        Local $_lv_iInpt_Hdr = GUICtrlCreateInput("", 48, 2, 347, 21)

        Local $_lv_iLV = GUICtrlCreateListView("#|Date|Text|Entry", 2, 25, 396, 250, BitOR($GUI_SS_DEFAULT_LISTVIEW, $LVS_REPORT, $LVS_SINGLESEL, $LVS_SHOWSELALWAYS, $WS_TABSTOP, $WS_VISIBLE, $WS_CHILD, $WS_CLIPSIBLINGS), BitOR($LVS_EX_CHECKBOXES, $LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT))
        $_gv_hLV = GUICtrlGetHandle($_lv_iLV)
        Local $_lv_hLV_Hdr = _GUICtrlListView_GetHeader($_gv_hLV)
        GUIRegisterMsg($WM_NOTIFY, "GUI_msg_LV")

        ; Load file
        Local $_lv_aFile, $_lv_aItem
        _FileReadToArray($_gc_sFile, $_lv_aFile, 2, ChrW(160))
        For $_lv_iData = 0 To UBound($_lv_aFile) - 1
            $_lv_aItem = $_lv_aFile[$_lv_iData]
            $_lv_aItem[0] = Execute($_lv_aItem[0])
            $_lv_aItem[3] = StringReplace($_lv_aItem[3], ChrW(161), @CRLF)
            $_lv_sData = _ArrayToString($_lv_aItem, "|", 1)
            GUICtrlCreateListViewItem($_lv_sData, $_lv_iLV)
            _GUICtrlListView_SetItemChecked($_gv_hLV, $_lv_iData, $_lv_aItem[0])
        Next
        $_lv_aData = ""

        _GUICtrlListView_SetColumnWidth($_gv_hLV, 0, 50)
        _GUICtrlListView_SetColumnWidth($_gv_hLV, 1, 120)
        _GUICtrlListView_HideColumn($_gv_hLV, 2)
        _GUICtrlListView_SetColumnWidth($_gv_hLV, 3, $LVSCW_AUTOSIZE_USEHEADER)
        ControlDisable($_lv_hGUI, "", $_lv_hLV_Hdr)

        Local $_lv_iEdt_Nmbr = GUICtrlCreateEdit("1", 2, 280, 25, 118, BitOR($ES_RIGHT, $ES_AUTOVSCROLL, $ES_READONLY))
        Local $_lv_iEdt_Bdy = GUICtrlCreateEdit("", 26, 280, 371, 118, BitOR($ES_MULTILINE, $WS_VSCROLL, $ES_AUTOVSCROLL))
        _WinAPI_SetLayeredWindowAttributes($_lv_hGUI, 0x123456)
        GUISetState()

        GUICtrlSetFont($_lv_iEdt_Nmbr, Default, Default, Default, "Courier New")
        GUICtrlSetFont($_lv_iEdt_Bdy, Default, Default, Default, "Courier New")

        Local $_lv_boLV_Slctn_Chngd
        Local $_lv_iMsg, $_lv_iTxt_Hdr
        Local $_lv_iLV_Slctd = -1
        Local $_lv_iTmr = TimerInit()
        Local $_lv_sFile = "", $_lv_sText = ""

        While 1
            $_lv_boLV_Slctn_Chngd = _GUICtrlListView_GetSelectedIndices($_gv_hLV) <> $_lv_iLV_Slctd
            If $_lv_boLV_Slctn_Chngd Then $_lv_iLV_Slctd = _GUICtrlListView_GetSelectedIndices($_gv_hLV)
            $_lv_iMsg = GUIGetMsg()
            $_lv_iTxt_Hdr = GUICtrlRead($_lv_iInpt_Hdr)

            Switch $_lv_iMsg
                Case $GUI_EVENT_CLOSE
                    ; Save comment and call line number drawing
                    If _GUICtrlEdit_GetModify($_lv_iEdt_Bdy) Then
                        $_lv_iTxt_Bdy = GUICtrlRead($_lv_iEdt_Bdy)
                        _GUICtrlListView_SetItemText($_gv_hLV, $_lv_iLV_Slctd, $_lv_iTxt_Bdy, 2)
                        _GUI_ev_LineNumbers($_lv_iEdt_Nmbr, $_lv_iEdt_Bdy)
                    EndIf

                    $_lv_iCount = _GUICtrlListView_GetItemCount($_gv_hLV) - 1
                    $_lv_aState = _GUICtrlListView_GetItemCheckedState($_gv_hLV, $_lv_iCount)
                    $_lv_sFile = ""
                    For $_lv_iItem = 0 To $_lv_iCount
                        $_lv_aData = _GUICtrlListView_GetItemTextArray($_gv_hLV, $_lv_iItem)
                        $_lv_aData[0] = $_lv_aState[$_lv_iItem]
                        $_lv_aData[3] = StringReplace($_lv_aData[3], @CRLF, ChrW(161))
                        If $_lv_sFile Then $_lv_sFile &= @CRLF
                        $_lv_sFile &= _ArrayToString($_lv_aData, ChrW(160))
                    Next
                    $_lv_hFile = FileOpen($_gc_sFile, 2 + 8 + 256)
                    FileWrite($_lv_hFile, $_lv_sFile)
                    FileClose($_lv_hFile)
                    Exit
                Case $_lv_iBttn_Pls
                    _GUICtrlListView_BeginUpdate($_gv_hLV)
                    $_lv_iNumber = StringFormat("%03d", _GUICtrlListView_GetItemCount($_gv_hLV) + 1)
                    GUICtrlCreateListViewItem($_lv_iNumber & "|" & _Now() & "|" & "|" & $_lv_iTxt_Hdr, $_lv_iLV)
                    GUICtrlSetData($_lv_iInpt_Hdr, "")
                    _GUICtrlListView_HideColumn($_gv_hLV, 2)
                    _GUICtrlListView_SetColumnWidth($_gv_hLV, 3, $LVSCW_AUTOSIZE_USEHEADER)
                    _GUICtrlListView_EndUpdate($_gv_hLV)
                Case $_lv_iBttn_Mns
                    _GUICtrlListView_BeginUpdate($_gv_hLV)
                    _GUICtrlListView_DeleteItemsSelected($_gv_hLV)
                    _GUICtrlListView_EndUpdate($_gv_hLV)
            EndSwitch

            ; Check item selection
            If $_lv_boLV_Slctn_Chngd Then
                $_lv_sText = _GUICtrlListView_GetItemText($_gv_hLV, $_lv_iLV_Slctd, 2)
                GUICtrlSetData($_lv_iEdt_Bdy, $_lv_sText)
                _GUI_ev_LineNumbers($_lv_iEdt_Nmbr, $_lv_iEdt_Bdy)
                If Not $_lv_iLV_Slctd Then
                    WinMove($_lv_hGUI, "", @DesktopWidth - 410, 10, 400, 277)
                Else
                    WinMove($_lv_hGUI, "", @DesktopWidth - 410, 10, 400, 400)
                EndIf
            EndIf
            If $_lv_iLV_Slctd = "" Then GUICtrlSetData($_lv_iEdt_Bdy, "")

            ; Handle state of controls
            _GUICtrl_SetEnableDisable($_lv_iBttn_Pls, GUICtrlRead($_lv_iInpt_Hdr))
            _GUICtrl_SetEnableDisable($_lv_iEdt_Bdy, Not ($_lv_iLV_Slctd = ""))
            _GUICtrl_SetEnableDisable($_lv_iBttn_Mns, Not ($_lv_iLV_Slctd = ""))

            ; Save comment and call line number drawing
            If _GUICtrlEdit_GetModify($_lv_iEdt_Bdy) Then
                $_lv_iTxt_Bdy = GUICtrlRead($_lv_iEdt_Bdy)
                _GUICtrlListView_SetItemText($_gv_hLV, $_lv_iLV_Slctd, $_lv_iTxt_Bdy, 2)
                _GUI_ev_LineNumbers($_lv_iEdt_Nmbr, $_lv_iEdt_Bdy)
            EndIf
        WEnd
    EndFunc   ;==>_GUI_Main
#EndRegion

#Region Helper
    Func _GUI_ev_LineNumbers($_fp_hCtrl_Cnt, $_fp_hCtrl_Edt)
        ;|---------------------------------------------------------|
        ;| _GUI_ev_LineNumbers                                     |
        ;|---------------------------------------------------------|
        ;| $_fp_hCtrl_Cnt = Handle to the line number edit control |
        ;| $_fp_hCtrl_Edt = Handle to the edit control             |
        ;|---------------------------------------------------------|
        Local $_lv_iLine, $_lv_iLines = _GUICtrlEdit_GetLineCount($_fp_hCtrl_Edt)
        Local $_lv_iVsbl_Edt, $_lv_iVsbl_Cnt
        Local $_lv_Index = 1
        Local $_lv_sTxt_Cnt = "1" & @CRLF

        For $_lv_iLine = 1 To $_lv_iLines - 1
            $_lv_iCharIndex = _GUICtrlEdit_LineIndex($_fp_hCtrl_Edt, $_lv_iLine)
            If StringMid(GUICtrlRead($_fp_hCtrl_Edt), $_lv_iCharIndex - 1, 2) = @CRLF Then
                $_lv_Index += 1
                $_lv_sTxt_Cnt &= $_lv_Index & @CRLF
            Else
                If $_lv_iLine < $_lv_iLines - 1 Then $_lv_sTxt_Cnt &= @CRLF
            EndIf
        Next
        GUICtrlSetData($_fp_hCtrl_Cnt, $_lv_sTxt_Cnt)

        $_lv_iVsbl_Edt = _GUICtrlEdit_GetFirstVisibleLine($_fp_hCtrl_Edt)
        $_lv_iVsbl_Cnt = _GUICtrlEdit_GetFirstVisibleLine($_fp_hCtrl_Cnt)
        If $_lv_iVsbl_Edt <> $_lv_iVsbl_Cnt Then
            _GUICtrlEdit_LineScroll($_fp_hCtrl_Cnt, 0, $_lv_iVsbl_Edt - $_lv_iVsbl_Cnt)
        EndIf

        _GUICtrlEdit_SetModify($_fp_hCtrl_Edt, False)
        _GUICtrlEdit_SetModify($_fp_hCtrl_Cnt, False)
    EndFunc   ;==>_GUI_ev_LineNumbers

    Func _GUICtrl_ListView_DrawItem(ByRef $_fb_hDC, ByRef $_fb_tCustDraw, $_fp_sFont, $_fp_iSize, $_fp_iWeight, $_fp_hClr_Txt, $_fp_hClr_BK, $_fp_boStrike = False)
        ;|----------------------------------------|
        ;| _GUICtrl_ListView_DrawItem             |
        ;|----------------------------------------|
        ;| $_fb_hDC = Handle                      |
        ;| $_fb_tCustDraw = Custom draw structure |
        ;| $_fp_sFont = Font name                 |
        ;| $_fp_iSize = Font size                 |
        ;| $_fp_iWeight = Font weight             |
        ;| $_fp_hClr_Txt = Color of text          |
        ;| $_fp_hClr_BK = Color of background     |
        ;| $_fp_boStrike = Strikethrough          |
        ;|----------------------------------------|
        If $_fp_sFont = Default Then $_fp_sFont = "Segoe UI"
        Local $_lv_hFont = _WinAPI_CreateFont($_fp_iSize, 0, 0, 0, $_fp_iWeight, False, False, $_fp_boStrike, $DEFAULT_CHARSET, $OUT_DEFAULT_PRECIS, $CLIP_DEFAULT_PRECIS, $DEFAULT_QUALITY, $FIXED_PITCH) ;, $_fp_sFont)
        $_fb_hDC = DllStructGetData($_fb_tCustDraw, 'hdc')
        DllStructSetData($_fb_tCustDraw, 'clrText', _RGB2BGR($_fp_hClr_Txt))
        DllStructSetData($_fb_tCustDraw, 'clrTextBk', _RGB2BGR($_fp_hClr_BK))
        _WinAPI_SelectObject($_fb_hDC, $_lv_hFont)
        _WinAPI_DeleteObject($_lv_hFont)
    EndFunc   ;==>_GUICtrl_ListView_DrawItem

    Func _GUICtrl_SetDisable($_fp_iControl)
        ;|-----------------------------------|
        ;| _GUICtrl_SetDisable               |
        ;|-----------------------------------|
        ;| $_fp_iControl = ID of the control |
        ;|-----------------------------------|
        If BitAND(GUICtrlGetState($_fp_iControl), $GUI_DISABLE) Then Return True
        GUICtrlSetState($_fp_iControl, $GUI_DISABLE)
        Return False
    EndFunc   ;==>_GUICtrl_SetDisable

    Func _GUICtrl_SetEnable($_fp_iControl)
        ;|-----------------------------------|
        ;| _GUICtrl_SetEnable                |
        ;|-----------------------------------|
        ;| $_fp_iControl = ID of the control |
        ;|-----------------------------------|
        If BitAND(GUICtrlGetState($_fp_iControl), $GUI_ENABLE) Then Return True
        GUICtrlSetState($_fp_iControl, $GUI_ENABLE)
        Return False
    EndFunc   ;==>_GUICtrl_SetEnable

    Func _GUICtrl_SetEnableDisable($_fp_iControl, $_fc_boState)
        ;|------------------------------------------------------|
        ;| _GUICtrl_SetEnableDisable                            |
        ;|------------------------------------------------------|
        ;| $_fp_iControl = ID of the control                    |
        ;| $_fc_boState = State to check for enabling/disabling |
        ;|------------------------------------------------------|
        If $_fc_boState Then
            _GUICtrl_SetEnable($_fp_iControl)
        Else
            _GUICtrl_SetDisable($_fp_iControl)
        EndIf
    EndFunc   ;==>_GUICtrl_SetEnableDisable

    Func _GUICtrlListView_GetItemCheckedState(Const $_fc_hWnd, Const $_fc_iItems)
        ;|------------------------------------------|
        ;| _GUICtrlListView_GetItemCheckedState     |
        ;|------------------------------------------|
        ;| $_fc_hWnd = Handle to the listview       |
        ;| $_fc_iItems = Count of items in listview |
        ;|------------------------------------------|
        If Not IsHWnd($_fc_hWnd) Then Return SetError(1)

        Local $_lv_bUnicode = _GUICtrlListView_GetUnicodeFormat($_fc_hWnd)

        Local $_lv_tLVITEM = DllStructCreate($tagLVITEM)
        Local $_lv_iSize = DllStructGetSize($_lv_tLVITEM)
        If @error Then Return SetError($LV_ERR, $LV_ERR, False)
        DllStructSetData($_lv_tLVITEM, "Mask", $LVIF_STATE)
        DllStructSetData($_lv_tLVITEM, "StateMask", 0xffff)

        Local $_lv_aItems[$_fc_iItems + 1]
        Local $_lv_tMemMap
        Local $_lv_pMemory

        For $_lv_iItem = 0 To $_fc_iItems
            DllStructSetData($_lv_tLVITEM, "Item", $_lv_iItem)

            If _WinAPI_InProcess($_fc_hWnd, $__g_hLVLastWnd) Then
                _SendMessage($_fc_hWnd, $LVM_GETITEMW, 0, $_lv_tLVITEM, 0, "wparam", "struct*")
            Else
                $_lv_pMemory = _MemInit($_fc_hWnd, $_lv_iSize, $_lv_tMemMap)
                _MemWrite($_lv_tMemMap, $_lv_tLVITEM)
                If $_lv_bUnicode Then
                    _SendMessage($_fc_hWnd, $LVM_GETITEMW, 0, $_lv_pMemory, 0, "wparam", "ptr")
                Else
                    _SendMessage($_fc_hWnd, $LVM_GETITEMA, 0, $_lv_pMemory, 0, "wparam", "ptr")
                EndIf
                _MemRead($_lv_tMemMap, $_lv_pMemory, $_lv_tLVITEM, $_lv_iSize)
                _MemFree($_lv_tMemMap)
            EndIf
            $_lv_aItems[$_lv_iItem] = BitAND(DllStructGetData($_lv_tLVITEM, "State"), 0x2000) <> 0
        Next
        Return $_lv_aItems
    EndFunc   ;==>_GUICtrlListView_GetItemCheckedState

    Func GUI_msg_LV($_fp_hWnd, $_fp_iMsg, $_fp_wParam, $_fp_lParam)
        ;|-------------------------------------------------------------------|
        ;| GUI_msg_LV                                                        |
        ;|-------------------------------------------------------------------|
        ;| $_fp_hWnd = Window handle of the GUI in which the message appears |
        ;| $_fp_iMsg = Windows message ID                                    |
        ;| $_fp_wParam = First message parameter as hex value                |
        ;| $_fp_lParam = Second message parameter as hex value               |
        ;|-------------------------------------------------------------------|
        Local $_lv_hWndFrom, $_lv_iCode, $_lv_tNMHDR
        $_lv_tNMHDR = DllStructCreate($tagNMHDR, $_fp_lParam)
        $_lv_hWndFrom = HWnd(DllStructGetData($_lv_tNMHDR, "hWndFrom"))
        $_lv_iCode = DllStructGetData($_lv_tNMHDR, "Code")

        If $_lv_hWndFrom <> $_gv_hLV Then Return $GUI_RUNDEFMSG
        If $_lv_iCode <> $NM_CUSTOMDRAW Then Return $GUI_RUNDEFMSG
        If Not _GUICtrlListView_GetViewDetails($_lv_hWndFrom) Then Return $GUI_RUNDEFMSG

        Local $_lv_tCustDraw = DllStructCreate($tagNMLVCUSTOMDRAW, $_fp_lParam)
        Local $_lv_iDrawState = DllStructGetData($_lv_tCustDraw, 'dwDrawStage'), $_lv_iItem, $_lv_iSubItem, $_lv_hDC

        Switch $_lv_iDrawState
            Case $CDDS_ITEMPREPAINT
                Return $CDRF_NOTIFYSUBITEMDRAW
            Case BitOR($CDDS_ITEMPREPAINT, $CDDS_SUBITEM)
                $_lv_iItem = DllStructGetData($_lv_tCustDraw, 'dwItemSpec')
                $_lv_iSubItem = DllStructGetData($_lv_tCustDraw, 'iSubItem')
                Local $_lv_hClr_Txt = 0x000000, $_lv_hClr_BK = 0xFFFFFF, $_lv_iSize = 14, $_lv_sFont = Default, $_lv_iWeight = $FW_NORMAL, $_lv_boStrike = False
                If _GUICtrlListView_GetItemChecked($_gv_hLV, $_lv_iItem) Then
                    $_lv_hClr_Txt = $_gc_hClr_Green
                    $_lv_boStrike = True
                Else
                    $_lv_hClr_Txt = $_gc_hClr_Black
                EndIf
                _GUICtrl_ListView_DrawItem($_lv_hDC, $_lv_tCustDraw, $_lv_sFont, $_lv_iSize, $_lv_iWeight, $_lv_hClr_Txt, $_lv_hClr_BK, $_lv_boStrike)
                Return $CDRF_NEWFONT
        EndSwitch
        Return $GUI_RUNDEFMSG
    EndFunc   ;==>GUI_msg_LV
#EndRegion Helper

#Region Functions - Helper
    Func _RGB2BGR($_fp_iColor)
        ;|-------------------------------------------------------|
        ;| _RGB2BGR                                              |
        ;|-------------------------------------------------------|
        ;| $_fp_iColor = Color to convert from RGB format to BGR |
        ;|-------------------------------------------------------|
        Return BitAND(BitShift(String(Binary($_fp_iColor)), 8), 0xFFFFFF)
    EndFunc   ;==>_RGB2BGR

    Func _SysGetDPI()
        Local $_lv_aDPI[3]
        Local $_lv_iDPI, $_lv_iDPIRat, $_lv_iLogPixelsY = 90, $_lv_hWnd = 0
        Local $_lv_hDC = DllCall("user32.dll", "long", "GetDC", "long", $_lv_hWnd)
        Local $_lv_aRet = DllCall("gdi32.dll", "long", "GetDeviceCaps", "long", $_lv_hDC[0], "long", $_lv_iLogPixelsY)
        $_lv_hDC = DllCall("user32.dll", "long", "ReleaseDC", "long", $_lv_hWnd, "long", $_lv_hDC)
        $_lv_iDPI = $_lv_aRet[0]
        Select
            Case $_lv_iDPI = 0
                $_lv_iDPI = 96
                $_lv_iDPIRat = 94
            Case $_lv_iDPI < 84
                $_lv_iDPIRat = $_lv_iDPI / 105
            Case $_lv_iDPI < 121
                $_lv_iDPIRat = $_lv_iDPI / 96
            Case $_lv_iDPI < 145
                $_lv_iDPIRat = $_lv_iDPI / 95
            Case Else
                $_lv_iDPIRat = $_lv_iDPI / 94
        EndSelect

        $_lv_aDPI[0] = 2
        $_lv_aDPI[1] = $_lv_iDPI
        $_lv_aDPI[2] = $_lv_iDPIRat

        Return $_lv_iDPIRat
    EndFunc   ;==>_SysGetDPI
#EndRegion Functions - Helper

 

 

Share this post


Link to post
Share on other sites

Nice script, really usefull, but missing a context menu or button to minimize or send to tray, because it takes a very big part of screen. Thanks for your job

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...