Basic Univers
Procedure.L Arbr(Action.L, Arbre.L, Clef.L, Racine.S)
Reaction.L = 0
ClefFinale.L = CountGadgetItems(Arbre) - 1
If Action <= 5
JeunesseClef.L = GetGadgetItemAttribute(Arbre, Clef, #PB_Tree_SubLevel)
Select Action
Case 0: ClearGadgetItemList(Arbre): Clef = - 1: JeunesseClef = 0
Case 1
For i = Clef To 0 Step - 1
Jeunesse = GetGadgetItemAttribute(Arbre, i, #PB_Tree_SubLevel)
If Jeunesse < JeunesseClef: Clef = i: i = 0
ElseIf Jeunesse = 0: Clef = - 1: i = 0: EndIf
Next i
Case 2, 3, 5
ClefFinale = CountGadgetItems(Arbre)
For i = Clef + 1 To ClefFinale
Jeunesse = GetGadgetItemAttribute(Arbre, i, #PB_Tree_SubLevel)
If Action = 5: If Jeunesse <= JeunesseClef: Clef = i - 1: i = ClefFinale: EndIf
ElseIf Action = 2: If Jeunesse > JeunesseClef: Clef = i: EndIf
If Jeunesse <= JeunesseClef: i = ClefFinale: EndIf
Else: If Jeunesse => JeunesseClef: Clef = i: EndIf
If Jeunesse < JeunesseClef: i = ClefFinale: EndIf
EndIf
Next
If Action = 5: JeunesseClef + 1: EndIf
Case 4: JeunesseClef + 1
EndSelect
AddGadgetItem(Arbre, Clef + 1, Racine, 0, JeunesseClef)
If Action = 4 Or Action = 5: SetGadgetItemState(Arbre, Clef, #PB_Tree_Expanded): EndIf
Else
Select Action
Case 8
Reaction.L = CreateFile(#PB_Any, Racine)
If Reaction <> 0
For i = 0 To ClefFinale
WriteLong(Reaction, GetGadgetItemAttribute(Arbre, i, #PB_Tree_SubLevel) )
WriteStringN(Reaction, GetGadgetItemText(Arbre, i, - 1) )
Next
EndIf
Case 9: Reaction = ReadFile(#PB_Any, Racine)
If Reaction <> 0: i.L = 0
ClearGadgetItemList(Arbre)
Repeat
Level.L = ReadLong(Reaction)
String.s = ReadString(Reaction)
AddGadgetItem(Arbre, i, String, 0, Level): i + 1
Until Eof(Reaction)
EndIf
EndSelect
If IsFile(Reaction): CloseFile(Reaction): EndIf
ProcedureReturn Reaction
EndIf
EndProcedure
Global DSt.S = ""
DSt + "GFFGFFG8F0GDF68F0GBF68F770G4F7G1F8FG070G3F77FFF8FG078G4F7F888FG07866G3F77FFFG078"
DSt + "G06G3FG378F4G06G2FG278FFF4G06G2FG178G0F4G06G2FG078G1F4G06G2FG17G1F466G5FG07G1F46"
DSt + "GFF4GFFGFFGFFGFFG6FGBCFG09CG9ECFG09GBCF99GEF99FFGB7F99GD7F99FFGB7F99GEF99FFGB9FG"
DSt + "19G9B9FGF9FF7GFF7FFGB7FFGE7FF7FFGB7FF7GFF7FFGB7FFGE7G1FGB7GFFG2FGB7FFGE7FF7FFGB7"
DSt + "FF7GFF7FFGB7FFGE7FF7FFGB7FF7GFF7FFGB9FG19G9B9FGF9F99GEF99FFGBCFG09CG9ECFG09GBCFF"
DSt + "7GFF7FFGB7FFGE7G1FGB7GFFG2FGB7FFGE7FF7FFGB7FF7GFF7FFGB7FFGE7FF7FFGB7FF7GFF7FFGB9"
DSt + "FG19G9B9FGF9F99GEF99FFGB7F99GD7F99FFGB7F99GEF99FFGBCFG09CG9ECFG09GBCGFFFFGB9G1F9"
DSt + "G9B9G1FGB9G1F99GEF99FFFGACFG19CG8ECFG19GACFF7GFF7FFFGA7FFGE7FF7FFFGA7FF7GFF7FFFG"
DSt + "A7FFGE7FF7FFFGA7FF7GFF7FFFGA7FFGE7G2FGA7GFFFFGB9G1F9G9B9G1FGB9G1F99GEF99FFFGA7F9"
DSt + "9GD7F99FFFGA7F99GEF99FFFGA7F99GD7F99FFFGA7F99GEF99FFFGA7F99GD7F99FFFGA7F99GEF99F"
DSt + "FFGACFG19CG8ECFG19GACGFFFFG20G57000FFG20G170007G00FG20G170007G00FG20G170007G00FG"
DSt + "20G170007G00FG20G170007G00FG20G57G00FGF0F000G9F000F000G1F000G1F000F000G0F07F70G0"
DSt + "F000F000G0F7FF70G0F000F000G2F70G1F000F000G2F0G2F000F000G9F000F000G2F0G2F000F000G"
DSt + "2F7G2F000F0FGB0F0FGF0GFFGFFGFFGFFG6F00GDF0FF0GFFF0F0GEF00GDF000G6F000GCF0EEEG50G"
DSt + "3F0G7E0G3F0G7E0G3F0G7E0G3F0G0EG80FFF0EEE0G7E0FFF0EE0G7E0G0F0E0G7E0G1F00G7E0G2FG9"
DSt + "0GFFG4F"
Procedure.L ValHex(a.s)
x = Asc(a): If x < 58: S = x - 48: Else: S = x - 55: EndIf: ProcedureReturn S
EndProcedure
Procedure RecupIco()
Ico.S = ""
For i = 1 To Len(DSt): A.S = Mid(DSt, i, 1)
If A = "G": N.S = Mid(DSt, i + 1, 1)
A = Mid(DSt, i + 2, 1): For j = 1 To 4 + ValHex(N): Ico + A: Next: i + 2
Else: Ico + A
EndIf
Next: Adr = 0
For ix = 0 To 7
CreateImage(ix, 20, 20): StartDrawing(ImageOutput(ix) )
For y = 0 To 19
For x = 0 To 19
Adr + 1: Pt = ValHex(Mid(Ico, Adr, 1))
If Pt & 8: coef = 255: Else: coef = 128: EndIf
R =((Pt & 4) >> 2) * coef: V =((Pt & 2) >> 1) * coef: B =((Pt & 1) ) * coef
C = RGB(R, V, B): If Pt = 7: C = RGB(192, 192, 192): EndIf
If Pt = 8: C = RGB(128, 128, 128): EndIf: Plot(x, y, C)
Next
Next
StopDrawing()
Next
EndProcedure
Procedure Enreg(Gadget)
Repeat
Repeat
Name.S = SaveFileRequester("Enregistrer sous", "", "Tout type de fichier|*.*;Base de données|*.BDD", 1)
If Name = "": Goto ExitEnreg: EndIf
If 0 Or FileSize(Name) = - 2: MessageRequester("Message", "Nom de fichier invalide !", 0): EndIf
Until FileSize(Name) <> - 2
If FileSize(Name) <> - 1
Mess = MessageRequester("Message", "Le fichier " + Name + " existe déjà ! Voulez-vous l'écraser ?", #PB_MessageRequester_YesNoCancel)
If Mess = #PB_MessageRequester_Cancel: Goto ExitEnreg: EndIf
EndIf
Until FileSize(Name) = - 1 Or Mess = #PB_MessageRequester_Yes
Arbr(8, Gadget, 0, Name)
ExitEnreg:
EndProcedure
Procedure Charge(Gadget)
Name.S = OpenFileRequester("Ouvrir", "", "Tout type de fichier|*.*;Base de données|*.BDD", 1)
If FileSize(Name) < 0
MessageRequester("Message", "Nom de fichier incorrect ou inexistant !", 0)
Else
Arbr(9, Gadget, 0, Name)
EndIf
EndProcedure
RecupIco()
OpenWindow(0, 10, 10, 28, 28 * 8, "x", #PB_Window_BorderLess)
StickyWindow(0, 1)
HideWindow(0, 1)
CreateGadgetList(WindowID(0) )
For i = 0 To 7
ButtonImageGadget(i, 0, 28 * i, 28, 28, ImageID(i) )
Next i
GadgetToolTip(0, "Détruire l'arbre")
GadgetToolTip(1, "Crée une clé 'soeur ainée'")
GadgetToolTip(2, "Crée une clé 'soeur cadette'")
GadgetToolTip(3, "Crée une clé 'soeur benjamine'")
GadgetToolTip(4, "Crée une clé 'enfant ainé'")
GadgetToolTip(5, "Crée une clé 'enfant benjamin'")
GadgetToolTip(6, "Enregistrer sous")
GadgetToolTip(7, "Ouvrir")
OpenWindow(1, 0, 0, 400, 450, "ArBr", #PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_SizeGadget)
CreateGadgetList(WindowID(1) )
Global Gadget = TreeGadget(- 1, 0, 0, 400, 450, #PB_Tree_AlwaysShowSelection)
LoadFont(0, "Verdana", 16, #PB_Font_Italic)
SetGadgetFont(Gadget, FontID(0) )
CreatePopupMenu(0)
MenuItem(0, "Renommer")
MenuItem(1, "Supprimer")
Arbr(0, Gadget, 0, "(vide)")
SetGadgetState(Gadget, 0)
ResizeWindow(0, WindowX(1) - 30, WindowY(1) + 30, #PB_Ignore, #PB_Ignore)
HideWindow(0, 0)
Global Modified.L = 0
Repeat
Ev = WaitWindowEvent()
Selected = GetGadgetState(Gadget)
Select Ev
Case #WM_RBUTTONDOWN
DisplayPopupMenu(0, WindowID(1) )
Case #PB_Event_Gadget
Gadg = EventGadget()
Select Gadg
Case 0: Nouv = 0
Arbr(0, Gadget, 0, "(vide_" + Str(Nouv) + ")"): Modified = 1
Case 1, 2, 3, 4, 5
Nouv + 1
Arbr(Gadg, Gadget, Selected, "(vide_" + Str(Nouv) + ")"): Modified = 1
Case 6
Enreg(Gadget)
Case 7
Charge(Gadget)
EndSelect
Case #PB_Event_Menu
Select EventMenu()
Case 0
SetGadgetItemText(Gadget, Selected, InputRequester("Renommer", "Entrez le nouveau nom :", GetGadgetItemText(Gadget, Selected, - 1) ), - 1 )
Modified = 1
Case 1
If MessageRequester("Confirmer", "Voulez-vous réellement supprimer " + GetGadgetItemText(Gadget, Selected, - 1) + " ?", #PB_MessageRequester_YesNo) = #PB_MessageRequester_Yes
RemoveGadgetItem(Gadget, Selected): Modified = 1
If CountGadgetItems(Gadget) = 0
Arbr(0, Gadget, 0, "(vide)")
EndIf
EndIf
EndSelect
Case #PB_Event_SizeWindow
ResizeGadget(Gadget, 0, 0, WindowWidth(1), WindowHeight(1) )
Case #PB_Event_MoveWindow
ResizeWindow(0, WindowX(1) - 30, WindowY(1) + 30, #PB_Ignore, #PB_Ignore)
Case #PB_Event_CloseWindow
If Modified
Mess = MessageRequester("Message", "Le document n'a pas été enregistré. Souhaitez-vous le faire maintenant ?", #PB_MessageRequester_YesNoCancel)
Select Mess
Case #PB_MessageRequester_Yes
Enreg(Gadget)
Case #PB_MessageRequester_No
Quit = 1
EndSelect
Else
Quit = 1
EndIf
EndSelect
Until Quit = 1