Seite 2 von 2

Re: Gadgets von einem ContainerGadget ins andere schieben

Verfasst: 15.03.2014 13:20
von NicTheQuick
Okay. Es funktioniert doch nicht so wie ich mir das wünsche. Zum Beispiel kann ich das ListIconGadget nicht verschieben:

Code: Alles auswählen

EnableExplicit

Define.i main, button, splitter
Global.i container1, container2, listicon

main = OpenWindow(#PB_Any, 0, 0, 800, 600, "test")

;Erstelle einen Container
container1 = ContainerGadget(#PB_Any, 0, 0, 400, 600, #PB_Container_Raised)
	;Erstelle ListIconGadget
	listicon = ListIconGadget(#PB_Any, 5, 5, 390, 590, "Log", 100)
CloseGadgetList()
SetGadgetColor(container1, #PB_Gadget_BackColor, $ff0000)

;Erstelle einen zweiten Container
container2 = ContainerGadget(#PB_Any, 400, 0, 400, 600, #PB_Container_Raised)
CloseGadgetList()
SetGadgetColor(container2, #PB_Gadget_BackColor, $00ff00)

Procedure SetGadgetParent(GadgetID.i, ToContainerID.i)
	If (GadgetType(ToContainerID) = #PB_GadgetType_Container)
		CompilerSelect #PB_Compiler_OS
			CompilerCase #PB_OS_Linux
				Protected x.i = GadgetX(GadgetID), y.i = GadgetY(GadgetID)
				;gtk_widget_reparent_(GadgetID(GadgetID), GadgetID(ContainerID))
				g_object_ref_(GadgetID(GadgetID))
				gtk_container_remove_(gtk_widget_get_parent_(GadgetID(GadgetID)), GadgetID(GadgetID))
				gtk_container_add_(GadgetID(ToContainerID), GadgetID(GadgetID))
				g_object_unref_(GadgetID(GadgetID))
				ResizeGadget(GadgetID, x, y, #PB_Ignore, #PB_Ignore)
				
			CompilerCase #PB_OS_Windows
				SetParent_(GadgetID(GadgetID), GadgetID(ToContainerID))
				
			CompilerCase #PB_OS_MacOS
			
		CompilerEndSelect
		
		ProcedureReturn #True
	EndIf
	
	ProcedureReturn #False
EndProcedure

SetGadgetParent(listicon, container2)

Repeat
	
Until WaitWindowEvent() = #PB_Event_CloseWindow

Re: Gadgets von einem ContainerGadget ins andere schieben

Verfasst: 15.03.2014 13:31
von NicTheQuick
Okay, es scheint zu funktionieren, wenn man vorher das ListIconGadget noch in ein ContainerGadget packt und dann das ContainerGadget verschiebt.

Code: Alles auswählen

EnableExplicit

Define.i main, button, splitter
Global.i container1, container2, listicon, listiconContainer

main = OpenWindow(#PB_Any, 0, 0, 800, 600, "test")

;Erstelle einen Container
container1 = ContainerGadget(#PB_Any, 0, 0, 400, 600, #PB_Container_Raised)
	;Erstelle ListIconGadget
	listiconContainer = ContainerGadget(#PB_Any, 5, 5, 390, 590, #PB_Container_BorderLess)
		listicon = ListIconGadget(#PB_Any, 0, 0, 390, 590, "Log", 100)
	CloseGadgetList()
CloseGadgetList()
SetGadgetColor(container1, #PB_Gadget_BackColor, $ff0000)

;Erstelle einen zweiten Container
container2 = ContainerGadget(#PB_Any, 400, 0, 400, 600, #PB_Container_Raised)
CloseGadgetList()
SetGadgetColor(container2, #PB_Gadget_BackColor, $00ff00)

AddGadgetItem(listicon, -1, "Pure Power")

Procedure SetGadgetParent(GadgetID.i, ToContainerID.i)
	If (GadgetType(ToContainerID) = #PB_GadgetType_Container)
		CompilerSelect #PB_Compiler_OS
			CompilerCase #PB_OS_Linux
				Protected x.i = GadgetX(GadgetID), y.i = GadgetY(GadgetID)
				;gtk_widget_reparent_(GadgetID(GadgetID), GadgetID(ContainerID))
				g_object_ref_(GadgetID(GadgetID))
				gtk_container_remove_(gtk_widget_get_parent_(GadgetID(GadgetID)), GadgetID(GadgetID))
				gtk_container_add_(GadgetID(ToContainerID), GadgetID(GadgetID))
				g_object_unref_(GadgetID(GadgetID))
				ResizeGadget(GadgetID, x, y, #PB_Ignore, #PB_Ignore)
				
			CompilerCase #PB_OS_Windows
				SetParent_(GadgetID(GadgetID), GadgetID(ToContainerID))
				
			CompilerCase #PB_OS_MacOS
			
		CompilerEndSelect
		
		ProcedureReturn #True
	EndIf
	
	ProcedureReturn #False
EndProcedure

SetGadgetParent(listiconContainer, container2)

AddWindowTimer(main, 0, 2000)

Repeat
	Select WaitWindowEvent()
		Case #PB_Event_CloseWindow
			Break
		Case #PB_Event_Timer
			SetGadgetParent(listiconContainer, container1)
			Swap container1, container2
	EndSelect
ForEver

Re: Gadgets von einem ContainerGadget ins andere schieben

Verfasst: 15.03.2014 13:38
von RSBasic
Ist aber bei Windows nicht erforderlich, weils funktioniert, falls du dich fragst, ob das Problem auch unter Windows auftritt.