; Module/File: Editor_GtkDemo.pb ; Function: Editor-Demo - Adaption from gtk-demo - Linux gtk2/gtk3 ; Author: Omi ; Date: Nov. 13, 2014 ; Version: 0.2 ; Target Compiler: PureBasic 5.22/5.31/5.40/5.5/5.6 ; Target OS: Linux: (X/K/L)ubuntu, Mint, 32/64, Ascii/Uni ; License: Release under the terms of the GNU Library General Public License, version 2 ;-------------------------------------------------------------- ; for display of pics/animations install gtk-demo EnableExplicit ImportC "" gtk_combo_box_text_new() gtk_combo_box_text_append_text(*combo_box, text.p-utf8) gtk_range_set_range( *range.GtkRange, min.d, max.d) g_signal_connect(*instance, detailed_signal.p-utf8, *c_handler, *data, destroy= 0, flags= 0) As "g_signal_connect_data" gtk_button_new_with_label(label.p-utf8) gdk_pixbuf_new_from_file(filename.p-utf8, *err) gtk_image_new_from_file(filename.p-utf8) gtk_image_new_from_stock(stock_id.p-utf8, size) ;gtk_image_new_from_icon_name(stock_id.p-utf8, size); gtk3-replace for gtk_image_new_from_stock() g_signal_emit_by_name(*inst, name.p-utf8, value= #Null, term= #Null) gtk_text_buffer_create_tag(*buffer.GtkTextBuffer, tag_name.p-utf8, first_property_name.p-utf8, value, term= #Null) ;same but 2 props & values... gtk_text_buffer_create_tag2(*buffer.GtkTextBuffer, tag_name.p-utf8, first_property_name.p-utf8, value, second_property_name.p-utf8, value2, term= #Null) As "gtk_text_buffer_create_tag" ;1 value as string... gtk_text_buffer_create_tagS(*buffer.GtkTextBuffer, tag_name.p-utf8, first_property_name.p-utf8, value.p-utf8, term= #Null) As "gtk_text_buffer_create_tag" ;5 values ... gtk_text_buffer_create_tag5V(*buffer.GtkTextBuffer, tag_name.p-utf8, fst_property_name.p-utf8, value, sec_property_name.p-utf8, value2, thrd_property_name.p-utf8, value3, frth_property_name.p-utf8, value4, fth_property_name.p-utf8, value5, term= #Null) As "gtk_text_buffer_create_tag" ;1 value as double... gtk_text_buffer_create_tagD(*buffer.GtkTextBuffer, tag_name.p-utf8, first_property_name.p-utf8, value.d, term= #Null) As "gtk_text_buffer_create_tag" gtk_text_buffer_apply_tag_by_name(*buffer.GtkTextBuffer, name.p-utf8, *start, *end_) gtk_text_buffer_remove_tag_by_name(*buffer.GtkTextBuffer, name.p-utf8, *start, *end_) gtk_text_buffer_insert(*buffer.GtkTextBuffer, *iter, text.p-utf8, len) gtk_text_buffer_insert_with_tags_by_name (*buffer.GtkTextBuffer, *iter, text.p-utf8, len, first_tag_name.p-utf8, term= #Null) ;same but 2 tags... gtk_text_buffer_insert_with_tags_by_name2 (*buffer.GtkTextBuffer, *iter, text.p-utf8, len, first_tag_name.p-utf8, second_tag_name.p-utf8, term= #Null) As "gtk_text_buffer_insert_with_tags_by_name" gdk_pixbuf_scale_simple(*pixbuf, dest_width, dest_height, interp_type) EndImport CompilerIf #PB_Compiler_Unicode = 0 MessageRequester("", "use unicode-executable-format") End CompilerEndIf ; Object constants #MainWin = 0 #Editor1 = 0 #WinX= 0 #WinY= 0 #WinW= 456 #WinH= 450 Enumeration #PANGO_STYLE_NORMAL #PANGO_STYLE_OBLIQUE #PANGO_STYLE_ITALIC EndEnumeration Enumeration #PANGO_UNDERLINE_NONE #PANGO_UNDERLINE_SINGLE #PANGO_UNDERLINE_DOUBLE #PANGO_UNDERLINE_LOW #PANGO_UNDERLINE_ERROR EndEnumeration Enumeration #GDK_INTERP_NEAREST #GDK_INTERP_TILES #GDK_INTERP_BILINEAR #GDK_INTERP_HYPER EndEnumeration ; Enumeration ; #PANGO_STRETCH_ULTRA_CONDENSED ; #PANGO_STRETCH_EXTRA_CONDENSED ; #PANGO_STRETCH_CONDENSED ; #PANGO_STRETCH_SEMI_CONDENSED ; #PANGO_STRETCH_NORMAL ; #PANGO_STRETCH_SEMI_EXPANDED ; #PANGO_STRETCH_EXPANDED ; #PANGO_STRETCH_EXTRA_EXPANDED ; #PANGO_STRETCH_ULTRA_EXPANDED ; EndEnumeration ; Enumeration ; #PANGO_VARIANT_NORMAL ; #PANGO_VARIANT_SMALL_CAPS ; EndEnumeration #PANGO_SCALE = 1024 #PANGO_SCALE_X_LARGE = 1.4399999999999 #PANGO_SCALE_LARGE = 1.2 #PANGO_SCALE_MEDIUM = 1.0 #PANGO_SCALE_SMALL = 0.8333333333333 #PANGO_SCALE_X_SMALL = 0.6444444444444 #PANGO_SCALE_XX_SMALL = 0.5787037037037 #PANGO_WEIGHT_THIN = 100 #PANGO_WEIGHT_ULTRALIGHT = 200 #PANGO_WEIGHT_LIGHT = 300 #PANGO_WEIGHT_BOOK = 380 #PANGO_WEIGHT_NORMAL = 400 #PANGO_WEIGHT_MEDIUM = 500 #PANGO_WEIGHT_SEMIBOLD = 600 #PANGO_WEIGHT_BOLD = 700 #PANGO_WEIGHT_ULTRABOLD = 800 #PANGO_WEIGHT_HEAVY = 900 #PANGO_WEIGHT_ULTRAHEAVY = 1000 Global.i gEvent, gQuit Global *gMem Global *gBuffer.GtkTextBuffer Procedure.s Pb2sUTF8(sPB.s); converts Ascii to UTF8, Returns pointer to string, free *gMem after each use Protected *gMem= AllocateMemory(StringByteLength(sPB, #PB_UTF8) + 1);Mem for string in UTF8 PokeS(*gMem, sPB, -1, #PB_UTF8) Protected.s sUTF8= PeekS(*gMem, -1) FreeMemory(*gMem) ProcedureReturn sUTF8 EndProcedure ProcedureC Callback_EditorButtonClicked() Debug "clicked" EndProcedure Procedure FileExist(FName.s) Protected.i Ret= #True If FileSize(FName) < 0 Ret= #False EndIf ProcedureReturn Ret EndProcedure Procedure Editor_FindAnchor(*iter.GtkTextIter) While gtk_text_iter_forward_char_(*iter) If gtk_text_iter_get_child_anchor_(*iter) ProcedureReturn #True EndIf Wend ProcedureReturn #False EndProcedure Procedure EdG_CreateTags(buffer) gtk_text_buffer_create_tag2(buffer, "heading", "weight", #PANGO_WEIGHT_BOLD, "size", 15 * #PANGO_SCALE); Import-type '2', 2 properties gtk_text_buffer_create_tag(buffer, "italic", "style", #PANGO_STYLE_ITALIC) gtk_text_buffer_create_tag(buffer, "oblique", "style", #PANGO_STYLE_OBLIQUE) gtk_text_buffer_create_tag(buffer, "light", "weight", #PANGO_WEIGHT_LIGHT) gtk_text_buffer_create_tag(buffer, "bold", "weight", #PANGO_WEIGHT_BOLD) gtk_text_buffer_create_tag(buffer, "ultraheavy", "weight", #PANGO_WEIGHT_ULTRAHEAVY) gtk_text_buffer_create_tag(buffer, "monospace", "family", Pb2sUTF8("monospace")) ; gtk_text_buffer_create_tag(buffer, "monospace", "family", UTF8("monospace")); PB5.60 gtk_text_buffer_create_tag(buffer, "asmall", "size", 7 * #PANGO_SCALE) gtk_text_buffer_create_tag(buffer, "abig", "size", 20 * #PANGO_SCALE) gtk_text_buffer_create_tagD(buffer, "xx-small", "scale", #PANGO_SCALE_XX_SMALL); Import-type 'D', 'double'-parameter gtk_text_buffer_create_tagD(buffer, "x-small", "scale", #PANGO_SCALE_X_SMALL); Import-type 'D', 'double'-parameter gtk_text_buffer_create_tagD(buffer, "small", "scale", #PANGO_SCALE_SMALL); Import-type 'D', 'double'-parameter gtk_text_buffer_create_tagD(buffer, "medium", "scale", #PANGO_SCALE_MEDIUM); Import-type 'D', 'double'-parameter gtk_text_buffer_create_tagD(buffer, "large", "scale", #PANGO_SCALE_LARGE); Import-type 'D', 'double'-parameter gtk_text_buffer_create_tagD(buffer, "x-large", "scale", #PANGO_SCALE_X_LARGE); Import-type 'D', 'double'-parameter ; gtk_text_buffer_create_tag(buffer, "smallcaps", "variant", #PANGO_VARIANT_SMALL_CAPS); no effect ; gtk_text_buffer_create_tag(buffer, "condensed", "stretch", #PANGO_STRETCH_CONDENSED); no effect ; ; ; gtk_text_buffer_create_tag(buffer, "expanded", "stretch", #PANGO_STRETCH_EXPANDED); no effect gtk_text_buffer_create_tagS(buffer, "blue_foreground", "foreground", "blue"); Import-type 'S', otherwise unicode-error gtk_text_buffer_create_tagS(buffer, "yellow_background", "background", "yellow"); Import-type 'S', otherwise unicode-error gtk_text_buffer_create_tag(buffer, "big_gap_before_line", "pixels_above_lines", 30) gtk_text_buffer_create_tag(buffer, "big_gap_after_line", "pixels_below_lines", 30) gtk_text_buffer_create_tag(buffer, "double_spaced_line", "pixels_inside_wrap", 10) gtk_text_buffer_create_tag(buffer, "not_editable", "editable", #False) gtk_text_buffer_create_tag(buffer, "word_wrap", "wrap_mode", #GTK_WRAP_WORD) gtk_text_buffer_create_tag(buffer, "char_wrap", "wrap_mode", #GTK_WRAP_CHAR) gtk_text_buffer_create_tag(buffer, "no_wrap", "wrap_mode", #GTK_WRAP_NONE) gtk_text_buffer_create_tag(buffer, "left_justify", "justification", #GTK_JUSTIFY_LEFT) gtk_text_buffer_create_tag(buffer, "center", "justification", #GTK_JUSTIFY_CENTER) gtk_text_buffer_create_tag(buffer, "right_justify", "justification", #GTK_JUSTIFY_RIGHT) gtk_text_buffer_create_tag2(buffer, "wide_margins", "left_margin", 50, "right_margin", 50); Import-type '2', 2 properties gtk_text_buffer_create_tag(buffer, "strikethrough", "strikethrough", #True) gtk_text_buffer_create_tag(buffer, "underline", "underline", #PANGO_UNDERLINE_SINGLE) gtk_text_buffer_create_tag(buffer, "double_underline", "underline", #PANGO_UNDERLINE_DOUBLE) gtk_text_buffer_create_tag2(buffer, "superscript", "rise", 4 * #PANGO_SCALE, "size", 8 * #PANGO_SCALE); Import-type '2', 2 properties gtk_text_buffer_create_tag2(buffer, "subscript", "rise", -4 * #PANGO_SCALE, "size", 8 * #PANGO_SCALE); Import-type '2', 2 properties gtk_text_buffer_create_tag5V(buffer, "rtl_quote", "wrap_mode", #GTK_WRAP_WORD, "direction", #GTK_TEXT_DIR_RTL, "indent", 30, "left_margin", 20, "right_margin", 20); Import-type '5v', 5 properties with integer EndProcedure Procedure EdG_InsertText(buffer) Protected *err Protected.GtkTextIter iter, istart, iend Protected.s S, filename= "/usr/share/gtk-2.0/demo/gtk-logo-rgb.gif"; *** CHOOSE AN GIF OR PIC ON YOUR INSTALLATION !!! *** Protected pixbuf Protected scaled Protected *anchor.GtkTextChildAnchor If FileExist(filename) pixbuf= gdk_pixbuf_new_from_file(filename, @*err) ;g_free_(*gMem) scaled= gdk_pixbuf_scale_simple(pixbuf, 32, 32, #GDK_INTERP_BILINEAR) g_object_unref_(pixbuf) pixbuf= scaled EndIf gtk_text_buffer_get_iter_at_offset_(buffer, @iter, 0); S= "Die ist eine Adaptierung des Text-widget - 'Multiple Views'-C-Quelltextes vom gtk-Demo in einen PureBasic-Quellcode mit einer Aufreihung ähnlicher Text-Effekte." + #LF$+ "Zudem demonstriert diese Demo ein möglichen Umgang mit den in 'C' in puncto Typ und Anzahl flexibler handhabbaren Importen. Hier wird für jede Variation ein eigener Import angelegt!"+#LF$+#LF$ gtk_text_buffer_insert(buffer, @iter, S, -1) gtk_text_buffer_insert_with_tags_by_name(buffer, @iter, "Font styles... "+#LF$, -1, "heading") gtk_text_buffer_insert_with_tags_by_name(buffer, @iter, "Dies wäre eine Zeile in 'italic',"+#LF$, -1, "italic") gtk_text_buffer_insert_with_tags_by_name(buffer, @iter, "Dies wäre eine Zeile in 'oblique',"+#LF$, -1, "oblique") gtk_text_buffer_insert_with_tags_by_name(buffer, @iter, "Dies ist eine Zeile in 'light'."+#LF$, -1, "light") gtk_text_buffer_insert_with_tags_by_name(buffer, @iter, "Dies eine Zeile in 'bold'."+#LF$, -1, "bold") gtk_text_buffer_insert_with_tags_by_name(buffer, @iter, "Dies eine Zeile in 'ultraheavy'."+#LF$, -1, "ultraheavy") gtk_text_buffer_insert_with_tags_by_name(buffer, @iter, "Hier eine Zeile in 'monospace' (typewriter)"+#LF$, -1,"monospace") gtk_text_buffer_insert_with_tags_by_name(buffer, @iter, "Eine absolute Zeichenhöhe 'big',"+#LF$, -1, "abig") gtk_text_buffer_insert_with_tags_by_name(buffer, @iter, "und eine Zeile in absolut 'small',"+#LF$, -1, "asmall") gtk_text_buffer_insert(buffer, @iter, "Noch besser wäre es keine absoluten Zeichenhöhen zu verwenden, um relativ auf Größeneinstellungen des User zu reagieren!"+#LF$, -1) gtk_text_buffer_insert_with_tags_by_name(buffer, @iter, "Hier eine Zeile in relativem 'xx-small'"+#LF$, -1, "xx-small") gtk_text_buffer_insert_with_tags_by_name(buffer, @iter, "hier in relativem 'x-small'"+#LF$, -1, "x-small") gtk_text_buffer_insert_with_tags_by_name(buffer, @iter, "hier in relativem 'small'"+#LF$, -1, "small") gtk_text_buffer_insert_with_tags_by_name(buffer, @iter, "hier in relativem, normalem 'medium'"+#LF$, -1, "medium") gtk_text_buffer_insert_with_tags_by_name(buffer, @iter, "hier in relativem 'large'"+#LF$, -1, "large") gtk_text_buffer_insert_with_tags_by_name(buffer, @iter, "und noch eine in 'x-large'"+#LF$+#LF$, -1, "x-large") ; gtk_text_buffer_insert(buffer, @iter, "Eine Zeile in ganz normaler Schrift"+#LF$, -1) ; gtk_text_buffer_insert_with_tags_by_name(buffer, @iter, "Eine Zeile in ganz normaler Schrift, jedoch 'smallcaps'"+#LF$+#LF$, -1, "smallcaps") ; gtk_text_buffer_insert(buffer, @iter, "Eine Zeile in ganz normaler Schrift"+#LF$, -1) ; gtk_text_buffer_insert_with_tags_by_name(buffer, @iter, "Eine Zeile in ganz normaler Schrift, jedoch 'condensed'"+#LF$+#LF$, -1, "condensed") ; gtk_text_buffer_insert_with_tags_by_name(buffer, @iter, "Eine Zeile in ganz normaler Schrift, jedoch 'expanded'"+#LF$+#LF$, -1, "expanded") gtk_text_buffer_insert_with_tags_by_name(buffer, @iter, "Colors..."+#LF$, -1, "heading") gtk_text_buffer_insert_with_tags_by_name(buffer, @iter, "Zum Beispiel eine Zeile in blauer Schrift,"+#LF$, -1, "blue_foreground") gtk_text_buffer_insert_with_tags_by_name(buffer, @iter, "und eine mit gelbem Hintergrund (Marker)."+#LF$, -1, "yellow_background") gtk_text_buffer_insert_with_tags_by_name2(buffer, @iter, "Oder eine Zeile mit beiden Effekten in einem."+#LF$+#LF$, -1, "blue_foreground", "yellow_background") gtk_text_buffer_insert_with_tags_by_name(buffer, @iter, "Underline, strikethrough, and rise..."+#LF$, -1, "heading") gtk_text_buffer_insert_with_tags_by_name(buffer, @iter, "Hier eine komplett durchgestrichene Zeile,"+#LF$, -1, "strikethrough") gtk_text_buffer_insert_with_tags_by_name(buffer, @iter, "und eine unterstrichene Zeile,"+#LF$, -1, "underline") gtk_text_buffer_insert_with_tags_by_name(buffer, @iter, "sowie eine doppelt unterstrichene Zeile,"+#LF$, -1, "double_underline") gtk_text_buffer_insert(buffer, @iter, "Es folgen ein ", -1) gtk_text_buffer_insert_with_tags_by_name(buffer, @iter, "paar Worte in 'superscript'", -1, "superscript") gtk_text_buffer_insert(buffer, @iter, ", " +#LF$ + "sowie eine Zeile mit ", -1) gtk_text_buffer_insert_with_tags_by_name(buffer, @iter, "ein paar Worten in 'subscript'", -1, "subscript") gtk_text_buffer_insert(buffer, @iter, "."+#LF$+#LF$, -1) gtk_text_buffer_insert_with_tags_by_name(buffer, @iter, "Spacing..."+#LF$, -1, "heading") gtk_text_buffer_insert(buffer, @iter, "Du kannst den Freiraum über jeder Zeile einstellen..."+#LF$, -1); gtk_text_buffer_insert_with_tags_by_name2(buffer, @iter, "Diese Zeile hat einen großen Freiraum über der Zeile."+#LF$, -1, "big_gap_before_line", "wide_margins") gtk_text_buffer_insert_with_tags_by_name2(buffer, @iter, "Du kannst aber auch den Freiraum nach der Zeile einstellen; diese Zeile hat Freiraum darunter."+#LF$, -1, "big_gap_after_line", "wide_margins") gtk_text_buffer_insert_with_tags_by_name2(buffer, @iter, "Auch den Freiraum zwischen umgebrochenen Zeilen kann man einstellen; diese Zeile hat extra Freiraum innerhalb der umgebrochenen Zeilen. " + "Um es weiter zu zeigen, etwas Fülltext: the quick brown fox jumped over the lazy dog. Blah blah blah blah blah blah blah blah blah."+#LF$+#LF$, -1, "double_spaced_line", "wide_margins") gtk_text_buffer_insert_with_tags_by_name(buffer, @iter, "Wrapping..."+#LF$, -1, "heading") gtk_text_buffer_insert_with_tags_by_name(buffer, @iter, "Diese Zeilen haben einen zeichenbasierenden Umbruch, und können auch zwischen Buchstaben umgebrochen werden. Ich zieh es zur Demonstration mal in die Länge: " + "blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah"+#LF$+#LF$, -1, "char_wrap") gtk_text_buffer_insert_with_tags_by_name(buffer, @iter, "Diese Zeile hat den Umbruch komplett abgeschaltet, um die horizontale Scrollbar anzuzeigen."+#LF$+#LF$+#LF$, -1, "no_wrap") gtk_text_buffer_insert_with_tags_by_name(buffer, @iter, "Justification..."+#LF$, -1, "heading") gtk_text_buffer_insert_with_tags_by_name(buffer, @iter, "Diese Zeile ist standardmäßig links ausgerichtet.", -1, "left_justify") gtk_text_buffer_insert_with_tags_by_name(buffer, @iter, #LF$+"Diese Zeile wird zentriert dargestellt.", -1, "center") gtk_text_buffer_insert_with_tags_by_name(buffer, @iter, #LF$+"Und diese Zeile ist rechts ausgerichtet."+#LF$+#LF$, -1, "right_justify") gtk_text_buffer_insert_with_tags_by_name (buffer, @iter, "Internationalization..."+#LF$, -1, "heading") gtk_text_buffer_insert(buffer, @iter, "Hier etwas in 'right-to-left'-Richtung mit wortweisem Umbruch, das hierzulande nicht viele lesen können. Ich bin also für den Inhalt nicht verantwortlich - es stammt aus der gtk-demo!"+#LF$, -1) S= "وقد بدأ ثلاث من أكثر المؤسسات تقدما في شبكة اكسيون برامجها كمنظمات لا تسعى للربح، ثم تحولت في السنوات الخمس الماضية إلى مؤسسات مالية منظمة، وباتت جزءا من النظام المالي في بلدانها، ولكنها تتخصص في خدمة قطاع المشروعات الصغيرة. وأحد أكثر هذه المؤسسات نجاحا هو »بانكوسول« في بوليفيا." gtk_text_buffer_insert_with_tags_by_name (buffer, @iter, S+#LF$+#LF$, -1, "rtl_quote") gtk_text_buffer_insert_with_tags_by_name(buffer, @iter, "Images..."+#LF$, -1, "heading") gtk_text_buffer_insert(buffer, @iter, "Der 'buffer' kann auch Bilder aufnehmen, sogar Formate die PureBasic nicht direkt unterstützt: GIF's ", -1) If FileExist(filename) gtk_text_buffer_insert_pixbuf_(buffer, @iter, pixbuf) gtk_text_buffer_insert_pixbuf_(buffer, @iter, pixbuf) gtk_text_buffer_insert_pixbuf_(buffer, @iter, pixbuf) Else gtk_text_buffer_insert(buffer, @iter, " --- 'gtk-logo-rgb.gif' wurde nicht gefunden! --- "+#LF$, -1) EndIf gtk_text_buffer_insert(buffer, @iter, " zum Beispiel."+#LF$+#LF$, -1) gtk_text_buffer_insert_with_tags_by_name(buffer, @iter, "Editability..."+#LF$, -1, "heading") gtk_text_buffer_insert_with_tags_by_name(buffer, @iter, "Dieser Absatz ist gesperrt und kann nicht vom User editiert werden - probier es! Die Zeilen können auch nicht gelöscht werden."+#LF$+#LF$, -1, "not_editable") gtk_text_buffer_insert(buffer, @iter, #LF$, -1) gtk_text_buffer_insert_with_tags_by_name(buffer, @iter, "Man kann auch 'widgets' in den buffer aufnehmen..."+#LF$, -1, "heading") gtk_text_buffer_insert(buffer, @iter, "Hier ist ein 'button': ", -1) *anchor= gtk_text_buffer_create_child_anchor_(buffer, @iter) gtk_text_buffer_insert(buffer, @iter, #LF$+"und ein 'menu': ", -1) *anchor= gtk_text_buffer_create_child_anchor_(buffer, @iter) gtk_text_buffer_insert(buffer, @iter, #LF$+"sowie eine 'scale': ", -1) *anchor= gtk_text_buffer_create_child_anchor_(buffer, @iter) gtk_text_buffer_insert(buffer, @iter, #LF$+"und eine 'animation': ", -1) *anchor= gtk_text_buffer_create_child_anchor_(buffer, @iter) gtk_text_buffer_insert(buffer, @iter, #LF$+"und ein 'stock-image' als icon: ", -1) *anchor= gtk_text_buffer_create_child_anchor_(buffer, @iter) gtk_text_buffer_insert(buffer, @iter, #LF$+"und schließlich ein 'text entry': ", -1) *anchor= gtk_text_buffer_create_child_anchor_(buffer, @iter) gtk_text_buffer_insert(buffer, @iter, #LF$+#LF$, -1) gtk_text_buffer_insert(buffer, @iter, "Das sind noch nicht alle Möglichkeiten! Was fehlt ist z.B. unsichtbarer oder versteckter Text, Tabstopps, eigene Zeichenbereiche u.s.w.", -1) gtk_text_buffer_get_bounds_(buffer, @istart, @iend) gtk_text_buffer_apply_tag_by_name(buffer, "word_wrap", @istart, @iend) g_object_unref_(pixbuf) EndProcedure Procedure EdG_AttachWidgets(Gadget) Protected iter.GtkTextIter Protected *anchor.GtkTextChildAnchor Protected *buffer.GtkTextBuffer= gtk_text_view_get_buffer_(GadgetID(Gadget)) Protected *widget.GtkWidget Protected.i I Protected.s filename gtk_text_buffer_get_start_iter_(*buffer, @iter) While Editor_FindAnchor(@iter) *anchor= gtk_text_iter_get_child_anchor_(@iter) If I = 0 *widget= gtk_button_new_with_label("Click Me") g_signal_connect(*widget, "clicked", @Callback_EditorButtonClicked(), 0) ElseIf I = 1 *widget= gtk_combo_box_text_new (); gtk_combo_box_text_append_text(*widget, "Option 1") gtk_combo_box_text_append_text(*widget, "Option 2") gtk_combo_box_text_append_text(*widget, "Option 3") ElseIf I = 2 *widget= gtk_hscale_new_(#Null) gtk_range_set_range(*widget, 0, 100) gtk_widget_set_size_request_(*widget, 70, -1) ElseIf I = 3 filename= "/usr/share/gtk-2.0/demo/floppybuddy.gif"; *** CHOOSE AN ANIMATED GIF ON YOUR INSTALLATION !!! *** If FileExist(filename) *widget= gtk_image_new_from_file(filename) ;g_free (filename); EndIf ElseIf I = 4 *widget= gtk_image_new_from_stock("gtk-dialog-warning", #GTK_ICON_SIZE_DIALOG) ElseIf I = 5 *widget= gtk_entry_new_ () EndIf gtk_text_view_add_child_at_anchor_(GadgetID(#Editor1), *widget, *anchor) gtk_widget_show_all_(*widget) I+ 1 Wend EndProcedure Procedure Create_WinMain() If OpenWindow(#MainWin, #WinX, #WinY, #WinW, #WinH, "PureBasic-Editor with gtk-commands", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) EditorGadget(#Editor1, 5, 5, #WinW-10, #WinH-10, #PB_Editor_WordWrap) *gBuffer= gtk_text_view_get_buffer_(GadgetID(#Editor1)) EdG_CreateTags(*gBuffer) EdG_InsertText(*gBuffer) EdG_AttachWidgets(#Editor1) EndIf EndProcedure Create_WinMain() Repeat gEvent= WaitWindowEvent() Select gEvent Case #PB_Event_CloseWindow gQuit= #True Case #PB_Event_Gadget EndSelect Until gQuit ; IDE Options = PureBasic 5.45 LTS (Linux - x86) ; CursorPosition = 10 ; Folding = -- ; EnableUnicode ; EnableXP