Jianw
2025-05-13 b21510ffde25ef027d63862212495ac43b35b10f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
-- Copyright 2011-16 Paul Kulchenko, ZeroBrane LLC
-- authors: Lomtik Software (J. Winwood & John Labenski)
-- Luxinia Dev (Eike Decker & Christoph Kubisch)
---------------------------------------------------------
 
local ide = ide
local frame = ide.frame
local menuBar = frame.menuBar
local uimgr = frame.uimgr
 
local viewMenu = ide:MakeMenu {
  { ID_VIEWFILETREE, TR("Project/&FileTree Window")..KSC(ID_VIEWFILETREE), TR("View the project/filetree window"), wx.wxITEM_CHECK },
  { ID_VIEWOUTPUT, TR("&Output/Console Window")..KSC(ID_VIEWOUTPUT), TR("View the output/console window"), wx.wxITEM_CHECK },
  { ID_VIEWWATCHWINDOW, TR("&Watch Window")..KSC(ID_VIEWWATCHWINDOW), TR("View the watch window"), wx.wxITEM_CHECK },
  { ID_VIEWCALLSTACK, TR("&Stack Window")..KSC(ID_VIEWCALLSTACK), TR("View the stack window"), wx.wxITEM_CHECK },
  { ID_VIEWOUTLINE, TR("Outline Window")..KSC(ID_VIEWOUTLINE), TR("View the outline window"), wx.wxITEM_CHECK },
  { ID_VIEWMARKERS, TR("Markers Window")..KSC(ID_VIEWMARKERS), TR("View the markers window"), wx.wxITEM_CHECK },
  { },
  { ID_VIEWTOOLBAR, TR("&Tool Bar")..KSC(ID_VIEWTOOLBAR), TR("Show/Hide the toolbar"), wx.wxITEM_CHECK },
  { ID_VIEWSTATUSBAR, TR("&Status Bar")..KSC(ID_VIEWSTATUSBAR), TR("Show/Hide the status bar"), wx.wxITEM_CHECK },
  { },
  { ID_VIEWDEFAULTLAYOUT, TR("&Default Layout")..KSC(ID_VIEWDEFAULTLAYOUT), TR("Reset to default layout") },
  { ID_VIEWFULLSCREEN, TR("Full &Screen")..KSC(ID_VIEWFULLSCREEN), TR("Switch to or from full screen mode") },
}
 
do -- Add zoom submenu
  local zoomMenu = ide:MakeMenu {
    {ID_ZOOMRESET, TR("Zoom to 100%")..KSC(ID_ZOOMRESET)},
    {ID_ZOOMIN, TR("Zoom In")..KSC(ID_ZOOMIN)},
    {ID_ZOOMOUT, TR("Zoom Out")..KSC(ID_ZOOMOUT)},
  }
 
  frame:Connect(ID_ZOOMRESET, wx.wxEVT_COMMAND_MENU_SELECTED,
    function()local editor = ide:GetEditorWithFocus()
      if editor then editor:SetZoom(0) end end)
  frame:Connect(ID_ZOOMIN, wx.wxEVT_COMMAND_MENU_SELECTED,
    function() local editor = ide:GetEditorWithFocus()
      if editor then editor:SetZoom(editor:GetZoom()+1) end end)
  frame:Connect(ID_ZOOMOUT, wx.wxEVT_COMMAND_MENU_SELECTED,
    function() local editor = ide:GetEditorWithFocus()
      if editor then editor:SetZoom(editor:GetZoom()-1) end end)
 
  -- only enable if there is an editor
  local iseditor = function (event) event:Enable(ide:GetEditorWithFocus() ~= nil) end
  for _, id in ipairs({ID_ZOOMRESET, ID_ZOOMIN, ID_ZOOMOUT}) do
    frame:Connect(id, wx.wxEVT_UPDATE_UI, iseditor)
  end
 
  viewMenu:Append(ID_ZOOM, TR("Zoom"), zoomMenu)
end
 
menuBar:Append(viewMenu, TR("&View"))
 
local panels = {
  [ID_VIEWOUTPUT] = "bottomnotebook",
  [ID_VIEWFILETREE] = "projpanel",
  [ID_VIEWWATCHWINDOW] = "watchpanel",
  [ID_VIEWCALLSTACK] = "stackpanel",
  [ID_VIEWOUTLINE] = "outlinepanel",
  [ID_VIEWMARKERS] = "markerspanel",
  [ID_VIEWTOOLBAR] = "toolbar",
}
 
local function togglePanel(event)
  local panel = panels[event:GetId()]
  local pane = uimgr:GetPane(panel)
  local shown = not pane:IsShown()
  if not shown then pane:BestSize(pane.window:GetSize()) end
  pane:Show(shown)
  uimgr:Update()
 
  return shown
end
 
local function checkPanel(event)
  local pane = uimgr:GetPane(panels[event:GetId()])
  event:Enable(pane:IsOk()) -- disable if doesn't exist
  menuBar:Check(event:GetId(), pane:IsOk() and pane:IsShown())
end
 
frame:Connect(ID_VIEWDEFAULTLAYOUT, wx.wxEVT_COMMAND_MENU_SELECTED,
  function (event)
    uimgr:LoadPerspective(uimgr.defaultPerspective, true)
  end)
  
frame:Connect(ID_VIEWMINIMIZE, wx.wxEVT_COMMAND_MENU_SELECTED,
  function (event) ide.frame:Iconize(true) end)
 
frame:Connect(ID_VIEWFULLSCREEN, wx.wxEVT_COMMAND_MENU_SELECTED, function ()
    ide:ShowFullScreen(not frame:IsFullScreen())
  end)
frame:Connect(ID_VIEWFULLSCREEN, wx.wxEVT_UPDATE_UI,
  function (event) event:Enable(ide:GetEditor() ~= nil) end)
 
frame:Connect(ID_VIEWOUTPUT, wx.wxEVT_COMMAND_MENU_SELECTED, togglePanel)
frame:Connect(ID_VIEWFILETREE, wx.wxEVT_COMMAND_MENU_SELECTED, togglePanel)
frame:Connect(ID_VIEWTOOLBAR, wx.wxEVT_COMMAND_MENU_SELECTED, togglePanel)
frame:Connect(ID_VIEWOUTLINE, wx.wxEVT_COMMAND_MENU_SELECTED, togglePanel)
frame:Connect(ID_VIEWMARKERS, wx.wxEVT_COMMAND_MENU_SELECTED, togglePanel)
frame:Connect(ID_VIEWWATCHWINDOW, wx.wxEVT_COMMAND_MENU_SELECTED,
  function (event) if togglePanel(event) then ide:GetDebugger():RefreshPanels() end end)
frame:Connect(ID_VIEWCALLSTACK, wx.wxEVT_COMMAND_MENU_SELECTED,
  function (event) if togglePanel(event) then ide:GetDebugger():RefreshPanels() end end)
 
frame:Connect(ID_VIEWSTATUSBAR, wx.wxEVT_COMMAND_MENU_SELECTED,
  function (event)
    frame:GetStatusBar():Show(menuBar:IsChecked(event:GetId()))
    uimgr:Update()
  end)
frame:Connect(ID_VIEWSTATUSBAR, wx.wxEVT_UPDATE_UI,
  function (event) menuBar:Check(event:GetId(), frame:GetStatusBar():IsShown()) end)
 
for id in pairs(panels) do frame:Connect(id, wx.wxEVT_UPDATE_UI, checkPanel) end