diff --git a/src/cam.cpp b/src/cam.cpp index 65cdc247404afe6c815141cae60f5a5cef02000a..0984587ac4b382712d16c4a3afa454202552a3be 100644 --- a/src/cam.cpp +++ b/src/cam.cpp @@ -47,7 +47,6 @@ Cam::~Cam() // close() should be called automatically, when the last shared_ptr to the camera is destroyed } - QString Cam::name() { if( _name.isEmpty() ) @@ -215,6 +214,17 @@ QString Cam::stateToString(const State& state) } } +void Cam::toggleOpenClose() +{ + if( _state == opened ) + close(); + else if ( _state == closed ) + open(); + else + error("toggleOpenClose: cam state is not closed or opened"); + +} + void Cam::onCameraDisconnected() { _state = disconnected; diff --git a/src/cam.h b/src/cam.h index 4a82eb6d243b7c0f20edf0555464a7d23fd669de..cfb9e8d53b46fb2d619dc3bcfacf22a5709e596d 100644 --- a/src/cam.h +++ b/src/cam.h @@ -40,6 +40,7 @@ public: QString name(); State state() const; static QString stateToString(const State&); + void toggleOpenClose(); bool open(); void close(); diff --git a/src/camobserver.cpp b/src/camobserver.cpp index c24a2be5b3b0d72fd8a5b748578b46b9270f0020..b1c29bfe7b936357c01e411ff04fca89c4479119 100644 --- a/src/camobserver.cpp +++ b/src/camobserver.cpp @@ -16,7 +16,7 @@ void CamObserver::CameraListChanged(CameraPtr pCam, UpdateTriggerType reason) } else // UpdateTriggerOpenStateChanged { - emit cameraOpenStateChanged(pCam); + emit cameraStateChanged(pCam); qDebug() << __LINE__ << "-" << __PRETTY_FUNCTION__ << ""; } } diff --git a/src/camobserver.h b/src/camobserver.h index 1a740b925d415696b49427d4456c83806309ec67..b0e4065390576c12ae8d67b629b19955a1da22c2 100644 --- a/src/camobserver.h +++ b/src/camobserver.h @@ -13,7 +13,7 @@ class CamObserver : public QObject, public ICameraListObserver signals: void cameraListChanged(); - void cameraOpenStateChanged(CameraPtr); + void cameraStateChanged(CameraPtr); public: void CameraListChanged(CameraPtr, UpdateTriggerType); diff --git a/src/core.cpp b/src/core.cpp index 9f0110cc686f9feed6f04b168bcc7e39bdd9a8db..43ab6cdfd21a2cee3a13191122755a7f23249084 100644 --- a/src/core.cpp +++ b/src/core.cpp @@ -39,6 +39,8 @@ void Core::init() auto camObserver = new CamObserver(); connect( camObserver, SIGNAL(cameraListChanged()), this, SLOT(listCams()) ); //listcams calls updateCams! + connect( camObserver, SIGNAL(cameraStateChanged(CameraPtr)), this, SLOT(updateCamState(CameraPtr)) ); // + f(_sys.RegisterCameraListObserver(ICameraListObserverPtr(camObserver)), "register cam observer"); listCams(); @@ -81,10 +83,8 @@ void Core::updateCameras() } if (!found) { - _cameras.push_back(std::make_shared<Cam>(vcam)); //create Cam() from CameraPtr vcam - print("cam connected"); - //vcam->GetName(), threadsPerCam + print({"cam connected:",_cameras.back()->name()}); } } @@ -103,22 +103,28 @@ void Core::updateCameras() } if (!found) { + print({"cam disconnected",(*it)->name()}); it = _cameras.erase(it); - print("cam disconnected"); } else { ++it; } } - - // Update states of cameras - // for (const auto& cam : _cameras) { - // Update state of 'cam' based on corresponding camera's state in 'vmbcameras' - // } - } // now ~Camera() should be called on removed cams. >> camObserver +void Core::updateCamState(CameraPtr vcam) +{ + for (const auto& cam : _cameras) + { + if (cam->getCameraPtr() == vcam) + { + cam->toggleOpenClose(); + break; + } + } +} + // update + print camlist void Core::listCams() { diff --git a/src/core.h b/src/core.h index 4e7aec9e6637adec01d8c955ac9b0815e3504a69..bd1f9a241eadd3be008313b7813cfaaae7f54034 100644 --- a/src/core.h +++ b/src/core.h @@ -23,6 +23,7 @@ public: public slots: void listCams(); + void updateCamState(CameraPtr); bool openCam(); CamPtr cam(const unsigned long &idx=-1);