Skip to content

File SpinnakerGUI_WPF.h

File List > GUI > SpinnakerGUI_WPF.h

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.
//=============================================================================

#ifndef FLIR_SPINNAKER_GUI_WPF_H
#define FLIR_SPINNAKER_GUI_WPF_H

#include <Spinnaker.h>

namespace Spinnaker
{
    namespace GUI_WPF
    {
        typedef void (*ClickedEventCallback)(
            bool isCamera,
            Spinnaker::CameraPtr* pCamera,
            Spinnaker::InterfacePtr* pInterface,
            Spinnaker::SystemPtr* pSystem,
            bool isSystem);

        typedef void (*FirmwareUpdateEventCallback)(
            bool isStarting,
            bool isFinished,
            bool isSuccessful,
            const char* pErrorMessage,
            Spinnaker::CameraPtr* pCamera);

        typedef void (*IPConfigEventCallback)(bool isStarting, bool isFinished, Spinnaker::CameraPtr* pCamera);

        struct DeviceInformationStruct
        {
            bool isCamera;
            bool isSystem;
            Spinnaker::CameraPtr* pCamera;
            Spinnaker::InterfacePtr* pInterface;
            Spinnaker::SystemPtr* pSystem;
        };

        class SPINNAKER_API CameraSelectionWindow
        {

          public:
            CameraSelectionWindow();

            ~CameraSelectionWindow();

            void Show();

            bool ShowModal(DeviceInformationStruct* devInfoStruct);

            void Refresh();

            void Hide();

            void SetTitle(std::string title);

            std::string GetTitle();

            void RegisterDoubleClickedCallback(ClickedEventCallback pCallBackFunc);

            void RegisterSingleClickedCallback(ClickedEventCallback pCallBackFunc);

            void RegisterStartStopContextMenuCallback(ClickedEventCallback pCallBackFunc);

            void RegisterConfigureDeviceContextMenuCallback(ClickedEventCallback pCallBackFunc);

            void RegisterFirmwareUpdateStartingCallback(FirmwareUpdateEventCallback pCallBackFunc);

            void RegisterFirmwareUpdateFinishedCallback(FirmwareUpdateEventCallback pCallBackFunc);

            void RegisterDisconnectDeviceMenuCallback(ClickedEventCallback pCallBackFunc);

            void RegisterIPConfigStartingCallback(IPConfigEventCallback pCallBackFunc);

            void RegisterIPConfigFinishedCallback(IPConfigEventCallback pCallBackFunc);

            void UnregisterDoubleClickedCallback(ClickedEventCallback pCallBackFunc);

            void UnregisterSingleClickedCallback(ClickedEventCallback pCallBackFunc);

            void UnregisterStartStopContextMenuCallback(ClickedEventCallback pCallBackFunc);

            void UnregisterConfigureDeviceContextMenuCallback(ClickedEventCallback pCallBackFunc);

            void UnregisterFirmwareUpdateStartingCallback(FirmwareUpdateEventCallback pCallBackFunc);

            void UnregisterFirmwareUpdateFinishedCallback(FirmwareUpdateEventCallback pCallBackFunc);

            void UnregisterDisconnectDeviceMenuCallback(ClickedEventCallback pCallBackFunc);

            void UnregisterIPConfigStartingCallback(IPConfigEventCallback pCallBackFunc);

            void UnregisterIPConfigFinishedCallback(IPConfigEventCallback pCallBackFunc);

          private:
            struct CamSelectionData; // Forward declaration

            CamSelectionData* m_pCamSelectionData;
        };

        class SPINNAKER_API PropertyGridWindow
        {
          public:
            PropertyGridWindow();

            ~PropertyGridWindow();

            bool Connect(Spinnaker::CameraPtr* pCam);

            void Disconnect();

            bool IsConnected();

            void RefreshFeatures();

            void Show();

            void ShowModal();

            void Hide();

            bool IsVisible();

            void SetTitle(std::string title);

            std::string GetTitle();

          private:
            struct PropertyGridData; // Forward declaration

            PropertyGridData* m_pPropertyGridData;
        };

        class SPINNAKER_API ImageDrawingWindow
        {
          public:
            ImageDrawingWindow();

            ~ImageDrawingWindow();

            bool Connect(Spinnaker::CameraPtr* pCam);

            void Disconnect();

            bool IsConnected();

            void Start();

            void Stop();

            void Snap();

            bool IsStreaming();

            void Show();

            void ShowModal();

            void Hide();

            bool IsVisible();

            void SetTitle(std::string title);

            std::string GetTitle();

          private:
            struct ImageStreamingData; // Forward declaration

            ImageStreamingData* m_pImageStreamingData;
        };

        class SPINNAKER_API GUIFactory
        {
          public:
            GUIFactory();

            ~GUIFactory();

            bool ConnectGUILibrary(Spinnaker::CameraPtr* camera);

            void DisconnectGUILibrary();

            bool IsConnected();

            PropertyGridWindow* GetPropertyGridWindow();

            CameraSelectionWindow* GetCameraSelectionWindow();

            ImageDrawingWindow* GetImageDrawingWindow();

            int GetNumOfDialogs();

            std::list<std::string> GetDialogNameList();

            void ShowDialogByName(std::string dialogName);

            void ShowDialogByIndex(int index);

            void HideDialogByName(std::string dialogName);

            void HideDialogByIndex(int index);

            int GetNumOfControls();

            std::list<std::string> GetControlNameList();

          private:
            struct GUIFactoryData; // Forward declaration

            GUIFactoryData* m_pGUIFactoryData;
        };

    } // namespace GUI_WPF
} // namespace Spinnaker

#endif // FLIR_SPINNAKER_GUI_WPF_H