Poo Wizard

Programmation d'applications complexes
Avatar de l’utilisateur
plabouro472
Messages : 40
Inscription : sam. 23/juil./2022 10:17

Poo Wizard

Message par plabouro472 »

PB : 6.12
Os : Windows 10

Bonjour membres du forum,

Poo Wizard est un outil qui aide à mettre en place la structure d’un objet (POO) en toute simplicité.

IMAGE
Image


En haut, le nom de l’objet que vous voulez créer.
Viennent ensuite 3 onglets :

Onglet Variables (ou les propriétés de l’objet) se compose de 3 champs.
1 - Nom de variables (bien évidemment)
2 - Type ( Les types prédéfini via la combo box)
Mais aussi les type personnalisés à entrer dans la zone de saisie de la combo box,
ils seront ajouté automatiquement à celle-ci.
3 - A.L.M (pour Array,List et Map via la combo box)

Onglet F.Publiques (ou les méthodes de l’objet) se compose de 2 champs.
1 - Nom des fonctions (bien évidemment)
2 - Type ( Les types prédéfini via la combo box), non personnalisable.

Onglet F.Privées (interne à l’objet) se compose de 2 champs.
1 - Nom des fonctions (bien évidemment)
2 - Type ( Les types prédéfini via la combo box), non personnalisable.

Vient ensuite les zones de saisie ou entrer les informations.
Une fois les champs renseigner, on ajoute, insert ou modifie avec les boutons.

Une sélection dans la liste permet de la supprimer ou la modifier.

L’exportation se fait au format TXT pour ne pas écraser le source. Un copier-coller pour intégrer l’objet dans votre projet et il ne vous reste plus qu’à coder les procédures misent en place et initialiser les variables.


Code remis à jour le 10/03/2025
Code remis à jour le 22/03/2025 ( Procedure Button_ExportSourceOnClick )

Code : Tout sélectionner

 

;Global	Titre						.s	= "Poo Wizard-20240123"
;Global	Titre						.s	= "Poo Wizard-20240919"
;Global	Titre						.s	= "Poo Wizard-20250223"
;Global	Titre						.s	= "Poo Wizard-20250225"
Global	Titre						.s	= "Poo Wizard-20250310"
Global	Titre						.s	= "Poo Wizard-20250322"

Global	FileName				.s	= ""
Global	CheminLoad			.s	=	GetCurrentDirectory( )
Global	CheminSave			.s	=	GetCurrentDirectory( )
Global	CheminExport		.s	=	GetCurrentDirectory( )
Global	NameObj					.s	= ""
Global	TxtA						.s	= ""
Global	TxtB						.s	= ""
Global	TxtC						.s	= ""

Global	NomTxt					.s	= ""
Global	TypTxt					.s	= ""
Global	AlmTxt					.s	= ""

Global	Tab$								= Chr( 9 )
Global	Selection				.w	= 0
Global	FinDuProgramme	.a	= #False
Global	Compteur				.a	= 0
#Fichier										= 0

; *****************
; L'interface graphique
Enumeration FormWindow
  #Win_0
EndEnumeration
Enumeration FormGadget
  #Text_MonObjet
  #String_MonObjet
  #Panel_Objet
  #ListIcon_Var
  #String_VarNom
  #Combo_VarType
  #Combo_VarAlm
  #Button_VarAjouter
  #Button_VarModifier
  #Button_VarSupprimer
  #Button_VarInserer
  #ListIcon_Publique
  #String_PubliqueNom
  #Combo_PubliqueType
  #Button_PubiqueAjouter
  #Button_PubiqueModifier
  #Button_PubiqueSupprimer
  #Button_PubiqueInserer
  #ListIcon_Privee
  #String_PriveeNom
  #Combo_PriveeType
  #Button_PriveeAjouter
  #Button_PriveeModifier
  #Button_PriveeSupprimer
  #Button_PriveeInserer
  #Button_ExportSource
  #Button_Quitter
  #Button_Charge
  #Button_Sauve
EndEnumeration

Declare Button_VarSupprimerOnClick(EventType)
Declare ListIcon_PriveeSelect(EventType)
Declare Button_VarAjouterOnClick(EventType)
Declare Button_QuitterOnClick(EventType)
Declare Button_PubiqueModifierOnClick(EventType)
Declare Button_PriveeAjouterOnClick(EventType)
Declare Button_ChargeOnClick(EventType)
Declare Button_PriveeModifierOnClick(EventType)
Declare Button_PubiqueAjouterOnClick(EventType)
Declare Button_VarInsererOnClick(EventType)
Declare ListIcon_PubliqueSelect(EventType)
Declare Button_PubliqueInsererOnClick(EventType)
Declare Button_ExportSourceOnClick(EventType)
Declare Button_PriveeInsererOnClick(EventType)
Declare Button_VarModifierOnClick(EventType)
Declare ListIcon_VarSelect(EventType)
Declare Button_PriveeSupprimerOnClick(EventType)
Declare Button_PubiqueSupprimerOnClick(EventType)
Declare Button_SauveOnClick(EventType)

Procedure OpenWin_0(x = 0, y = 0, width = 540, height = 410)
  OpenWindow(#Win_0, x, y, width, height, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  SetWindowColor(#Win_0, RGB(128,255,255))
  TextGadget(#Text_MonObjet, 10, 10, 90, 20, "Nom de l'objet : ")
  SetGadgetColor(#Text_MonObjet, #PB_Gadget_BackColor,RGB(128,255,255))
  StringGadget(#String_MonObjet, 110, 10, 200, 20, "MonObjet")
  PanelGadget(#Panel_Objet, 10, 40, 520, 330)
  AddGadgetItem(#Panel_Objet, -1, "Variables")
  ListIconGadget(#ListIcon_Var, 10, 10, 410, 250, "Nom des variables", 240, #PB_ListIcon_GridLines | #PB_ListIcon_FullRowSelect | #PB_ListIcon_AlwaysShowSelection)
  AddGadgetColumn(#ListIcon_Var, 1, "Type", 70)
  AddGadgetColumn(#ListIcon_Var, 2, "A.L.M", 70)
  SetGadgetColor(#ListIcon_Var, #PB_Gadget_BackColor,RGB(128,255,128))
  StringGadget(#String_VarNom, 10, 270, 250, 20, "")
  ComboBoxGadget(#Combo_VarType, 270, 270, 65, 20, #PB_ComboBox_Editable)
  AddGadgetItem(#Combo_VarType, -1, "")
  AddGadgetItem(#Combo_VarType, -1, ".a")
  AddGadgetItem(#Combo_VarType, -1, ".b")
  AddGadgetItem(#Combo_VarType, -1, ".c")
  AddGadgetItem(#Combo_VarType, -1, ".u")
  AddGadgetItem(#Combo_VarType, -1, ".w")
  AddGadgetItem(#Combo_VarType, -1, ".l")
  AddGadgetItem(#Combo_VarType, -1, ".i")
  AddGadgetItem(#Combo_VarType, -1, ".f")
  AddGadgetItem(#Combo_VarType, -1, ".q")
  AddGadgetItem(#Combo_VarType, -1, ".d")
  AddGadgetItem(#Combo_VarType, -1, ".s")
  AddGadgetItem(#Combo_VarType, -1, ".s{ }")
  ComboBoxGadget(#Combo_VarAlm, 340, 270, 70, 20)
  AddGadgetItem(#Combo_VarAlm, -1, "")
  AddGadgetItem(#Combo_VarAlm, -1, "Array")
  AddGadgetItem(#Combo_VarAlm, -1, "List")
  AddGadgetItem(#Combo_VarAlm, -1, "Map")
  ButtonGadget(#Button_VarAjouter, 430, 180, 80, 20, "Ajouter")
  ButtonGadget(#Button_VarModifier, 430, 210, 80, 20, "Modifier")
  ButtonGadget(#Button_VarSupprimer, 430, 240, 80, 20, "Supprimer")
  ButtonGadget(#Button_VarInserer, 430, 150, 80, 20, "Insérer")
  AddGadgetItem(#Panel_Objet, -1, "F.Publiques")
  ListIconGadget(#ListIcon_Publique, 10, 10, 410, 250, "Nom des fonctions publiques", 310, #PB_ListIcon_GridLines | #PB_ListIcon_FullRowSelect | #PB_ListIcon_AlwaysShowSelection)
  AddGadgetColumn(#ListIcon_Publique, 1, "Type", 70)
  SetGadgetColor(#ListIcon_Publique, #PB_Gadget_BackColor,RGB(255,128,255))
  StringGadget(#String_PubliqueNom, 10, 270, 320, 20, "")
  ComboBoxGadget(#Combo_PubliqueType, 340, 270, 70, 20)
  AddGadgetItem(#Combo_PubliqueType, -1, "")
  AddGadgetItem(#Combo_PubliqueType, -1, ".a")
  AddGadgetItem(#Combo_PubliqueType, -1, ".b")
  AddGadgetItem(#Combo_PubliqueType, -1, ".c")
  AddGadgetItem(#Combo_PubliqueType, -1, ".u")
  AddGadgetItem(#Combo_PubliqueType, -1, ".w")
  AddGadgetItem(#Combo_PubliqueType, -1, ".l")
  AddGadgetItem(#Combo_PubliqueType, -1, ".i")
  AddGadgetItem(#Combo_PubliqueType, -1, ".f")
  AddGadgetItem(#Combo_PubliqueType, -1, ".q")
  AddGadgetItem(#Combo_PubliqueType, -1, ".d")
  AddGadgetItem(#Combo_PubliqueType, -1, ".s")
  AddGadgetItem(#Combo_PubliqueType, -1, ".s{ }")
  ButtonGadget(#Button_PubiqueAjouter, 430, 180, 80, 20, "Ajouter")
  ButtonGadget(#Button_PubiqueModifier, 430, 210, 80, 20, "Modifier")
  ButtonGadget(#Button_PubiqueSupprimer, 430, 240, 80, 20, "Supprimer")
  ButtonGadget(#Button_PubiqueInserer, 430, 150, 80, 20, "Insérer")
  AddGadgetItem(#Panel_Objet, -1, "F.Privées")
  ListIconGadget(#ListIcon_Privee, 10, 10, 410, 250, "Nom des fonctions privées", 310, #PB_ListIcon_GridLines | #PB_ListIcon_FullRowSelect | #PB_ListIcon_AlwaysShowSelection)
  AddGadgetColumn(#ListIcon_Privee, 1, "Type", 70)
  SetGadgetColor(#ListIcon_Privee, #PB_Gadget_BackColor,RGB(128,255,255))
  StringGadget(#String_PriveeNom, 10, 270, 320, 20, "")
  ComboBoxGadget(#Combo_PriveeType, 340, 270, 70, 20)
  AddGadgetItem(#Combo_PriveeType, -1, "")
  AddGadgetItem(#Combo_PriveeType, -1, ".a")
  AddGadgetItem(#Combo_PriveeType, -1, ".b")
  AddGadgetItem(#Combo_PriveeType, -1, ".c")
  AddGadgetItem(#Combo_PriveeType, -1, ".u")
  AddGadgetItem(#Combo_PriveeType, -1, ".w")
  AddGadgetItem(#Combo_PriveeType, -1, ".l")
  AddGadgetItem(#Combo_PriveeType, -1, ".i")
  AddGadgetItem(#Combo_PriveeType, -1, ".f")
  AddGadgetItem(#Combo_PriveeType, -1, ".q")
  AddGadgetItem(#Combo_PriveeType, -1, ".d")
  AddGadgetItem(#Combo_PriveeType, -1, ".s")
  AddGadgetItem(#Combo_PriveeType, -1, ".s{ }")
  ButtonGadget(#Button_PriveeAjouter, 430, 180, 80, 20, "Ajouter")
  ButtonGadget(#Button_PriveeModifier, 430, 210, 80, 20, "Modifier")
  ButtonGadget(#Button_PriveeSupprimer, 430, 240, 80, 20, "Supprimer")
  ButtonGadget(#Button_PriveeInserer, 430, 150, 80, 20, "Insérer")
  CloseGadgetList()
  ButtonGadget(#Button_ExportSource, 330, 10, 80, 20, "Export Source")
  ButtonGadget(#Button_Quitter, 450, 10, 80, 20, "Quitter")
  ButtonGadget(#Button_Charge, 120, 380, 100, 20, "Charge")
  ButtonGadget(#Button_Sauve, 310, 380, 80, 20, "Sauve")
EndProcedure
Procedure Win_0_Events(event)
  Select event
    Case #PB_Event_CloseWindow
      ProcedureReturn #False

    Case #PB_Event_Gadget
      Select EventGadget()
        Case #ListIcon_Var
          ListIcon_VarSelect(EventType())          
        Case #Button_VarAjouter
          Button_VarAjouterOnClick(EventType())          
        Case #Button_VarModifier
          Button_VarModifierOnClick(EventType())          
        Case #Button_VarSupprimer
          Button_VarSupprimerOnClick(EventType())          
        Case #Button_VarInserer
          Button_VarInsererOnClick(EventType())          
        Case #ListIcon_Publique
          ListIcon_PubliqueSelect(EventType())          
        Case #Button_PubiqueAjouter
          Button_PubiqueAjouterOnClick(EventType())          
        Case #Button_PubiqueModifier
          Button_PubiqueModifierOnClick(EventType())          
        Case #Button_PubiqueSupprimer
          Button_PubiqueSupprimerOnClick(EventType())          
        Case #Button_PubiqueInserer
          Button_PubliqueInsererOnClick(EventType())          
        Case #ListIcon_Privee
          ListIcon_PriveeSelect(EventType())          
        Case #Button_PriveeAjouter
          Button_PriveeAjouterOnClick(EventType())          
        Case #Button_PriveeModifier
          Button_PriveeModifierOnClick(EventType())          
        Case #Button_PriveeSupprimer
          Button_PriveeSupprimerOnClick(EventType())          
        Case #Button_PriveeInserer
          Button_PriveeInsererOnClick(EventType())          
        Case #Button_ExportSource
          Button_ExportSourceOnClick(EventType())          
        Case #Button_Quitter
          Button_QuitterOnClick(EventType())          
        Case #Button_Charge
          Button_ChargeOnClick(EventType())          
        Case #Button_Sauve
          Button_SauveOnClick(EventType())          
      EndSelect
  EndSelect
  ProcedureReturn #True
EndProcedure

; *****************
; Autres procédures
Procedure	GenereInterface		( Fichier.a )
	WriteStringN( Fichier	, "Interface" + Tab$ + "New" + NameObj	)
	For i = 0 To CountGadgetItems( #ListIcon_Publique )
		NomTxt		= GetGadgetItemText( #ListIcon_Publique	, i	, 0 )
		TypTxt    = GetGadgetItemText( #ListIcon_Publique	, i	, 1 )
		If NomTxt <>""
			If TypTxt = ""
				TypTxt    = Tab$
			EndIf
			NomTxt	+ Tab$ + TypTxt + Tab$ + "( Parametres )"
			WriteStringN( Fichier	, Tab$ + NomTxt )
		EndIf
	Next
	WriteStringN( Fichier	, Tab$ + "Free" + Tab$ + "( )" )
	WriteStringN( Fichier	, "EndInterface" )
	WriteStringN( Fichier	, "" )
EndProcedure
Procedure	GenereStructure		( Fichier.a )
	; Structures parsonalisées
	For i = 0 To CountGadgetItems		( #ListIcon_Var )
		TypTxt    = GetGadgetItemText	( #ListIcon_Var	, i	, 1 )					; Lecture Type de la variable
		Select	LCase( TypTxt	)
			Case ""
			Case ".a"
			Case ".b"
			Case ".c"
			Case ".u"
			Case ".w"
			Case ".l"
			Case ".i"
			Case ".f"
			Case ".q"
			Case ".d"
			Case ".s"
			Case ".s"
			Case ".s{}"
			Default
			; **********************************************
			If Mid( TypTxt	,1	, 1	) = "."		; Maj 20250310
				TypTxt	= Right( TypTxt	, Len( TypTxt ) - 1	)
			EndIf
			;***********************************************
				
			WriteStringN( Fichier	, "Structure" + Tab$ + TypTxt	)
				WriteStringN( Fichier	, "" )
				WriteStringN( Fichier	, "" )
				WriteStringN( Fichier	, "EndStructure" )
				WriteStringN( Fichier	, "" )
		EndSelect
		
	Next
	
	WriteStringN( Fichier	, "Structure" + Tab$ + NameObj + "_Typ"	)
	WriteStringN( Fichier	, Tab$ + "*DSVT"									)
	For i = 0 To CountGadgetItems		( #ListIcon_Var )
		NomTxt		= GetGadgetItemText	( #ListIcon_Var	, i	, 0 )         ; Lecture Nom de la variable
		TypTxt    = GetGadgetItemText	( #ListIcon_Var	, i	, 1 )					; Lecture Type de la variable
		AlmTxt		= GetGadgetItemText	( #ListIcon_Var	, i	, 2 )					; Lecture Array,List,Map
		If NomTxt <>""
			If TypTxt = ""
				TypTxt    = Tab$
			EndIf
			NomTxt    = NomTxt	+ Tab$ + TypTxt
			If AlmTxt <> ""         																		; Array,List,Map
				If AlmTxt = "Array"																				; Array,List,Map
					NomTxt    = NomTxt	+ Tab$ + "( 1 )"
				Else
					NomTxt    = NomTxt	+ Tab$ + "(  )"
				EndIf
				
				NomTxt	= AlmTxt + Tab$ + NomTxt
			EndIf
			
			WriteStringN( Fichier	, Tab$ + NomTxt )
		EndIf
	Next
	WriteStringN( Fichier	, "EndStructure" )
	WriteStringN( Fichier	, "" )
EndProcedure
Procedure	GenereInit				( Fichier.a )
	WriteStringN( Fichier	, "Procedure" + Tab$ + ".i" + Tab$ + NameObj + "_Init"	+ Tab$ + "( Parametres )" )
	WriteStringN( Fichier	, Tab$ + "Protected *Object." + NameObj + "_Typ"	)
	WriteStringN( Fichier	, Tab$ + "*Object	= AllocateMemory( SizeOf( " + NameObj + "_Typ" + " ) )" )	; Allocation mémoire pour un nouveau modèle de classe.
	WriteStringN( Fichier	, Tab$ + "If *Object"										)
	WriteStringN( Fichier	, Tab$ + Tab$ + "With *Object"					)
	WriteStringN( Fichier	, Tab$ + Tab$ + Tab$ + "\DSVT	= ?" + NameObj + "_Class"									)
	For i = 0 To CountGadgetItems( #ListIcon_Var )
		NomTxt	= GetGadgetItemText	( #ListIcon_Var	, i	, 0 )		; Nom de la variable
		AlmTxt	= GetGadgetItemText		( #ListIcon_Var	, i	, 2 )		; Array,Map,List
		If NomTxt <>""																						; Si nom valide
			Select 	AlmTxt
				Case ""		; Si Array,Map,List
					WriteStringN( Fichier		, Tab$ + Tab$ + Tab$ + "\" + NomTxt + Tab$ + "= ")
				Case "Array"
					WriteStringN( Fichier		, Tab$ + Tab$ + Tab$ + "Dim"						+ Tab$ +	"\" + NomTxt	+ Tab$ + "( Dimensions )" )
				Case "List"
					WriteStringN( Fichier		, Tab$ + Tab$ + Tab$ + "New"	+ AlmTxt	+ Tab$ +	"\" + NomTxt	+ Tab$ + "( )" )
				Case "Map"
					WriteStringN( Fichier		, Tab$ + Tab$ + Tab$ + "New"	+ AlmTxt	+ Tab$ +	"\" + NomTxt	+ Tab$ + "( )" )
			EndSelect
		EndIf
	Next
	WriteStringN( Fichier	, Tab$ + Tab$ + "EndWith"				)
	WriteStringN( Fichier	, Tab$ + "EndIf"							)
	WriteStringN( Fichier	, Tab$ + "ProcedureReturn *object"	)
	WriteStringN( Fichier	, "EndProcedure"							)
	WriteStringN( Fichier	, ""											)
EndProcedure
Procedure	GenereMethode			( Fichier.a )
	; ****************************
	; ***  Procedures Privees  ***
	; ****************************
	WriteStringN			( Fichier	,	"	; Procedures Privees"	)
	For i = 0 To CountGadgetItems( #ListIcon_Privee )
		NomTxt		= GetGadgetItemText( #ListIcon_Privee	, i	, 0 )		; Nom de la variable
		TypTxt		= GetGadgetItemText( #ListIcon_Privee	, i	, 1 )		; Type de la variable
		If NomTxt <>""																							; Si nom valide
			If TypTxt = ""
				TypTxt    = Tab$
			EndIf
			WriteStringN	( Fichier	,	"Procedure" + Tab$ + TypTxt + Tab$ + NameObj + "_" + NomTxt	+ Tab$ + "( *This." + NameObj + "_Typ , Parametres )"	)
			WriteStringN	( Fichier	, Tab$ +	"With *This"	)
			WriteStringN	( Fichier	, "" )
			WriteStringN	( Fichier	, Tab$ +	"EndWith"	)
			If TypTxt <> "" And TypTxt <> Tab$
				WriteStringN( Fichier	, Tab$ +	"ProcedureReturn ; Resultat"	)
			EndIf
			WriteStringN	( Fichier	,	"EndProcedure"	)
		EndIf
	Next
	WriteStringN( Fichier	, ""	)
	; ****************************
	; *** Procedures Publiques ***
	; ****************************
	WriteStringN			( Fichier	,	"	; Procedures Publiques ( Methode )"	)
	For i = 0 To CountGadgetItems( #ListIcon_Publique )
		NomTxt		= GetGadgetItemText( #ListIcon_Publique	, i	, 0	)		; Nom de la variable
		TypTxt		= GetGadgetItemText( #ListIcon_Publique	, i	, 1	)		; Type de la variable
		If NomTxt <>""																								; Si nom valide
			If TypTxt = ""
				TypTxt    = Tab$
			EndIf
			WriteStringN	( Fichier	,	"Procedure" + Tab$ + TypTxt + Tab$ + NameObj + "_" + NomTxt	+ Tab$ + "( *This." + NameObj + "_Typ , Parametres )"	)
			WriteStringN	( Fichier	, Tab$ +	"With *This"	)
			WriteStringN	( Fichier	, "" )
			WriteStringN	( Fichier	, Tab$ +	"EndWith"	)
			If TypTxt <> "" And TypTxt <> Tab$
				WriteStringN( Fichier	, Tab$ +	"ProcedureReturn ; Resultat"	)
			EndIf
			WriteStringN	( Fichier	,	"EndProcedure"	)
		EndIf
	Next
	WriteStringN			( Fichier	,	"Procedure"   + Tab$ + Tab$ + Tab$ + NameObj + "_Free" + Tab$ + "( *This." + NameObj + "_Typ )"	)
	WriteStringN			( Fichier	, Tab$ +	"FreeMemory( *This )"	)
	WriteStringN			( Fichier	,	"EndProcedure"	)
	WriteStringN			( Fichier	,	""	)
EndProcedure
Procedure	GenereDataSection	( Fichier.a )
	WriteStringN			( Fichier	,	"DataSection"	)
	WriteStringN			( Fichier	, Tab$ + NameObj + "_Class:"	)
	For i = 0 To CountGadgetItems( #ListIcon_Publique	)
		NomTxt		= GetGadgetItemText( #ListIcon_Publique	, i	, 0	)		; Nom de la variable
		If NomTxt <>""																								; Si nom valide
			WriteStringN	( Fichier	, Tab$ +	"Data.i @" + NameObj + "_" + NomTxt	+ Tab$ + "( )"	)
		EndIf
	Next
	WriteStringN			( Fichier	, Tab$ +	"Data.i @" + NameObj + "_Free" + Tab$ + "( )"	)
	WriteStringN			( Fichier	,	"EndDataSection"	)
	WriteStringN			( Fichier	,	""	)
EndProcedure
Procedure	GenereExemple			( Fichier.a )
	WriteStringN	( Fichier	,	""									)
	WriteStringN	( Fichier	,	""									)
	WriteStringN	( Fichier	, "; ***************" )
	WriteStringN	( Fichier	, "; *** Exemple ***" )
	WriteStringN	( Fichier	, "; ***************" )
	WriteStringN	( Fichier	, "; " 								)
	WriteStringN	( Fichier	, "; MonObjet" + Tab$ + ".New" + NameObj  + Tab$ + "= " + NameObj + "_Ini" + Tab$ + "( Parametres )"	)
	For i = 0 To CountGadgetItems	( #ListIcon_Publique )
		NomTxt		= GetGadgetItemText	( #ListIcon_Publique	, i	, 0 )
		If NomTxt <> ""
			WriteStringN	( Fichier	, "; MonObjet\" + NomTxt	+ Tab$ + "( Parametres )" )
		EndIf
	Next
	WriteStringN			( Fichier	, "; MonObjet\" + "Free" + Tab$ + "( )" )
EndProcedure

Procedure AddTypToList			( _TypTxt.s	)
	; Si le type n'existe pas dans la comboBox
	; On l'ajoute à la suite
	Protected	.a	Existe		= #False
 	Protected	.a	Compteur	= CountGadgetItems( #Combo_VarType )
 		For i = 0 To  Compteur - 1
 			If _TypTxt	= GetGadgetItemText( #Combo_VarType , i )	: Existe	= #True	: EndIf
 		Next
 		If Not Existe	: AddGadgetItem( #Combo_VarType	, -1	, _TypTxt	)	: EndIf
EndProcedure

; *****************
; Les procédures d'initialisation
Procedure	InitWin_0	( )
	SetWindowTitle( #Win_0					    , Titre	) 
	SetGadgetState( #Combo_VarType		  , 0		  )
	SetGadgetState( #Combo_VarAlm			  , 0		  )
	SetGadgetState( #Combo_PubliqueType	, 0		  )
	SetGadgetState( #Combo_PriveeType	  , 0		  )
EndProcedure

; *****************
; Les procédures d'événements
; Les variables
Procedure	ListIcon_VarSelect							( EventType )
	Selection	= GetGadgetState( #ListIcon_Var )
	If Selection > -1
	SetGadgetText( #String_VarNom	, GetGadgetItemText( #ListIcon_Var	, Selection	, 0 ) )
	SetGadgetText( #Combo_VarType	, GetGadgetItemText( #ListIcon_Var	, Selection	, 1 ) )
	SetGadgetText( #Combo_VarAlm	, GetGadgetItemText( #ListIcon_Var	, Selection	, 2 ) )
	EndIf
EndProcedure
Procedure	Button_VarInsererOnClick				( EventType )
	NomTxt		= GetGadgetText( #String_VarNom	)
	TypTxt		= GetGadgetText( #Combo_VarType	)
	AlmTxt		= GetGadgetText( #Combo_VarAlm	)
	If Mid( Trim( TypTxt	)	, 1 , 1	) <> "."	: TypTxt	= "." + TypTxt	: EndIf
	If NomTxt <> ""
		Selection	= GetGadgetState( #ListIcon_Var )
		If Selection > -1
			AddGadgetItem( #ListIcon_Var , -1 , "" )	: ; Debug CountGadgetItems( #ListIcon_Var )
			For i = CountGadgetItems( #ListIcon_Var ) - 1 To Selection Step -1
				SetGadgetItemText( #ListIcon_Var , i + 1	, GetGadgetItemText( #ListIcon_Var	, i	, 0 )	, 0 )	
				SetGadgetItemText( #ListIcon_Var , i + 1	, GetGadgetItemText( #ListIcon_Var	, i	, 1 )	, 1 )	
				SetGadgetItemText( #ListIcon_Var , i + 1	, GetGadgetItemText( #ListIcon_Var	, i	, 2 )	, 2 )	
			Next
			SetGadgetItemText( #ListIcon_Var , Selection	, NomTxt	, 0 )	
			SetGadgetItemText( #ListIcon_Var , Selection	, TypTxt	, 1 )	
			SetGadgetItemText( #ListIcon_Var , Selection	, AlmTxt	, 2 )	
			AddTypToList( TypTxt	)
		EndIf
	EndIf		
EndProcedure
Procedure	Button_VarAjouterOnClick				( EventType )
	NomTxt		= GetGadgetText( #String_VarNom	)
	TypTxt		= GetGadgetText( #Combo_VarType	)
	AlmTxt		= GetGadgetText( #Combo_VarAlm	)
	If Mid( Trim( TypTxt	)	, 1 , 1	) <> "."	: TypTxt	= "." + TypTxt	: EndIf
	If NomTxt <> ""
		NomTxt	+ Chr( 10 ) + TypTxt
		NomTxt	+ Chr( 10 ) + AlmTxt
		AddGadgetItem( #ListIcon_Var , -1 , NomTxt )	: ; Debug CountGadgetItems( #ListIcon_Var )
		AddTypToList( TypTxt	)
	EndIf
EndProcedure
Procedure	Button_VarModifierOnClick				( EventType )
	Selection	= GetGadgetState( #ListIcon_Var )
	If Selection > -1
		NomTxt		= GetGadgetText( #String_VarNom	)
		TypTxt		= GetGadgetText( #Combo_VarType	)
		AlmTxt		= GetGadgetText( #Combo_VarAlm	)
		If Mid( Trim( TypTxt	)	, 1 , 1	) <> "."	: TypTxt	= "." + TypTxt	: EndIf
		If NomTxt <> ""
			SetGadgetItemText( #ListIcon_Var , Selection	, NomTxt	, 0 )	
			SetGadgetItemText( #ListIcon_Var , Selection	, TypTxt	, 1 )	
			SetGadgetItemText( #ListIcon_Var , Selection	, AlmTxt	, 2 )	
			AddTypToList( TypTxt	)
		EndIf
	EndIf
EndProcedure
Procedure	Button_VarSupprimerOnClick      ( EventType )
	Selection	= GetGadgetState( #ListIcon_Var )
	If Selection > -1
		RemoveGadgetItem( #ListIcon_Var	, Selection )
	EndIf
EndProcedure

; *****************
; Les procédures publics ( Methodes )
Procedure	ListIcon_PubliqueSelect					( EventType )
	Selection	= GetGadgetState( #ListIcon_Publique )
	If Selection > -1
	SetGadgetText( #String_PubliqueNom	, GetGadgetItemText( #ListIcon_Publique	, Selection	, 0 ) )
	SetGadgetText( #Combo_PubliqueType	, GetGadgetItemText( #ListIcon_Publique	, Selection	, 1 ) )
	EndIf
EndProcedure
Procedure	Button_PubliqueInsererOnClick		( EventType )
	NomTxt			= GetGadgetText( #String_PubliqueNom	)
	TypTxt			= GetGadgetText( #Combo_PubliqueType	)
	If NomTxt <> ""
		Selection	= GetGadgetState( #ListIcon_Publique )
		If Selection > -1
			AddGadgetItem( #ListIcon_Publique , -1 , "" )
			For i = CountGadgetItems( #ListIcon_Publique ) - 1 To Selection Step -1
				SetGadgetItemText( #ListIcon_Publique , i + 1	, GetGadgetItemText( #ListIcon_Publique	, i	, 0 )	, 0 )	
				SetGadgetItemText( #ListIcon_Publique , i + 1	, GetGadgetItemText( #ListIcon_Publique	, i	, 1 )	, 1 )	
			Next
			SetGadgetItemText( #ListIcon_Publique , Selection	, NomTxt	, 0 )	
			SetGadgetItemText( #ListIcon_Publique , Selection	, TypTxt	, 1 )	
		EndIf
	EndIf		
EndProcedure
Procedure	Button_PubiqueAjouterOnClick		( EventType )
	NomTxt			= GetGadgetText( #String_PubliqueNom	)
	TypTxt			= GetGadgetText( #Combo_PubliqueType	)
	If NomTxt <> ""
			NomTxt	+ Chr( 10 ) + TypTxt
		AddGadgetItem( #ListIcon_Publique , -1 , NomTxt )
	EndIf
EndProcedure
Procedure	Button_PubiqueModifierOnClick		( EventType )
	Selection	= GetGadgetState( #ListIcon_Publique )
	If Selection > -1
		NomTxt			= GetGadgetText( #String_PubliqueNom	)
		TypTxt			= GetGadgetText( #Combo_PubliqueType	)
		If NomTxt <> ""
			SetGadgetItemText( #ListIcon_Publique , Selection	, NomTxt	, 0 )	
			SetGadgetItemText( #ListIcon_Publique , Selection	, TypTxt	, 1 )	
		EndIf
	EndIf
EndProcedure
Procedure	Button_PubiqueSupprimerOnClick	( EventType )
	Selection	= GetGadgetState( #ListIcon_Publique )
	If Selection > -1
		RemoveGadgetItem( #ListIcon_Publique	, Selection )
	EndIf
EndProcedure

; *****************
; Les procédures privées
Procedure	ListIcon_PriveeSelect						( EventType )
	Selection	= GetGadgetState( #ListIcon_Privee )
	If Selection > -1
		SetGadgetText( #String_PriveeNom	, GetGadgetItemText( #ListIcon_Privee	, Selection	, 0 ) )
		SetGadgetText( #Combo_PriveeType	, GetGadgetItemText( #ListIcon_Privee	, Selection	, 1 ) )
	EndIf
EndProcedure
Procedure	Button_PriveeInsererOnClick			( EventType )
	NomTxt		= GetGadgetText( #String_PriveeNom	)
	TypTxt		= GetGadgetText( #Combo_PriveeType	)
	If NomTxt <> ""
		Selection	= GetGadgetState( #ListIcon_Privee )
		If Selection > -1
			AddGadgetItem( #ListIcon_Privee , -1 , "" )	: ; Debug CountGadgetItems( #ListIcon_Privee )
			For i = CountGadgetItems( #ListIcon_Privee ) - 1 To Selection Step -1
				SetGadgetItemText( #ListIcon_Privee , i + 1	, GetGadgetItemText( #ListIcon_Privee	, i	, 0 )	, 0 )	
				SetGadgetItemText( #ListIcon_Privee , i + 1	, GetGadgetItemText( #ListIcon_Privee	, i	, 1 )	, 1 )	
			Next
			SetGadgetItemText( #ListIcon_Privee , Selection	, NomTxt	, 0 )	
			SetGadgetItemText( #ListIcon_Privee , Selection	, TypTxt	, 1 )	
		EndIf
	EndIf		
EndProcedure
Procedure	Button_PriveeAjouterOnClick			( EventType )
	NomTxt			= GetGadgetText( #String_PriveeNom	)
	TypTxt		= GetGadgetText( #Combo_PriveeType	)
	If NomTxt <> ""
		If TypTxt <> ""
			NomTxt	+ Chr( 10 ) + TypTxt
		Else
			NomTxt	+ Chr( 10 ) + ""
		EndIf
		AddGadgetItem( #ListIcon_Privee , -1 , NomTxt )
	EndIf
EndProcedure
Procedure	Button_PriveeModifierOnClick		( EventType )
	Selection	= GetGadgetState( #ListIcon_Privee )
	If Selection > -1
		NomTxt		= GetGadgetText( #String_PriveeNom	)
		TypTxt		= GetGadgetText( #Combo_PriveeType	)
		If NomTxt <> ""
			SetGadgetItemText( #ListIcon_Privee , Selection	, NomTxt	, 0 )	
			SetGadgetItemText( #ListIcon_Privee , Selection	, TypTxt	, 1 )	
		EndIf
	EndIf
EndProcedure
Procedure	Button_PriveeSupprimerOnClick		( EventType )
	Selection	= GetGadgetState( #ListIcon_Privee )
	If Selection > -1
		RemoveGadgetItem( #ListIcon_Privee	, Selection )
	EndIf
EndProcedure

; *****************
Procedure Button_ExportSourceOnClick			( EventType )
	
	FileName	= GetGadgetText( #String_MonObjet )
	NameObj		= ReplaceString( FileName	, " "	, "_"	) 
	
	;FichierParDefaut$ = CheminExport + FileName + ".Txt"
	;Filtre$	= "Fichier export (*.Txt)|*.Txt"
	;Filtre	= 0    ; utiliser  par défaut le premier des trois filtres possibles
	;Fichier$	= SaveFileRequester("Fichier à exporter", FichierParDefaut$, Filtre$, Filtre)
	;If Fichier$
	;CheminExport		= GetPathPart( Fichier$	)
	; *********************************************************************
	; ** Les lignes ci-dessus sont remplacées par les 2 lignes suivantes	( 20250322 )
		CheminExport		= PathRequester("Dossier pour l'exportation.", CheminExport)	
		If CheminExport
			
		CreateFile				( #Fichier	, CheminExport + "Export-" + FileName + ".txt" )
		GenereInterface		( #Fichier )
		GenereStructure		( #Fichier )
		GenereMethode			( #Fichier )
		GenereInit				( #Fichier )	; Déplacé sous GenereMethode ( 20250322 )
		GenereDataSection	( #Fichier )
		GenereExemple			( #Fichier )
		CloseFile					( #Fichier )
		MessageRequester	( "Information" , "Le fichier à été exporté." , #PB_MessageRequester_Ok | #PB_MessageRequester_Info )
	EndIf
	
EndProcedure

; *****************
Procedure Button_ChargeOnClick						( EventType )
	FichierParDefaut$ = CheminLoad +  "*.Sav"
	Filtre$ = "Fichier de lecture (*.Sav)|*.Sav"
	Filtre = 0    ; utiliser  par défaut le premier des trois filtres possibles
	Fichier$ = OpenFileRequester("Fichier à charger", FichierParDefaut$, Filtre$, Filtre)
	If Fichier$
		CheminLoad		= GetPathPart( Fichier$	)
 		CheminSave		= CheminLoad
		CheminExport	=	CheminLoad 
		ReadFile			( #Fichier , Fichier$ )
		SetGadgetText	( #String_MonObjet , ReadString( #Fichier	, #PB_Ascii   ) )
		
		ClearGadgetItems( #ListIcon_Var )
		Compteur	= Val( ReadString( #Fichier )	)
		For i = 1 To  Compteur
			TxtA	= 	ReadString( #Fichier )
			TxtB	= 	ReadString( #Fichier )
			TxtC	= 	ReadString( #Fichier )
			AddGadgetItem( #ListIcon_Var , -1 , TxtA  + Chr( 10 ) + TxtB + Chr( 10 ) + TxtC )
		Next
		
		ClearGadgetItems( #ListIcon_Publique )
		Compteur	= Val( ReadString( #Fichier )	)
		For i = 1 To  Compteur
			TxtA	= 	ReadString( #Fichier )
			TxtB	= 	ReadString( #Fichier )
			AddGadgetItem( #ListIcon_Publique , -1 , TxtA + Chr( 10 ) + TxtB )
		Next
		
		ClearGadgetItems( #ListIcon_Privee )
		Compteur	= Val( ReadString( #Fichier )	)
		For i = 1 To  Compteur
			TxtA	= 	ReadString( #Fichier )
			TxtB	= 	ReadString( #Fichier )
			AddGadgetItem( #ListIcon_Privee , -1 , TxtA + Chr( 10 ) + TxtB )
		Next
		
		ClearGadgetItems	( #Combo_VarType )
		AddGadgetItem			( #Combo_VarType	, -1	, ""			)
		AddGadgetItem			( #Combo_VarType	, -1	, ".a"		)
		AddGadgetItem			( #Combo_VarType	, -1	, ".b"		)
		AddGadgetItem			( #Combo_VarType	, -1	, ".c"		)
		AddGadgetItem			( #Combo_VarType	, -1	, ".u"		)
		AddGadgetItem			( #Combo_VarType	, -1	, ".w"		)
		AddGadgetItem			( #Combo_VarType	, -1	, ".l"		)
		AddGadgetItem			( #Combo_VarType	, -1	, ".i"		)
		AddGadgetItem			( #Combo_VarType	, -1	, ".f"		)
		AddGadgetItem			( #Combo_VarType	, -1	, ".q"		)
		AddGadgetItem			( #Combo_VarType	, -1	, ".d"		)
		AddGadgetItem			( #Combo_VarType	, -1	, ".s"		)
		AddGadgetItem			( #Combo_VarType	, -1	, ".s{ }"	)
		Compteur	= Val( ReadString( #Fichier )	)
		If Compteur <> 0
		For i = 1 To  Compteur
			TxtA	= 	ReadString( #Fichier )
			AddGadgetItem( #Combo_VarType , -1 , TxtA )
		Next
	EndIf
	
		CloseFile( #Fichier )
	EndIf
EndProcedure
Procedure Button_SauveOnClick							( EventType )
	FichierParDefaut$ = CheminSave + GetGadgetText( #String_MonObjet ) + ".Sav"
	Filtre$	= "Fichier de sauvegarde (*.Sav)|*.Sav"
	Filtre	= 0    ; utiliser  par défaut le premier des trois filtres possibles
	Fichier$	= SaveFileRequester("Fichier à sauvegarder", FichierParDefaut$, Filtre$, Filtre)
	If Fichier$
 		CheminSave		= GetPathPart( Fichier$	)
		CheminExport	=	CheminSave 
		CreateFile( #Fichier , Fichier$ )
		WriteStringN( #Fichier , GetGadgetText( #String_MonObjet ) )
		
		Compteur	= CountGadgetItems( #ListIcon_Var )
		WriteStringN( #Fichier , Str( Compteur )	)
		For i = 0 To  Compteur - 1
			WriteStringN( #Fichier , GetGadgetItemText( #ListIcon_Var , i , 0 ) )
			WriteStringN( #Fichier , GetGadgetItemText( #ListIcon_Var , i , 1 ) )
			WriteStringN( #Fichier , GetGadgetItemText( #ListIcon_Var , i , 2 ) )
		Next
		
		Compteur	= CountGadgetItems( #ListIcon_Publique )
		WriteStringN( #Fichier , Str( Compteur )	)
		For i = 0 To  Compteur - 1
			WriteStringN( #Fichier , GetGadgetItemText( #ListIcon_Publique , i , 0 ) )
			WriteStringN( #Fichier , GetGadgetItemText( #ListIcon_Publique , i , 1 ) )
		Next
		
		Compteur	= CountGadgetItems( #ListIcon_Privee )
		WriteStringN( #Fichier , Str( Compteur )	)
		For i = 0 To  Compteur - 1
			WriteStringN( #Fichier , GetGadgetItemText( #ListIcon_Privee , i , 0 ) )
			WriteStringN( #Fichier , GetGadgetItemText( #ListIcon_Privee , i , 1 ) )
		Next
		
 		Compteur	= CountGadgetItems( #Combo_VarType )
		WriteStringN( #Fichier , Str( Compteur - 13	)	)
 		For i = 13 To  Compteur - 1
 			WriteStringN( #Fichier , GetGadgetItemText( #Combo_VarType , i ) )
 		Next
		
		CloseFile( #Fichier )
		MessageRequester( "Information" , "Le fichier à été sauvegardé." , #PB_MessageRequester_Ok | #PB_MessageRequester_Info )

	EndIf
EndProcedure
Procedure Button_QuitterOnClick						( EventType )
	FinDuProgramme	= #True
EndProcedure


; *****************
; Creation des fenetres
OpenWin_0		( )

; *****************
; Initialisation des fenetres
InitWin_0		( )


; *****************
; La boucle principale
; événementielle automtiquement
While Not FinDuProgramme
	Event = WaitWindowEvent()
	Select EventWindow()
		Case #Win_0
			Win_0_Events	(Event)
	EndSelect
	
	If Event = #PB_Event_CloseWindow
		End
	EndIf
Wend