Gadgets von einem ContainerGadget ins andere schieben

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Gadgets von einem ContainerGadget ins andere schieben

Beitrag 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
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Gadgets von einem ContainerGadget ins andere schieben

Beitrag 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
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Gadgets von einem ContainerGadget ins andere schieben

Beitrag von RSBasic »

Ist aber bei Windows nicht erforderlich, weils funktioniert, falls du dich fragst, ob das Problem auch unter Windows auftritt.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Antworten