8
8
* Riku Leino, tsoots@gmail.com *
9
9
***************************************************************************/
10
10
#include "satdialog.h"
11
#include "satdialog.moc"
12
11
#include "scribusapi.h"
13
#include <QXmlDefaultHandler>
14
#include <QXmlSimpleReader>
13
16
#include "prefsmanager.h"
14
#include <prefsfile.h>
16
extern QPixmap SCRIBUS_API loadIcon(QString nam);
18
satdialog::satdialog(QWidget* parent, QString tmplName, int pageW, int pageH) : QDialog(parent, "satdialog", true)
20
setCaption( tr("Save as Template"));
21
setIcon(loadIcon("AppIcon.png"));
17
#include "prefsfile.h"
19
#include "scribuscore.h"
20
#include "util_icon.h"
22
class CategoriesReader : public QXmlDefaultHandler
25
QStringList categories;
26
virtual bool startElement(const QString&, const QString&, const QString &name, const QXmlAttributes &attrs)
28
if (name == QLatin1String("template"))
30
QString cat = attrs.value(QLatin1String("category"));
31
if (!categories.contains(cat))
32
categories.append(cat);
38
satdialog::satdialog(QWidget* parent, QString tmplName, int pageW, int pageH) : QDialog(parent)
42
setWindowTitle( tr("Save as Template"));
43
setWindowIcon(loadIcon("AppIcon.png"));
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);
40
blo->addWidget(middle);
41
blo->addWidget(bottom);
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);
51
catsLabel = new QLabel( tr("Category"), center);
52
mlo->addWidget(catsLabel);
53
catsCombo = new QComboBox(center,"catsCombo");
54
mlo->addWidget(catsCombo);
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);
63
colorsLabel = new QLabel( tr("Colors"),center);
64
mlo->addWidget(colorsLabel);
65
colorsEdit = new QLineEdit(center);
66
mlo->addWidget(colorsEdit);
68
descrLabel = new QLabel( tr("Description"),center);
69
mlo->addWidget(descrLabel);
70
descrEdit = new QTextEdit(center);
71
mlo->addWidget(descrEdit);
73
usageLabel = new QLabel( tr("Usage"),center);
74
mlo->addWidget(usageLabel);
75
usageEdit = new QTextEdit(center);
76
mlo->addWidget(usageEdit);
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);
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);
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);
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);
107
52
// Slots and signals connections
108
connect(detailButton, SIGNAL(clicked()), this, SLOT(detailClicked()));
109
connect(okButton, SIGNAL(clicked()), this, SLOT(accept()));
113
void satdialog::detailClicked()
120
isFullDetail = !isFullDetail;
123
void satdialog::fullDetail()
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));
153
emailEdit->setSizePolicy(QSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred));
154
layout()->activate();
155
// resize(minimumSizeHint());
156
setFixedSize(minimumSizeHint());
159
void satdialog::minimumDetail()
161
detailButton->setText( tr("More Details"));
163
catsLabel->setSizePolicy(QSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored));
165
psizeLabel->setSizePolicy(QSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored));
167
colorsLabel->setSizePolicy(QSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored));
169
descrLabel->setSizePolicy(QSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored));
171
usageLabel->setSizePolicy(QSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored));
173
authorLabel->setSizePolicy(QSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored));
175
emailLabel->setSizePolicy(QSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored));
177
catsCombo->setSizePolicy(QSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored));
179
psizeEdit->setSizePolicy(QSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored));
181
colorsEdit->setSizePolicy(QSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored));
183
descrEdit->setSizePolicy(QSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored));
185
usageEdit->setSizePolicy(QSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored));
187
authorEdit->setSizePolicy(QSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored));
189
emailEdit->setSizePolicy(QSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored));
191
layout()->activate();
192
setFixedSize(minimumSizeHint());
194
adjustSize(); // TODO Get rid of this
197
void satdialog::readPrefs()
53
connect(detailButton, SIGNAL(stateChanged(int)), this, SLOT(detailClicked(int)));
56
void satdialog::detailClicked(int state)
58
isFullDetail = state == Qt::Checked;
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);
76
void satdialog::readPrefs()
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);
205
86
void satdialog::writePrefs()
209
90
prefs->set("isFullDetail", isFullDetail);
93
QString satdialog::findTemplateXml(QString dir)
95
QString lang = ScCore->getGuiLanguage();
96
QString tmp = dir + "/template." + lang + ".xml";
97
if (QFile::exists(tmp))
100
if (lang.length() > 2)
102
tmp = dir + "/template." + lang.left(2) + ".xml";
103
if (QFile::exists(tmp))
106
return dir + "/template.xml";
109
void satdialog::addCategories(const QString& dir)
111
// Read categories from the dir itself
112
QString tmplFile = findTemplateXml(dir);
113
if (QFile::exists(tmplFile))
114
readCategories(tmplFile);
116
// And from all the subdirectories. template.xml file is only searched one dir level deeper than the dir
118
if (tmpldir.exists())
120
tmpldir.setFilter(QDir::Dirs);
121
QStringList dirs = tmpldir.entryList();
122
for (int i = 0; i < dirs.size(); ++i)
124
if ((dirs[i] != ".") && (dirs[i] != ".."))
126
tmplFile = findTemplateXml(dir + "/" + dirs[i]);
127
if (QFile::exists(tmplFile))
128
readCategories(tmplFile);
134
void satdialog::readCategories(const QString& fileName)
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)
145
QString category = categories.at(i);
146
if (!category.isEmpty() && !cats.contains(category))
147
cats.insert(category, category);
212
151
void satdialog::setupCategories()
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));
263
QStringList* list = new QStringList();
264
for (uint i = 0; i < cats.size(); ++i)
265
list->append(*cats[i]->second);
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"));
179
QString scribusHome = ScPaths::getApplicationDataDir();
180
QString scribusShare = ScPaths::instance().templateDir();
182
addCategories(scribusHome + "/templates");
183
addCategories(scribusShare);
186
QMap<QString, QString>::ConstIterator it;
187
for (it = cats.constBegin(); it != cats.constEnd(); ++it)
188
list.append(it.value());
190
catsCombo->addItem("");
191
catsCombo->addItems(list);
270
192
catsCombo->setEditable(true);