LUAEditorGoToLineDialog.cpp 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. /*
  2. * Copyright (c) Contributors to the Open 3D Engine Project.
  3. * For complete copyright and license terms please see the LICENSE at the root of this distribution.
  4. *
  5. * SPDX-License-Identifier: Apache-2.0 OR MIT
  6. *
  7. */
  8. #include "LUAEditorGoToLineDialog.hxx"
  9. #include <Source/LUA/moc_LUAEditorGoToLineDialog.cpp>
  10. #include <Source/LUA/ui_LUAEditorGoToLineDialog.h>
  11. #include <QDialogButtonBox>
  12. #include <QLineEdit>
  13. #include <QPushButton>
  14. #include <QRegExp>
  15. #include <QRegExpValidator>
  16. namespace LUAEditor
  17. {
  18. static constexpr const char* GotoLineDialogRegEx = "(^\\d+(:\\d+)?$)";
  19. LUAEditorGoToLineDialog::LUAEditorGoToLineDialog(QWidget* parent)
  20. : QDialog(parent)
  21. {
  22. m_lineNumber = 0;
  23. m_gui = azcreate(Ui::goToLineDlg, ());
  24. m_gui->setupUi(this);
  25. this->setWindowFlags(Qt::Dialog | Qt::MSWindowsFixedSizeDialogHint | Qt::WindowTitleHint | Qt::WindowCloseButtonHint);
  26. const QRegExp rx(GotoLineDialogRegEx);
  27. QRegExpValidator* const validator = new QRegExpValidator(rx, this);
  28. m_gui->lineNumber->setValidator(validator);
  29. connect(m_gui->lineNumber, &QLineEdit::textChanged, this, &LUAEditorGoToLineDialog::handleLineNumberInput);
  30. connect(m_gui->buttonBox, &QDialogButtonBox::accepted, this, &LUAEditorGoToLineDialog::validateAndAccept);
  31. connect(m_gui->buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject);
  32. }
  33. LUAEditorGoToLineDialog::~LUAEditorGoToLineDialog()
  34. {
  35. azdestroy(m_gui);
  36. }
  37. void LUAEditorGoToLineDialog::setLineNumber(int line, int newColumn) const
  38. {
  39. const QString text = QString::number(line) + QString(":") + QString::number(newColumn);
  40. m_gui->lineNumber->setText(text);
  41. m_gui->lineNumber->setFocus();
  42. m_gui->lineNumber->selectAll();
  43. }
  44. void LUAEditorGoToLineDialog::handleLineNumberInput(const QString& input)
  45. {
  46. const QRegularExpression re(GotoLineDialogRegEx);
  47. QPushButton* const button = m_gui->buttonBox->button(QDialogButtonBox::StandardButton::Ok);
  48. button->setEnabled(re.match(input).hasMatch());
  49. }
  50. void LUAEditorGoToLineDialog::validateAndAccept()
  51. {
  52. m_columnNumber = 0;
  53. const QString input = m_gui->lineNumber->text();
  54. const QStringList parts = input.split(':');
  55. if (parts.size() < 1) {
  56. return;
  57. }
  58. bool lineValid = false;
  59. bool columnValid = false;
  60. const int lineNumber = parts[0].toInt(&lineValid);
  61. if (lineValid && !parts[0].isEmpty()) {
  62. m_lineNumber = AZStd::max(lineNumber, 1);
  63. }
  64. if (parts.size() == 2) {
  65. const int columnNumber = parts[1].toInt(&columnValid);
  66. if (columnValid && !parts[1].isEmpty()) {
  67. m_columnNumber = AZStd::max(columnNumber, 0);
  68. }
  69. }
  70. }
  71. }