PureBasic
https://www.purebasic.fr/french/

Un editeur ... qui demande qu'à grandir
https://www.purebasic.fr/french/viewtopic.php?f=3&t=16946
Page 1 sur 1

Auteur:  Paul [ Mar 19/Sep/2017 21:27 ]
Sujet du message:  Un editeur ... qui demande qu'à grandir

Comme le répertoire, l'éditeur ne demande qu'à être amélioré ...

Sous linux, ça marche sans problème ... sous windows .... vous me direz.

Code:
;le 15.09.2017 par Paul(PE)
;linux-x64
;purebasic 5.6

ImportC ""
   gtk_text_buffer_create_tag(*buffer.GtkTextBuffer, tag_name.p-utf8, first_property_name.p-utf8, value, term= #Null)
   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_view_set_left_margin (*text_view.GtkTextView, left_margin)
   gtk_text_buffer_delete(*buffer.GtkTextBuffer,*start, *end_)
   
   gtk_text_buffer_register_deserialize_tagset(*buffer.GtkTextBuffer,name.p-utf8)
   gtk_text_buffer_deserialize_set_can_create_tags(*buffer.GtkTextBuffer,format1,term0 = #True)
   gtk_text_buffer_deserialize(*buffer0.GtkTextBuffer,*buffer1.GtkTextBuffer,format,*start,*Data,*longueur,term1 = #Null)
   
   gtk_text_buffer_get_bounds(*buffer.GtkTextBuffer,*start, *end_)
  gtk_text_buffer_register_serialize_tagset(*buffer.GtkTextBuffer,name.p-utf8)
  gtk_text_buffer_serialize(*buffer0.GtkTextBuffer,*buffer1.GtkTextBuffer,format, *start, *end_,*longueur) 
EndImport


Declare editeur_ouvrir()
Declare editeur_sauver()
Declare editeur_sauver_comme()
Declare import_dat()
Declare import_dat()
Declare taille_fonte()

Define StartIter.GtkTextIter
Define EndIter.GtkTextIter


Enumeration fenetres
  #Fenetre1
  #Fenetre_Taille_Fonte
EndEnumeration

Enumeration gadgets
  #Contain1
  #Editor
  #Bou_Reset
  #Bou_Gras
  #Bou_Italic
  #Bou_Taille
  #Bou_Fermer
 
  #Taille_Fonte_Liste
  #Bou_Taille_Fonte_Retour
 
  #Menu1
  #Menu_Nouveau
  #Menu_Ouvrir
  #Menu_Sauver
  #Menu_Sauver_Comme
  #Menu_Import_Dat
  #Menu_Export_Dat
  #Menu_Fermer
  #Menu_Couper
  #Menu_Copier
  #Menu_Coller
 
EndEnumeration

Enumeration
  #PANGO_STYLE_NORMAL
  #PANGO_STYLE_OBLIQUE
  #PANGO_WEIGHT_NORMAL = 400
  #PANGO_WEIGHT_BOLD = 900
EndEnumeration

Enumeration
  #PANGO_SCALE = 1024 
EndEnumeration

Global Filename1$, Filename2$, Filename3$
Global *Buf.GtkTextBuffer


Procedure editeur_ouvrir()
  FichierParDefaut$ = ""   
  Filtre$ = "Texte (*.txt)|*.txt;*.bat|PureBasic (*.pb)|*.pb|Tous les fichiers (*.*)|*.*"
  Filtre  = 2   
  Filename1$ = OpenFileRequester("Choisissez un fichier à  charger", FichierParDefaut$, Filtre$, Filtre)
  ClearGadgetItems(#Editor)
  If ReadFile(0, Filename1$)   
    While Eof(0) = 0         
      AddGadgetItem(#Editor, -1, ReadString(0)) 
    Wend
    CloseFile(0)
  EndIf
EndProcedure

Procedure editeur_sauver()
  If Filename1$
    Filename2$ = Filename1$
  Else
    FichierParDefaut$ = ""
    Filtre$ = "Texte (*.txt)|*.txt;*.bat|PureBasic (*.pb)|*.pb|Tous les fichiers (*.*)|*.*"
    Filtre  = 2
    Filename2$ = SaveFileRequester("Choisissez un fichier à  charger", FichierParDefaut$, Filtre$, Filtre)
  EndIf
  If CreateFile(0, Filename2$,#PB_UTF8)
    For a=0 To CountGadgetItems(#Editor)
      WriteStringN(0, GetGadgetItemText(#Editor,a))
    Next
    CloseFile(0)
  EndIf
EndProcedure

Procedure editeur_sauver_comme()
  FichierParDefaut$ = ""
  Filtre$ = "Texte (*.txt)|*.txt;*.bat|PureBasic (*.pb)|*.pb|Tous les fichiers (*.*)|*.*"
  Filtre  = 2 
  Filename3$ = SaveFileRequester("Choisissez un fichier à  charger", FichierParDefaut$, Filtre$, Filtre)
  If CreateFile(0, Filename3$,#PB_UTF8)
    For a=0 To CountGadgetItems(#Editor)
      WriteStringN(0, GetGadgetItemText(#Editor,a))
    Next
  EndIf
    CloseFile(0)
EndProcedure

Procedure import_dat()
  FichierParDefaut$ = ""
  Filtre$ = "Texte (*.txt)|*.txt;*.bat|PureBasic (*.pb)|*.pb|Tous les fichiers (*.*)|*.*"
  Filtre  = 2
  Filename3$ = OpenFileRequester("Choisissez un fichier à  charger", FichierParDefaut$, Filtre$, Filtre)
  ClearGadgetItems(#Editor)
   
EndProcedure

Procedure export_dat()
  FichierParDefaut$ = ""   ; Répertoire et fichier par défaut qui seront affichés
  Filtre$ = "Texte (*.txt)|*.txt;*.bat|PureBasic (*.pb)|*.pb|Tous les fichiers (*.*)|*.*"
  Filtre  = 2    ; utiliser  par défaut le premier des trois filtres possibles
  Filename3$ = SaveFileRequester("Choisissez un fichier à  charger", FichierParDefaut$, Filtre$, Filtre)
   ;free(Data);
EndProcedure


Procedure taille_fonte()
  If OpenWindow(#Fenetre_Taille_Fonte, 500, 405, 140, 160, "Taille_fonte", #PB_Window_SystemMenu )
    ListViewGadget(#Taille_Fonte_Liste,5,10,130,110)
    StickyWindow(#Fenetre_Taille_Fonte, #True)
   
    AddGadgetItem(#Taille_Fonte_Liste, -1, "X_Small")
    AddGadgetItem(#Taille_Fonte_Liste, -1, "Medium")
    AddGadgetItem(#Taille_Fonte_Liste, -1, "Large")
    AddGadgetItem(#Taille_Fonte_Liste, -1, "X_Large")
   
    DisableGadget(#Bou_Reset, #True)
    DisableGadget(#Bou_Gras, #True)
    DisableGadget(#Bou_Italic, #True)
    DisableGadget(#Bou_Fermer, #True)
         
   ButtonGadget(#Bou_Taille_Fonte_Retour, 5, 125, 130, 25, "Retour")     
  EndIf
EndProcedure

If OpenWindow(#Fenetre1, 200, 100, 660, 465, "")
 
      ContainerGadget(#Contain1, 5,5, 650,432,#PB_Container_Flat)
                       
      EditorGadget(#Editor, 5, 5, 640, 393,#PB_Editor_WordWrap)
      SetGadgetText(#Editor, "Le Corbeau et le Renard")
      AddGadgetItem(#Editor, -1,"Maitre Corbeau sur un arbre perché,")
      AddGadgetItem(#Editor, -1, "Tenait en son bec un fromage.")
      AddGadgetItem(#Editor, -1,"Maitre Renard par l'odeur ...")
           
      Buf = gtk_text_view_get_buffer_(GadgetID(#Editor))

      ButtonGadget(#Bou_Reset, 5, 400, 100, 20, "Reset")
      ButtonGadget(#Bou_Gras, 107, 400, 100, 20, "Gras")
      ButtonGadget(#Bou_Italic, 209, 400, 100, 20, "Italic")
      ButtonGadget(#Bou_Taille, 311, 400, 100, 20, "Taille_Font")
      ButtonGadget(#Bou_Fermer, 540, 400, 100, 20, "Fermer")
     
      If CreateMenu(#Menu1,WindowID(#Fenetre1))       
        MenuTitle("Fichier")
          MenuItem(#Menu_Nouveau, "Nouveau ...")
          MenuItem(#Menu_Ouvrir, "Ouvrir ...")
          MenuItem(#Menu_Sauver, "Sauver ...")
          MenuItem(#Menu_Sauver_Comme, "Sauver comme ...")
          MenuItem(#Menu_Import_Dat, "Import data ...")
          MenuItem(#Menu_Export_Dat, "Export data ...")
          MenuItem(#Menu_Fermer, "Fermer ...")
   
        MenuTitle("Edition")
          MenuItem(#Menu_couper, "Couper")
          MenuItem(#Menu_Copier, "Copier")
          MenuItem(#Menu_coller, "Coller")
     EndIf
     
      ;gtk_text_view_set_left_margin(GadgetID(#Editor), 10)
     
      gtk_text_buffer_create_tag(Buf, "gras", "weight",#PANGO_WEIGHT_BOLD,#Null)
      gtk_text_buffer_create_tag(Buf, "italic", "style", #PANGO_STYLE_OBLIQUE,#Null)           
      gtk_text_buffer_create_tag(Buf, "X_Small", "size", 7*#PANGO_SCALE,#Null)
      gtk_text_buffer_create_tag(Buf, "Medium", "size", 10*#PANGO_SCALE,#Null)
      gtk_text_buffer_create_tag(Buf, "Large", "size", 15*#PANGO_SCALE,#Null)
      gtk_text_buffer_create_tag(Buf, "X_Large", "size", 20*#PANGO_SCALE,#Null)
     
     
      gtk_text_buffer_get_iter_at_offset_(Buf, @StartIter, 0)
      gtk_text_buffer_get_iter_at_offset_(Buf, @EndIter, 23)
     
      gtk_text_buffer_apply_tag_by_name(Buf, "gras", @StartIter, @EndIter)
      gtk_text_buffer_apply_tag_by_name(Buf, "Large", @StartIter, @EndIter)

           
     Repeat
        Event = WaitWindowEvent()
         Select Event
               Case #PB_Event_Gadget
                    Select EventGadget()
                         Case #Bou_Reset
                           gtk_text_buffer_get_selection_bounds_(Buf, @StartIter, @EndIter)
                           gtk_text_buffer_remove_all_tags_(Buf, @StartIter, @EndIter)
                         Case #Bou_Gras
                           gtk_text_buffer_get_selection_bounds_(Buf, @StartIter, @EndIter)
                           gtk_text_buffer_apply_tag_by_name(Buf, "gras", @StartIter, @EndIter)
                         Case #Bou_Italic
                           gtk_text_buffer_get_selection_bounds_(Buf, @StartIter, @EndIter)
                           gtk_text_buffer_apply_tag_by_name(Buf, "italic", @StartIter, @EndIter)
                         Case #Bou_Taille : taille_fonte()
                             
                         Case #Bou_Fermer : End
                               
                         Case #Taille_Fonte_Liste
                             Select EventType()
                               Case #PB_EventType_LeftClick
                                 gtk_text_buffer_get_selection_bounds_(Buf, @StartIter, @EndIter)
                                          gtk_text_buffer_remove_tag_by_name(Buf, "Medium", @StartIter, @EndIter)
                                          gtk_text_buffer_remove_tag_by_name(Buf, "X_Small", @StartIter, @EndIter)
                                          gtk_text_buffer_remove_tag_by_name(Buf, "Large", @StartIter, @EndIter)
                                          gtk_text_buffer_remove_tag_by_name(Buf, "X_Large", @StartIter, @EndIter)
                                          gtk_text_buffer_apply_tag_by_name(Buf, GetGadgetText(#Taille_Fonte_Liste), @StartIter, @EndIter)
                                          DisableGadget(#Bou_Reset, #False)
                                          DisableGadget(#Bou_Gras, #False)
                                          DisableGadget(#Bou_Italic, #False)
                                          DisableGadget(#Bou_Fermer, #False)
                                          CloseWindow(#Fenetre_Taille_Fonte)
                            EndSelect                               
                               Case #Bou_Taille_Fonte_Retour
                                 DisableGadget(#Bou_Reset, #False)
                                 DisableGadget(#Bou_Gras, #False)
                                 DisableGadget(#Bou_Italic, #False)
                                 DisableGadget(#Bou_Fermer, #False)
                                 CloseWindow(#Fenetre_Taille_Fonte)
                    EndSelect
                         
            Case #PB_Event_Menu
                    Select EventMenu()
                        Case #Menu_Nouveau
                          ClearGadgetItems(#Editor)                         
                          SetActiveGadget(#Editor)
                        Case #Menu_Ouvrir : editeur_ouvrir()
                        Case #Menu_Sauver : editeur_sauver()
                        Case #Menu_Sauver_Comme : editeur_sauver_comme()
                        Case #Menu_Import_Dat :
                          import_dat()
                         
                          ReadFile(0, Filename3$)
                          long_fichier = Lof(0)                         
                          length = AllocateMemory(SizeOf(Quad))                         
                          If length
                            ReadData(0, length,SizeOf(Quad))
                          EndIf                         
                          Data0 = AllocateMemory(long_fichier-(SizeOf(Quad)))
                          If Data0
                            ReadData(0, Data0,(long_fichier-(SizeOf(Quad))))
                          EndIf 
                          CloseFile(0)
                         
                          gtk_text_buffer_get_iter_at_offset_(Buf, @StartIter, 0)
                           format0 = gtk_text_buffer_register_deserialize_tagset(Buf,"default")
                           gtk_text_buffer_deserialize_set_can_create_tags(Buf,format0,TRUE)
                           gtk_text_buffer_deserialize(Buf,Buf,format0,@StartIter,Data0,length,NULL)
                          
                        Case #Menu_Export_Dat :
                          export_dat()
                          gtk_text_buffer_get_bounds(Buf,@StartIter,@EndIter)
                          format1 = gtk_text_buffer_register_serialize_tagset(Buf,"default")
                          Data1 = gtk_text_buffer_serialize(Buf,Buf,format1,@StartIter,@EndIter,@length)
                         
                          If CreateFile(0, Filename3$)
                            WriteData(0, @length, SizeOf(Quad))
                            WriteData(0, Data1, SizeOf(Quad)*length)
                            CloseFile(0)
                          Else
                            Debug "Impossible de créer le fichier!"
                          EndIf
                        Case #Menu_Fermer : End
                    EndSelect
                     
                Case #PB_Event_CloseWindow
                         Select EventWindow()
                              Case #Fenetre1 : End
                              Case #Fenetre_Taille_Fonte
                                 DisableGadget(#Bou_Reset, #False)
                          DisableGadget(#Bou_Gras, #False)
                          DisableGadget(#Bou_Italic, #False)
                          DisableGadget(#Bou_Fermer, #False)
                          CloseWindow(#Fenetre_Taille_Fonte)
               EndSelect
         EndSelect
   ForEver
EndIf

Auteur:  Paul [ Mar 19/Sep/2017 21:36 ]
Sujet du message:  Re: Un editeur ... qui demande qu'à grandir

Dans le menu ... les items "import_dat et "export_dat" permettent de sauver et de charger les textes une fois mis en forme ...
Je les sauvegarde avec l'extension ".dat" car ... ils sont en binaire.

Auteur:  JohnJohnsonSHERMAN [ Mar 19/Sep/2017 21:46 ]
Sujet du message:  Re: Un editeur ... qui demande qu'à grandir

Je suppose que les paquets GTK doivent être installés ? ;)

Je ne peux pas tester sur le moment, je réinstalle mon Linux :) Donc j'ai pas encore remis PB dessus, mais je te dirais quand j'aurais testé ;)

Au fait, bienvenue sur les forums ! :) (Il ne me semble pas t'avoir déja vu... ;) )

Auteur:  falsam [ Mar 19/Sep/2017 21:51 ]
Sujet du message:  Re: Un editeur ... qui demande qu'à grandir

Paul a écrit:
sous windows .... vous me direz.
Ca ne pourra pas fonctionner sous windows car tu fais appel à des API propres à Linux.

Auteur:  Paul [ Mar 19/Sep/2017 22:02 ]
Sujet du message:  Re: Un editeur ... qui demande qu'à grandir

Sous windows, vous n'utilisez pas Gtk ... vous travaillez avec quelle interface graphique?

Auteur:  JohnJohnsonSHERMAN [ Mar 19/Sep/2017 22:08 ]
Sujet du message:  Re: Un editeur ... qui demande qu'à grandir

@falsam : On peut tout à fait installer la lib GTK sous Windows aussi, aprés pour que ca marche, c'est un joyeux bordel, mais c'est possible.

@Paul : Tu n'as jamais utilisé Windaube? 8O En gros t'as pas le choix, l'inteface graphique fait partie intégrante du systéme qui en est dépendant. Il n'y a pas d'interface séparée du systéme comme c'est sous Linux avec GTK, Qt.... (en fait l'interface est plutot désignée par l'environnement utilisé : GNOME, KDE Plasma, Unity, Pantheon et j'en passe). D'ailleurs c'est un gros défaut de Windows a mon avis... C'est pas si compliqué de faire planter l'interface graphique, ou de la faire faire des trucs "pas prévus d'origine" ^^ Du coup aprés c'est "gênant" pour se servir du systéme ^^ *hum hum* fenêtres de taille négatives *hum hum*

Auteur:  Kwai chang caine [ Mer 20/Sep/2017 13:44 ]
Sujet du message:  Re: Un editeur ... qui demande qu'à grandir

Enfin papillon a écrit:
On peut tout à fait installer la lib GTK sous Windows
Il faut l'installer ou elle est portable ?

Auteur:  JohnJohnsonSHERMAN [ Mer 20/Sep/2017 17:12 ]
Sujet du message:  Re: Un editeur ... qui demande qu'à grandir

Il me semble que ce n'est pas portable, mais je ne sais plus... Il faudrait confirmer.

Voici un tuto sur comment l'installer : https://openclassrooms.com/courses/cree ... us-windows

Auteur:  Kwai chang caine [ Mer 20/Sep/2017 19:01 ]
Sujet du message:  Re: Un editeur ... qui demande qu'à grandir

Ah dommage...et ben...c'est rien de le dire que t'as raison !! 8O
J'ai toujours aimé le gout qu'a toujours eu CROSOFT pour la simplicité :lol:
Merci pour le lien et ta réponse 8)

Auteur:  JohnJohnsonSHERMAN [ Mer 20/Sep/2017 22:30 ]
Sujet du message:  Re: Un editeur ... qui demande qu'à grandir

De rien cher KCC, pour une fois que ma présence ici a une utilité quelconque :mrgreen:

Quand je pense que sous Linux il n'y a qu'une simple commande à entrer.... 8)
Limite c'est plus rapide d'installer un dual-boot Windows / Linux et de l'installer sur linux :lol:

Page 1 sur 1 Heures au format UTC + 1 heure
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/