Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
templateoptionspage.cpp
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
3// Qt-Security score:significant reason:default
4
6#include "ui_templateoptionspage.h"
7
8#include <shared_settings_p.h>
9#include <iconloader_p.h>
10
11#include <QtDesigner/abstractformeditor.h>
12#include <abstractdialoggui_p.h>
13
15
16using namespace Qt::StringLiterals;
17
18namespace qdesigner_internal {
19
20// ----------------- TemplateOptionsWidget
21TemplateOptionsWidget::TemplateOptionsWidget(QDesignerFormEditorInterface *core, QWidget *parent) :
22 QWidget(parent),
23 m_core(core),
24 m_ui(new QT_PREPEND_NAMESPACE(qdesigner_internal)::Ui::TemplateOptionsWidget)
25{
26 m_ui->setupUi(this);
27
28 m_ui->m_addTemplatePathButton->setIcon(
29 qdesigner_internal::createIconSet("plus.png"_L1));
30 m_ui->m_removeTemplatePathButton->setIcon(
31 qdesigner_internal::createIconSet("minus.png"_L1));
32
33 connect(m_ui->m_templatePathListWidget, &QListWidget::itemSelectionChanged,
34 this, &TemplateOptionsWidget::templatePathSelectionChanged);
35 connect(m_ui->m_addTemplatePathButton, &QAbstractButton::clicked,
36 this, &TemplateOptionsWidget::addTemplatePath);
37 connect(m_ui->m_removeTemplatePathButton, &QAbstractButton::clicked,
38 this, &TemplateOptionsWidget::removeTemplatePath);
39}
40
42{
43 delete m_ui;
44}
45
47{
48 QStringList rc;
49 const int count = m_ui->m_templatePathListWidget->count();
50 for (int i = 0; i < count; i++) {
51 rc += m_ui->m_templatePathListWidget->item(i)->text();
52 }
53 return rc;
54}
55
56void TemplateOptionsWidget::setTemplatePaths(const QStringList &l)
57{
58 // add paths and select 0
59 m_ui->m_templatePathListWidget->clear();
60 if (l.isEmpty()) {
61 // disable button
62 templatePathSelectionChanged();
63 } else {
64 for (const auto &s : l)
65 m_ui->m_templatePathListWidget->addItem(s);
66 m_ui->m_templatePathListWidget->setCurrentItem(m_ui->m_templatePathListWidget->item(0));
67 }
68}
69
70void TemplateOptionsWidget::addTemplatePath()
71{
72 const QString templatePath = chooseTemplatePath(m_core, this);
73 if (templatePath.isEmpty())
74 return;
75
76 const auto existing
77 = m_ui->m_templatePathListWidget->findItems(templatePath, Qt::MatchExactly);
78 if (!existing.isEmpty())
79 return;
80
81 QListWidgetItem *newItem = new QListWidgetItem(templatePath);
82 m_ui->m_templatePathListWidget->addItem(newItem);
83 m_ui->m_templatePathListWidget->setCurrentItem(newItem);
84}
85
86void TemplateOptionsWidget::removeTemplatePath()
87{
88 const auto selectedPaths = m_ui->m_templatePathListWidget->selectedItems();
89 if (selectedPaths.isEmpty())
90 return;
91 delete selectedPaths.constFirst();
92}
93
94void TemplateOptionsWidget::templatePathSelectionChanged()
95{
96 const auto selectedPaths = m_ui->m_templatePathListWidget->selectedItems();
97 m_ui->m_removeTemplatePathButton->setEnabled(!selectedPaths.isEmpty());
98}
99
100QString TemplateOptionsWidget::chooseTemplatePath(QDesignerFormEditorInterface *core, QWidget *parent)
101{
102 QString rc = core->dialogGui()->getExistingDirectory(parent,
103 tr("Pick a directory to save templates in"));
104 if (rc.isEmpty())
105 return rc;
106
107 if (rc.endsWith(QDir::separator()))
108 rc.remove(rc.size() - 1, 1);
109 return rc;
110}
111
112// ----------------- TemplateOptionsPage
113TemplateOptionsPage::TemplateOptionsPage(QDesignerFormEditorInterface *core) :
114 m_core(core)
115{
116}
117
118QString TemplateOptionsPage::name() const
119{
120 //: Tab in preferences dialog
121 return QCoreApplication::translate("TemplateOptionsPage", "Template Paths");
122}
123
125{
126 m_widget = new TemplateOptionsWidget(m_core, parent);
127 m_initialTemplatePaths = QDesignerSharedSettings(m_core).additionalFormTemplatePaths();
128 m_widget->setTemplatePaths(m_initialTemplatePaths);
129 return m_widget;
130}
131
133{
134 if (m_widget) {
135 const QStringList newTemplatePaths = m_widget->templatePaths();
136 if (newTemplatePaths != m_initialTemplatePaths) {
137 QDesignerSharedSettings settings(m_core);
138 settings.setAdditionalFormTemplatePaths(newTemplatePaths);
139 m_initialTemplatePaths = newTemplatePaths;
140 }
141 }
142}
143
145{
146}
147}
148QT_END_NAMESPACE
friend class QWidget
Definition qpainter.h:432
Combined button and popup list for selecting options.
Auxiliary methods to store/retrieve settings.