swap Tab on Panel Gadget ( procedure swap_onglet() )

Share your advanced PureBasic knowledge/code with the community.
User avatar
dobro
Enthusiast
Enthusiast
Posts: 766
Joined: Sun Oct 31, 2004 10:54 am
Location: France
Contact:

swap Tab on Panel Gadget ( procedure swap_onglet() )

Post by dobro »

based on a code of Gnozal and SROD
I put Procedure for the simplicities :)

; The procedure swap_onglet (), for swapping two of a same tab panel
; Useful to reorganize a Gadget Panel
; He just provided :

- The number of PanelGadget
- The starting tab number
- The number of the tab to come (ex: exchange between Tab 1 and 20)

code Sample :

Code: Select all

; *******************************************************************************
; Basé sur un code de Gnozal et de Srod

; mis en "Luniere" et en Procedure Par Dobro
; Purebasic 4.60 ( All Version )

; la procedure swap_onglet() , se charge d"echanger 2 onglet d'un meme panel
; utile pour réorganiser un Panel Gadget
; on lui fourni juste 

; - le numero du Panelgadget
; - le numerode l'onglet de depart
; - le numero de l'onglet d'arrivé (exemple echange entre l'onglet 1 et 2)
; *******************************************************************************
Enumeration
	#window
	#panel
	#bouton1
	#bouton2
	#bouton3
EndEnumeration
Declare  swap_onglet(panel_gadget,onglet_depart,onglet_arrive)



If OpenWindow(#window, 0, 0, 322, 220, "PanelGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
	; ************* dessin des gadgets *******************************************
	PanelGadget     (#panel, 8, 50, 306, 130)
	AddGadgetItem (#panel, -1, "Panel 1")
	ButtonGadget(#bouton1, 10, 15, 150, 24,"Swap onglet1 -> onglet2")
	ButtonGadget(#bouton2, 190, 15, 80, 24,"Button 2")
	AddGadgetItem (#panel, -1,"Panel 2")
	ButtonGadget(#bouton2, 190, 15, 80, 24,"Button 3")
	CloseGadgetList()
	; *****************************************************************************
	; boucle 
	Repeat
		event = WaitWindowEvent()
		Select event
			
			Case #PB_Event_Gadget         
			Select EventGadget()
				
				case #bouton1
				
				; *************
				num_window=#window
				panel_gadget=#panel
				
				onglet_depart=GetGadgetState(#panel)	 ; onglet actuel			
				
				; un swap entre l'onglet actuel et l'onglet 20 par exemple
			
				
				if onglet_arrive=1
					onglet_arrive=0
					onglet_depart=1
					else
					onglet_arrive=1
					onglet_depart=0
				endif
				
				swap_onglet(panel_gadget,onglet_depart,onglet_arrive) ; cette procedure fait le boulot de swap entre les onglets
				
				
				; ************
				
				
			EndSelect
		EndSelect
	Until event = #PB_Event_CloseWindow
EndIf



procedure swap_onglet(panel_gadget,onglet_depart,onglet_arrive)
	Structure rc
		left.l
		top.l
		right.l
		bottom.l
	EndStructure
	rc.rc
	
	tci0.TC_ITEM
	tci0\mask=#TCIF_TEXT | #TCIF_IMAGE | #TCIF_PARAM 
	Buffer1$ = Space(256)
	tci0\pszText = @Buffer1$
	tci0\cchTextMax = 256 
	;
	tci1.TC_ITEM
	tci1\mask=#TCIF_TEXT | #TCIF_IMAGE | #TCIF_PARAM 
	Buffer2$ = Space(256)
	tci1\pszText = @Buffer2$
	tci1\cchTextMax = 256 
	
	SendMessage_(GadgetID(panel_gadget), #TCM_GETITEM, onglet_depart, tci0)
	hPanel0 = tci0\lParam ;This holds the windows handle of the static control attached to tab 0.
	SendMessage_(GadgetID(panel_gadget), #TCM_GETITEM,  onglet_arrive, tci1)
	hPanel1 = tci1\lParam ;This holds the windows handle of the static control attached to tab 1.
	
	
	;Switch the panels.
	SendMessage_(GadgetID(panel_gadget), #TCM_SETITEM, onglet_depart, tci1)
	SendMessage_(GadgetID(panel_gadget), #TCM_SETITEM, onglet_arrive, tci0)
	
	
	; Force a redraw.
	Select GetGadgetState(panel_gadget)
		Case onglet_depart
		ShowWindow_(hPanel0, #SW_HIDE)
		GetClientRect_(hPanel0, @rc)
		MapWindowPoints_(hPanel0, GadgetID(panel_gadget), rc, 2)
		SetWindowPos_(hPanel1, 0, rc\left, rc\top, rc\right-rc\left, rc\bottom-rc\top, #SWP_NOZORDER | #SWP_SHOWWINDOW)
		Case onglet_arrive
		ShowWindow_(hPanel1, #SW_HIDE)
		GetClientRect_(hPanel1, @rc)
		MapWindowPoints_(hPanel1, GadgetID(panel_gadget), rc, 2)
		SetWindowPos_(hPanel0, 0, rc\left, rc\top, rc\right-rc\left, rc\bottom-rc\top, #SWP_NOZORDER | #SWP_SHOWWINDOW)
	EndSelect

	SetGadgetState(panel_gadget,onglet_arrive)
endprocedure

; 
; EPb 

Last edited by dobro on Fri Mar 30, 2012 2:01 pm, edited 4 times in total.
Image
Windows 98/7/10 - PB 5.42
■ sites : http://michel.dobro.free.fr/
User avatar
dobro
Enthusiast
Enthusiast
Posts: 766
Joined: Sun Oct 31, 2004 10:54 am
Location: France
Contact:

Re: swap Tab on Panel Gadget ( procedure swap_onglet() )

Post by dobro »

hum! I modified the code

I finally cleaned up, removed the structures that I had added, they were useless :)
and removed a parameter (num_window was unnecessary) :)
Image
Windows 98/7/10 - PB 5.42
■ sites : http://michel.dobro.free.fr/
User avatar
electrochrisso
Addict
Addict
Posts: 989
Joined: Mon May 14, 2007 2:13 am
Location: Darling River

Re: swap Tab on Panel Gadget ( procedure swap_onglet() )

Post by electrochrisso »

Handy, thanks. :)
PureBasic! Purely the best 8)
Post Reply