File indexing completed on 2024-04-28 04:37:20
0001 /* 0002 SPDX-FileCopyrightText: 2008 Andreas Pakulat <apaku@gmx.de> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "openprojectpage.h" 0008 0009 #include <QVBoxLayout> 0010 0011 #include <KDirOperator> 0012 #include <KFileItem> 0013 #include <KFileWidget> 0014 #include <KLocalizedString> 0015 #include <KUrlComboBox> 0016 0017 #include "shellextension.h" 0018 #include "core.h" 0019 0020 namespace KDevelop 0021 { 0022 0023 OpenProjectPage::OpenProjectPage( const QUrl& startUrl, const QStringList& filters, 0024 QWidget* parent ) 0025 : QWidget( parent ) 0026 { 0027 auto* layout = new QVBoxLayout( this ); 0028 layout->setContentsMargins(0, 0, 0, 0); 0029 0030 fileWidget = new KFileWidget( startUrl, this); 0031 0032 fileWidget->setFilter(filters.join(QLatin1Char('\n'))); 0033 0034 fileWidget->setMode( KFile::Modes( KFile::File | KFile::Directory | KFile::ExistingOnly ) ); 0035 0036 layout->addWidget( fileWidget ); 0037 0038 KDirOperator* ops = fileWidget->dirOperator(); 0039 // Emitted for changes in the places view, the url navigator and when using the back/forward/up buttons 0040 connect(ops, &KDirOperator::urlEntered, this, &OpenProjectPage::opsEntered); 0041 0042 // Emitted when selecting an entry from the "Name" box or editing in there 0043 connect( fileWidget->locationEdit(), &KUrlComboBox::editTextChanged, 0044 this, &OpenProjectPage::comboTextChanged); 0045 0046 // Emitted when clicking on a file in the fileview area 0047 connect( fileWidget, &KFileWidget::fileHighlighted, this, &OpenProjectPage::highlightFile ); 0048 0049 connect(fileWidget->dirOperator()->dirLister(), &KDirLister::listingDirCompleted, this, &OpenProjectPage::dirChanged); 0050 0051 connect( fileWidget, &KFileWidget::accepted, this, &OpenProjectPage::accepted); 0052 } 0053 0054 QUrl OpenProjectPage::absoluteUrl(const QString& file) const 0055 { 0056 QUrl u(file); 0057 if( u.isRelative() ) 0058 { 0059 u = fileWidget->baseUrl().resolved( u ); 0060 } 0061 return u; 0062 } 0063 0064 void OpenProjectPage::setUrl(const QUrl& url) 0065 { 0066 fileWidget->setUrl(url, false); 0067 } 0068 0069 void OpenProjectPage::dirChanged(const QUrl& /*url*/) 0070 { 0071 if(fileWidget->selectedFiles().isEmpty()) { 0072 const KFileItemList items = fileWidget->dirOperator()->dirLister()->items(); 0073 for (const KFileItem& item : items) { 0074 if(item.url().path().endsWith(ShellExtension::getInstance()->projectFileExtension()) && item.isFile()) { 0075 fileWidget->setSelectedUrl(item.url()); 0076 } 0077 } 0078 } 0079 } 0080 0081 void OpenProjectPage::showEvent(QShowEvent* ev) 0082 { 0083 fileWidget->locationEdit()->setFocus(); 0084 QWidget::showEvent(ev); 0085 } 0086 0087 void OpenProjectPage::highlightFile(const QUrl& file) 0088 { 0089 emit urlSelected(file); 0090 } 0091 0092 void OpenProjectPage::opsEntered(const QUrl& url) 0093 { 0094 emit urlSelected(url); 0095 } 0096 0097 void OpenProjectPage::comboTextChanged( const QString& file ) 0098 { 0099 emit urlSelected(absoluteUrl(file)); 0100 } 0101 0102 } 0103 0104 #include "moc_openprojectpage.cpp"