CmQtEditor.cpp 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  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. resize(600, 400);
  23. mMenuBar = new QMenuBar(this);
  24. setMenuBar(mMenuBar);
  25. mMainToolBar = new QToolBar(this);
  26. addToolBar(mMainToolBar);
  27. mCentralWidget = new QWidget(this);
  28. setCentralWidget(mCentralWidget);
  29. mStatusBar = new QStatusBar(this);
  30. setStatusBar(mStatusBar);
  31. addMenuItemCallback("File", "Open project", boost::bind(&QtEditor::openProject, this));
  32. addMenuItemCallback("File", "Save project", boost::bind(&QtEditor::saveProject, this));
  33. addMenuItemSeparator("File");
  34. addMenuItemCallback("File", "Exit", boost::bind(&QtEditor::exitEditor, this));
  35. mDockOverlayWidget = new QtDockOverlayWidget(this);
  36. retranslateUi();
  37. setObjectNames();
  38. QMetaObject::connectSlotsByName(this);
  39. }
  40. void QtEditor::retranslateUi()
  41. {
  42. setProjectName("No project");
  43. }
  44. void QtEditor::setObjectNames()
  45. {
  46. mMenuBar->setObjectName(QStringLiteral("MenuBar"));
  47. mMainToolBar->setObjectName(QStringLiteral("MainToolBar"));
  48. mCentralWidget->setObjectName(QStringLiteral("CentralWidget"));
  49. mStatusBar->setObjectName(QStringLiteral("StatusBar"));
  50. mDockOverlayWidget->setObjectName(QStringLiteral("DockOverlayWidget"));
  51. }
  52. void QtEditor::setProjectName(const QString& name)
  53. {
  54. QString title = tr("Camelot Editor") + " - " + name;
  55. setWindowTitle(title);
  56. }
  57. QAction* QtEditor::addMenuItemCallback(const QString& menuCategory, const QString& itemName, boost::function<void()> callback)
  58. {
  59. QMenu* menu = findOrCreateMenu(menuCategory);
  60. QAction* newAction = menu->addAction(itemName);
  61. connect(newAction, &QAction::triggered, callback);
  62. return newAction;
  63. }
  64. void QtEditor::addMenuItemSeparator(const QString& menuCategory)
  65. {
  66. QMenu* menu = findOrCreateMenu(menuCategory);
  67. menu->addSeparator();
  68. }
  69. QMenu* QtEditor::findOrCreateMenu(const QString& name)
  70. {
  71. auto iterFind = mMenus.find(name);
  72. QMenu* menu = nullptr;
  73. if(iterFind == mMenus.end())
  74. {
  75. menu = new QMenu(mMenuBar);
  76. menu->setObjectName(name);
  77. menu->setTitle(name);
  78. mMenuBar->addAction(menu->menuAction());
  79. mMenus[name] = menu;
  80. return menu;
  81. }
  82. else
  83. return iterFind->second;
  84. }
  85. void QtEditor::openProject()
  86. {
  87. CM_EXCEPT(NotImplementedException, "Not implemented");
  88. }
  89. void QtEditor::saveProject()
  90. {
  91. CM_EXCEPT(NotImplementedException, "Not implemented");
  92. }
  93. void QtEditor::exitEditor()
  94. {
  95. exit(1);
  96. }
  97. }