[4] | 1 | #include "Scene.h" |
---|
| 2 | #include "ProjectionModel.h" |
---|
| 3 | #include "gui/Defines.h" |
---|
| 4 | #include "gui/QSceneWidget.h" |
---|
| 5 | |
---|
| 6 | using namespace projection; |
---|
| 7 | |
---|
| 8 | QSceneWidget::QSceneWidget(QWidget* pParent, Qt::WFlags flags) |
---|
| 9 | : QWidget(pParent, flags) |
---|
| 10 | { |
---|
| 11 | ui.setupUi(this); |
---|
| 12 | |
---|
| 13 | m_pScene = NULL; |
---|
| 14 | } |
---|
| 15 | |
---|
| 16 | QSceneWidget::~QSceneWidget() |
---|
| 17 | { |
---|
| 18 | } |
---|
| 19 | |
---|
| 20 | void QSceneWidget::setScene(Scene* pScene) |
---|
| 21 | { |
---|
| 22 | // Note : only scene knows the scene "names". The combo and the stackedWidget have to adapt themselves to the Scene |
---|
| 23 | Q_ASSERT(pScene); |
---|
| 24 | Q_ASSERT(!m_pScene); // <-- If this Q_ASSERT match, this is that 'setScene()' has been called twice. Then we'll need to delete all the widgets. |
---|
| 25 | m_pScene = pScene; |
---|
| 26 | ui.typeComboBox->clear(); |
---|
| 27 | for (unsigned int i=0; i<m_pScene->getNumContents(); ++i) |
---|
| 28 | { |
---|
| 29 | QString name = m_pScene->getContentName(i); |
---|
| 30 | ui.typeComboBox->addItem(name); |
---|
| 31 | |
---|
| 32 | SceneContent *sc = m_pScene->getContent(name); |
---|
| 33 | SceneInterface *si = sc->plugin(); |
---|
| 34 | SceneWidget *widget = si->newSceneWidget(sc->scene_name()); |
---|
| 35 | ui.stackedWidget->addWidget(widget); |
---|
| 36 | widget->disconnect(); |
---|
| 37 | m_pScene->disconnect(); |
---|
| 38 | connect(widget, SIGNAL(dataChanged(const SceneContent&)), m_pScene, SLOT(updateSceneContent(const SceneContent&))); |
---|
| 39 | } |
---|
| 40 | |
---|
| 41 | updateGUI(); |
---|
| 42 | } |
---|
| 43 | |
---|
| 44 | void QSceneWidget::updateGUI() |
---|
| 45 | { |
---|
| 46 | if (m_pScene) |
---|
| 47 | { |
---|
| 48 | ui.transformWidget->setMatrix(m_pScene->getMatrix()); |
---|
| 49 | |
---|
| 50 | ui.showInDesignViewCheckBox->setChecked(m_pScene->getShowInDesignView()); |
---|
| 51 | ui.sceneSizeEdit->setText(formatValue(m_pScene->getSize())); |
---|
| 52 | ui.gridCheckBox->setChecked(m_pScene->getShowGrid()); |
---|
| 53 | ui.gridSizeEdit->setText(formatValue(m_pScene->getShowGrid())); |
---|
| 54 | |
---|
| 55 | ui.typeComboBox->setCurrentIndex(ui.typeComboBox->findText(m_pScene->getCurrentContentName())); |
---|
| 56 | ui.stackedWidget->setCurrentIndex(ui.typeComboBox->currentIndex()); |
---|
| 57 | |
---|
| 58 | SceneWidget* pSceneWidget = static_cast<SceneWidget*>(ui.stackedWidget->currentWidget()); |
---|
| 59 | Q_ASSERT(NULL!=pSceneWidget); |
---|
| 60 | pSceneWidget->updateGUI(m_pScene->getCurrentContent()); |
---|
| 61 | } |
---|
| 62 | } |
---|
| 63 | |
---|
| 64 | void QSceneWidget::on_transformWidget_matrixChanged(const TransformMatrix& matrix) |
---|
| 65 | { |
---|
| 66 | if (m_pScene && m_pScene->getMatrix() != matrix) |
---|
| 67 | { |
---|
| 68 | m_pScene->setMatrix(matrix); |
---|
| 69 | updateGUI(); |
---|
| 70 | } |
---|
| 71 | } |
---|
| 72 | |
---|
| 73 | void QSceneWidget::on_typeComboBox_activated(int) |
---|
| 74 | { |
---|
| 75 | if (m_pScene) |
---|
| 76 | { |
---|
| 77 | m_pScene->setCurrentContent(ui.typeComboBox->currentText()); |
---|
| 78 | updateGUI(); |
---|
| 79 | } |
---|
| 80 | } |
---|
| 81 | |
---|
| 82 | void QSceneWidget::on_showInDesignViewCheckBox_toggled(bool checked) |
---|
| 83 | { |
---|
| 84 | if (m_pScene) |
---|
| 85 | m_pScene->setShowInDesignView(checked); |
---|
| 86 | } |
---|
| 87 | |
---|
| 88 | void QSceneWidget::on_sceneSizeEdit_editingFinished() |
---|
| 89 | { |
---|
| 90 | if (m_pScene) |
---|
| 91 | m_pScene->setSize(formatValue(ui.sceneSizeEdit->text())); |
---|
| 92 | } |
---|
| 93 | |
---|
| 94 | void QSceneWidget::on_gridCheckBox_toggled(bool checked) |
---|
| 95 | { |
---|
| 96 | if (m_pScene) |
---|
| 97 | m_pScene->setShowGrid(checked); |
---|
| 98 | } |
---|
| 99 | |
---|
| 100 | void QSceneWidget::on_gridSizeEdit_editingFinished() |
---|
| 101 | { |
---|
| 102 | if (m_pScene && m_pScene->getGridSize() != ui.gridSizeEdit->text().toDouble()) |
---|
| 103 | m_pScene->setGridSize(ui.gridSizeEdit->text().toDouble()); |
---|
| 104 | } |
---|
| 105 | |
---|
| 106 | void QSceneWidget::on_centerViewButton_clicked() |
---|
| 107 | { |
---|
| 108 | m_pScene->centerView(); |
---|
| 109 | } |
---|
| 110 | |
---|
| 111 | void QSceneWidget::on_viewAllButton_clicked() |
---|
| 112 | { |
---|
| 113 | m_pScene->viewAll(); |
---|
| 114 | } |
---|