d3k/old_versions/Break (broken, not being fixed).ahk

306 lines
12 KiB
AutoHotkey
Raw Permalink Normal View History

#SingleInstance force ; We only want one of these running at a time...
FileEncoding, UTF-8
Menu, Tray, Icon, %A_MyDocuments%\D3K\icons\coffeecup.ico
DetectHiddenWindows, On ; This is so that it can identIfy that the window exists since we have it not show up in the taskbar
Total := 60 ; Total break time in minutes
KeepThis := 1 ; Just a variable to save things
winx := 1 ; When these two are set to 1, it puts the window at the center
winy := 1
ugly := False
If FileExist("T_Msg.ahk")
{
#Include T_Msg.ahk
}
;------------------------------------------------------------------------------
; Main GUI creation
;------------------------------------------------------------------------------
ShowGUI: ; Easy way to recreate the window for the pretty color
Gui, main:+AlwaysOnTop
Gui, main:+ToolWindow ; Removes the minimize and maximize buttons, removes it from the taskbar
Gui, main:Add, Progress, x2 y1 w110 h14 Range0-60 -Smooth vProgress, %Total% ; Slider at the top, a nice visual
Gui, main:Add, Text, x43 y23 w27 h20 vTotal +Center, %Total% ; The total time left
Gui, main:Add, Edit, x72 y20 w30 h20 +Number vInput +Center, ; Input box for the length of your break
Gui, main:Add, Button, x2 y20 w40 h20 gLock, Lock ; Button to lock PC
Gui, main:Add, Text, x2 y23 w40 h20 vLocked, Locked ; Text that confirmes that your PC is locked
Gui, main:Add, Button, x2 y20 w40 h20 gBreakButton vBrek, Break ; Button to start break
Gui, main:Add, Button, x2 y20 w40 h20 gEnd, End ; Button to end break
Gui, main:Add, Button, x21 y83 w70 h30 Default gLength, Length ; Button that is default so that when you press enter on the input field it puts you on that long of a break and also locks the PC
; Hide the things we don't want to see when it starts up
GuiControl, Hide, Subtract
GuiControl, Hide, Lock
GuiControl, Hide, Locked
GuiControl, Hide, End
If (ugly = True){
GuiControl, -cGreen, Progress
}
; AI to make it show the window where it was before (explained later)
If (winx="1" And winy="1"){ ; The default values assigned at the beginning of the script
WinLoc := "Center" ; Shows the window in the center of the screen (basically only on startup)
}
Else{
WinLoc = x%winx% y%winy% ; Saved further down in the script when clicking on End
}
Gui, main:Show, h45 w115 %WinLoc%, Break time ; Show the GUI
Return
GuiClose:
ExitApp ; Make sure that it doesn't keep running when the close button is clicked
Return
;------------------------------------------------------------------------------
; Main GUI buttons
;------------------------------------------------------------------------------
Length:
LWD := True
Goto, GuiContextMenu
Return
BreakButton: ; Starts your break for the length you entered in the field
GuiControl, Hide, Brek ; Hide the Break button
Send, #+B ; Hotkey for default Break Time (10 mins)
Gui, main:submit, NoHide
GuiControl, Show, Lock ; Show the Lock button
uploop := True ; Set this to true so that it doesn't exit after one run
BreakLength = 10 ; Default break length
BegWarned = False
HalfBreakLength := BreakLength // 2
HBWarned = False
WarnLength := BreakLength - 2
EBWarned = False
SetTimer, UpTimer, 1000 ; Function for updating the graphics
StartTime := A_TickCount ; Saves the time that we started at in Milliseconds
KeepThis := Total ; Saves the current total to a dIfferent variable so that If there are errors while it is updating, it doesn't mess with anything else
GuiControl, +cRed, Progress ; Changes the color of the progress bar to red. It is the entire reason that the GUI needs to be destroyed and then recreated
Sleep, 3000 ; Show the lock button for 2 seconds
GuiControl, Hide, Lock ; Remove the lock button
GuiControl, Show, End ; Show the end button
Return
Lock: ; Locks the PC
Gui, main:submit, NoHide
GuiControl, Hide, Lock ; If you can't figure this one out by now, you might need to RTFM
GuiControl, Show, Locked
Run rundll32.exe user32.dll`,LockWorkStation ; Locks PC by calling the DLL. just sending Win+L sadly doesn't work
Sleep, 1000
GuiControl, Hide, Locked
GuiControl, Show, End
uploop := True ; No real reason to do this, but it can't hurt
Return
End: ; Ends your break
Send, #+B ; Break hotkey
GuiControl, Hide, End
SetTimer, UpTimer, Off ; Stop the live updating loop
ElapsedTime := A_TickCount - StartTime ; grabs the current time in MS, and subtracts it from the TickCount that we recorded earlier
ELSeconds := ElapsedTime/1000 ; Convert to seconds
ELMins := ELSeconds/60 ; Convert to minutes
ELMins := Round(ELMins, 2) ; Round it off to 2 places
Total := (KeepThis-ELMins) ; Subtract the elapsed minutes (in ##.##0000) from the total
Total := SubStr(Total, 1, 2) ; Trim off the total cause it now has a bunch of useless zeros at the end, and we don't want to see those
WinGetActiveStats, Title, Width, Height, winx, winy ; Save the current position to variables, first three are there cause it is required
SetTimer, UpTimer, Off ; Make sure the dang thing turns off
Gui, main:Destroy ; I couldn't find a way to get the default Win10 green with the flashing part back, so we're just gonna destroy it and make a new one at the exact same place
Goto, ShowGUI ; Just goes to the top to create the GUI again, but this time at the locations saved from earlier.
GuiControl,, Total, %Total% ; ModIfy the time at the bottom and progress bar to be accurate
GuiControl,, Progress, %Total%
If (ugly = True)
{
GuiControl, -cGreen, Progress
}
Sleep, 1000 ; A little bit of break time so that you don't immediatley go back into break accidentially
GuiControl, Show, Brek
uploop := False ; Make sure the dang thing turns off
; Delete previous message
Return
GuiContextMenu:
mousegetpos,,,, name
If InStr(name, "Button")
{
Return
}
;Since there isn't a return here, right clicking anywhere other than the button will show the second GUI, as well as pressing Escape
;------------------------------------------------------------------------------
; Second GUI
;------------------------------------------------------------------------------
GuiEscape:
Gui, 2: Destroy ; Just in case there is one open already
WinGetActiveStats, Title, Width, Height, winx, winy ; Save the current position to variables, other ones are there cause it was required
Gui, 2: +AlwaysOnTop
Gui, 2: +ToolWindow
Gui, 2: Add, Edit, x2 y2 w40 h20 +Number vSubInput +Center, ; Input box for when you manually do a break
Gui, 2: Add, Button, x21 y83 w70 h30 Default gSubtract, Subtract
winy += 75
winx += 35
Win2Loc = x%winx% y%winy% ; Makes the little popup show up centered below the break window
Gui, 2: Show, w45 h25 %Win2Loc%, Subtract from Total time ; Show the GUI
Return
;------------------------------------------------------------------------------
; Second GUI buttons
;------------------------------------------------------------------------------
Subtract: ; The default button, subtracts the time you entered into the field from the total
gui, 2:submit, Hide ; Makes sure the GUI doesn't dissapear when you submit it
Total := (Total - SubInput) ; Subtracts what you entered from the total time
GuiControl,, Total, %Total% ; ModIfy the time at the bottom and progress bar to be accurate
GuiControl,, Progress, %Total%
Gui, 2:Destroy
WinActivate, Break Time
WinGetActiveStats, Title, Width, Height, winx, winy ; Save the current position to variables, first three are there cause it is required
Gui, main:Destroy
Goto, ShowGUI ; Just goes to the top to create the GUI again, but this time at the locations saved from earlier.
Return
2GuiClose: ; From the close button
2GuiEscape: ; From pressing escape
Gui, 2: Destroy
Return
;------------------------------------------------------------------------------
; GUI to remove green color
;------------------------------------------------------------------------------
2GuiContextMenu: ; Because one nested GUI isn't enough
MsgBox, 4148, Color Change, Remove the flashing green?
IfMsgBox, Yes
{
GuiControl, -cGreen, Progress
ugly := True
}
Return
UpTimer:
ElapsedTime := A_TickCount - StartTime ; grabs the current time in MS, and subtracts it from the time that we recorded earlier
ELSeconds := ElapsedTime // 1000 ; Convert to seconds
ELMins := ELSeconds // 60 ; Convert to minutes
ELMins := Round(ELMins) ; Round it off to nearest Intreger
Update := (Total-ELMins) ; Subtract the elapsed minutes from the total
GuiControl,, Progress, %Update% ; Update the time left at the bottom and progress bar
GuiControl,, Total, %Update%
If FileExist("T_Msg.ahk")
{
If (BegWarned = "False")
{
If (HalfBreakLength >= WarnLength)
{
BegWarned = True
HBWarned = True
T_SendMsg("info",1,BreakLength " Minute break started, will warn on " HalfBreakLength " mins left.`n<code>" Total " mins of break time left</code>")
}
If (HalfBreakLength < WarnLength)
{
BegWarned = True
T_SendMsg("info",1,BreakLength " Minute break started, will warn on " HalfBreakLength " mins and " WarnLength " mins elapsed.`n<code>" Total " mins of break time left</code>")
}
Temp := Update
}
}
If FileExist("T_Msg.ahk")
{
If !(Temp > Update)
{
Temp := Update
If (HBWarned = "False")
{
If (ELMins = HalfBreakLength)
{
; Delete previous message
T_SendMsg("alert", 1, "Break is half over, " HalfBreakLength " mins left.`n<code>" Update " mins of break time left</code>")
HBWarned = True
}
If (HalfBreakLength >= WarnLength)
{
T_Edit("info",1,BreakLength " Minute break started, will warn on " HalfBreakLength " mins left.`n<code>" Update " mins of total break time left</code>")
}
If (HalfBreakLength < WarnLength)
{
T_Edit("info",1,BreakLength " Minute break started, will warn on " HalfBreakLength " mins and " WarnLength " mins elapsed.`n<code>" Update " mins of total break time left</code>")
}
}
If (HBWarned = "True")
{
If (HalfBreakLength >= WarnLength)
{
T_Edit("info",1,BreakLength " Minute break started, warned on " HalfBreakLength " mins left.`n<code>" Update " mins of total break time left</code>")
}
If (HalfBreakLength < WarnLength)
{
T_Edit("info",1,BreakLength " Minute break started, warned on " HalfBreakLength " mins, will warn again on " WarnLength " mins elapsed.`n<code>" Update " mins of total break time left</code>")
}
}
If (EBWarned = "False")
{
If (ELMins = WarnLength)
{
T_SendMsg("hand", 3, "<b>Break is almost over, 2 mins left of your " BreakLength " minute break!</b>`n<code>" Update " mins of break time left</code>")
EBWarned = True
}
Else
{
If (HalfBreakLength >= WarnLength)
{
T_Edit("info",1,BreakLength " Minute break started, will warn on " HalfBreakLength " mins left.`n<code>" Update " mins of total break time left</code>")
}
If (HalfBreakLength < WarnLength)
{
T_Edit("info",1,BreakLength " Minute break started, will warn on " HalfBreakLength " mins and " WarnLength " mins elapsed.`n<code>" Update " mins of total break time left</code>")
}
}
}
If (EBWarned = "True")
{
If (HalfBreakLength >= WarnLength)
{
T_Edit("hand", 3, "<b>Break is almost over, 2 mins left of your " BreakLength " minute break!</b>`n<code>" Update " mins of total break time left</code>")
}
If (HalfBreakLength < WarnLength)
{
T_Edit("hand", 3, "<b>Break is almost over, 2 mins left of your " BreakLength " minute break!</b>`n<code>" Update " mins of total break time left</code>")
}
}
}
}
Return