CmQtEditor.cpp 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. #include "CmQtEditor.h"
  2. #include "CmQtDockOverlayWidget.h"
  3. #include "CmEditorPrefs.h"
  4. #include <QtWidgets/QMenuBar>
  5. #include <QtWidgets/QToolBar>
  6. #include <QtWidgets/QStatusBar>
  7. #include <QtCore/QLocale>
  8. #include <QtWidgets/QApplication>
  9. #include <QtWidgets/QDesktopWidget>
  10. #include <QtGui/QMoveEvent>
  11. #include <QtGui/QResizeEvent>
  12. #include <boost/bind.hpp>
  13. #include "CmException.h"
  14. namespace CamelotEditor
  15. {
  16. QtEditor::QtEditor(QWidget *parent)
  17. : QMainWindow(parent)
  18. {
  19. setupUi();
  20. }
  21. QtEditor::~QtEditor()
  22. {
  23. }
  24. void QtEditor::setupUi()
  25. {
  26. WindowLayoutDesc desc = gEditorPrefs().getMainWindowLayout();
  27. if(desc.maximized)
  28. {
  29. setWindowState(Qt::WindowMaximized);
  30. }
  31. else
  32. {
  33. setGeometry(desc.left, desc.top, desc.width, desc.height);
  34. }
  35. mMenuBar = new QMenuBar(this);
  36. setMenuBar(mMenuBar);
  37. mMainToolBar = new QToolBar(this);
  38. addToolBar(mMainToolBar);
  39. mCentralWidget = new QWidget(this);
  40. setCentralWidget(mCentralWidget);
  41. mStatusBar = new QStatusBar(this);
  42. setStatusBar(mStatusBar);
  43. addMenuItemCallback("File", "Open project", boost::bind(&QtEditor::openProject, this));
  44. addMenuItemCallback("File", "Save project", boost::bind(&QtEditor::saveProject, this));
  45. addMenuItemSeparator("File");
  46. addMenuItemCallback("File", "Exit", boost::bind(&QtEditor::exitEditor, this));
  47. mDockOverlayWidget = new QtDockOverlayWidget(this);
  48. retranslateUi();
  49. setObjectNames();
  50. QMetaObject::connectSlotsByName(this);
  51. }
  52. void QtEditor::retranslateUi()
  53. {
  54. setProjectName("No project");
  55. }
  56. void QtEditor::setObjectNames()
  57. {
  58. mMenuBar->setObjectName(QStringLiteral("MenuBar"));
  59. mMainToolBar->setObjectName(QStringLiteral("MainToolBar"));
  60. mCentralWidget->setObjectName(QStringLiteral("CentralWidget"));
  61. mStatusBar->setObjectName(QStringLiteral("StatusBar"));
  62. mDockOverlayWidget->setObjectName(QStringLiteral("DockOverlayWidget"));
  63. }
  64. void QtEditor::setProjectName(const QString& name)
  65. {
  66. QString title = tr("Camelot Editor") + " - " + name;
  67. setWindowTitle(title);
  68. }
  69. QAction* QtEditor::addMenuItemCallback(const QString& menuCategory, const QString& itemName, boost::function<void()> callback)
  70. {
  71. QMenu* menu = findOrCreateMenu(menuCategory);
  72. QAction* newAction = menu->addAction(itemName);
  73. connect(newAction, &QAction::triggered, callback);
  74. return newAction;
  75. }
  76. void QtEditor::addMenuItemSeparator(const QString& menuCategory)
  77. {
  78. QMenu* menu = findOrCreateMenu(menuCategory);
  79. menu->addSeparator();
  80. }
  81. QMenu* QtEditor::findOrCreateMenu(const QString& name)
  82. {
  83. auto iterFind = mMenus.find(name);
  84. QMenu* menu = nullptr;
  85. if(iterFind == mMenus.end())
  86. {
  87. menu = new QMenu(mMenuBar);
  88. menu->setObjectName(name);
  89. menu->setTitle(name);
  90. mMenuBar->addAction(menu->menuAction());
  91. mMenus[name] = menu;
  92. return menu;
  93. }
  94. else
  95. return iterFind->second;
  96. }
  97. void QtEditor::changeEvent(QEvent* event)
  98. {
  99. if(event->type() == QEvent::WindowStateChange)
  100. {
  101. WindowLayoutDesc desc = gEditorPrefs().getMainWindowLayout();
  102. if(isMaximized())
  103. desc.maximized = true;
  104. else
  105. desc.maximized = false;
  106. desc.screenIdx = QApplication::desktop()->screenNumber(this);
  107. gEditorPrefs().setMainWindowLayout(desc);
  108. }
  109. event->accept();
  110. }
  111. void QtEditor::moveEvent(QMoveEvent* event)
  112. {
  113. WindowLayoutDesc desc = gEditorPrefs().getMainWindowLayout();
  114. desc.left = event->pos().x();
  115. desc.top = event->pos().y();
  116. gEditorPrefs().setMainWindowLayout(desc);
  117. QWidget::moveEvent(event);
  118. }
  119. void QtEditor::resizeEvent(QResizeEvent* event)
  120. {
  121. WindowLayoutDesc desc = gEditorPrefs().getMainWindowLayout();
  122. desc.width = event->size().width();
  123. desc.height = event->size().height();
  124. gEditorPrefs().setMainWindowLayout(desc);
  125. QWidget::resizeEvent(event);
  126. }
  127. void QtEditor::openProject()
  128. {
  129. CM_EXCEPT(NotImplementedException, "Not implemented");
  130. }
  131. void QtEditor::saveProject()
  132. {
  133. CM_EXCEPT(NotImplementedException, "Not implemented");
  134. }
  135. void QtEditor::exitEditor()
  136. {
  137. exit(1);
  138. }
  139. }