mirror of
https://bitbucket.org/smil3y/kde-workspace.git
synced 2025-02-23 18:32:50 +00:00
kcontrol: implement basic format validator for locale KCM
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
This commit is contained in:
parent
c9f049c347
commit
82b381e634
2 changed files with 36 additions and 14 deletions
|
@ -39,6 +39,7 @@ static const int s_defaultbinary = static_cast<int>(KLocale::IECBinaryDialect);
|
|||
KCMLocale::KCMLocale(QWidget *parent, const QVariantList &args)
|
||||
: KCModule(KCMLocaleFactory::componentData(), parent, args),
|
||||
m_layout(nullptr),
|
||||
m_messagewidget(nullptr),
|
||||
m_languagelabel(nullptr),
|
||||
m_languagebox(nullptr),
|
||||
m_binarylabel(nullptr),
|
||||
|
@ -77,9 +78,15 @@ KCMLocale::KCMLocale(QWidget *parent, const QVariantList &args)
|
|||
|
||||
m_layout = new QGridLayout(this);
|
||||
|
||||
m_messagewidget = new KMessageWidget(this);
|
||||
m_messagewidget->setMessageType(KMessageWidget::Error);
|
||||
m_messagewidget->setCloseButtonVisible(false);
|
||||
m_messagewidget->hide();
|
||||
m_layout->addWidget(m_messagewidget, 0, 0, 1, 2);
|
||||
|
||||
m_languagelabel = new QLabel(this);
|
||||
m_languagelabel->setText(i18n("Language:"));
|
||||
m_layout->addWidget(m_languagelabel, 0, 0, s_labelsalignment);
|
||||
m_layout->addWidget(m_languagelabel, 1, 0, s_labelsalignment);
|
||||
m_languagebox = new KComboBox(this);
|
||||
// temporary map to sort by the displayed text
|
||||
QMap<QString, QString> languagesmap;
|
||||
|
@ -118,11 +125,11 @@ KCMLocale::KCMLocale(QWidget *parent, const QVariantList &args)
|
|||
m_languagebox->setToolTip(languagehelp);
|
||||
m_languagebox->setWhatsThis(languagehelp);
|
||||
connect(m_languagebox, SIGNAL(currentIndexChanged(int)), this, SLOT(slotLanguageChanged(int)));
|
||||
m_layout->addWidget(m_languagebox, 0, 1);
|
||||
m_layout->addWidget(m_languagebox, 1, 1);
|
||||
|
||||
m_binarylabel = new QLabel(this);
|
||||
m_binarylabel->setText(i18n("Byte size units:"));
|
||||
m_layout->addWidget(m_binarylabel, 1, 0, s_labelsalignment);
|
||||
m_layout->addWidget(m_binarylabel, 2, 0, s_labelsalignment);
|
||||
m_binarybox = new KComboBox(this);
|
||||
Q_ASSERT(int(KLocale::LastBinaryDialect) == int(KLocale::MetricBinaryDialect));
|
||||
m_binarybox->addItem(
|
||||
|
@ -154,11 +161,11 @@ KCMLocale::KCMLocale(QWidget *parent, const QVariantList &args)
|
|||
m_binarybox->setToolTip(binaryhelp);
|
||||
m_binarybox->setWhatsThis(binaryhelp);
|
||||
connect(m_binarybox, SIGNAL(currentIndexChanged(int)), this, SLOT(slotBinaryChanged(int)));
|
||||
m_layout->addWidget(m_binarybox, 1, 1);
|
||||
m_layout->addWidget(m_binarybox, 2, 1);
|
||||
|
||||
m_measurelabel = new QLabel(this);
|
||||
m_measurelabel->setText(i18n("Measurement system:"));
|
||||
m_layout->addWidget(m_measurelabel, 2, 0, s_labelsalignment);
|
||||
m_layout->addWidget(m_measurelabel, 3, 0, s_labelsalignment);
|
||||
m_measurebox = new KComboBox(this);
|
||||
Q_ASSERT(int(QLocale::MetricSystem) == 0);
|
||||
Q_ASSERT(int(QLocale::UKSystem) == 2);
|
||||
|
@ -178,10 +185,8 @@ KCMLocale::KCMLocale(QWidget *parent, const QVariantList &args)
|
|||
m_measurebox->setToolTip(measurehelp);
|
||||
m_measurebox->setWhatsThis(measurehelp);
|
||||
connect(m_measurebox, SIGNAL(currentIndexChanged(int)), this, SLOT(slotMeasureChanged(int)));
|
||||
m_layout->addWidget(m_measurebox, 2, 1);
|
||||
m_layout->addWidget(m_measurebox, 3, 1);
|
||||
|
||||
// TODO: validate date and time format, user usually has no clue what to enter and invalid
|
||||
// format will result in all sorts of bad stuff
|
||||
const QString datetimehelp = i18n(
|
||||
"<p>For the format details see the QDateTime documentation.</p>"
|
||||
);
|
||||
|
@ -218,7 +223,7 @@ KCMLocale::KCMLocale(QWidget *parent, const QVariantList &args)
|
|||
m_datenarrowedit->setWhatsThis(datetimehelp);
|
||||
connect(m_datenarrowedit, SIGNAL(textChanged(QString)), this, SLOT(slotDateOrTimeChanged(QString)));
|
||||
datelayout->addWidget(m_datenarrowedit, 2, 1);
|
||||
m_layout->addWidget(dategroup, 3, 0, 1, 2);
|
||||
m_layout->addWidget(dategroup, 4, 0, 1, 2);
|
||||
|
||||
QGroupBox* timegroup = new QGroupBox(this);
|
||||
timegroup->setTitle(i18n("Time format"));
|
||||
|
@ -251,7 +256,7 @@ KCMLocale::KCMLocale(QWidget *parent, const QVariantList &args)
|
|||
m_timenarrowedit->setWhatsThis(datetimehelp);
|
||||
connect(m_timenarrowedit, SIGNAL(textChanged(QString)), this, SLOT(slotDateOrTimeChanged(QString)));
|
||||
timelayout->addWidget(m_timenarrowedit, 2, 1);
|
||||
m_layout->addWidget(timegroup, 4, 0, 1, 2);
|
||||
m_layout->addWidget(timegroup, 5, 0, 1, 2);
|
||||
|
||||
QGroupBox* datetimegroup = new QGroupBox(this);
|
||||
datetimegroup->setTitle(i18n("Date and time format"));
|
||||
|
@ -284,14 +289,14 @@ KCMLocale::KCMLocale(QWidget *parent, const QVariantList &args)
|
|||
m_datetimenarrowedit->setWhatsThis(datetimehelp);
|
||||
connect(m_datetimenarrowedit, SIGNAL(textChanged(QString)), this, SLOT(slotDateOrTimeChanged(QString)));
|
||||
datetimelayout->addWidget(m_datetimenarrowedit, 2, 1);
|
||||
m_layout->addWidget(datetimegroup, 5, 0, 1, 2);
|
||||
m_layout->addWidget(datetimegroup, 6, 0, 1, 2);
|
||||
|
||||
datelayout->setColumnMinimumWidth(0, groupsalignment);
|
||||
timelayout->setColumnMinimumWidth(0, groupsalignment);
|
||||
datetimelayout->setColumnMinimumWidth(0, groupsalignment);
|
||||
|
||||
m_spacer = new QSpacerItem(1, 1, QSizePolicy::Expanding, QSizePolicy::Expanding);
|
||||
m_layout->addItem(m_spacer, 6, 1, 2);
|
||||
m_layout->addItem(m_spacer, 7, 1, 2);
|
||||
|
||||
setLayout(m_layout);
|
||||
}
|
||||
|
@ -509,8 +514,23 @@ void KCMLocale::slotMeasureChanged(const int index)
|
|||
|
||||
void KCMLocale::slotDateOrTimeChanged(const QString &text)
|
||||
{
|
||||
Q_UNUSED(text);
|
||||
emit changed(true);
|
||||
// validate date and time format, user usually has no clue what to enter and invalid format
|
||||
// (such as empty one) will result in all sorts of bad stuff
|
||||
bool valid = true;
|
||||
QString message;
|
||||
if (text.isEmpty()) {
|
||||
valid = false;
|
||||
message = i18n("Date/time format cannot be empty");
|
||||
}
|
||||
if (!valid) {
|
||||
m_messagewidget->show();
|
||||
m_messagewidget->setText(message);
|
||||
// disallow saving invalid formats
|
||||
emit changed(false);
|
||||
} else {
|
||||
m_messagewidget->hide();
|
||||
emit changed(true);
|
||||
}
|
||||
}
|
||||
|
||||
#include "moc_kcmlocale.cpp"
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
#define KCMLOCALE_H
|
||||
|
||||
#include <KCModule>
|
||||
#include <KMessageWidget>
|
||||
#include <KComboBox>
|
||||
#include <KLineEdit>
|
||||
#include <QGridLayout>
|
||||
|
@ -51,6 +52,7 @@ private:
|
|||
void loadLocaleSettings();
|
||||
|
||||
QGridLayout* m_layout;
|
||||
KMessageWidget* m_messagewidget;
|
||||
QLabel* m_languagelabel;
|
||||
KComboBox* m_languagebox;
|
||||
QLabel* m_binarylabel;
|
||||
|
|
Loading…
Add table
Reference in a new issue