File indexing completed on 2024-04-28 16:26:31
0001 /****************************************************************************************** 0002 begin : Wed Aug 14 2002 0003 copyright : (C) 2003 by Jeroen Wijnhout (Jeroen.Wijnhout@kdemail.net) 0004 2007-2022 by Michel Ludwig (michel.ludwig@kdemail.net) 0005 0006 from Kate (C) 2001 by Matt Newell 0007 0008 ******************************************************************************************/ 0009 0010 /*************************************************************************** 0011 * * 0012 * This program is free software; you can redistribute it and/or modify * 0013 * it under the terms of the GNU General Public License as published by * 0014 * the Free Software Foundation; either version 2 of the License, or * 0015 * (at your option) any later version. * 0016 * * 0017 ***************************************************************************/ 0018 0019 // 2007-03-12 dani 0020 // - use KileDocument::Extensions 0021 0022 #include "widgets/filebrowserwidget.h" 0023 0024 #include <QAbstractItemView> 0025 #include <QFocusEvent> 0026 #include <QLayout> 0027 #include <QToolTip> 0028 #include <QVBoxLayout> 0029 0030 #include <KActionCollection> 0031 #include <KActionMenu> 0032 #include <KCharsets> 0033 #include <KFilePlacesModel> 0034 #include <KLocalizedString> 0035 #include <KToolBar> 0036 #include <KConfig> 0037 #include <kio_version.h> 0038 0039 #include "kileconfig.h" 0040 #include "kiledebug.h" 0041 0042 namespace KileWidget { 0043 0044 FileBrowserWidget::FileBrowserWidget(KileDocument::Extensions *extensions, QWidget *parent) 0045 : QWidget(parent), m_extensions(extensions) 0046 { 0047 m_configGroup = KConfigGroup(KSharedConfig::openConfig(),"FileBrowserWidget"); 0048 0049 QVBoxLayout* layout = new QVBoxLayout(this); 0050 layout->setContentsMargins(0, 0, 0, 0); 0051 layout->setSpacing(0); 0052 setLayout(layout); 0053 0054 m_toolbar = new KToolBar(this); 0055 m_toolbar->setMovable(false); 0056 m_toolbar->setToolButtonStyle(Qt::ToolButtonIconOnly); 0057 m_toolbar->setContextMenuPolicy(Qt::NoContextMenu); 0058 layout->addWidget(m_toolbar); 0059 0060 KFilePlacesModel* model = new KFilePlacesModel(this); 0061 m_urlNavigator = new KUrlNavigator(model, QUrl::fromLocalFile(QDir::homePath()), this); 0062 layout->addWidget(m_urlNavigator); 0063 connect(m_urlNavigator, SIGNAL(urlChanged(QUrl)), SLOT(setDir(QUrl))); 0064 0065 m_dirOperator = new KDirOperator(QUrl(), this); 0066 m_dirOperator->setViewConfig(m_configGroup); 0067 m_dirOperator->readConfig(m_configGroup); 0068 m_dirOperator->setViewMode(KFile::Tree); 0069 m_dirOperator->setMode(KFile::Files); 0070 setFocusProxy(m_dirOperator); 0071 0072 connect(m_urlNavigator, SIGNAL(urlChanged(QUrl)), m_dirOperator, SLOT(setFocus())); 0073 connect(m_dirOperator, SIGNAL(fileSelected(KFileItem)), this, SIGNAL(fileSelected(KFileItem))); 0074 connect(m_dirOperator, SIGNAL(urlEntered(QUrl)), this, SLOT(dirUrlEntered(QUrl))); 0075 0076 0077 0078 setupToolbar(); 0079 0080 layout->addWidget(m_dirOperator); 0081 layout->setStretchFactor(m_dirOperator, 2); 0082 readConfig(); 0083 } 0084 0085 FileBrowserWidget::~FileBrowserWidget() 0086 { 0087 } 0088 0089 void FileBrowserWidget::readConfig() 0090 { 0091 QString lastDir = KileConfig::lastDir(); 0092 QFileInfo ldi(lastDir); 0093 if (!ldi.isReadable()) { 0094 KILE_DEBUG_MAIN << "lastDir is not readable"; 0095 m_dirOperator->home(); 0096 } 0097 else { 0098 setDir(QUrl::fromLocalFile(lastDir)); 0099 } 0100 0101 bool filterLatex = KileConfig::showLaTeXFilesOnly(); 0102 toggleShowLaTeXFilesOnly(filterLatex); 0103 } 0104 0105 void FileBrowserWidget::writeConfig() 0106 { 0107 KileConfig::setLastDir(m_dirOperator->url().toLocalFile()); 0108 m_dirOperator->writeConfig(m_configGroup); 0109 } 0110 0111 void FileBrowserWidget::setupToolbar() 0112 { 0113 #if KIO_VERSION < QT_VERSION_CHECK(5, 100, 0) 0114 KActionCollection *coll = m_dirOperator->actionCollection(); 0115 m_toolbar->addAction(coll->action("back")); 0116 m_toolbar->addAction(coll->action("forward")); 0117 #else 0118 m_toolbar->addAction(m_dirOperator->action(KDirOperator::Back)); 0119 m_toolbar->addAction(m_dirOperator->action(KDirOperator::Forward)); 0120 #endif 0121 0122 QAction *action = new QAction(this); 0123 action->setIcon(QIcon::fromTheme("document-open")); 0124 action->setText(i18n("Open selected")); 0125 connect(action, SIGNAL(triggered()), this, SLOT(emitFileSelectedSignal())); 0126 m_toolbar->addAction(action); 0127 0128 QAction *showOnlyLaTexFilesAction = new QAction(this); 0129 showOnlyLaTexFilesAction->setText(i18n("Show LaTeX Files Only")); 0130 showOnlyLaTexFilesAction->setCheckable(true); 0131 showOnlyLaTexFilesAction->setChecked(KileConfig::showLaTeXFilesOnly()); 0132 connect(showOnlyLaTexFilesAction, SIGNAL(triggered(bool)), this, SLOT(toggleShowLaTeXFilesOnly(bool))); 0133 0134 // section for settings menu 0135 KActionMenu *optionsMenu = new KActionMenu(QIcon::fromTheme("configure"), i18n("Options"), this); 0136 optionsMenu->setPopupMode(QToolButton::InstantPopup); 0137 #if KIO_VERSION < QT_VERSION_CHECK(5, 100, 0) 0138 optionsMenu->addAction(m_dirOperator->actionCollection()->action("short view")); 0139 optionsMenu->addAction(m_dirOperator->actionCollection()->action("detailed view")); 0140 optionsMenu->addAction(m_dirOperator->actionCollection()->action("tree view")); 0141 optionsMenu->addAction(m_dirOperator->actionCollection()->action("detailed tree view")); 0142 #else 0143 optionsMenu->addAction(m_dirOperator->action(KDirOperator::ShortView)); 0144 optionsMenu->addAction(m_dirOperator->action(KDirOperator::DetailedView)); 0145 optionsMenu->addAction(m_dirOperator->action(KDirOperator::TreeView)); 0146 optionsMenu->addAction(m_dirOperator->action(KDirOperator::DetailedTreeView)); 0147 #endif 0148 optionsMenu->addSeparator(); 0149 optionsMenu->addAction(showOnlyLaTexFilesAction); 0150 #if KIO_VERSION < QT_VERSION_CHECK(5, 100, 0) 0151 optionsMenu->addAction(m_dirOperator->actionCollection()->action("show hidden")); 0152 #else 0153 optionsMenu->addAction(m_dirOperator->action(KDirOperator::ShowHiddenFiles)); 0154 #endif 0155 0156 m_toolbar->addSeparator(); 0157 m_toolbar->addAction(optionsMenu); 0158 } 0159 0160 void FileBrowserWidget::toggleShowLaTeXFilesOnly(bool filter) 0161 { 0162 KileConfig::setShowLaTeXFilesOnly(filter); 0163 0164 if(filter) { 0165 // FileBrowserWidget filter for sidebar 0166 QString filter = m_extensions->latexDocuments() 0167 + ' ' + m_extensions->latexPackages() 0168 + ' ' + m_extensions->bibtex() 0169 + ' ' + m_extensions->metapost(); 0170 filter.replace('.', "*."); 0171 m_dirOperator->setNameFilter(filter); 0172 } 0173 else { 0174 m_dirOperator->clearFilter(); 0175 } 0176 m_dirOperator->rereadDir(); 0177 } 0178 0179 QUrl FileBrowserWidget::currentUrl() const 0180 { 0181 return m_dirOperator->url(); 0182 } 0183 0184 void FileBrowserWidget::dirUrlEntered(const QUrl &u) 0185 { 0186 m_urlNavigator->setLocationUrl(u); 0187 } 0188 0189 void FileBrowserWidget::setDir(const QUrl &url) 0190 { 0191 m_dirOperator->setUrl(url, true); 0192 } 0193 0194 void FileBrowserWidget::emitFileSelectedSignal() 0195 { 0196 KFileItemList itemList = m_dirOperator->selectedItems(); 0197 for(KFileItemList::iterator it = itemList.begin(); it != itemList.end(); ++it) { 0198 emit(fileSelected(*it)); 0199 } 0200 0201 m_dirOperator->view()->clearSelection(); 0202 } 0203 0204 } 0205