CmQtEditor.cpp 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. #include "CmQtEditor.h"
  2. #include "CmQtDockOverlayWidget.h"
  3. #include <QtWidgets/QMenuBar>
  4. #include <QtWidgets/QToolBar>
  5. #include <QtWidgets/QStatusBar>
  6. #include <QtCore/QLocale>
  7. #include <QtWidgets/QApplication>
  8. #include <boost/bind.hpp>
  9. #include "CmException.h"
  10. namespace CamelotEditor
  11. {
  12. QtEditor::QtEditor(QWidget *parent)
  13. : QMainWindow(parent)
  14. {
  15. setupUi();
  16. }
  17. QtEditor::~QtEditor()
  18. {
  19. }
  20. void QtEditor::setupUi()
  21. {
  22. if (objectName().isEmpty())
  23. setObjectName(QStringLiteral("CamelotEditorClass"));
  24. resize(600, 400);
  25. mMenuBar = new QMenuBar(this);
  26. mMenuBar->setObjectName(QStringLiteral("menuBar"));
  27. setMenuBar(mMenuBar);
  28. mMainToolBar = new QToolBar(this);
  29. mMainToolBar->setObjectName(QStringLiteral("mainToolBar"));
  30. addToolBar(mMainToolBar);
  31. mCentralWidget = new QWidget(this);
  32. mCentralWidget->setObjectName(QStringLiteral("centralWidget"));
  33. setCentralWidget(mCentralWidget);
  34. mStatusBar = new QStatusBar(this);
  35. mStatusBar->setObjectName(QStringLiteral("statusBar"));
  36. setStatusBar(mStatusBar);
  37. addMenuItemCallback("File", "Open project", boost::bind(&QtEditor::openProject, this));
  38. addMenuItemCallback("File", "Save project", boost::bind(&QtEditor::saveProject, this));
  39. addMenuItemSeparator("File");
  40. addMenuItemCallback("File", "Exit", boost::bind(&QtEditor::exitEditor, this));
  41. mDockOverlayWidget = new QtDockOverlayWidget(this);
  42. retranslateUi();
  43. QMetaObject::connectSlotsByName(this);
  44. }
  45. void QtEditor::retranslateUi()
  46. {
  47. setProjectName("No project");
  48. }
  49. void QtEditor::setProjectName(const QString& name)
  50. {
  51. QString title = tr("Camelot Editor") + " - " + name;
  52. setWindowTitle(title);
  53. }
  54. QAction* QtEditor::addMenuItemCallback(const QString& menuCategory, const QString& itemName, boost::function<void()> callback)
  55. {
  56. QMenu* menu = findOrCreateMenu(menuCategory);
  57. QAction* newAction = menu->addAction(itemName);
  58. connect(newAction, &QAction::triggered, callback);
  59. return newAction;
  60. }
  61. void QtEditor::addMenuItemSeparator(const QString& menuCategory)
  62. {
  63. QMenu* menu = findOrCreateMenu(menuCategory);
  64. menu->addSeparator();
  65. }
  66. QMenu* QtEditor::findOrCreateMenu(const QString& name)
  67. {
  68. auto iterFind = mMenus.find(name);
  69. QMenu* menu = nullptr;
  70. if(iterFind == mMenus.end())
  71. {
  72. menu = new QMenu(mMenuBar);
  73. menu->setObjectName(name);
  74. menu->setTitle(name);
  75. mMenuBar->addAction(menu->menuAction());
  76. mMenus[name] = menu;
  77. return menu;
  78. }
  79. else
  80. return iterFind->second;
  81. }
  82. void QtEditor::openProject()
  83. {
  84. CM_EXCEPT(NotImplementedException, "Not implemented");
  85. }
  86. void QtEditor::saveProject()
  87. {
  88. CM_EXCEPT(NotImplementedException, "Not implemented");
  89. }
  90. void QtEditor::exitEditor()
  91. {
  92. exit(1);
  93. }
  94. }