1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
|
/*
SPDX-FileCopyrightText: 2008 Andreas Pakulat <apaku@gmx.de>
SPDX-License-Identifier: GPL-2.0-or-later
*/
#include "openprojectpage.h"
#include <QVBoxLayout>
#include <KDirOperator>
#include <KFileItem>
#include <KFileWidget>
#include <kio_version.h>
#include <KLocalizedString>
#include <KUrlComboBox>
#include "shellextension.h"
#include "core.h"
namespace KDevelop
{
OpenProjectPage::OpenProjectPage( const QUrl& startUrl, const QStringList& filters,
QWidget* parent )
: QWidget( parent )
{
auto* layout = new QVBoxLayout( this );
layout->setContentsMargins(0, 0, 0, 0);
fileWidget = new KFileWidget( startUrl, this);
fileWidget->setFilter(filters.join(QLatin1Char('\n')));
fileWidget->setMode( KFile::Modes( KFile::File | KFile::Directory | KFile::ExistingOnly ) );
layout->addWidget( fileWidget );
KDirOperator* ops = fileWidget->dirOperator();
// Emitted for changes in the places view, the url navigator and when using the back/forward/up buttons
connect(ops, &KDirOperator::urlEntered, this, &OpenProjectPage::opsEntered);
// Emitted when selecting an entry from the "Name" box or editing in there
connect( fileWidget->locationEdit(), &KUrlComboBox::editTextChanged,
this, &OpenProjectPage::comboTextChanged);
// Emitted when clicking on a file in the fileview area
connect( fileWidget, &KFileWidget::fileHighlighted, this, &OpenProjectPage::highlightFile );
#if KIO_VERSION < QT_VERSION_CHECK(5, 79, 0)
connect(fileWidget->dirOperator()->dirLister(), QOverload<const QUrl&>::of(&KDirLister::completed),
this, &OpenProjectPage::dirChanged);
#else
connect(fileWidget->dirOperator()->dirLister(), &KDirLister::listingDirCompleted, this, &OpenProjectPage::dirChanged);
#endif
connect( fileWidget, &KFileWidget::accepted, this, &OpenProjectPage::accepted);
}
QUrl OpenProjectPage::absoluteUrl(const QString& file) const
{
QUrl u(file);
if( u.isRelative() )
{
u = fileWidget->baseUrl().resolved( u );
}
return u;
}
void OpenProjectPage::setUrl(const QUrl& url)
{
fileWidget->setUrl(url, false);
}
void OpenProjectPage::dirChanged(const QUrl& /*url*/)
{
if(fileWidget->selectedFiles().isEmpty()) {
const KFileItemList items = fileWidget->dirOperator()->dirLister()->items();
for (const KFileItem& item : items) {
if(item.url().path().endsWith(ShellExtension::getInstance()->projectFileExtension()) && item.isFile()) {
fileWidget->setSelectedUrl(item.url());
}
}
}
}
void OpenProjectPage::showEvent(QShowEvent* ev)
{
fileWidget->locationEdit()->setFocus();
QWidget::showEvent(ev);
}
void OpenProjectPage::highlightFile(const QUrl& file)
{
emit urlSelected(file);
}
void OpenProjectPage::opsEntered(const QUrl& url)
{
emit urlSelected(url);
}
void OpenProjectPage::comboTextChanged( const QString& file )
{
emit urlSelected(absoluteUrl(file));
}
}
|