4 # pragma warning(disable: 4005)
8 #include <Gui/StringConv.hh>
10 #include "VideoSource_Controller_XB3.hh"
13 # include <Base/Common/getopt_W32.h>
17 #include <Base/Image/ImageIO.hh>
18 #include <Image/Camera.hh>
41 const
unsigned int imageToShow,
42 double minShutter,
double maxShutter,
43 double minGain,
double maxGain)
45 ,(AsciiToWx(title.c_str()))
46 ,wxDefaultPosition,wxSize(400,500),wxSTAY_ON_TOP |wxCAPTION){
47 minShutter_=minShutter;
48 maxShutter_=maxShutter;
54 ImageToShow_ = imageToShow;
56 SetShutterRange((
unsigned)minShutter_,(
unsigned)maxShutter_);
57 SetGainRange((
unsigned)minGain_,(
unsigned)maxGain_);
62 VideoSource_Controller_XB3::
63 ~VideoSource_Controller_XB3()
68 void VideoSource_Controller_XB3::
74 sliderBox_ShGa_Visible =
true;
77 wxSize SlSize(70,200);
81 wxBoxSizer *slGa =
new wxBoxSizer(wxVERTICAL);
82 wxStaticText *textGain =
new wxStaticText(
this,ID_TEXT, wxT(
"Gain\n[dB]"));
83 SliderGain =
new wxSlider(
this, ID_GAIN, 1500, 0, 3000,
84 wxDefaultPosition,SlSize,
85 wxSL_VERTICAL | wxSL_LABELS | wxSL_RIGHT,
86 wxDefaultValidator, wxT(
"Gain"));
88 auto_ga_Button =
new wxButton(
this, ID_BUTTON_AUTO_GAIN,
89 wxT(
"MAN"),wxDefaultPosition,BtSize);
91 SliderGain->Enable(
true);
92 slGa->Add(textGain,0,wxALL,2);
93 slGa->Add(SliderGain,0, wxALL,2);
94 slGa->Add(auto_ga_Button,0,wxALL, 2);
96 wxBoxSizer *slSh =
new wxBoxSizer(wxVERTICAL);
97 wxStaticText *textShutter =
new wxStaticText(
this,ID_TEXT, wxT(
"Shutter\n[ms]"));
98 SliderShutter =
new wxSlider(
this, ID_SHUTTER, 20, 1, 80,
99 wxDefaultPosition,SlSize,
100 wxSL_VERTICAL | wxSL_LABELS | wxSL_RIGHT,
101 wxDefaultValidator, wxT(
"Shutter"));
103 auto_sh_Button =
new wxButton(
this, ID_BUTTON_AUTO_SHUTTER,
104 wxT(
"MAN"),wxDefaultPosition,BtSize);
105 SliderShutter->Enable(
true);
106 slSh->Add(textShutter,0,wxALL,2);
107 slSh->Add(SliderShutter,0,wxALL, 2);
108 slSh->Add(auto_sh_Button,0,wxALL, 2);
110 wxBoxSizer *sl =
new wxBoxSizer(wxHORIZONTAL);
111 sl->Add(slSh,0,wxALL,2);
112 sl->Add(slGa,0,wxALL, 2);
114 whiteBalanceButton =
new wxButton(
this, ID_BUTTON_WHITEBALANCE,
115 wxT(
"WB"),wxDefaultPosition,BtSize);
116 sl->Add(whiteBalanceButton,0,wxALL, 2);
118 showButton =
new wxButton(
this, ID_HIDE, wxT(
"Hide"),
119 wxDefaultPosition,BtSize);
120 update_Button =
new wxButton(
this, ID_BUTTON_UPDATE,
121 wxT(
"UPDATE"),wxDefaultPosition,BtSize);
123 vBox =
new wxBoxSizer(wxHORIZONTAL);
124 vBox->Add(showButton,0,wxALIGN_LEFT | wxBOTTOM);
125 vBox->Add(update_Button, 0, wxALIGN_RIGHT | wxBOTTOM);
128 sliderBox_ShGa =
new wxBoxSizer(wxVERTICAL);
129 sliderBox_ShGa->Add(sl,0,wxALL, 2);
130 sliderBox_ShGa->Add(vBox,0,wxALL,2);
132 wxBoxSizer *checkBoxes =
new wxBoxSizer(wxVERTICAL);
134 all_CheckBox =
new wxRadioButton(
this,ID_CHECKBOX_ALL,wxT(
"Alle Bilder anzeigen"),wxDefaultPosition, wxDefaultSize,wxRB_GROUP);
135 all_CheckBox->SetValue(
true);
136 checkBoxes->Add(all_CheckBox,0,wxALL,2);
138 left_CheckBox =
new wxRadioButton(
this,ID_CHECKBOX_LEFT,wxT(
"Linkes Bild anzeigen"));
139 checkBoxes->Add(left_CheckBox,0,wxALL,2);
141 if (Cam_->GetNumImages()==3) {
142 center_CheckBox =
new wxRadioButton(
this,ID_CHECKBOX_CENTER,wxT(
"Mittleres Bild anzeigen"));
143 checkBoxes->Add(center_CheckBox,0,wxALL,2);
146 right_CheckBox =
new wxRadioButton(
this,ID_CHECKBOX_RIGHT,wxT(
"Rechtes Bild anzeigen"));
147 checkBoxes->Add(right_CheckBox,0,wxALL,2);
149 raw_CheckBox =
new wxRadioButton(
this,ID_CHECKBOX_RAW,wxT(
"RAW Bild anzeigen"));
150 checkBoxes->Add(raw_CheckBox,0,wxALL,2);
152 layoutBox =
new wxBoxSizer(wxHORIZONTAL);
153 layoutBox->Add(sliderBox_ShGa,0,wxALL,2);
154 layoutBox->Add(checkBoxes,0,wxALL,2);
156 vBox->SetSizeHints(
this);
157 this->SetSizer(layoutBox);
161 wxCommandEvent fakeEvent;
166 void VideoSource_Controller_XB3::
172 void VideoSource_Controller_XB3::
173 OnHide(wxCommandEvent& event){
177 void VideoSource_Controller_XB3::
178 OnClose(wxCloseEvent& event) {
182 void VideoSource_Controller_XB3::
183 OnGain(wxScrollEvent& event) {
184 float value = (float)SliderGain->GetValue();
187 Cam_->SetGain(value/100.0f);
191 void VideoSource_Controller_XB3::
192 OnShutter(wxScrollEvent& event) {
193 float value = (float)SliderShutter->GetValue();
196 Cam_->SetShutter(value/1000.0f);
199 void VideoSource_Controller_XB3::
200 OnWhiteBalance(wxCommandEvent& event) {
202 Cam_->SoftwareWhiteBalance();
205 void VideoSource_Controller_XB3::
206 OnAuto_Shutter(wxCommandEvent& event) {
215 void VideoSource_Controller_XB3::
216 OnAuto_Gain(wxCommandEvent& event) {
226 void VideoSource_Controller_XB3::
230 current= Cam_->GetShutter();
231 SliderShutter->SetValue(
int(current*1000.0f));
232 current = Cam_->GetGain();
235 BIASERR(
"Got no gain value from camera")
237 SliderGain->SetValue(
int(current*100));
239 bool autoon = Cam_->GetAutoShutter();
240 if (autoon) auto_on(0);
242 autoon = Cam_->GetAutoGain();
243 if (autoon) auto_on(1);
248 void VideoSource_Controller_XB3::
249 OnUpdate(wxCommandEvent& event) {
253 void VideoSource_Controller_XB3::
254 OnRadioButton(wxCommandEvent& event){
255 switch(event.GetId()){
256 case ID_CHECKBOX_LEFT: ImageToShow_ = 1;
258 case ID_CHECKBOX_RIGHT: ImageToShow_ = 3;
260 case ID_CHECKBOX_CENTER: ImageToShow_ = 2;
262 case ID_CHECKBOX_RAW: ImageToShow_ = 4;
264 case ID_CHECKBOX_ALL: ImageToShow_ = 0;
266 default: cout <<
"Could not recognize sender of event" << endl;
273 void VideoSource_Controller_XB3::
278 Cam_->SetAutoShutter(
true);
279 auto_sh_Button->SetLabel(wxT(
"AUTO"));
284 Cam_->SetAutoGain(
true);
285 auto_ga_Button->SetLabel(wxT(
"AUTO"));
289 void VideoSource_Controller_XB3::
290 auto_off(
int param) {
293 auto_shutter =
false;
294 Cam_->SetAutoShutter(
false);
295 auto_sh_Button->SetLabel(wxT(
"MAN"));
300 Cam_->SetAutoGain(
false);
301 auto_ga_Button->SetLabel(wxT(
"MAN"));
305 void VideoSource_Controller_XB3::
306 SetShutterRange(
unsigned int min,
unsigned int max)
308 SliderShutter->SetRange(min,max);
312 void VideoSource_Controller_XB3::
313 SetGainRange(
unsigned int min,
unsigned int max)
315 SliderGain->SetRange(min,max);
318 int VideoSource_Controller_XB3::
Defines a common interface to different devices.