Hi,
I’m creating a view in my plugin that works as follows:
On one side, I load all the existing views into a combo box, and when a view is selected from that combo, I replicate it in a Grid below the combo.
The view I’m using for this test has 4 cameras. I manage to generate the view with those 4 layouts, and the cameras are inserted into them, but the problem is that they don’t connect.
I don’t know what I’m doing wrong.
namespace ImotionPlugin.Client.ViewItems.ViewLoader
{
public partial class ImotionViewItemLoaderlWpfUserControl : ViewItemWpfUserControl
{
private readonly ImotionViewItemLoaderManager \_viewItemManager;
private static List<ViewMilestone> \_listViews = new List<ViewMilestone>();
public ImotionViewItemLoaderlWpfUserControl(ImotionViewItemLoaderManager viewItemManager)
{
\_viewItemManager = viewItemManager;
InitializeComponent();
}
public override void Init()
{
\_listViews = MilestoneViewLoader.Instance.GetViewSmartClient();
foreach (var view in \_listViews)
{
ViewComboBox.Items.Add(new ComboBoxItem { Content = [view.Name](https://view.Name), Tag = view });
}
}
private void ViewComboBox\_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (ViewComboBox.SelectedItem != null)
{
var item = (ComboBoxItem)ViewComboBox.SelectedItem;
var view = (ViewMilestone)item.Tag;
LoadView(view.Fqid.ObjectId, item.Content.ToString());
}
}
private void LoadView(Guid viewId, string nameView)
{
ViewGrid.Children.Clear();
var viewLayoutItem = Configuration.Instance.GetItem(viewId, Kind.View) as ViewAndLayoutItem;
if (viewLayoutItem != null)
{
List<ViewControlItem> viewControlItems = new List<ViewControlItem>();
List<Item> items = new List<Item>();
List<Rectangle> viewLayout = new List<Rectangle>(viewLayoutItem.Layout);
int idx = 0;
var hijos = viewLayoutItem.GetChildren();
foreach (var item in viewLayoutItem.GetChildren())
{
if (item.FQID.Kind == Kind.ViewItemInstance)
{
if (item.Properties.TryGetValue("CameraId", out string cameraIdStr) && Guid.TryParse(cameraIdStr, out Guid cameraId))
{
var camara = Configuration.Instance.GetItem(cameraId, Kind.Camera);
if (camara != null)
{
var control = new LiveCameraViewItem(camara.FQID, idx);
viewControlItems.Add(control);
idx++;
}
}
}
}
var viewControl = ClientControl.Instance.GenerateViewControl(viewControlItems, viewLayout);
ViewGrid.Children.Add(viewControl);
ViewGrid.UpdateLayout();
}
}
public override void Close()
{
}
}
public class LiveCameraViewItem : ViewControlItem
{
public LiveCameraViewItem(FQID cameraFQID, int indexInViewLayout)
: base(indexInViewLayout)
{
FQID = cameraFQID;
ViewItemTypeId = Kind.Camera;
Properties = new Dictionary<string, string>
{
{ "CameraId", cameraFQID.ObjectId.ToString() },
{ "ViewItemPluginId", "VideoOS.View.Item.Live" } // Plugin de cámara en vivo
};
}
public new FQID FQID { get; }
public new Dictionary<string, string> Properties { get; }
}
}