Editeur de bbcode Windows/Linux.

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Geo Trouvpatou
Messages : 471
Inscription : dim. 23/déc./2007 18:10

Editeur de bbcode Windows/Linux.

Message par Geo Trouvpatou »

Salut.

Je voulais un code qui soit aussi bien fonctionnel sur Windows que sur Linux et Le Soldat Inconnu avait déjà fait le gros du boulot, donc j'ai cherché un peu pour que cela marche aussi sur le dos du pingouin.

Je m'épate moi-même parce que j'ai dû mettre mon nez dans une doc anglaise alors que j'y suis allergique :lol:.

Il y a peut-être des choses à modifier.
Si personne n'a rien à y redire, je zapperai peut-être le code dans la rubrique ouverte par progi1984 pour les codes multi-OS.

Code : Tout sélectionner

; Application permettant d'appliquer des tags avant et après une portion de texte selectionnée.

;Auteur de la version Windows : Le Soldat Inconnu
; Version originale : http://www.purebasic.fr/french/viewtopic.php?p=110367#p110367
; Date : ??-??-??

; Auteur de la version Linux : Geo Trouvpatou aka El Konkonbre M@squed.
; Date : 26-03-10

; PB 4.41.
; OS : Windows et Linux.

; Ce code est disponible ici : http://www.purebasic.fr/french/viewtopic.php?f=6&t=10480

EnableExplicit

; -------------------------------------------------------------------------------------------
;- Enumérations
; -------------------------------------------------------------------------------------------
Enumeration #PB_Compiler_EnumerationValue
    ; - Windows  
    #WINDOW_EditeurBBCode
    
    ; - Gadgets
    #EDITOR_GADGET
    
    #BUTTON_Gras
    #BUTTON_Italique
    #BUTTON_Souligne
    
    #COMBO_BOX_Couleur
EndEnumeration 
    
    
; -------------------------------------------------------------------------------------------
;- Déclarations
; -------------------------------------------------------------------------------------------  
Declare EditeurBBCode() 
Declare AppliquerBBCode(BBCodeDebut$, BBCodeFin$)

Global evenement.i


; -------------------------------------------------------------------------------------------
;- Main
; -------------------------------------------------------------------------------------------
; On ouvre l'éditeur.
EditeurBBCode() 


; -------------------------------------------------------------------------------------------
;- Boucle
; -------------------------------------------------------------------------------------------
Repeat
    evenement = WaitWindowEvent()
    
    ; Evènements Boutons (Gadgets en général)
    If evenement = #PB_Event_Gadget
        Select EventGadget()
            Case #BUTTON_Gras
                AppliquerBBCode("[b]", "[/b]")
                
                
            Case #BUTTON_Italique
                AppliquerBBCode("[i]", "[/i]")
                
				
            Case #BUTTON_Souligne										
                AppliquerBBCode("[u]", "[/u]")
                
                
            Case #COMBO_BOX_Couleur		
                Define resultatCombo = GetGadgetState(#COMBO_BOX_Couleur)
                ;Debug resultatCombo
                
                Define resultatCouleur$ = GetGadgetItemText(#COMBO_BOX_Couleur, resultatCombo)
                Debug resultatCouleur$
                
                If resultatCouleur$ = "Rouge"				
                    AppliquerBBCode("[color=#FF0000]", "[/color]")	
                    
                ElseIf resultatCouleur$ = "Vert"
                    AppliquerBBCode("[color=#008000]", "[/color]")	
                    
                ElseIf resultatCouleur$ = "Bleu"
                    AppliquerBBCode("[color=#0000FF]", "[/color]")	
                    
                EndIf										
                
                ; On se remet sur défaut après avoir appliqué les tags "couleur"
                SetGadgetState(#COMBO_BOX_Couleur, 0)	
                
        EndSelect
    EndIf
    
Until evenement = #PB_Event_CloseWindow


; -------------------------------------------------------------------------------------------
;- Procédures.
; -------------------------------------------------------------------------------------------	
Procedure EditeurBBCode()
    If OpenWindow(#WINDOW_EditeurBBCode, 60, 250, 400, 280, "", #PB_Window_SystemMenu | #PB_Window_TitleBar | #PB_Window_ScreenCentered) ; 
        
        EditorGadget(#EDITOR_GADGET, 0, 0, 400, 220)
        SetGadgetText(#EDITOR_GADGET, "PureBasic PureBasic PureBasic" + Chr(10) + "PureBasic PureBasic PureBasic" + Chr(10) + "PureBasic, ça rôxx," + Chr(10) + "pour Windows et Linux.")

        ButtonGadget(#BUTTON_Gras, 40, 220, 100, 24, "Gras")
        ButtonGadget(#BUTTON_Italique, 140, 220, 100, 24, "Italique")
        ButtonGadget(#BUTTON_Souligne, 240, 220, 100, 24, "Souligné")
        
        ComboBoxGadget(#COMBO_BOX_Couleur, 140, 250, 200, 25)
        AddGadgetItem(#COMBO_BOX_Couleur, 0, "Défaut")
        AddGadgetItem(#COMBO_BOX_Couleur, 1, "Rouge")
        AddGadgetItem(#COMBO_BOX_Couleur, 2, "Vert")
        AddGadgetItem(#COMBO_BOX_Couleur, 3, "Bleu")
        SetGadgetState(#COMBO_BOX_Couleur, 0)    ; On sélectionne "Défaut" à l'ouverture de l'application.
    EndIf
EndProcedure			




Procedure AppliquerBBCode(BBCodeDebut$, BBCodeFin$)
    Protected nbItems.i, buffer.i
    
    Protected index.i, PositionCurseurDebut.i, PositionCurseurFin.i
    Protected Texte$
    
    CompilerSelect #PB_Compiler_OS 
        CompilerCase #PB_OS_Windows
            
            SendMessage_(GadgetID(#EDITOR_GADGET), #EM_GETSEL, @PositionCurseurDebut, @PositionCurseurFin)
            
            
        CompilerCase #PB_OS_Linux
            
        	;Protected StartIter.GtkTextIter, EndIter.GtkTextIter
        	Protected.GtkTextIter StartIter, EndIter
        	
            buffer = gtk_text_view_get_buffer_(GadgetID(#EDITOR_GADGET))
            gtk_text_buffer_get_selection_bounds_(buffer, @StartIter, @EndIter)
            
            ; Détermine le num ou se trouve le curseur de début de selection du texte.
            PositionCurseurDebut = gtk_text_iter_get_offset_(@StartIter)
            Debug "Selection début = "+ Str(PositionCurseurDebut)
            
            ; Détermine le num ou se trouve le curseur de fin de selection du texte.
            PositionCurseurFin = gtk_text_iter_get_offset_(@EndIter)
            Debug "Selection fin = "+ Str(PositionCurseurFin)  
            
    CompilerEndSelect	
    
    
    ;+++++++++++++++++++++++ Code tout OS Début ++++++++++++++++++++
    
    ;Debug CountGadgetItems(#EDITOR_GADGET) ; Compte le nombre de ligne de l'Editor.
    Texte$ = ""
    nbItems = CountGadgetItems(#EDITOR_GADGET) - 1				
    For index = 0 To nbItems
        If Texte$ <> ""
            Texte$ + Chr(10)
        EndIf
        Texte$ + GetGadgetItemText(#EDITOR_GADGET, index)
    Next
    
    
    Debug "----------"
    
    Texte$ = Left(Texte$, PositionCurseurDebut) + BBCodeDebut$ + Mid(Texte$, PositionCurseurDebut + 1, PositionCurseurFin - PositionCurseurDebut) + BBCodeFin$ + Right(Texte$, Len(Texte$) - PositionCurseurFin) 
    Debug Texte$
    
    ;+++++++++++++++++++++++ Code tout OS Fin ++++++++++++++++++++
    
    
    CompilerSelect #PB_Compiler_OS 
        CompilerCase #PB_OS_Windows 
            
            ; Permet de ne pas laisser sélectionné le tag de départ et de fin mais uniquement le texte entre les 2 tags.
            PositionCurseurDebut + Len(BBCodeDebut$)
            PositionCurseurFin + Len(BBCodeDebut$)
            
            
            SetGadgetText(#EDITOR_GADGET, Texte$)
            SendMessage_(GadgetID(#EDITOR_GADGET), #EM_SETSEL, PositionCurseurDebut, PositionCurseurFin)
            SetActiveGadget(#EDITOR_GADGET)
            
            
        CompilerCase #PB_OS_Linux 
            
            SetGadgetText(#EDITOR_GADGET, Texte$)                     				
            SetActiveGadget(#EDITOR_GADGET) ; Donne le focus au gadget et remet le curseur en fin de texte      
            
    CompilerEndSelect	 
    
EndProcedure
Bye.
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Editeur de bbcode Windows/Linux.

Message par Ar-S »

Salut Geo,
Multi OS et SendMessage_ 8O ???

Ce serait ti pas une ch'tite API windowzienne ?
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Geo Trouvpatou
Messages : 471
Inscription : dim. 23/déc./2007 18:10

Re: Editeur de bbcode Windows/Linux.

Message par Geo Trouvpatou »

Salut Ar-S

Arghhh!!! Tu m'as eu :)
Ah! non, si tu regardes mieux, tu verras :

Code : Tout sélectionner

CompilerSelect #PB_Compiler_OS  
    CompilerCase #PB_OS_Windows 
       
      ;... Code pour Dos 
       
       
    CompilerCase #PB_OS_Linux 
       
      ;... Code pour Nux 
       
  CompilerEndSelect 

Ceci dit, je voulais ajouter ta procedure pour le WordWrap que tu avais mis dans un code récent, mais cela faisait déconner la portion de texte selectionnée.

D'ailleurs j'ai révisé ma façon de penser par rapport à mes débuts sur PB.
Au début c'était : "Je ne prend que du code 100% natif PB"
Mais maintenant je me dis qu'on peut en cherchant un peu, avoir un équivalent en jouant avec GTK et WindowsAPI.

Bye.
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Editeur de bbcode Windows/Linux.

Message par Ar-S »

Ah désolé j'ai regardé le code trop vite ^^
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Répondre