private void OnSelectView(object sender, EventArgs e) { try { ItemPickerForm form = new ItemPickerForm(); form.Init(ClientControl.Instance.GetViewGroupItems()); //form.Init(ClientControl.Instance.GetSmartWallItems()); form.AutoAccept = true; form.KindFilter = Kind.View; if (form.ShowDialog() == DialogResult.OK) { _viewAndLayoutItem = (ViewAndLayoutItem)form.SelectedItem; textBoxLayout.Text = _viewAndLayoutItem.Name; groupBoxView.Enabled = true; textBoxCount.Text = "" + _viewAndLayoutItem.Layout.Length; _inLoad = true; MakeIXList(_viewAndLayoutItem.Layout.Length); _inLoad = false; OnIndexChanged(null, null); //OnSelectedViewItemChanged(null, null); button7.Enabled = true; } else { textBoxLayout.Text = ""; _viewAndLayoutItem = null; groupBoxView.Enabled = false; } } catch (Exception ex) { EnvironmentManager.Instance.ExceptionDialog("OnSelectGroup", ex); } }
public override void Activate() { Item currentCameraItem = null; Guid currentCameraId = Guid.Empty; // Get hold of the most recent ViewLayout ViewAndLayoutItem viewLayout = (ViewAndLayoutItem)_window.GetChildren()[0]; List <Item> viewItems = viewLayout.GetChildren(); int index; // Puck out the index we work on Int32.TryParse(_viewItemInstance.Properties["Index"], NumberStyles.Number, System.Globalization.CultureInfo.InvariantCulture, out index); // Look up the current (updated) version of the ViewItem Item viewItem = viewItems[index]; Guid.TryParse(viewItem.Properties["CurrentCameraId"], out currentCameraId); if (currentCameraId != Guid.Empty) { currentCameraItem = Configuration.Instance.GetItem(currentCameraId, Kind.Camera); } if (currentCameraItem != null) { MessageBox.Show("The current camera is: " + currentCameraItem.Name + " (" + currentCameraItem.FQID.ObjectId + ")"); } else { MessageBox.Show("Failed to look up current camera."); } }
private void OnSave(object sender, EventArgs e) { if (_viewAndLayoutItem != null) { if (_viewAndLayoutItem.Name == "") { MessageBox.Show("Please supply a name before Saving"); } else { _viewAndLayoutItem.Name = textBoxLayout.Text; try { _viewAndLayoutItem.Save(); _ignoreChanged = true; _viewAndLayoutItem = null; _selectedViewItem = null; _selectedCameraItem = null; _groupItem = null; textBoxSelectedGroup.Text = ""; textBoxLayout.Text = ""; comboBoxViewItemIx.Items.Clear(); buttonSelectCamera.Text = "Select Camera..."; textBoxURL.Text = ""; button7.Enabled = false; _ignoreChanged = false; } catch (Exception ex) { EnvironmentManager.Instance.ExceptionDialog("Save", ex); } } } }
/// <summary> /// Initializa the plugin /// </summary> public override void Init() { LoadProperties(true); //add message listeners _messageRegistrationObjects.Add(EnvironmentManager.Instance.RegisterReceiver(ShownWorkSpaceChangedReceiver, new MessageIdFilter(MessageId.SmartClient.ShownWorkSpaceChangedIndication))); _messageRegistrationObjects.Add(EnvironmentManager.Instance.RegisterReceiver(WorkSpaceStateChangedReceiver, new MessageIdFilter(MessageId.SmartClient.WorkSpaceStateChangedIndication))); _messageRegistrationObjects.Add(EnvironmentManager.Instance.RegisterReceiver(SelectedViewChangedReceiver, new MessageIdFilter(MessageId.SmartClient.SelectedViewChangedIndication))); //build view layout - modify to your needs. Here we use a matrix of 1000x1000 to define the layout List <Rectangle> rectangles = new List <Rectangle> { new Rectangle(000, 000, 1000, 1000) // Index 0 = Used by a camera below }; ViewAndLayoutItem.Layout = rectangles.ToArray(); ViewAndLayoutItem.Name = Name; //add viewitems to view layout Item cameraItem = FindAnyCamera(Configuration.Instance.GetItemsByKind(Kind.Camera)); Dictionary <String, String> properties = new Dictionary <string, string> { { "CameraId", cameraItem != null?cameraItem.FQID.ObjectId.ToString() : Guid.Empty.ToString() } }; ViewAndLayoutItem.InsertViewItemPlugin(0, new AnalyticsWorkSpaceViewItemPlugin(), new Dictionary <String, String>()); }
/// <summary> /// This method keeps an eye with what view layout the user is selecting, /// stores it under _currentView, and show the name in the read-only textBoxLayoutName textbox. /// </summary> /// <param name="message"></param> /// <param name="s"></param> /// <param name="r"></param> /// <returns></returns> private object ViewChangedHandler(Message message, FQID s, FQID r) { _currentView = message.Data as ViewAndLayoutItem; UpdateIndexes(); return(null); }
/// <summary> /// User modified something in setup mode /// </summary> /// <param name="index"></param> public override void ViewItemConfigurationModified(int index) { base.ViewItemConfigurationModified(index); if (ViewAndLayoutItem.ViewItemId(index) == ViewAndLayoutItem.CameraBuiltinId) { SetProperty("Camera" + index, ViewAndLayoutItem.ViewItemConfigurationString(index)); SaveProperties(true); } }
public override void Init() { LoadProperties(true); //add message listeners _messageRegistrationObjects.Add(EnvironmentManager.Instance.RegisterReceiver(ShuffleCamerasReceiver, new MessageIdFilter(SCWorkSpaceDefinition.ShuffleCamerasMessage))); _messageRegistrationObjects.Add(EnvironmentManager.Instance.RegisterReceiver(MaxCamerasChangedReceiver, new MessageIdFilter(SCWorkSpaceDefinition.MaxCamerasChangedMessage))); _messageRegistrationObjects.Add(EnvironmentManager.Instance.RegisterReceiver(ShownWorkSpaceChangedReceiver, new MessageIdFilter(MessageId.SmartClient.ShownWorkSpaceChangedIndication))); _messageRegistrationObjects.Add(EnvironmentManager.Instance.RegisterReceiver(WorkSpaceStateChangedReceiver, new MessageIdFilter(MessageId.SmartClient.WorkSpaceStateChangedIndication))); _messageRegistrationObjects.Add(EnvironmentManager.Instance.RegisterReceiver(SelectedViewChangedReceiver, new MessageIdFilter(MessageId.SmartClient.SelectedViewChangedIndication))); //build view layout List <Rectangle> rectangles = new List <Rectangle>(); for (int i = 0; i < MAX_MAX_CAMERA_COUNT; i++) { rectangles.Add(new Rectangle((1000 / MAX_MAX_CAMERA_COUNT) * i, (1000 / MAX_MAX_CAMERA_COUNT) * i, (1000 / MAX_MAX_CAMERA_COUNT), (1000 / MAX_MAX_CAMERA_COUNT))); } rectangles.Add(new Rectangle(700, 0, 300, 300)); rectangles.Add(new Rectangle(0, 600, 400, 400)); ViewAndLayoutItem.Layout = rectangles.ToArray(); ViewAndLayoutItem.Name = Name; //add viewitems to view layout List <Item> cameraItems = new List <Item>(); for (int i = 0; i < MAX_MAX_CAMERA_COUNT; i++) { string configurationString = GetProperty("Camera" + i); if (String.IsNullOrWhiteSpace(configurationString)) { Dictionary <String, String> properties = new Dictionary <string, string>(); FindAllCameras(Configuration.Instance.GetItemsByKind(Kind.Camera), cameraItems); properties.Add("CameraId", Guid.Empty.ToString()); ViewAndLayoutItem.InsertBuiltinViewItem(i, ViewAndLayoutItem.CameraBuiltinId, properties); } else { ViewAndLayoutItem.InsertViewItem(i, configurationString); } } Dictionary <String, String> cameraDictionary = new Dictionary <string, string>(); ViewAndLayoutItem.InsertViewItemPlugin(rectangles.Count - 2, new SCWorkSpaceViewItemPlugin(), new Dictionary <string, string>()); ViewAndLayoutItem.InsertViewItemPlugin(rectangles.Count - 1, new SCWorkSpaceViewItemPlugin2(), new Dictionary <string, string>()); //create and start _updateInformationTimer _updateInformationTimer = new Timer(); _updateInformationTimer.Interval = 1000; _updateInformationTimer.Tick += new EventHandler(_updateInformationTimer_Tick); _updateInformationTimer.Start(); }
public override void Init() { //int rec1_3Width = 249; //var rect = new Rectangle[3]; //rect[0] = new Rectangle(000, 000, rec1_3Width, 999); //rect[1] = new Rectangle(rec1_3Width, 000, 999 - 2 * rec1_3Width, 999); //rect[2] = new Rectangle(999 - rec1_3Width, 000, rec1_3Width, 999); //ViewAndLayoutItem.Layout = rect; //980, 845 ViewAndLayoutItem.Layout = new Rectangle[] { new Rectangle(000, 000, 2000, 2000) }; ViewAndLayoutItem.Name = Name; ViewAndLayoutItem.InsertViewItemPlugin(0, new OpenALPRViewItemPlugin(), new Dictionary <string, string>()); }
/// <summary> /// Initializa the plugin /// </summary> public override void Init() { LoadProperties(true); //add message listeners _messageRegistrationObjects.Add(EnvironmentManager.Instance.RegisterReceiver(ShownWorkSpaceChangedReceiver, new MessageIdFilter(MessageId.SmartClient.ShownWorkSpaceChangedIndication))); _messageRegistrationObjects.Add(EnvironmentManager.Instance.RegisterReceiver(WorkSpaceStateChangedReceiver, new MessageIdFilter(MessageId.SmartClient.WorkSpaceStateChangedIndication))); _messageRegistrationObjects.Add(EnvironmentManager.Instance.RegisterReceiver(SelectedViewChangedReceiver, new MessageIdFilter(MessageId.SmartClient.SelectedViewChangedIndication))); //build view layout - modify to your needs. Here we use a matrix of 1000x1000 to define the layout List <Rectangle> rectangles = new List <Rectangle>(); rectangles.Add(new Rectangle(000, 000, 1000, 1000)); // Index 0 = Used by a camera below ViewAndLayoutItem.Layout = rectangles.ToArray(); ViewAndLayoutItem.Name = Name; ViewAndLayoutItem.InsertViewItemPlugin(0, new PropertyWorkSpaceViewItemPlugin(), new Dictionary <string, string>()); }
private void OnCreate2x1(object sender, EventArgs e) { try { if (String.IsNullOrEmpty(textBoxLayout.Text)) { MessageBox.Show("Please specifiy name of layout before creating"); } else { // Check that the name entered is not already used: bool dup = false; foreach (Item currentView in _groupItem.GetChildren()) { if (textBoxLayout.Text == currentView.Name) { MessageBox.Show("Duplicate name - please select another"); dup = true; } } if (!dup) { Rectangle[] rect = new Rectangle[3]; rect[0] = new Rectangle(000, 000, 999, 499); rect[1] = new Rectangle(000, 499, 499, 499); rect[2] = new Rectangle(499, 499, 499, 499); _viewAndLayoutItem = (ViewAndLayoutItem)_groupItem.AddChild(textBoxLayout.Text, Kind.View, FolderType.No); textBoxCount.Text = "3"; _viewAndLayoutItem.Icon = Properties.Resources.UnknownLayout; _viewAndLayoutItem.Layout = rect; MakeIXList(3); } } } catch (Exception ex) { EnvironmentManager.Instance.ExceptionDialog("OnCreate2x1", ex); } }
/// <summary> /// Initializa the plugin /// </summary> public override void Init() { LoadProperties(true); //add message listeners _messageRegistrationObjects.Add(EnvironmentManager.Instance.RegisterReceiver(ShownWorkSpaceChangedReceiver, new MessageIdFilter(MessageId.SmartClient.ShownWorkSpaceChangedIndication))); _messageRegistrationObjects.Add(EnvironmentManager.Instance.RegisterReceiver(WorkSpaceStateChangedReceiver, new MessageIdFilter(MessageId.SmartClient.WorkSpaceStateChangedIndication))); _messageRegistrationObjects.Add(EnvironmentManager.Instance.RegisterReceiver(SelectedViewChangedReceiver, new MessageIdFilter(MessageId.SmartClient.SelectedViewChangedIndication))); //build view layout - modify to your needs. Here we use a matrix of 1000x1000 to define the layout List <Rectangle> rectangles = new List <Rectangle>(); rectangles.Add(new Rectangle(000, 000, 200, 200)); // Index 0 = Used by a camera below rectangles.Add(new Rectangle(200, 000, 800, 200)); // Index 1 = the sample ViewItem rectangles.Add(new Rectangle(000, 200, 1000, 800)); // Index 2 ViewAndLayoutItem.Layout = rectangles.ToArray(); ViewAndLayoutItem.Name = Name; //add viewitems to view layout Item cameraItem = FindAnyCamera(Configuration.Instance.GetItemsByKind(Kind.Camera)); Dictionary <String, String> properties = new Dictionary <string, string>(); properties.Add("CameraId", cameraItem != null ? cameraItem.FQID.ObjectId.ToString() : Guid.Empty.ToString()); ViewAndLayoutItem.InsertBuiltinViewItem(0, ViewAndLayoutItem.CameraBuiltinId, properties); ViewAndLayoutItem.InsertViewItemPlugin(1, new HelloWorldMIPPluginWorkSpaceViewItemPlugin(), new Dictionary <string, string>()); Dictionary <String, String> properties2 = new Dictionary <string, string>(); properties2.Add("URL", "http://google.com"); properties2.Add("Scaling", "4"); // fit in 640x480 properties2.Add("Addscript", "false"); properties2.Add("HideNavigationBar", "false"); ViewAndLayoutItem.InsertBuiltinViewItem(2, ViewAndLayoutItem.HTMLBuiltinId, properties2); }
/// <summary> /// Handles messages from the Alarm List. /// Creates a new view and displays it in a floating window each time a message is sent from the Alarm List. /// </summary> /// <param name="message">The message contains a list of alarms.</param> /// <param name="destination">Ignored since we want all messages from the Alarm List.</param> /// <param name="source">Ignored since we want messages from any Alarm List.</param> /// <returns>null - since the Alarm List is indifferent of who listens to its messages.</returns> private Object CameraListReceiver(VideoOS.Platform.Messaging.Message message, FQID destination, FQID source) { List <Alarm> alarms = message.Data as List <Alarm>; if (alarms != null) { int viewNumber = _viewCounter + 1; // Make a new Temporary view group ConfigItem tempGroupItem = (ConfigItem)ClientControl.Instance.CreateTemporaryGroupItem("Temporary" + viewNumber); // Make a group ConfigItem groupItem = tempGroupItem.AddChild("DynamicViewGroup" + viewNumber, Kind.View, FolderType.UserDefined); // Build a layout with wide ViewItems at the top and buttom, and 5 small ones in the middle Rectangle[] rect = new Rectangle[7]; rect[0] = new Rectangle(000, 000, 999, 399); rect[1] = new Rectangle(000, 399, 199, 199); rect[2] = new Rectangle(199, 399, 199, 199); rect[3] = new Rectangle(399, 399, 199, 199); rect[4] = new Rectangle(599, 399, 199, 199); rect[5] = new Rectangle(799, 399, 199, 199); rect[6] = new Rectangle(000, 599, 999, 399); int capacity = rect.Length; string viewName = "DynamicView" + viewNumber; ViewAndLayoutItem viewAndLayoutItem = groupItem.AddChild(viewName, Kind.View, FolderType.No) as ViewAndLayoutItem; viewAndLayoutItem.Layout = rect; // Insert cameras int index = 0; foreach (Alarm alarm in alarms) { // Add camera from the triggering event // Note: EventHeader.Source cannot be null because an alarm must have a source if (index < capacity && alarm.EventHeader?.Source.FQID.Kind == Kind.Camera) { viewAndLayoutItem.InsertBuiltinViewItem(index++, ViewAndLayoutItem.CameraBuiltinId, new Dictionary <string, string>() { { "CameraId", alarm.EventHeader.Source.FQID.ObjectId.ToString() } }); } if (alarm.ReferenceList == null) { continue; } // Add related cameras from the alarm foreach (Reference rel in alarm.ReferenceList) { if (index < capacity && rel.FQID.Kind == Kind.Camera) { viewAndLayoutItem.InsertBuiltinViewItem(index++, ViewAndLayoutItem.CameraBuiltinId, new Dictionary <string, string>() { { "CameraId", rel.FQID.ObjectId.ToString() } }); } } } if (index == 0) { // Exit here, since no cameras were found in the alarm list return(null); } viewAndLayoutItem.Save(); tempGroupItem.PropertiesModified(); Item screen = Configuration.Instance.GetItemsByKind(Kind.Screen).FirstOrDefault(); Item window = Configuration.Instance.GetItemsByKind(Kind.Window).FirstOrDefault(); Item view = groupItem.GetChildren().FirstOrDefault(v => v.Name.Equals(viewName)); if (screen == null || window == null || view == null) { return(null); } // Create floating window MultiWindowCommandData data = new MultiWindowCommandData(); data.Screen = screen.FQID; data.Window = window.FQID; data.View = view.FQID; data.X = 200; data.Y = 200; data.Height = 500; data.Width = 500; data.MultiWindowCommand = "OpenFloatingWindow"; data.PlaybackSupportedInFloatingWindow = true; EnvironmentManager.Instance.SendMessage(new VideoOS.Platform.Messaging.Message(MessageId.SmartClient.MultiWindowCommand, data), null, null); _viewCounter++; } return(null); }
/// <summary> /// This method is called when the user selects a camera and inserts the selected camera in a floating hotspot window /// </summary> /// <param name="message"></param> /// <param name="dest"></param> /// <param name="sender"></param> /// <returns></returns> private object ViewItemSelected(Message message, FQID dest, FQID sender) { if (sender != null && _myWindowFQID2 != null && sender.ObjectId == _myWindowFQID2.ObjectId) // Ignore my own setup messages { return(null); } if (_myMessageInProgress) { return(null); } if (message.MessageId == MessageId.SmartClient.SelectedCameraChangedIndication) { FQID cameraFQID = message.RelatedFQID; if (_myWindowFQID2 != null) { _myMessageInProgress = true; EnvironmentManager.Instance.SendMessage(new Message(MessageId.SmartClient.SetCameraInViewCommand, new SetCameraInViewCommandData() { Index = _top?0:1, CameraFQID = cameraFQID }), _myWindowFQID2); _myMessageInProgress = false; _top = !_top; return(null); } if (cameraFQID == null) { return(null); } _viewCounter++; // Make a new Temporary view group ConfigItem tempGroupItem = (ConfigItem)ClientControl.Instance.CreateTemporaryGroupItem("Floating Hotspot"); // Make a group ConfigItem groupItem = tempGroupItem.AddChild("SCHotSpotGroup" + _viewCounter, Kind.View, FolderType.UserDefined); // Build a layout with wide ViewItems at the top and buttom, and 5 small ones in the middle Rectangle[] rect = new Rectangle[2]; rect[0] = new Rectangle(000, 000, 999, 499); rect[1] = new Rectangle(000, 499, 999, 500); string viewName = "SCHotSpot" + _viewCounter; ViewAndLayoutItem viewAndLayoutItem = (ViewAndLayoutItem)groupItem.AddChild(viewName, Kind.View, FolderType.No); viewAndLayoutItem.Layout = rect; // Insert cameras Dictionary <String, String> cameraViewItemProperties = new Dictionary <string, string>(); cameraViewItemProperties.Add("CameraId", cameraFQID != null?cameraFQID.ObjectId.ToString():Guid.Empty.ToString()); viewAndLayoutItem.InsertBuiltinViewItem(0, ViewAndLayoutItem.CameraBuiltinId, cameraViewItemProperties); viewAndLayoutItem.Save(); tempGroupItem.PropertiesModified(); // Create floating window MultiWindowCommandData data = new MultiWindowCommandData(); List <Item> screens = Configuration.Instance.GetItemsByKind(Kind.Screen); FQID screenFQID = GetFirstOfKind(screens, Kind.Screen); if (screenFQID != null) { data.Screen = screenFQID; List <Item> windows = Configuration.Instance.GetItemsByKind(Kind.Window); FQID windowFQID = GetFirstOfKind(windows, Kind.Window); if (windowFQID != null) { data.Window = windowFQID; foreach (Item view in groupItem.GetChildren()) { if (view.Name.Equals(viewName)) { data.View = view.FQID; data.X = 200; data.Y = 200; data.Height = 400; data.Width = 200; _myMessageInProgress = true; data.MultiWindowCommand = MultiWindowCommand.OpenFloatingWindow; Collection <object> result = EnvironmentManager.Instance.SendMessage(new VideoOS.Platform.Messaging.Message(MessageId.SmartClient.MultiWindowCommand, data), null, null); if (result != null && result.Count > 0) { _myWindowFQID2 = result[0] as FQID; // Save the Window FQID for next updates } _myMessageInProgress = false; return(null); } } } } } return(null); }
/// <summary> /// This method does all what is required to create a group and viewlayout. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void OnCreateClick(object sender, EventArgs e) { List <Item> groups = ClientControl.Instance.GetViewGroupItems(); if (groups.Count < 1) { throw new MIPException("You do not have access to any groups?"); } // Use the first one (Private group) ConfigItem topGroupItem = (ConfigItem)groups[0]; ConfigItem groupItem = (ConfigItem)FindName("ScInsertGroup", topGroupItem.GetChildren()); if (groupItem == null) { // Make a group groupItem = topGroupItem.AddChild("ScInsertGroup", Kind.View, FolderType.UserDefined); } // Figure out a name that does not exist List <Item> currentViews = groupItem.GetChildren(); int ix = 0; while (FindName("ScInsertLayout-" + ix, currentViews) != null) { ix++; } // Build a layout with one wide ViewItem at top and buttom, and 6 small once in the middle Rectangle[] rect = new Rectangle[7]; rect[0] = new Rectangle(000, 000, 999, 399); rect[1] = new Rectangle(000, 399, 199, 199); rect[2] = new Rectangle(199, 399, 199, 199); rect[3] = new Rectangle(399, 399, 199, 199); rect[4] = new Rectangle(599, 399, 199, 199); rect[5] = new Rectangle(799, 399, 199, 199); rect[6] = new Rectangle(000, 599, 999, 399); ViewAndLayoutItem viewAndLayoutItem = (ViewAndLayoutItem)groupItem.AddChild("ScInsertLayout-" + ix, Kind.View, FolderType.No); viewAndLayoutItem.Layout = rect; viewAndLayoutItem.Properties["Created"] = DateTime.Now.ToLongDateString(); // Insert a HTML ViewItem at top Dictionary <String, String> properties = new Dictionary <string, string>(); properties.Add("URL", "www.google.com"); // Next 4 for a HTML item properties.Add("HideNavigationbar", "true"); properties.Add("Scaling", "3"); // fit in 800x600 //properties.Add("Addscript", ""); // In case you need to add script viewAndLayoutItem.InsertBuiltinViewItem(0, ViewAndLayoutItem.HTMLBuiltinId, properties); // Find any camera and insert in index 1 properties = new Dictionary <string, string>(); properties.Add("CameraId", JustGetAnyCamera(Configuration.Instance.GetItems(ItemHierarchy.SystemDefined))); viewAndLayoutItem.InsertBuiltinViewItem(1, ViewAndLayoutItem.CameraBuiltinId, properties); // Insert a hotspot ViewItem at bottom -- index 6 properties = new Dictionary <string, string>(); viewAndLayoutItem.InsertBuiltinViewItem(6, ViewAndLayoutItem.HotspotBuiltinId, properties); viewAndLayoutItem.Save(); topGroupItem.PropertiesModified(); List <Item> windows = Configuration.Instance.GetItemsByKind(Kind.Window); FQID mainWindowFQID = new FQID(new ServerId("SC", "", 0, Guid.Empty)); if (windows.Count > 0) { mainWindowFQID = windows[0].FQID; } EnvironmentManager.Instance.SendMessage(new Message(MessageId.SmartClient.MultiWindowCommand, new MultiWindowCommandData() { MultiWindowCommand = MultiWindowCommand.SetViewInWindow, View = viewAndLayoutItem.FQID, Window = mainWindowFQID })); }