Page 1 sur 1

[5.20b] MDIgadget, containergadget et splitter

Publié : ven. 30/août/2013 8:23
par blendman
salut

Je viens de remarquer que si on utilise un MDIgadget (windows only) sur un containergadget et un splittergadget, lorsque l'on maximize la fenêtre fille, les boutons n'apparaissent plus en haut à droite.

Savez-vous comment on peut récupérer ces boutons ?
;{ constante
Enumeration ; window
#FenetrePrincipale
#FenetreFille
EndEnumeration
#toolbar= 0

Enumeration ; Menu
; files
#menu_New
#menu_Open
EndEnumeration

;}

If OpenWindow(#FenetrePrincipale, 0, 0, 400, 300, "MDIGadget & split", #PB_Window_SystemMenu|
#PB_Window_ScreenCentered | #PB_Window_SizeGadget | #PB_Window_MaximizeGadget|#PB_Window_Maximize)

;{ menu
If CreateMenu(#FenetrePrincipale, WindowID(#FenetrePrincipale))
MenuTitle("Files")
MenuItem(#menu_New, "New")
MenuItem(#menu_Open, "Open")
EndIf
;}
;{ toolbar
If CreateToolBar(#toolbar,WindowID(#FenetrePrincipale))
ToolBarStandardButton(0,#PB_ToolBarIcon_New)
ToolBarStandardButton(1,#PB_ToolBarIcon_Open)
ToolBarStandardButton(2,#PB_ToolBarIcon_Save)
ToolBarSeparator()
ToolBarStandardButton(3,#PB_ToolBarIcon_Cut)
ToolBarStandardButton(3,#PB_ToolBarIcon_Copy)
ToolBarStandardButton(3,#PB_ToolBarIcon_Paste)
y = ToolBarHeight(#toolbar)
EndIf
;}

h = WindowHeight(0)-MenuHeight() -y -5
w = WindowWidth(#FenetrePrincipale)

;{ gadget
panel = TreeGadget(#PB_Any,0,0,150,h)
AddGadgetItem(panel,0,"Truc")
scroll = ContainerGadget(#PB_Any,155,0,w-155, WindowHeight(0)-MenuHeight())
CloseGadgetList()

split = SplitterGadget(#PB_Any,0,y,w,h,panel, scroll,#PB_Splitter_Vertical )
SetGadgetState(split, 160)
;}

;{ on crée la fenêtre fille
OpenGadgetList(scroll)
MDIGadget(0, 0, 0, 0,0, 1, 2, #PB_MDI_AutoSize )
AddGadgetItem(0, #FenetreFille, "Fenêtre Fille")
TextGadget(#PB_Any,10,10,40,20,"Name : ")
ResizeWindow(#FenetreFille,#PB_Ignore, #PB_Ignore,530,315)
;}

UseGadgetList(WindowID(#FenetrePrincipale)) ; retourne à la liste de gadgets de la fenêtre principale
CloseGadgetList()

Repeat
event = WaitWindowEvent()
EventWindow = EventWindow()

Select event

Case #PB_Event_CloseWindow

Select EventWindow
Case #FenetrePrincipale
quit = 1

Default
CloseWindow(EventWindow)
EndSelect

Case #PB_Event_SizeWindow

Select EventWindow

Case #FenetreFille

EndSelect

EndSelect

Until quit = 1
EndIf
Une autre remarque :
- si je remplace le containtergadget par un scrollareagadget, lorsque je maximise, j'ai une IMA.
est-ce un bug ?


Merci bien :)

Re: [5.20b] MDIgadget, containergadget et splitter

Publié : ven. 30/août/2013 8:43
par Mesa
D'après la doc sur le mdigadget, on ne peut pas utiliser un container ni un splitter ni un panel avec un mdi. Le mdi doit être dans la fenetre principale.
"Remarques

A cause de la connexion avec les menus, il ne peut y avoir qu'un seul gadget MDI par fenêtre, cependant vous pouvez utiliser plusieurs fenêtres contenant un gadget MDI chacune. Ce gadget ne peut être créé que dans une fenêtre principale donc pas dans un ContainerGadget(), SplitterGadget() ou PanelGadget()). "
C'est dommage.

Mesa.

Re: [5.20b] MDIgadget, containergadget et splitter

Publié : ven. 30/août/2013 9:28
par blendman
Mesa a écrit :D'après la doc sur le mdigadget, on ne peut pas utiliser un container ni un splitter ni un panel avec un mdi. Le mdi doit être dans la fenetre principale.
"Remarques

A cause de la connexion avec les menus, il ne peut y avoir qu'un seul gadget MDI par fenêtre, cependant vous pouvez utiliser plusieurs fenêtres contenant un gadget MDI chacune. Ce gadget ne peut être créé que dans une fenêtre principale donc pas dans un ContainerGadget(), SplitterGadget() ou PanelGadget()). "
C'est dommage.
ah pourtant, ça marche dans mon exemple :).
Du coup, je ne vois pas à quoi ça sert si on ne peut pas créer d'autres gadgets dans la fenêtre...
Car pour un soft de dessin, de 3D, un éditeur de level, etc.. On doit bien avoir des gadgets. Il faudrait alors uniquement utilisé des gadgets qui seraient eux-mêmes des sous-fenêtres ? C'est vraiment dommage, c'est clair.

Je vais réfléchir pour voir si on ne peut pas faire un système à la main dans le cas de mon exemple ^^.
On doit pouvoir ajouter un container en haut, à droite, et celui-ci peut contenir les boutons qui réagiraient avec la fenêtre-fille.

[edit] bon, ben, je me suis fait un petit code (à revoir) qui permet de gérer des MDI avec splitters et containergadget. C'est à revoir comme code car il reste un "bug" si on ferme une fenêtre et qu'on en rouvre une, mais l'idée fonctionne bien.
Voir dans trucs et astuces : http://www.purebasic.fr/french/viewtopi ... =6&t=13905
[/edit]

Re: [5.20b] MDIgadget, containergadget et splitter

Publié : ven. 30/août/2013 14:36
par falsam
Juste une parenthèse. La fenêtre fille tremblote (flickers) quand on cherche à la redimentionner. Ce qui n'était pas le cas avec la version 4.51.