How to apply styles to a GTK TextGadget

Share your advanced PureBasic knowledge/code with the community.
WishMaster
Enthusiast
Enthusiast
Posts: 277
Joined: Fri Jun 17, 2005 7:13 pm
Location: Franconia
Contact:

How to apply styles to a GTK TextGadget

Post by WishMaster »

Finally :wink:

Code: Select all

;Philipp Schmieder (WishMaster/vonTurnundTaxis)
;http://www.noname-development.de
;03.01.2007

;Released under the terms of the LGPL (http://www.gnu.org/licenses/lgpl.html)


Define StartIter.GtkTextIter
Define EndIter.GtkTextIter
Define PBStartIter.GtkTextIter
Define PBEndIter.GtkTextIter

Enumeration
    #Pango_Style_Normal
    #Pango_Style_Oblique
EndEnumeration

#Pango_Weight_Normal = 400
#Pango_Weight_Bold = 800

If OpenWindow(1, 1, 1, 800, 530, "") 
    If CreateGadgetList(WindowID(1)) 
        
        
        EditorGadget(1, 0, 0, 800, 500)
        SetGadgetText(1, "PureBasic" + Chr(10) + "PureBasic, ontwikkeld door Frédéric Laboureur (Fantaisie Software, Frankrijk)," + Chr(10) + "is een commerciële compiler voor Windows, Linux, AmigaOS en Mac OS. De programma's zijn klein en" + Chr(10) + "snel, de syntax een mix tussen BASIC en C. Naast de vele krachtig geoptimaliseerde bibliotheken" + Chr(10) + "(GUI-gadgets, beeld, geluid, netwerk, database, compressie, cryptografie, ....) kan men rechtstreeks" + Chr(10) + "WinAPI aanspreken en Assembler-code gebruiken (Inline-Assembler). Bovendien is het mogelijk om" + Chr(10) + "een bibliotheek te schrijven. Verder biedt PureBasic sinds versie 3.5 een rudimentaire 3D-engine" + Chr(10) + "(OGRE 3D), waarmee het mogelijk is snel en eenvoudig kleine 3-D toepassingen te programmeren." + Chr(10) + Chr(10) + "Een essentieel voordeel vergeleken met andere programmeertalen is het bijzondere feit dat de taal" + Chr(10) + "doorlopend ontwikkeld wordt, steeds krachtiger wordt en dat nieuwe instructies de taal verder" + Chr(10) + "optimaliseren. De aanschaf van PureBasic houdt automatisch in dat alle toekomstige updates gratis" + Chr(10) + "zijn in de vorm van downloads. Verdere kosten bij het verkopen van door u ontwikkelde programma's" + Chr(10) + "zijn er niet, geschreven programma's kunnen licentie-vrij verhandeld worden zonder rekening te" + Chr(10) + "hoeven houden met beperkingen van de kant van de fabrikant.")
        
        Buffer = gtk_text_view_get_buffer_(GadgetID(1)) 



        ButtonGadget(2, 0, 500, 200, 30, "Reset Styles")
        ButtonGadget(3, 200, 500, 200, 30, "Bold")
        ButtonGadget(4, 400, 500, 200, 30, "Oblique")
        ComboBoxGadget(5, 600, 500, 200, 30)
        AddGadgetItem(5, 0, "very small")
        AddGadgetItem(5, 0, "small")
        AddGadgetItem(5, 0, "big")
        AddGadgetItem(5, 0, "huge")

        gtk_text_buffer_create_tag_(Buffer, "bold", "weight", #Pango_Weight_Bold)
        gtk_text_buffer_create_tag_(Buffer, "oblique", "style", #Pango_Style_Oblique)
        
        gtk_text_buffer_create_tag_(Buffer, "very small", "size", 4000)
        gtk_text_buffer_create_tag_(Buffer, "small", "size", 9000)
        gtk_text_buffer_create_tag_(Buffer, "big", "size", 15000)
        gtk_text_buffer_create_tag_(Buffer, "huge", "size", 30000)

        gtk_text_buffer_get_iter_at_offset_(Buffer, @PBStartIter, 0)
        gtk_text_buffer_get_iter_at_offset_(Buffer, @PBEndIter, 9)
        
        
        gtk_text_buffer_apply_tag_by_name_(Buffer, "bold", @PBStartIter, @PBEndIter) 
        gtk_text_buffer_apply_tag_by_name_(Buffer, "big", @PBStartIter, @PBEndIter) 

        
        Repeat
            Event = WaitWindowEvent() 
            If Event = #PB_Event_Gadget
                Select EventGadget()
                    Case 2
                        gtk_text_buffer_get_selection_bounds_(Buffer, @StartIter, @EndIter)
                        gtk_text_buffer_remove_all_tags_(Buffer, @StartIter, @EndIter) 
                    Case 3
                        gtk_text_buffer_get_selection_bounds_(Buffer, @StartIter, @EndIter)
                        gtk_text_buffer_apply_tag_by_name_(Buffer, "bold", @StartIter, @EndIter)
                    Case 4
                        gtk_text_buffer_get_selection_bounds_(Buffer, @StartIter, @EndIter)
                        gtk_text_buffer_apply_tag_by_name_(Buffer, "oblique", @StartIter, @EndIter) 
                    Case 5
                        gtk_text_buffer_get_selection_bounds_(Buffer, @StartIter, @EndIter)
                        gtk_text_buffer_remove_tag_by_name_(Buffer, "small", @StartIter, @EndIter)
                        gtk_text_buffer_remove_tag_by_name_(Buffer, "very small", @StartIter, @EndIter)
                        gtk_text_buffer_remove_tag_by_name_(Buffer, "big", @StartIter, @EndIter)
                        gtk_text_buffer_remove_tag_by_name_(Buffer, "huge", @StartIter, @EndIter)
                        gtk_text_buffer_apply_tag_by_name_(Buffer, GetGadgetText(5), @StartIter, @EndIter) 
                EndSelect
            EndIf
        Until Event = #PB_Event_CloseWindow
    EndIf
EndIf
Image Image
bender-rulez
User
User
Posts: 49
Joined: Mon Mar 14, 2005 11:30 am

Post by bender-rulez »

Hi, nice Example!!! What I am looking for!

But how to save the text with the style information to a file?
And how to read it back to the editorgadget?

what I would like is a way to transfer some of the style infos to html when saving the file and vice versa....
WishMaster
Enthusiast
Enthusiast
Posts: 277
Joined: Fri Jun 17, 2005 7:13 pm
Location: Franconia
Contact:

Post by WishMaster »

You can easily check whether a character has a tag or not via gtk_text_iter_has_tag_(@Iter, "your-tag-name").

You could do it like this:

Code: Select all

For Count = 1 To Len(GetGadgetText(#Your_Gadget))
    gtk_text_buffer_get_iter_at_offset_(Your_Gadget_Buffer, @Iter, Count - 1)
    If gtk_text_buffer_get_iter_at_offset_(Your_Gadget_Buffer, @Iter, Count - 1) = #TRUE
        Debug "This char has your-tag-name"
    EndIf
Next
(If I was freak I'd tell you RTFM :wink: )
Image Image
Post Reply