; Module/File: Editor_MultipleView.pb ; Function: 2. EditorGadget with adopted and synchronized content - Linux ; Author: Omi ; Date: Jan. 02, 2016 ; Version: 0.1 ; Target Compiler: PureBasic 5.22/5.31/5.40 ; Target OS: Linux: (X/K/L)ubuntu, Mint, 32/64, Ascii/Uni ;-------------------------------------------------------------- EnableExplicit ImportC "" gtk_scrollable_get_vadjustment(*scrollable) gtk_adjustment_get_value.d(*adjustment.GtkAdjustment) gtk_adjustment_set_value(*adjustment.GtkAdjustment, value.d) g_signal_connect(*instance, detailed_signal.p-utf8, *c_handler, *pdata, destroy= 0, flags= 0) As "g_signal_connect_data" EndImport ; Object constants #Win_Main = 0 #Edt1 = 0 #Edt2 = 1 #Splitter = 2 Global.i gEvent, gQuit Global.i gSizeHandler Global.s S1= "A little Text to demonstrate a multiple view of the same text being shown and editable in 2 (or more) PureBasic-EditorGadget. " + #LF$ + #LF$ + "To make this possible it is necessary to use the same 'TextBuffer' for several EditorGadgets (TextViews)!" + #LF$ + #LF$ + "Enter some new text here and change the Editor to type in your text and scroll the text vertically..." + #LF$ + #LF$ + #LF$ + #LF$ + "Some lines to fill the place:" + #LF$ + "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. "+ #LF$ + "At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. "+ #LF$ + "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. "+ #LF$ + "At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet." ProcedureC Callback_EditorVScrollSync(*adjustment, user_data) Protected *Adjustment2.GtkAdjustment Protected.i Editor2Sync If user_data = #Edt1 Editor2Sync= #Edt2 ElseIf user_data = #Edt2 Editor2Sync= #Edt1 EndIf gtk_adjustment_set_value(gtk_scrollable_get_vadjustment(GadgetID(Editor2Sync)), gtk_adjustment_get_value(*adjustment)) EndProcedure Procedure TextView_AdoptBuffer(fromEditor, toEditor); 2. Sync Editor gtk_text_view_set_buffer_(GadgetID(toEditor), gtk_text_view_get_buffer_(GadgetID(fromEditor))) EndProcedure If OpenWindow(#Win_Main, 0, 0, 500, 400, "Editor - Multiple view", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) EditorGadget(#Edt1, 5, 5, 490, 190, #PB_Editor_WordWrap) AddGadgetItem(#Edt1, -1, S1) EditorGadget(#Edt2, 5, 205, 490, 190, #PB_Editor_WordWrap) TextView_AdoptBuffer(#Edt1, #Edt2) SplitterGadget(#Splitter, 5, 5, 490, 391, #Edt1, #Edt2, #PB_Splitter_Separator) ;sync the vert. scrolling ... gtk_widget_style_get_(GadgetID(#Splitter), "handle-size", @gSizeHandler) SetGadgetState(#Splitter, GadgetHeight(#Splitter) / 2 - gSizeHandler / 2) ;Get scroll signal ... g_signal_connect(gtk_scrollable_get_vadjustment(GadgetID(#Edt1)), "value-changed", @Callback_EditorVScrollSync(), #Edt1) g_signal_connect(gtk_scrollable_get_vadjustment(GadgetID(#Edt2)), "value-changed", @Callback_EditorVScrollSync(), #Edt2) Repeat gEvent= WaitWindowEvent() Select gEvent Case #PB_Event_CloseWindow gQuit= #True Case #PB_Event_Gadget Select EventGadget() EndSelect EndSelect Until gQuit EndIf ; IDE Options = PureBasic 5.45 LTS (Linux - x86) ; CursorPosition = 3 ; Folding = - ; EnableUnicode ; EnableXP