;-- TIME_STAMP   2021-02-27 15:16:00   v 0.1

;*****************************************
;PsPadExt.au3 by Churanos
;Created with ISN AutoIt Studio v. 1.10
;*****************************************
#NoTrayIcon

#include <AutoItObject.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

AutoItSetOption("GUIOnEventMode", 1)
OnAutoItExitRegister("_Exit")
_AutoItObject_Startup()

#Region Define variables
Global Const $sExtName    = "PsPadExt"
Global Const $sExtVersion = "0.0.1"
Global Const $sExtAuthor  = "Churanos <kleist.steven@gmail.com>"

Global Const $sClsId      = "PsPadExt.Bridge"

Global $oPlugin           = Null
Global $hROTHandle        = Null

Global $bShouldQuit       = False
Global $bInit             = False

Global $oError = ObjEvent("AutoIt.Error", "_ErrFunc")
#EndRegion Define variables

#Region GUI Part
Global $frm_Main = GUICreate($sExtName, 320, 360, -1, -1, -1, $WS_EX_TOPMOST)
GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
Global $btn_GetText = GUICtrlCreateButton("Get sel. Text", 10, 10, 100, 25)
GUICtrlSetOnEvent(-1, "_GetTextFromEditor")
Global $btn_LeftChar = GUICtrlCreateButton("Get left Char", 120, 10, 100, 25)
GUICtrlSetOnEvent(-1, "_GetLeftCharFromEditor")
Global $txt_Text = GUICtrlCreateEdit("", 10, 50, 300, 300)
#EndRegion GUI Part

#Region Main Loop
_Init()
While 1
	; Do stuff
	If $bShouldQuit Then _Exit()
	Sleep(10)
Wend
#EndRegion Main Loop

#Region Functions
;##############################################################################
;### Init function
;##############################################################################
Func _Init()
	$oPlugin = _PSPadExt()
	If @error Then
		MsgBox(16, "Error", "Error while creating object from Func: _PsPadExt()!")
		_Exit()
	EndIf
	$hROTHandle = _AutoItObject_RegisterObject($oPlugin, $sClsId)
	GUISetState(@SW_SHOW, $frm_Main)
EndFunc
;##############################################################################

;##############################################################################
;### Exit function
;##############################################################################
Func _Exit()
	_AutoItObject_UnregisterObject($hROTHandle)
	$oPlugin = 0
	_AutoItObject_Shutdown()
	Exit
EndFunc
;##############################################################################

Func _GetTextFromEditor()
	GUICtrlSetData($txt_Text, $oPlugin.PsPadSelectedText())
EndFunc

Func _GetLeftCharFromEditor()
	Local $aCaret = $oPlugin.PsPadLeftChar()
	GUICtrlSetData($txt_Text, StringFormat("Editor.caretY(): %s  Editor.caretX(): %s\r\nEditor.LineText(): %s\r\nEditor.LeftChar(): %s\r\n", $aCaret[0], $aCaret[1], $aCaret[2], $aCaret[3]))
EndFunc
#EndRegion Functions

#Region Object Functions
Func _PSPadExt()
	Local $class = _AutoItObject_Class()
	With $class
		.AddProperty("Name", $ELSCOPE_READONLY, $sExtName)
		.AddProperty("Version", $ELSCOPE_READONLY, $sExtVersion)
		.AddProperty("PsPad", $ELSCOPE_PUBLIC, Null)

		.AddMethod("PsPadSelectedText", "_PsPadExt_PsPadSelectedText")
		.AddMethod("PsPadLeftChar", "_PsPadExt_PsPadLeftChar")
		.AddMethod("Quit", "_PsPadExt_Quit")
	EndWith

	Return $class.Object
EndFunc

Func _PsPadExt_PsPadSelectedText($this)
	$this.PsPad.Item("Editor").assignActiveEditor()
	ConsoleWrite(StringFormat("Editor.selText(): %s", $this.PsPad.Item("Editor").selText()) & @CRLF)
	Return $this.PsPad.Item("Editor").selText()
EndFunc

Func _PsPadExt_PsPadLeftChar($this)
	$this.PsPad.Item("Editor").assignActiveEditor()
	Local $iCaretRow = $this.PsPad.Item("Editor").caretY() - 1
	Local $iCaretCol = $this.PsPad.Item("Editor").caretX() - 1
	Local $sLineText = $this.PsPad.Item("Editor").lineText()
	ConsoleWrite(StringFormat("Editor.caretY(): %s", $iCaretRow) & @CRLF)
	ConsoleWrite(StringFormat("Editor.caretX(): %s", $iCaretCol) & @CRLF)
	ConsoleWrite(StringFormat("Editor.LineText(): %s", $sLineText) & @CRLF)
	ConsoleWrite(StringFormat("Editor.LeftChar(): %s", StringMid($sLineText, $iCaretCol, 1)) & @CRLF)
	Local $aCaret = [$iCaretRow, $iCaretCol, $sLineText, StringMid($sLineText, $iCaretCol, 1)]
	Return $aCaret
EndFunc

Func _PSPadExt_Quit($this)
	$bShouldQuit = True
EndFunc
#EndRegion Object Functions

#Region COM Error Function
Func _ErrFunc()
    ConsoleWrite("COM Error, ScriptLine(" & $oError.scriptline & ") : Number 0x" & Hex($oError.number, 8) & " - " & $oError.windescription & @CRLF)
EndFunc    ;==>_ErrFunc
#EndRegion COM Error Function
