diff options
Diffstat (limited to 'src/plugins/docker/dockerdevicewidget.cpp')
-rw-r--r-- | src/plugins/docker/dockerdevicewidget.cpp | 141 |
1 files changed, 40 insertions, 101 deletions
diff --git a/src/plugins/docker/dockerdevicewidget.cpp b/src/plugins/docker/dockerdevicewidget.cpp index 259325274c0..0ec608d4538 100644 --- a/src/plugins/docker/dockerdevicewidget.cpp +++ b/src/plugins/docker/dockerdevicewidget.cpp @@ -33,22 +33,9 @@ DockerDeviceWidget::DockerDeviceWidget(const IDevice::Ptr &device) auto dockerDevice = device.dynamicCast<DockerDevice>(); QTC_ASSERT(dockerDevice, return); - m_data = dockerDevice->data(); + DockerDeviceSettings *deviceSettings = static_cast<DockerDeviceSettings *>(device->settings()); - auto repoLabel = new QLabel(Tr::tr("Repository:")); - m_repoLineEdit = new QLineEdit; - m_repoLineEdit->setText(m_data.repo); - m_repoLineEdit->setEnabled(false); - - auto tagLabel = new QLabel(Tr::tr("Tag:")); - m_tagLineEdit = new QLineEdit; - m_tagLineEdit->setText(m_data.tag); - m_tagLineEdit->setEnabled(false); - - auto idLabel = new QLabel(Tr::tr("Image ID:")); - m_idLineEdit = new QLineEdit; - m_idLineEdit->setText(m_data.imageId); - m_idLineEdit->setEnabled(false); + using namespace Layouting; auto daemonStateLabel = new QLabel(Tr::tr("Daemon state:")); m_daemonReset = new QToolButton; @@ -67,58 +54,6 @@ DockerDeviceWidget::DockerDeviceWidget(const IDevice::Ptr &device) DockerApi::recheckDockerDaemon(); }); - m_keepEntryPoint = new QCheckBox(Tr::tr("Do not modify entry point")); - m_keepEntryPoint->setToolTip( - Tr::tr("Prevents modifying the entry point of the image. Enable only if " - "the image starts into a shell.")); - m_keepEntryPoint->setChecked(m_data.keepEntryPoint); - m_keepEntryPoint->setEnabled(true); - - connect(m_keepEntryPoint, &QCheckBox::toggled, this, [this, dockerDevice](bool on) { - m_data.keepEntryPoint = on; - dockerDevice->setData(m_data); - }); - - m_enableLldbFlags = new QCheckBox(Tr::tr("Enable flags needed for LLDB")); - m_enableLldbFlags->setToolTip(Tr::tr("Adds the following flags to the container " - "to allow LLDB to run: " - "--cap-add=SYS_PTRACE --security-opt seccomp=unconfined")); - m_enableLldbFlags->setChecked(m_data.enableLldbFlags); - m_enableLldbFlags->setEnabled(true); - - connect(m_enableLldbFlags, &QCheckBox::toggled, this, [this, dockerDevice](bool on) { - m_data.enableLldbFlags = on; - dockerDevice->setData(m_data); - }); - - m_runAsOutsideUser = new QCheckBox(Tr::tr("Run as outside user")); - m_runAsOutsideUser->setToolTip(Tr::tr("Uses user ID and group ID of the user running Qt Creator " - "in the docker container.")); - m_runAsOutsideUser->setChecked(m_data.useLocalUidGid); - m_runAsOutsideUser->setEnabled(HostOsInfo::isAnyUnixHost()); - - connect(m_runAsOutsideUser, &QCheckBox::toggled, this, [this, dockerDevice](bool on) { - m_data.useLocalUidGid = on; - dockerDevice->setData(m_data); - }); - - auto clangDLabel = new QLabel(Tr::tr("Clangd Executable:")); - - m_clangdExecutable = new PathChooser(); - m_clangdExecutable->setExpectedKind(PathChooser::ExistingCommand); - m_clangdExecutable->setHistoryCompleter("Docker.ClangdExecutable.History"); - m_clangdExecutable->setAllowPathFromDevice(true); - m_clangdExecutable->setFilePath(m_data.clangdExecutable); - m_clangdExecutable->setValidationFunction( - [chooser = m_clangdExecutable](FancyLineEdit *, QString *error) { - return Utils::checkClangdVersion(chooser->filePath(), error); - }); - - connect(m_clangdExecutable, &PathChooser::rawPathChanged, this, [this, dockerDevice] { - m_data.clangdExecutable = m_clangdExecutable->filePath(); - dockerDevice->setData(m_data); - }); - auto pathListLabel = new InfoLabel(Tr::tr("Paths to mount:")); pathListLabel->setAdditionalToolTip(Tr::tr("Source directory list should not be empty.")); @@ -126,7 +61,7 @@ DockerDeviceWidget::DockerDeviceWidget(const IDevice::Ptr &device) m_pathsListEdit->setPlaceholderText(Tr::tr("Host directories to mount into the container")); m_pathsListEdit->setToolTip(Tr::tr("Maps paths in this list one-to-one to the " "docker container.")); - m_pathsListEdit->setPathList(m_data.mounts); + m_pathsListEdit->setPathList(deviceSettings->mounts()); m_pathsListEdit->setMaximumHeight(100); m_pathsListEdit->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); @@ -136,11 +71,14 @@ DockerDeviceWidget::DockerDeviceWidget(const IDevice::Ptr &device) }; markupMounts(); - connect(m_pathsListEdit, &PathListEditor::changed, this, [this, dockerDevice, markupMounts] { - m_data.mounts = m_pathsListEdit->pathList(); - dockerDevice->setData(m_data); - markupMounts(); - }); + connect(m_pathsListEdit, + &PathListEditor::changed, + this, + [this, dockerDevice, markupMounts, deviceSettings] { + deviceSettings->mounts.setVolatileValue(m_pathsListEdit->pathList()); + // dockerDevice->setData(m_data); + markupMounts(); + }); auto logView = new QTextBrowser; connect(&m_kitItemDetector, &KitDetector::logOutput, @@ -177,31 +115,32 @@ DockerDeviceWidget::DockerDeviceWidget(const IDevice::Ptr &device) return paths; }; - connect(autoDetectButton, &QPushButton::clicked, this, - [this, logView, dockerDevice, searchPaths] { - logView->clear(); - dockerDevice->updateContainerAccess(); + connect(autoDetectButton, + &QPushButton::clicked, + this, + [this, logView, dockerDevice, searchPaths, deviceSettings] { + logView->clear(); + dockerDevice->updateContainerAccess(); - const FilePath clangdPath = dockerDevice->filePath("clangd") - .searchInPath({}, - FilePath::AppendToPath, - [](const FilePath &clangd) { - return Utils::checkClangdVersion(clangd); - }); + const FilePath clangdPath + = dockerDevice->filePath("clangd") + .searchInPath({}, FilePath::AppendToPath, [](const FilePath &clangd) { + return Utils::checkClangdVersion(clangd); + }); - if (!clangdPath.isEmpty()) - m_clangdExecutable->setFilePath(clangdPath); + if (!clangdPath.isEmpty()) + deviceSettings->clangdExecutable.setValue(clangdPath); - m_kitItemDetector.autoDetect(dockerDevice->id().toString(), searchPaths()); + m_kitItemDetector.autoDetect(dockerDevice->id().toString(), searchPaths()); - if (DockerApi::instance()->dockerDaemonAvailable().value_or(false) == false) - logView->append(Tr::tr("Docker daemon appears to be stopped.")); - else - logView->append(Tr::tr("Docker daemon appears to be running.")); + if (DockerApi::instance()->dockerDaemonAvailable().value_or(false) == false) + logView->append(Tr::tr("Docker daemon appears to be stopped.")); + else + logView->append(Tr::tr("Docker daemon appears to be running.")); - logView->append(Tr::tr("Detection complete.")); - updateDaemonStateTexts(); - }); + logView->append(Tr::tr("Detection complete.")); + updateDaemonStateTexts(); + }); connect(undoAutoDetectButton, &QPushButton::clicked, this, [this, logView, device] { logView->clear(); @@ -234,19 +173,19 @@ DockerDeviceWidget::DockerDeviceWidget(const IDevice::Ptr &device) }; Form { - repoLabel, m_repoLineEdit, br, - tagLabel, m_tagLineEdit, br, - idLabel, m_idLineEdit, br, + deviceSettings->repo, br, + deviceSettings->tag, br, + deviceSettings->imageId, br, daemonStateLabel, m_daemonReset, m_daemonState, br, - m_runAsOutsideUser, br, - m_keepEntryPoint, br, - m_enableLldbFlags, br, - clangDLabel, m_clangdExecutable, br, + deviceSettings->useLocalUidGid, br, + deviceSettings->keepEntryPoint, br, + deviceSettings->enableLldbFlags, br, + deviceSettings->clangdExecutable, br, Column { pathListLabel, m_pathsListEdit, }, br, - (dockerDevice->isAutoDetected() ? Column {} : std::move(detectionControls)), + If { dockerDevice->isAutoDetected(), {}, {detectionControls} }, noMargin, }.attachTo(this); // clang-format on |