1
/****************************************************************************
3
** Copyright (C) 1992-2005 Trolltech AS. All rights reserved.
5
** This file is part of the designer application of the Qt Toolkit.
7
** This file may be distributed under the terms of the Q Public License
8
** as defined by Trolltech AS of Norway and appearing in the file
9
** LICENSE.QPL included in the packaging of this file.
11
** This file may be distributed and/or modified under the terms of the
12
** GNU General Public License version 2 as published by the Free Software
13
** Foundation and appearing in the file LICENSE.GPL included in the
14
** packaging of this file.
16
** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
17
** information about Qt Commercial License Agreements.
18
** See http://www.trolltech.com/qpl/ for QPL licensing information.
19
** See http://www.trolltech.com/gpl/ for GPL licensing information.
21
** Contact info@trolltech.com if any conditions of this licensing are
24
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
25
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
27
****************************************************************************/
29
#include "saveformastemplate.h"
30
#include "qdesigner_settings.h"
32
#include <QtCore/QFile>
33
#include <QtGui/QFileDialog>
34
#include <QtGui/QMessageBox>
36
#include <QtDesigner/abstractformwindow.h>
38
SaveFormAsTemplate::SaveFormAsTemplate(QDesignerFormWindowInterface *formWindow, QWidget *parent)
39
: QDialog(parent, Qt::Sheet),
40
m_formWindow(formWindow)
44
ui.templateNameEdit->setText(formWindow->mainContainer()->objectName());
45
ui.templateNameEdit->selectAll();
47
ui.templateNameEdit->setFocus();
49
QDesignerSettings settings;
50
QStringList paths = settings.formTemplatePaths();
51
ui.categoryCombo->addItems(paths);
52
ui.categoryCombo->addItem(tr("Add path..."));
53
m_addPathIndex = ui.categoryCombo->count() - 1;
54
connect(ui.templateNameEdit, SIGNAL(textChanged(QString)),
55
this, SLOT(updateOKButton(QString)));
56
connect(ui.categoryCombo, SIGNAL(activated(int)), this, SLOT(checkToAddPath(int)));
59
SaveFormAsTemplate::~SaveFormAsTemplate()
63
void SaveFormAsTemplate::on_okButton_clicked()
65
QString templateFileName = ui.categoryCombo->currentText() + QLatin1Char('/') + ui.templateNameEdit->text();
66
if (!templateFileName.endsWith(QLatin1String(".ui")))
67
templateFileName.append(QLatin1String(".ui"));
68
QFile file(templateFileName);
71
if (QMessageBox::information(m_formWindow, tr("Template Exists"),
72
tr("A template with the name %1 already exits\n"
73
"Do you want overwrite the template?").arg(ui.templateNameEdit->text()),
74
tr("Overwrite Template"), tr("Cancel"), QString(), 1, 1) == 1) {
79
while (!file.open(QFile::WriteOnly)) {
80
if (QMessageBox::information(m_formWindow, tr("Open Error"),
81
tr("There was an error opening template %1 for writing. Reason: %2").arg(ui.templateNameEdit->text()).arg(file.errorString()),
82
tr("Try again"), tr("Cancel"), QString(), 0, 1) == 1) {
87
QByteArray ba = m_formWindow->contents().toUtf8();
88
while (file.write(ba) != ba.size()) {
89
if (QMessageBox::information(m_formWindow, tr("Write Error"),
90
tr("There was an error writing the template %1 to disk. Reason: %2").arg(ui.templateNameEdit->text()).arg(file.errorString()),
91
tr("Try again"), tr("Cancel"), QString(), 0, 1) == 1) {
98
// update the list of places too...
100
for (int i = 0; i < m_addPathIndex; ++i)
101
sl << ui.categoryCombo->itemText(i);
103
QDesignerSettings().setFormTemplatePaths(sl);
108
void SaveFormAsTemplate::on_cancelButton_clicked()
113
void SaveFormAsTemplate::updateOKButton(const QString &str)
115
ui.okButton->setEnabled(!str.isEmpty());
118
void SaveFormAsTemplate::checkToAddPath(int itemIndex)
120
if (itemIndex != m_addPathIndex)
123
QString dir = QFileDialog::getExistingDirectory(this,
124
tr("Pick a directory to save templates in"));
126
ui.categoryCombo->setCurrentIndex(0);
130
ui.categoryCombo->insertItem(m_addPathIndex, dir);
131
ui.categoryCombo->setCurrentIndex(m_addPathIndex);