4 * Simple PUI wrapper around sgVec3 class
6 * Created by: Norman Vine [NHV]
7 * nhv@yahoo.com, nhv@cape.com
11 * Started 12:53 01/28/2001
15 #include "sgVec3Slider.hxx"
17 class FloatSlider : public puSlider
31 FloatSlider ( int x, int y, int sz, float f, const char *title,
36 static void adj( puObject *);
39 sprintf( _text, "%05.2f", MyValue );
42 float get() { return( MyValue ); }
43 void set() { MyValue = ((2.0*maxValue) * (TmpValue - 0.5f)) - maxValue; }
45 float *getTmp() { return( &TmpValue ); }
46 void setTmp() { TmpValue += 0.5f; }
48 // double the range from -max <-> max
49 void init( float f ) {
50 Adjust = 0.5f / maxValue;
51 setValue((f * Adjust) + 0.5f);
55 void reinit() { init( origValue ); }
57 void cancel() { MyValue = TmpValue; }
58 void reset () { init( origValue ); }
62 void FloatSlider::adj( puObject *hs )
64 FloatSlider *slider = (FloatSlider *)hs->getUserData();
65 slider->getValue ( slider->getTmp() );
71 FloatSlider::FloatSlider ( int x, int y, int sz, float f, const char *title,
72 float max ) : puSlider( x, y, sz, FALSE )
79 setCBMode ( PUSLIDER_DELTA ) ;
81 strcpy ( _title, title);
83 setLabelPlace ( PUPLACE_LEFT );
85 // setLegendPlace( PUPLACE_RIGHT );
89 /***********************************************/
91 class sgVec3Slider : public puDialogBox
93 static void goAway(puObject *p_obj);
94 static void reset(puObject *p_obj);
95 static void cancel(puObject *p_obj);
103 puOneShot *ResetButton;
104 puOneShot *CancelButton;
108 sgVec3Slider ( int x, int y, sgVec3 vec,
109 const char *title = "Vector Adjuster",
110 const char *Xtitle = "X",
111 const char *Ytitle = "Y",
112 const char *Ztitle = "Z" );
123 sgVec3 *getVec() { setVec(); return &Vec; };
125 sgVec3 *getStashVec() { return &SaveVec; }
126 void stashVec() { sgCopyVec3( SaveVec, Vec ); }
128 FloatSlider *getHS0() { return HS0; }
129 FloatSlider *getHS1() { return HS1; }
130 FloatSlider *getHS2() { return HS2; }
132 static void adjust(puObject *p_obj);
135 sgVec3Slider::sgVec3Slider ( int x, int y, sgVec3 vec, const char *title,
136 const char *Xtitle = "X",
137 const char *Ytitle = "Y",
138 const char *Ztitle = "Z" )
139 : puDialogBox ( x, y )
144 static const int DialogWidth = 230 + fudge;
146 sgCopyVec3(SaveVec, vec);
147 sgCopyVec3(Vec, vec);
148 strcpy( Label, title );
150 static const int nSliders = 3;
151 static const int slider_x = 10+fudge;
153 static const int slider_width = 210;
154 static const int slider_title_x = 15;
155 static const int slider_value_x = 160;
157 puFont LegendFont, LabelFont;
158 puGetDefaultFonts ( &LegendFont, &LabelFont );
160 int horiz_slider_height = puGetStringHeight (&LabelFont) +
161 puGetStringDescender (&LabelFont) +
162 PUSTR_TGAP + PUSTR_BGAP + 5;
166 horiz_slider_height += 10;
170 85 + nSliders * horiz_slider_height );
172 setLabelPlace( PUPLACE_DEFAULT /*PUPLACE_CENTERED*/ );
175 HS2 = new FloatSlider ( slider_x, slider_y, slider_width, vec[2], Ztitle );
176 slider_y += horiz_slider_height;
178 HS1 = new FloatSlider ( slider_x, slider_y, slider_width, vec[1], Ytitle );
179 slider_y += horiz_slider_height;
181 HS0 = new FloatSlider ( slider_x, slider_y, slider_width, vec[0], Xtitle );
183 OkButton = new puOneShot ( 10+fudge, 10, 60+fudge, 50 );
184 OkButton-> setUserData( this );
185 OkButton-> setLegend ( gui_msg_OK );
186 OkButton-> makeReturnDefault ( TRUE );
187 OkButton-> setCallback ( goAway );
189 CancelButton = new puOneShot ( 70+fudge, 10, 150+fudge, 50 );
190 CancelButton-> setUserData( this );
191 CancelButton-> setLegend ( gui_msg_CANCEL );
192 CancelButton-> setCallback ( cancel );
194 ResetButton = new puOneShot ( 160+fudge, 10, 220+fudge, 50 );
195 ResetButton-> setUserData( this );
196 ResetButton-> setLegend ( gui_msg_RESET );
197 ResetButton-> setCallback ( reset );
199 FG_FINALIZE_PUI_DIALOG( this );
204 void sgVec3Slider::goAway(puObject *p_obj)
206 sgVec3Slider *me = (sgVec3Slider *)p_obj->getUserData();
207 FG_POP_PUI_DIALOG( me );
210 void sgVec3Slider::reset(puObject *p_obj)
212 sgVec3Slider *me = (sgVec3Slider *)p_obj->getUserData();
218 void sgVec3Slider::cancel(puObject *p_obj)
220 sgVec3Slider *me = (sgVec3Slider *)p_obj->getUserData();
222 sgVec3 *pvec = me -> getStashVec();
223 sgCopyVec3( vec, *pvec );
224 me->HS0->init(vec[0]);
225 me->HS1->init(vec[1]);
226 me->HS2->init(vec[2]);
227 FG_POP_PUI_DIALOG( me );
230 void sgVec3Slider::adjust(puObject *p_obj)
232 sgVec3Slider *me = (sgVec3Slider *)p_obj->getUserData();
233 me -> getHS0() -> adj((puObject *)me -> getHS0());
234 me -> getHS1() -> adj((puObject *)me -> getHS1());
235 me -> getHS2() -> adj((puObject *)me -> getHS2());
239 void sgVec3SliderAdjust( puObject *p_obj )
241 sgVec3Slider *me = (sgVec3Slider *)p_obj -> getUserData();
243 FG_PUSH_PUI_DIALOG( me );
246 // These are globals for now
247 static puObject *PO_vec = 0;
249 void PilotOffsetInit( sgVec3 vec )
251 // Only one of these things for now
253 sgVec3Slider *PO = new sgVec3Slider ( 200, 200, vec, "Pilot Offset" );
258 void PilotOffsetAdjust( puObject * )
262 // we seem to need the ~quite zero terms ???
263 sgSetVec3(v,15,0.0001,0.0001);
266 sgVec3Slider *me = (sgVec3Slider *)PO_vec -> getUserData();
269 FG_PUSH_PUI_DIALOG( me );
272 sgVec3 *PilotOffsetGet()
276 // we seem to need the ~quite zero terms ???
277 sgSetVec3(v,15,0.0001,0.0001);
280 sgVec3Slider *me = (sgVec3Slider *)PO_vec -> getUserData();
281 return( me -> getVec() );