summaryrefslogtreecommitdiffstats
path: root/src/Authoring/Qt3DStudio/Application/DurationEditDlg.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/Authoring/Qt3DStudio/Application/DurationEditDlg.cpp')
-rw-r--r--src/Authoring/Qt3DStudio/Application/DurationEditDlg.cpp214
1 files changed, 214 insertions, 0 deletions
diff --git a/src/Authoring/Qt3DStudio/Application/DurationEditDlg.cpp b/src/Authoring/Qt3DStudio/Application/DurationEditDlg.cpp
new file mode 100644
index 00000000..82221860
--- /dev/null
+++ b/src/Authoring/Qt3DStudio/Application/DurationEditDlg.cpp
@@ -0,0 +1,214 @@
+/****************************************************************************
+**
+** Copyright (C) 2002 NVIDIA Corporation.
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "ui_DurationEditDlg.h"
+#include "DurationEditDlg.h"
+#include "TimeEnums.h"
+#include <QtGui/qvalidator.h>
+
+CDurationEditDlg::CDurationEditDlg(QWidget *parent)
+ : QDialog(parent)
+ , m_ui(new Ui::DurationEditDlg)
+{
+ m_ui->setupUi(this);
+ setWindowFlag(Qt::WindowContextHelpButtonHint, false); // remove '?' from the dialog title bar
+
+ QIntValidator *minValidator = new QIntValidator(this);
+ minValidator->setRange(0, 59);
+ m_ui->lineEditMinutes->setValidator(minValidator);
+ m_ui->lineEditEndMinutes->setValidator(minValidator);
+ QIntValidator *secValidator = new QIntValidator(this);
+ secValidator->setRange(0, 59);
+ m_ui->lineEditSeconds->setValidator(secValidator);
+ m_ui->lineEditEndSeconds->setValidator(secValidator);
+ QIntValidator *msecValidator = new QIntValidator(this);
+ msecValidator->setRange(0, 999);
+ m_ui->lineEditMilliseconds->setValidator(msecValidator);
+ m_ui->lineEditEndMilliseconds->setValidator(msecValidator);
+
+ connect(m_ui->lineEditMinutes, &QLineEdit::textEdited,
+ this, &CDurationEditDlg::onStartTimeChanged);
+ connect(m_ui->lineEditSeconds, &QLineEdit::textEdited,
+ this, &CDurationEditDlg::onStartTimeChanged);
+ connect(m_ui->lineEditMilliseconds, &QLineEdit::textEdited,
+ this, &CDurationEditDlg::onStartTimeChanged);
+
+ connect(m_ui->lineEditEndMinutes, &QLineEdit::textEdited,
+ this, &CDurationEditDlg::onEndTimeChanged);
+ connect(m_ui->lineEditEndSeconds, &QLineEdit::textEdited,
+ this, &CDurationEditDlg::onEndTimeChanged);
+ connect(m_ui->lineEditEndMilliseconds, &QLineEdit::textEdited,
+ this, &CDurationEditDlg::onEndTimeChanged);
+}
+
+CDurationEditDlg::~CDurationEditDlg()
+{
+ delete m_ui;
+}
+
+/**
+ * Initializes and shows the Duration Edit Dialog Box.
+ * @param startTime is the initial start time, which will be shown when the time edit
+ * dialog box pops up
+ * @param endTime is the initial end time, which will be shown when the time edit
+ * dialog box pops up
+ * @param inCallback is the target object for the callbacks
+ */
+void CDurationEditDlg::showDialog(long startTime, long endTime, ITimeChangeCallback *inCallback)
+{
+ m_Callback = inCallback;
+
+ // Set initial values to dialog
+ formatTime(startTime, true);
+ formatTime(endTime, false);
+
+ exec();
+}
+
+void CDurationEditDlg::formatTime(long inTime, bool startTime)
+{
+ long mins = 0;
+ long secs = 0;
+ long mils = 0;
+
+ if (inTime != 0) {
+ mins = inTime % 3600000 / 60000;
+ secs = inTime % 60000 / 1000;
+ mils = inTime % 1000;
+ }
+
+ // display milliseconds in 3 digits (5 -> 005)
+ QString milsStr = QString("%1").arg(mils, 3, 10, QChar('0'));
+
+ if (startTime) {
+ m_ui->lineEditMinutes->setText(QString::number(mins));
+ m_ui->lineEditSeconds->setText(QString::number(secs));
+ m_ui->lineEditMilliseconds->setText(milsStr);
+
+ // Select the biggest non-zero unit
+ if (mins > 0) {
+ m_ui->lineEditMinutes->setFocus();
+ m_ui->lineEditMinutes->selectAll();
+ } else if (secs > 0) {
+ m_ui->lineEditSeconds->setFocus();
+ m_ui->lineEditSeconds->selectAll();
+ } else {
+ m_ui->lineEditMilliseconds->setFocus();
+ m_ui->lineEditMilliseconds->selectAll();
+ }
+ } else {
+ m_ui->lineEditEndMinutes->setText(QString::number(mins));
+ m_ui->lineEditEndSeconds->setText(QString::number(secs));
+ m_ui->lineEditEndMilliseconds->setText(milsStr);
+ }
+}
+
+void CDurationEditDlg::accept()
+{
+ m_Callback->Commit();
+ QDialog::accept();
+}
+
+void CDurationEditDlg::reject()
+{
+ m_Callback->Rollback();
+ QDialog::reject();
+}
+
+void CDurationEditDlg::updateObjectTime(long inTime, bool startTime)
+{
+ if (m_Callback) {
+ if (startTime)
+ m_Callback->ChangeStartTime(inTime); // Update Start Time
+ else
+ m_Callback->ChangeEndTime(inTime); // Update End Time
+ }
+}
+
+void CDurationEditDlg::onStartTimeChanged()
+{
+ long min = m_ui->lineEditMinutes->text().toInt();
+ long sec = m_ui->lineEditSeconds->text().toInt();
+ long msec = m_ui->lineEditMilliseconds->text().toInt();
+
+ // Keep min & sec values under 60
+ if (min > 59) {
+ min = 59;
+ m_ui->lineEditMinutes->setText(QString::number(min));
+ }
+ if (sec > 59) {
+ sec = 59;
+ m_ui->lineEditSeconds->setText(QString::number(sec));
+ }
+
+ long theGoToTime = min * 60000 + sec * 1000 + msec;
+
+ // Go to the time specified in the start time edit display
+ updateObjectTime(theGoToTime, true);
+
+ // If max number of digits reached in a number field, select the next
+ if (m_ui->lineEditMinutes->hasFocus() && min > 9) {
+ m_ui->lineEditSeconds->setFocus();
+ m_ui->lineEditSeconds->selectAll();
+ } else if (m_ui->lineEditSeconds->hasFocus() && sec > 9) {
+ m_ui->lineEditMilliseconds->setFocus();
+ m_ui->lineEditMilliseconds->selectAll();
+ }
+}
+
+void CDurationEditDlg::onEndTimeChanged()
+{
+ long min = m_ui->lineEditEndMinutes->text().toInt();
+ long sec = m_ui->lineEditEndSeconds->text().toInt();
+ long msec = m_ui->lineEditEndMilliseconds->text().toInt();
+
+ // Keep min & sec values under 60
+ if (min > 59) {
+ min = 59;
+ m_ui->lineEditEndMinutes->setText(QString::number(min));
+ }
+ if (sec > 59) {
+ sec = 59;
+ m_ui->lineEditEndSeconds->setText(QString::number(sec));
+ }
+
+ long theGoToTime = min * 60000 + sec * 1000 + msec;
+
+ // Go to the time specified in the end time edit display
+ updateObjectTime(theGoToTime, false);
+
+ // If max number of digits reached in a number field, select the next
+ if (m_ui->lineEditEndMinutes->hasFocus() && min > 9) {
+ m_ui->lineEditEndSeconds->setFocus();
+ m_ui->lineEditEndSeconds->selectAll();
+ } else if (m_ui->lineEditEndSeconds->hasFocus() && sec > 9) {
+ m_ui->lineEditEndMilliseconds->setFocus();
+ m_ui->lineEditEndMilliseconds->selectAll();
+ }
+}