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