1 /***************************************************************************
2   qgsskyboxrenderingsettingswidget.cpp
3   --------------------------------------
4   Date                 : August 2020
5   Copyright            : (C) 2020 by Belgacem Nedjima
6   Email                : gb uderscore nedjima at esi dot dz
7  ***************************************************************************
8  *                                                                         *
9  *   This program is free software; you can redistribute it and/or modify  *
10  *   it under the terms of the GNU General Public License as published by  *
11  *   the Free Software Foundation; either version 2 of the License, or     *
12  *   (at your option) any later version.                                   *
13  *                                                                         *
14  ***************************************************************************/
15 
16 #include "qgsskyboxrenderingsettingswidget.h"
17 
18 #include <QCheckBox>
19 #include <QLineEdit>
20 #include "qgs3dmapsettings.h"
21 #include "qgis.h"
22 
QgsSkyboxRenderingSettingsWidget(QWidget * parent)23 QgsSkyboxRenderingSettingsWidget::QgsSkyboxRenderingSettingsWidget( QWidget *parent )
24   : QWidget( parent )
25 {
26   setupUi( this );
27 
28   // To future maintainers: make sure the order of added items is the same as the order at QgsSkyboxEntity::SkyboxType
29   skyboxTypeComboBox->addItem( tr( "Panoramic Texture" ) );
30   skyboxTypeComboBox->addItem( tr( "Distinct Faces" ) );
31   connect( skyboxTypeComboBox, qgis::overload<int>::of( &QComboBox::currentIndexChanged ), this, &QgsSkyboxRenderingSettingsWidget::showSkyboxSettings );
32 
33   showSkyboxSettings( 0 );
34 }
35 
setSkyboxSettings(const QgsSkyboxSettings & skyboxSettings)36 void QgsSkyboxRenderingSettingsWidget::setSkyboxSettings( const QgsSkyboxSettings &skyboxSettings )
37 {
38   switch ( skyboxSettings.skyboxType() )
39   {
40     case QgsSkyboxEntity::PanoramicSkybox:
41       skyboxTypeComboBox->setCurrentIndex( 0 ); // "Panoramic Texture"
42       break;
43     case QgsSkyboxEntity::DistinctTexturesSkybox:
44       skyboxTypeComboBox->setCurrentIndex( 1 ); // "Distinct Faces"
45       break;
46   }
47 
48   panoramicTextureImageSource->setSource( skyboxSettings.panoramicTexturePath() );
49   QMap<QString, QString> cubeMapFaces = skyboxSettings.cubeMapFacesPaths();
50   posXImageSource->setSource( cubeMapFaces[ QStringLiteral( "posX" ) ] );
51   posYImageSource->setSource( cubeMapFaces[ QStringLiteral( "posY" ) ] );
52   posZImageSource->setSource( cubeMapFaces[ QStringLiteral( "posZ" ) ] );
53   negXImageSource->setSource( cubeMapFaces[ QStringLiteral( "negX" ) ] );
54   negYImageSource->setSource( cubeMapFaces[ QStringLiteral( "negY" ) ] );
55   negZImageSource->setSource( cubeMapFaces[ QStringLiteral( "negZ" ) ] );
56 }
57 
toSkyboxSettings()58 QgsSkyboxSettings QgsSkyboxRenderingSettingsWidget::toSkyboxSettings()
59 {
60   QgsSkyboxSettings settings;
61   settings.setSkyboxType( static_cast< QgsSkyboxEntity::SkyboxType >( skyboxTypeComboBox->currentIndex() ) );
62   settings.setPanoramicTexturePath( panoramicTextureImageSource->source() );
63   settings.setCubeMapFace( QStringLiteral( "posX" ), posXImageSource->source() );
64   settings.setCubeMapFace( QStringLiteral( "posY" ), posYImageSource->source() );
65   settings.setCubeMapFace( QStringLiteral( "posZ" ), posZImageSource->source() );
66   settings.setCubeMapFace( QStringLiteral( "negX" ), negXImageSource->source() );
67   settings.setCubeMapFace( QStringLiteral( "negY" ), negYImageSource->source() );
68   settings.setCubeMapFace( QStringLiteral( "negZ" ), negZImageSource->source() );
69   return settings;
70 }
71 
showSkyboxSettings(int)72 void QgsSkyboxRenderingSettingsWidget::showSkyboxSettings( int )
73 {
74   QgsSkyboxEntity::SkyboxType type = static_cast< QgsSkyboxEntity::SkyboxType >( skyboxTypeComboBox->currentIndex() );
75   const bool isPanoramic = type == QgsSkyboxEntity::PanoramicSkybox;
76   const bool isDistinctFaces = type == QgsSkyboxEntity::DistinctTexturesSkybox;
77 
78   panoramicTextureLabel->setVisible( isPanoramic );
79   panoramicTextureImageSource->setVisible( isPanoramic );
80 
81   negXImageSourceLabel->setVisible( isDistinctFaces );
82   negXImageSource->setVisible( isDistinctFaces );
83   negYImageSourceLabel->setVisible( isDistinctFaces );
84   negYImageSource->setVisible( isDistinctFaces );
85   negZImageSourceLabel->setVisible( isDistinctFaces );
86   negZImageSource->setVisible( isDistinctFaces );
87   posXImageSourceLabel->setVisible( isDistinctFaces );
88   posXImageSource->setVisible( isDistinctFaces );
89   posYImageSourceLabel->setVisible( isDistinctFaces );
90   posYImageSource->setVisible( isDistinctFaces );
91   posZImageSourceLabel->setVisible( isDistinctFaces );
92   posZImageSource->setVisible( isDistinctFaces );
93 
94 }
95