00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #include "satdialog.h"
00011 #include "scribusapi.h"
00012
00013 #include <QXmlDefaultHandler>
00014 #include <QXmlSimpleReader>
00015
00016 #include "prefsmanager.h"
00017 #include "prefsfile.h"
00018 #include "scpaths.h"
00019 #include "scribuscore.h"
00020 #include "util_icon.h"
00021
00022 class CategoriesReader : public QXmlDefaultHandler
00023 {
00024 public:
00025 QStringList categories;
00026 virtual bool startElement(const QString&, const QString&, const QString &name, const QXmlAttributes &attrs)
00027 {
00028 if (name == QLatin1String("template"))
00029 {
00030 QString cat = attrs.value(QLatin1String("category"));
00031 if (!categories.contains(cat))
00032 categories.append(cat);
00033 }
00034 return true;
00035 };
00036 };
00037
00038 satdialog::satdialog(QWidget* parent, QString tmplName, int pageW, int pageH) : QDialog(parent)
00039 {
00040 setupUi(this);
00041 setModal(true);
00042 setWindowTitle( tr("Save as Template"));
00043 setWindowIcon(loadIcon("AppIcon.png"));
00044 readPrefs();
00045
00046 nameEdit->setText(tmplName);
00047 setupCategories();
00048 setupPageSize(pageW, pageH);
00049 authorEdit->setText(author);
00050 emailEdit->setText(email);
00051
00052
00053 connect(detailButton, SIGNAL(stateChanged(int)), this, SLOT(detailClicked(int)));
00054 }
00055
00056 void satdialog::detailClicked(int state)
00057 {
00058 isFullDetail = state == Qt::Checked;
00059
00060 psizeLabel->setVisible(isFullDetail);
00061 catsLabel->setVisible(isFullDetail);
00062 colorsLabel->setVisible(isFullDetail);
00063 descrLabel->setVisible(isFullDetail);
00064 usageLabel->setVisible(isFullDetail);
00065 authorLabel->setVisible(isFullDetail);
00066 emailLabel->setVisible(isFullDetail);
00067 psizeEdit->setVisible(isFullDetail);
00068 catsCombo->setVisible(isFullDetail);
00069 colorsEdit->setVisible(isFullDetail);
00070 descrEdit->setVisible(isFullDetail);
00071 usageEdit->setVisible(isFullDetail);
00072 authorEdit->setVisible(isFullDetail);
00073 emailEdit->setVisible(isFullDetail);
00074 }
00075
00076 void satdialog::readPrefs()
00077 {
00078 prefs = PrefsManager::instance()->prefsFile->getPluginContext("satemplate");
00079 author = prefs->get("author", "");
00080 email = prefs->get("email", "");
00081 isFullDetail = prefs->getBool("isFullDetail", false);
00082 detailClicked(isFullDetail ? Qt::Checked : Qt::Unchecked);
00083 detailButton->setCheckState(isFullDetail ? Qt::Checked : Qt::Unchecked);
00084 }
00085
00086 void satdialog::writePrefs()
00087 {
00088 prefs->set("author", authorEdit->text());
00089 prefs->set("email", emailEdit->text());
00090 prefs->set("isFullDetail", isFullDetail);
00091 }
00092
00093 QString satdialog::findTemplateXml(QString dir)
00094 {
00095 QString lang = ScCore->getGuiLanguage();
00096 QString tmp = dir + "/template." + lang + ".xml";
00097 if (QFile::exists(tmp))
00098 return tmp;
00099
00100 if (lang.length() > 2)
00101 {
00102 tmp = dir + "/template." + lang.left(2) + ".xml";
00103 if (QFile::exists(tmp))
00104 return tmp;
00105 }
00106 return dir + "/template.xml";
00107 }
00108
00109 void satdialog::addCategories(const QString& dir)
00110 {
00111
00112 QString tmplFile = findTemplateXml(dir);
00113 if (QFile::exists(tmplFile))
00114 readCategories(tmplFile);
00115
00116
00117 QDir tmpldir(dir);
00118 if (tmpldir.exists())
00119 {
00120 tmpldir.setFilter(QDir::Dirs);
00121 QStringList dirs = tmpldir.entryList();
00122 for (int i = 0; i < dirs.size(); ++i)
00123 {
00124 if ((dirs[i] != ".") && (dirs[i] != ".."))
00125 {
00126 tmplFile = findTemplateXml(dir + "/" + dirs[i]);
00127 if (QFile::exists(tmplFile))
00128 readCategories(tmplFile);
00129 }
00130 }
00131 }
00132 }
00133
00134 void satdialog::readCategories(const QString& fileName)
00135 {
00136 QFile file(fileName);
00137 CategoriesReader catReader;
00138 QXmlInputSource xmlSource(&file);
00139 QXmlSimpleReader reader;
00140 reader.setContentHandler(&catReader);
00141 reader.parse(&xmlSource);
00142 QStringList& categories = catReader.categories;
00143 for (int i = 0; i < categories.count(); ++i)
00144 {
00145 QString category = categories.at(i);
00146 if (!category.isEmpty() && !cats.contains(category))
00147 cats.insert(category, category);
00148 }
00149 }
00150
00151 void satdialog::setupCategories()
00152 {
00153
00154
00155 cats.insert(QString("Newsletters"), QObject::tr("Newsletters"));
00156 cats.insert(QString("Brochures") , QObject::tr("Brochures"));
00157 cats.insert(QString("Catalogs") , QObject::tr("Catalogs"));
00158 cats.insert(QString("Flyers") , QObject::tr("Flyers"));
00159 cats.insert(QString("Signs") , QObject::tr("Signs"));
00160 cats.insert(QString("Cards") , QObject::tr("Cards"));
00161 cats.insert(QString("Letterheads"), QObject::tr("Letterheads"));
00162 cats.insert(QString("Envelopes") , QObject::tr("Envelopes"));
00163 cats.insert(QString("Business Cards"), QObject::tr("Business Cards"));
00164 cats.insert(QString("Calendars") , QObject::tr("Calendars"));
00165 cats.insert(QString("Advertisements"), QObject::tr("Advertisements"));
00166 cats.insert(QString("Labels") , QObject::tr("Labels"));
00167 cats.insert(QString("Menus") , QObject::tr("Menus"));
00168 cats.insert(QString("Programs") , QObject::tr("Programs"));
00169 cats.insert(QString("PDF Forms") , QObject::tr("PDF Forms"));
00170 cats.insert(QString("PDF Presentations") , QObject::tr("PDF Presentations"));
00171 cats.insert(QString("Magazines") , QObject::tr("Magazines"));
00172 cats.insert(QString("Posters") , QObject::tr("Posters"));
00173 cats.insert(QString("Announcements") , QObject::tr("Announcements"));
00174 cats.insert(QString("Text Documents"), QObject::tr("Text Documents"));
00175 cats.insert(QString("Folds") , QObject::tr("Folds"));
00176 cats.insert(QString("Media Cases") , QObject::tr("Media Cases"));
00177 cats.insert(QString("Own Templates"), QObject::tr("Own Templates"));
00178
00179 QString scribusHome = ScPaths::getApplicationDataDir();
00180 QString scribusShare = ScPaths::instance().templateDir();
00181
00182 addCategories(scribusHome + "/templates");
00183 addCategories(scribusShare);
00184
00185 QStringList list;
00186 QMap<QString, QString>::ConstIterator it;
00187 for (it = cats.constBegin(); it != cats.constEnd(); ++it)
00188 list.append(it.value());
00189 list.sort();
00190 catsCombo->addItem("");
00191 catsCombo->addItems(list);
00192 catsCombo->setEditable(true);
00193 }
00194
00195 void satdialog::setupPageSize(int w, int h)
00196 {
00197 QString sizelist[] =
00198 {"2380x3368", "1684x2380", "1190x1684", "842x1190", "595x842", "421x595", "297x421", "210x297", "148x210",
00199 "105x148", "2836x4008", "2004x2836", "1418x2004", "1002x1418", "709x1002", "501x709", "355x501", "250x355",
00200 "178x250", "125x178", "89x125", "462x649", "298x683", "312x624", "542x720", "595x935", "1224x792", "612x1008",
00201 "612x792", "792x1225"};
00202 QString namelist[] =
00203 {"A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "A8",
00204 "A9", "B0", "B1", "B2", "B3", "B4", "B5", "B6", "B7",
00205 "B8", "B9", "B10", "C5E", "Comm10E", "DLE", "Executive", "Folio", "Ledger", tr("Legal"),
00206 tr("Letter"), tr("Tabloid")};
00207
00208 QString orient, search, psize;
00209 QString wString = QString("%1").arg(w);
00210 QString hString = QString("%1").arg(h);
00211 if (w > h)
00212 {
00213 orient = ", "+ tr("landscape");
00214 search = hString+"x"+wString;
00215 }
00216 else if (w < h)
00217 {
00218 orient = ", "+ tr("portrait");
00219 search = wString+"x"+hString;
00220 }
00221 int index = -1;
00222 for (int i = 0; i < 30; ++i)
00223 {
00224 if (sizelist[i] == search)
00225 {
00226 index = i;
00227 psize = namelist[i];
00228 break;
00229 }
00230 }
00231
00232 if (index == -1)
00233 {
00234 psize = tr("custom")+", "+wString+"x"+hString;
00235 orient = "";
00236 }
00237
00238 psizeEdit->setText(psize + orient);
00239 }
00240
00241 satdialog::~satdialog()
00242 {
00243 writePrefs();
00244 }