/bkit_main_form.ahk
AutoHotKey | 864 lines | 746 code | 99 blank | 19 comment | 100 complexity | 0ae406b08b163819698806b03f67dcc2 MD5 | raw file
- ; Header
- #SingleInstance Force
- #Persistent
- #NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
- SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
- SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
- main()
- return
-
- main()
- {
- global
- form = ahk_class TMainForm
- curFocus = none
- last_key := ""
- visual = 0
-
- Hotkey,IfWinActive, %form%
-
- Hotkey, ~LButton, StartVisualQuery
- Hotkey, ~LButton Up, EndVisualQuery
-
- Hotkey, Esc, CancelCmd
- Hotkey, ^[, CancelCmd
-
- Hotkey, /, GridKeysHighJack
-
- Hotkey, h, GridKeysHighJack
- Hotkey, j, GridKeysHighJack
- Hotkey, k, GridKeysHighJack
- Hotkey, l, GridKeysHighJack
-
- Hotkey, +j, GridKeysHighJack
- Hotkey, +k, GridKeysHighJack
-
- Hotkey, w, GridKeysHighJack
- Hotkey, e, GridKeysHighJack
- Hotkey, b, GridKeysHighJack
-
- Hotkey, v, GridKeysHighJack
-
- Hotkey, ^f, GridKeysHighJack
- Hotkey, ^b, GridKeysHighJack
-
- Hotkey, g, GridKeysHighJack
- Hotkey, +g, GridKeysHighJack
-
- Hotkey, d, GridKeysHighJack
- Hotkey, i, GridKeysHighJack
- Hotkey, o, GridKeysHighJack
-
- Loop
- {
- WinWaitActive, %form%
- CreateTimeTable()
- SetControlFocus("grid")
- WinWaitNotActive, %form%
- Tooltip
- }
- return
- }
-
- ; ############################################################################################
-
- StartVisualQuery:
- SetTimer, VisualQuery, 500
- Visual("on")
- return
-
- EndVisualQuery:
- SetTimer, VisualQuery, off
- Visual("off")
- return
-
- VisualQuery:
- Visual("update")
- return
-
- ; ############################################################################################
-
- CancelCmd:
- Visual("off")
- return
-
- ; ############################################################################################
-
- GridKeysHighJack:
- GetControlFocus()
- if (curFocus = "grid")
- {
- GridHotkey(A_ThisHotkey)
- } else
- {
- send, %A_ThisHotkey%
- }
- return
-
-
- ; ############################################################################################
-
- Visual(cmd)
- {
- global visual, sel_x, sel_y
- msg := "-- Visual --"
- if (cmd = "toggle")
- {
- if (visual = "+")
- {
- Visual("off")
- }
- else
- {
- Visual("on")
- }
- }
- else if (cmd = "on")
- {
- visual := "+"
- }
- else if (cmd = "off")
- {
- visual := ""
- CursorMessage("")
- }
- else if (cmd = "update")
- {
- if (visual = "+")
- {
- CursorMessage(msg)
- }
- }
- else
- {
- msgbox error: %A_LineNumber%
- }
- return
- }
-
- CursorMessage(msg)
- {
- global sel_x, sel_y, sel_end_x, sel_end_y
- if (msg = "")
- {
- ToolTip
- return
- }
- GetSelection()
- GetSelectionEnd()
- msg_x := sel_x - 70
- msg_y := sel_y
- start_time := GetTime(sel_x, sel_y, "start")
- end_time := GetTime(sel_end_x, sel_end_y, "end")
- duration := GetDuration(start_time, end_time)
- ToolTip %msg%`n%start_time%`n%duration%`n%end_time%, %msg_x%, %msg_y%
- return
- }
-
- ; ############################################################################################
-
- GetControlFocus()
- {
- global curFocus
-
- ControlGetFocus, curConFocus, %form%
- curFocus := CtrlDictionary("",curConFocus)
- return
- }
-
- ; ############################################################################################
-
- SetControlFocus(ctrl)
- {
- global form
- ctrl_name := CtrlDictionary(ctrl,"")
- ControlFocus, %ctrl_name%, %form%
- return
- }
-
- ; ############################################################################################
-
- CtrlDictionary(key,value)
- {
- dict=
- (
- grid|TStringGrid1
- )
- if (key = "")
- {
- getValue = 0
- }
- else if (value = "")
- {
- getValue = 1
- }
- else
- {
- msgbox, Err: Too many arguments`nk: %key%`nv: %value%
- }
-
- Loop, parse, dict, `n
- {
- Loop, parse, A_LoopField, |
- {
- if ( A_Index = 1) ; key
- {
- a_key = %A_LoopField%
- }
- else if ( A_Index = 2) ; value
- {
- a_value = %A_LoopField%
- }
- else
- {
- msgbox, Err: Dictionary index = 3
- }
- }
-
- if (getValue AND key = a_key)
- {
- return a_value
- }
- else if (!getValue AND value = a_value)
- {
- return a_key
- }
- }
- return
- }
-
- GridHotkey(key)
- {
- global visual, last_key, sel_x, sel_y
- if (key = "j")
- {
- Send, %visual%{Down}
- }
- else if (key = "k")
- {
- Send, %visual%{Up}
- }
- else if (key = "h")
- {
- Send, {Left}
- Visual("off")
- }
- else if (key = "l")
- {
- Send, {Right}
- Visual("off")
- }
- else if (key = "+j")
- {
- Send, +{Down}
- }
- else if (key = "+k")
- {
- Send, +{Up}
- }
- else if (key = "w")
- {
- GotoNext("start")
- }
- else if (key = "e")
- {
- if (last_key = "g")
- {
- GotoPrevious("end")
- }
- else
- {
- GotoNext("end")
- }
- }
- else if (key = "b")
- {
- GotoPrevious("start")
- }
- else if (key = "v")
- {
- Visual("toggle")
- }
- else if (key = "^f")
- {
- Send, {Down 7}
- }
- else if (key = "^b")
- {
- Send, {Up 7}
- }
- else if (key = "g")
- {
- if (DoubleClick(key, 500))
- {
- Send, {Up 20}
- reset_last_key = 1
- }
- }
- else if (key = "+g")
- {
- Send, {Down 20}
- }
- else if (key = "d")
- {
- Send, {Delete}
- Visual("off")
- }
- else if (key = "i")
- {
- ClickSelection()
- Visual("off")
- }
- else if (key = "o")
- {
- Send, ^v
- Visual("off")
- }
- else if (key = "/")
- {
- Send, ^s
- }
- else
- {
- msgbox, unknown search hot key
- }
-
- if (reset_last_key)
- {
- last_key := ""
- }
- else
- {
- last_key := key
- }
- Visual("update")
- return
- }
-
- ; ############################################################################################
-
- DoubleClick(key, time)
- {
- static
- now := A_TickCount
- diff := now - last_%key%
- last_%key% := now
- if (diff < time and diff > 0)
- {
- return 1
- }
- return 0
- }
-
- ; ############################################################################################
-
- GetSelection()
- {
- global form, sel_x, sel_y, sel_end_x, sel_end_y
- grid := CtrlDictionary("grid","")
- ControlGetPos, g_x, g_y, g_w, g_h, %grid%, %form%
-
- x1 := g_x
- y1 := g_y
-
- x2 := g_x + g_w
- y2 := g_y + g_h
-
- ImageSearch, sel_x, sel_y, %x1%, %y1%, %x2%, %y2%, data\selection.bmp
- return
- }
-
- ; ############################################################################################
-
- SelectionDebug()
- {
- global
- GetSelectionEnd()
- tooltip, sel, %sel_x%, %sel_y%
- sleep, 1000
- tooltip, end, %sel_end_x%, %sel_end_y%
- sleep, 1000
- tooltip
- diff_y := sel_end_y - sel_y
- diff_x := sel_end_x - sel_x
- msgbox, %diff_x%, %diff_y%
- }
-
- ; ############################################################################################
-
- GetIncTime(time, increment)
- {
- times =
- (
- 09:30
- 10:00
- 10:30
- 11:00
- 11:30
- 12:00
- 12:30
- 13:00
- 13:30
- 14:00
- 14:30
- 15:00
- 15:30
- 16:00
- 16:30
- 17:00
- 17:30
- 18:00
- 18:30
- 19:00
- 19:30
- 20:00
- )
-
- loop, parse, times, `n
- {
- a_%A_Index% := A_LoopField
- len := A_Index
- if (time = A_LoopField)
- {
- found_i := A_Index
- }
- }
- next_i := found_i + increment
- if (next_i > len)
- {
- next_i := len
- } else if (next_i < 1)
- {
- next_i := 1
- }
- next := a_%next_i%
- return next
- }
-
-
- ; ############################################################################################
-
- GetSelectionEnd()
- {
- global form, sel_x, sel_y, sel_end_x, sel_end_y
- grid := CtrlDictionary("grid","")
- ControlGetPos, g_x, g_y, g_w, g_h, %grid%, %form%
-
- x1 := g_x
- y1 := g_y
-
- x2 := g_x + g_w
- y2 := g_y + g_h
-
- img_list =
- (
- box
- mar
- )
- Loop, Parse, img_list, `n
- {
- i = %A_LoopField%
- ImageSearch, %i%_x, %i%_y, %x1%, %y1%, %x2%, %y2%, data\sel_end\%i%.bmp
- i_x := %i%_x
- i_y := %i%_y
- found := found . i_x . "|" . i_y . "`n"
- if ( i_x <> "")
- {
- found_x := i_x
- }
- }
-
-
- solid_img_list =
- (
- solid_b
- solid_y
- solid_w
- )
- Loop, Parse, solid_img_list, `n
- {
- i = %A_LoopField%
- ImageSearch, %i%_x, %i%_y, %x1%, %y1%, %x2%, %y2%, data\sel_end\%i%.bmp
- i_x := %i%_x
- i_y := %i%_y
- i_y += 6
- solid_found := solid_found . i_x . "|" . i_y . "`n"
- if ( i_x <> "")
- {
- solid_found_x := i_x
- }
- }
-
- found := found . solid_found
-
- sel_end := ListGet(found, "max")
- sel_end_x := GetX(sel_end)
- sel_end_y := GetY(sel_end)
- return
- }
-
- ; ############################################################################################
-
- ClickSelection()
- {
- global sel_x, sel_y
- GetSelection()
- sel_x += 2
- sel_y += 2
- if (sel_x > 0 and sel_y > 0)
- {
- click %sel_x%, %sel_y%, 2
- }
- return
- }
-
- ; ############################################################################################
-
- GotoNext(location)
- {
- MouseGetPos, m_x, m_y
- found := FindLocations(location, "after")
- ListClick(found,"Min")
- MouseMove, %m_x%, %m_y%, 0
- }
-
- ; ############################################################################################
-
- GotoPrevious(location)
- {
- MouseGetPos, m_x, m_y
- found := FindLocations(location, "before")
- ListClick(found,"Max")
- MouseMove, %m_x%, %m_y%, 0
- }
-
- FindLocations(location, direction)
- {
- global form, sel_x, sel_y
- grid := CtrlDictionary("grid","")
- ControlGetPos, g_x, g_y, g_w, g_h, %grid%, %form%
-
- GetSelection()
-
- x1 := sel_x - 5
- x2 := sel_x + 15
-
- if (direction = "before")
- {
- y1 := g_y
- y2 := sel_y
- }
- else if (direction = "after")
- {
- y1 := sel_y
- y2 := g_y + g_h
- }
-
- fl1 := FindColourLocations("b", location, x1, y1, x2, y2)
- fl2 := FindColourLocations("y", location, x1, y1, x2, y2)
- found := fl1 . "___`n" . fl2
- return found
- }
-
- FindColourLocations(colour, location, x1, y1, x2, y2)
- {
- global form, sel_x, sel_y
-
- found_list := ""
- c := 0
-
- Loop
- {
- ImageSearch, cx, cy, %x1%, %y1%, %x2%, %y2%, data\%colour%_%location%.bmp
- if (cx = "")
- {
- break
- }
- found_list = %found_list%%cx%|%cy%`n
- if c >= 32
- {
- break
- }
- y1 := cy + 5
- c += 1
- }
- return found_list
- }
-
- ; ############################################################################################
-
- GetX(point)
- {
- Loop, parse, point, |
- {
- if (A_Index = 1)
- {
- return A_LoopField
- }
- }
- }
-
- GetY(point)
- {
- Loop, parse, point, |
- {
- if (A_Index = 2)
- {
- return A_LoopField
- }
- }
- }
-
- ListClick(points_list, operator)
- {
- found := ListGet(points_list, operator)
- lx := GetX(found)
- ly := GetY(found)
- WClick(lx, ly, 1)
- }
-
- ListGet(points_list, operator)
- {
- if (points_list = "")
- {
- return
- }
- Loop, parse, points_list, `n
- {
- cx := GetX(A_LoopField)
- cy := GetY(A_LoopField)
- comp := Get(operator, cy, my)
- if (cy = comp)
- {
- mx := cx
- my := cy
- }
- }
- rval = %mx%|%my%
- return rval
- }
-
- ; ############################################################################################
-
- Get(cmd, a, b)
- {
- if ( a = "" and b = "")
- {
- return
- }
- else if ( a = "" or b = "")
- {
- return a . b
- }
-
- if (cmd = "min")
- {
- if (a < b)
- {
- return a
- } else {
- return b
- }
- }
- else if (cmd = "max")
- {
- if (a > b)
- {
- return a
- } else {
- return b
- }
- } else {
- msgbox error: %A_LineNumber%
- }
- }
-
- ; ############################################################################################
-
- CreateTimeTable()
- {
- global time_table, sel_x, sel_y
- grid := CtrlDictionary("grid","")
- ControlGetPos, g_x, g_y, g_w, g_h, %grid%, %form%
-
- GetSelection()
-
- offset := GetTimeStep()
-
- x1 := g_x
- y1 := gy
- x2 := g_x + 70
- y2 := g_y + g_h
-
- times=
- (
- 09
- 10
- 10
- 11
- 11
- 12
- 12
- 13
- 13
- 14
- 14
- 15
- 15
- 16
- 16
- 17
- 17
- 18
- 18
- 19
- 19
- )
- cur_min := "30"
- Loop, parse, times,`n
- {
- i := A_LoopField
- ImageSearch, %i%_x, %i%_y, %x1%, %y1%, %x2%, %y2%, data\times\%i%.bmp
- top := %i%_y +10
-
- c := GetNextMin()
- time_table := time_table . i . ":" . c . "|" . %i%_y . "`n"
- y1 := %i%_y +offset
- }
- }
-
- GetTimeStep()
- {
- grid := CtrlDictionary("grid","")
- ControlGetPos, g_x, g_y, g_w, g_h, %grid%, %form%
-
- x1 := g_x
- y1 := gy
- x2 := g_x + 70
- y2 := g_y + g_h
-
- ImageSearch, 09_x, 09_y, %x1%, %y1%, %x2%, %y2%, data\times\09.bmp
- ImageSearch, 10_x, 10_y, %x1%, %y1%, %x2%, %y2%, data\times\10.bmp
- diff := 10_y - 09_y
- return diff
- }
-
-
- GetNextMin()
- {
- global cur_min
- if (cur_min = "30")
- {
- cur_min := "00"
- } else {
- cur_min := "30"
- }
- return cur_min
- }
-
- GetTime(x, y, when)
- {
- global time_table
- rval := "20:00"
- Loop, parse, time_table, `n
- {
- Loop, parse, A_LoopField, `|
- {
- if (A_Index = 1)
- {
- time := A_LoopField
- } else if (A_Index =2)
- {
- iy := A_LoopField
- }
- }
- if (y < iy)
- {
- if (when = "start")
- {
- rval := GetIncTime(time, 0)
- break
- } else {
- rval := GetIncTime(time, 0)
- break
- }
- break
- }
- }
- return rval
- }
-
- WClick(x, y, count)
- {
- if (x = "" or y = "")
- {
- return
- }
- Click, %x%, %y%, %count%
- }
-
- GetDuration(t1, t2)
- {
- times =
- (
- 09:30
- 10:00
- 10:30
- 11:00
- 11:30
- 12:00
- 12:30
- 13:00
- 13:30
- 14:00
- 14:30
- 15:00
- 15:30
- 16:00
- 16:30
- 17:00
- 17:30
- 18:00
- 18:30
- 19:00
- 19:30
- 20:00
- )
-
- Loop, parse, times, `n
- {
- if (A_LoopField = t1)
- {
- t1_i := A_Index
- }
- if (A_LoopField = t2)
- {
- t2_i := A_Index
- }
- if (t1_i <> "" AND t2_i <> "")
- {
- break
- }
- }
- diff := t1_i - t2_i
- diff := abs(diff)
- h := Floor(diff / 2)
- m := mod(diff,2)
-
- a := strlen(h)
-
- if (a = 1)
- {
- h := "0" . h
- }
-
- if ( m = 0)
- {
- m := "00"
- } else
- {
- m := "30"
- }
- duration = %h%:%m%
- return duration
- }