~ubuntu-branches/ubuntu/maverick/scribus-ng/maverick-backports

« back to all changes in this revision

Viewing changes to scribus/plugins/saveastemplateplugin/satdialog.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Oleksandr Moskalenko
  • Date: 2009-02-09 09:25:18 UTC
  • mfrom: (5.1.4 sid)
  • Revision ID: james.westby@ubuntu.com-20090209092518-iqsxmh3pjspgrdyd
Tags: 1.3.5.dfsg~svn20090208-2
debian/control: Use "type-handling -n arm,armel,armeb any" to generate the
list of architectures to build on.

Show diffs side-by-side

added added

removed removed

Lines of Context:
8
8
 *   Riku Leino, tsoots@gmail.com                                          *
9
9
 ***************************************************************************/
10
10
#include "satdialog.h"
11
 
#include "satdialog.moc"
12
11
#include "scribusapi.h"
 
12
 
 
13
#include <QXmlDefaultHandler>
 
14
#include <QXmlSimpleReader>
 
15
 
13
16
#include "prefsmanager.h"
14
 
#include <prefsfile.h>
15
 
 
16
 
extern QPixmap SCRIBUS_API loadIcon(QString nam);
17
 
 
18
 
satdialog::satdialog(QWidget* parent, QString tmplName, int pageW, int pageH) : QDialog(parent, "satdialog", true)
19
 
{
20
 
        setCaption( tr("Save as Template"));
21
 
        setIcon(loadIcon("AppIcon.png"));
 
17
#include "prefsfile.h"
 
18
#include "scpaths.h"
 
19
#include "scribuscore.h"
 
20
#include "util_icon.h"
 
21
 
 
22
class CategoriesReader : public QXmlDefaultHandler
 
23
{
 
24
public:
 
25
        QStringList categories;
 
26
        virtual bool startElement(const QString&, const QString&, const QString &name, const QXmlAttributes &attrs)
 
27
        {
 
28
                if (name == QLatin1String("template"))
 
29
                {
 
30
                        QString cat = attrs.value(QLatin1String("category"));
 
31
                        if (!categories.contains(cat))
 
32
                                categories.append(cat);
 
33
                }
 
34
                return true;
 
35
        };
 
36
};
 
37
 
 
38
satdialog::satdialog(QWidget* parent, QString tmplName, int pageW, int pageH) : QDialog(parent)
 
39
{
 
40
        setupUi(this);
 
41
        setModal(true);
 
42
        setWindowTitle( tr("Save as Template"));
 
43
        setWindowIcon(loadIcon("AppIcon.png"));
22
44
        readPrefs();
23
45
        
24
 
        QBoxLayout* blo = new QVBoxLayout(this,0,5,"blo");
25
 
        QWidget* top = new QWidget(this);
26
 
        top->setMaximumHeight(5);
27
 
        middle = new QWidget(this);
28
 
        middle->setMinimumWidth(250);
29
 
        QBoxLayout* middlelo = new QHBoxLayout(middle,0,5);
30
 
        QWidget* left = new QWidget(middle);
31
 
        center = new QWidget(middle);
32
 
        QWidget* right = new QWidget(middle);
33
 
        middlelo->addWidget(left);
34
 
        middlelo->addWidget(center);
35
 
        middlelo->addWidget(right);
36
 
        QWidget* bottom = new QWidget(this);
37
 
        bottom->setMinimumHeight(40);
38
 
        bottom->setMaximumHeight(40);
39
 
        blo->addWidget(top);
40
 
        blo->addWidget(middle);
41
 
        blo->addWidget(bottom);
42
 
        
43
 
        QBoxLayout* mlo = new QVBoxLayout(center,0,5);
44
 
        mlo->insertSpacing(0,5);
45
 
        nameLabel = new QLabel( tr("Name"),center);
46
 
        mlo->addWidget(nameLabel);
47
 
        nameEdit = new QLineEdit(center);
48
46
        nameEdit->setText(tmplName);
49
 
        mlo->addWidget(nameEdit);
50
 
        
51
 
        catsLabel = new QLabel( tr("Category"), center);
52
 
        mlo->addWidget(catsLabel);
53
 
        catsCombo = new QComboBox(center,"catsCombo");
54
 
        mlo->addWidget(catsCombo);
55
47
        setupCategories();
56
 
        
57
 
        psizeLabel = new QLabel( tr("Page Size"),center);
58
 
        mlo->addWidget(psizeLabel);
59
 
        psizeEdit = new QLineEdit(center);
60
 
        mlo->addWidget(psizeEdit);
61
48
        setupPageSize(pageW, pageH);
62
 
        
63
 
        colorsLabel = new QLabel( tr("Colors"),center);
64
 
        mlo->addWidget(colorsLabel);
65
 
        colorsEdit = new QLineEdit(center);
66
 
        mlo->addWidget(colorsEdit);
67
 
        
68
 
        descrLabel = new QLabel( tr("Description"),center);
69
 
        mlo->addWidget(descrLabel);
70
 
        descrEdit = new QTextEdit(center);
71
 
        mlo->addWidget(descrEdit);
72
 
        
73
 
        usageLabel = new QLabel( tr("Usage"),center);
74
 
        mlo->addWidget(usageLabel);
75
 
        usageEdit = new QTextEdit(center);
76
 
        mlo->addWidget(usageEdit);
77
 
        
78
 
        authorLabel = new QLabel( tr("Author"),center);
79
 
        mlo->addWidget(authorLabel);
80
 
        authorEdit = new QLineEdit(center);
81
 
        mlo->addWidget(authorEdit);
82
49
        authorEdit->setText(author);
83
 
        
84
 
        emailLabel = new QLabel( tr("Email"),center);
85
 
        mlo->addWidget(emailLabel);
86
 
        emailEdit = new QLineEdit(center);
87
 
        mlo->addWidget(emailEdit);
88
50
        emailEdit->setText(email);
89
 
        
90
 
        mlo->addStretch(10);
91
 
        mlo->insertSpacing(-1,5);
92
 
        QBoxLayout* tlo = new QHBoxLayout(bottom,0,5);
93
 
        detailButton = new QPushButton( tr("More Details"), bottom);
94
 
        tlo->addWidget(detailButton);
95
 
        tlo->addStretch(10);
96
 
        okButton = new QPushButton( tr("OK"),bottom);
97
 
        okButton->setDefault(true);
98
 
        tlo->addWidget(okButton);
99
 
        tlo->insertSpacing(0,5);
100
 
        tlo->insertSpacing(-1,5);
101
 
        
102
 
        if (isFullDetail) 
103
 
                fullDetail();
104
 
        else
105
 
                minimumDetail();
106
51
 
107
52
        // Slots and signals connections
108
 
        connect(detailButton, SIGNAL(clicked()), this, SLOT(detailClicked()));
109
 
        connect(okButton, SIGNAL(clicked()), this, SLOT(accept()));
110
 
        
111
 
}
112
 
 
113
 
void satdialog::detailClicked()
114
 
{
115
 
        if (isFullDetail) {
116
 
                minimumDetail();
117
 
        } else {
118
 
                fullDetail();
119
 
        }
120
 
        isFullDetail = !isFullDetail;
121
 
}
122
 
 
123
 
void satdialog::fullDetail() 
124
 
{
125
 
        detailButton->setText( tr("Less Details"));
126
 
        psizeLabel->setHidden(false);
127
 
        psizeLabel->setSizePolicy(QSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred));
128
 
        catsLabel->setHidden(false);
129
 
        catsLabel->setSizePolicy(QSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred));
130
 
        colorsLabel->setHidden(false);
131
 
        colorsLabel->setSizePolicy(QSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred));
132
 
        descrLabel->setHidden(false);
133
 
        descrLabel->setSizePolicy(QSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred));
134
 
        usageLabel->setHidden(false);
135
 
        usageLabel->setSizePolicy(QSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred));
136
 
        authorLabel->setHidden(false);
137
 
        authorLabel->setSizePolicy(QSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred));
138
 
        emailLabel->setHidden(false);
139
 
        emailLabel->setSizePolicy(QSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred));
140
 
        psizeEdit->setHidden(false);
141
 
        psizeEdit->setSizePolicy(QSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred));
142
 
        catsCombo->setHidden(false);
143
 
        catsCombo->setSizePolicy(QSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed));
144
 
        colorsEdit->setHidden(false);
145
 
        colorsEdit->setSizePolicy(QSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred));
146
 
        descrEdit->setHidden(false);
147
 
        descrEdit->setSizePolicy(QSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred));
148
 
        usageEdit->setHidden(false);
149
 
        usageEdit->setSizePolicy(QSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred));
150
 
        authorEdit->setHidden(false);
151
 
        authorEdit->setSizePolicy(QSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred));
152
 
        emailEdit->show();
153
 
        emailEdit->setSizePolicy(QSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred));
154
 
        layout()->activate();
155
 
//      resize(minimumSizeHint());
156
 
        setFixedSize(minimumSizeHint());
157
 
}
158
 
 
159
 
void satdialog::minimumDetail()
160
 
{
161
 
        detailButton->setText( tr("More Details"));
162
 
        catsLabel->hide();
163
 
        catsLabel->setSizePolicy(QSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored));
164
 
        psizeLabel->hide();
165
 
        psizeLabel->setSizePolicy(QSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored));
166
 
        colorsLabel->hide();
167
 
        colorsLabel->setSizePolicy(QSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored));
168
 
        descrLabel->hide();
169
 
        descrLabel->setSizePolicy(QSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored));
170
 
        usageLabel->hide();
171
 
        usageLabel->setSizePolicy(QSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored));
172
 
        authorLabel->hide();
173
 
        authorLabel->setSizePolicy(QSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored));
174
 
        emailLabel->hide();
175
 
        emailLabel->setSizePolicy(QSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored));
176
 
        catsCombo->hide();
177
 
        catsCombo->setSizePolicy(QSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored));
178
 
        psizeEdit->hide();
179
 
        psizeEdit->setSizePolicy(QSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored));
180
 
        colorsEdit->hide();
181
 
        colorsEdit->setSizePolicy(QSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored));
182
 
        descrEdit->hide();
183
 
        descrEdit->setSizePolicy(QSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored));
184
 
        usageEdit->hide();
185
 
        usageEdit->setSizePolicy(QSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored));
186
 
        authorEdit->hide();
187
 
        authorEdit->setSizePolicy(QSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored));
188
 
        emailEdit->hide();
189
 
        emailEdit->setSizePolicy(QSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored));
190
 
 
191
 
        layout()->activate();
192
 
        setFixedSize(minimumSizeHint());
193
 
 
194
 
        adjustSize();  // TODO Get rid of this
195
 
}
196
 
 
197
 
void satdialog::readPrefs() 
 
53
        connect(detailButton, SIGNAL(stateChanged(int)), this, SLOT(detailClicked(int)));
 
54
}
 
55
 
 
56
void satdialog::detailClicked(int state)
 
57
{
 
58
        isFullDetail = state == Qt::Checked;
 
59
 
 
60
        psizeLabel->setVisible(isFullDetail);
 
61
        catsLabel->setVisible(isFullDetail);
 
62
        colorsLabel->setVisible(isFullDetail);
 
63
        descrLabel->setVisible(isFullDetail);
 
64
        usageLabel->setVisible(isFullDetail);
 
65
        authorLabel->setVisible(isFullDetail);
 
66
        emailLabel->setVisible(isFullDetail);
 
67
        psizeEdit->setVisible(isFullDetail);
 
68
        catsCombo->setVisible(isFullDetail);
 
69
        colorsEdit->setVisible(isFullDetail);
 
70
        descrEdit->setVisible(isFullDetail);
 
71
        usageEdit->setVisible(isFullDetail);
 
72
        authorEdit->setVisible(isFullDetail);
 
73
        emailEdit->setVisible(isFullDetail);
 
74
}
 
75
 
 
76
void satdialog::readPrefs()
198
77
{
199
78
        prefs = PrefsManager::instance()->prefsFile->getPluginContext("satemplate");
200
79
        author = prefs->get("author", "");
201
80
        email = prefs->get("email", "");
202
81
        isFullDetail = prefs->getBool("isFullDetail", false);
 
82
        detailClicked(isFullDetail ? Qt::Checked : Qt::Unchecked);
 
83
        detailButton->setCheckState(isFullDetail ? Qt::Checked : Qt::Unchecked);
203
84
}
204
85
 
205
86
void satdialog::writePrefs()
209
90
        prefs->set("isFullDetail", isFullDetail);
210
91
}
211
92
 
 
93
QString satdialog::findTemplateXml(QString dir)
 
94
{
 
95
        QString lang = ScCore->getGuiLanguage();
 
96
        QString tmp = dir + "/template." + lang + ".xml";
 
97
        if (QFile::exists(tmp))
 
98
                return tmp;
 
99
 
 
100
        if (lang.length() > 2)
 
101
        {
 
102
                tmp = dir + "/template." + lang.left(2) + ".xml";
 
103
                if (QFile::exists(tmp))
 
104
                        return tmp;
 
105
        }
 
106
        return dir + "/template.xml";   
 
107
}
 
108
 
 
109
void satdialog::addCategories(const QString& dir)
 
110
{
 
111
        // Read categories from the dir itself
 
112
        QString tmplFile = findTemplateXml(dir);
 
113
        if (QFile::exists(tmplFile))
 
114
                readCategories(tmplFile);
 
115
 
 
116
        // And from all the subdirectories. template.xml file is only searched one dir level deeper than the dir
 
117
        QDir tmpldir(dir);
 
118
        if (tmpldir.exists())
 
119
        {
 
120
                tmpldir.setFilter(QDir::Dirs);
 
121
                QStringList dirs = tmpldir.entryList();
 
122
                for (int i = 0; i < dirs.size(); ++i)
 
123
                {
 
124
                        if ((dirs[i] != ".") && (dirs[i] != "..")) 
 
125
                        {
 
126
                                tmplFile = findTemplateXml(dir + "/" + dirs[i]);
 
127
                                if (QFile::exists(tmplFile))
 
128
                                        readCategories(tmplFile);
 
129
                        }
 
130
                }
 
131
        }
 
132
}
 
133
 
 
134
void satdialog::readCategories(const QString& fileName)
 
135
{
 
136
        QFile file(fileName);
 
137
        CategoriesReader catReader;
 
138
        QXmlInputSource  xmlSource(&file);
 
139
        QXmlSimpleReader reader;
 
140
        reader.setContentHandler(&catReader);
 
141
        reader.parse(&xmlSource);
 
142
        QStringList& categories = catReader.categories;
 
143
        for (int i = 0; i < categories.count(); ++i)
 
144
        {
 
145
                QString category = categories.at(i);
 
146
                if (!category.isEmpty() && !cats.contains(category))
 
147
                        cats.insert(category, category);
 
148
        }
 
149
}
 
150
 
212
151
void satdialog::setupCategories() 
213
152
{
214
153
        // en will be used in template.xml and it will be then replaced with the lang when used for users
215
154
        // to get the categories in their language.
216
 
        QString* en = new QString("Newsletters"); QString* lang = new QString(QObject::tr("Newsletters"));
217
 
        cats.push_back(new Pair(en,lang));
218
 
        en = new QString("Brochures"); lang = new QString(QObject::tr("Brochures"));
219
 
        cats.push_back(new Pair(en,lang));
220
 
        en = new QString("Catalogs"); lang = new QString(QObject::tr("Catalogs"));
221
 
        cats.push_back(new Pair(en,lang));
222
 
        en = new QString("Flyers"); lang = new QString(QObject::tr("Flyers"));
223
 
        cats.push_back(new Pair(en,lang));
224
 
        en = new QString("Signs"); lang = new QString(QObject::tr("Signs"));
225
 
        cats.push_back(new Pair(en,lang));
226
 
        en = new QString("Cards"); lang = new QString(QObject::tr("Cards"));
227
 
        cats.push_back(new Pair(en,lang));
228
 
        en = new QString("Letterheads"); lang = new QString(QObject::tr("Letterheads"));
229
 
        cats.push_back(new Pair(en,lang));
230
 
        en = new QString("Envelopes"); lang = new QString(QObject::tr("Envelopes"));
231
 
        cats.push_back(new Pair(en,lang));
232
 
        en = new QString("Business Cards"); lang = new QString(QObject::tr("Business Cards"));
233
 
        cats.push_back(new Pair(en,lang));
234
 
        en = new QString("Calendars"); lang = new QString(QObject::tr("Calendars"));
235
 
        cats.push_back(new Pair(en,lang));
236
 
        en = new QString("Advertisements"); lang = new QString(QObject::tr("Advertisements"));
237
 
        cats.push_back(new Pair(en,lang));
238
 
        en = new QString("Labels"); lang = new QString(QObject::tr("Labels"));
239
 
        cats.push_back(new Pair(en,lang));
240
 
        en = new QString("Menus"); lang = new QString(QObject::tr("Menus"));
241
 
        cats.push_back(new Pair(en,lang));
242
 
        en = new QString("Programs"); lang = new QString(QObject::tr("Programs"));
243
 
        cats.push_back(new Pair(en,lang));
244
 
        en = new QString("PDF Forms"); lang = new QString(QObject::tr("PDF Forms"));
245
 
        cats.push_back(new Pair(en,lang));
246
 
        en = new QString("PDF Presentations"); lang = new QString(QObject::tr("PDF Presentations"));
247
 
        cats.push_back(new Pair(en,lang));
248
 
        en = new QString("Magazines"); lang = new QString(QObject::tr("Magazines"));
249
 
        cats.push_back(new Pair(en,lang));
250
 
        en = new QString("Posters"); lang = new QString(QObject::tr("Posters"));
251
 
        cats.push_back(new Pair(en,lang));
252
 
        en = new QString("Announcements"); lang = new QString(QObject::tr("Announcements"));
253
 
        cats.push_back(new Pair(en,lang));
254
 
        en = new QString("Text Documents"); lang = new QString(QObject::tr("Text Documents"));
255
 
        cats.push_back(new Pair(en,lang));
256
 
        en = new QString("Folds"); lang = new QString(QObject::tr("Folds"));
257
 
        cats.push_back(new Pair(en,lang));
258
 
        en = new QString("Media Cases"); lang = new QString(QObject::tr("Media Cases"));
259
 
        cats.push_back(new Pair(en,lang));
260
 
        en = new QString("Own Templates"); lang = new QString(QObject::tr("Own Templates"));
261
 
        cats.push_back(new Pair(en,lang));
262
 
        
263
 
        QStringList* list = new QStringList();
264
 
        for (uint i = 0; i < cats.size(); ++i)
265
 
                list->append(*cats[i]->second);
266
 
        list->sort();
267
 
        QStringList list2 = *list;
268
 
        catsCombo->insertStringList(list2);
269
 
        catsCombo->insertItem("",0);
 
155
        cats.insert(QString("Newsletters"), QObject::tr("Newsletters"));
 
156
        cats.insert(QString("Brochures")  , QObject::tr("Brochures"));
 
157
        cats.insert(QString("Catalogs")   , QObject::tr("Catalogs"));
 
158
        cats.insert(QString("Flyers")     , QObject::tr("Flyers"));
 
159
        cats.insert(QString("Signs")      , QObject::tr("Signs"));
 
160
        cats.insert(QString("Cards")      , QObject::tr("Cards"));
 
161
        cats.insert(QString("Letterheads"), QObject::tr("Letterheads"));
 
162
        cats.insert(QString("Envelopes")  , QObject::tr("Envelopes"));
 
163
        cats.insert(QString("Business Cards"), QObject::tr("Business Cards"));
 
164
        cats.insert(QString("Calendars")  , QObject::tr("Calendars"));
 
165
        cats.insert(QString("Advertisements"), QObject::tr("Advertisements"));
 
166
        cats.insert(QString("Labels")     , QObject::tr("Labels"));
 
167
        cats.insert(QString("Menus")      , QObject::tr("Menus"));
 
168
        cats.insert(QString("Programs")   , QObject::tr("Programs"));
 
169
        cats.insert(QString("PDF Forms")  , QObject::tr("PDF Forms"));
 
170
        cats.insert(QString("PDF Presentations") , QObject::tr("PDF Presentations"));
 
171
        cats.insert(QString("Magazines")  , QObject::tr("Magazines"));
 
172
        cats.insert(QString("Posters")    , QObject::tr("Posters"));
 
173
        cats.insert(QString("Announcements") , QObject::tr("Announcements"));
 
174
        cats.insert(QString("Text Documents"), QObject::tr("Text Documents"));
 
175
        cats.insert(QString("Folds")        , QObject::tr("Folds"));
 
176
        cats.insert(QString("Media Cases")  , QObject::tr("Media Cases"));
 
177
        cats.insert(QString("Own Templates"), QObject::tr("Own Templates"));
 
178
 
 
179
        QString scribusHome  = ScPaths::getApplicationDataDir();
 
180
        QString scribusShare = ScPaths::instance().templateDir();
 
181
        
 
182
        addCategories(scribusHome + "/templates");
 
183
        addCategories(scribusShare); 
 
184
        
 
185
        QStringList list;
 
186
        QMap<QString, QString>::ConstIterator it;
 
187
        for (it = cats.constBegin(); it != cats.constEnd(); ++it)
 
188
                list.append(it.value());
 
189
        list.sort();
 
190
        catsCombo->addItem("");
 
191
        catsCombo->addItems(list);
270
192
        catsCombo->setEditable(true);
271
193
}
272
194
 
319
241
satdialog::~satdialog()
320
242
{
321
243
        writePrefs();
322
 
        for(uint i = 0; i < cats.size(); ++i)
323
 
                delete cats[i];
324
 
 
325
244
}