Jump to content

Attempt at Reminder Program


Recommended Posts

Hi

I found a post with a very nice Reminder https://www.autoitscript.com/forum/topic/39015-reminder-alert/ but the code was old and Functions have changed.

I have very little experience of using these listview funnctions

I tried to adjust to the new function calls and manage to make it run

_ReminderProg ()

Func _ReminderProg ()
#include <GUIConstants.au3>
#Include <GuiListView.au3>
#include <String.au3>

Opt("TrayMenuMode",1)
Global $mainReminder
GuiCreate("Reminder", 600, 500, -1, -1)
GUISetBkColor (0x6BC072)
    $mainReminder = GuiCtrlCreateListview("", 5, 5, 590, 445, $LVS_SHOWSELALWAYS)
        GUICtrlSetBkColor(-1,0xA6D9AA)
        _GUICtrlListView_InsertColumn($mainReminder, 0, "Event", 316)
        _GUICtrlListView_InsertColumn($mainReminder, 1, "Time", 100)
        _GUICtrlListView_InsertColumn($mainReminder, 2, "Date", 100)
    $addreminder = GuiCtrlCreateButton("Add a new reminder", 15, 460, 230, 30)
    $deletereminder = GuiCtrlCreateButton("Delete selected reminders", 260, 460, 230, 30)
    $exit = GuiCtrlCreateButton("Exit", 505, 460, 80, 30)

    $addReminderItem = TrayCreateItem("Add reminder")
        TrayCreateItem('')
    $show = TrayCreateItem("Open Reminder...")
    $exitItem = TrayCreateItem("Exit")

$pastinfo = InireadSectionNames(@ScriptDir & "\reminderinfo.ini")
If IsArray($pastInfo) then
    For $a = 1 to $pastInfo[0]
        $info = InireadSection(@ScriptDir & "\reminderinfo.ini", $pastinfo[$a])
        If IsArray($info) and $info[0][0] <> 0 then
            For $b = 1 to $info[0][0]
                $temp = StringSplit($info[$b][1], ":")
                $pos = _InsertOrder($info[$b][0], $temp[1], $temp[2])
                _GUICtrlListView_InsertItem ($mainReminder, $pastinfo[$a] & "|" & $info[$b][1] & "|" & $info[$b][0], $pos)
            Next
        Endif
    Next
Endif

GUIsetstate()

While 1
    $msg = GuiGetMsg()
    $trayMsg = TrayGetMsg()
    Select
        Case $msg = $exit
            Exit
        Case $msg = $deleteReminder
            _DeleteReminder()
        Case $msg = $GUI_EVENT_CLOSE
            WinSetState('Reminder', '', @SW_HIDE)
        Case $trayMsg = $exitItem
            Exit
        Case $trayMsg = $addreminderItem or $msg = $addReminder
            _AddReminder()
        Case $trayMsg = $show
            WinSetState('Reminder', '', @SW_SHOW)
        Case Else
            If _GUICtrlListView_GetItemCount($mainReminder) > 0 Then
                $splitInfo = Stringsplit(_GUICtrlListView_GetItemText($mainReminder, 0), "|")
                $splitDate = Stringsplit($splitInfo[3], "/")
                $splitTime = Stringsplit($splitInfo[2], ":")
                If Number($splitDate[3]) <= @YEAR and Number($splitDate[1]) <= @MON and Number($splitDate[2]) <= @MDAY and Number($splitTime[1]) <= @Hour and Number($splitTime[2]) <= @MIN then
                    Msgbox(0, "Reminder alert", $splitInfo[1])
                    Inidelete(@ScriptDir & "\reminderinfo.ini", $splitInfo[1])
                    _GUICtrlListView_DeleteItem($mainReminder, 0)
                Endif
            Endif
    EndSelect
Wend
EndFunc

Func _Addreminder()
    $gui = GuiCreate("Add a reminder", 200, 280)
    GuiCtrlCreateLabel("Reminder Name", 10, 5, 180, 25, $ES_center)
    $name = GuiCtrlCreateInput("", 10, 25, 180, 20)
    $date = GUICtrlCreateMonthCal(@YEAR & "/" & @MON & "/" & @MDAY, 10, 55, 180, 160, $MCS_NOTODAY)
    GuiCtrlCreateLabel("Hour:", 5, 223, 30, 25, $SS_RIGHT)
    $hour = GuiCtrlCreateCombo("", 40, 220, 40, 25)
    GuiCtrlSetData(-1, "0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23")
    GuiCtrlCreateLabel("Minute:", 100, 223, 35, 25, $SS_RIGHT)
    $minute = GuiCtrlCreateCombo("", 140, 220, 40, 25)
    GuiCtrlSetData(-1, "0|5|10|15|20|25|30|35|40|45|50|55")
    $ok = GuiCtrlCreateButton("Add Reminder", 10, 250, 180, 25)
    Guisetstate(@SW_SHOW)

    While 1
        $ms = GuiGetMsg()
        If $ms = $GUI_EVENT_CLOSE then
            GuiDelete($gui)
            Return
        Endif
        If Bitand($ms = $ok, GuiCtrlRead($name) <> "", GuiCtrlRead($hour) <> "", GuiCtrlRead($minute) <> "") Then
            $date = Stringsplit(GuiCtrlRead($date), "/")
            If $date[2] < 10 then $date[2] = StringTrimLeft($date[2], 1)
            If $date[3] < 10 then $date[3] = StringTrimLeft($date[3], 1)
;~             $date = $date[2] & "/" & $date[3] & "/" & $date [1]
            $date = $date[3] & "/" & $date[2] & "/" & $date [1]
            $hour = GuiCtrlRead($hour)
            $minute = GuiCtrlRead($minute)
            If StringLen($minute) < 2 then
                $minute = _StringInsert($minute, "0", 0)
            Endif
            $pos = _InsertOrder($date, $hour, $minute)
            $time =  $hour & ":" & $minute
            _GUICtrlListView_InsertItem ($mainReminder, GuiCtrlRead($name) & "|" & $time & "|" & $date, $pos)
            If StringLen($hour) < 2 then _StringInsert($hour, "0", 0)
            Iniwrite(@ScriptDir & "\reminderinfo.ini", GuiCtrlRead($name), $date, $time)
            GuiDelete($gui)
            ExitLoop
        EndIf
    Wend
EndFunc

Func _DeleteReminder()
    $selected = _GUICtrlListView_GetSelectedIndices($mainReminder, 1)
    If $selected <> -1 then
        If IsArray($selected) then
            For $a = 1 to $selected[0]
                $temp = _GUICtrlListView_GetItemTextArray ($mainReminder, $selected[$a])
                Inidelete(@ScriptDir & "\reminderinfo.ini", $temp[1], $temp[3])
                Inidelete(@ScriptDir & "\reminderinfo.ini", $temp[1])
            Next
        Else
            $temp = _GUICtrlListView_GetItemTextArray ($mainReminder, $selected)
            Inidelete(@ScriptDir & "\reminderinfo.ini", $temp[1], $temp[3])
            Inidelete(@ScriptDir & "\reminderinfo.ini", $temp[1])
        Endif
        _GUICtrlListView_DeleteItemsSelected ($mainReminder)
    Endif
Endfunc

Func _InsertOrder($date, $hour, $minute)
    $temp = StringSplit($date, "/")
    Dim $checkInfo[5] = [Int($temp[3]), Int($temp[1]),Int($temp[2]),Int($hour),Int($minute)]
    If _GUICtrlListView_GetItemCount($mainReminder) = 0 then Return -1
    For $a = 0 to _GUICtrlListView_GetItemCount($mainReminder)
        $temp = _GUICtrlListView_GetItemTextArray ($mainReminder, $a)
        If IsArray($temp) then
            $listDate = StringSplit($temp[3], "/")
            $listTime = StringSplit($temp[2], ":")
            Dim $listInfo[5] = [Int($listDate[3]),Int($listDate[1]),Int($listDate[2]),Int($listTime[1]),Int($listTime[2])]
            For $b = 1 to 5
                If $checkInfo[$b] < $listInfo[$b] then Return $a
                If $checkInfo[$b] > $listInfo[$b] then $b += 5
                Next
        Else
            Return -1
        Endif
    Next
Endfunc

However it will insert and delete one reminder and then it crashes.

I suspect that a nested listview should be used somewhere instead of a simple one but I dont know how it can be done.

If done this program would be very usefull.

Can anyone help?

Link to post
Share on other sites

The link in your post is broken, but i found the thread: 

the listview udf has many script breaking changes since 2007.

Quote

 

I think to write a new script is better and will make a relaunch of this idea soon. The script (origin with some MsgBox and arrayDisplays):

#include <GUIConstants.au3>
#include <GuiListView.au3>
#include <String.au3>

Opt("TrayMenuMode", 1)

GUICreate("Reminder", 600, 500, -1, -1)
GUISetBkColor(0x6BC072)
$main = GUICtrlCreateListView("", 5, 5, 590, 445, $LVS_SHOWSELALWAYS)
GUICtrlSetBkColor(-1, 0xA6D9AA)
_GUICtrlListView_InsertColumn($main, 0, "Event", "", 316)
_GUICtrlListView_InsertColumn($main, 1, "Time", "", 100)
_GUICtrlListView_InsertColumn($main, 2, "Date", "", 100)
$addreminder = GUICtrlCreateButton("Add a new reminder", 15, 460, 230, 30)
$deletereminder = GUICtrlCreateButton("Delete selected reminders", 260, 460, 230, 30)
$exit = GUICtrlCreateButton("Exit", 505, 460, 80, 30)

$addReminderItem = TrayCreateItem("Add reminder")
TrayCreateItem('')
$show = TrayCreateItem("Open Reminder...")
$exitItem = TrayCreateItem("Exit")

$aPastinfo = IniReadSectionNames(@ScriptDir & "\reminderinfo.ini")
If IsArray($aPastinfo) Then
    For $a = 1 To $aPastinfo[0]
        $info = IniReadSection(@ScriptDir & "\reminderinfo.ini", $aPastinfo[$a])
        If IsArray($info) And $info[0][0] <> 0 Then
            For $b = 1 To $info[0][0]
                $temp = StringSplit($info[$b][1], ":")
                $pos = _InsertOrder($info[$b][0], $temp[1], $temp[2])
                _GUICtrlListView_InsertItem($main, $pos, $aPastinfo[$a] & "|" & $info[$b][1] & "|" & $info[$b][0])
            Next
        EndIf
    Next
EndIf

GUISetState()

While 1
    $msg = GUIGetMsg()
    $trayMsg = TrayGetMsg()
    Select
        Case $msg = $exit
            Exit
        Case $msg = $deletereminder
            _DeleteReminder()
        Case $msg = $GUI_EVENT_CLOSE
            WinSetState('Reminder', '', @SW_HIDE)
        Case $trayMsg = $exitItem
            Exit
        Case $trayMsg = $addReminderItem Or $msg = $addreminder
            _Addreminder()
        Case $trayMsg = $show
            WinSetState('Reminder', '', @SW_SHOW)
        Case Else
            If _GUICtrlListView_GetItemCount($main) > 0 Then
                $aSplitInfo = _GUICtrlListView_GetItemTextArray($main, 0)
                ;========================
                ;_ArrayDisplay($aSplitInfo)
                If $aSplitInfo[2] <> '' And $aSplitInfo[3] <> '' Then
                    $splitDate = StringSplit($aSplitInfo[3], "/")
                    $splitTime = StringSplit($aSplitInfo[2], ":")
                    If Number($splitDate[3]) <= @YEAR And Number($splitDate[1]) <= @MON And Number($splitDate[2]) <= @MDAY And Number($splitTime[1]) <= @HOUR And Number($splitTime[2]) <= @MIN Then
                        MsgBox(0, "Reminder alert", $aSplitInfo[1])
                        IniDelete(@ScriptDir & "\reminderinfo.ini", $aSplitInfo[1])
                        _GUICtrlListView_DeleteItem($main, 0)
                    EndIf
                EndIf
            EndIf
    EndSelect
WEnd

Func _Addreminder()
    $gui = GUICreate("Add a reminder", 200, 280)
    GUICtrlCreateLabel("Reminder Name", 10, 5, 180, 25, $ES_center)
    $name = GUICtrlCreateInput("", 10, 25, 180, 20)
    $date = GUICtrlCreateMonthCal(@YEAR & "/" & @MON & "/" & @MDAY, 10, 55, 180, 160, $MCS_NOTODAY)
    GUICtrlCreateLabel("Hour:", 5, 223, 30, 25, $SS_RIGHT)
    $hour = GUICtrlCreateCombo("", 40, 220, 40, 25)
    GUICtrlSetData(-1, "0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23")
    GUICtrlCreateLabel("Minute:", 100, 223, 35, 25, $SS_RIGHT)
    $minute = GUICtrlCreateCombo("", 140, 220, 40, 25)
    GUICtrlSetData(-1, "0|5|10|15|20|25|30|35|40|45|50|55")
    $ok = GUICtrlCreateButton("Add Reminder", 10, 250, 180, 25)
    GUISetState(@SW_SHOW)

    While 1
        $ms = GUIGetMsg()
        If $ms = $GUI_EVENT_CLOSE Then
            GUIDelete($gui)
            Return
        EndIf
        If BitAND($ms = $ok, GUICtrlRead($name) <> "", GUICtrlRead($hour) <> "", GUICtrlRead($minute) <> "") Then
            MsgBox(64, 'm. BitAnd','work',5,$gui)
            $date = StringSplit(GUICtrlRead($date), "/")
            If $date[2] < 10 Then $date[2] = StringTrimLeft($date[2], 1)
            If $date[3] < 10 Then $date[3] = StringTrimLeft($date[3], 1)
            $date = $date[2] & "/" & $date[3] & "/" & $date[1]
            $hour = GUICtrlRead($hour)
            $minute = GUICtrlRead($minute)
            If StringLen($minute) < 2 Then
                $minute = _StringInsert($minute, "0", 0)
            EndIf
            $pos = _InsertOrder($date, $hour, $minute)
            $time = $hour & ":" & $minute
            _GUICtrlListView_InsertItem($main, $pos, GUICtrlRead($name) & "|" & $time & "|" & $date)
            If StringLen($hour) < 2 Then _StringInsert($hour, "0", 0)
            IniWrite(@ScriptDir & "\reminderinfo.ini", GUICtrlRead($name), $date, $time)
            GUIDelete($gui)
            ExitLoop
        Else
            MsgBox(64, 'm. BitAnd',"didn't work",5,$gui)
        EndIf

    WEnd
EndFunc   ;==>_Addreminder

Func _DeleteReminder()
    $selected = _GUICtrlListView_GetSelectedIndices($main, 1)
    If $selected <> -1 Then
        If IsArray($selected) Then
            For $a = 1 To $selected[0]
                $temp = _GUICtrlListView_GetItemTextArray($main, $selected[$a])
                IniDelete(@ScriptDir & "\reminderinfo.ini", $temp[1], $temp[3])
                IniDelete(@ScriptDir & "\reminderinfo.ini", $temp[1])
            Next
        Else
            $temp = _GUICtrlListView_GetItemTextArray($main, $selected)
            IniDelete(@ScriptDir & "\reminderinfo.ini", $temp[1], $temp[3])
            IniDelete(@ScriptDir & "\reminderinfo.ini", $temp[1])
        EndIf
        _GUICtrlListView_DeleteItemsSelected($main)
    EndIf
EndFunc   ;==>_DeleteReminder

Func _InsertOrder($date, $hour, $minute)
    ConsoleWrite($date & ' ' & $hour & ':' & $minute & @CRLF)
    $temp = StringSplit($date, "/")
    Dim $aCheckInfo[5] = [Int($temp[3]), Int($temp[1]), Int($temp[2]), Int($hour), Int($minute)]
;   _ArrayDisplay($aCheckInfo, 'CheckInfo line 135')
    If _GUICtrlListView_GetItemCount($main) = 0 Then Return -1
    #cs
    For $a = 0 To _GUICtrlListView_GetItemCount($main)
        $temp = _GUICtrlListView_GetItemTextArray($main, $a)
        _ArrayDisplay($aCheckInfo, 'temp line 139')
        If IsArray($temp) Then
            $listDate = StringSplit($temp[3], "/")
            $listTime = StringSplit($temp[2], ":")
            Dim $listInfo[5] = [Int($listDate[3]), Int($listDate[1]), Int($listDate[2]), Int($listTime[1]), Int($listTime[2])]
            For $b = 1 To 5
                If $aCheckInfo[$b] < $listInfo[$b] Then Return $a
                If $aCheckInfo[$b] > $listInfo[$b] Then $b += 5
            Next
        Else
            Return -1
        EndIf
    Next
    #ce
EndFunc   ;==>_InsertOrder

 

Edited by AutoBert
Link to post
Share on other sites
22 hours ago, hawkair said:

But I am starting to wonder wether the initial code really worked.

Maybe 2007.

Here is a rewrited HOT Version:

#AutoIt3Wrapper_UseX64=y
#AutoIt3Wrapper_Res_LegalCopyright=autoBert
#AutoIt3Wrapper_Res_Language=1031
#AutoIt3Wrapper_AU3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w 4
#AutoIt3Wrapper_Run_Tidy=y
#AutoIt3Wrapper_Run_Au3Stripper=n
#Au3Stripper_Parameters=/mo

#include <GUIConstants.au3>
#include <GuiListView.au3>
#include <String.au3>
#include <Date.au3>
#include <File.au3>

#cs
    Nice to have (when it's done):
        Change Txt-File saving to SQLite based saving
        Split in 2 Apps: 1 for Add Data
                         1 for Alarm from Reminder
    What's to do:
        Implement checking of DateTime for alarm
        Testing (maybe enhance)
#ce

Opt('GUIOnEventMode', 1)
Global Const $sLV_SavePath = @ScriptDir & '\Reminder.LV.txt'
Global $hMain = GUICreate("Reminder", 600, 500, -1, -1), $hRem
GUISetBkColor(0x6BC072)
Global $idLV = GUICtrlCreateListView("Event|Date+Time|Repeated|Interval", 5, 5, 590, 445, BitOR($LVS_SHOWSELALWAYS, $LVS_REPORT), BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT))
GUICtrlSetBkColor(-1, 0xA6D9AA)
GUICtrlSetOnEvent($idLV, '_SortByCol')

_GUICtrlListView_SetColumnWidth($idLV, 0, 256)
_GUICtrlListView_SetColumnWidth($idLV, 1, 140)
_GUICtrlListView_SetColumnWidth($idLV, 2, 80)
_GUICtrlListView_SetColumnWidth($idLV, 3, 70)

Global $idAdd = GUICtrlCreateButton("&Add a new reminder", 15, 460, 230, 30)
Global $idDelete = GUICtrlCreateButton("&Delete selected reminders", 260, 460, 230, 30)
Global $idExit = GUICtrlCreateButton("E&xit", 505, 460, 80, 30)

GUISetOnEvent($GUI_EVENT_CLOSE, '_Exit')
GUICtrlSetOnEvent($idDelete, '_Delete')
GUICtrlSetOnEvent($idAdd, '_Add')
GUICtrlSetOnEvent($idExit, '_Exit')

_GUICtrlListView_RegisterSortCallBack($idLV) ; damit man das Listview (mit Klick auf die Spaltenüberschrift) sortieren kann
_GUICtrlListView_SortItems($idLV, 1)     ; Einträge entsprechend sortieren
_ReadLV()
GUISetState()
AdlibRegister('_CheckRemind', 15000)

;$addReminderItem = TrayCreateItem("Add reminder")
;TrayCreateItem('')
;$show = TrayCreateItem("Open Reminder...")
;$exitItem = TrayCreateItem("Exit")
While 1
    Sleep(10000)
WEnd

Func _CheckRemind()
    Local $sQuest, $sFlag, $iRet, $aDate, $aTime, $dtNewDate
    Local $aRemind = _GUICtrlListView_GetItemTextArray($idLV, 0) ;Item 0 allways oldest in remindeing-queue
    _DateTimeSplit($aRemind[2], $aDate, $aTime)
    $sQuest = 'is reached!' & @CRLF
    If $aRemind[3] <> 'no' Then
        $sQuest = 'Move for ' & $aRemind[4] & StringTrimRight($aRemind[3], 2) & '?'
        $sFlag = BitOR($MB_ICONINFORMATION, $MB_YESNO)
    Else
        $sFlag = BitOR($MB_ICONINFORMATION, $MB_OK)
    EndIf
    ;_ArrayDisplay($aRemind)
    Local $dtNow = @YEAR & '/' & @MON & '/' & @MDAY & ' ' & StringRight('00' & @HOUR, 2) & ':' & StringRight('00' & @MIN, 2)
    ConsoleWrite('line 74: ' & $dtNow & ' < ' & $aRemind[2] & ' Return? ' & ($dtNow < $aRemind[2]) & @CRLF)
    If $dtNow < $aRemind[2] Then Return
    $iRet = MsgBox($sFlag, $aRemind[1] & $aRemind[2], $sQuest, 0, $hMain)
    If $aRemind[3] <> 'no' Then
        If $iRet <> $IDNO Then
            $dtNewDate = _DateAdd(StringLeft($aRemind[3], 1), $aRemind[4], $aDate[1] & '/' & $aDate[2] & '/' & $aDate[3] & ' ' & $aTime[1] & ':' & $aTime[2])
            GUICtrlCreateListViewItem($aRemind[1] & "|" & $dtNewDate & '|' & $aRemind[3] & '|' & $aRemind[4], $idLV)
        EndIf
    EndIf
    If $iRet <> $IDNO Then _GUICtrlListView_DeleteItem($idLV, 0)
    ;to be checked
EndFunc   ;==>_CheckRemind

Func _ReadLV()
    Local $aLV, $sLV_Item
    _FileReadToArray($sLV_SavePath, $aLV, $FRTA_NOCOUNT, '|')
    _ArraySort($aLV, 0, 0, 0, 1)
    ;_ArrayDisplay($aLV)
    For $i = 0 To UBound($aLV) - 1
        $sLV_Item = ''
        For $j = 0 To 3
            $sLV_Item &= $aLV[$i][$j] & '|'
        Next
        $sLV_Item = StringTrimRight($sLV_Item, 1)
        GUICtrlCreateListViewItem($sLV_Item, $idLV)
    Next
EndFunc   ;==>_ReadLV

Func _exit()
    Local $sLV_AllItems, $hFile
    For $i = 0 To _GUICtrlListView_GetItemCount($idLV) - 1
        $sLV_AllItems &= _GUICtrlListView_GetItemTextString($idLV, $i) & @CRLF
    Next
    $sLV_AllItems = StringTrimRight($sLV_AllItems, 2)
    ;   MsgBox(0, '', $sLV_AllItems)
    FileMove($sLV_SavePath, StringReplace($sLV_SavePath, '.txt', '.bak'), $FC_OVERWRITE)
    $hFile = FileOpen($sLV_SavePath, $FO_OVERWRITE)
    FileWrite($hFile, $sLV_AllItems)
    FileClose($hFile)
    Exit
EndFunc   ;==>_exit

Func _SortByCol()
    _GUICtrlListView_SortItems($idLV, GUICtrlGetState($idLV)) ; Einträge entsprechend sortieren
EndFunc   ;==>_SortByCol

Func _Add()
    Opt('GUIOnEventMode', 0)
    Local $msg, $sRep = 'dayly|weekly|monthly|yearly', $dtEvenDate, $iHour, $iMinute, $iTime, $iVal
    $hRem = GUICreate("Add a reminder", 200, 320, -1, -1, Default, Default, $hMain)
    GUICtrlCreateLabel("Reminder Name", 10, 5, 180, 25, $ES_center)
    Local $idInpEvent = GUICtrlCreateInput("", 10, 25, 180, 20)
    Local $idDate = GUICtrlCreateMonthCal(@YEAR & "/" & @MON & "/" & @MDAY, 10, 55, 180, 160, $MCS_NOTODAY)
    GUICtrlCreateLabel("&Hour:", 5, 223, 30, 25, $SS_RIGHT)
    Local $idCboHour = GUICtrlCreateCombo("", 40, 220, 40, 25)
    GUICtrlSetData($idCboHour, "00|01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19|20|21|22|23")
    GUICtrlCreateLabel("&Minute:", 100, 223, 35, 25, $SS_RIGHT)
    Local $idCboMinute = GUICtrlCreateCombo("", 140, 220, 40, 25)
    GUICtrlSetData($idCboMinute, "00|05|10|15|20|25|30|35|40|45|50|55")
    GUICtrlCreateLabel("&Repeat:", 5, 253, 43, 25, $SS_RIGHT)
    Local $idCboRepeat = GUICtrlCreateCombo("", 60, 250, 60, 25)
    GUICtrlSetData($idCboRepeat, "no|dayly|weekly|Monthly|Yearly", "no")
    Local $idVal = GUICtrlCreateEdit('', 150, 250, 50, 25, $ES_Number)
    Local $idBtnOK = GUICtrlCreateButton("&Save Reminder", 10, 280, 180, 25)
    GUISetState(@SW_SHOW)

    While 1
        $msg = GUIGetMsg()
        Switch $msg
            Case $idBtnOK
                $dtEvenDate = GUICtrlRead($idDate)
                $iHour = '00' & GUICtrlRead($idCboHour)
                $iMinute = '00' & GUICtrlRead($idCboMinute)
                $iTime = StringRight($iHour, 2) & ":" & StringRight($iMinute, 2)
                $sRep = GUICtrlRead($idCboRepeat)
                $iVal = GUICtrlRead($idVal)
                GUICtrlCreateListViewItem(GUICtrlRead($idInpEvent) & "|" & $dtEvenDate & ' ' & $iTime & '|' & $sRep & '|' & $iVal, $idLV)
                GUIDelete($hRem)
                ExitLoop
            Case $GUI_EVENT_CLOSE
                GUIDelete($hRem)
                ExitLoop
        EndSwitch
    WEnd
    GUISetState(BitOR(@SW_ENABLE, @SW_SHOW), $hMain)
    Opt('GUIOnEventMode', 1)
    ConsoleWrite(Opt('GUIOnEventMode') & @CRLF)
EndFunc   ;==>_Add

Func _Delete()
    #cs
        must be checked
    #ce
    Local $aLV_Selected = _GUICtrlListView_GetSelectedIndices($idLV, True)
    _ArrayDisplay($aLV_Selected)
    Local $sQuest
    For $i = 1 To $aLV_Selected[0]
        $sQuest &= _GUICtrlListView_GetItemTextString($idLV, $aLV_Selected[$i])
        If $i <> $aLV_Selected[0] Then $sQuest &= @CRLF
    Next
    Local $iRet = MsgBox(BitOR($MB_YESNO, $MB_ICONQUESTION), 'Delete ' & $aLV_Selected[0] & ' selected Items', $sQuest, 5, $hMain)
    If $iRet <> $IDNO Then _GUICtrlListView_DeleteItemsSelected($idLV)
EndFunc   ;==>_Delete

*) Hot means: most func's must be tested. But first check the concept.

mfg (auto)Bert

Edited by AutoBert
Link to post
Share on other sites
On 11/14/2022 at 9:21 PM, hawkair said:

You added a repeat function too!

and therefor i needed some tests. After testing i changed/added some scriptlines, this is my newest version:

#AutoIt3Wrapper_UseX64=y
#AutoIt3Wrapper_Res_LegalCopyright=autoBert
#AutoIt3Wrapper_Res_Language=1031
#AutoIt3Wrapper_AU3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w 4
#AutoIt3Wrapper_Run_Tidy=y
#AutoIt3Wrapper_Run_Au3Stripper=n
#Au3Stripper_Parameters=/mo

#include <GUIConstants.au3>
#include <GuiListView.au3>
#include <String.au3>
#include <Date.au3>
#include <File.au3>

#cs
    Nice to have (when it's done):
        Change Txt-File saving to SQLite based saving
        Split in 2 Apps: 1 for Add Data
                         1 for Alarm from Reminder
    What's to do:
        Implement checking of DateTime for alarm
        Testing (maybe enhance)
#ce

Opt('GUIOnEventMode', 1)
Global $g_bSortSense = False
Global Const $sLV_SavePath = @ScriptDir & '\Reminder.LV.txt'
;Global $iMax = 0 ; wait for user all other
Global $iMax = 15 ; sec timeout
Global $hMain = GUICreate("Reminder", 600, 500, -1, -1), $hRem
GUISetBkColor(0x6BC072)
Global $idLV = GUICtrlCreateListView("Event|Date+Time|Repeated|Interval|Birthdate|PreWarn|HiddenSort", 5, 5, 590, 445, BitOR($LVS_SHOWSELALWAYS, $LVS_REPORT), BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT))
GUICtrlSetBkColor(-1, 0xA6D9AA)
GUICtrlSetOnEvent($idLV, '_SortByCol')
_GUICtrlListView_SetColumnWidth($idLV, 0, 200)
_GUICtrlListView_SetColumnWidth($idLV, 1, 140)
_GUICtrlListView_SetColumnWidth($idLV, 2, 80)
_GUICtrlListView_SetColumnWidth($idLV, 3, 70)
_GUICtrlListView_SetColumnWidth($idLV, 4, 36)
_GUICtrlListView_SetColumnWidth($idLV, 5, 70)
_GUICtrlListView_HideColumn($idLV, 6)

Global $idAdd = GUICtrlCreateButton("&Add a new reminder", 15, 460, 230, 30)
Global $idDelete = GUICtrlCreateButton("&Delete selected reminders", 260, 460, 230, 30)
Global $idExit = GUICtrlCreateButton("E&xit", 505, 460, 80, 30)

GUISetOnEvent($GUI_EVENT_CLOSE, '_Exit')
GUICtrlSetOnEvent($idDelete, '_Delete')
GUICtrlSetOnEvent($idAdd, '_Add')
GUICtrlSetOnEvent($idExit, '_Exit')
_GUICtrlListView_RegisterSortCallBack($idLV) ; damit man das Listview (mit Klick auf die Spaltenüberschrift) sortieren kann
_GUICtrlListView_SortItems($idLV, 6)     ; Einträge entsprechend sortieren
_ReadLV()
GUISetState()
_CheckRemind()

While 1
    Sleep(10000)
WEnd

Func _CheckRemind()
    Local $sQuest, $sFlag, $iRet, $iDiff, $aDate, $aTime, $dtNewDate, $dtHidSort, $sTitle
    Local $aRemind = _GUICtrlListView_GetItemTextArray($idLV, 0) ;Item 0 allways oldest in remindeing-queue
    _DateTimeSplit($aRemind[2], $aDate, $aTime)
    $sQuest &= 'is reached!' & @CRLF
    If $aRemind[3] <> 'no' Then
        $sTitle &= $aRemind[1]
        $sQuest &= 'Move for ' & $aRemind[4] & ' * ' & StringTrimRight($aRemind[3], 2) & '(s) ?'
        $sFlag = BitOR($MB_ICONINFORMATION, $MB_YESNO)
    Else
        $sFlag = BitOR($MB_ICONINFORMATION, $MB_OK)
    EndIf
    ;_ArrayDisplay($aRemind, 'Line 73')
    Local $dtNow = @YEAR & '/' & @MON & '/' & @MDAY & ' ' & StringRight('00' & @HOUR, 2) & ':' & StringRight('00' & @MIN, 2)
    ConsoleWrite('line 75: ' & $dtNow & ' < ' & $aRemind[7] & ' Return? ' & ($dtNow < $aRemind[2]) & @CRLF)
    If $dtNow < $aRemind[7] Then AdlibRegister('_CheckRemind', 15000)
    If $dtNow < $aRemind[7] Then Return
    AdlibUnRegister('_CheckRemind')
    _GUICtrlListView_BeginUpdate($idLV)
    $iDiff = _DateDiff('d', $dtNow, $aRemind[7])
    ConsoleWrite('DtDiff: ' & $iDiff & @CRLF)
    ;   Exit
    If $aRemind[6] <> "" And $iDiff < 0 And $iDiff >= $aRemind[6] * -1 Then
        $dtHidSort = StringTrimRight(_DateAdd('h', 4, $dtNow), 2) & '00'
        If $dtHidSort < $aRemind[2] Then
            ConsoleWrite($aRemind[2] & '|' & $dtNow & @CRLF)
            $sTitle = 'Pre Warning (snooze)'
            $sFlag = BitOR($MB_ICONINFORMATION, $MB_OK)
            $sQuest = 'Will be moved to  ' & $dtHidSort & '!'
            ;MsgBox(0, 'Debug wait', '')
        EndIf
    Else
        $sTitle &= $aRemind[1]
        $sQuest = 'Move for ' & $aRemind[4] & ' * ' & StringTrimRight($aRemind[3], 2) & '(s) ?'
    EndIf
    $iRet = MsgBox($sFlag, $sTitle & ' ' & $aRemind[2], $sQuest, $iMax, $hMain)
    If $aRemind[3] <> 'no' Then
        If $iRet <> $IDNO Then
            If $sTitle = 'Pre Warning (snooze)' Then
                ConsoleWrite($aRemind[7] & '=>' & $dtHidSort & @CRLF)
                _GUICtrlListView_SetItemText($idLV, 0, $dtHidSort, 6)
            Else
                $dtNewDate = _DateAdd(StringLeft($aRemind[3], 1), $aRemind[4], $aDate[1] & '/' & $aDate[2] & '/' & $aDate[3] & ' ' & $aTime[1] & ':' & $aTime[2])
                ConsoleWrite($aRemind[2] & '=>' & $dtNewDate & @CRLF)
                _GUICtrlListView_SetItemText($idLV, 0, $dtNewDate, 1)
                $dtHidSort = _DateAdd('d', $aRemind[6] * -1, $dtNewDate)
                ConsoleWrite($aRemind[7] & '=>' & $dtHidSort & @CRLF)
                _GUICtrlListView_SetItemText($idLV, 0, $dtHidSort, 6)
                ;$aRemind = _GUICtrlListView_GetItemTextArray($idLV, 0) ;Item 0 allways oldest in remindeing-queue
                ;_ArrayDisplay($aRemind, 'line 107')
            EndIf
        EndIf
    Else
        If $iRet <> $IDNO Then _GUICtrlListView_DeleteItem($idLV, 0)
    EndIf
    _GUICtrlListView_SimpleSort($idLV, $g_bSortSense, 6, False) ; Prevent sort direction toggling for next insertion
    _GUICtrlListView_EndUpdate($idLV)
    _SaveLV()
    AdlibRegister('_CheckRemind')
    ;to be checked
EndFunc   ;==>_CheckRemind

Func _ReadLV()
    Local $aLV, $sLV_Item, $iCols, $sQuest, $sFlag, $sTitle = 'incompatible Data?', $iRet
    _FileReadToArray($sLV_SavePath, $aLV, $FRTA_NOCOUNT, '|')
    $iCols = _GUICtrlListView_GetColumnCount($idLV)
    ConsoleWrite($iCols & '|' & UBound($aLV, 2) & @CRLF)
    If $iCols <> UBound($aLV, 2) Then ;Return
        $sQuest = 'App has ' & $iCols & ' Cols, but DataFile has ' & UBound($aLV, 2) & ' Cols.' & @CRLF & @CRLF
        $sQuest &= 'Continue anyway?'
        $sFlag = BitOR($MB_ICONINFORMATION, $MB_YESNO)
        $iRet = MsgBox($sFlag, $sTitle, $sQuest, $iMax, $hMain)
        If $iRet <> $IDYES Then Exit
    EndIf
    _ArraySort($aLV, 0, 0, 0, 6)
    _GUICtrlListView_DeleteAllItems($idLV)
    ;_ArrayDisplay($aLV, 'Line 134 ')
    If UBound($aLV, 2) < $iCols Then $iCols = UBound($aLV, 2)
    For $i = 0 To UBound($aLV, 1) - 1
        $sLV_Item = ''
        For $j = 0 To $iCols - 1
            $sLV_Item &= $aLV[$i][$j] & '|'
        Next
        $sLV_Item = StringTrimRight($sLV_Item, 1)
        GUICtrlCreateListViewItem($sLV_Item, $idLV)
    Next
EndFunc   ;==>_ReadLV


Func _SaveLV()
    Local $sLV_AllItems, $hFile
    For $i = 0 To _GUICtrlListView_GetItemCount($idLV) - 1
        $sLV_AllItems &= _GUICtrlListView_GetItemTextString($idLV, $i) & @CRLF
    Next
    $sLV_AllItems = StringTrimRight($sLV_AllItems, 2)
    ;   MsgBox(0, '', $sLV_AllItems)
    FileMove($sLV_SavePath, StringReplace($sLV_SavePath, '.txt', '.bak'), $FC_OVERWRITE)
    $hFile = FileOpen($sLV_SavePath, $FO_OVERWRITE)
    FileWrite($hFile, $sLV_AllItems)
    FileClose($hFile)
EndFunc   ;==>_SaveLV

Func _exit()
    _SaveLV()
    ConsoleWrite(_GUICtrlListView_GetColumnWidth($idLV, 1) & @CRLF)
    Exit
EndFunc   ;==>_exit

Func _SortByCol()
    _GUICtrlListView_SortItems($idLV, GUICtrlGetState($idLV)) ; Einträge entsprechend sortieren
EndFunc   ;==>_SortByCol

Func _Add()
    Opt('GUIOnEventMode', 0)
    Local $msg, $sRep = 'dayly|weekly|monthly|yearly', $sEvent, $dtEvenDate, $iHour, $iMinute, $iTime, $iVal, $iBD, $iPreWarn
    $hRem = GUICreate("Add a reminder", 200, 320, -1, -1, Default, Default, $hMain)
    GUICtrlCreateLabel("Reminder Name", 10, 5, 180, 25, $ES_center)
    Local $idInpEvent = GUICtrlCreateInput("", 10, 25, 180, 20)
    Local $idDate = GUICtrlCreateMonthCal(@YEAR & "/" & @MON & "/" & @MDAY, 10, 55, 180, 160, $MCS_NOTODAY)
    GUICtrlCreateLabel("&Hour:", 5, 223, 30, 25, $SS_RIGHT)
    Local $idCboHour = GUICtrlCreateCombo("", 40, 220, 40, 25)
    GUICtrlSetData($idCboHour, "00|01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19|20|21|22|23")
    Local $idCboMinute = GUICtrlCreateCombo("", 140, 220, 40, 25)
    GUICtrlSetData($idCboMinute, "00|05|10|15|20|25|30|35|40|45|50|55")
    GUICtrlCreateLabel('&Repeat', 5, 245, 60, 20)
    Local $idCboRepeat = GUICtrlCreateCombo("", 5, 262, 60, 25)
    GUICtrlSetData($idCboRepeat, "no|dayly|weekly|Monthly|Yearly", "no")
    GUICtrlCreateLabel('&Value', 70, 245, 75, 20)
    Local $idVal = GUICtrlCreateEdit('', 70, 262, 45, 25, $ES_Number)
    GUICtrlCreateLabel('&Birth Year', 120, 245, 75, 20)
    Local $idBD = GUICtrlCreateEdit('', 120, 262, 45, 25, $ES_Number)
    GUICtrlCreateLabel('&Pre Warn', 170, 245, 75, 20)
    Local $idCboPreWarn = GUICtrlCreateCombo("", 170, 262, 30, 25)
    GUICtrlSetData($idCboPreWarn, "0|1|2|3|4|5", "0")
    Local $idBtnOK = GUICtrlCreateButton("&Save Reminder", 10, 292, 180, 25)
    GUICtrlSetState($idBtnOK, $GUI_DISABLE)
    GUISetState(@SW_SHOW)

    While 1
        $msg = GUIGetMsg()
        Switch $msg
            Case $idInpEvent
                $sEvent = GUICtrlRead($idInpEvent)
                If $sEvent = '' Then
                    GUICtrlSetState($idBtnOK, $GUI_DISABLE)
                Else
                    GUICtrlSetState($idBtnOK, $GUI_ENABLE)
                EndIf
            Case $idBtnOK
                $dtEvenDate = GUICtrlRead($idDate)
                $iHour = '00' & GUICtrlRead($idCboHour)
                $iMinute = '00' & GUICtrlRead($idCboMinute)
                $iTime = StringRight($iHour, 2) & ":" & StringRight($iMinute, 2)
                $sRep = GUICtrlRead($idCboRepeat)
                $iVal = GUICtrlRead($idVal)
                $iBD = GUICtrlRead($idBD)
                $iPreWarn = Int(GUICtrlRead($idCboPreWarn))
                ;"Event|Date+Time|Repeated|Interval|Birthdate|PreWarn|HiddenSort"
                GUICtrlCreateListViewItem($sEvent & "|" & $dtEvenDate & ' ' & $iTime & '|' & $sRep & '|' & $iVal & '|' & $iBD & '|' & $iPreWarn & '|' & _DateAdd('d', $iPreWarn * -1, $dtEvenDate & ' ' & $iTime), $idLV)
                GUIDelete($hRem)
                ExitLoop
            Case $GUI_EVENT_CLOSE
                GUIDelete($hRem)
                ExitLoop
        EndSwitch
    WEnd
    GUISetState(BitOR(@SW_ENABLE, @SW_SHOW), $hMain)
    Opt('GUIOnEventMode', 1)
    ConsoleWrite(Opt('GUIOnEventMode') & @CRLF)
    AdlibUnRegister('_CheckRemind')
    _GUICtrlListView_BeginUpdate($idLV)
    _SaveLV()
    _GUICtrlListView_SimpleSort($idLV, $g_bSortSense, 6, False) ; Prevent sort direction toggling for next insertion
    _GUICtrlListView_EndUpdate($idLV)
    AdlibRegister('_CheckRemind', 15000)
EndFunc   ;==>_Add

Func _Delete()
    Local $aLV_Selected = _GUICtrlListView_GetSelectedIndices($idLV, True)
    ;_ArrayDisplay($aLV_Selected, 'Line 236')
    Local $sQuest
    For $i = 1 To $aLV_Selected[0]
        $sQuest &= _GUICtrlListView_GetItemTextString($idLV, $aLV_Selected[$i])
        If $i <> $aLV_Selected[0] Then $sQuest &= @CRLF
    Next
    Local $iRet = MsgBox(BitOR($MB_YESNO, $MB_ICONQUESTION), 'Delete ' & $aLV_Selected[0] & ' selected Items', $sQuest, 0, $hMain)
    If $iRet <> $IDNO Then _GUICtrlListView_DeleteItemsSelected($idLV)
EndFunc   ;==>_Delete

the messagebox "incompatible Data?" must be answered with Yes, but i suggest to save the datafile or to open it before in scite.

Edit: The Prewarn Value are the days before the EventDate+Time is first reminded (and snoozed) in a 4 hour rythmn, therefor the _CheckRemind func is enhanced and in the testing state.

Edited by AutoBert
PreWarn inserted
Link to post
Share on other sites

@AutoBert

You have started adding bells and whistles.This adds complexity to the code.

Some points that I noticed:

CheckRemider shoud return if (at the start) there is no reminder (ie If $aRemind[1] = "" Then Return) .

The add reminder Form is scrambled

Reminders are reached before the defined time. Also if I exit and restart the program todays reminders are reached.

I like your code and learn new things by examining.

Thanks

Link to post
Share on other sites
On 11/19/2022 at 9:24 AM, hawkair said:

The add reminder Form is scrambled

Ups, a typo and sleeping while testing.

 

On 11/19/2022 at 9:24 AM, hawkair said:

Reminders are reached before the defined time. Also if I exit and restart the program todays reminders are reached.

I know that _CheckRemind() isn't perfect. Should be better now with new created Reminder or already existing Reminders after moved.

#AutoIt3Wrapper_UseX64=y
#AutoIt3Wrapper_Res_LegalCopyright=autoBert
#AutoIt3Wrapper_Res_Language=1031
#AutoIt3Wrapper_AU3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w 4
#AutoIt3Wrapper_Run_Tidy=y
#AutoIt3Wrapper_Run_Au3Stripper=n
#Au3Stripper_Parameters=/mo

#include <GUIConstants.au3>
#include <GuiListView.au3>
#include <String.au3>
#include <Date.au3>
#include <File.au3>

#cs
    Nice to have (when it's done):
        Change Txt-File saving to SQLite based saving
        Split in 2 Apps: 1 for Add Data
                         1 for Alarm from Reminder
    What's to do:
        Implement checking of DateTime for alarm
        Testing (maybe enhance)
#ce

Opt('GUIOnEventMode', 1)
Global $g_bSortSense = False
Global Const $sLV_SavePath = @ScriptDir & '\Reminder.LV.txt'
Global $iMax = 0 ; no timeout
;Global $iMax = 15 ; sec timeout
Global $hMain = GUICreate("Reminder", 600, 500, -1, -1), $hRem
GUISetBkColor(0x6BC072)
Global $idLV = GUICtrlCreateListView("Event|Date+Time|Repeated|Interval|Birthdate|PreWarn|HiddenSort", 5, 5, 590, 445, BitOR($LVS_SHOWSELALWAYS, $LVS_REPORT), BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT))
GUICtrlSetBkColor(-1, 0xA6D9AA)
GUICtrlSetOnEvent($idLV, '_SortByCol')
_GUICtrlListView_SetColumnWidth($idLV, 0, 200)
_GUICtrlListView_SetColumnWidth($idLV, 1, 140)
_GUICtrlListView_SetColumnWidth($idLV, 2, 80)
_GUICtrlListView_SetColumnWidth($idLV, 3, 70)
_GUICtrlListView_SetColumnWidth($idLV, 4, 36)
_GUICtrlListView_SetColumnWidth($idLV, 5, 70)
_GUICtrlListView_HideColumn($idLV, 6)

Global $idAdd = GUICtrlCreateButton("&Add a new reminder", 15, 460, 230, 30)
Global $idDelete = GUICtrlCreateButton("&Delete selected reminders", 260, 460, 230, 30)
Global $idExit = GUICtrlCreateButton("E&xit", 505, 460, 80, 30)

GUISetOnEvent($GUI_EVENT_CLOSE, '_Exit')
GUICtrlSetOnEvent($idDelete, '_Delete')
GUICtrlSetOnEvent($idAdd, '_Add')
GUICtrlSetOnEvent($idExit, '_Exit')
_GUICtrlListView_RegisterSortCallBack($idLV) ; damit man das Listview (mit Klick auf die Spaltenüberschrift) sortieren kann
_GUICtrlListView_SortItems($idLV, 6)     ; Einträge entsprechend sortieren
_ReadLV()
GUISetState()
_CheckRemind()

While 1
    Sleep(10000)
WEnd

Func _CheckRemind()
    Local $sQuest, $sFlag, $iRet, $iDiff, $aDate, $aTime, $dtNewDate, $dtHidSort, $sTitle
    Local $aRemind = _GUICtrlListView_GetItemTextArray($idLV, 0) ;Item 0 allways oldest in remindeing-queue
    _DateTimeSplit($aRemind[2], $aDate, $aTime)
    $sQuest &= 'is reached!' & @CRLF
    If $aRemind[3] <> 'no' Then
        $sTitle &= $aRemind[1]
        $sQuest &= 'Move for ' & $aRemind[4] & ' * ' & StringTrimRight($aRemind[3], 2) & '(s) ?'
        $sFlag = BitOR($MB_ICONINFORMATION, $MB_YESNO)
    Else
        $sFlag = BitOR($MB_ICONINFORMATION, $MB_OK)
    EndIf
    ;_ArrayDisplay($aRemind, 'Line 73')
    Local $dtNow = @YEAR & '/' & @MON & '/' & @MDAY & ' ' & StringRight('00' & @HOUR, 2) & ':' & StringRight('00' & @MIN, 2)
    ConsoleWrite('line 75: ' & $dtNow & ' < ' & $aRemind[7] & ' Return? ' & ($dtNow < $aRemind[2]) & @CRLF)
    If $dtNow < $aRemind[7] Then AdlibRegister('_CheckRemind', 15000)
    If $dtNow < $aRemind[7] Then Return
    AdlibUnRegister('_CheckRemind')
    _GUICtrlListView_BeginUpdate($idLV)
    $iDiff = _DateDiff('d', $dtNow, $aRemind[7])
    ConsoleWrite('DtDiff: ' & $iDiff & @CRLF)
    ;   Exit
    If $aRemind[6] <> "" And $iDiff < 0 And $iDiff >= $aRemind[6] * -1 Then
        $dtHidSort = StringTrimRight(_DateAdd('h', 4, $dtNow), 2) & '00'
        If $dtHidSort < $aRemind[2] Then
            ConsoleWrite($aRemind[2] & '|' & $dtNow & @CRLF)
            $sTitle = $aRemind[1] & ' Pre Warning (snooze)'
            $sFlag = BitOR($MB_ICONINFORMATION, $MB_OK)
            $sQuest = 'Will be moved to  ' & $dtHidSort & '!'
        EndIf
    Else
        $sTitle &= $aRemind[1]
        $sQuest &= 'Move for ' & $aRemind[4] & ' * ' & StringTrimRight($aRemind[3], 2) & '(s) ?'
        $sFlag = BitOR($MB_ICONINFORMATION, $MB_YESNO)
    EndIf
    $iRet = MsgBox($sFlag, $sTitle & ' ' & $aRemind[2], $sQuest, $iMax, $hMain)
    If $aRemind[3] <> 'no' Then
        If $iRet <> $IDNO Then
            If StringInStr($sTitle, 'Pre Warning (snooze)') Then
                ConsoleWrite($aRemind[7] & '=>' & $dtHidSort & @CRLF)
                _GUICtrlListView_SetItemText($idLV, 0, $dtHidSort, 6)
            Else
                $dtNewDate = _DateAdd(StringLeft($aRemind[3], 1), $aRemind[4], $aDate[1] & '/' & $aDate[2] & '/' & $aDate[3] & ' ' & $aTime[1] & ':' & $aTime[2])
                ConsoleWrite($aRemind[2] & '=>' & $dtNewDate & @CRLF)
                _GUICtrlListView_SetItemText($idLV, 0, $dtNewDate, 1)
                $dtHidSort = _DateAdd('d', $aRemind[6] * -1, $dtNewDate)
                ConsoleWrite($aRemind[7] & '=>' & $dtHidSort & @CRLF)
                _GUICtrlListView_SetItemText($idLV, 0, $dtHidSort, 6)
            EndIf
        EndIf
    Else
        If $iRet <> $IDNO Then _GUICtrlListView_DeleteItem($idLV, 0)
    EndIf
    _GUICtrlListView_SimpleSort($idLV, $g_bSortSense, 6, False) ; Prevent sort direction toggling for next insertion
    _GUICtrlListView_EndUpdate($idLV)
    _SaveLV()
    AdlibRegister('_CheckRemind')
    ;to be checked
EndFunc   ;==>_CheckRemind

Func _ReadLV()
    Local $aLV, $sLV_Item, $iCols, $sQuest, $sFlag, $sTitle = 'incompatible Data?', $iRet
    _FileReadToArray($sLV_SavePath, $aLV, $FRTA_NOCOUNT, '|')
    $iCols = _GUICtrlListView_GetColumnCount($idLV)
    ConsoleWrite($iCols & '|' & UBound($aLV, 2) & @CRLF)
    If $iCols <> UBound($aLV, 2) Then ;Return
        $sQuest = 'App has ' & $iCols & ' Cols, but DataFile has ' & UBound($aLV, 2) & ' Cols.' & @CRLF & @CRLF
        $sQuest &= 'Continue anyway?'
        $sFlag = BitOR($MB_ICONINFORMATION, $MB_YESNO)
        $iRet = MsgBox($sFlag, $sTitle, $sQuest, $iMax, $hMain)
        If $iRet <> $IDYES Then Exit
    EndIf
    _ArraySort($aLV, 0, 0, 0, 6)
    _GUICtrlListView_DeleteAllItems($idLV)
    ;_ArrayDisplay($aLV, 'Line 135 ')
    If UBound($aLV, 2) < $iCols Then $iCols = UBound($aLV, 2)
    For $i = 0 To UBound($aLV, 1) - 1
        $sLV_Item = ''
        For $j = 0 To $iCols - 1
            $sLV_Item &= $aLV[$i][$j] & '|'
        Next
        $sLV_Item = StringTrimRight($sLV_Item, 1)
        GUICtrlCreateListViewItem($sLV_Item, $idLV)
    Next
EndFunc   ;==>_ReadLV


Func _SaveLV()
    Local $sLV_AllItems, $hFile
    For $i = 0 To _GUICtrlListView_GetItemCount($idLV) - 1
        $sLV_AllItems &= _GUICtrlListView_GetItemTextString($idLV, $i) & @CRLF
    Next
    $sLV_AllItems = StringTrimRight($sLV_AllItems, 2)
    ;   MsgBox(0, '', $sLV_AllItems)
    FileMove($sLV_SavePath, StringReplace($sLV_SavePath, '.txt', '.bak'), $FC_OVERWRITE)
    $hFile = FileOpen($sLV_SavePath, $FO_OVERWRITE)
    FileWrite($hFile, $sLV_AllItems)
    FileClose($hFile)
EndFunc   ;==>_SaveLV

Func _exit()
    _SaveLV()
    ConsoleWrite(_GUICtrlListView_GetColumnWidth($idLV, 1) & @CRLF)
    Exit
EndFunc   ;==>_exit

Func _SortByCol()
    _GUICtrlListView_SortItems($idLV, GUICtrlGetState($idLV)) ; Einträge entsprechend sortieren
EndFunc   ;==>_SortByCol

Func _Add()
    Opt('GUIOnEventMode', 0)
    Local $msg, $sRep = 'dayly|weekly|monthly|yearly', $sEvent, $dtEvenDate, $iHour, $iMinute, $iTime, $iVal, $iBD, $iPreWarn
    $hRem = GUICreate("Add a reminder", 200, 320, -1, -1, Default, Default, $hMain)
    GUICtrlCreateLabel("Reminder Name", 10, 5, 180, 25, $ES_center)
    Local $idInpEvent = GUICtrlCreateInput("", 10, 25, 180, 20)
    Local $idDate = GUICtrlCreateMonthCal(@YEAR & "/" & @MON & "/" & @MDAY, 10, 55, 180, 160, $MCS_NOTODAY)
    GUICtrlCreateLabel("&Hour:", 5, 223, 30, 25, $SS_RIGHT)
    Local $idCboHour = GUICtrlCreateCombo("", 40, 220, 40, 25)
    GUICtrlSetData($idCboHour, "00|01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19|20|21|22|23")
    Local $idCboMinute = GUICtrlCreateCombo("", 140, 220, 40, 25)
    GUICtrlSetData($idCboMinute, "00|05|10|15|20|25|30|35|40|45|50|55")
    GUICtrlCreateLabel('&Repeat', 5, 245, 60, 20)
    Local $idCboRepeat = GUICtrlCreateCombo("", 5, 262, 60, 25)
    GUICtrlSetData($idCboRepeat, "no|dayly|weekly|Monthly|Yearly", "no")
    GUICtrlCreateLabel('&Value', 70, 245, 75, 20)
    Local $idVal = GUICtrlCreateEdit('', 70, 262, 45, 25, $ES_Number)
    GUICtrlCreateLabel('&Birth Year', 120, 245, 75, 20)
    Local $idBD = GUICtrlCreateEdit('', 120, 262, 45, 25, $ES_Number)
    GUICtrlCreateLabel('&Pre Warn', 170, 245, 75, 20)
    Local $idCboPreWarn = GUICtrlCreateCombo("", 170, 262, 30, 25)
    GUICtrlSetData($idCboPreWarn, "0|1|2|3|4|5", "0")
    Local $idBtnOK = GUICtrlCreateButton("&Save Reminder", 10, 292, 180, 25)
    GUICtrlSetState($idBtnOK, $GUI_DISABLE)
    GUISetState(@SW_SHOW)

    While 1
        $msg = GUIGetMsg()
        Switch $msg
            Case $idInpEvent
                $sEvent = GUICtrlRead($idInpEvent)
                If $sEvent = '' Then
                    GUICtrlSetState($idBtnOK, $GUI_DISABLE)
                Else
                    GUICtrlSetState($idBtnOK, $GUI_ENABLE)
                EndIf
            Case $idBtnOK
                $dtEvenDate = GUICtrlRead($idDate)
                $iHour = '00' & GUICtrlRead($idCboHour)
                $iMinute = '00' & GUICtrlRead($idCboMinute)
                $iTime = StringRight($iHour, 2) & ":" & StringRight($iMinute, 2)
                $sRep = GUICtrlRead($idCboRepeat)
                $iVal = GUICtrlRead($idVal)
                $iBD = GUICtrlRead($idBD)
                $iPreWarn = Int(GUICtrlRead($idCboPreWarn))
                ;"Event|Date+Time|Repeated|Interval|Birthdate|PreWarn|HiddenSort"
                GUICtrlCreateListViewItem($sEvent & "|" & $dtEvenDate & ' ' & $iTime & '|' & $sRep & '|' & $iVal & '|' & $iBD & '|' & $iPreWarn & '|' & _DateAdd('d', $iPreWarn * -1, $dtEvenDate & ' ' & $iTime), $idLV)
                GUIDelete($hRem)
                ExitLoop
            Case $GUI_EVENT_CLOSE
                GUIDelete($hRem)
                ExitLoop
        EndSwitch
    WEnd
    GUISetState(BitOR(@SW_ENABLE, @SW_SHOW), $hMain)
    Opt('GUIOnEventMode', 1)
    ConsoleWrite(Opt('GUIOnEventMode') & @CRLF)
    AdlibUnRegister('_CheckRemind')
    _GUICtrlListView_BeginUpdate($idLV)
    _SaveLV()
    _GUICtrlListView_SimpleSort($idLV, $g_bSortSense, 6, False) ; Prevent sort direction toggling for next insertion
    _GUICtrlListView_EndUpdate($idLV)
    AdlibRegister('_CheckRemind', 15000)
EndFunc   ;==>_Add

Func _Delete()
    Local $aLV_Selected = _GUICtrlListView_GetSelectedIndices($idLV, True)
    ;_ArrayDisplay($aLV_Selected, 'Line 238')
    Local $sQuest
    For $i = 1 To $aLV_Selected[0]
        $sQuest &= _GUICtrlListView_GetItemTextString($idLV, $aLV_Selected[$i])
        If $i <> $aLV_Selected[0] Then $sQuest &= @CRLF
    Next
    Local $iRet = MsgBox(BitOR($MB_YESNO, $MB_ICONQUESTION), 'Delete ' & $aLV_Selected[0] & ' selected Items', $sQuest, 0, $hMain)
    If $iRet <> $IDNO Then _GUICtrlListView_DeleteItemsSelected($idLV)
EndFunc   ;==>_Delete

 

Edited by AutoBert
Link to post
Share on other sites

@AutoBert

I am sorry I didn't mean to sound judgemental.

I am indeed greatful for the time and the effort you put into this.

I added a line in checkRemind to take care of when the LV files are empty(ie there is no reminder) and now the program works like a charm.

Whithout this line when i Started the program it repeatedly displayed the message "is reached....." and would not continue.

The first lines of the amended CheckRemind

Func _CheckRemind()
    Local $sQuest, $sFlag, $iRet, $iDiff, $aDate, $aTime, $dtNewDate, $dtHidSort, $sTitle
    Local $aRemind = _GUICtrlListView_GetItemTextArray($idLV, 0) ;Item 0 allways oldest in remindeing-queue
    If $aRemind[1] = "" Then Return
    _DateTimeSplit($aRemind[2], $aDate, $aTime)
    $sQuest &= 'is reached!' & @CRLF

 

Thanks AutoBert. Great Job!!

 

 

Edited by hawkair
a small correction was needed in the code
Link to post
Share on other sites
4 hours ago, hawkair said:

I saw what you did with the new function calls and now I should be able to do sth on my own.

Good to read

 

4 hours ago, hawkair said:

It will probably take some time though...

Maybe with my newest source a little be easier:

#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Res_LegalCopyright=autoBert
#AutoIt3Wrapper_Res_Language=1031
#AutoIt3Wrapper_AU3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
#AutoIt3Wrapper_Run_Tidy=y
#Au3Stripper_Parameters=/mo
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

#include <GUIConstants.au3>
#include <GuiListView.au3>
#include <String.au3>
#include <Date.au3>
#include <File.au3>

#cs
    Nice to have (when it's done):
        Change Txt-File saving to SQLite based saving
        Split in 2 Apps: 1 for Add Data
                         1 for Alarm from Reminder
    What's to do:
        Implement checking of DateTime for alarm
        Testing (maybe enhance)
#ce

Opt('GUIOnEventMode', 1)
Global $g_bSortSense = False
Global Const $sLV_SavePath = @ScriptDir & '\Reminder.LV.txt'
Global $iMax = 0 ; no timeout
;Global $iMax = 15 ; sec timeout
Global $hMain = GUICreate("Reminder", 800, 500, -1, -1), $hRem
GUISetBkColor(0x6BC072)
Global $idLV = GUICtrlCreateListView("Event|Date+Time|Repeated|Interval|BaseYear|PreWarn|HiddenSort|PreWarn Text", 5, 5, 790, 445, BitOR($LVS_SHOWSELALWAYS, $LVS_REPORT), BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT))
GUICtrlSetBkColor(-1, 0xA6D9AA)
;GUICtrlSetOnEvent($idLV, '_SortByCol')
_GUICtrlListView_SetColumnWidth($idLV, 0, 180)
_GUICtrlListView_SetColumnWidth($idLV, 1, 140)
_GUICtrlListView_SetColumnWidth($idLV, 2, 80)
_GUICtrlListView_SetColumnWidth($idLV, 3, 70)
_GUICtrlListView_SetColumnWidth($idLV, 4, 36)
_GUICtrlListView_SetColumnWidth($idLV, 5, 70)
_GUICtrlListView_SetColumnWidth($idLV, 6, 0)
_GUICtrlListView_SetColumnWidth($idLV, 7, 200)
Global $idBtnAdd = GUICtrlCreateButton("&Add a new reminder", 5, 460, 230, 30)
Global $idBtnDelete = GUICtrlCreateButton("&Delete selected reminders", 245, 460, 230, 30)
Global $idBtnEdit = GUICtrlCreateButton("&Edit first selected reminder", 480, 460, 230, 30)
;GUICtrlSetState(-1, $GUI_DISABLE)
Global $idBtnExit = GUICtrlCreateButton("E&xit", 715, 460, 80, 30)
GUISetOnEvent($GUI_EVENT_CLOSE, '_Exit')
GUICtrlSetOnEvent($idBtnDelete, '_Delete')
GUICtrlSetOnEvent($idBtnAdd, '_AddEdit')
GUICtrlSetOnEvent($idBtnEdit, '_AddEdit')
GUICtrlSetOnEvent($idBtnExit, '_Exit')
_GUICtrlListView_RegisterSortCallBack($idLV) ; damit man das Listview (mit Klick auf die Spaltenüberschrift) sortieren kann
_GUICtrlListView_SortItems($idLV, 6)     ; Einträge entsprechend sortieren
_ReadLV()
GUISetState()
_CheckRemind()

While 1
    Sleep(10000)
WEnd

Func _CheckRemind()
    Local $sQuest, $sFlag, $iRet, $iDiff, $aDate, $aTime, $dtNewDate, $dtHidSort, $sTitle
    Local $aRemind = _GUICtrlListView_GetItemTextArray($idLV, 0) ;Item 0 allways oldest in remindeing-queue
    _DateTimeSplit($aRemind[2], $aDate, $aTime)
    $sQuest &= 'is reached!' & @CRLF
    If $aRemind[3] <> 'no' Then
        $sTitle = $aRemind[1]
        $sQuest &= 'Move for ' & $aRemind[4] & ' * ' & StringTrimRight($aRemind[3], 2) & '(s) ?'
        $sFlag = BitOR($MB_ICONQUESTION, $MB_YESNO)
    Else
        $sFlag = BitOR($MB_ICONINFORMATION, $MB_OK)
    EndIf
    ;_ArrayDisplay($aRemind, 'Line 75')
    Local $dtNow = @YEAR & '/' & @MON & '/' & @MDAY & ' ' & StringRight('00' & @HOUR, 2) & ':' & StringRight('00' & @MIN, 2)
    ;ConsoleWrite('line 77: ' & $dtNow & ' < ' & $aRemind[7] & ' Return? ' & ($dtNow < $aRemind[2]) & @CRLF)
    If $dtNow < $aRemind[7] Then AdlibRegister('_CheckRemind', 15000)
    If $dtNow < $aRemind[7] Then Return
    AdlibUnRegister('_CheckRemind')
    _GUICtrlListView_BeginUpdate($idLV)
    $iDiff = _DateDiff('d', $dtNow, $aRemind[7])
    ;ConsoleWrite('DtDiff: ' & $iDiff & @CRLF)
    ;   Exit
    If (Int($aRemind[6]) <> 0) And $iDiff < 0 And $iDiff >= $aRemind[6] * -1 Then
        $dtHidSort = StringTrimRight(_DateAdd('h', 4, $dtNow), 2) & '00'
        ;ConsoleWrite('snooze! ' & $dtHidSort & @CRLF)
        If $dtHidSort <= $aRemind[2] Then
            ;ConsoleWrite($aRemind[2] & '|' & $dtNow & @CRLF)
            $sTitle = $aRemind[1] & ' Pre Warning (snooze)'
            $sFlag = BitOR($MB_ICONINFORMATION, $MB_OK)
            $sQuest = $aRemind[8] & @CRLF & 'Next Pre Warning moved to  ' & $dtHidSort & '!'
        EndIf
    Else
        ;ConsoleWrite('normal' & @CRLF)
        $sTitle = $aRemind[1]
        If $aRemind[3] <> 'no' Then
            $sQuest &= 'is reached!' & @CRLF
            $sQuest = 'Move for ' & $aRemind[4] & ' * ' & StringTrimRight($aRemind[3], 2) & '(s) ?'
            $sFlag = BitOR($MB_ICONQUESTION, $MB_YESNO)
        Else

            $sQuest &= 'Will be deleted!'
            $sFlag = BitOR($MB_ICONINFORMATION, $MB_OK)
        EndIf
    EndIf
    $iRet = MsgBox($sFlag, $sTitle & ' ' & $aRemind[2], $sQuest, $iMax, $hMain)
    If $aRemind[3] <> 'no' Or StringInStr($sTitle, 'Pre Warning (snooze)') Then
        ;       If $iRet <> $IDNO Then
        If StringInStr($sTitle, 'Pre Warning (snooze)') Then
            ;ConsoleWrite('snooze!!' & @CRLF)
            ;ConsoleWrite($aRemind[7] & '=>' & $dtHidSort & @CRLF)
            _GUICtrlListView_SetItemText($idLV, 0, $dtHidSort, 6)
        ElseIf $aRemind[3] <> 'no' Then
            $dtNewDate = _DateAdd(StringLeft($aRemind[3], 1), $aRemind[4], $aDate[1] & '/' & $aDate[2] & '/' & $aDate[3] & ' ' & $aTime[1] & ':' & $aTime[2])
            ;ConsoleWrite($aRemind[2] & '=>' & $dtNewDate & @CRLF)
            _GUICtrlListView_SetItemText($idLV, 0, $dtNewDate, 1)
            If $aRemind[4] < 0 Then $aRemind[4] = $aRemind[4] * -1
            $dtHidSort = _DateAdd('d', $aRemind[4] * -1, $dtNewDate)
            ;ConsoleWrite($aRemind[7] & '=>' & $dtHidSort & @CRLF)
            _GUICtrlListView_SetItemText($idLV, 0, $dtHidSort, 6)
        EndIf
    EndIf
    ;   Else
    If Not (StringInStr($sTitle, 'Pre Warning (snooze)')) And $aRemind[3] = 'no' Then
        ;ConsoleWrite('delete: ' & _GUICtrlListView_GetItemTextString($idLV, 0) & @CRLF & $sFlag & @CRLF & $sQuest & @CRLF)
        If $iRet <> $IDNO And $aRemind[2] <= $dtNow Then _GUICtrlListView_DeleteItem($idLV, 0)
    EndIf
    _GUICtrlListView_SimpleSort($idLV, $g_bSortSense, 6, False) ; Prevent sort direction toggling for next insertion
    _GUICtrlListView_EndUpdate($idLV)
    _SaveLV()
    AdlibRegister('_CheckRemind')
    ;to be checked
EndFunc   ;==>_CheckRemind

Func _ReadLV()
    Local $aLV, $sLV_Item, $iCols, $sQuest, $sFlag, $sTitle = 'incompatible Data?', $iRet
    _FileReadToArray($sLV_SavePath, $aLV, $FRTA_NOCOUNT, '|')
    $iCols = _GUICtrlListView_GetColumnCount($idLV)
    ;ConsoleWrite($iCols & '|' & UBound($aLV, 2) & @CRLF)
    If $iCols <> UBound($aLV, 2) Then ;Return
        $sQuest = 'App has ' & $iCols & ' Cols, but DataFile has ' & UBound($aLV, 2) & ' Cols.' & @CRLF & @CRLF
        $sQuest &= 'Continue anyway?'
        $sFlag = BitOR($MB_ICONINFORMATION, $MB_YESNO)
        $iRet = MsgBox($sFlag, $sTitle, $sQuest, $iMax, $hMain)
        If $iRet <> $IDYES Then Exit
    EndIf
    _ArraySort($aLV, 0, 0, 0, 6)
    _GUICtrlListView_DeleteAllItems($idLV)
    ;_ArrayDisplay($aLV, 'Line 150 ')
    If UBound($aLV, 2) < $iCols Then $iCols = UBound($aLV, 2)
    For $i = 0 To UBound($aLV, 1) - 1
        $sLV_Item = ''
        For $j = 0 To $iCols - 1
            $sLV_Item &= $aLV[$i][$j] & '|'
        Next
        $sLV_Item = StringTrimRight($sLV_Item, 1)
        GUICtrlCreateListViewItem($sLV_Item, $idLV)
    Next
    _GUICtrlListView_SetColumnWidth($idLV, 6, 0)
EndFunc   ;==>_ReadLV


Func _SaveLV()
    Local $sLV_AllItems, $hFile
    For $i = 0 To _GUICtrlListView_GetItemCount($idLV) - 1
        $sLV_AllItems &= _GUICtrlListView_GetItemTextString($idLV, $i) & @CRLF
    Next
    $sLV_AllItems = StringTrimRight($sLV_AllItems, 2)
    ;   MsgBox(0, '', $sLV_AllItems)
    FileMove($sLV_SavePath, StringReplace($sLV_SavePath, '.txt', '.bak'), $FC_OVERWRITE)
    $hFile = FileOpen($sLV_SavePath, $FO_OVERWRITE)
    FileWrite($hFile, $sLV_AllItems)
    FileClose($hFile)
EndFunc   ;==>_SaveLV

Func _exit()
    _SaveLV()
    ;ConsoleWrite(_GUICtrlListView_GetColumnWidth($idLV, 1) & @CRLF)
    Exit
EndFunc   ;==>_exit
#cs
Func _SortByCol()
    _GUICtrlListView_SortItems($idLV, GUICtrlGetState($idLV)) ; Einträge entsprechend sortieren
EndFunc   ;==>_SortByCol
#ce
Func _AddEdit()
    Local $idFrom = @GUI_CtrlId, $sFrmTitle, $aSelected, $aRemind[9], $sLVItem
    Local $msg, $dtEventDate, $dtEventTime, $iHour, $iMinute
    Switch $idFrom
        Case $idBtnAdd
            $sFrmTitle = "Add a reminder"
            _DateTimeSplit(@YEAR & '/' & @MON & '/' & @MDAY & ' 08:00', $dtEventDate, $dtEventTime)
        Case $idBtnEdit
            $aSelected = _GUICtrlListView_GetSelectedIndices($idLV, True)
            If $aSelected[0] = 0 Then Return
            $sFrmTitle = "Edit reminder"
            $aRemind = _GUICtrlListView_GetItemTextArray($idLV, $aSelected[1])
            _DateTimeSplit($aRemind[2], $dtEventDate, $dtEventTime)
    EndSwitch
    ;_ArrayDisplay($aRemind)
    Opt('GUIOnEventMode', 0)
    $hRem = GUICreate($sFrmTitle, 200, 360, -1, -1, Default, Default, $hMain)
    GUICtrlCreateLabel("Reminder Name", 10, 5, 180, 25, $ES_center)
    Local $idInpEvent = GUICtrlCreateInput("", 10, 25, 180, 20)
    GUICtrlSetTip($idInpEvent, 'The Reminder Name')
    Local $idDate = GUICtrlCreateMonthCal($dtEventDate[1] & "/" & $dtEventDate[2] & "/" & $dtEventDate[3], 10, 55, 180, 160, $MCS_NOTODAY)
    GUICtrlCreateLabel("&Hour:", 5, 223, 30, 25, $SS_RIGHT)
    Local $idCboHour = GUICtrlCreateCombo("", 40, 220, 40, 25)
    GUICtrlSetData($idCboHour, "00|01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19|20|21|22|23")
    Local $idCboMinute = GUICtrlCreateCombo("", 140, 220, 40, 25)
    GUICtrlSetData($idCboMinute, "00|05|10|15|20|25|30|35|40|45|50|55")
    GUICtrlCreateLabel('&Repeat', 5, 245, 60, 20)
    Local $idCboRepeat = GUICtrlCreateCombo("", 5, 262, 60, 25)
    GUICtrlSetData($idCboRepeat, "no|dayly|weekly|Monthly|Yearly", "no")
    GUICtrlCreateLabel('&Value', 70, 245, 75, 20)
    Local $idInpVal = GUICtrlCreateEdit('', 70, 262, 35, 25, $ES_Number)
    GUICtrlCreateLabel('&Base', 110, 245, 75, 20)
    Local $idInpBD = GUICtrlCreateEdit('', 110, 262, 45, 25, $ES_Number)
    GUICtrlCreateLabel('&Pre Warn', 160, 245, 75, 20)
    Local $idCboPreWarn = GUICtrlCreateCombo("", 160, 262, 30, 25)
    GUICtrlSetData($idCboPreWarn, "0|1|2|3|4|5", "0")
    GUICtrlCreateLabel("Pre Warning Text", 10, 295, 180, 25, $ES_center)
    Local $idInpPrewarn = GUICtrlCreateInput("", 10, 310, 180, 20)
    Local $idBtnOK = GUICtrlCreateButton("&Save Reminder", 10, 332, 180, 25)
    Switch $idFrom
        Case $idBtnEdit
            GUICtrlSetData($idInpEvent, $aRemind[1])
            GUICtrlSetData($idCboHour, $dtEventTime[1])
            GUICtrlSetData($idCboMinute, $dtEventTime[2])
            GUICtrlSetData($idCboRepeat, $aRemind[3])
            GUICtrlSetData($idInpVal, $aRemind[4])
            GUICtrlSetData($idInpBD, $aRemind[5])
            GUICtrlSetData($idCboPreWarn, $aRemind[6])
            GUICtrlSetData($idInpPrewarn, $aRemind[8])
        Case Else
            GUICtrlSetState($idBtnOK, $GUI_DISABLE)
    EndSwitch
    GUISetState(@SW_SHOW, $hRem)

    While 1
        $msg = GUIGetMsg()
        Switch $msg
            Case $idInpEvent
                $aRemind[1] = GUICtrlRead($idInpEvent)
                If $aRemind[1] = '' Then
                    GUICtrlSetState($idBtnOK, $GUI_DISABLE)
                Else
                    GUICtrlSetState($idBtnOK, $GUI_ENABLE)
                EndIf
            Case $idBtnOK
                $aRemind[1] = GUICtrlRead($idInpEvent)
                $dtEventDate = GUICtrlRead($idDate)
                $iHour = '00' & GUICtrlRead($idCboHour)
                $iMinute = '00' & GUICtrlRead($idCboMinute)
                $dtEventTime = StringRight($iHour, 2) & ":" & StringRight($iMinute, 2)
                $aRemind[2] = $dtEventDate & ' ' & $dtEventTime
                $aRemind[3] = GUICtrlRead($idCboRepeat)
                $aRemind[4] = GUICtrlRead($idInpVal)
                $aRemind[5] = GUICtrlRead($idInpBD)
                $aRemind[6] = Int(GUICtrlRead($idCboPreWarn))
                $aRemind[7] = _DateAdd('d', $aRemind[6] * -1, $aRemind[2])
                $aRemind[8] = GUICtrlRead($idInpPrewarn)
                For $i = 1 To 8
                    $sLVItem &= $aRemind[$i]
                    If $i < 8 Then $sLVItem &= '|'
                Next
                ;ConsoleWrite($sLVItem & @CRLF)
                ;"Event|Date+Time|Repeated|Interval|Birthdate|PreWarn|HiddenSort|PreWarn Text"
                ;_ArrayDisplay($aRemind)
                Switch $idFrom
                    Case $idBtnAdd
                        GUICtrlCreateListViewItem($sLVItem, $idLV)
                    Case $idBtnEdit
                        If GUICtrlCreateListViewItem($sLVItem, $idLV) > 0 Then _GUICtrlListView_DeleteItem($idLV, $aSelected[1])
                EndSwitch
                GUIDelete($hRem)
                ExitLoop
            Case $GUI_EVENT_CLOSE
                GUIDelete($hRem)
                ExitLoop
        EndSwitch
    WEnd
    GUISetState(BitOR(@SW_ENABLE, @SW_SHOW), $hMain)
    Opt('GUIOnEventMode', 1)
    ;ConsoleWrite(Opt('GUIOnEventMode') & @CRLF)
    AdlibUnRegister('_CheckRemind')
    _GUICtrlListView_BeginUpdate($idLV)
    _SaveLV()
    _GUICtrlListView_SimpleSort($idLV, $g_bSortSense, 6, False) ; Prevent sort direction toggling for next insertion
    _GUICtrlListView_EndUpdate($idLV)
    AdlibRegister('_CheckRemind', 15000)
EndFunc   ;==>_AddEdit

Func _Delete()
    Local $aLV_Selected = _GUICtrlListView_GetSelectedIndices($idLV, True)
    ;_ArrayDisplay($aLV_Selected, 'Line 296')
    Local $sQuest
    For $i = 1 To $aLV_Selected[0]
        $sQuest &= _GUICtrlListView_GetItemTextString($idLV, $aLV_Selected[$i])
        If $i <> $aLV_Selected[0] Then $sQuest &= @CRLF
    Next
    Local $iRet = MsgBox(BitOR($MB_YESNO, $MB_ICONQUESTION), 'Delete ' & $aLV_Selected[0] & ' selected Items', $sQuest, 0, $hMain)
    If $iRet <> $IDNO Then _GUICtrlListView_DeleteItemsSelected($idLV)
EndFunc   ;==>_Delete

 

Link to post
Share on other sites

The program is amazing!

I am already using it for organizing and time management and at the same time I test and do additions to suit my needs

I find it more suitable and practical than any free or paid alternative.

And I had the same thought with you to add an Edit function.

I also did some modifications in Checkremind but I didnt test the snooze function which you apparently did.

I also renamed function Add to AddReminder, Delete to DeleteReminder etc because I carry all my code in one file and I already have functions with those names.

Here is my code (When I have more time I will incorporate your additions and point out any bugs)

#AutoIt3Wrapper_UseX64=y
#AutoIt3Wrapper_Res_LegalCopyright=autoBert
#AutoIt3Wrapper_Res_Language=1031
#AutoIt3Wrapper_AU3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w 4
#AutoIt3Wrapper_Run_Tidy=y
#AutoIt3Wrapper_Run_Au3Stripper=n
#Au3Stripper_Parameters=/mo

#include <GUIConstants.au3>
#include <GuiListView.au3>
#include <String.au3>
#include <Date.au3>
#include <File.au3>

#cs
    Nice to have (when it's done):
    Change Txt-File saving to SQLite based saving
    Split in 2 Apps: 1 for Add Data
    1 for Alarm from Reminder
    What's to do:
    Implement checking of DateTime for alarm
    Testing (maybe enhance)
#ce

;~ Opt("TrayMenuMode", 1)
;~  TraySetIcon(@ScriptDir & "\Icons\Timers\3507737-alarm-clock-iconoteka-on-time-timer_107670.ico")
;~  $nTrayIcon1 = _TrayIconCreate("Title", @ScriptName, 0)
;~  _TrayIconSetState() ; Show the tray icon
;~  $nTrayMenu1 = _TrayCreateContextMenu() ;This one must exist
;~  $Tray1 = _TrayCreateItem("Tray1)
;~  _TrayItemSetIcon(-1, @ScriptName, -1)
;~  $Tray2 = _TrayCreateItem("Tray2")
;~  _TrayItemSetIcon(-1, @ScriptName, -2)
;~ $addReminderItem = TrayCreateItem("Add reminder")
;~ TrayCreateItem('')
;~ $show = TrayCreateItem("Open Reminder...")
;~ $exitItem = TrayCreateItem("Exit")
;~ $trayMsg = TrayGetMsg()
;~ Case $trayMsg = $addReminderItem

Opt('GUIOnEventMode', 1)
Global $g_bSortSense = False
Global Const $sLV_SavePath = @ScriptDir & '\Reminder.LV.txt'
Global $iMax = 0 ; no timeout
;Global $iMax = 15 ; sec timeout
Global $hMain = GUICreate("Reminder", 600, 500, -1, -1), $hRem
GUISetBkColor(0x6BC072)
Global $idLV = GUICtrlCreateListView("Event|Date+Time|Repeated|Interval|Birthdate|PreWarn|HiddenSort", 5, 5, 590, 445, BitOR($LVS_SHOWSELALWAYS, $LVS_REPORT), BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT))
GUICtrlSetBkColor(-1, 0xA6D9AA)
GUICtrlSetOnEvent($idLV, '_SortByCol')
_GUICtrlListView_SetColumnWidth($idLV, 0, 200)
_GUICtrlListView_SetColumnWidth($idLV, 1, 140)
_GUICtrlListView_SetColumnWidth($idLV, 2, 80)
_GUICtrlListView_SetColumnWidth($idLV, 3, 70)
_GUICtrlListView_SetColumnWidth($idLV, 4, 36)
_GUICtrlListView_SetColumnWidth($idLV, 5, 70)
_GUICtrlListView_HideColumn($idLV, 6)
Local $BtnInterval = 15, $BtnWid = 150
Global $idAdd = GUICtrlCreateButton("&Add a new reminder", $BtnInterval, 460, $BtnWid, 30)
Global $idDelete = GUICtrlCreateButton("&Delete selected reminders", $BtnInterval + ($BtnWid + $BtnInterval), 460, $BtnWid, 30)
Global $idEdit = GUICtrlCreateButton("&Edit selected reminder", $BtnInterval + 2 * ($BtnWid + $BtnInterval), 460, $BtnWid, 30)
Global $idExit = GUICtrlCreateButton("E&xit", $BtnInterval + 3 * ($BtnWid + $BtnInterval), 460, 80, 30)

GUISetOnEvent($GUI_EVENT_CLOSE, '_ExitReminder')
GUICtrlSetOnEvent($idDelete, '_DeleteReminder')
GUICtrlSetOnEvent($idAdd, '_AddReminder')
GUICtrlSetOnEvent($idEdit, '_EditReminder')
GUICtrlSetOnEvent($idExit, '_ExitReminder')
_GUICtrlListView_RegisterSortCallBack($idLV) ; damit man das Listview (mit Klick auf die Spaltenuberschrift) sortieren kann
_GUICtrlListView_SortItems($idLV, 6) ; Eintrage entsprechend sortieren
_ReadLV()
GUISetState()
_CheckRemind()

While 1
    Sleep(10000)
WEnd
Exit

Func _CheckRemind()
    Local $sQuest, $sFlag, $iRet, $iDiff, $aDate, $aTime, $dtNewDate, $dtHidSort, $sTitle
    Local $aRemind = _GUICtrlListView_GetItemTextArray($idLV, 0) ;Item 0 allways oldest in remindeing-queue
    If $aRemind[1] = "" Then Return
    ;_ArrayDisplay($aRemind, 'Line 73')
    Local $dtNow = @YEAR & '/' & @MON & '/' & @MDAY & ' ' & StringRight('00' & @HOUR, 2) & ':' & StringRight('00' & @MIN, 2)
    ConsoleWrite('line 75: ' & $dtNow & ' < ' & $aRemind[7] & ' Return? ' & ($dtNow < $aRemind[2]) & @CRLF)
    If $dtNow < $aRemind[7] Then AdlibRegister('_CheckRemind', 15000)
    If $dtNow < $aRemind[7] Then Return
    _DateTimeSplit($aRemind[2], $aDate, $aTime)

    $sQuest &= 'is reached!' & @CRLF
    If $aRemind[3] <> 'no' Then
        $sTitle &= $aRemind[1]
        $sQuest &= 'Move for ' & $aRemind[4] & ' * ' & StringTrimRight($aRemind[3], 2) & '(s) ?'
        $sFlag = BitOR($MB_ICONINFORMATION, $MB_YESNO)
    Else
        $sFlag = BitOR($MB_ICONINFORMATION, $MB_OK)
    EndIf
    AdlibUnRegister('_CheckRemind')
    _GUICtrlListView_BeginUpdate($idLV)
    $iDiff = _DateDiff('d', $dtNow, $aRemind[7])
    ConsoleWrite('DtDiff: ' & $iDiff & @CRLF)
    ;   Exit
    If $aRemind[6] <> "" And $iDiff < 0 And $iDiff >= $aRemind[6] * -1 Then
        $dtHidSort = StringTrimRight(_DateAdd('h', 4, $dtNow), 2) & '00'
        If $dtHidSort < $aRemind[2] Then
            ConsoleWrite($aRemind[2] & '|' & $dtNow & @CRLF)
            $sTitle = $aRemind[1] & ' Pre Warning (snooze)'
            $sFlag = BitOR($MB_ICONINFORMATION, $MB_OK)
            $sQuest = 'Will be moved to  ' & $dtHidSort & '!'
        EndIf
    Else
;~      $sTitle &= $aRemind[1]
        $sTitle = $aRemind[1]
;~      $sQuest &= 'Move for ' & $aRemind[4] & ' * ' & StringTrimRight($aRemind[3], 2) & '(s) ?'
        $sQuest = 'Repeat in ' & $aRemind[4] & ' * ' & StringTrimRight($aRemind[3], 2) & '(s) ?'
        $sFlag = BitOR($MB_ICONINFORMATION, $MB_YESNO)
    EndIf
    $iRet = MsgBox($sFlag, $sTitle & ' ' & $aRemind[2], $sQuest, $iMax, $hMain)
    If $aRemind[3] <> 'no' Then;Repeated Reminder
        If $iRet <> $IDNO Then; Yes, do Repeat
            If StringInStr($sTitle, 'Pre Warning (snooze)') Then
                ConsoleWrite($aRemind[7] & '=>' & $dtHidSort & @CRLF)
                _GUICtrlListView_SetItemText($idLV, 0, $dtHidSort, 6)
            Else
                $dtNewDate = _DateAdd(StringLeft($aRemind[3], 1), $aRemind[4], $aDate[1] & '/' & $aDate[2] & '/' & $aDate[3] & ' ' & $aTime[1] & ':' & $aTime[2])
                ConsoleWrite($aRemind[2] & '=>' & $dtNewDate & @CRLF)
                _GUICtrlListView_SetItemText($idLV, 0, $dtNewDate, 1)
                $dtHidSort = _DateAdd('d', $aRemind[6] * -1, $dtNewDate)
                ConsoleWrite($aRemind[7] & '=>' & $dtHidSort & @CRLF)
                _GUICtrlListView_SetItemText($idLV, 0, $dtHidSort, 6)
            EndIf
        Else; No do NOT Repeat
            _GUICtrlListView_DeleteItem($idLV, 0)
        EndIf
    Else; NOT Repeated Reminder
        _GUICtrlListView_DeleteItem($idLV, 0)
    EndIf
    _GUICtrlListView_SimpleSort($idLV, $g_bSortSense, 6, False) ; Prevent sort direction toggling for next insertion
    _GUICtrlListView_EndUpdate($idLV)
    _SaveLV()
    AdlibRegister('_CheckRemind')
    ;to be checked
EndFunc   ;==>_CheckRemind

Func _ReadLV()
    Local $aLV, $sLV_Item, $iCols, $sQuest, $sFlag, $sTitle = 'incompatible Data?', $iRet
    _FileReadToArray($sLV_SavePath, $aLV, $FRTA_NOCOUNT, '|')
    $iCols = _GUICtrlListView_GetColumnCount($idLV)
    ConsoleWrite($iCols & '|' & UBound($aLV, 2) & @CRLF)
    If $iCols <> UBound($aLV, 2) Then ;Return
        $sQuest = 'App has ' & $iCols & ' Cols, but DataFile has ' & UBound($aLV, 2) & ' Cols.' & @CRLF & @CRLF
        $sQuest &= 'Continue anyway?'
        $sFlag = BitOR($MB_ICONINFORMATION, $MB_YESNO)
        $iRet = MsgBox($sFlag, $sTitle, $sQuest, $iMax, $hMain)
        If $iRet <> $IDYES Then Exit
    EndIf
    _ArraySort($aLV, 0, 0, 0, 6)
    _GUICtrlListView_DeleteAllItems($idLV)
    ;_ArrayDisplay($aLV, 'Line 135 ')
    If UBound($aLV, 2) < $iCols Then $iCols = UBound($aLV, 2)
    For $i = 0 To UBound($aLV, 1) - 1
        $sLV_Item = ''
        For $j = 0 To $iCols - 1
            $sLV_Item &= $aLV[$i][$j] & '|'
        Next
        $sLV_Item = StringTrimRight($sLV_Item, 1)
        GUICtrlCreateListViewItem($sLV_Item, $idLV)
    Next
EndFunc   ;==>_ReadLV


Func _SaveLV()
    Local $sLV_AllItems, $hFile
    For $i = 0 To _GUICtrlListView_GetItemCount($idLV) - 1
        $sLV_AllItems &= _GUICtrlListView_GetItemTextString($idLV, $i) & @CRLF
    Next
    $sLV_AllItems = StringTrimRight($sLV_AllItems, 2)
    ;   MsgBox(0, '', $sLV_AllItems)
    FileMove($sLV_SavePath, StringReplace($sLV_SavePath, '.txt', '.bak'), $FC_OVERWRITE)
    $hFile = FileOpen($sLV_SavePath, $FO_OVERWRITE)
    FileWrite($hFile, $sLV_AllItems)
    FileClose($hFile)
EndFunc   ;==>_SaveLV

Func _ExitReminder()
    _SaveLV()
    ConsoleWrite(_GUICtrlListView_GetColumnWidth($idLV, 1) & @CRLF)
    Exit
EndFunc   ;==>_ExitReminder

Func _SortByCol()
    _GUICtrlListView_SortItems($idLV, GUICtrlGetState($idLV)) ; Eintrage entsprechend sortieren
EndFunc   ;==>_SortByCol

Func _AddReminder()
    Opt('GUIOnEventMode', 0)
    Local $msg, $sRep = 'dayly|weekly|monthly|yearly', $sEvent, $dtEvenDate, $iHour, $iMinute, $iTime, $iVal, $iBD, $iPreWarn
    $hRem = GUICreate("Add a reminder", 200, 320, -1, -1, Default, Default, $hMain)
    GUICtrlCreateLabel("Reminder Name", 10, 5, 180, 25, $ES_center)
    Local $idInpEvent = GUICtrlCreateInput("", 10, 25, 180, 20)
    Local $idDate = GUICtrlCreateMonthCal(@YEAR & "/" & @MON & "/" & @MDAY, 10, 55, 180, 160, $MCS_NOTODAY)
    GUICtrlCreateLabel("&Hour:", 5, 223, 30, 25, $SS_RIGHT)
    Local $idCboHour = GUICtrlCreateCombo("08", 40, 220, 40, 25)
    GUICtrlSetData($idCboHour, "00|01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19|20|21|22|23")
    Local $idCboMinute = GUICtrlCreateCombo("00", 140, 220, 40, 25)
    GUICtrlSetData($idCboMinute, "00|05|10|15|20|25|30|35|40|45|50|55")
    GUICtrlCreateLabel('&Repeat', 5, 245, 60, 20)
    Local $idCboRepeat = GUICtrlCreateCombo("", 5, 262, 60, 25)
    GUICtrlSetData($idCboRepeat, "no|dayly|weekly|Monthly|Yearly", "no")
    GUICtrlCreateLabel('&Value', 70, 245, 75, 20)
    Local $idVal = GUICtrlCreateEdit('', 70, 262, 45, 25, $ES_Number)
    GUICtrlCreateLabel('&Birth Year', 120, 245, 75, 20)
    Local $idBD = GUICtrlCreateEdit('', 120, 262, 45, 25, $ES_Number)
    GUICtrlCreateLabel('&Pre Warn', 170, 245, 75, 20)
    Local $idCboPreWarn = GUICtrlCreateCombo("", 170, 262, 30, 25)
    GUICtrlSetData($idCboPreWarn, "0|1|2|3|4|5", "0")
    Local $idBtnOK = GUICtrlCreateButton("&Save Reminder", 10, 292, 180, 25)
    GUICtrlSetState($idBtnOK, $GUI_DISABLE)
    GUISetState(@SW_SHOW)

    While 1
        $msg = GUIGetMsg()
        Switch $msg
            Case $idInpEvent
                $sEvent = GUICtrlRead($idInpEvent)
                If $sEvent = '' Then
                    GUICtrlSetState($idBtnOK, $GUI_DISABLE)
                Else
                    GUICtrlSetState($idBtnOK, $GUI_ENABLE)
                EndIf
            Case $idBtnOK
                $dtEvenDate = GUICtrlRead($idDate)
                $iHour = '00' & GUICtrlRead($idCboHour)
                $iMinute = '00' & GUICtrlRead($idCboMinute)
                $iTime = StringRight($iHour, 2) & ":" & StringRight($iMinute, 2)
                $sRep = GUICtrlRead($idCboRepeat)
                $iVal = GUICtrlRead($idVal)
                $iBD = GUICtrlRead($idBD)
                $iPreWarn = Int(GUICtrlRead($idCboPreWarn))
                ;"Event|Date+Time|Repeated|Interval|Birthdate|PreWarn|HiddenSort"
                GUICtrlCreateListViewItem($sEvent & "|" & $dtEvenDate & ' ' & $iTime & '|' & $sRep & '|' & $iVal & '|' & $iBD & '|' & $iPreWarn & '|' & _DateAdd('d', $iPreWarn * -1, $dtEvenDate & ' ' & $iTime), $idLV)
                GUIDelete($hRem)
                ExitLoop
            Case $GUI_EVENT_CLOSE
                GUIDelete($hRem)
                ExitLoop
        EndSwitch
    WEnd
    GUISetState(BitOR(@SW_ENABLE, @SW_SHOW), $hMain)
    Opt('GUIOnEventMode', 1)
    ConsoleWrite(Opt('GUIOnEventMode') & @CRLF)
    AdlibUnRegister('_CheckRemind')
    _GUICtrlListView_BeginUpdate($idLV)
    _SaveLV()
    _GUICtrlListView_SimpleSort($idLV, $g_bSortSense, 6, False) ; Prevent sort direction toggling for next insertion
    _GUICtrlListView_EndUpdate($idLV)
    AdlibRegister('_CheckRemind', 15000)
EndFunc   ;==>_AddReminder

Func _EditReminder()
    Opt('GUIOnEventMode', 0)
    Local $tmp, $sDate, $aTime, $sQuest
    Local $aLV_Selected = _GUICtrlListView_GetSelectedIndices($idLV, True)
    ;_ArrayDisplay($aLV_Selected, 'Line 238')
    If $aLV_Selected[0] = 0 Then
        Opt('GUIOnEventMode', 1)
        Return MsgBox(262144, "No action", "nothing selected", 2)
    EndIf
    Local $aRemind = _GUICtrlListView_GetItemTextArray($idLV, $aLV_Selected[1])
;~  _ArrayDisplay ($aRemind)
    $tmp = StringSplit($aRemind[2], " ", 2)
    $sDate = $tmp[0]
    $aTime = StringSplit($tmp[1], ":", 2)

    Local $msg, $sRep = 'daily|weekly|monthly|yearly', $sEvent, $dtEvenDate, $iHour, $iMinute, $iTime, $iVal, $iBD, $iPreWarn
    $hRem = GUICreate("Edit a reminder", 200, 320, -1, -1, Default, Default, $hMain)
    GUICtrlCreateLabel("Reminder Name", 10, 5, 180, 25, $ES_center)
    Local $idInpEvent = GUICtrlCreateInput($aRemind[1], 10, 25, 180, 20)
    Local $idDate = GUICtrlCreateMonthCal($sDate, 10, 55, 180, 160, $MCS_NOTODAY)
    GUICtrlCreateLabel("&Hour:", 5, 223, 30, 25, $SS_RIGHT)
    Local $idCboHour = GUICtrlCreateCombo($aTime[0], 40, 220, 40, 25)
    GUICtrlSetData($idCboHour, "00|01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19|20|21|22|23")
    Local $idCboMinute = GUICtrlCreateCombo($aTime[1], 140, 220, 40, 25)
    GUICtrlSetData($idCboMinute, "00|05|10|15|20|25|30|35|40|45|50|55")
    GUICtrlCreateLabel('&Repeat', 5, 245, 60, 20)
    Local $idCboRepeat = GUICtrlCreateCombo($aRemind[3], 5, 262, 60, 25)
    GUICtrlSetData($idCboRepeat, "no|daily|weekly|Monthly|Yearly", $aRemind[3])
    GUICtrlCreateLabel('&Value', 70, 245, 75, 20)
    Local $idVal = GUICtrlCreateEdit($aRemind[4], 70, 262, 45, 25, $ES_Number)
    GUICtrlCreateLabel('&Birth Year', 120, 245, 75, 20)
    Local $idBD = GUICtrlCreateEdit($aRemind[5], 120, 262, 45, 25, $ES_Number)
    GUICtrlCreateLabel('&Pre Warn', 170, 245, 75, 20)
    Local $idCboPreWarn = GUICtrlCreateCombo($aRemind[6], 170, 262, 30, 25)
    GUICtrlSetData($idCboPreWarn, "0|1|2|3|4|5", "0")
    Local $idBtnOK = GUICtrlCreateButton("&Save Reminder", 10, 292, 180, 25)
    GUICtrlSetState($idBtnOK, $GUI_DISABLE)
    GUISetState(@SW_SHOW)

    While 1
        $msg = GUIGetMsg()
        Switch $msg
            Case $idInpEvent, $idDate, $idCboHour, $idCboMinute, $idCboRepeat, $idVal, $idBD, $idCboPreWarn
                $sEvent = GUICtrlRead($idInpEvent)
                If $sEvent = '' Then
                    GUICtrlSetState($idBtnOK, $GUI_DISABLE)
                Else
                    GUICtrlSetState($idBtnOK, $GUI_ENABLE)
                EndIf
            Case $idBtnOK
                $dtEvenDate = GUICtrlRead($idDate)
                $iHour = '00' & GUICtrlRead($idCboHour)
                $iMinute = '00' & GUICtrlRead($idCboMinute)
                $iTime = StringRight($iHour, 2) & ":" & StringRight($iMinute, 2)
                $sRep = GUICtrlRead($idCboRepeat)
                $iVal = GUICtrlRead($idVal)
                $iBD = GUICtrlRead($idBD)
                $iPreWarn = Int(GUICtrlRead($idCboPreWarn))
                ;"Event|Date+Time|Repeated|Interval|Birthdate|PreWarn|HiddenSort"
                GUICtrlCreateListViewItem($sEvent & "|" & $dtEvenDate & ' ' & $iTime & '|' & $sRep & '|' & $iVal & '|' & $iBD & '|' & $iPreWarn & '|' & _DateAdd('d', $iPreWarn * -1, $dtEvenDate & ' ' & $iTime), $idLV)
                $sQuest = _GUICtrlListView_GetItemTextString($idLV, $aLV_Selected[1])
                Local $iRet = MsgBox(BitOR($MB_YESNO, $MB_ICONQUESTION), 'Remove ' & $aLV_Selected[0] & ' original reminder?', $sQuest, 0, $hMain)
                If $iRet <> $IDNO Then _GUICtrlListView_DeleteItem($idLV, $aLV_Selected[1])
                GUIDelete($hRem)
                ExitLoop
            Case $GUI_EVENT_CLOSE
                GUIDelete($hRem)
                ExitLoop
        EndSwitch
    WEnd
    GUISetState(BitOR(@SW_ENABLE, @SW_SHOW), $hMain)
    Opt('GUIOnEventMode', 1)
    ConsoleWrite(Opt('GUIOnEventMode') & @CRLF)
    AdlibUnRegister('_CheckRemind')
    _GUICtrlListView_BeginUpdate($idLV)
    _SaveLV()
    _GUICtrlListView_SimpleSort($idLV, $g_bSortSense, 6, False) ; Prevent sort direction toggling for next insertion
    _GUICtrlListView_EndUpdate($idLV)
    AdlibRegister('_CheckRemind', 15000)
EndFunc   ;==>_EditReminder

Func _DeleteReminder()
    Local $aLV_Selected = _GUICtrlListView_GetSelectedIndices($idLV, True)
    ;_ArrayDisplay($aLV_Selected, 'Line 238')
    Local $sQuest
    For $i = 1 To $aLV_Selected[0]
        $sQuest &= _GUICtrlListView_GetItemTextString($idLV, $aLV_Selected[$i])
        If $i <> $aLV_Selected[0] Then $sQuest &= @CRLF
    Next
    Local $iRet = MsgBox(BitOR($MB_YESNO, $MB_ICONQUESTION), 'Delete ' & $aLV_Selected[0] & ' selected Items', $sQuest, 0, $hMain)
    If $iRet <> $IDNO Then _GUICtrlListView_DeleteItemsSelected($idLV)
EndFunc   ;==>_DeleteReminder

 

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
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...