11#include <newformwidget_p.h>
13#include <QtDesigner/abstractformeditor.h>
15#include <QtWidgets/qapplication.h>
16#include <QtWidgets/qboxlayout.h>
17#include <QtWidgets/qpushbutton.h>
18#include <QtWidgets/qdialogbuttonbox.h>
19#include <QtWidgets/qmenu.h>
20#include <QtWidgets/qcheckbox.h>
21#include <QtWidgets/qframe.h>
22#include <QtWidgets/qmessagebox.h>
24#include <QtGui/qaction.h>
25#include <QtGui/qactiongroup.h>
27#include <QtCore/qdir.h>
28#include <QtCore/qfileinfo.h>
29#include <QtCore/qdebug.h>
30#include <QtCore/qtemporaryfile.h>
34using namespace Qt::StringLiterals;
37 : QDialog(parentWidget, Qt::WindowTitleHint | Qt::WindowSystemMenuHint | Qt::WindowCloseButtonHint),
39 m_newFormWidget(QDesignerNewFormWidgetInterface::createNewFormWidget(workbench->core())),
40 m_workbench(workbench),
41 m_chkShowOnStartup(
new QCheckBox(tr(
"Show this Dialog on Startup"))),
42 m_createButton(
new QPushButton(QApplication::translate(
"NewForm",
"C&reate",
nullptr))),
43 m_recentButton(
new QPushButton(QApplication::translate(
"NewForm",
"Recent",
nullptr)))
45 setWindowTitle(tr(
"New Form"));
48 auto *vBoxLayout =
new QVBoxLayout(
this);
50 connect(m_newFormWidget, &QDesignerNewFormWidgetInterface::templateActivated,
51 this, &
NewForm::slotTemplateActivated);
52 connect(m_newFormWidget, &QDesignerNewFormWidgetInterface::currentTemplateChanged,
53 this, &
NewForm::slotCurrentTemplateChanged);
54 vBoxLayout->addWidget(m_newFormWidget);
56 auto *horizontalLine =
new QFrame;
57 horizontalLine->setFrameShape(QFrame::HLine);
58 horizontalLine->setFrameShadow(QFrame::Sunken);
59 vBoxLayout->addWidget(horizontalLine);
62 vBoxLayout->addWidget(m_chkShowOnStartup);
64 m_buttonBox = createButtonBox();
65 vBoxLayout->addWidget(m_buttonBox);
68 slotCurrentTemplateChanged(m_newFormWidget->hasCurrentTemplate());
71QDialogButtonBox *
NewForm::createButtonBox()
74 auto *buttonBox =
new QDialogButtonBox;
75 buttonBox->addButton(QApplication::translate(
"NewForm",
"&Close",
nullptr),
76 QDialogButtonBox::RejectRole);
77 buttonBox->addButton(m_createButton, QDialogButtonBox::AcceptRole);
78 buttonBox->addButton(QApplication::translate(
"NewForm",
"&Open...",
nullptr),
79 QDialogButtonBox::ActionRole);
80 buttonBox->addButton(m_recentButton, QDialogButtonBox::ActionRole);
82 auto *recentFilesMenu =
new QMenu(tr(
"&Recent Forms"), m_recentButton);
85 for (
auto *action : recentActions) {
86 recentFilesMenu->addAction(action);
87 connect(action, &QAction::triggered,
this, &NewForm::recentFileChosen);
89 m_recentButton->setMenu(recentFilesMenu);
90 connect(buttonBox, &QDialogButtonBox::clicked,
this, &NewForm::slotButtonBoxClicked);
100void NewForm::recentFileChosen()
102 auto *action = qobject_cast<QAction *>(sender());
103 if (action && action->objectName() !=
"__qt_action_clear_menu_"_L1)
107void NewForm::slotCurrentTemplateChanged(
bool templateSelected)
109 if (templateSelected) {
110 m_createButton->setEnabled(
true);
111 m_createButton->setDefault(
true);
113 m_createButton->setEnabled(
false);
117void NewForm::slotTemplateActivated()
119 m_createButton->animateClick();
122void NewForm::slotButtonBoxClicked(QAbstractButton *btn)
124 switch (m_buttonBox->buttonRole(btn)) {
125 case QDialogButtonBox::RejectRole:
128 case QDialogButtonBox::ActionRole:
129 if (btn != m_recentButton) {
135 case QDialogButtonBox::AcceptRole: {
136 QString errorMessage;
137 if (openTemplate(&errorMessage)) {
140 QMessageBox::warning(
this, tr(
"Read error"), errorMessage);
149bool NewForm::openTemplate(QString *ptrToErrorMessage)
151 const QString contents = m_newFormWidget->currentTemplate(ptrToErrorMessage);
152 if (contents.isEmpty())
155 QString tempPattern = QDir::tempPath();
156 if (!tempPattern.endsWith(QDir::separator()))
157 tempPattern += QDir::separator();
158 tempPattern +=
"XXXXXX.ui"_L1;
159 QTemporaryFile tempFormFile(tempPattern);
161 tempFormFile.setAutoRemove(
true);
162 if (!tempFormFile.open()) {
163 *ptrToErrorMessage = tr(
"A temporary form file could not be created in %1: %2")
164 .arg(QDir::toNativeSeparators(QDir::tempPath()), tempFormFile.errorString());
167 const QString tempFormFileName = tempFormFile.fileName();
168 tempFormFile.write(contents.toUtf8());
169 if (!tempFormFile.flush()) {
170 *ptrToErrorMessage = tr(
"The temporary form file %1 could not be written: %2")
171 .arg(QDir::toNativeSeparators(tempFormFileName), tempFormFile.errorString());
174 tempFormFile.close();
175 return m_workbench->openTemplate(tempFormFileName, m_fileName, ptrToErrorMessage);
178QImage
NewForm::grabForm(QDesignerFormEditorInterface *core,
180 const QString &workingDir,
183 return qdesigner_internal::NewFormWidget::grabForm(core, file, workingDir, dp);
bool openForm(QWidget *parent)
QActionGroup * recentFilesActions() const
void setShowNewFormOnStartup(bool showIt)
QDesignerSettings(QDesignerFormEditorInterface *core)
bool showNewFormOnStartup() const
QDesignerActions * actionManager() const
QDesignerFormEditorInterface * core() const
Combined button and popup list for selecting options.
Auxiliary methods to store/retrieve settings.