File indexing completed on 2024-05-05 17:15:12

0001 /*****************************************************************************************
0002     begin                : Sat Apr 26 2003
0003     copyright            : (C) 2003 by Jeroen Wijnhout (wijnhout@science.uva.nl)
0004                                2005 by Holger Danielsson (holger.danielsson@t-online.de)
0005                                2006-2014 by Michel Ludwig (michel.ludwig@kdemail.net)
0006 ******************************************************************************************/
0007 
0008 /***************************************************************************
0009  *                                                                         *
0010  *   This program is free software; you can redistribute it and/or modify  *
0011  *   it under the terms of the GNU General Public License as published by  *
0012  *   the Free Software Foundation; either version 2 of the License, or     *
0013  *   (at your option) any later version.                                   *
0014  *                                                                         *
0015  ***************************************************************************/
0016 
0017 #include "dialogs/newfilewizard.h"
0018 
0019 #include <QComboBox>
0020 #include <QDir>
0021 #include <QFileInfo>
0022 #include <QLabel>
0023 #include <QLayout>
0024 #include <QMap>
0025 
0026 #include <KConfig>
0027 #include <KLocalizedString>
0028 #include <KMessageBox>
0029 #include <KConfigGroup>
0030 #include <KSharedConfig>
0031 #include <QDialogButtonBox>
0032 #include <QPushButton>
0033 #include <QVBoxLayout>
0034 
0035 #include "kiledebug.h"
0036 #include "widgets/newdocumentwidget.h"
0037 
0038 #define LATEX_TYPE  0
0039 #define BIBTEX_TYPE 1
0040 #define SCRIPT_TYPE 2
0041 
0042 NewFileWizard::NewFileWizard(KileTemplate::Manager *templateManager, KileDocument::Type startType,
0043                              QWidget *parent, const char *name)
0044     : QDialog(parent), m_templateManager(templateManager), m_currentlyDisplayedType(-1)
0045 {
0046     setObjectName(name);
0047     setWindowTitle(i18n("New File"));
0048     setModal(true);
0049 
0050     QVBoxLayout *mainLayout = new QVBoxLayout;
0051     setLayout(mainLayout);
0052 
0053     // first read config
0054     KConfigGroup newFileWizardGroup = KSharedConfig::openConfig()->group("NewFileWizard");
0055     bool wizard = newFileWizardGroup.readEntry("UseWizardWhenCreatingEmptyFile", false);
0056     int w = newFileWizardGroup.readEntry("width", -1);
0057     if(w == -1) {
0058         w = width();
0059     }
0060     int h = newFileWizardGroup.readEntry("height", -1);
0061     if(h == -1) {
0062         h = height();
0063     }
0064 
0065     m_newDocumentWidget = new NewDocumentWidget(this);
0066     connect(m_newDocumentWidget->templateIconView, SIGNAL(itemDoubleClicked(QListWidgetItem*)), SLOT(okButtonClicked()));
0067     m_templateManager->scanForTemplates();
0068     m_newDocumentWidget->templateIconView->setTemplateManager(m_templateManager);
0069 
0070     connect(m_newDocumentWidget->documentTypeComboBox, SIGNAL(activated(int)), this, SLOT(slotActivated(int)));
0071     connect(m_newDocumentWidget->templateIconView, SIGNAL(classFileSearchFinished()), this, SLOT(restoreSelectedIcon()));
0072 
0073     mainLayout->addWidget(m_newDocumentWidget);
0074 
0075     m_newDocumentWidget->documentTypeComboBox->insertItem(LATEX_TYPE, i18n("LaTeX Document"));
0076     m_newDocumentWidget->documentTypeComboBox->insertItem(BIBTEX_TYPE, i18n("BibTeX Document"));
0077     m_newDocumentWidget->documentTypeComboBox->insertItem(SCRIPT_TYPE, i18n("Kile Script"));
0078 
0079     QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
0080     QPushButton *okButton = buttonBox->button(QDialogButtonBox::Ok);
0081     okButton->setDefault(true);
0082     okButton->setShortcut(Qt::CTRL | Qt::Key_Return);
0083     connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept()));
0084     connect(buttonBox, SIGNAL(accepted()), this, SLOT(okButtonClicked()));
0085     connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject()));
0086     mainLayout->addWidget(buttonBox);
0087 
0088     // set config entries
0089     m_newDocumentWidget->quickStartWizardCheckBox->setChecked(wizard);
0090     resize(w,h);
0091 
0092     int index = 0;
0093     switch(startType) {
0094     default: // fall through
0095     case KileDocument::LaTeX:
0096         index = LATEX_TYPE;
0097         break;
0098     case KileDocument::BibTeX:
0099         index = BIBTEX_TYPE;
0100         break;
0101     case KileDocument::Script:
0102         index = SCRIPT_TYPE;
0103         break;
0104     }
0105 
0106     // select the document type
0107     m_newDocumentWidget->documentTypeComboBox->setCurrentIndex(index);
0108     m_currentlyDisplayedType = index;
0109     displayType(index);
0110 }
0111 
0112 NewFileWizard::~NewFileWizard()
0113 {
0114 }
0115 
0116 TemplateItem* NewFileWizard::getSelection() const
0117 {
0118     QList<QListWidgetItem*> selectedItems = m_newDocumentWidget->templateIconView->selectedItems();
0119     if(selectedItems.isEmpty()) {
0120         return Q_NULLPTR;
0121     }
0122     return static_cast<TemplateItem*>(selectedItems.first());
0123 }
0124 
0125 bool NewFileWizard::useWizard()
0126 {
0127     // check (among other things) whether we want to create a LaTeX document
0128     return ((m_newDocumentWidget->documentTypeComboBox->currentIndex() == 0)
0129             && getSelection()
0130             && (getSelection()->name() == KileTemplate::Manager::defaultEmptyTemplateCaption()
0131                 || getSelection()->name() == KileTemplate::Manager::defaultEmptyLaTeXTemplateCaption())
0132             && m_newDocumentWidget->quickStartWizardCheckBox->isChecked());
0133 }
0134 
0135 QString NewFileWizard::getConfigKey(int index)
0136 {
0137     QString configKey = "NewFileWizardSelectedIcon";
0138     switch(index) {
0139     case LATEX_TYPE:
0140         configKey += "LaTeX";
0141         break;
0142 
0143     case BIBTEX_TYPE:
0144         configKey += "BibTeX";
0145         break;
0146 
0147     case SCRIPT_TYPE:
0148         configKey += "Script";
0149         break;
0150     }
0151     return configKey;
0152 }
0153 
0154 void NewFileWizard::storeSelectedIcon()
0155 {
0156     if(m_currentlyDisplayedType < 0) {
0157         return;
0158     }
0159     TemplateItem *selectedItem = getSelection();
0160     if (selectedItem) {
0161         KSharedConfig::openConfig()->group("default").writeEntry(getConfigKey(m_currentlyDisplayedType), selectedItem->name());
0162     }
0163 }
0164 
0165 void NewFileWizard::restoreSelectedIcon()
0166 {
0167     KConfigGroup defaultGroup = KSharedConfig::openConfig()->group("default");
0168     QString selectedIconName = defaultGroup.readEntry(getConfigKey(m_currentlyDisplayedType),
0169                                KileTemplate::Manager::defaultEmptyTemplateCaption());
0170     QList<QListWidgetItem*> items = m_newDocumentWidget->templateIconView->findItems(selectedIconName, Qt::MatchExactly);
0171     if(items.count() > 0) {
0172         items[0]->setSelected(true);
0173     }
0174 }
0175 
0176 void NewFileWizard::okButtonClicked()
0177 {
0178     KConfigGroup newFileWizardGroup = KSharedConfig::openConfig()->group("NewFileWizard");
0179 
0180     newFileWizardGroup.writeEntry("UseWizardWhenCreatingEmptyFile", m_newDocumentWidget->quickStartWizardCheckBox->isChecked());
0181     newFileWizardGroup.writeEntry("width", width());
0182     newFileWizardGroup.writeEntry("height", height());
0183 
0184     storeSelectedIcon();
0185     accept();
0186 }
0187 
0188 void NewFileWizard::slotActivated(int index)
0189 {
0190     storeSelectedIcon();
0191     m_currentlyDisplayedType = index;
0192     displayType(index);
0193 }
0194 
0195 void NewFileWizard::displayType(int index)
0196 {
0197     switch(index) {
0198     case LATEX_TYPE:
0199         m_newDocumentWidget->templateIconView->fillWithTemplates(KileDocument::LaTeX);
0200         break;
0201 
0202     case BIBTEX_TYPE:
0203         m_newDocumentWidget->templateIconView->fillWithTemplates(KileDocument::BibTeX);
0204         break;
0205 
0206     case SCRIPT_TYPE:
0207         m_newDocumentWidget->templateIconView->fillWithTemplates(KileDocument::Script);
0208         break;
0209     }
0210     m_newDocumentWidget->quickStartWizardCheckBox->setEnabled((index == 0));
0211 
0212     // and select an icon
0213     restoreSelectedIcon();
0214 }
0215