CmQtEditor.cpp 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  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 <QtWidgets/QHBoxLayout>
  11. #include <QtGui/QMoveEvent>
  12. #include <QtGui/QResizeEvent>
  13. #include <boost/bind.hpp>
  14. #include "CmException.h"
  15. namespace CamelotEditor
  16. {
  17. QtEditor::QtEditor(QWidget *parent)
  18. : QMainWindow(parent)
  19. {
  20. setupUi();
  21. }
  22. QtEditor::~QtEditor()
  23. {
  24. }
  25. void QtEditor::setupUi()
  26. {
  27. WindowLayoutDesc desc = gEditorPrefs().getMainWindowLayout();
  28. if(desc.maximized)
  29. {
  30. setGeometry(desc.left, desc.top, desc.width, desc.height);
  31. setWindowState(Qt::WindowMaximized);
  32. }
  33. else
  34. {
  35. setGeometry(desc.left, desc.top, desc.width, desc.height);
  36. }
  37. mMenuBar = new QMenuBar(this);
  38. setMenuBar(mMenuBar);
  39. mCentralWidget = new QWidget(this);
  40. setCentralWidget(mCentralWidget);
  41. mDockOverlayWidget = new QtDockOverlayWidget(this);
  42. mStatusBar = new QStatusBar(this);
  43. setStatusBar(mStatusBar);
  44. setContextMenuPolicy(Qt::NoContextMenu);
  45. addMenuItemCallback("File", "Open project", boost::bind(&QtEditor::openProject, this));
  46. addMenuItemCallback("File", "Save project", boost::bind(&QtEditor::saveProject, this));
  47. addMenuItemSeparator("File");
  48. addMenuItemCallback("File", "Exit", boost::bind(&QtEditor::exitEditor, this));
  49. retranslateUi();
  50. setObjectNames();
  51. QMetaObject::connectSlotsByName(this);
  52. }
  53. void QtEditor::retranslateUi()
  54. {
  55. setProjectName("No project");
  56. }
  57. void QtEditor::setObjectNames()
  58. {
  59. mMenuBar->setObjectName(QStringLiteral("MenuBar"));
  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. mDockOverlayWidget->resize(event->size());
  126. QWidget::resizeEvent(event);
  127. }
  128. bool QtEditor::eventFilter(QObject* object, QEvent* event)
  129. {
  130. return false;
  131. }
  132. void QtEditor::openProject()
  133. {
  134. CM_EXCEPT(NotImplementedException, "Not implemented");
  135. }
  136. void QtEditor::saveProject()
  137. {
  138. CM_EXCEPT(NotImplementedException, "Not implemented");
  139. }
  140. void QtEditor::exitEditor()
  141. {
  142. exit(1);
  143. }
  144. }