File indexing completed on 2024-04-28 16:26:25

0001 /******************************************************************************************
0002 date                 : Sep 12 2004
0003 version              : 0.22
0004 copyright            : Thomas Fischer (t-fisch@users.sourceforge.net)
0005                        restructured, improved and completed by Holger Danielsson
0006                        (C) 2004 by Holger Danielsson (holger.danielsson@t-online.de)
0007 *******************************************************************************************/
0008 
0009 /***************************************************************************
0010  *                                                                         *
0011  *   This program is free software; you can redistribute it and/or modify  *
0012  *   it under the terms of the GNU General Public License as published by  *
0013  *   the Free Software Foundation; either version 2 of the License, or     *
0014  *   (at your option) any later version.                                   *
0015  *                                                                         *
0016  ***************************************************************************/
0017 
0018 #ifndef QUICKDOCUMENTDIALOG_H
0019 #define QUICKDOCUMENTDIALOG_H
0020 
0021 #include "kilewizard.h"
0022 
0023 #include <QList>
0024 #include <QMap>
0025 
0026 class QLabel;
0027 class QLineEdit;
0028 class QPushButton;
0029 class QTabWidget;
0030 class QTreeWidget;
0031 class QTreeWidgetItem;
0032 
0033 namespace KileWidget {
0034 class CategoryComboBox;
0035 }
0036 
0037 class KComboBox;
0038 
0039 namespace KileDialog
0040 {
0041 
0042 // some flags to check the results of the input dialog
0043 enum {
0044     qd_CheckNotEmpty = 1,
0045     qd_CheckDocumentClass = 2,
0046     qd_CheckClassOption = 4,
0047     qd_CheckPackage = 8,
0048     qd_CheckPackageOption = 16,
0049     qd_CheckFontsize = 32,
0050     qd_CheckPapersize = 64
0051 };
0052 
0053 class QuickDocument : public Wizard
0054 {
0055     Q_OBJECT
0056 
0057 public:
0058     explicit QuickDocument(KConfig *, QWidget *parent = 0, const char *name = 0, const QString &caption = QString());
0059     ~QuickDocument();
0060 
0061     bool isStandardClass(const QString &classname);
0062     bool isDocumentClass(const QString &name);
0063     bool isDocumentClassOption(const QString &option);
0064     bool isPackage(const QString &package);
0065     bool isPackageOption(const QString &package, const QString &option);
0066 
0067 private:
0068     KileWidget::CategoryComboBox *m_cbDocumentClass;
0069     KileWidget::CategoryComboBox *m_cbTypefaceSize;
0070     KileWidget::CategoryComboBox *m_cbPaperSize;
0071     KileWidget::CategoryComboBox *m_cbEncoding;
0072     QTreeWidget *m_lvClassOptions;
0073     QTreeWidget *m_lvPackages;
0074     QLineEdit *m_leAuthor;
0075     QLineEdit *m_leTitle;
0076     QLineEdit *m_leDate;
0077     QLabel    *m_lbPaperSize;
0078 
0079     QString m_currentClass;
0080     QString m_currentFontsize;
0081     QString m_currentPapersize;
0082     QString m_currentEncoding;
0083     bool m_currentHyperref;
0084     QString m_hyperrefdriver;
0085     QString m_hyperrefsetup;
0086     QStringList m_userClasslist;
0087     QStringList m_deleteDocumentClasses;
0088 
0089     QMap<QString, QStringList> m_dictDocumentClasses;
0090     QMap<QString, bool> m_dictStandardClasses;
0091     QMap<QString, bool> m_currentDefaultOptions;
0092     QMap<QString, bool> m_currentSelectedOptions;
0093     QMap<QString, bool> m_dictPackagesEditable;
0094     QMap<QString, QString> m_dictPackagesDefaultvalues;
0095     QMap<QString, bool> m_dictHyperrefDriver;
0096 
0097     QPushButton *m_btnDocumentClassAdd;
0098     QPushButton *m_btnDocumentClassDelete;
0099     QPushButton *m_btnTypefaceSizeAdd;
0100     QPushButton *m_btnTypefaceSizeDelete;
0101     QPushButton *m_btnPaperSizeAdd;
0102     QPushButton *m_btnPaperSizeDelete;
0103     QPushButton *m_btnEncodingAdd;
0104     QPushButton *m_btnEncodingDelete;
0105 
0106     QPushButton *m_btnClassOptionsAdd;
0107     QPushButton *m_btnClassOptionsEdit;
0108     QPushButton *m_btnClassOptionsDelete;
0109     QPushButton *m_btnPackagesAdd;
0110     QPushButton *m_btnPackagesAddOption;
0111     QPushButton *m_btnPackagesEdit;
0112     QPushButton *m_btnPackagesDelete;
0113     QPushButton *m_btnPackagesReset;
0114 
0115     // GUI
0116     QWidget *setupClassOptions(QTabWidget *tab);
0117     QWidget *setupPackages(QTabWidget *tab);
0118     QWidget *setupProperties(QTabWidget *tab);
0119 
0120     // read/write config files and init data
0121     void readConfig();
0122     void readDocumentClassConfig();
0123     void readPackagesConfig();
0124     void initHyperref();
0125     void writeConfig();
0126     void writeDocumentClassConfig();
0127     void writePackagesConfig();
0128 
0129     // document class tab
0130     void initDocumentClass();
0131     void initStandardClass(const QString &classname, const QString &fontsize,
0132                            const QString &papersize, const QString &defaultoptions,
0133                            const QString &selectedoptions);
0134     void initStandardOptions(const QString &classname, QStringList &optionlist);
0135     void setDefaultClassOptions(const QString &defaultoptions);
0136     void setSelectedClassOptions(const QString &selectedoptions);
0137     void setClassOptions(const QStringList &list, uint start);
0138     void updateClassOptions();
0139     QString getClassOptions();
0140     void fillDocumentClassCombobox();
0141     void fillCombobox(KileWidget::CategoryComboBox *combo, const QString &cslist, const QString &seltext);
0142     bool addComboboxEntries(KileWidget::CategoryComboBox *combo, const QString &title, const QString &entry);
0143     QString getComboxboxList(KComboBox *combo);
0144 
0145     bool isDefaultClassOption(const QString &option);
0146     bool isSelectedClassOption(const QString &option);
0147     QString stripDefault(const QString &s);
0148 
0149     // packages tab
0150     void initPackages();
0151     bool readPackagesListview();
0152     QTreeWidgetItem *insertTreeWidget(QTreeWidget *treeWidget,
0153                                       const QString &entry,
0154                                       const QString &description);
0155     QTreeWidgetItem *insertTreeWidget(QTreeWidgetItem *parent,
0156                                       const QString &entry,
0157                                       const QString &description);
0158     QTreeWidgetItem *insertEditableTreeWidget(QTreeWidgetItem *parent,
0159             const QString &entry,
0160             const QString &description,
0161             const QString &value,
0162             const QString &defaultvalue);
0163     bool isTreeWidgetEntry(QTreeWidget *treeWidget, const QString &entry);
0164     void setPackagesValue(QTreeWidgetItem *item, const QString &option, const QString &val);
0165     QString getPackagesValue(const QString &value);
0166 
0167     bool isTreeWidgetChild(QTreeWidget *treeWidget, const QString &entry, const QString &option);
0168     QString addPackageDefault(const QString &option, const QString &description);
0169     QString stripPackageDefault(const QString &option, const QString &description);
0170     bool isHyperrefDriver(const QString &name);
0171 
0172     // document template
0173     void printTemplate();
0174     void printPackages();
0175     void printHyperref();
0176     void printBeamerTheme();
0177 
0178     // input dialog
0179     bool inputDialog(QStringList &list, int check = qd_CheckNotEmpty);
0180 
0181 private Q_SLOTS:
0182     void slotDocumentClassAdd();
0183     void slotDocumentClassDelete();
0184     void slotDocumentClassChanged(int index);
0185     void slotTypefaceSizeAdd();
0186     void slotTypefaceSizeDelete();
0187     void slotPaperSizeAdd();
0188     void slotPaperSizeDelete();
0189     void slotOptionDoubleClicked(QTreeWidgetItem *item, int column);
0190     void slotClassOptionAdd();
0191     void slotClassOptionEdit();
0192     void slotClassOptionDelete();
0193 
0194     void slotCheckParent(QTreeWidgetItem *item);
0195     void slotPackageDoubleClicked(QTreeWidgetItem *item);
0196     void slotPackageAdd();
0197     void slotPackageAddOption();
0198     void slotPackageEdit();
0199     void slotPackageDelete();
0200     void slotPackageReset();
0201 
0202     void slotEnableButtons();
0203     void slotAccepted();
0204 };
0205 
0206 class QuickDocumentInputDialog : public QDialog {
0207     Q_OBJECT
0208 public:
0209     explicit QuickDocumentInputDialog(const QStringList &list, int check = 0,
0210                              QuickDocument *parent = 0, const char *name = 0);
0211     ~QuickDocumentInputDialog();
0212 
0213     void getResults(QStringList &list);
0214 
0215 private:
0216     QuickDocument *m_parent;
0217     int  m_check;
0218 
0219     QStringList m_description;
0220     QList<QWidget*> m_objectlist;
0221 
0222     QString getPackageName(const QString &text);
0223     bool checkListEntries(const QString &title, const QString &textlist, const QString &pattern);
0224 
0225 protected Q_SLOTS:
0226     void slotAccepted();
0227 };
0228 
0229 } // namespace
0230 
0231 #endif