~oif-team/ubuntu/natty/qt4-x11/xi2.1

« back to all changes in this revision

Viewing changes to tools/designer/src/designer/saveformastemplate.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Adam Conrad
  • Date: 2005-08-24 04:09:09 UTC
  • Revision ID: james.westby@ubuntu.com-20050824040909-xmxe9jfr4a0w5671
Tags: upstream-4.0.0
ImportĀ upstreamĀ versionĀ 4.0.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/****************************************************************************
 
2
**
 
3
** Copyright (C) 1992-2005 Trolltech AS. All rights reserved.
 
4
**
 
5
** This file is part of the designer application of the Qt Toolkit.
 
6
**
 
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.
 
10
**
 
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.
 
15
**
 
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.
 
20
**
 
21
** Contact info@trolltech.com if any conditions of this licensing are
 
22
** not clear to you.
 
23
**
 
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.
 
26
**
 
27
****************************************************************************/
 
28
 
 
29
#include "saveformastemplate.h"
 
30
#include "qdesigner_settings.h"
 
31
 
 
32
#include <QtCore/QFile>
 
33
#include <QtGui/QFileDialog>
 
34
#include <QtGui/QMessageBox>
 
35
 
 
36
#include <QtDesigner/abstractformwindow.h>
 
37
 
 
38
SaveFormAsTemplate::SaveFormAsTemplate(QDesignerFormWindowInterface *formWindow, QWidget *parent)
 
39
    : QDialog(parent, Qt::Sheet),
 
40
      m_formWindow(formWindow)
 
41
{
 
42
    ui.setupUi(this);
 
43
 
 
44
    ui.templateNameEdit->setText(formWindow->mainContainer()->objectName());
 
45
    ui.templateNameEdit->selectAll();
 
46
 
 
47
    ui.templateNameEdit->setFocus();
 
48
 
 
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)));
 
57
}
 
58
 
 
59
SaveFormAsTemplate::~SaveFormAsTemplate()
 
60
{
 
61
}
 
62
 
 
63
void SaveFormAsTemplate::on_okButton_clicked()
 
64
{
 
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);
 
69
 
 
70
    if (file.exists()) {
 
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) {
 
75
            return;
 
76
        }
 
77
    }
 
78
 
 
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) {
 
83
            return;
 
84
        }
 
85
    }
 
86
 
 
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) {
 
92
                file.close();
 
93
                file.remove();
 
94
                return;
 
95
            }
 
96
            file.reset();
 
97
    }
 
98
    // update the list of places too...
 
99
    QStringList sl;
 
100
    for (int i = 0; i < m_addPathIndex; ++i)
 
101
        sl << ui.categoryCombo->itemText(i);
 
102
 
 
103
    QDesignerSettings().setFormTemplatePaths(sl);
 
104
 
 
105
    accept();
 
106
}
 
107
 
 
108
void SaveFormAsTemplate::on_cancelButton_clicked()
 
109
{
 
110
    reject();
 
111
}
 
112
 
 
113
void SaveFormAsTemplate::updateOKButton(const QString &str)
 
114
{
 
115
    ui.okButton->setEnabled(!str.isEmpty());
 
116
}
 
117
 
 
118
void SaveFormAsTemplate::checkToAddPath(int itemIndex)
 
119
{
 
120
    if (itemIndex != m_addPathIndex)
 
121
        return;
 
122
 
 
123
    QString dir = QFileDialog::getExistingDirectory(this,
 
124
                                                    tr("Pick a directory to save templates in"));
 
125
    if (dir.isEmpty()) {
 
126
        ui.categoryCombo->setCurrentIndex(0);
 
127
        return;
 
128
    }
 
129
 
 
130
    ui.categoryCombo->insertItem(m_addPathIndex, dir);
 
131
    ui.categoryCombo->setCurrentIndex(m_addPathIndex);
 
132
    ++m_addPathIndex;
 
133
}