aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/docker/dockerdevicewidget.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/docker/dockerdevicewidget.cpp')
-rw-r--r--src/plugins/docker/dockerdevicewidget.cpp141
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