コード例 #1
0
/******************************************************************************
*  Enable/disable hours/minutes units (if hours/minutes were permitted in the
*  constructor).
*/
TimePeriod::Units TimePeriod::setDateOnly(const Duration& perod, bool dateOnly, bool signal)
{
	Duration oldinterval = 0;
	if (signal)
		oldinterval = period();
	int index = mUnitsCombo->currentIndex();
	Units units = static_cast<Units>(index + mDateOnlyOffset);
	if (!mNoHourMinute)
	{
		if (!dateOnly  &&  mDateOnlyOffset)
		{
			// Change from date-only to allow hours/minutes
			mUnitsCombo->insertItem(0, i18n_minutes());
			mUnitsCombo->insertItem(1, i18n_hours_mins());
			mDateOnlyOffset = 0;
			adjustDayWeekShown();
			mUnitsCombo->setCurrentIndex(index += 2);
		}
		else if (dateOnly  &&  !mDateOnlyOffset)
		{
			// Change from allowing hours/minutes to date-only
			mUnitsCombo->removeItem(0);
			mUnitsCombo->removeItem(0);
			mDateOnlyOffset = 2;
			if (index > 2)
				index -= 2;
			else
				index = 0;
			adjustDayWeekShown();
			mUnitsCombo->setCurrentIndex(index);
			if (units == HoursMinutes  ||  units == Minutes)
			{
				// Set units to days and round up the warning period
				units = Days;
				mUnitsCombo->setCurrentIndex(Days - mDateOnlyOffset);
				mSpinBox->setValue(perod.asDays());
			}
			showHourMin(false);
		}
	}

	if (signal)
	{
		Duration newinterval = period();
		if (newinterval != oldinterval)
			emit valueChanged(newinterval);
	}
	return units;
}