Add StatusBar, ToolBar, Menus to Dialogs

Share your advanced PureBasic knowledge/code with the community.
User avatar
HeX0R
Enthusiast
Enthusiast
Posts: 632
Joined: Mon Sep 20, 2004 7:12 am
Location: Hell

Add StatusBar, ToolBar, Menus to Dialogs

Post by HeX0R »

Here is a little trick to add stuff to the dialogs quite easy.
You will have anything in one XML, not only the gadgets, but also menus, statusbars, toolbars, even popup menus would be possible (but I was too lazy to add this).

I had to hack into PB a little bit, it would be more future proof if the PB team would just integrate it into the dialog lib.
Shouldn't be a big deal, as you can see in that tiny code, anything needed is there already.

Code: Select all

;Code: https://www.purebasic.fr/english/viewtopic.php?f=12&t=76247

DeclareModule DEX
	EnableExplicit
	Declare UsedWithDD(MenuMinID.i) ;ignore this, only needed, when included in DialogDesign0R
	Declare DefaultImage(Image.i)   ;set a default picture (in case the runtime constant is not known), to prevent compiler warnings
	Declare ParseDialogXML(XML)
	Declare InitDialog(Dialog, XML, Name.s, OpenIt = #False)
	Declare DeInitDialog(Dialog)
	Declare DeInit()
	
EndDeclareModule

Module DEX
	
	Structure DlgWindow
		*VTable
		*StaticData
		*Parent
		Gadget.i
		Folded.l
		HasTitle.l
		*ChildData
		tMargin.l
		bMargin.l
		lMargin.l
		rMargin.l
		vExpand.l
		hExpand.l
		vExpandMax.l
		hExpandMax.l
		vAlign.l
		hAlign.l
		RequestedWidth.l
		RequestedHeight.l
		Window.i
	EndStructure
	
	Structure _MYITEMS_
		MenuXML.i
		MenuID.i
		StatusBarXML.i
		StatusBarID.i
		MainXML.i
		ToolBarXML.i
		ToolBarID.i
		WindowName.s
		DialogNo.i
		tMargin.l
		bMargin.l
		*dialog.DlgWindow
	EndStructure
	
	
	Global NewList Items._MYITEMS_()
	Global NewMap Cons.l()
	Global MinID.i, CurrID.i, DefaultImage.i
	
	Procedure CreatePopup(*Node)
		
		
	EndProcedure
	
	Procedure DefaultImage(Image.i)
		If IsImage(Image)
			DefaultImage = ImageID(Image)
		EndIf
	EndProcedure
	
	Procedure UsedWithDD(MenuMinID.i) ;only needed, when used in DialogDesign0R
		CurrID = MenuMinID
		MinID  = CurrID
	EndProcedure
	
	Procedure GetVal(ID.s, PB_Any = #True)
		Protected Result, i, ID2.s, Found
		
		If ID
			ID2 = LCase(ID)
			For i = 0 To CountString(ID2, "|")
				If FindMapElement(Cons(), StringField(ID2, i + 1, "|"))
					Result = Result | Cons()
					Found  = #True
				EndIf
			Next i
			If Found = #False
				Result = GetRuntimeInteger(ID)
			EndIf
		ElseIf PB_Any
			Result = #PB_Any
		EndIf
		
		ProcedureReturn Result
	EndProcedure
	
	Procedure DoMenus(MenuID, *Node)
		Protected i, id.s, iID, iID2, text.s, image.s, event.s, evproc
		
		If XMLNodeType(*Node) <> #PB_XML_Normal
			ProcedureReturn 
		EndIf
		
		Select LCase(GetXMLNodeName(*Node))
			Case "title"
				MenuTitle(GetXMLAttribute(*Node, "text"))
				For i = 1 To XMLChildCount(*Node)
					DoMenus(MenuID, ChildXMLNode(*Node, i))
				Next i
			Case "submenu"
				image = GetXMLAttribute(*Node, "image")
				iID   = -1
				If image
					iID = GetVal(image)
				EndIf
				If IsImage(iID)
					OpenSubMenu(GetXMLAttribute(*Node, "text"), ImageID(iID))
				Else
					OpenSubMenu(GetXMLAttribute(*Node, "text"))
				EndIf
				For i = 1 To XMLChildCount(*Node)
					DoMenus(MenuID, ChildXMLNode(*Node, i))
				Next i
				CloseSubMenu()
			Case "menubar"
				MenuBar()
			Case "menuitem"
				iID2  = -1
				id    = GetXMLAttribute(*Node, "id")
				text  = GetXMLAttribute(*Node, "text")
				event = GetXMLAttribute(*Node, "onevent")
				image = GetXMLAttribute(*Node, "image")
				If CurrID
					iID = CurrID
					CurrID + 1
				Else
					iID   = GetVal(id)
				EndIf
				iID2  = GetVal(image)
				If IsImage(iID2)
					MenuItem(iID, text, ImageID(iID2))
				Else
					MenuItem(iID, text)
				EndIf
				If CurrID = 0
					If event
						evproc = GetRuntimeInteger(event)
						If evproc
							BindMenuEvent(MenuID, iID, evproc)
						EndIf
					EndIf
				EndIf
		EndSelect
	EndProcedure
	
	Procedure MenuAdd(Dialog.i)
		Protected Found, ID.s, i, *Node, Result, type.s, flags.s
		
		If IsDialog(Dialog) = 0
			ProcedureReturn
		EndIf
		
		ForEach Items()
			If Items()\DialogNo = Dialog
				Found = #True
				Break
			EndIf
		Next
		If Found = #False Or Items()\MenuXML = 0
			ProcedureReturn
		EndIf
		*Node          = MainXMLNode(Items()\MenuXML)
		ID             = GetXMLAttribute(*Node, "id")
		type           = GetXMLAttribute(*Node, "type")
		flags          = GetXMLAttribute(*Node, "flags")
		Items()\MenuID = GetVal(ID)
		If CurrID
			Items()\MenuID = CurrID
			CurrID + 1
		EndIf
		If Items()\MenuID = #PB_Any
			If LCase(type) = "imagemenu"
				Items()\MenuID = CreateImageMenu(#PB_Any, WindowID(DialogWindow(Dialog)), GetVal(flags, 0))
			Else
				Items()\MenuID = CreateMenu(#PB_Any, WindowID(DialogWindow(Dialog)))
			EndIf
		ElseIf LCase(type) = "imagemenu"
			CreateImageMenu(Items()\MenuID, WindowID(DialogWindow(Dialog)), GetVal(flags, 0))
		Else
			CreateMenu(Items()\MenuID, WindowID(DialogWindow(Dialog)))
		EndIf
		Result = Items()\MenuID
		
		For i = 1 To XMLChildCount(*Node)
			DoMenus(Result, ChildXMLNode(*Node, i))
		Next i
		
 		Items()\Dialog\bMargin + MenuHeight()
		RefreshDialog(Dialog)
		
		ProcedureReturn Result
	EndProcedure
	
	Procedure ToolBarAdd(Dialog.i)
		Protected Found, ID.s, i, *Node, *CNode, Result, text.s, image.s, iID, bID, bbID, flags.s, iflags, type.s, tooltip.s
		
		If IsDialog(Dialog) = 0
			ProcedureReturn
		EndIf
		
		ForEach Items()
			If Items()\DialogNo = Dialog
				Found = #True
				Break
			EndIf
		Next

		If Found = #False Or Items()\ToolBarXML = 0
			ProcedureReturn
		EndIf
		*Node             = MainXMLNode(Items()\ToolBarXML)
		ID                = GetXMLAttribute(*Node, "id")
		flags             = GetXMLAttribute(*Node, "flags")
		Items()\ToolBarID = GetVal(ID)

		If flags
			iflags = GetVal(flags)
			If iflags = #PB_Any
				iflags = 0
			EndIf
		EndIf
		If Items()\ToolBarID = #PB_Any Or CurrID
			Items()\ToolBarID = CreateToolBar(#PB_Any, WindowID(DialogWindow(Dialog)), iflags)
		Else
			CreateToolBar(Items()\ToolBarID, WindowID(DialogWindow(Dialog)))
		EndIf
		Result = Items()\ToolBarID
		For i = 1 To XMLChildCount(*Node)
			*CNode = ChildXMLNode(*Node, i)
			If XMLNodeType(*CNode) = #PB_XML_Normal
				ID      = GetXMLAttribute(*CNode, "id")
				text    = GetXMLAttribute(*CNode, "text")
				image   = GetXMLAttribute(*CNode, "image")
				flags   = GetXMLAttribute(*CNode, "flags")
				type    = GetXMLAttribute(*CNode, "type")
				tooltip = GetXMLAttribute(*CNode, "tooltip")
				If CurrID
					bID = CurrID
					CurrID + 1
				Else
					bID = GetVal(ID)
				EndIf
				Select GetXMLNodeName(*CNode)
					Case "toolbutton"
						If type = "standard"
							ToolBarStandardButton(bID, GetVal(image), GetVal(flags, 0), text)
						Else
							iID = GetVal(image)
							If IsImage(iID)
								iID = ImageID(iID)
							ElseIf DefaultImage
								iID = DefaultImage
							Else
								iID = 0
							EndIf
							ToolBarImageButton(bID, iID, GetVal(flags, 0), text)
						EndIf
						
						If tooltip
							ToolBarToolTip(Result, bID, tooltip)
						EndIf
						
					Case "toolseparator"
						ToolBarSeparator()
				EndSelect
			EndIf
		Next i
		
		Items()\Dialog\tMargin + ToolBarHeight(Result)
 		RefreshDialog(Dialog)
		
		ProcedureReturn Result
	EndProcedure
	
	Procedure StatusBarAdd(Dialog.i)
		Protected Found, ID.s, i, *Node, *CNode, Result, Pos, iID
		Protected width.s, text.s, flags.s, min.s, max.s, type.s, Value.s, Image.s
		
		If IsDialog(Dialog) = 0
			ProcedureReturn
		EndIf
		
		ForEach Items()
			If Items()\DialogNo = Dialog
				Found = #True
				Break
			EndIf
		Next
		If Found = #False Or Items()\StatusBarXML = 0
			ProcedureReturn
		EndIf
		*Node = MainXMLNode(Items()\StatusBarXML)
		ID    = GetXMLAttribute(*Node, "id")
		If CurrID
			Items()\StatusBarID = CurrID
			CurrID + 1
		Else
			Items()\StatusBarID = GetVal(ID)
		EndIf
		If Items()\StatusBarID = #PB_Any
			Items()\StatusBarID = CreateStatusBar(#PB_Any, WindowID(DialogWindow(Dialog)))
		Else
			CreateStatusBar(Items()\StatusBarID, WindowID(DialogWindow(Dialog)))
		EndIf
		Result = Items()\StatusBarID
		
		For i = 1 To XMLChildCount(*Node)
			*CNode = ChildXMLNode(*Node, i)
			If XMLNodeType(*CNode) = #PB_XML_Normal And GetXMLNodeName(*CNode) = "field"
				width = GetXMLAttribute(*CNode, "width")
				text  = GetXMLAttribute(*CNode, "text")
				flags = GetXMLAttribute(*CNode, "flags")
				min   = GetXMLAttribute(*CNode, "min")
				max   = GetXMLAttribute(*CNode, "max")
				type  = GetXMLAttribute(*CNode, "type")
				Value = GetXMLAttribute(*CNode, "value")
				Image = GetXMLAttribute(*CNode, "image")
				If width
					AddStatusBarField(Val(width))
				Else
					AddStatusBarField(#PB_Ignore)
				EndIf
				Select LCase(type)
					Case "progress"
						If min = "" Or max = ""
							StatusBarProgress(Result, Pos, Val(Value), GetVal(flags, 0))
						Else
							StatusBarProgress(Result, Pos, Val(Value), GetVal(flags, 0), Val(min), Val(max))
						EndIf
					Case "image"
						iID = GetVal(image)
						If IsImage(iID) = 0 And DefaultImage = 0
							;Debugger doesn't like non existing Images
						Else
							If IsImage(iID) = 0
								iID = DefaultImage
							Else
								iID = ImageID(iID)
							EndIf
							StatusBarImage(Result, Pos, iID, GetVal(flags, 0)) 
						EndIf
						
					Default
						StatusBarText(Result, Pos, text, GetVal(flags, 0))
				EndSelect
				Pos + 1
			EndIf
		Next i
		Items()\Dialog\bMargin + StatusBarHeight(Items()\StatusBarID)
		RefreshDialog(Dialog)
		
		ProcedureReturn Result
	EndProcedure
	
	Procedure MyParseXML(XML, *Node, Name.s = "")
		Protected i, a$, Found
		
		If XMLNodeType(*Node) = #PB_XML_Normal
			Select LCase(GetXMLNodeName(*Node))
				Case "dialogs"
					For i = 1 To XMLChildCount(*Node)
						MyParseXML(XML, ChildXMLNode(*Node, i))
					Next i
				Case "window"
					a$    = GetXMLAttribute(*Node, "name")
					Found = #False
					ForEach Items()
						If Items()\MainXML = XML And Items()\WindowName = a$
							Found = #True
							Break
						EndIf
					Next
					If Found = #False
						AddElement(Items())
						Items()\MainXML    = XML
						Items()\WindowName = a$
						
					EndIf
					For i = 1 To XMLChildCount(*Node)
						MyParseXML(XML, ChildXMLNode(*Node, i), a$)
					Next i
				Case "menu"
					If Name
						If Items()\MenuXML
							FreeXML(Items()\MenuXML)
						EndIf
						;store for later use
						Items()\MenuXML = CreateXML(#PB_Any)
						CopyXMLNode(*Node, RootXMLNode(Items()\MenuXML))
					EndIf
				Case "statusbar"
					If Name
						If Items()\StatusBarXML
							FreeXML(Items()\StatusBarXML)
						EndIf
						;store for later use
						Items()\StatusBarXML = CreateXML(#PB_Any)
						CopyXMLNode(*Node, RootXMLNode(Items()\StatusBarXML))
					EndIf
				Case "popup"
					CreatePopup(*Node)
				Case "toolbar"
					If Name
						If Items()\ToolBarXML
							FreeXML(Items()\ToolBarXML)
						EndIf
						;store for later use
						Items()\ToolBarXML = CreateXML(#PB_Any)
						CopyXMLNode(*Node, RootXMLNode(Items()\ToolBarXML))
					EndIf
			EndSelect
		EndIf
		
	EndProcedure
	
	Procedure ParseDialogXML(XML.i)
		Protected a$, b$, i, j
		
		If MapSize(Cons()) = 0
			Restore PBConstants
			Read.s a$
			b$ + LCase(a$)
			Repeat
				Read.s a$
				If a$
					b$ = b$ + "|" + LCase(a$)
				EndIf
			Until a$ = ""
			For i = 0 To CountString(b$, "|")
				Read.l j
				Cons(StringField(b$, i + 1, "|")) = j
			Next i
		EndIf
		
		If MinID
			CurrID = MinID
		EndIf
		
		If IsXML(XML) = 0
			ProcedureReturn
		EndIf
		
		MyParseXML(XML, MainXMLNode(XML))
		
		ProcedureReturn #True
	EndProcedure
	
	Procedure DeInitDialog(Dialog)
		
		If IsDialog(Dialog) = 0
			ProcedureReturn
		EndIf
		
		ForEach Items()
			If Items()\DialogNo = Dialog
				If Items()\MenuXML
					FreeXML(Items()\MenuXML)
				EndIf
				If Items()\StatusBarXML
					FreeXML(Items()\StatusBarXML)
				EndIf
				If Items()\ToolBarXML
					FreeXML(Items()\ToolBarXML)
				EndIf
				Items()\dialog\bMargin = Items()\bMargin
				Items()\dialog\tMargin = Items()\tMargin
				DeleteElement(Items())
				Break
			EndIf
		Next

	EndProcedure
	
	Procedure InitDialog(Dialog, XML.i, Name.s, OpenIt = #False)
		Protected *Pointer.INTEGER, Found, i, k
		
		If IsDialog(Dialog) = 0 Or IsXML(XML) = 0
			ProcedureReturn
		EndIf
		
		Found = #False
		For k = 1 To 2
			ForEach Items()
				If Items()\MainXML = XML And Items()\WindowName = Name
					Found = #True
					Break
				EndIf
			Next
			If Found = #False
				ParseDialogXML(XML)
			EndIf
		Next k
		
		If Found = #False
			ProcedureReturn
		EndIf
		
		If OpenIt
			OpenXMLDialog(Dialog, XML, Name)
		EndIf
		
		Items()\DialogNo = Dialog
		*Pointer       = DialogID(Dialog)
		CompilerIf #PB_Compiler_Processor = #PB_Processor_x64
			Items()\Dialog = *Pointer\i + $28
		CompilerElse
			Items()\Dialog = *Pointer\i + $18
		CompilerEndIf
		Items()\bMargin = Items()\Dialog\bMargin
		Items()\tMargin = Items()\Dialog\tMargin
		StatusBarAdd(Dialog)
		MenuAdd(Dialog)
		ToolBarAdd(Dialog)
		
		ProcedureReturn #True
	EndProcedure
	
	Procedure DeInit()
		
		ForEach Items()
			If Items()\MenuXML
				FreeXML(Items()\MenuXML)
			EndIf
			If Items()\StatusBarXML
				FreeXML(Items()\StatusBarXML)
			EndIf
			If Items()\ToolBarXML
				FreeXML(Items()\ToolBarXML)
			EndIf
		Next
		ClearList(Items())
		
	EndProcedure

	DataSection
		PBConstants: ;pseudo runtime constants... just add more if needed
		Data.s "#PB_ToolBar_Normal", "#PB_ToolBar_Toggle", "#PB_ToolBar_Small", "#PB_ToolBar_Large", "#PB_ToolBar_Text", "#PB_ToolBar_InlineText"
		Data.s "#PB_ToolBarIcon_New", "#PB_ToolBarIcon_Open", "#PB_ToolBarIcon_Save", "#PB_ToolBarIcon_Print", "#PB_ToolBarIcon_PrintPreview"
		Data.s "#PB_ToolBarIcon_Find", "#PB_ToolBarIcon_Replace", "#PB_ToolBarIcon_Cut", "#PB_ToolBarIcon_Copy", "#PB_ToolBarIcon_Paste"
		Data.s "#PB_ToolBarIcon_Undo", "#PB_ToolBarIcon_Redo", "#PB_ToolBarIcon_Delete", "#PB_ToolBarIcon_Properties", "#PB_ToolBarIcon_Help"
		Data.s "#PB_Menu_ModernLook", "#PB_StatusBar_Raised", "#PB_StatusBar_BorderLess", "#PB_StatusBar_Center", "#PB_StatusBar_Right"
		Data.s ""
		Data.l #PB_ToolBar_Normal, #PB_ToolBar_Toggle, #PB_ToolBar_Small, #PB_ToolBar_Large, #PB_ToolBar_Text, #PB_ToolBar_InlineText
		Data.l #PB_ToolBarIcon_New, #PB_ToolBarIcon_Open, #PB_ToolBarIcon_Save, #PB_ToolBarIcon_Print, #PB_ToolBarIcon_PrintPreview
		Data.l #PB_ToolBarIcon_Find, #PB_ToolBarIcon_Replace, #PB_ToolBarIcon_Cut, #PB_ToolBarIcon_Copy, #PB_ToolBarIcon_Paste
		Data.l #PB_ToolBarIcon_Undo, #PB_ToolBarIcon_Redo, #PB_ToolBarIcon_Delete, #PB_ToolBarIcon_Properties, #PB_ToolBarIcon_Help
		Data.l #PB_Menu_ModernLook, #PB_StatusBar_Raised, #PB_StatusBar_BorderLess, #PB_StatusBar_Center, #PB_StatusBar_Right
		Data.l 0
	EndDataSection
	
EndModule


CompilerIf #PB_Compiler_IsMainFile
	UsePNGImageDecoder()
	Runtime Enumeration
		#MyBar
		#MainMenu
		#Menu_Load
		#Menu_Save
		#Menu_Sub1
		#Image_Load
		#MainToolBar
		#Button_Properties
	EndEnumeration
	
	Runtime Procedure OnLoad()
		Debug "load clicked"
	EndProcedure

	
	Procedure.s GetXMLString()
		Protected XML$
		
		XML$ + ~"<?xml version='1.0' encoding='UTF-16'?>\n"
		XML$ + ~"\n"
		XML$ + ~"<dialogs>\n"
		XML$ + ~"  <window flags='#PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_ScreenCentered' text='Bla' minheight='450' name='window_1'>\n"
		XML$ + ~"    <vbox expand='item:1'>\n"
		XML$ + ~"      <editor name='editor_1' width='500' height='300'/>\n"
		XML$ + ~"      <button name='button' height='24' text='Hi' />\n"
		XML$ + ~"    </vbox>\n"
		XML$ + ~"    <statusbar id='#MyBar'>\n"
		XML$ + ~"      <field width='100' text='text' />\n"
		XML$ + ~"      <field width='64' image='#Image_Load' type='image' flags='#PB_StatusBar_Center'/>\n"
		XML$ + ~"      <field width='120' min='0' max='80' value='60' type='progress'/>\n"
		XML$ + ~"      <field text='more text...' />\n"
		XML$ + ~"    </statusbar>\n"
		XML$ + ~"    <menu id='#MainMenu' type='imagemenu' flags='#PB_Menu_ModernLook'>\n"
		XML$ + ~"      <title text='File'>\n"
		XML$ + ~"        <menuitem id='#Menu_Load' text='Load' onevent='OnLoad()' image='#Image_Load' />\n"
		XML$ + ~"        <menubar />\n"
		XML$ + ~"        <menuitem id='#Menu_Save' text='Save' />\n"
		XML$ + ~"        <submenu text='submenu'>\n"
		XML$ + ~"          <menuitem id='#Menu_Sub1' text='whatever' />\n"
		XML$ + ~"        </submenu>\n"
		XML$ + ~"      </title>\n"
		XML$ + ~"    </menu>\n"
		XML$ + ~"    <toolbar id='#MainToolBar' flags='#PB_ToolBar_Large'>\n"
		XML$ + ~"      <toolbutton id='#Menu_Load' image='#Image_Load' tooltip='Load something'/>\n"
		XML$ + ~"      <toolseparator />\n"
		XML$ + ~"      <toolbutton id='#Button_Properties' image='#PB_ToolBarIcon_Properties' type='standard' tooltip='open preferences' />\n"
		XML$ + ~"    </toolbar>\n"
		XML$ + ~"  </window>\n"
		XML$ + ~"</dialogs>\n"
		
		ProcedureReturn XML$
	EndProcedure
	
	a$ = GetXMLString()
	CatchImage(#Image_Load, ?Pic, ?PicEnd - ?Pic)
	If CatchXML(0, @a$, StringByteLength(a$), 0, #PB_Unicode)
; 		DEX::ParseDialogXML(0)
		
		CreateDialog(0)
		DEX::InitDialog(0, 0, "window_1", #True)
		
		SetGadgetText(DialogGadget(0, "editor_1"), ~"this is our dialog xml:\n\n" + a$)
		
		Repeat
			Select WaitWindowEvent()
				Case #PB_Event_CloseWindow
					Break
			EndSelect
		ForEver
	EndIf
	
	End
	DataSection
		Pic:
		Data.l $474E5089, $0A1A0A0D, $0D000000, $52444849, $10000000, $10000000, $00000608, $FFF31F00, $00000061, $58457419, $666F5374, $72617774, $64410065, $2065626F, $67616D49, $61655265
		Data.l $C9717964, $00003C65, $54692203, $4D587458, $6F633A4C, $64612E6D, $2E65626F, $00706D78, $00000000, $70783F3C, $656B6361, $65622074, $3D6E6967, $BFBBEF22, $64692022, $3557223D
		Data.l $704D304D, $69686543, $65727A48, $544E7A53, $636B7A63, $3F226439, $783C203E, $706D783A, $6174656D, $6C6D7820, $783A736E, $6461223D, $3A65626F, $6D3A736E, $2F617465, $3A782022
		Data.l $74706D78, $41223D6B, $65626F64, $504D5820, $726F4320, $2E352065, $30632D30, $36203136, $34312E34, $39343930, $3032202C, $312F3031, $37302F32, $3A30312D, $303A3735, $20202031
		Data.l $20202020, $203E2220, $6664723C, $4644523A, $6C6D7820, $723A736E, $223D6664, $70747468, $772F2F3A, $772E7777, $726F2E33, $39312F67, $302F3939, $32322F32, $6664722D, $6E79732D
		Data.l $2D786174, $2223736E, $723C203E, $443A6664, $72637365, $69747069, $72206E6F, $613A6664, $74756F62, $2022223D, $6E6C6D78, $6D783A73, $68223D70, $3A707474, $736E2F2F, $6F64612E
		Data.l $632E6562, $782F6D6F, $312F7061, $222F302E, $6C6D7820, $783A736E, $4D4D706D, $7468223D, $2F3A7074, $2E736E2F, $626F6461, $6F632E65, $61782F6D, $2E312F70, $6D6D2F30, $7820222F
		Data.l $736E6C6D, $5274733A, $223D6665, $70747468, $6E2F2F3A, $64612E73, $2E65626F, $2F6D6F63, $2F706178, $2F302E31, $70795473, $65522F65, $72756F73, $65526563, $20222366, $3A706D78
		Data.l $61657243, $54726F74, $3D6C6F6F, $6F644122, $50206562, $6F746F68, $706F6873, $35534320, $5720312E, $6F646E69, $20227377, $4D706D78, $6E493A4D, $6E617473, $44496563, $6D78223D
		Data.l $69692E70, $36443A64, $38433331, $37414634, $31314233, $46423145, $44393042, $38304239, $31433644, $20224232, $4D706D78, $6F443A4D, $656D7563, $4449746E, $6D78223D, $69642E70
		Data.l $36443A64, $38433331, $37413035, $31314233, $46423145, $44393042, $38304239, $31433644, $3E224232, $6D783C20, $3A4D4D70, $69726544, $46646576, $206D6F72, $65527473, $6E693A66
		Data.l $6E617473, $44496563, $6D78223D, $69692E70, $36443A64, $38433331, $37414434, $31314233, $46423145, $44393042, $38304239, $31433644, $20224232, $65527473, $6F643A66, $656D7563
		Data.l $4449746E, $6D78223D, $69642E70, $36443A64, $38433331, $37414534, $31314233, $46423145, $44393042, $38304239, $31433644, $2F224232, $2F3C203E, $3A666472, $63736544, $74706972
		Data.l $3E6E6F69, $722F3C20, $523A6664, $203E4644, $3A782F3C, $6D706D78, $3E617465, $783F3C20, $6B636170, $65207465, $223D646E, $3E3F2272, $FC13A08C, $1D020000, $54414449, $937CDA78
		Data.l $51136BCF, $EFBFC710, $CD49366D, $26926E8F, $AD15A69A, $D2C5EB06, $1E22F45C, $82882A84, $45E4F278, $F41FC441, $37AAF09F, $783D1E2D, $27A2F4B2, $429178A5, $562A343C, $45628A90
		Data.l $87E6D14A, $F7DDD69A, $3776F39E, $1D4D764B, $3784DE18, $F7C999F3, $14A532CD, $307DBDB4, $B2A4A9B3, $94801294, $4A024A50, $718C089F, $378B1E0E, $9E7D5C8F, $7AC5D5EB, $4B084A97
		Data.l $8F48DB3A, $DF6E421E, $93A33234, $097B8B30, $1AE41706, $97731A01, $0059F42D, $4C1FCE90, $CFC79F5D, $7D688B0F, $FAB58379, $30B76002, $548F3BBC, $94AB0321, $837AAC45, $01031258
		Data.l $4CF70A4A, $8F481297, $F8E5405F, $0DAD3825, $D1D6AE6C, $ED0EFAFC, $A898CF8D, $03B61CEA, $75885F40, $3A9D7688, $24F1412F, $C50C6258, $6B1441EA, $EEEAF1A7, $A6C04C45, $F78030FA
		Data.l $AE804449, $C52664C7, $159D90DB, $294FEBD8, $1B1CFC76, $54030B51, $17753BD7, $F0CC5746, $BF78E9DC, $DD47AD95, $9327A001, $322323BF, $35C035CF, $34084A9A, $F6FC9DEE, $C2C0BF9F
		Data.l $A01F3142, $A8D85528, $27A5995D, $060CF677, $2A2209E8, $E8BA3D33, $57772278, $F68B6728, $00D20D4C, $A22C06AE, $C65431B2, $C8F317C7, $E2A5A7EF, $A13A2271, $4D7FBC16, $0DC0B6C1
		Data.l $6170C7EE, $B1FF948C, $66071DF6, $21F1004E, $9FF73F72, $F9BC603D, $65A5F169, $96C88B95, $18CC30F3, $3A74FFA4, $D8F87E5E, $A03D017D, $683B46E2, $A828FBDC, $ADDCD4DB, $4AC9D9DA
		Data.l $69264CEA, $232AB31C, $C6E71AEE, $C9FAF046, $AC2CEE12, $13642F9E, $6E7192BB, $7EF47EDE, $511AEA99, $E4F23E80, $FDECF205, $8753B59B, $ACE7D3C7, $82547994, $3DAFA7B5, $7C49692B
		Data.l $75057F95, $05BF4011, $8ABD7230, $7EDE908D, $06015FDD, $C7E29800, $F4DA266E, $0000001E, $4E454900, $6042AE44
		Data.b $82
		PicEnd:
	EndDataSection
	
CompilerEndIf
Last edited by HeX0R on Mon Nov 16, 2020 11:05 pm, edited 2 times in total.
Link dead?
Change h3x0r.ath.cx into hex0rs.coderbu.de and all will be fine.
User avatar
Kwai chang caine
Addict
Addict
Posts: 4887
Joined: Sun Nov 05, 2006 11:42 pm
Location: Lyon - France

Re: Add StatusBar, ToolBar, Menus to Dialogs

Post by Kwai chang caine »

Waouh !!! nice code like usually :shock:
Thanks for sharing 8)
ImageThe happiness is a road...
Not a destination
Mesa
Enthusiast
Enthusiast
Posts: 215
Joined: Fri Feb 24, 2012 10:19 am

Re: Add StatusBar, ToolBar, Menus to Dialogs

Post by Mesa »

Great !

Do you think that it's possible to create a plugin for Dialogdesign0r easily ?

M.
User avatar
Saki
Enthusiast
Enthusiast
Posts: 638
Joined: Sun Apr 05, 2020 11:28 am
Location: Pandora

Re: Add StatusBar, ToolBar, Menus to Dialogs

Post by Saki »

Great and it even works without a magnifying glass on 4K. :o
地球上の平和
User avatar
HeX0R
Enthusiast
Enthusiast
Posts: 632
Joined: Mon Sep 20, 2004 7:12 am
Location: Hell

Re: Add StatusBar, ToolBar, Menus to Dialogs

Post by HeX0R »

Mesa wrote:Great !

Do you think that it's possible to create a plugin for Dialogdesign0r easily ?

M.
I had the idea to integrate it into the base of DD, but I'm unsure if it is really a good idea.
Maybe the PB team will add something like this in future, but with different node names, or even worse, with a complete different approach.

I didn't think about doing it in a plugin, it will be most likely not possible without improving the addon system.
Link dead?
Change h3x0r.ath.cx into hex0rs.coderbu.de and all will be fine.
Mesa
Enthusiast
Enthusiast
Posts: 215
Joined: Fri Feb 24, 2012 10:19 am

Re: Add StatusBar, ToolBar, Menus to Dialogs

Post by Mesa »

You can ask Fred for that.
But I'm pretty sure fred would have done it from the start, so you can put it in the designer, it's very useful and I think it will be a long time before that happens.

M.
User avatar
HeX0R
Enthusiast
Enthusiast
Posts: 632
Joined: Mon Sep 20, 2004 7:12 am
Location: Hell

Re: Add StatusBar, ToolBar, Menus to Dialogs

Post by HeX0R »

Some small changes
  • Changed barbutton into toolbutton and barseparator into toolseparator.
  • Changed a few things to be able to use it in the DialogDesign0r.
  • No more need to call ParseDialogXML(), it will be called in InitDialog() in case the XML is not yet known.
Integration into DD looks good so far, but there is still some more work to do.
Link dead?
Change h3x0r.ath.cx into hex0rs.coderbu.de and all will be fine.
User avatar
Andre
PureBasic Team
PureBasic Team
Posts: 1875
Joined: Fri Apr 25, 2003 6:14 pm
Location: Germany (Saxony, Deutscheinsiedel)
Contact:

Re: Add StatusBar, ToolBar, Menus to Dialogs

Post by Andre »

Looks very well, thank you :D
Bye,
...André
(PureBasicTeam::Docs & Support - PureArea.net | Order:: PureBasic | PureVisionXP)
Post Reply