diff options
Diffstat (limited to 'src/plugins/boostbuildprojectmanager/filesselectionwizardpage.cpp')
-rw-r--r-- | src/plugins/boostbuildprojectmanager/filesselectionwizardpage.cpp | 232 |
1 files changed, 232 insertions, 0 deletions
diff --git a/src/plugins/boostbuildprojectmanager/filesselectionwizardpage.cpp b/src/plugins/boostbuildprojectmanager/filesselectionwizardpage.cpp new file mode 100644 index 00000000000..4a3b8b924c4 --- /dev/null +++ b/src/plugins/boostbuildprojectmanager/filesselectionwizardpage.cpp @@ -0,0 +1,232 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Mateusz Ĺoskot <[email protected]> +** +** This file, as part of Qt Creator Plugin for Boost.Build, +** was modified to accommodate OpenProjectWizard requirements. +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of Qt Creator. +** +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License Version 2.1 by the Free Software +** Foundation and appearing in the file LICENSE.txt included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License Version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +****************************************************************************/ + +#include "filesselectionwizardpage.h" + +#include "b2openprojectwizard.h" +#include "b2projectmanagerconstants.h" +#include "selectablefilesmodel.h" + +#include <coreplugin/icore.h> +#include <utils/pathchooser.h> + +#include <QVBoxLayout> +#include <QLineEdit> +#include <QPushButton> +#include <QFileInfo> + +namespace BoostBuildProjectManager { +namespace Internal { + +FilesSelectionWizardPage::FilesSelectionWizardPage(OpenProjectWizardDialog *openProjectWizard, QWidget *parent) + : QWizardPage(parent), m_openProjectWizardDialog(openProjectWizard), m_model(0), m_finished(false) +{ + QVBoxLayout *layout = new QVBoxLayout(this); + + createShowFileFilterControls(layout); + createHideFileFilterControls(layout); + createChooseBaseDirControls(layout); + createApplyButton(layout); + + m_view = new QTreeView; + m_view->setMinimumSize(500, 400); + m_view->setHeaderHidden(true); + m_view->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::MinimumExpanding); + m_label = new QLabel; + m_label->setMaximumWidth(500); + + layout->addWidget(m_view); + layout->addWidget(m_label); +} + +void FilesSelectionWizardPage::createHideFileFilterControls(QVBoxLayout *layout) +{ + QHBoxLayout *hbox = new QHBoxLayout; + m_hideFilesFilterLabel = new QLabel; + m_hideFilesFilterLabel->setText(tr("Hide files matching:")); + + m_hideFilesFilterLabel->hide(); + hbox->addWidget(m_hideFilesFilterLabel); + m_hideFilesfilterLineEdit = new QLineEdit; + + const QString filter = Core::ICore::settings()->value(QLatin1String(Constants::HIDE_FILE_FILTER_SETTING), + QLatin1String(Constants::HIDE_FILE_FILTER_DEFAULT)).toString(); + m_hideFilesfilterLineEdit->setText(filter); + m_hideFilesfilterLineEdit->hide(); + hbox->addWidget(m_hideFilesfilterLineEdit); + layout->addLayout(hbox); +} + +void FilesSelectionWizardPage::createShowFileFilterControls(QVBoxLayout *layout) +{ + QHBoxLayout *hbox = new QHBoxLayout; + m_showFilesFilterLabel = new QLabel; + m_showFilesFilterLabel->setText(tr("Show files matching:")); + m_showFilesFilterLabel->hide(); + hbox->addWidget(m_showFilesFilterLabel); + m_showFilesfilterLineEdit = new QLineEdit; + + const QString filter = Core::ICore::settings()->value(QLatin1String(Constants::SHOW_FILE_FILTER_SETTING), + QLatin1String(Constants::SHOW_FILE_FILTER_DEFAULT)).toString(); + m_showFilesfilterLineEdit->setText(filter); + m_showFilesfilterLineEdit->hide(); + hbox->addWidget(m_showFilesfilterLineEdit); + layout->addLayout(hbox); +} + +void FilesSelectionWizardPage::createChooseBaseDirControls(QVBoxLayout *layout) +{ + QHBoxLayout *hbox = new QHBoxLayout; + m_baseDirLabel = new QLabel; + m_baseDirLabel->setText(tr("Base directory:")); + m_baseDirLabel->hide(); + hbox->addWidget(m_baseDirLabel); + + m_lastBaseDir = m_openProjectWizardDialog->path(); + m_baseDirChooser = new Utils::PathChooser; + m_baseDirChooser->setEnabled(true); + m_baseDirChooser->setBaseDirectory(m_lastBaseDir); + m_baseDirChooser->setPath(m_lastBaseDir); + connect(m_baseDirChooser, SIGNAL(changed(QString)), this, SLOT(baseDirectoryChanged())); + hbox->addWidget(m_baseDirChooser); + + layout->addLayout(hbox); +} + +void FilesSelectionWizardPage::createApplyButton(QVBoxLayout *layout) +{ + QHBoxLayout *hbox = new QHBoxLayout; + + QSpacerItem *horizontalSpacer = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); + hbox->addItem(horizontalSpacer); + + m_applyFilterButton = new QPushButton(tr("Apply Filter"), this); + m_applyFilterButton->hide(); + hbox->addWidget(m_applyFilterButton); + layout->addLayout(hbox); + + connect(m_applyFilterButton, SIGNAL(clicked()), this, SLOT(applyFilter())); +} + +void FilesSelectionWizardPage::initializePage() +{ + m_view->setModel(0); + delete m_model; + m_model = new SelectableFilesModel(m_lastBaseDir, this); + connect(m_model, SIGNAL(parsingProgress(QString)), + this, SLOT(parsingProgress(QString))); + connect(m_model, SIGNAL(parsingFinished()), + this, SLOT(parsingFinished())); + m_model->startParsing(); + + m_hideFilesFilterLabel->setVisible(false); + m_hideFilesfilterLineEdit->setVisible(false); + + m_showFilesFilterLabel->setVisible(false); + m_showFilesfilterLineEdit->setVisible(false); + + m_applyFilterButton->setVisible(false); + m_view->setVisible(false); + m_label->setVisible(true); + m_view->setModel(m_model); +} + +void FilesSelectionWizardPage::cleanupPage() +{ + m_model->cancel(); + m_model->waitForFinished(); +} + +void FilesSelectionWizardPage::parsingProgress(const QString &text) +{ + m_label->setText(tr("Generating file list...\n\n%1").arg(text)); +} + +void FilesSelectionWizardPage::parsingFinished() +{ + m_finished = true; + + m_hideFilesFilterLabel->setVisible(true); + m_hideFilesfilterLineEdit->setVisible(true); + + m_showFilesFilterLabel->setVisible(true); + m_showFilesfilterLineEdit->setVisible(true); + + m_applyFilterButton->setVisible(true); + m_view->setVisible(true); + m_label->setVisible(false); + m_view->expand(m_view->model()->index(0,0, QModelIndex())); + emit completeChanged(); + applyFilter(); + // work around qt + m_openProjectWizardDialog->setTitleFormat(m_openProjectWizardDialog->titleFormat()); +} + +bool FilesSelectionWizardPage::isComplete() const +{ + return m_finished; +} + +QStringList FilesSelectionWizardPage::selectedPaths() const +{ + return m_model ? m_model->selectedPaths() : QStringList(); +} + +QStringList FilesSelectionWizardPage::selectedFiles() const +{ + return m_model ? m_model->selectedFiles() : QStringList(); +} + +void FilesSelectionWizardPage::applyFilter() +{ + const QString showFilesFilter = m_showFilesfilterLineEdit->text(); + Core::ICore::settings()->setValue(QLatin1String(Constants::SHOW_FILE_FILTER_SETTING), showFilesFilter); + + const QString hideFilesFilter = m_hideFilesfilterLineEdit->text(); + Core::ICore::settings()->setValue(QLatin1String(Constants::HIDE_FILE_FILTER_SETTING), hideFilesFilter); + + m_model->applyFilter(showFilesFilter, hideFilesFilter); +} + +void FilesSelectionWizardPage::baseDirectoryChanged() +{ + QString const baseDir(m_baseDirChooser->path()); + if (baseDir != m_lastBaseDir && QFileInfo(baseDir).isDir()) + { + m_lastBaseDir = baseDir; + initializePage(); + } +} +} // namespace Internal +} // namespace BoostBuildProjectManager |