[5.21b3] Still messing up complex menu structures ...

You need some new stunning features ? Tell us here.
User avatar
Didelphodon
PureBasic Expert
PureBasic Expert
Posts: 448
Joined: Sat Dec 18, 2004 11:56 am
Location: Vienna - Austria
Contact:

[5.21b3] Still messing up complex menu structures ...

Post by Didelphodon »

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.

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
Cheers,
Didel.
Go, tell it on the mountains.