23 #include <tqvalidator.h>
24 #include <tqlineedit.h>
25 #include <tdelocale.h>
27 #include "timespinbox.moc"
30 class TimeSpinBox::TimeValidator :
public TQValidator
33 TimeValidator(
int minMin,
int maxMin, TQWidget* parent,
const char* name = 0)
34 : TQValidator(parent, name),
35 minMinute(minMin), maxMinute(maxMin), m12Hour(false), mPm(false) { }
36 virtual State validate(TQString&,
int&)
const;
37 int minMinute, maxMinute;
58 :
SpinBox2(0, 1439, 1, 60, parent, name),
63 mEnteredSetValue(false)
65 mValidator =
new TimeValidator(0, 1439,
this,
"TimeSpinBox validator");
66 mValidator->m12Hour = m12Hour;
73 connect(
this, TQ_SIGNAL(
valueChanged(
int)), TQ_SLOT(slotValueChanged(
int)));
80 :
SpinBox2(minMinute, maxMinute, 1, 60, parent, name),
81 mMinimumValue(minMinute),
84 mEnteredSetValue(false)
86 mValidator =
new TimeValidator(minMinute, maxMinute,
this,
"TimeSpinBox validator");
91 setAlignment(TQApplication::reverseLayout() ? TQt::AlignLeft : TQt::AlignRight);
96 return i18n(
"Press the Shift key while clicking the spin buttons to adjust the time by a larger step (6 hours / 5 minutes).");
104 TQString TimeSpinBox::mapValueToText(
int v)
114 s.sprintf((
wrapping() ?
"%02d:%02d" :
"%d:%02d"), v/60, v%60);
124 int TimeSpinBox::mapTextToValue(
bool* ok)
127 int colon =
text.find(
':');
131 TQString hour =
text.left(colon).stripWhiteSpace();
132 TQString minute =
text.mid(colon + 1).stripWhiteSpace();
133 if (!minute.isEmpty())
137 int m = minute.toUInt(&okmin);
140 h = hour.toUInt(&okhour);
141 if (okhour && okmin && m < 60)
145 if (h == 0 || h > 12)
153 if (t >= mMinimumValue && t <=
maxValue())
162 else if (
text.length() == 4)
166 int mins =
text.toUInt(&okn);
173 if (h == 0 || h > 12)
181 if (h < 24 && m < 60 && t >= mMinimumValue && t <=
maxValue())
202 if (valid && mInvalid)
205 if (
value() < mMinimumValue)
210 else if (!valid && !mInvalid)
224 mMinimumValue = minutes;
233 if (!mEnteredSetValue)
235 mEnteredSetValue =
true;
236 mPm = (minutes >= 720);
248 mEnteredSetValue =
false;
275 return value() >= mMinimumValue;
278 void TimeSpinBox::slotValueChanged(
int value)
280 mPm = mValidator->mPm = (
value >= 720);
283 TQSize TimeSpinBox::sizeHint()
const
285 TQSize sz = SpinBox2::sizeHint();
286 TQFontMetrics fm(font());
287 return TQSize(sz.width() + fm.width(
":"), sz.height());
290 TQSize TimeSpinBox::minimumSizeHint()
const
292 TQSize sz = SpinBox2::minimumSizeHint();
293 TQFontMetrics fm(font());
294 return TQSize(sz.width() + fm.width(
":"), sz.height());
302 TQValidator::State TimeSpinBox::TimeValidator::validate(TQString& text,
int& )
const
304 TQString cleanText = text.stripWhiteSpace();
305 if (cleanText.isEmpty())
306 return TQValidator::Intermediate;
307 TQValidator::State state = TQValidator::Acceptable;
312 int colon = cleanText.find(
':');
315 TQString minute = cleanText.mid(colon + 1);
316 if (minute.isEmpty())
317 state = TQValidator::Intermediate;
318 else if ((mn = minute.toUInt(&ok)) >= 60 || !ok)
319 return TQValidator::Invalid;
321 hour = cleanText.left(colon);
323 else if (maxMinute >= 1440)
327 state = TQValidator::Intermediate;
331 if (cleanText.length() > 4)
332 return TQValidator::Invalid;
333 if (cleanText.length() < 4)
334 state = TQValidator::Intermediate;
335 hour = cleanText.left(2);
336 TQString minute = cleanText.mid(2);
337 if (!minute.isEmpty()
338 && ((mn = minute.toUInt(&ok)) >= 60 || !ok))
339 return TQValidator::Invalid;
344 hr = hour.toUInt(&ok);
347 if (hr == 0 || hr > 12)
354 if (!ok || hr > maxMinute/60)
355 return TQValidator::Invalid;
357 if (state == TQValidator::Acceptable)
359 int t = hr * 60 + mn;
360 if (t < minMinute || t > maxMinute)
361 return TQValidator::Invalid;
virtual void setMinValue(int val)
Sets the minimum value of the spin box.
void setSelectOnStep(bool sel)
Sets whether the spin box value text should be selected when its value is stepped.
Spin box with a pair of spin buttons on either side.
virtual void stepUp()
Increments the spin box value.
TQString text() const
Returns the spin box's text, including any prefix() and suffix().
virtual void setValidator(const TQValidator *v)
Sets the validator to v.
void setValid(bool)
Sets the spin box as holding a valid or invalid value.
static TQString shiftWhatsThis()
Returns a text describing use of the shift key as an accelerator for the spin buttons,...
bool isValid() const
Returns true if the spin box holds a valid value.
virtual void stepUp()
Increments the current value by adding the unshifted step increment for the right-hand spin buttons.
virtual void setMinValue(int minutes)
Sets the maximum value which can be held in the spin box.
virtual void setWrapping(bool on)
Sets whether it is possible to step the value from the highest value to the lowest value and vice ver...
virtual void setSpecialValueText(const TQString &text)
Sets the special-value text which, if non-null, is displayed instead of a numeric value when the curr...
int maxValue() const
Returns the maximum value of the spin box.
virtual void setValue(int val)
Sets the current value to val.
void setAlignment(int a)
Set the text alignment of the widget.
TimeSpinBox(bool use24hour, TQWidget *parent=0, const char *name=0)
Constructor for a wrapping time spin box which can be used to enter a time of day.
virtual void stepDown()
Decrements the spin box value.
int value() const
Returns the current value of the spin box.
virtual void setValue(int minutes)
Sets the value of the spin box.
virtual TQString cleanText() const
Returns the spin box's text with no prefix(), suffix() or leading or trailing whitespace.
virtual void stepDown()
Decrements the current value by subtracting the unshifted step increment for the right-hand spin butt...
TQTime time() const
Returns the current value held in the spin box.
void setShiftSteps(int line, int page)
Sets the shifted step increments for the two pairs of spin buttons, i.e.
void setReverseWithLayout(bool reverse)
Sets whether the spin button pairs should be reversed for a right-to-left language.
void valueChanged(int value)
Signal which is emitted whenever the value of the spin box changes.
bool wrapping() const
Returns whether it is possible to step the value from the highest value to the lowest value and vice ...