Skip to content

File CameraSelectionControl.xaml.cs

File List > CameraSelection > CameraSelectionControl.xaml.cs

Go to the documentation of this file

//=============================================================================
// Copyright (c) 2026 FLIR Integrated Imaging Solutions, Inc. All Rights Reserved.
//
// This software is the confidential and proprietary information of FLIR
// Integrated Imaging Solutions, Inc. ("Confidential Information"). You
// shall not disclose such Confidential Information and shall use it only in
// accordance with the terms of the license agreement you entered into
// with FLIR Integrated Imaging Solutions, Inc. (FLIR).
//
// FLIR MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE
// SOFTWARE, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
// PURPOSE, OR NON-INFRINGEMENT. FLIR SHALL NOT BE LIABLE FOR ANY DAMAGES
// SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING
// THIS SOFTWARE OR ITS DERIVATIVES.
//=============================================================================

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using SpinnakerNET;
using SpinnakerNET.GenApi;

namespace SpinnakerNET.GUI
{
    namespace WPFControls
    {


        public partial class CameraSelectionControl : UserControl, IDisposable, ISettings
        {
            private CameraSelectionInternal _camSelCtrl;
            private bool m_isDisposed = false;
            PersistentSettings _settings;
            bool _applyingSettings = false;
            bool _initializing = false;

            public bool DisplayAllAdapters
            {
                get
                {
                    return _camSelCtrl.DisplayAllAdapters;
                }
                set
                {
                    _camSelCtrl.DisplayAllAdapters = value;

                    // Save settings
                    SaveSettings();
                }
            }

            public bool MultiDeviceSelection
            {
                get
                {
                    return _camSelCtrl.MultiDeviceSelect;
                }
                set
                {
                    _camSelCtrl.MultiDeviceSelect = value;

                    // Save settings
                    SaveSettings();
                }
            }

            public void Dispose()
            {
                Dispose(true);
                GC.SuppressFinalize(this);
            }

            protected virtual void Dispose(bool disposing)
            {
                if (m_isDisposed)
                    return;

                if (disposing)
                {
                    _camSelCtrl.Dispose();
                }

                m_isDisposed = true;
            }

#region PUBLIC EVENTS

            public event CameraSelectionWindow.DeviceDoubleClickedEventHandler OnDeviceDoubleClicked;

            public event CameraSelectionWindow.DeviceClickedEventHandler OnDeviceClicked;
#endregion

            public CameraSelectionControl()
            {
                _initializing = true;

                InitializeComponent();

                _camSelCtrl = new CameraSelectionInternal();

                _camSelCtrl.OnDeviceDoubleClicked +=
                    new CameraSelectionWindow.DeviceDoubleClickedEventHandler(DeviceDoubleClicked);

                _camSelCtrl.OnDeviceClicked += new CameraSelectionWindow.DeviceClickedEventHandler(DeviceClicked);

                _camSelCtrl.OnSettingsChanged += CamSelCtrl_OnSettingsChanged;

                dock.Children.Add(_camSelCtrl);

                _settings = PersistentSettings.Instance;

                _initializing = false;
            }

            public void RegisterStartStopContextMenuEvent(CameraSelectionWindow.DeviceStartStopEventHandler handler)
            {
                _camSelCtrl.RegisterStartStopContextMenuEvent(handler);
            }

            public void RegisterConfigureDeviceContextMenuEvent(
                CameraSelectionWindow.DeviceSelectedToConfigHandler handler)
            {
                _camSelCtrl.RegisterConfigureDeviceContextMenuEvent(handler);
            }

            public void RegisterDisconnectDeviceMenuEvent(CameraSelectionWindow.DeviceDisconnectEventHandler handler)
            {
                _camSelCtrl.RegisterOnDeviceDisconnectCommandExecutedEvent(handler);
            }

            public void UnregisterStartStopContextMenuEvent(CameraSelectionWindow.DeviceStartStopEventHandler handler)
            {
                _camSelCtrl.UnregisterStartStopContextMenuEvent(handler);
            }

            public void UnregisterConfigureDeviceContextMenuEvent(
                CameraSelectionWindow.DeviceSelectedToConfigHandler handler)
            {
                _camSelCtrl.UnregisterConfigureDeviceContextMenuEvent(handler);
            }

            public void UnregisterDisconnectDeviceMenuEvent(CameraSelectionWindow.DeviceDisconnectEventHandler handler)
            {
                _camSelCtrl.UnregisterOnDeviceDisconnectCommandExecutedEvent(handler);
            }

            public void RegisterFirmwareUpdateStartingEvent(
                CameraSelectionWindow.DeviceFirmwareUpdateEventHandler handler)
            {
                _camSelCtrl.RegisterFirmwareUpdateStartingEvent(handler);
            }

            public void RegisterFirmwareUpdateFinishedEvent(
                CameraSelectionWindow.DeviceFirmwareUpdateEventHandler handler)
            {
                _camSelCtrl.RegisterFirmwareUpdateFinishedEvent(handler);
            }

            public void UnregisterFirmwareUpdateStartingEvent(
                CameraSelectionWindow.DeviceFirmwareUpdateEventHandler handler)
            {
                _camSelCtrl.UnregisterFirmwareUpdateStartingEvent(handler);
            }

            public void UnregisterFirmwareUpdateFinishedEvent(
                CameraSelectionWindow.DeviceFirmwareUpdateEventHandler handler)
            {
                _camSelCtrl.UnregisterFirmwareUpdateFinishedEvent(handler);
            }

            public void RegisterDriverSwitchStartingEvent(CameraSelectionWindow.DeviceDriverSwitchEventHandler handler)
            {
                _camSelCtrl.RegisterDriverSwitchStartingEvent(handler);
            }

            public void RegisterDriverSwitchFinishedEvent(CameraSelectionWindow.DeviceDriverSwitchEventHandler handler)
            {
                _camSelCtrl.RegisterDriverSwitchFinishedEvent(handler);
            }

            public void UnregisterDriverSwitchStartingEvent(
                CameraSelectionWindow.DeviceDriverSwitchEventHandler handler)
            {
                _camSelCtrl.UnregisterDriverSwitchStartingEvent(handler);
            }

            public void UnregisterDriverSwitchFinishedEvent(
                CameraSelectionWindow.DeviceDriverSwitchEventHandler handler)
            {
                _camSelCtrl.UnregisterDriverSwitchFinishedEvent(handler);
            }

            public void RegisterIPConfigStartingEvent(CameraSelectionWindow.DeviceIPConfigEventHandler handler)
            {
                _camSelCtrl.RegisterIPConfigStartingEvent(handler);
            }

            public void RegisterIPConfigFinishedEvent(CameraSelectionWindow.DeviceIPConfigEventHandler handler)
            {
                _camSelCtrl.RegisterIPConfigFinishedEvent(handler);
            }

            public void UnregisterIPConfigStartingEvent(CameraSelectionWindow.DeviceIPConfigEventHandler handler)
            {
                _camSelCtrl.UnregisterIPConfigStartingEvent(handler);
            }

            public void UnregisterIPConfigFinishedEvent(CameraSelectionWindow.DeviceIPConfigEventHandler handler)
            {
                _camSelCtrl.UnregisterIPConfigFinishedEvent(handler);
            }

            void DeviceClicked(object sender, CameraSelectionWindow.DeviceEventArgs args)
            {
                if (OnDeviceClicked != null)
                {
                    SpinnakerNET.GUI.CameraSelectionWindow.DeviceEventArgs publicArgs =
                        new SpinnakerNET.GUI.CameraSelectionWindow.DeviceEventArgs();
                    publicArgs.Camera = args.Camera;
                    publicArgs.Interface = args.Interface;
                    publicArgs.System = args.System;
                    publicArgs.IsCamera = args.IsCamera;
                    publicArgs.IsSystem = args.IsSystem;
                    OnDeviceClicked(this, publicArgs);
                }
            }

            void DeviceDoubleClicked(object sender, CameraSelectionWindow.DeviceEventArgs args)
            {
                if (OnDeviceDoubleClicked != null)
                {
                    SpinnakerNET.GUI.CameraSelectionWindow.DeviceEventArgs publicArgs =
                        new SpinnakerNET.GUI.CameraSelectionWindow.DeviceEventArgs();
                    publicArgs.Camera = args.Camera;
                    publicArgs.Interface = args.Interface;
                    publicArgs.System = args.System;
                    publicArgs.IsCamera = args.IsCamera;
                    publicArgs.IsSystem = args.IsSystem;
                    OnDeviceDoubleClicked(this, publicArgs);
                }
            }

            public void Refresh()
            {
                if (_camSelCtrl != null)
                {
                    _camSelCtrl.RefreshCameraList();
                }
            }

            public void HideToolbar()
            {
                _camSelCtrl.SetToolBarVisibility(false);
            }

            public void ShowToolbar()
            {
                _camSelCtrl.SetToolBarVisibility(true);
            }

            public static long GetInterfaceLinkSpeedFromCamera(StringNode camSerialNum)
            {
                return CameraSelectionInternal.GetInterfaceLinkSpeedFromCamera(camSerialNum);
            }

            public bool IsFirmwareUpdateInProgress()
            {
                return _camSelCtrl.IsFirmwareUpdateInProgress;
            }

            internal string GetDebugTimingInformation()
            {
                return _camSelCtrl.GetDebugTimingInformation();
            }

            public void ApplySettings(PersistentSettings settings)
            {
                try
                {
                    _applyingSettings = true;

                    DisplayAllAdapters = settings.CameraSelectionControlPersistentSettings.ShowAllAdapters;
                }
                catch (Exception ex)
                {
                    System.Windows.Forms.MessageBox.Show(
                        ex.Message,
                        "Problem Applying Settings",
                        System.Windows.Forms.MessageBoxButtons.OK,
                        System.Windows.Forms.MessageBoxIcon.Exclamation);
                }
                finally
                {
                    _applyingSettings = false;
                }
            }

            public void FetchSettings(PersistentSettings settings)
            {
                try
                {
                    settings.CameraSelectionControlPersistentSettings.ShowAllAdapters = DisplayAllAdapters;
                }
                catch (Exception ex)
                {
                    System.Windows.Forms.MessageBox.Show(
                        ex.Message,
                        "Problem Fetching Settings",
                        System.Windows.Forms.MessageBoxButtons.OK,
                        System.Windows.Forms.MessageBoxIcon.Exclamation);
                }
            }

            public void SaveSettings()
            {
                if (_initializing || _applyingSettings)
                {
                    return;
                }

                // Load persisted settings
                _settings.LoadPersistentSettings();

                // Update settings with latest config
                FetchSettings(_settings);

                // Persist to file
                _settings.SavePersistentSettings();
            }

            void CamSelCtrl_OnSettingsChanged()
            {
                SaveSettings();
            }
        }

    }
}