[5.21b3] Still messing up complex menu structures ...
Posted: Mon Nov 18, 2013 11:20 am
In my project with a more or less complex menu structure the generated form code always is inconsistent in terms of sub-level handling due to a missing CloseSubMenu().
The following code is the content of the regarding .pbf file as it should be. If you open it in form mode and re-generate the code you'll see that the menu structure gets messed up. And if you diff those two states you'll see the reason why.
Note: Replace those images with any small PNG.
Cheers,
Didel.
The following code is the content of the regarding .pbf file as it should be. If you open it in form mode and re-generate the code you'll see that the menu structure gets messed up. And if you diff those two states you'll see the reason why.
Note: Replace those images with any small PNG.
Code: Select all
; Form Designer for Purebasic - 5.21
; Warning: this file uses a strict syntax, if you edit it, make sure to respect the Form Designer limitation or it won't be opened again.
Global Window_Main
Enumeration FormGadget
#Text_Main_ProcmonFile
#String_Main_ProcmonFile
#Button_Main_ProcmonFile
#Text_Main_WindumpFile
#String_Main_WindumpFile
#Button_Main_WindumpFile
#Canvas_Main_Graph
#Button_Main_Refresh
#Checkbox_Main_ModeNoPaths
#Checkbox_Main_ModeCompressed
#Text_Main_Launcher
#String_Main_Launcher
#Button_Main_Launcher
#Checkbox_Main_ModeDumb
#Canvas_Main_AnimationFrames
#Button_Main_AnimationFirst
#Button_Main_RenderingOptions
#Button_Main_AnimationPrevious
#Button_Main_AnimationPlay
#Button_Main_AnimationStop
#Button_Main_AnimationNext
#Button_Main_AnimationLast
#Image_Main_CertLogo
#Button_Main_AnimationShow
#Combo_Main_AnimationFPS
#Button_Main_AnimationFramesUnique
#Button_Main_AnimationFramesAll
#Button_Main_AnimationFramesAllRle
EndEnumeration
Enumeration FormMenu
#MenuItem_New
#MenuItem_Open
#MenuItem_Save
#MenuItem_SaveAs
#MenuItem_Export
#MenuItem_Exit
#MenuItem_Find
#MenuItem_ResetFind
#MenuItem_Filters
#MenuItem_Colors
#MenuItem_Options
#MenuItem_Refresh
#MenuItem_TimelineFramesModeAll
#MenuItem_TimelineFramesModeAllRle
#MenuItem_TimelineFramesModeUnique
#MenuItem_TimelineViewCurrentFrame
#MenuItem_TimelineNextFrame
#MenuItem_TimelinePreviousFrame
#MenuItem_TimelineFirstFrame
#MenuItem_TimelineLastFrame
#MenuItem_TimelinePlayStopAnimation
#MenuItem_ManageSessionFilters4Servers
#MenuItem_ManageSessionFilters4Registry
#MenuItem_ManageSessionFilters4Files
#MenuItem_ManageSessionFilters4SFn2LFn
#MenuItem_ManageGlobalFilters4Servers
#MenuItem_ManageGlobalFilters4Registry
#MenuItem_ManageGlobalFilters4Files
#MenuItem_ManageGlobalFilters4SFn2LFn
#MenuItem_PluginsManager
#MenuItem_Plugin1
#MenuItem_Plugin2
#MenuItem_Plugin3
#MenuItem_Plugin4
#MenuItem_Plugin5
#MenuItem_Plugin6
#MenuItem_Plugin7
#MenuItem_Plugin8
#MenuItem_Plugin9
#MenuItem_Legend
#MenuItem_QuickHelp
#MenuItem_CheckForUpdate
#MenuItem_Donate
#MenuItem_Credits
#MenuItem_About
EndEnumeration
Enumeration FormImage
#Img_Window_Main_0
#Img_Window_Main_1
#Img_Window_Main_2
#Img_Window_Main_3
#Img_Window_Main_4
#Img_Window_Main_5
#Img_Window_Main_6
#Img_Window_Main_7
#Img_Window_Main_8
#Img_Window_Main_9
#Img_Window_Main_10
#Img_Window_Main_11
EndEnumeration
UsePNGImageDecoder()
CatchImage(#Img_Window_Main_0,?Img_Window_Main_0)
CatchImage(#Img_Window_Main_1,?Img_Window_Main_1)
CatchImage(#Img_Window_Main_2,?Img_Window_Main_2)
CatchImage(#Img_Window_Main_3,?Img_Window_Main_3)
CatchImage(#Img_Window_Main_4,?Img_Window_Main_4)
CatchImage(#Img_Window_Main_5,?Img_Window_Main_5)
CatchImage(#Img_Window_Main_6,?Img_Window_Main_6)
CatchImage(#Img_Window_Main_7,?Img_Window_Main_7)
CatchImage(#Img_Window_Main_8,?Img_Window_Main_8)
CatchImage(#Img_Window_Main_9,?Img_Window_Main_9)
CatchImage(#Img_Window_Main_10,?Img_Window_Main_10)
CatchImage(#Img_Window_Main_11,?Img_Window_Main_11)
Procedure OpenWindow_Main(x = 0, y = 0, width = 800, height = 600)
Window_Main = OpenWindow(#PB_Any, x, y, width, height, #APP_Name, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_Invisible | #PB_Window_TitleBar | #PB_Window_ScreenCentered)
SetWindowColor(Window_Main, RGB(255,255,255))
AddKeyboardShortcut(Window_Main, #PB_Shortcut_Control | #PB_Shortcut_N, #MenuItem_New)
AddKeyboardShortcut(Window_Main, #PB_Shortcut_Control | #PB_Shortcut_O, #MenuItem_Open)
AddKeyboardShortcut(Window_Main, #PB_Shortcut_Control | #PB_Shortcut_S, #MenuItem_Save)
AddKeyboardShortcut(Window_Main, #PB_Shortcut_Control | #PB_Shortcut_F, #MenuItem_Find)
AddKeyboardShortcut(Window_Main, #PB_Shortcut_Escape, #MenuItem_ResetFind)
AddKeyboardShortcut(Window_Main, #PB_Shortcut_F5, #MenuItem_Refresh)
AddKeyboardShortcut(Window_Main, #PB_Shortcut_Return, #MenuItem_TimelineViewCurrentFrame)
AddKeyboardShortcut(Window_Main, #PB_Shortcut_Right, #MenuItem_TimelineNextFrame)
AddKeyboardShortcut(Window_Main, #PB_Shortcut_Left, #MenuItem_TimelinePreviousFrame)
AddKeyboardShortcut(Window_Main, #PB_Shortcut_Home, #MenuItem_TimelineFirstFrame)
AddKeyboardShortcut(Window_Main, #PB_Shortcut_End, #MenuItem_TimelineLastFrame)
AddKeyboardShortcut(Window_Main, #PB_Shortcut_Space, #MenuItem_TimelinePlayStopAnimation)
AddKeyboardShortcut(Window_Main, #PB_Shortcut_F1, #MenuItem_Legend)
CreateStatusBar(0, WindowID(Window_Main))
AddStatusBarField(50)
StatusBarText(0, 0, "Status:", #PB_StatusBar_BorderLess)
AddStatusBarField(100)
StatusBarText(0, 1, "OK")
AddStatusBarField(50)
StatusBarText(0, 2, "Zoom:", #PB_StatusBar_BorderLess)
AddStatusBarField(50)
StatusBarText(0, 3, "100%")
AddStatusBarField(50)
StatusBarText(0, 4, "Frame:", #PB_StatusBar_BorderLess)
AddStatusBarField(120)
StatusBarText(0, 5, "N/A")
AddStatusBarField(50)
StatusBarText(0, 6, " Time:", #PB_StatusBar_BorderLess)
AddStatusBarField(120)
StatusBarText(0, 7, "N/A")
AddStatusBarField(2000)
StatusBarText(0, 8, " ", #PB_StatusBar_BorderLess)
CreateMenu(0, WindowID(Window_Main))
MenuTitle("File")
MenuItem(#MenuItem_New, "New ..." + Chr(9) + "Ctrl+N")
MenuItem(#MenuItem_Open, "Open ..." + Chr(9) + "Ctrl+O")
MenuItem(#MenuItem_Save, "Save" + Chr(9) + "Ctrl+S")
MenuItem(#MenuItem_SaveAs, "Save as ...")
MenuItem(#MenuItem_Export, "Export ...")
MenuBar()
MenuItem(#MenuItem_Exit, "Exit")
MenuTitle("Edit")
MenuItem(#MenuItem_Find, "Find ..." + Chr(9) + "Ctrl+F")
MenuItem(#MenuItem_ResetFind, "Reset find" + Chr(9) + "Escape")
MenuBar()
OpenSubMenu("Configuration")
MenuItem(#MenuItem_Filters, "Filters ...")
MenuItem(#MenuItem_Colors, "Colors ...")
CloseSubMenu()
MenuItem(#MenuItem_Options, "Options ...")
MenuTitle("View")
MenuItem(#MenuItem_Refresh, "Refresh" + Chr(9) + "F5")
OpenSubMenu("Timeline")
OpenSubMenu("Frames-Mode")
MenuItem(#MenuItem_TimelineFramesModeAll, "All events")
MenuItem(#MenuItem_TimelineFramesModeAllRle, "All events (RLE)")
MenuItem(#MenuItem_TimelineFramesModeUnique, "Unique events")
CloseSubMenu()
MenuItem(#MenuItem_TimelineViewCurrentFrame, "View current frame" + Chr(9) + "Return")
MenuBar()
MenuItem(#MenuItem_TimelineNextFrame, "Next frame" + Chr(9) + "Right")
MenuItem(#MenuItem_TimelinePreviousFrame, "Previous frame" + Chr(9) + "Left")
MenuItem(#MenuItem_TimelineFirstFrame, "First frame" + Chr(9) + "Home")
MenuItem(#MenuItem_TimelineLastFrame, "Last frame" + Chr(9) + "End")
MenuBar()
MenuItem(#MenuItem_TimelinePlayStopAnimation, "Play/Stop animation" + Chr(9) + "Space")
CloseSubMenu()
MenuTitle("Filters")
OpenSubMenu("Session")
MenuItem(#MenuItem_ManageSessionFilters4Servers, "Servers ...")
MenuItem(#MenuItem_ManageSessionFilters4Registry, "Registry ...")
MenuItem(#MenuItem_ManageSessionFilters4Files, "Files ...")
MenuItem(#MenuItem_ManageSessionFilters4SFn2LFn, "Short filename to long filename ...")
CloseSubMenu()
OpenSubMenu("Global")
MenuItem(#MenuItem_ManageGlobalFilters4Servers, "Servers ...")
MenuItem(#MenuItem_ManageGlobalFilters4Registry, "Registry ...")
MenuItem(#MenuItem_ManageGlobalFilters4Files, "Files ...")
MenuItem(#MenuItem_ManageGlobalFilters4SFn2LFn, "Short filename to long filename ...")
CloseSubMenu()
MenuTitle("Plugins")
MenuItem(#MenuItem_PluginsManager, "Plugins-Manager")
MenuBar()
MenuItem(#MenuItem_Plugin1, "1: ")
MenuItem(#MenuItem_Plugin2, "2: ")
MenuItem(#MenuItem_Plugin3, "3: ")
MenuItem(#MenuItem_Plugin4, "4: ")
MenuItem(#MenuItem_Plugin5, "5: ")
MenuItem(#MenuItem_Plugin6, "6: ")
MenuItem(#MenuItem_Plugin7, "7: ")
MenuItem(#MenuItem_Plugin8, "8: ")
MenuItem(#MenuItem_Plugin9, "9: ")
MenuTitle("?")
MenuItem(#MenuItem_Legend, "Graph legend ..." + Chr(9) + "F1")
MenuItem(#MenuItem_QuickHelp, "Quick help ...")
MenuBar()
MenuItem(#MenuItem_CheckForUpdate, "Check for update ...")
MenuBar()
MenuItem(#MenuItem_Donate, "Donate ...")
MenuItem(#MenuItem_Credits, "Credits ...")
MenuItem(#MenuItem_About, "About ...")
TextGadget(#Text_Main_ProcmonFile, 110, 12, 110, 20, "Procmon-CSV:", #PB_Text_Right)
SetGadgetColor(#Text_Main_ProcmonFile, #PB_Gadget_BackColor,RGB(255,255,255))
StringGadget(#String_Main_ProcmonFile, 230, 10, 200, 22, "")
ButtonGadget(#Button_Main_ProcmonFile, 430, 10, 20, 22, "...")
TextGadget(#Text_Main_WindumpFile, 460, 12, 130, 20, "Windump-File:", #PB_Text_Right)
SetGadgetColor(#Text_Main_WindumpFile, #PB_Gadget_BackColor,RGB(255,255,255))
StringGadget(#String_Main_WindumpFile, 600, 10, 170, 22, "")
ButtonGadget(#Button_Main_WindumpFile, 770, 10, 20, 22, "...")
CanvasGadget(#Canvas_Main_Graph, 0, 70, 800, 455, #PB_Canvas_Border | #PB_Canvas_Keyboard)
ButtonGadget(#Button_Main_Refresh, 730, 40, 60, 20, "Refresh")
GadgetToolTip(#Button_Main_Refresh, "Refresh graph with the currently selected options.")
CheckBoxGadget(#Checkbox_Main_ModeNoPaths, 400, 40, 95, 20, "no paths")
GadgetToolTip(#Checkbox_Main_ModeNoPaths, "This option lets you specify if files and registry-keys should show up with full qualified paths or not.")
CheckBoxGadget(#Checkbox_Main_ModeCompressed, 495, 40, 125, 20, "compressed")
GadgetToolTip(#Checkbox_Main_ModeCompressed, "This mode collects specific types of registry-keys and files in categories reducing the size of the graph.")
TextGadget(#Text_Main_Launcher, 110, 40, 110, 20, "Launcher:", #PB_Text_Right)
SetGadgetColor(#Text_Main_Launcher, #PB_Gadget_BackColor,RGB(255,255,255))
StringGadget(#String_Main_Launcher, 230, 40, 130, 22, "", #PB_String_ReadOnly)
GadgetToolTip(#String_Main_Launcher, "The Launcher is the process that was so to say the entry-point of malicious activity.")
ButtonGadget(#Button_Main_Launcher, 360, 40, 20, 22, "...")
GadgetToolTip(#Button_Main_Launcher, "Select a process as Launcher.")
CheckBoxGadget(#Checkbox_Main_ModeDumb, 620, 40, 75, 20, "dumb")
GadgetToolTip(#Checkbox_Main_ModeDumb, "Dumb-mode disables smart-following-algorithms. Use this if you don't trust a clean looking situation or if you want to take a global glance at all system events.")
CanvasGadget(#Canvas_Main_AnimationFrames, 190, 527, 485, 22)
ButtonImageGadget(#Button_Main_AnimationFirst, 45, 527, 22, 22, ImageID(#Img_Window_Main_0))
GadgetToolTip(#Button_Main_AnimationFirst, "First frame")
ButtonImageGadget(#Button_Main_RenderingOptions, 698, 37, 25, 25, ImageID(#Img_Window_Main_11), #PB_Button_Toggle)
GadgetToolTip(#Button_Main_RenderingOptions, "Render-Options")
ButtonImageGadget(#Button_Main_AnimationPrevious, 67, 527, 22, 22, ImageID(#Img_Window_Main_1))
GadgetToolTip(#Button_Main_AnimationPrevious, "Previous frame")
ButtonImageGadget(#Button_Main_AnimationPlay, 89, 527, 22, 22, ImageID(#Img_Window_Main_2))
GadgetToolTip(#Button_Main_AnimationPlay, "Start/Stop animation")
DisableGadget(#Button_Main_AnimationPlay, 1)
ButtonImageGadget(#Button_Main_AnimationStop, 111, 527, 22, 22, ImageID(#Img_Window_Main_3))
GadgetToolTip(#Button_Main_AnimationStop, "Stop animation")
DisableGadget(#Button_Main_AnimationStop, 1)
ButtonImageGadget(#Button_Main_AnimationNext, 133, 527, 22, 22, ImageID(#Img_Window_Main_4))
GadgetToolTip(#Button_Main_AnimationNext, "Next frame")
ButtonImageGadget(#Button_Main_AnimationLast, 155, 527, 22, 22, ImageID(#Img_Window_Main_5))
GadgetToolTip(#Button_Main_AnimationLast, "Last frame")
ImageGadget(#Image_Main_CertLogo, 0, 0, 110, 70, ImageID(#Img_Window_Main_6))
ButtonImageGadget(#Button_Main_AnimationShow, 9, 526, 24, 24, ImageID(#Img_Window_Main_7), #PB_Button_Toggle)
GadgetToolTip(#Button_Main_AnimationShow, "This button toggles between normal- and frame-mode")
ComboBoxGadget(#Combo_Main_AnimationFPS, 690, 527, 60, 22)
GadgetToolTip(#Combo_Main_AnimationFPS, "Select your desired animation speed in frames per second (FPS)")
DisableGadget(#Combo_Main_AnimationFPS, 1)
ButtonImageGadget(#Button_Main_AnimationFramesUnique, 765, 526, 24, 24, ImageID(#Img_Window_Main_8))
GadgetToolTip(#Button_Main_AnimationFramesUnique, "Select your desired timeline-mode (All-Events, All-Events-RLE or Unique-Events).")
ButtonImageGadget(#Button_Main_AnimationFramesAll, 765, 526, 24, 24, ImageID(#Img_Window_Main_9))
GadgetToolTip(#Button_Main_AnimationFramesAll, "Select your desired timeline-mode (All-Events, All-Events-RLE or Unique-Events).")
ButtonImageGadget(#Button_Main_AnimationFramesAllRle, 765, 526, 24, 24, ImageID(#Img_Window_Main_10))
GadgetToolTip(#Button_Main_AnimationFramesAllRle, "Select your desired timeline-mode (All-Events, All-Events-RLE or Unique-Events).")
EndProcedure
DataSection
Img_Window_Main_0: : IncludeBinary "control-first.png"
Img_Window_Main_1: : IncludeBinary "control-previous.png"
Img_Window_Main_2: : IncludeBinary "control-play.png"
Img_Window_Main_3: : IncludeBinary "control-stop.png"
Img_Window_Main_4: : IncludeBinary "control-next.png"
Img_Window_Main_5: : IncludeBinary "control-last.png"
Img_Window_Main_6: : IncludeBinary "certlogo.png"
Img_Window_Main_7: : IncludeBinary "film.png"
Img_Window_Main_8: : IncludeBinary "sql-join-left.png"
Img_Window_Main_9: : IncludeBinary "sql-join-outer.png"
Img_Window_Main_10: : IncludeBinary "sql-join-outer-rle.png"
Img_Window_Main_11: : IncludeBinary "node-select.png"
EndDataSection
Didel.