mirror of
https://github.com/subsurface/subsurface.git
synced 2024-11-28 05:00:20 +00:00
desktop/image: allow larger range for manual time shift
The QTimeEdit field is severely limited when it comes to the supported time range. By coding our own input / validation we can allow far larger time shifts. For simplicity, this always assumes hours:minutes format. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
parent
6ea4cfcc02
commit
4167b2ff14
3 changed files with 30 additions and 87 deletions
|
@ -31,72 +31,11 @@
|
|||
<item>
|
||||
<widget class="QGroupBox" name="groupBox">
|
||||
<property name="title">
|
||||
<string>Shift times of image(s) by</string>
|
||||
<string>Manually shift times of image(s) by hours:minutes</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<widget class="QTimeEdit" name="timeEdit">
|
||||
<property name="date">
|
||||
<date>
|
||||
<year>2000</year>
|
||||
<month>1</month>
|
||||
<day>1</day>
|
||||
</date>
|
||||
</property>
|
||||
<property name="maximumDateTime">
|
||||
<datetime>
|
||||
<hour>23</hour>
|
||||
<minute>59</minute>
|
||||
<second>59</second>
|
||||
<year>2010</year>
|
||||
<month>12</month>
|
||||
<day>31</day>
|
||||
</datetime>
|
||||
</property>
|
||||
<property name="minimumDateTime">
|
||||
<datetime>
|
||||
<hour>0</hour>
|
||||
<minute>0</minute>
|
||||
<second>0</second>
|
||||
<year>2000</year>
|
||||
<month>1</month>
|
||||
<day>1</day>
|
||||
</datetime>
|
||||
</property>
|
||||
<property name="maximumDate">
|
||||
<date>
|
||||
<year>2010</year>
|
||||
<month>12</month>
|
||||
<day>31</day>
|
||||
</date>
|
||||
</property>
|
||||
<property name="minimumDate">
|
||||
<date>
|
||||
<year>2000</year>
|
||||
<month>1</month>
|
||||
<day>1</day>
|
||||
</date>
|
||||
</property>
|
||||
<property name="maximumTime">
|
||||
<time>
|
||||
<hour>23</hour>
|
||||
<minute>59</minute>
|
||||
<second>59</second>
|
||||
</time>
|
||||
</property>
|
||||
<property name="minimumTime">
|
||||
<time>
|
||||
<hour>0</hour>
|
||||
<minute>0</minute>
|
||||
<second>0</second>
|
||||
</time>
|
||||
</property>
|
||||
<property name="displayFormat">
|
||||
<string>h:mm</string>
|
||||
</property>
|
||||
<property name="timeSpec">
|
||||
<enum>Qt::LocalTime</enum>
|
||||
</property>
|
||||
<widget class="QLineEdit" name="timeEdit">
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
|
|
|
@ -177,9 +177,10 @@ ShiftImageTimesDialog::ShiftImageTimesDialog(QWidget *parent, QStringList fileNa
|
|||
matchAllImages(false)
|
||||
{
|
||||
ui.setupUi(this);
|
||||
ui.timeEdit->setValidator(new QRegExpValidator(QRegExp("\\d{0,6}:[0-5]\\d")));
|
||||
connect(ui.syncCamera, SIGNAL(clicked()), this, SLOT(syncCameraClicked()));
|
||||
connect(ui.timeEdit, SIGNAL(timeChanged(const QTime &)), this, SLOT(timeEditChanged(const QTime &)));
|
||||
connect(ui.backwards, SIGNAL(toggled(bool)), this, SLOT(timeEditChanged()));
|
||||
connect(ui.timeEdit, &QLineEdit::textEdited, this, &ShiftImageTimesDialog::timeEdited);
|
||||
connect(ui.backwards, &QCheckBox::toggled, this, &ShiftImageTimesDialog::backwardsChanged);
|
||||
connect(ui.matchAllImages, SIGNAL(toggled(bool)), this, SLOT(matchAllImagesToggled(bool)));
|
||||
dcImageEpoch = (time_t)0;
|
||||
|
||||
|
@ -198,13 +199,13 @@ time_t ShiftImageTimesDialog::amount() const
|
|||
|
||||
void ShiftImageTimesDialog::setOffset(time_t offset)
|
||||
{
|
||||
if (offset >= 0) {
|
||||
int sign = offset >= 0 ? 1 : -1;
|
||||
time_t value = sign * offset;
|
||||
ui.timeEdit->setText(QString("%1:%2").arg(value / 3600).arg((value % 3600) / 60, 2, 10, QLatin1Char('0')));
|
||||
if (offset >= 0)
|
||||
ui.forward->setChecked(true);
|
||||
} else {
|
||||
else
|
||||
ui.backwards->setChecked(true);
|
||||
offset *= -1;
|
||||
}
|
||||
ui.timeEdit->setTime(QTime(offset / 3600, (offset % 3600) / 60, offset % 60));
|
||||
}
|
||||
|
||||
void ShiftImageTimesDialog::updateInvalid()
|
||||
|
@ -242,25 +243,28 @@ void ShiftImageTimesDialog::updateInvalid()
|
|||
}
|
||||
}
|
||||
|
||||
void ShiftImageTimesDialog::timeEditChanged(const QTime &time)
|
||||
void ShiftImageTimesDialog::timeEdited(const QString &timeText)
|
||||
{
|
||||
QDateTimeEdit::Section timeEditSection = ui.timeEdit->currentSection();
|
||||
ui.timeEdit->setEnabled(false);
|
||||
m_amount = time.hour() * 3600 + time.minute() * 60;
|
||||
if (ui.backwards->isChecked())
|
||||
m_amount *= -1;
|
||||
updateInvalid();
|
||||
ui.timeEdit->setEnabled(true);
|
||||
ui.timeEdit->setFocus();
|
||||
ui.timeEdit->setSelectedSection(timeEditSection);
|
||||
// simplistic indication of whether the string is valid
|
||||
if (ui.timeEdit->hasAcceptableInput()) {
|
||||
ui.timeEdit->setStyleSheet("");
|
||||
// parse based on the same reg exp used to validate...
|
||||
QRegExp re("(\\d{0,6}):(\\d\\d)");
|
||||
if (re.indexIn(timeText) != -1) {
|
||||
time_t hours = re.cap(1).toInt();
|
||||
time_t minutes = re.cap(2).toInt();
|
||||
m_amount = (ui.backwards->isChecked() ? -1 : 1) * (3600 * hours + 60 * minutes);
|
||||
updateInvalid();
|
||||
}
|
||||
} else {
|
||||
ui.timeEdit->setStyleSheet("QLineEdit { color: red;}");
|
||||
}
|
||||
}
|
||||
|
||||
void ShiftImageTimesDialog::timeEditChanged()
|
||||
void ShiftImageTimesDialog::backwardsChanged(bool)
|
||||
{
|
||||
if ((m_amount > 0) == ui.backwards->isChecked())
|
||||
m_amount *= -1;
|
||||
if (m_amount)
|
||||
updateInvalid();
|
||||
// simply use the timeEdit slot to deal with the sign change
|
||||
timeEdited(ui.timeEdit->text());
|
||||
}
|
||||
|
||||
URLDialog::URLDialog(QWidget *parent) : QDialog(parent)
|
||||
|
|
|
@ -77,8 +77,8 @@ private
|
|||
slots:
|
||||
void syncCameraClicked();
|
||||
void dcDateTimeChanged(const QDateTime &);
|
||||
void timeEditChanged(const QTime &time);
|
||||
void timeEditChanged();
|
||||
void timeEdited(const QString &timeText);
|
||||
void backwardsChanged(bool);
|
||||
void updateInvalid();
|
||||
void matchAllImagesToggled(bool);
|
||||
|
||||
|
|
Loading…
Reference in a new issue