Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include "qxtstringspinbox.h"
00026
00027 class QxtStringSpinBoxPrivate : public QxtPrivate<QxtStringSpinBox>
00028 {
00029 public:
00030 QXT_DECLARE_PUBLIC(QxtStringSpinBox);
00031 int startsWith(const QString& start, QString& string) const;
00032 QStringList strings;
00033 };
00034
00035 int QxtStringSpinBoxPrivate::startsWith(const QString& start, QString& string) const
00036 {
00037 const int size = strings.size();
00038 for (int i = 0; i < size; ++i)
00039 {
00040 if (strings.at(i).startsWith(start, Qt::CaseInsensitive))
00041 {
00042
00043 string = strings.at(i);
00044 return i;
00045 }
00046 }
00047
00048 return -1;
00049 }
00050
00067 QxtStringSpinBox::QxtStringSpinBox(QWidget* pParent) : QSpinBox(pParent)
00068 {
00069 setRange(0, 0);
00070 }
00071
00075 QxtStringSpinBox::~QxtStringSpinBox()
00076 {}
00077
00082 const QStringList& QxtStringSpinBox::strings() const
00083 {
00084 return qxt_d().strings;
00085 }
00086
00087 void QxtStringSpinBox::setStrings(const QStringList& strings)
00088 {
00089 qxt_d().strings = strings;
00090 setRange(0, strings.size() - 1);
00091 if (!strings.isEmpty())
00092 setValue(0);
00093 }
00094
00098 void QxtStringSpinBox::fixup(QString& input) const
00099 {
00100
00101
00102
00103
00104
00105 input = input.simplified();
00106 if (!input.isEmpty())
00107 {
00108 qxt_d().startsWith(input, input);
00109 }
00110 }
00111
00115 QValidator::State QxtStringSpinBox::validate(QString& input, int& pos) const
00116 {
00117
00118
00119
00120
00121 Q_UNUSED(pos);
00122 QString temp;
00123 QValidator::State state = QValidator::Invalid;
00124 if (qxt_d().strings.contains(input))
00125 {
00126
00127 state = QValidator::Acceptable;
00128 }
00129 else if (input.isEmpty() || qxt_d().startsWith(input, temp) != -1)
00130 {
00131
00132 state = QValidator::Intermediate;
00133 }
00134
00135 return state;
00136 }
00137
00141 QString QxtStringSpinBox::textFromValue(int value) const
00142 {
00143 Q_ASSERT(qxt_d().strings.isEmpty() || (value >= 0 && value < qxt_d().strings.size()));
00144 return qxt_d().strings.isEmpty() ? QLatin1String("") : qxt_d().strings.at(value);
00145 }
00146
00150 int QxtStringSpinBox::valueFromText(const QString& text) const
00151 {
00152 return qxt_d().strings.indexOf(text);
00153 }