diff --git a/AddCamera.cs b/AddCamera.cs index add1269b..b29942e8 100644 --- a/AddCamera.cs +++ b/AddCamera.cs @@ -1513,9 +1513,22 @@ private void DdlPtzSelectedIndexChanged(object sender, EventArgs e) CameraControl.PTZ.PTZSettings = ptz; if (ptz.ExtendedCommands?.Command != null) { + string subMenu = "", PTZ_SUBMENU_START = " "; foreach (var extcmd in ptz.ExtendedCommands.Command) { - lbExtended.Items.Add(new ListItem(extcmd.Name, extcmd.Value)); + if ((extcmd.Value ?? "") != "") + { + lbExtended.Items.Add(new ListItem(subMenu + extcmd.Name, extcmd.Value)); + } + else if ((extcmd.Name ?? MainForm.PTZ_SUBMENU_END) != MainForm.PTZ_SUBMENU_END) + { + lbExtended.Items.Add(new ListItem(subMenu + extcmd.Name + MainForm.PTZ_SUBMENU_NAME_SUFFIX, extcmd.Value)); + subMenu = subMenu + PTZ_SUBMENU_START; + } + else + { + subMenu = subMenu.Substring(Math.Min(PTZ_SUBMENU_START.Length, subMenu.Length)); + } } } if (_loaded) diff --git a/Controls/CameraWindow.cs b/Controls/CameraWindow.cs index 15adba72..44582061 100644 --- a/Controls/CameraWindow.cs +++ b/Controls/CameraWindow.cs @@ -1798,8 +1798,11 @@ private void CheckPTZSchedule() ptz.ExtendedCommands?.Command?.FirstOrDefault(p => p.Name == entry1.command); if (extcmd != null) { - Calibrating = true; - PTZ.SendPTZCommand(extcmd.Value); + if ((extcmd.Value ?? "") != "") + { + Calibrating = true; + PTZ.SendPTZCommand(extcmd.Value); + } } } } diff --git a/Controls/PTZScheduler.cs b/Controls/PTZScheduler.cs index c3ce80a5..d549046a 100644 --- a/Controls/PTZScheduler.cs +++ b/Controls/PTZScheduler.cs @@ -118,9 +118,22 @@ private void PTZScheduler_Load(object sender, EventArgs e) CameraControl.PTZ.PTZSettings = ptz; if (ptz.ExtendedCommands != null && ptz.ExtendedCommands.Command != null) { + string subMenu = "", PTZ_SUBMENU_START = " "; foreach (var extcmd in ptz.ExtendedCommands.Command) { - ddlScheduleCommand.Items.Add(new MainForm.ListItem3(extcmd.Name, extcmd.Value)); + if ((extcmd.Value ?? "") != "") + { + ddlScheduleCommand.Items.Add(new MainForm.ListItem3(subMenu + extcmd.Name, extcmd.Value)); + } + else if ((extcmd.Name ?? MainForm.PTZ_SUBMENU_END) != MainForm.PTZ_SUBMENU_END) + { + ddlScheduleCommand.Items.Add(new MainForm.ListItem3(subMenu + extcmd.Name + MainForm.PTZ_SUBMENU_NAME_SUFFIX, extcmd.Value)); + subMenu = subMenu + PTZ_SUBMENU_START; + } + else + { + subMenu = subMenu.Substring(Math.Min(PTZ_SUBMENU_START.Length, subMenu.Length)); + } } } } diff --git a/Controls/PTZTracking.cs b/Controls/PTZTracking.cs index 0c26b756..94ba7383 100644 --- a/Controls/PTZTracking.cs +++ b/Controls/PTZTracking.cs @@ -49,12 +49,25 @@ private void PTZTracking_Load(object sender, EventArgs e) CameraControl.PTZ.PTZSettings = ptz; if (ptz.ExtendedCommands != null && ptz.ExtendedCommands.Command != null) { + string subMenu = "", PTZ_SUBMENU_START = " "; foreach (var extcmd in ptz.ExtendedCommands.Command) { - ddlHomeCommand.Items.Add(new MainForm.ListItem3(extcmd.Name, extcmd.Value)); - if (CameraControl.Camobject.settings.ptzautohomecommand == extcmd.Value) + if ((extcmd.Value ?? "") != "") { - ddlHomeCommand.SelectedIndex = ddlHomeCommand.Items.Count - 1; + ddlHomeCommand.Items.Add(new MainForm.ListItem3(subMenu + extcmd.Name, extcmd.Value)); + if (CameraControl.Camobject.settings.ptzautohomecommand == extcmd.Value) + { + ddlHomeCommand.SelectedIndex = ddlHomeCommand.Items.Count - 1; + } + } + else if ((extcmd.Name ?? MainForm.PTZ_SUBMENU_END) != MainForm.PTZ_SUBMENU_END) + { + ddlHomeCommand.Items.Add(new MainForm.ListItem3(subMenu + extcmd.Name + MainForm.PTZ_SUBMENU_NAME_SUFFIX, extcmd.Value)); + subMenu = subMenu + PTZ_SUBMENU_START; + } + else + { + subMenu = subMenu.Substring(Math.Min(PTZ_SUBMENU_START.Length, subMenu.Length)); } } } diff --git a/MainForm_Configuration.cs b/MainForm_Configuration.cs index dee03d99..7b594a38 100644 --- a/MainForm_Configuration.cs +++ b/MainForm_Configuration.cs @@ -42,6 +42,9 @@ public partial class MainForm private static List _remotecommands; private static List _cameras; + public static string PTZ_SUBMENU_END = ".."; + public static string PTZ_SUBMENU_NAME_SUFFIX = " >>"; + public static void ReloadColors() { _backColor = @@ -3515,16 +3518,30 @@ private void CameraControlMouseDown(object sender, MouseEventArgs e) PTZSettings2Camera ptz = PTZs.SingleOrDefault(p => p.id == cameraControl.Camobject.ptz); if (ptz?.ExtendedCommands?.Command != null) { + var subMenus = new List() { + pTZToolStripMenuItem.DropDownItems + }; + foreach (var extcmd in ptz.ExtendedCommands.Command) { - ToolStripItem tsi = new ToolStripMenuItem + ToolStripMenuItem tsi = new ToolStripMenuItem { Text = extcmd.Name, Tag = cameraControl.Camobject.id + "|" + extcmd.Value }; - tsi.Click += TsiClick; - pTZToolStripMenuItem.DropDownItems.Add(tsi); + if ((extcmd.Value ?? "") != "") + { + tsi.Click += TsiClick; + subMenus[0].Add(tsi); + } + else if ((extcmd.Name ?? PTZ_SUBMENU_END) != PTZ_SUBMENU_END) + { + subMenus[0].Add(tsi); + subMenus.Insert(0, tsi.DropDownItems); // PTZ_SUBMENU_START + } + else if (subMenus.Count > 1) + subMenus.RemoveAt(0); } } } diff --git a/PTZTool.cs b/PTZTool.cs index 3067985c..b0c8689a 100644 --- a/PTZTool.cs +++ b/PTZTool.cs @@ -31,9 +31,22 @@ public CameraWindow CameraControl PTZSettings2Camera ptz = MainForm.PTZs.Single(p => p.id == CameraControl.Camobject.ptz); if (ptz.ExtendedCommands != null && ptz.ExtendedCommands.Command!=null) { + string subMenu = "", PTZ_SUBMENU_START = " "; foreach (var extcmd in ptz.ExtendedCommands.Command) { - ddlExtended.Items.Add(new ListItem(extcmd.Name, extcmd.Value)); + if ((extcmd.Value ?? "") != "") + { + ddlExtended.Items.Add(new ListItem(subMenu + extcmd.Name, extcmd.Value)); + } + else if ((extcmd.Name ?? MainForm.PTZ_SUBMENU_END) != MainForm.PTZ_SUBMENU_END) + { + ddlExtended.Items.Add(new ListItem(subMenu + extcmd.Name + MainForm.PTZ_SUBMENU_NAME_SUFFIX, extcmd.Value)); + subMenu = subMenu + PTZ_SUBMENU_START; + } + else + { + subMenu = subMenu.Substring(Math.Min(PTZ_SUBMENU_START.Length, subMenu.Length)); + } } } pnlController.Enabled = true; diff --git a/XML/PTZ2.xml b/XML/PTZ2.xml index e270e2a8..d06c3ee9 100644 --- a/XML/PTZ2.xml +++ b/XML/PTZ2.xml @@ -767,6 +767,7 @@ command=16 + command=31 command=33 command=35 @@ -775,6 +776,8 @@ command=41 command=43 command=45 + + command=30 command=32 command=34 @@ -783,9 +786,12 @@ command=40 command=42 command=44 + + command=1 command=20 command=21 + command=94 command=95