/*
* DesktopInputDialog.cpp
*
* Copyright (C) 2009-19 by RStudio, PBC
*
* Unless you have received this program directly from RStudio pursuant
* to the terms of a commercial license agreement with RStudio, then
* this program is licensed to you under the terms of version 3 of the
* GNU Affero General Public License. This program is distributed WITHOUT
* ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,
* MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the
* AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.
*
*/
#include "DesktopInputDialog.hpp"
#include "DesktopUtils.hpp"
#include "ui_DesktopInputDialog.h"
#include
InputDialog::InputDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::InputDialog()),
pOK_(nullptr),
required_(true)
{
ui->setupUi(this);
setWindowFlags(Qt::Dialog | Qt::MSWindowsFixedSizeDialogHint);
pOK_ = new QPushButton(QString::fromUtf8("OK"));
ui->buttonBox->addButton(pOK_, QDialogButtonBox::AcceptRole);
QPushButton* pCancel = new QPushButton(QString::fromUtf8("Cancel"));
ui->buttonBox->addButton(pCancel, QDialogButtonBox::RejectRole);
ui->extraOption->setVisible(false);
}
InputDialog::~InputDialog()
{
delete ui;
}
QString InputDialog::caption()
{
return ui->label->text();
}
void InputDialog::setCaption(const QString& caption)
{
ui->label->setText(caption);
ui->lineEdit->setAccessibleName(caption);
}
QString InputDialog::textValue()
{
return ui->lineEdit->text();
}
void InputDialog::setTextValue(const QString& value)
{
ui->lineEdit->setText(value);
}
void InputDialog::setSelection(int offset, int length)
{
offset = std::min(offset, textValue().size());
length = std::min(length,
textValue().size() - offset);
ui->lineEdit->setSelection(offset, length);
}
void InputDialog::setOkButtonLabel(const QString& label)
{
pOK_->setText(label);
}
void InputDialog::setEchoMode(QLineEdit::EchoMode mode)
{
ui->lineEdit->setEchoMode(mode);
}
void InputDialog::setNumbersOnly(bool numbersOnly)
{
if (numbersOnly)
ui->lineEdit->setInputMask(QString::fromUtf8("D99999999"));
else
ui->lineEdit->setInputMask(QString());
}
void InputDialog::setRequired(bool required)
{
required_ = required;
}
void InputDialog::setExtraOptionPrompt(const QString& prompt)
{
ui->extraOption->setVisible(!prompt.isEmpty());
ui->extraOption->setText(prompt);
}
void InputDialog::setExtraOption(bool extraOption)
{
ui->extraOption->setCheckState(Qt::Checked);
}
bool InputDialog::extraOption()
{
return ui->extraOption->checkState() == Qt::Checked;
}
void InputDialog::done(int r)
{
if (QDialog::Accepted == r && required_) // ok was pressed
{
if (ui->lineEdit->text().size() == 0)
{
rstudio::desktop::showWarning(this,
QString::fromUtf8("Error"),
QString::fromUtf8("You must enter a value."),
QString());
return;
}
}
QDialog::done(r);
}