Files
qt-creator/src/libs/utils/filewizardpage.cpp

183 lines
4.6 KiB
C++
Raw Normal View History

// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
2008-12-02 14:09:21 +01:00
2008-12-02 12:01:29 +01:00
#include "filewizardpage.h"
#include "wizard.h" // TODO: only because of SHORT_TITLE_PROPERTY
/*!
\class Utils::FileWizardPage
\brief The FileWizardPage class is a standard wizard page for a single file
letting the user choose name
and path.
The name and path labels can be changed. By default they are simply "Name:"
and "Path:".
*/
#include <utils/filenamevalidatinglineedit.h>
#include <utils/layoutbuilder.h>
#include <utils/pathchooser.h>
#include <QApplication>
#include <QFormLayout>
#include <QLabel>
2008-12-02 12:01:29 +01:00
namespace Utils {
class FileWizardPagePrivate
2008-12-02 12:01:29 +01:00
{
public:
FileWizardPagePrivate() = default;
bool m_complete = false;
QLabel *m_defaultSuffixLabel;
QLabel *m_nameLabel;
FileNameValidatingLineEdit *m_nameLineEdit;
QLabel *m_pathLabel;
PathChooser *m_pathChooser;
2008-12-02 12:01:29 +01:00
};
FileWizardPage::FileWizardPage(QWidget *parent) :
WizardPage(parent),
d(new FileWizardPagePrivate)
2008-12-02 12:01:29 +01:00
{
setTitle(tr("Choose the Location"));
resize(368, 102);
d->m_defaultSuffixLabel = new QLabel;
d->m_nameLabel = new QLabel;
d->m_nameLineEdit = new FileNameValidatingLineEdit;
d->m_nameLineEdit->setObjectName("nameLineEdit");
d->m_pathLabel = new QLabel;
d->m_pathChooser = new PathChooser;
d->m_pathChooser->setExpectedKind(PathChooser::Directory);
d->m_nameLabel->setText(tr("File name:"));
d->m_pathLabel->setText(tr("Path:"));
using namespace Layouting;
Form {
empty, d->m_defaultSuffixLabel, br,
d->m_nameLabel, d->m_nameLineEdit, br,
d->m_pathLabel, d->m_pathChooser
}.attachTo(this);
connect(d->m_pathChooser, &PathChooser::validChanged,
this, &FileWizardPage::slotValidChanged);
connect(d->m_nameLineEdit, &FancyLineEdit::validChanged,
this, &FileWizardPage::slotValidChanged);
connect(d->m_pathChooser, &PathChooser::returnPressed,
this, &FileWizardPage::slotActivated);
connect(d->m_nameLineEdit, &FancyLineEdit::validReturnPressed,
this, &FileWizardPage::slotActivated);
setProperty(SHORT_TITLE_PROPERTY, tr("Location"));
registerFieldWithName(QLatin1String("Path"), d->m_pathChooser, "path", SIGNAL(textChanged(QString)));
registerFieldWithName(QLatin1String("FileName"), d->m_nameLineEdit);
2008-12-02 12:01:29 +01:00
}
FileWizardPage::~FileWizardPage()
{
delete d;
2008-12-02 12:01:29 +01:00
}
QString FileWizardPage::fileName() const
2008-12-02 12:01:29 +01:00
{
return d->m_nameLineEdit->text();
2008-12-02 12:01:29 +01:00
}
FilePath FileWizardPage::filePath() const
{
return d->m_pathChooser->filePath();
}
void FileWizardPage::setFilePath(const FilePath &filePath)
{
d->m_pathChooser->setFilePath(filePath);
}
2008-12-02 12:01:29 +01:00
QString FileWizardPage::path() const
{
return d->m_pathChooser->filePath().toString();
2008-12-02 12:01:29 +01:00
}
void FileWizardPage::setPath(const QString &path)
{
d->m_pathChooser->setFilePath(FilePath::fromString(path));
2008-12-02 12:01:29 +01:00
}
void FileWizardPage::setFileName(const QString &name)
2008-12-02 12:01:29 +01:00
{
d->m_nameLineEdit->setText(name);
2008-12-02 12:01:29 +01:00
}
void FileWizardPage::setAllowDirectoriesInFileSelector(bool allow)
{
d->m_nameLineEdit->setAllowDirectories(allow);
}
2008-12-02 12:01:29 +01:00
bool FileWizardPage::isComplete() const
{
return d->m_complete;
2008-12-02 12:01:29 +01:00
}
void FileWizardPage::setFileNameLabel(const QString &label)
{
d->m_nameLabel->setText(label);
}
void FileWizardPage::setPathLabel(const QString &label)
{
d->m_pathLabel->setText(label);
}
void FileWizardPage::setDefaultSuffix(const QString &suffix)
{
if (suffix.isEmpty()) {
const auto layout = qobject_cast<QFormLayout *>(this->layout());
if (layout->rowCount() == 3)
layout->removeRow(0);
} else {
d->m_defaultSuffixLabel->setText(
tr("The default suffix if you do not explicitly specify a file extension is \".%1\".")
.arg(suffix));
}
}
bool FileWizardPage::forceFirstCapitalLetterForFileName() const
{
return d->m_nameLineEdit->forceFirstCapitalLetter();
}
void FileWizardPage::setForceFirstCapitalLetterForFileName(bool b)
{
d->m_nameLineEdit->setForceFirstCapitalLetter(b);
}
2008-12-02 12:01:29 +01:00
void FileWizardPage::slotValidChanged()
{
const bool newComplete = d->m_pathChooser->isValid() && d->m_nameLineEdit->isValid();
if (newComplete != d->m_complete) {
d->m_complete = newComplete;
2008-12-02 12:01:29 +01:00
emit completeChanged();
}
}
void FileWizardPage::slotActivated()
{
if (d->m_complete)
2008-12-02 12:01:29 +01:00
emit activated();
}
bool FileWizardPage::validateBaseName(const QString &name, QString *errorMessage /* = 0*/)
{
return FileNameValidatingLineEdit::validateFileName(name, false, errorMessage);
2008-12-02 12:01:29 +01:00
}
} // namespace Utils