+ };
+ MenuDivider { debugMenu };
+ ModelView duck
+ {
+ this,
+ // nonClient = true,
+ autoCreate = false,
+ alphaBlend = true,
+ opacity = 0,
+ isRemote = true,
+ borderStyle = 0,
+ moveable = true,
+ anchor = { right = 0, bottom = 0 },
+ inactive = true,
+ isActiveClient = false,
+ stayOnTop = true,
+ clickThrough = true,
+ size = { 500, 500 };
+
+ bool OnLoadGraphics()
+ {
+ ModelView::OnLoadGraphics();
+ camera.position.z /= 1.3;
+ camera.orientation = Euler { yaw = 280, pitch = 20 };
+ camera.Update();
+ Update(null);
+ return true;
+ }
+
+ bool OnRightButtonDown(int x, int y, Modifiers mods)
+ {
+ if(!displaySystem.flags.flipping) return true;
+ MenuWindowMove(null, 0);
+ return false;
+ }
+
+ bool OnRightButtonUp(int x, int y, Modifiers mods)
+ {
+ position = position;
+ state = normal;
+ return true;
+ }
+ };
+ MenuItem debugRubberDuck
+ {
+ debugMenu, $"Rubber Duck", checkable = true, disabled = true;
+ bool NotifySelect(MenuItem selection, Modifiers mods)
+ {
+ if(selection.checked)
+ duck.Create();
+ else
+ duck.Destroy(0);
+ return true;
+ }
+ };
+#ifndef __WIN32__
+ MenuDivider { debugMenu };
+ MenuItem debugUseValgrindItem
+ {
+ debugMenu, $"Use Valgrind", d, disabled = true, checkable = true;
+ bool NotifySelect(MenuItem selection, Modifiers mods)
+ {
+ if(ide.workspace)
+ {
+ ide.workspace.useValgrind = selection.checked;
+ ide.workspace.Save();
+ }
+ ide.AdjustValgrindMenus();
+ return true;
+ }
+ };
+ Menu debugValgrindLeakCheckItem { debugMenu, $"Valgrind Leak Check", h };
+ MenuItem debugValgrindNoLeakCheckItem { debugValgrindLeakCheckItem, $"No" , f, id = ValgrindLeakCheck::no , checkable = true, disabled = true; NotifySelect = ValgrindLCSelect; };
+ MenuItem debugValgrindSummaryLeakCheckItem { debugValgrindLeakCheckItem, $"Summary", f, id = ValgrindLeakCheck::summary, checkable = true, disabled = true; NotifySelect = ValgrindLCSelect, checked = true; };
+ MenuItem debugValgrindYesLeakCheckItem { debugValgrindLeakCheckItem, $"Yes" , f, id = ValgrindLeakCheck::yes , checkable = true, disabled = true; NotifySelect = ValgrindLCSelect; };
+ MenuItem debugValgrindFullLeakCheckItem { debugValgrindLeakCheckItem, $"Full" , f, id = ValgrindLeakCheck::full , checkable = true, disabled = true; NotifySelect = ValgrindLCSelect; };
+ bool ValgrindLCSelect(MenuItem selection, Modifiers mods)
+ {
+ if(ide.workspace)
+ {
+ if(selection.checked)
+ {
+ ValgrindLeakCheck vgLeakCheck = (ValgrindLeakCheck)selection.id;
+
+ debugValgrindNoLeakCheckItem.checked = debugValgrindNoLeakCheckItem.id == vgLeakCheck;
+ debugValgrindSummaryLeakCheckItem.checked = debugValgrindSummaryLeakCheckItem.id == vgLeakCheck;
+ debugValgrindYesLeakCheckItem.checked = debugValgrindYesLeakCheckItem.id == vgLeakCheck;
+ debugValgrindFullLeakCheckItem.checked = debugValgrindFullLeakCheckItem.id == vgLeakCheck;
+
+ ide.workspace.vgLeakCheck = vgLeakCheck;
+ ide.workspace.Save();
+ }
+ else
+ selection.checked = true;
+ }
+ return true;
+ }
+ Menu debugValgrindRedzoneSizeItem { debugMenu, $"Valgrind Redzone Size", z };
+ MenuItem debugValgrindRSDefaultItem { debugValgrindRedzoneSizeItem, $"Default", f, id = -1, checkable = true, disabled = true; NotifySelect = ValgrindRSSelect, checked = true; };
+ MenuItem debugValgrindRS0Item { debugValgrindRedzoneSizeItem, "0" , f, id = 0, checkable = true, disabled = true; NotifySelect = ValgrindRSSelect; };
+ MenuItem debugValgrindRS16Item { debugValgrindRedzoneSizeItem, "16" , f, id = 16, checkable = true, disabled = true; NotifySelect = ValgrindRSSelect; };
+ MenuItem debugValgrindRS32Item { debugValgrindRedzoneSizeItem, "32" , f, id = 32, checkable = true, disabled = true; NotifySelect = ValgrindRSSelect; };
+ MenuItem debugValgrindRS64Item { debugValgrindRedzoneSizeItem, "64" , f, id = 64, checkable = true, disabled = true; NotifySelect = ValgrindRSSelect; };
+ MenuItem debugValgrindRS128Item { debugValgrindRedzoneSizeItem, "128" , f, id = 128, checkable = true, disabled = true; NotifySelect = ValgrindRSSelect; };
+ MenuItem debugValgrindRS256Item { debugValgrindRedzoneSizeItem, "256" , f, id = 256, checkable = true, disabled = true; NotifySelect = ValgrindRSSelect; };
+ MenuItem debugValgrindRS512Item { debugValgrindRedzoneSizeItem, "512" , f, id = 512, checkable = true, disabled = true; NotifySelect = ValgrindRSSelect; };
+ bool ValgrindRSSelect(MenuItem selection, Modifiers mods)
+ {
+ if(ide.workspace)
+ {
+ if(selection.checked)
+ {
+ int vgRedzoneSize = (int)selection.id;
+
+ debugValgrindRSDefaultItem.checked = debugValgrindRSDefaultItem.id == vgRedzoneSize;
+ debugValgrindRS0Item.checked = debugValgrindRS0Item.id == vgRedzoneSize;
+ debugValgrindRS16Item.checked = debugValgrindRS16Item.id == vgRedzoneSize;
+ debugValgrindRS32Item.checked = debugValgrindRS32Item.id == vgRedzoneSize;
+ debugValgrindRS64Item.checked = debugValgrindRS64Item.id == vgRedzoneSize;
+ debugValgrindRS128Item.checked = debugValgrindRS128Item.id == vgRedzoneSize;
+ debugValgrindRS256Item.checked = debugValgrindRS256Item.id == vgRedzoneSize;
+ debugValgrindRS512Item.checked = debugValgrindRS512Item.id == vgRedzoneSize;
+
+ ide.workspace.vgRedzoneSize = vgRedzoneSize;
+ ide.workspace.Save();
+ }
+ else
+ selection.checked = true;
+ }
+ return true;
+ }
+ MenuItem debugValgrindTrackOriginsItem
+ {
+ debugMenu, $"Valgrind Track Origins", k, checkable = true, disabled = true;
+ bool NotifySelect(MenuItem selection, Modifiers mods)
+ {
+ if(ide.workspace)
+ {
+ ide.workspace.vgTrackOrigins = selection.checked;
+ ide.workspace.Save();
+ }
+ return true;
+ }
+ };
+#endif