Un editeur ... qui demande qu'à grandir

Programmation d'applications complexes
Paul
Messages : 8
Inscription : jeu. 07/sept./2017 20:36

Un editeur ... qui demande qu'à grandir

Message par Paul »

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 : Tout sélectionner

;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
Dernière modification par Paul le mer. 20/sept./2017 1:35, modifié 2 fois.
Paul
Messages : 8
Inscription : jeu. 07/sept./2017 20:36

Re: Un editeur ... qui demande qu'à grandir

Message par Paul »

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.
Avatar de l’utilisateur
JohnJohnsonSHERMAN
Messages : 648
Inscription : dim. 13/déc./2015 11:05
Localisation : Allez, cherche...
Contact :

Re: Un editeur ... qui demande qu'à grandir

Message par JohnJohnsonSHERMAN »

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... ;) )
"Le bug se situe entre la chaise et le clavier"
Votre expert national en bogage et segfaults.

CPU : AMD A8 Quad core - RAM 8Gb - HDD 2To
  • Windows 10 x64 - PB 5.61 x64
  • Linux Ubuntu 16.04 LTS x64 (dual boot) - PB pas encore réinstallé
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Un editeur ... qui demande qu'à grandir

Message par falsam »

Paul a écrit :sous windows .... vous me direz.
Ca ne pourra pas fonctionner sous windows car tu fais appel à des API propres à Linux.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Paul
Messages : 8
Inscription : jeu. 07/sept./2017 20:36

Re: Un editeur ... qui demande qu'à grandir

Message par Paul »

Sous windows, vous n'utilisez pas Gtk ... vous travaillez avec quelle interface graphique?
Avatar de l’utilisateur
JohnJohnsonSHERMAN
Messages : 648
Inscription : dim. 13/déc./2015 11:05
Localisation : Allez, cherche...
Contact :

Re: Un editeur ... qui demande qu'à grandir

Message par JohnJohnsonSHERMAN »

@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*
"Le bug se situe entre la chaise et le clavier"
Votre expert national en bogage et segfaults.

CPU : AMD A8 Quad core - RAM 8Gb - HDD 2To
  • Windows 10 x64 - PB 5.61 x64
  • Linux Ubuntu 16.04 LTS x64 (dual boot) - PB pas encore réinstallé
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Un editeur ... qui demande qu'à grandir

Message par Kwai chang caine »

Enfin papillon a écrit :On peut tout à fait installer la lib GTK sous Windows
Il faut l'installer ou elle est portable ?
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
JohnJohnsonSHERMAN
Messages : 648
Inscription : dim. 13/déc./2015 11:05
Localisation : Allez, cherche...
Contact :

Re: Un editeur ... qui demande qu'à grandir

Message par JohnJohnsonSHERMAN »

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
"Le bug se situe entre la chaise et le clavier"
Votre expert national en bogage et segfaults.

CPU : AMD A8 Quad core - RAM 8Gb - HDD 2To
  • Windows 10 x64 - PB 5.61 x64
  • Linux Ubuntu 16.04 LTS x64 (dual boot) - PB pas encore réinstallé
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Un editeur ... qui demande qu'à grandir

Message par Kwai chang caine »

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)
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
JohnJohnsonSHERMAN
Messages : 648
Inscription : dim. 13/déc./2015 11:05
Localisation : Allez, cherche...
Contact :

Re: Un editeur ... qui demande qu'à grandir

Message par JohnJohnsonSHERMAN »

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:
"Le bug se situe entre la chaise et le clavier"
Votre expert national en bogage et segfaults.

CPU : AMD A8 Quad core - RAM 8Gb - HDD 2To
  • Windows 10 x64 - PB 5.61 x64
  • Linux Ubuntu 16.04 LTS x64 (dual boot) - PB pas encore réinstallé
Répondre