12 BYVAL AS GtkSourceView
PTR _
13 ,
BYVAL AS GtkTextIter
PTR _
14 ,
BYVAL AS GdkEvent
PTR _
15 ,
BYVAL AS GtkSourceBuffer
PTR)
32 CONSTRUCTOR SrcNotebook()
34 MenuSrc = gtk_builder_get_object(GUI.XML,
"menu40")
35 BuffCur = gtk_builder_get_object(GUI.XML,
"srcbuffCur")
36 ViewCur = GTK_WIDGET(gtk_builder_get_object(GUI.XML,
"viewSrcCur"))
37 NoteBok = GTK_NOTEBOOK(gtk_builder_get_object(GUI.XML,
"nbookSrc"))
38 CBMarks = GTK_COMBO_BOX_TEXT(gtk_builder_get_object(GUI.XML,
"comboBookmarks"))
41 VAR lm = gtk_source_language_manager_get_default()
42 LmPaths =
MKI(
CAST(
INTEGER, @
"dat"))
44 , array = gtk_source_language_manager_get_search_path(lm)
46 LmPaths &=
MKI(
CAST(
INTEGER, array[ind]))
48 WEND : LmPaths &=
MKI(0)
49 gtk_source_language_manager_set_search_path(lm,
CAST(gchar
PTR PTR,
SADD(LmPaths)))
52 Lang = gtk_source_language_manager_get_language(lm,
"fbc")
55 ?PROJ_NAME &
": " & *__(
"language fbc not available -> no syntax highlighting")
57 gtk_source_buffer_set_language(GTKSOURCE_SOURCE_BUFFER(BuffCur), Lang)
59 gtk_source_buffer_set_highlight_matching_brackets(GTKSOURCE_SOURCE_BUFFER(BuffCur), FALSE)
70 ?" CONSTRUCTOR SrcNotebook"
81 DESTRUCTOR SrcNotebook()
82 IF Font
THEN pango_font_description_free(Font)
100 FUNCTION SrcNotebook.addBas(
BYVAL Label
AS gchar
PTR,
BYVAL Cont
AS gchar
PTR)
AS GtkWidget
PTR
101 ?" SrcNotebook.addBas: " & *Label
103 VAR labl = gtk_label_new(Label) _
104 , buff = gtk_source_buffer_new_with_language(Lang) _
105 , srcv = gtk_source_view_new_with_buffer(buff) _
106 , widg = gtk_scrolled_window_new(NULL, NULL)
108 gtk_source_buffer_set_style_scheme(buff, Schema)
109 gtk_text_buffer_set_text(GTK_TEXT_BUFFER(buff), Cont, -1)
110 gtk_container_add(GTK_CONTAINER(widg), srcv)
112 gtk_widget_override_font(srcv, Font)
113 gtk_text_view_set_editable(GTK_TEXT_VIEW(srcv), FALSE)
114 gtk_source_view_set_show_line_marks(GTKSOURCE_SOURCE_VIEW(srcv), TRUE)
116 gtk_source_view_set_mark_attributes(GTKSOURCE_SOURCE_VIEW(srcv),
"fbdbg-brkd", Attr0, 999)
117 gtk_source_view_set_mark_attributes(GTKSOURCE_SOURCE_VIEW(srcv),
"fbdbg-brkt", Attr1, 999)
118 gtk_source_view_set_mark_attributes(GTKSOURCE_SOURCE_VIEW(srcv),
"fbdbg-brkp", Attr2, 999)
119 gtk_source_view_set_mark_attributes(GTKSOURCE_SOURCE_VIEW(srcv),
"fbdbg-book", Attr3, 909)
120 g_signal_connect(srcv,
"line-mark-activated" _
124 gtk_source_buffer_set_highlight_syntax(buff, .Bool(.FSH))
125 gtk_source_view_set_show_line_numbers(GTKSOURCE_SOURCE_VIEW(srcv), .Bool(.FLN))
127 g_signal_connect(srcv,
"button-press-event" _
128 , G_CALLBACK(@menu_button3_event), MenuSrc)
130 g_object_set_data(G_OBJECT(widg),
"SrcView", srcv)
131 g_object_set_data_full(G_OBJECT(widg),
"Buffer", buff, @g_object_unref)
132 gtk_widget_show_all(widg)
134 VAR i = gtk_notebook_append_page(NoteBok, widg, labl)
135 gtk_notebook_set_current_page(NoteBok, i)
136 Pages += 1 :
RETURN widg
150 SUB SrcNotebook.scroll(
BYVAL Lnr
AS gint,
BYVAL Widg
AS GtkWidget
PTR,
BYVAL Mo
AS guint32 = 1)
151 IF Pages < 1
THEN EXIT SUB
152 IF 0 = Widg
THEN Widg = ScrWidg : Lnr = ScrLine
154 VAR page = gtk_notebook_page_num(NoteBok, Widg)
155 IF page < 0
THEN EXIT SUB
156 gtk_notebook_set_current_page(NoteBok, page)
158 VAR buff = GTK_TEXT_BUFFER(g_object_get_data(G_OBJECT(Widg),
"Buffer")) _
159 , srcv = GTK_TEXT_VIEW(g_object_get_data(G_OBJECT(Widg),
"SrcView")) _
161 DIM AS GtkTextIter iter
162 gtk_text_buffer_get_iter_at_line(buff, @iter, Lnr - 1)
163 gtk_text_view_scroll_to_iter(srcv, @iter, .0, TRUE, .0, ScrPos)
164 IF 0 = Mo
THEN EXIT SUB
167 gtk_text_buffer_set_text(GTK_TEXT_BUFFER(BuffCur), txt,
LEN(txt))
183 VAR buff = g_object_get_data(G_Object(Widg),
"Buffer")
185 DIM AS GtkTextIter iter
186 gtk_text_buffer_get_iter_at_line(GTK_TEXT_BUFFER(buff), @iter, Lnr - 1)
188 VAR id =
STR(Lnr) &
"&h" &
HEX(
CAST(
INTEGER, Widg)) _
189 , txt = *gtk_notebook_get_tab_label_text(NoteBok, Widg) _
190 &
"(" & Lnr &
"): " _
193 , model = gtk_combo_box_get_model(GTK_COMBO_BOX(CBMarks)) _
194 , column = gtk_combo_box_get_id_column(GTK_COMBO_BOX(CBMarks))
196 DIM AS GtkTreeIter tri
197 gtk_tree_model_get_iter_first(model, @tri)
198 WHILE gtk_tree_model_iter_next(model, @tri)
200 gtk_tree_model_get(model, @tri, column, @dat, -1)
201 n += 1 :
IF 0 = dat
THEN CONTINUE WHILE
203 VAR l =
CAST(gint,
VALUINT(*dat)) _
204 , w =
VALUINT(
MID(*dat,
INSTR(*dat,
"&h")))
207 IF Widg <> w
then if p
THEN exit while else CONTINUE WHILE
208 IF Lnr > l
THEN p = n
ELSE p =
iif(p, p, n - 1) :
EXIT WHILE
210 IF 0 = BkMarks
THEN initCombo(__(
"Select bookmark"))
211 gtk_combo_box_text_insert(CBMarks, p + 1, id, txt)
226 DIM AS GtkTreeIter iter
227 VAR id =
STR(Lnr) &
"&h" &
HEX(
CAST(
INTEGER, Widg)) _
228 , model = gtk_combo_box_get_model(GTK_COMBO_BOX(CBMarks)) _
229 , column = gtk_combo_box_get_id_column(GTK_COMBO_BOX(CBMarks))
231 IF 0 = gtk_tree_model_get_iter_first(model, @iter)
THEN EXIT SUB
234 gtk_tree_model_get(model, @iter, column, @dat, -1)
235 IF 0 = dat
THEN CONTINUE DO
237 g_free(dat) :
IF r
THEN CONTINUE DO
238 gtk_list_store_remove(GTK_LIST_STORE(model), @iter) : BkMarks -= 1
239 IF 0 = BkMarks
THEN initCombo(__(
"No bookmark"))
241 LOOP UNTIL 0 = gtk_tree_model_iter_next(model, @iter)
254 DIM AS GError
PTR errr
256 , attr = gtk_source_mark_attributes_new() _
257 , pixbuf = gdk_pixbuf_new_from_file_at_size(Nam, size, size, @errr)
258 IF 0 = pixbuf
THEN ?PROJ_NAME &
": missing file " & *Nam :
RETURN attr
260 gtk_source_mark_attributes_set_pixbuf(attr, pixbuf)
261 g_object_unref(pixbuf)
263 gtk_source_mark_attributes_render_icon(attr, ViewCur, size) :
RETURN attr
278 BYVAL Buff
AS GtkTextBuffer
PTR _
279 ,
BYVAL Iter
AS GtkTextIter
PTR)
AS STRING
281 VAR i2 = gtk_text_iter_copy(Iter)
282 gtk_text_iter_forward_line(i2)
283 gtk_text_iter_backward_char(i2)
285 gtk_text_buffer_place_cursor(Buff, Iter)
286 gtk_text_buffer_select_range(Buff, Iter, i2)
288 VAR cont = gtk_text_buffer_get_text(Buff, Iter, i2, TRUE) _
290 gtk_text_iter_free(i2)
294 THEN r =
LEFT(r, LenCur - 4) &
" ..." _
295 ELSE IF 0 =
LEN(r)
THEN r =
" "
310 VAR page = gtk_notebook_page_num(NoteBok, Widg)
311 ?" SrcNotebook.remove: "; Widg, page
312 IF page < 0
THEN EXIT SUB
313 IF page = gtk_notebook_get_current_page(NoteBok)
THEN _
314 gtk_text_buffer_set_text(GTK_TEXT_BUFFER(BuffCur),
"", 0)
317 gtk_notebook_remove_page(NoteBok, page)
328 IF Pages < 1
THEN EXIT SUB
330 VAR n = gtk_notebook_get_n_pages(NoteBok)
331 FOR i
AS gint = n - 1
TO 0 STEP -1
332 gtk_notebook_remove_page(NoteBok, i)
336 gtk_text_buffer_set_text(GTK_TEXT_BUFFER(BuffCur),
"", 0)
351 gtk_combo_box_text_remove_all(CBMarks) : BkMarks = 0
352 gtk_combo_box_text_insert(CBMarks, 0, NULL, Txt)
353 g_object_set(CBMarks,
"active",
CAST(gint, 0), NULL)
377 Schema = gtk_source_style_scheme_manager_get_scheme(Manager, Snam)
378 gtk_source_buffer_set_style_scheme(GTKSOURCE_SOURCE_BUFFER(BuffCur), Schema)
393 IF Font
THEN pango_font_description_free(Font)
394 Font = pango_font_description_from_string(Fnam)
395 gtk_widget_override_font(ViewCur, Font)
409 IF Pages < 1
THEN EXIT SUB
412 gtk_source_buffer_set_highlight_syntax(GTKSOURCE_SOURCE_BUFFER(BuffCur), .Bool(.FSH))
414 VAR n = gtk_notebook_get_n_pages(NoteBok)
415 FOR i
AS gint = n - 1
TO 0 STEP -1
416 VAR widg = gtk_notebook_get_nth_page(NoteBok, i) _
417 , buff = g_object_get_data(G_Object(widg),
"Buffer") _
418 , srcv = g_object_get_data(G_Object(widg),
"SrcView") _
419 , mark = gtk_text_buffer_get_insert(buff)
420 gtk_widget_override_font(srcv, Font)
421 gtk_source_buffer_set_style_scheme(buff, Schema)
422 gtk_source_buffer_set_highlight_syntax(GTKSOURCE_SOURCE_BUFFER(buff), .Bool(.FSH))
423 gtk_source_view_set_show_line_numbers(GTKSOURCE_SOURCE_VIEW(srcv), .Bool(.FLN))
424 gtk_text_view_scroll_to_mark(srcv, mark, .0, TRUE, .0, ScrPos)
456 ,
BYVAL Widg
AS GtkWidget
PTR _
457 ,
BYREF Mo
AS STRING =
"")
458 IF Pages < 1
THEN EXIT SUB
460 VAR page = gtk_notebook_page_num(NoteBok, Widg)
461 IF page < 0
THEN EXIT SUB
463 DIM AS GtkTextIter iter
464 DIM AS GdkEventButton event
465 VAR buff = g_object_get_data(G_OBJECT(Widg),
"Buffer") _
466 , srcv = g_object_get_data(G_OBJECT(Widg),
"SrcView")
467 gtk_text_buffer_get_iter_at_line(GTK_TEXT_BUFFER(buff), @iter, Lnr - 1)
470 .state = FIX_GDKEVENT_STATE
473 CASE "book" : .button = 1 : .state += 3
474 CASE "boo" : .button = 3 : .state += 3
475 CASE "brkp" : .button = 1
476 CASE "brkt" : .button = 1 : .state += 1
477 CASE "brkd" : .button = 1 : .state += 4
478 CASE "brk" : .button = 3
479 CASE ELSE : .button = 3
480 view_mark_clicked(srcv, @iter,
CAST(GdkEvent
PTR, @event), GTKSOURCE_SOURCE_BUFFER(buff))
483 view_mark_clicked(srcv, @iter,
CAST(GdkEvent
PTR, @event), GTKSOURCE_SOURCE_BUFFER(buff))
495 DIM SHARED AS SrcNotebook
PTR SRC
520 BYVAL SView
AS GtkSourceView
PTR _
521 ,
BYVAL Iter
AS GtkTextIter
PTR _
522 ,
BYVAL Event
AS GdkEvent
PTR _
523 ,
BYVAL Buff
AS GtkSourceBuffer
PTR)
525 WITH *
CAST(GdkEventButton
PTR, Event)
526 ?" --> callback view_mark_clicked: ";.button,.state
527 SELECT CASE AS CONST .Button
529 VAR mark =
"fbdbg-____"
530 SELECT CASE AS CONST .state - FIX_GDKEVENT_STATE
531 CASE 0 :
MID(mark, 7, 4) =
"brkp"
532 gtk_source_buffer_remove_source_marks(Buff, Iter, Iter,
"fbdbg-brkd")
533 gtk_source_buffer_remove_source_marks(Buff, Iter, Iter,
"fbdbg-brkt")
534 VAR list = gtk_source_buffer_get_source_marks_at_iter(Buff, Iter, mark)
537 gtk_source_buffer_remove_source_marks(Buff, Iter, Iter, mark) :
EXIT SUB
539 CASE GDK_SHIFT_MASK :
MID(mark, 7, 4) =
"brkt"
540 gtk_source_buffer_remove_source_marks(Buff, Iter, Iter,
"fbdbg-brkd")
541 gtk_source_buffer_remove_source_marks(Buff, Iter, Iter,
"fbdbg-brkp")
542 VAR list = gtk_source_buffer_get_source_marks_at_iter(Buff, Iter, mark)
545 gtk_source_buffer_remove_source_marks(Buff, Iter, Iter, mark) :
EXIT SUB
547 CASE GDK_CONTROL_MASK :
MID(mark, 7, 4) =
"brkd"
548 VAR list = gtk_source_buffer_get_source_marks_at_iter(Buff, Iter,
"fbdbg-brkp")
551 gtk_source_buffer_remove_source_marks(Buff, Iter, Iter,
"fbdbg-brkp")
555 list = gtk_source_buffer_get_source_marks_at_iter(Buff, Iter,
"fbdbg-brkt")
558 gtk_source_buffer_remove_source_marks(Buff, Iter, Iter,
"fbdbg-brkt")
562 list = gtk_source_buffer_get_source_marks_at_iter(Buff, Iter, mark)
563 IF 0 = list
THEN EXIT SELECT
565 gtk_source_buffer_remove_source_marks(Buff, Iter, Iter, mark)
568 CASE ELSE :
MID(mark, 7, 4) =
"book"
569 VAR list = gtk_source_buffer_get_source_marks_at_iter(Buff, Iter, mark) _
570 , widg = gtk_widget_get_parent(GTK_WIDGET(SView)) _
571 , lnr = gtk_text_iter_get_line(Iter) + 1
574 SRC->delBookmark(lnr, widg)
575 gtk_source_buffer_remove_source_marks(Buff, Iter, Iter, mark) :
EXIT SUB
577 SRC->addBookmark(lnr, widg)
579 gtk_source_buffer_create_source_mark(Buff, NULL, mark, Iter)
581 ?" --> right mouse click here"
599 BYVAL Widget
AS GtkWidget
PTR, _
600 BYVAL user_data
AS gpointer)
EXPORT
602 VAR id = gtk_combo_box_get_active_id(GTK_COMBO_BOX(Widget))
603 IF id = NULL
THEN EXIT SUB
605 VAR lnr =
CAST(gint,
VALUINT(*id)) _
606 , widg = GTK_WIDGET(0 +
VALUINT(
MID(*id,
INSTR(*id,
"&h"))))
607 SRC->scroll(lnr, widg, 0)
609 gtk_combo_box_set_active(GTK_COMBO_BOX(Widget), 0)
623 BYVAL Butt
AS GtkButton
PTR, _
624 BYVAL user_data
AS gpointer)
EXPORT
626 ?" --> callback on_CurSrc_clicked"