X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcontrib%2Flibqxt-2007-10-24%2Fsrc%2Fgui%2Fqxtstringspinbox.cpp;fp=src%2Fcontrib%2Flibqxt-2007-10-24%2Fsrc%2Fgui%2Fqxtstringspinbox.cpp;h=e04b67ea40ab34d47160d05d131521633bc86442;hp=0000000000000000000000000000000000000000;hb=a634acadbcf6017474f68a3eaf7cb632660e9e49;hpb=cd122ca8e0d2c0ffc5397e0a813c75d791a7e6e3 diff --git a/src/contrib/libqxt-2007-10-24/src/gui/qxtstringspinbox.cpp b/src/contrib/libqxt-2007-10-24/src/gui/qxtstringspinbox.cpp new file mode 100644 index 00000000..e04b67ea --- /dev/null +++ b/src/contrib/libqxt-2007-10-24/src/gui/qxtstringspinbox.cpp @@ -0,0 +1,140 @@ +/**************************************************************************** +** +** Copyright (C) Qxt Foundation. Some rights reserved. +** +** This file is part of the QxtGui module of the Qt eXTension library +** +** This library is free software; you can redistribute it and/or modify it +** under the terms of th Common Public License, version 1.0, as published by +** IBM. +** +** This file is provided "AS IS", without WARRANTIES OR CONDITIONS OF ANY +** KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY +** WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR +** FITNESS FOR A PARTICULAR PURPOSE. +** +** You should have received a copy of the CPL along with this file. +** See the LICENSE file and the cpl1.0.txt file included with the source +** distribution for more information. If you did not receive a copy of the +** license, contact the Qxt Foundation. +** +** +** +****************************************************************************/ +#include "qxtstringspinbox.h" + +class QxtStringSpinBoxPrivate : public QxtPrivate +{ +public: + QXT_DECLARE_PUBLIC(QxtStringSpinBox); + int startsWith(const QString& start, QString& string) const; + QStringList strings; +}; + +int QxtStringSpinBoxPrivate::startsWith(const QString& start, QString& string) const +{ + const int size = strings.size(); + for (int i = 0; i < size; ++i) + { + if (strings.at(i).startsWith(start, Qt::CaseInsensitive)) + { + // found + string = strings.at(i); + return i; + } + } + // not found + return -1; +} + +/*! + \class QxtStringSpinBox QxtStringSpinBox + \ingroup QxtGui + \brief A spin box with string items. + + QxtStringSpinBox is spin box that takes strings. QxtStringSpinBox allows + the user to choose a value by clicking the up and down buttons or by + pressing Up or Down on the keyboard to increase or decrease the value + currently displayed. The user can also type the value in manually. + + \image html qxtstringspinbox.png "QxtStringSpinBox in Cleanlooks style." + */ + +/*! + Constructs a new QxtStringSpinBox with \a parent. + */ +QxtStringSpinBox::QxtStringSpinBox(QWidget* pParent) : QSpinBox(pParent) +{ + setRange(0, 0); +} + +/*! + Destructs the spin box. + */ +QxtStringSpinBox::~QxtStringSpinBox() +{} + +/*! + \property QxtStringSpinBox::strings + \brief This property holds the string items of the spin box. + */ +const QStringList& QxtStringSpinBox::strings() const +{ + return qxt_d().strings; +} + +void QxtStringSpinBox::setStrings(const QStringList& strings) +{ + qxt_d().strings = strings; + setRange(0, strings.size() - 1); + if (!strings.isEmpty()) + setValue(0); +} + +void QxtStringSpinBox::fixup(QString& input) const +{ + // just attempt to change the input string to be valid according to the string list + // no need to result in a valid string, callers of this function are responsible to + // re-test the validity afterwards + + // try finding a string from the list which starts with input + input = input.simplified(); + if (!input.isEmpty()) + { + qxt_d().startsWith(input, input); + } +} + +QValidator::State QxtStringSpinBox::validate(QString& input, int& pos) const +{ + // Invalid: input is invalid according to the string list + // Intermediate: it is likely that a little more editing will make the input acceptable + // (e.g. the user types "A" and stringlist contains "ABC") + // Acceptable: the input is valid. + Q_UNUSED(pos); + QString temp; + QValidator::State state = QValidator::Invalid; + if (qxt_d().strings.contains(input)) + { + // exact match + state = QValidator::Acceptable; + } + else if (input.isEmpty() || qxt_d().startsWith(input, temp) != -1) + { + // still empty or some string in the list starts with input + state = QValidator::Intermediate; + } + // else invalid + return state; +} + +QString QxtStringSpinBox::textFromValue(int value) const +{ + Q_ASSERT(qxt_d().strings.isEmpty() || (value >= 0 && value < qxt_d().strings.size())); + return qxt_d().strings.isEmpty() ? QLatin1String("") : qxt_d().strings.at(value); +} + +int QxtStringSpinBox::valueFromText(const QString& text) const +{ + return qxt_d().strings.indexOf(text); +}