It is currently Sun Apr 11, 2021 2:33 pm

All times are UTC + 1 hour




Post new topic Reply to topic  [ 8 posts ] 
Author Message
 Post subject: Add StatusBar, ToolBar, Menus to Dialogs
PostPosted: Mon Nov 09, 2020 8:16 pm 
Offline
Enthusiast
Enthusiast
User avatar

Joined: Mon Sep 20, 2004 7:12 am
Posts: 630
Location: Hell
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:
;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

_________________
Link dead?
Change h3x0r.ath.cx into hex0rs.coderbu.de and all will be fine.


Last edited by HeX0R on Mon Nov 16, 2020 11:05 pm, edited 2 times in total.

Top
 Profile  
Reply with quote  
 Post subject: Re: Add StatusBar, ToolBar, Menus to Dialogs
PostPosted: Mon Nov 09, 2020 8:24 pm 
Offline
Addict
Addict
User avatar

Joined: Sun Nov 05, 2006 11:42 pm
Posts: 4887
Location: Lyon - France
Waouh !!! nice code like usually :shock:
Thanks for sharing 8)

_________________
ImageThe happiness is a road...
Not a destination


Top
 Profile  
Reply with quote  
 Post subject: Re: Add StatusBar, ToolBar, Menus to Dialogs
PostPosted: Tue Nov 10, 2020 12:26 pm 
Offline
Enthusiast
Enthusiast

Joined: Fri Feb 24, 2012 10:19 am
Posts: 214
Great !

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

M.


Top
 Profile  
Reply with quote  
 Post subject: Re: Add StatusBar, ToolBar, Menus to Dialogs
PostPosted: Tue Nov 10, 2020 1:35 pm 
Offline
Enthusiast
Enthusiast
User avatar

Joined: Sun Apr 05, 2020 11:28 am
Posts: 625
Location: Pandora
Great and it even works without a magnifying glass on 4K. :o

_________________
地球上の平和


Top
 Profile  
Reply with quote  
 Post subject: Re: Add StatusBar, ToolBar, Menus to Dialogs
PostPosted: Tue Nov 10, 2020 4:27 pm 
Offline
Enthusiast
Enthusiast
User avatar

Joined: Mon Sep 20, 2004 7:12 am
Posts: 630
Location: Hell
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.


Top
 Profile  
Reply with quote  
 Post subject: Re: Add StatusBar, ToolBar, Menus to Dialogs
PostPosted: Tue Nov 10, 2020 6:49 pm 
Offline
Enthusiast
Enthusiast

Joined: Fri Feb 24, 2012 10:19 am
Posts: 214
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.


Top
 Profile  
Reply with quote  
 Post subject: Re: Add StatusBar, ToolBar, Menus to Dialogs
PostPosted: Fri Nov 13, 2020 10:36 pm 
Offline
Enthusiast
Enthusiast
User avatar

Joined: Mon Sep 20, 2004 7:12 am
Posts: 630
Location: Hell
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.


Top
 Profile  
Reply with quote  
 Post subject: Re: Add StatusBar, ToolBar, Menus to Dialogs
PostPosted: Fri Nov 13, 2020 11:21 pm 
Offline
PureBasic Team
PureBasic Team
User avatar

Joined: Fri Apr 25, 2003 6:14 pm
Posts: 1874
Location: Germany (Saxony, Deutscheinsiedel)
Looks very well, thank you :D

_________________
Bye,
...André
(PureBasicTeam::Docs & Support - PureArea.net | Order:: PureBasic | PureVisionXP)


Top
 Profile  
Reply with quote  
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 8 posts ] 

All times are UTC + 1 hour


Who is online

Users browsing this forum: No registered users and 17 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
Jump to:  

 


Powered by phpBB © 2008 phpBB Group
subSilver+ theme by Canver Software, sponsor Sanal Modifiye