1 /**************************************************************************/
2 /* Copyright 2009 Tim Day */
3 /* */
4 /* This file is part of Fracplanet */
5 /* */
6 /* Fracplanet is free software: you can redistribute it and/or modify */
7 /* it under the terms of the GNU General Public License as published by */
8 /* the Free Software Foundation, either version 3 of the License, or */
9 /* (at your option) any later version. */
10 /* */
11 /* Fracplanet is distributed in the hope that it will be useful, */
12 /* but WITHOUT ANY WARRANTY; without even the implied warranty of */
13 /* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
14 /* GNU General Public License for more details. */
15 /* */
16 /* You should have received a copy of the GNU General Public License */
17 /* along with Fracplanet. If not, see <http://www.gnu.org/licenses/>. */
18 /**************************************************************************/
19
20 #include "control_render.h"
21
ControlRender(ParametersRender * param)22 ControlRender::ControlRender(ParametersRender* param)
23 :Control()
24 ,parameters(param)
25 {
26 wireframe=new QCheckBox("Wireframe");
27 layout()->addWidget(wireframe);
28 wireframe->setChecked(parameters->wireframe);
29 wireframe->setToolTip("Selects wireframe OpenGL rendering");
30 connect(
31 wireframe,SIGNAL(stateChanged(int)),
32 this,SLOT(setWireframe(int))
33 );
34
35 joystick_mouse=new QCheckBox("Joystick mouse-Y (fly mode)");
36 layout()->addWidget(joystick_mouse);
37 joystick_mouse->setChecked(parameters->joystick_mouse);
38 joystick_mouse->setToolTip("Mouse y-axis functions as joystick in fly mode:\nmouse moved down/pulled-back pitches up.");
39 connect(
40 joystick_mouse,SIGNAL(stateChanged(int)),
41 this,SLOT(setJoystickMouse(int))
42 );
43
44 display_list=new QCheckBox("Display list");
45 layout()->addWidget(display_list);
46 display_list->setChecked(parameters->display_list);
47 display_list->setToolTip("Use OpenGL display lists; CAUTION: unstable on many platforms");
48 connect(
49 display_list,SIGNAL(stateChanged(int)),
50 this,SLOT(setDisplayList(int))
51 );
52
53 background_colour_low_button=new QPushButton(build_icon_of_colour(parameters->background_colour_low),"Background colour (low altitude)");
54 layout()->addWidget(background_colour_low_button);
55 background_colour_low_button->setToolTip("Colour used in display area when the camera is low.");
56 connect(background_colour_low_button,SIGNAL(clicked()),
57 this,SLOT(pickBackgroundColourLow())
58 );
59
60 background_colour_high_button=new QPushButton(build_icon_of_colour(parameters->background_colour_high),"Background colour (high altitude)");
61 layout()->addWidget(background_colour_high_button);
62 background_colour_high_button->setToolTip("Colour used in display area when the camera is high.");
63 connect(background_colour_high_button,SIGNAL(clicked()),
64 this,SLOT(pickBackgroundColourHigh())
65 );
66
67 QGroupBox* ambient_box=new QGroupBox("Ambient");
68 layout()->addWidget(ambient_box);
69 ambient_box->setLayout(new QHBoxLayout());
70
71 ambient_box->layout()->addWidget(new QLabel("0.0"));
72
73 ambient=new QSlider(Qt::Horizontal);
74 ambient_box->layout()->addWidget(ambient);
75 ambient->setMinimum(0);
76 ambient->setValue(10); //! \todo Should be obtained from somewhere ?
77 ambient->setMaximum(100);
78 ambient->setTickInterval(10);
79 ambient->setTickPosition(QSlider::TicksBothSides);
80 ambient->setTracking(true);
81
82 ambient_box->layout()->addWidget(new QLabel("1.0"));
83
84 connect(
85 ambient,SIGNAL(valueChanged(int)),
86 this,SLOT(setAmbient(int))
87 );
88
89 QGroupBox* illumination_box=new QGroupBox("Illumination azimuth/elevation");
90 layout()->addWidget(illumination_box);
91 illumination_box->setLayout(new QHBoxLayout()); // TODO: Need a grid here, not an hbox
92
93 illumination_box->layout()->addWidget(new QLabel("-180"));
94
95 illumination_azimuth=new QSlider(Qt::Horizontal);
96 illumination_box->layout()->addWidget(illumination_azimuth);
97 illumination_azimuth->setMinimum(-180);
98 illumination_azimuth->setValue(static_cast<int>(parameters->illumination_azimuth*180/M_PI));
99 illumination_azimuth->setMaximum(180);
100 illumination_azimuth->setTickInterval(10);
101 illumination_azimuth->setTickPosition(QSlider::TicksBothSides);
102 illumination_azimuth->setTracking(true);
103
104 illumination_box->layout()->addWidget(new QLabel("180"));
105
106 illumination_box->layout()->addWidget(new QLabel("-90"));
107
108 illumination_elevation=new QSlider(Qt::Horizontal);
109 illumination_box->layout()->addWidget(illumination_elevation);
110 illumination_elevation->setMinimum(-90);
111 illumination_elevation->setValue(static_cast<int>(parameters->illumination_elevation*180/M_PI));
112 illumination_elevation->setMaximum(90);
113 illumination_elevation->setTickInterval(10);
114 illumination_elevation->setTickPosition(QSlider::TicksBothSides);
115 illumination_elevation->setTracking(true);
116
117 illumination_box->layout()->addWidget(new QLabel("90"));
118
119 connect(
120 illumination_azimuth,SIGNAL(valueChanged(int)),
121 this,SLOT(setIlluminationAzimuth(int))
122 );
123 connect(
124 illumination_elevation,SIGNAL(valueChanged(int)),
125 this,SLOT(setIlluminationElevation(int))
126 );
127
128 QWidget*const padding=new QWidget();
129 layout()->addWidget(padding);
130 padding->setSizePolicy(QSizePolicy(QSizePolicy::Preferred,QSizePolicy::Expanding)); // Expanding vertically
131 }
132
~ControlRender()133 ControlRender::~ControlRender()
134 {}
135
setWireframe(int v)136 void ControlRender::setWireframe(int v)
137 {
138 parameters->wireframe=(v==2);
139 }
140
setDisplayList(int v)141 void ControlRender::setDisplayList(int v)
142 {
143 parameters->display_list=(v==2);
144 }
145
setJoystickMouse(int v)146 void ControlRender::setJoystickMouse(int v)
147 {
148 parameters->joystick_mouse=(v==2);
149 }
150
setAmbient(int v)151 void ControlRender::setAmbient(int v)
152 {
153 parameters->ambient=v/100.0f;
154 }
155
setIlluminationAzimuth(int v)156 void ControlRender::setIlluminationAzimuth(int v)
157 {
158 parameters->illumination_azimuth=v*M_PI/180;
159 }
160
setIlluminationElevation(int v)161 void ControlRender::setIlluminationElevation(int v)
162 {
163 parameters->illumination_elevation=v*M_PI/180;
164 }
165
pickBackgroundColourLow()166 void ControlRender::pickBackgroundColourLow()
167 {
168 emit pickColour(background_colour_low_button,parameters->background_colour_low);
169 }
170
pickBackgroundColourHigh()171 void ControlRender::pickBackgroundColourHigh()
172 {
173 emit pickColour(background_colour_high_button,parameters->background_colour_high);
174 }
175