[libcamera-devel] [PATCH 4/4] qcam: MainWindow: Replace cameraCombo_ with cameraSelectDialog
Umang Jain
umang.jain at ideasonboard.com
Thu Aug 4 14:24:07 CEST 2022
Hi Utkarsh,
Thank you for the patch.
On 8/3/22 23:25, Utkarsh Tiwari via libcamera-devel wrote:
> Replace the cameraCombo_ on the toolbar with a QPushButton which
> displays the cameraSelectDialog. This would allow the user to view
> information about the camera when switching.
>
> The QPushButton text is set to the camera Id currently in use.
>
> Signed-off-by: Utkarsh Tiwari <utkarsh02t at gmail.com>
> ---
> src/qcam/main_window.cpp | 47 ++++++++++++++++++++++------------------
> src/qcam/main_window.h | 5 +++--
> 2 files changed, 29 insertions(+), 23 deletions(-)
>
> diff --git a/src/qcam/main_window.cpp b/src/qcam/main_window.cpp
> index 81fa3e60..2a9dcc1e 100644
> --- a/src/qcam/main_window.cpp
> +++ b/src/qcam/main_window.cpp
> @@ -198,14 +198,11 @@ int MainWindow::createToolbars()
> connect(action, &QAction::triggered, this, &MainWindow::quit);
>
> /* Camera selector. */
> - cameraCombo_ = new QComboBox();
> - connect(cameraCombo_, QOverload<int>::of(&QComboBox::activated),
> + cameraSelectButton_ = new QPushButton;
> + connect(cameraSelectButton_, &QPushButton::clicked,
> this, &MainWindow::switchCamera);
>
> - for (const std::shared_ptr<Camera> &cam : cm_->cameras())
> - cameraCombo_->addItem(QString::fromStdString(cam->id()));
> -
> - toolbar_->addWidget(cameraCombo_);
> + toolbar_->addWidget(cameraSelectButton_);
>
> toolbar_->addSeparator();
>
> @@ -265,14 +262,18 @@ void MainWindow::updateTitle()
> * Camera Selection
> */
>
> -void MainWindow::switchCamera(int index)
> +void MainWindow::switchCamera()
> {
> /* Get and acquire the new camera. */
> - const auto &cameras = cm_->cameras();
> - if (static_cast<unsigned int>(index) >= cameras.size())
> + std::string cameraId = chooseCamera();
Can this be renamed to better clarify that the string belongs to a
(newly) chosen camera?
> + if (cameraId.empty())
> return;
>
> - const std::shared_ptr<Camera> &cam = cameras[index];
> + /* Don't try the current camera. */
Are you missing something here, I find the comment a bit confusing. Is
this similar,
/* Is user selects the current camera, return */
> + if (cameraId == camera_->id())
> + return;
> +
> + const std::shared_ptr<Camera> &cam = cm_->get(cameraId);
>
> if (cam->acquire()) {
> qInfo() << "Failed to acquire camera" << cam->id().c_str();
> @@ -290,6 +291,9 @@ void MainWindow::switchCamera(int index)
> camera_->release();
> camera_ = cam;
>
> + /* Set the QPushButton text with current camera. */
> + cameraSelectButton_->setText(QString::fromStdString(camera_->id()));
> +
> startStopAction_->setChecked(true);
> }
>
> @@ -356,10 +360,16 @@ std::string MainWindow::chooseCamera()
> * When the Qdialog starts, the QComboBox would have the first
> * camera's Id as its currentText.
> */
> - if (cm_->cameras().size())
> - currentCamera = cm_->cameras()[0];
> - else
> - currentCamera = nullptr;
> + if (!isCapturing_) {
> + if (cm_->cameras().size())
> + currentCamera = cm_->cameras()[0];
> + else
> + currentCamera = nullptr;
same comment from previous patch on nullptr
Other than that,
Reviewed-by: Umang Jain <umang.jain at ideasonboard.com>
> + } else {
> + int cameraIndex = cameraIdComboBox_->findText(QString::fromStdString(camera_->id()));
> + cameraIdComboBox_->setCurrentIndex(cameraIndex);
> + currentCamera = camera_;
> + }
>
> if (currentCamera)
> updateCameraInfo(currentCamera);
> @@ -428,8 +438,8 @@ int MainWindow::openCamera()
> return -EBUSY;
> }
>
> - /* Set the combo-box entry with the currently selected Camera. */
> - cameraCombo_->setCurrentText(QString::fromStdString(cameraName));
> + /* Set the QPushButton text with the currently selected Camera. */
> + cameraSelectButton_->setText(QString::fromStdString(cameraName));
>
> return 0;
> }
> @@ -695,7 +705,6 @@ void MainWindow::processHotplug(HotplugEvent *e)
>
> if (event == HotplugEvent::HotPlug) {
> QString cameraId = QString::fromStdString(camera->id());
> - cameraCombo_->addItem(cameraId);
>
> /* Update cameraIdCombox_ to include the new camera. */
> if (cameraIdComboBox_)
> @@ -706,16 +715,12 @@ void MainWindow::processHotplug(HotplugEvent *e)
> toggleCapture(false);
> camera_->release();
> camera_.reset();
> - cameraCombo_->setCurrentIndex(0);
> }
>
> if (cameraIdComboBox_) {
> int cameraIdIndex = cameraIdComboBox_->findText(QString::fromStdString(camera_->id()));
> cameraIdComboBox_->removeItem(cameraIdIndex);
> }
> -
> - int camIndex = cameraCombo_->findText(QString::fromStdString(camera->id()));
> - cameraCombo_->removeItem(camIndex);
> }
> }
>
> diff --git a/src/qcam/main_window.h b/src/qcam/main_window.h
> index 3a1c6156..b15f9409 100644
> --- a/src/qcam/main_window.h
> +++ b/src/qcam/main_window.h
> @@ -25,6 +25,7 @@
> #include <QMutex>
> #include <QObject>
> #include <QPointer>
> +#include <QPushButton>
> #include <QQueue>
> #include <QStringList>
> #include <QTimer>
> @@ -62,7 +63,7 @@ private Q_SLOTS:
> void quit();
> void updateTitle();
>
> - void switchCamera(int index);
> + void switchCamera();
> void toggleCapture(bool start);
>
> void saveImageAs();
> @@ -96,7 +97,7 @@ private:
> /* UI elements */
> QToolBar *toolbar_;
> QAction *startStopAction_;
> - QComboBox *cameraCombo_;
> + QPushButton *cameraSelectButton_;
> QAction *saveRaw_;
> ViewFinder *viewfinder_;
>
More information about the libcamera-devel
mailing list