ConnectionEditDialog.cpp 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  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 "ConnectionEditDialog.h"
  9. #include <AzQtComponents/Components/Widgets/SpinBox.h>
  10. #include "../connection/connectionManager.h"
  11. #include <QDialogButtonBox>
  12. #include <QGridLayout>
  13. #include <QLabel>
  14. static QVariant dataAtColumn(const QModelIndex& index, int column)
  15. {
  16. QModelIndex columnIndex = index.sibling(index.row(), column);
  17. return columnIndex.data(Qt::DisplayRole);
  18. }
  19. void setDataAtColumn(ConnectionManager* connectionManager, const QModelIndex& index, int column, const QVariant& data)
  20. {
  21. QModelIndex columnIndex = index.sibling(index.row(), column);
  22. connectionManager->setData(columnIndex, data, Qt::DisplayRole);
  23. }
  24. template <typename WidgetType>
  25. WidgetType* createGridRowWidget(QGridLayout* gridLayout, int gridRow, QDialog* parent, const QString& label)
  26. {
  27. QLabel* labelWidget = new QLabel(label, parent);
  28. gridLayout->addWidget(labelWidget, gridRow, 0, Qt::AlignRight);
  29. WidgetType* widget = new WidgetType(parent);
  30. gridLayout->addWidget(widget, gridRow, 1, Qt::AlignLeft);
  31. return widget;
  32. }
  33. ConnectionEditDialog::ConnectionEditDialog(ConnectionManager* connectionManager, const QModelIndex& connectionIndex, QWidget* parent)
  34. : AzQtComponents::StyledDialog(parent)
  35. , m_connectionManager(connectionManager)
  36. , m_index(connectionIndex)
  37. {
  38. setWindowTitle("Edit Connection");
  39. QVBoxLayout* layout = new QVBoxLayout(this);
  40. layout->addSpacing(16);
  41. QGridLayout* gridLayout = new QGridLayout(this);
  42. int row = 0;
  43. m_id = createGridRowWidget<QLineEdit>(gridLayout, row++, this, tr("ID"));
  44. m_id->setPlaceholderText("Enter a name");
  45. m_id->setText(dataAtColumn(connectionIndex, ConnectionManager::IdColumn).toString());
  46. m_ipAddress = createGridRowWidget<QLineEdit>(gridLayout, row++, this, tr("IP Address"));
  47. m_ipAddress->setPlaceholderText("Enter an IP address");
  48. m_ipAddress->setText(dataAtColumn(connectionIndex, ConnectionManager::IpColumn).toString());
  49. using namespace AzQtComponents;
  50. m_port = createGridRowWidget<SpinBox>(gridLayout, row++, this, tr("Port"));
  51. m_port->setMinimum(0);
  52. m_port->setMaximum(std::numeric_limits<unsigned short>::max());
  53. m_port->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
  54. m_port->setValue(dataAtColumn(connectionIndex, ConnectionManager::PortColumn).toInt());
  55. layout->addLayout(gridLayout);
  56. layout->addSpacing(16);
  57. QDialogButtonBox* buttons = new QDialogButtonBox(QDialogButtonBox::StandardButtons(QDialogButtonBox::Ok) | QDialogButtonBox::Cancel, this);
  58. connect(buttons, &QDialogButtonBox::accepted, this, &QDialog::accept);
  59. connect(buttons, &QDialogButtonBox::rejected, this, &QDialog::reject);
  60. layout->addWidget(buttons);
  61. adjustSize();
  62. }
  63. void ConnectionEditDialog::accept()
  64. {
  65. // since this is a modal dialog, and since the user created indices should only
  66. // be edited by the user, this should always work
  67. Q_ASSERT(m_index.isValid());
  68. if (m_index.isValid())
  69. {
  70. setDataAtColumn(m_connectionManager, m_index, ConnectionManager::IdColumn, m_id->text());
  71. setDataAtColumn(m_connectionManager, m_index, ConnectionManager::IpColumn, m_ipAddress->text());
  72. setDataAtColumn(m_connectionManager, m_index, ConnectionManager::PortColumn, m_port->value());
  73. }
  74. AzQtComponents::StyledDialog::accept();
  75. }