Sub KeyboardButton_LongClick
Dim b As Button = Sender
Dim iTag As Int
Dim iSelStart As Int
Dim iSelEnd As Int
Dim oEditText As EditText
Dim iKeyboardButton_Click_Time As Long
'suggestions not useful here
'---------------------------
If b.Tag = "btnSuggestion1" Or b.Tag = "btnSuggestion2" Then Return
iTag = b.Tag
'Log("KeyboardButton_LongClick, oEditText.Tag: " & oEditText.Tag)
Select Case General.iCurrentEditFocus
Case Enums.eFocussedEdit.DialogInput
oEditText = Dialog.edtInput
Case Enums.eFocussedEdit.SQL
oEditText = edtSQL
End Select
bLongKeyboardKeyClick = True
'this will be set to False by clicking another or the same key. That key won't then do anything else
'---------------------------------------------------------------------------------------------------
Do While bLongKeyboardKeyClick
'iCustomKBRepeatDelay can be set at Settings page 2
'--------------------------------------------------
If DateTime.Now - iKeyboardButton_Click_Time > iCustomKBRepeatDelay Then
If IntInIntArray(iTag, Array As Int(cKB.eSpecialKeyboardButtons.iCaps, _
cKB.eSpecialKeyboardButtons.iDel, _
cKB.eSpecialKeyboardButtons.iReturn, _
cKB.eSpecialKeyboardButtons.iSymbols)) = -1 Then 'not one of the non-character buttons
iSelStart = General.getSelectionStart(oEditText)
iSelEnd = General.getSelectionEnd(oEditText)
oEditText.Text = Insert(oEditText.Text, cKB.GetChar(iTag) , iSelStart, iSelEnd)
oEditText.SelectionStart = iSelStart + 1
If cKB.iKeyboardState = Enums.eKeyboardStates.UpperCase Then
cKB.SetKeyboardState(Enums.eKeyboardStates.LowerCase)
End If
Else
Select Case iTag
Case cKB.eSpecialKeyboardButtons.iCaps
Select Case cKB.iKeyboardState
Case Enums.eKeyboardStates.LowerCase
cKB.SetKeyboardState(Enums.eKeyboardStates.UpperCase)
b.TextColor = Colors.Black
Case Enums.eKeyboardStates.UpperCase
cKB.SetKeyboardState(Enums.eKeyboardStates.UpperCaseFixed)
b.TextColor = Colors.Blue
Case Enums.eKeyboardStates.UpperCaseFixed
cKB.SetKeyboardState(Enums.eKeyboardStates.LowerCase)
b.TextColor = Colors.Black
Case Enums.eKeyboardStates.Symbols1
cKB.SetKeyboardState(Enums.eKeyboardStates.Symbols2)
b.TextColor = Colors.Black
Case Enums.eKeyboardStates.Symbols2
cKB.SetKeyboardState(Enums.eKeyboardStates.Symbols1)
b.TextColor = Colors.Black
End Select
Case cKB.eSpecialKeyboardButtons.iDel
iSelEnd = General.getSelectionEnd(oEditText)
If cKB.bDeleteSQLWords Then
iSelStart = GetEndPreviousSQLWord(iSelEnd)
'iSelStart = iSelEnd - GetCurrentSQLWord.Length
Else
iSelStart = General.getSelectionStart(oEditText)
End If
oEditText.Text = Delete(oEditText.Text, iSelStart, iSelEnd)
If iSelStart = iSelEnd And iSelStart > 0 Then
oEditText.SelectionStart = iSelStart - 1
Else
If cKB.bDeleteSQLWords Then
If iSelStart > 0 Then
oEditText.SelectionStart = iSelStart - 1 '<<<
Else
oEditText.SelectionStart = 0
End If
Else
oEditText.SelectionStart = iSelStart
End If
End If
If iSelStart = 0 Then
bLongKeyboardKeyClick = False
End If
Case cKB.eSpecialKeyboardButtons.iSymbols
Select Case cKB.iKeyboardState
Case Enums.eKeyboardStates.LowerCase, Enums.eKeyboardStates.UpperCase, Enums.eKeyboardStates.UpperCaseFixed
cKB.SetKeyboardState(Enums.eKeyboardStates.Symbols1)
Case Enums.eKeyboardStates.Symbols1, Enums.eKeyboardStates.Symbols2
Select Case cKB.iCaps
Case Enums.eCaps.iNone
cKB.SetKeyboardState(Enums.eKeyboardStates.LowerCase)
Case Enums.eCaps.iTemp
cKB.SetKeyboardState(Enums.eKeyboardStates.UpperCase)
Case Enums.eCaps.iFixed
cKB.SetKeyboardState(Enums.eKeyboardStates.UpperCaseFixed)
End Select
End Select
Case cKB.eSpecialKeyboardButtons.iReturn
iSelStart = General.getSelectionStart(oEditText)
iSelEnd = General.getSelectionEnd(oEditText)
oEditText.Text = Insert(oEditText.Text, CRLF , iSelStart, iSelEnd)
oEditText.SelectionStart = iSelStart + 1
End Select
End If
iKeyboardButton_Click_Time = DateTime.Now
Sleep(0) 'this is needed otherwise this loop freezes!
End If
Loop
End Sub