folderpropertiesdialog.cpp 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. #include "folderpropertiesdialog.h"
  2. #include <QtWidgets>
  3. #include "notebook/notebook.h"
  4. #include "notebook/node.h"
  5. #include "../widgetsfactory.h"
  6. #include <utils/pathutils.h>
  7. #include "exception.h"
  8. #include "nodeinfowidget.h"
  9. #include <core/events.h>
  10. #include <core/vnotex.h>
  11. using namespace vnotex;
  12. FolderPropertiesDialog::FolderPropertiesDialog(Node *p_node, QWidget *p_parent)
  13. : ScrollDialog(p_parent),
  14. m_node(p_node)
  15. {
  16. Q_ASSERT(m_node);
  17. setupUI();
  18. m_infoWidget->getNameLineEdit()->selectAll();
  19. m_infoWidget->getNameLineEdit()->setFocus();
  20. }
  21. void FolderPropertiesDialog::setupUI()
  22. {
  23. setupNodeInfoWidget(this);
  24. setCentralWidget(m_infoWidget);
  25. setDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
  26. setButtonEnabled(QDialogButtonBox::Ok, false);
  27. setWindowTitle(m_node->getName() + QStringLiteral(" ") + tr("Properties"));
  28. }
  29. void FolderPropertiesDialog::setupNodeInfoWidget(QWidget *p_parent)
  30. {
  31. m_infoWidget = new NodeInfoWidget(m_node, p_parent);
  32. connect(m_infoWidget, &NodeInfoWidget::inputEdited,
  33. this, &FolderPropertiesDialog::validateInputs);
  34. }
  35. void FolderPropertiesDialog::validateInputs()
  36. {
  37. bool valid = true;
  38. QString msg;
  39. valid = valid && validateNameInput(msg);
  40. setInformationText(msg, valid ? ScrollDialog::InformationLevel::Info
  41. : ScrollDialog::InformationLevel::Error);
  42. setButtonEnabled(QDialogButtonBox::Ok, valid);
  43. }
  44. bool FolderPropertiesDialog::validateNameInput(QString &p_msg)
  45. {
  46. p_msg.clear();
  47. auto name = m_infoWidget->getName();
  48. if (name.isEmpty()) {
  49. p_msg = tr("Please specify a name for the folder.");
  50. return false;
  51. }
  52. Q_ASSERT(m_infoWidget->getParentNode() == m_node->getParent());
  53. if (!m_node->canRename(name)) {
  54. p_msg = tr("Name conflicts with existing folder.");
  55. return false;
  56. }
  57. return true;
  58. }
  59. void FolderPropertiesDialog::acceptedButtonClicked()
  60. {
  61. if (saveFolderProperties()) {
  62. accept();
  63. }
  64. }
  65. bool FolderPropertiesDialog::saveFolderProperties()
  66. {
  67. try {
  68. if (m_infoWidget->getName() != m_node->getName()) {
  69. // Close the node first.
  70. auto event = QSharedPointer<Event>::create();
  71. emit VNoteX::getInst().nodeAboutToRename(m_node, event);
  72. if (!event->m_response.toBool()) {
  73. return false;
  74. }
  75. m_node->updateName(m_infoWidget->getName());
  76. }
  77. } catch (Exception &p_e) {
  78. QString msg = tr("Failed to save folder (%1) in (%2) (%3).").arg(m_node->getName(),
  79. m_node->getNotebook()->getName(),
  80. p_e.what());
  81. qCritical() << msg;
  82. setInformationText(msg, ScrollDialog::InformationLevel::Error);
  83. return false;
  84. }
  85. return true;
  86. }