Wilbert has already demonstrated
here how to scroll to the end of an EditorGadget on MacOS.
For your conveniance I have put together an example for MacOS which dynamically adds a line to an EditorGadget and always keeps the last line visible:
Code:
EnableExplicit
#MaxLines = 20
Define LastLine.I
Procedure AddLine(EditorGadgetID.I, Line.I)
Protected Range.NSRange
AddGadgetItem(EditorGadgetID, -1, "Line " + Str(Line))
Range.NSRange\location = Len(GetGadgetText(EditorGadgetID))
CocoaMessage(0, GadgetID(EditorGadgetID), "scrollRangeToVisible:@", @Range)
EndProcedure
OpenWindow(0, 270, 100, 220, 150, "EditorGadget")
EditorGadget(0, 10, 10, 200, 130)
AddWindowTimer(0, 0, 500)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
Case #PB_Event_Timer
If LastLine < #MaxLines
LastLine + 1
AddLine(0, LastLine)
Else
RemoveWindowTimer(0, 0)
EndIf
EndSelect
ForEver
This is a cross-platform example which works on Linux, MacOS and Windows:
Code:
EnableExplicit
#MaxLines = 20
Define LastLine.I
Procedure AddLine(EditorGadgetID.I, Line.I)
AddGadgetItem(EditorGadgetID, -1, "Line " + Str(Line))
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_Linux
Protected *Adjustment.GtkAdjustment
*Adjustment.GtkAdjustment = gtk_scrolled_window_get_vadjustment_(gtk_widget_get_parent_(GadgetID(EditorGadgetID)))
*Adjustment\value = *Adjustment\upper
gtk_adjustment_value_changed_(*Adjustment)
CompilerCase #PB_OS_MacOS
Protected Range.NSRange
Range.NSRange\location = Len(GetGadgetText(EditorGadgetID))
CocoaMessage(0, GadgetID(EditorGadgetID), "scrollRangeToVisible:@", @Range)
CompilerCase #PB_OS_Windows
SendMessage_(GadgetID(EditorGadgetID), #EM_SETSEL, -1, -1)
CompilerEndSelect
EndProcedure
OpenWindow(0, 270, 100, 220, 150, "EditorGadget")
EditorGadget(0, 10, 10, 200, 130)
AddWindowTimer(0, 0, 500)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
Case #PB_Event_Timer
If LastLine < #MaxLines
LastLine + 1
AddLine(0, LastLine)
Else
RemoveWindowTimer(0, 0)
EndIf
EndSelect
ForEver