source: eviacam/trunk/fuentes/src/wcameradialog.cpp @ 567

Last change on this file since 567 was 567, checked in by mabarracus, 4 years ago

updated sources to version 2.0.3

File size: 9.5 KB
Line 
1/////////////////////////////////////////////////////////////////////////////
2// Name:        wcameradialog.cpp
3// Purpose:     
4// Author:      Cesar Mauri Loba
5// Modified by:
6// Created:     Fri 22 Oct 2010 10:02:49 CEST
7// RCS-ID:     
8// Copyright:   (C) 2010-11 Cesar Mauri from CREA Sistemes Informatics
9// Licence:     
10//
11//  This program is free software: you can redistribute it and/or modify
12//  it under the terms of the GNU General Public License as published by
13//  the Free Software Foundation, either version 3 of the License, or
14//  (at your option) any later version.
15//
16//  This program is distributed in the hope that it will be useful,
17//  but WITHOUT ANY WARRANTY; without even the implied warranty of
18//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19//  GNU General Public License for more details.
20//
21//  You should have received a copy of the GNU General Public License
22//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
23/////////////////////////////////////////////////////////////////////////////
24
25// For compilers that support precompilation, includes "wx/wx.h".
26#include "wx/wxprec.h"
27
28#ifdef __BORLANDC__
29#pragma hdrstop
30#endif
31
32#ifndef WX_PRECOMP
33#include "wx/wx.h"
34#endif
35
36////@begin includes
37////@end includes
38
39#include "wcameradialog.h"
40#include "crvcamera.h"
41
42////@begin XPM images
43////@end XPM images
44
45//TODO: Fix specific value to create our own events.
46#define FIRST_CONTROL_ID 12000
47
48
49/*!
50 * WCameraDialog type definition
51 */
52
53IMPLEMENT_DYNAMIC_CLASS( WCameraDialog, wxDialog )
54
55
56/*!
57 * WCameraDialog event table definition
58 */
59
60BEGIN_EVENT_TABLE( WCameraDialog, wxDialog )
61
62////@begin WCameraDialog event table entries
63    EVT_BUTTON( ID_BUTTON_CAMDIALOG_CLOSE, WCameraDialog::OnButtonCamdialogCloseClick )
64
65////@end WCameraDialog event table entries
66
67END_EVENT_TABLE()
68
69
70/*!
71 * WCameraDialog constructors
72 */
73
74WCameraDialog::WCameraDialog()
75{
76    Init();
77}
78
79WCameraDialog::WCameraDialog( wxWindow* parent, wxWindowID id, const wxString& caption, const wxPoint& pos, const wxSize& size, long style )
80{
81    Init();
82    Create(parent, id, caption, pos, size, style);
83}
84
85WCameraDialog::WCameraDialog( wxWindow* parent, CCamera* pCamera, wxWindowID id, const wxString& caption, const wxPoint& pos, const wxSize& size, long style )
86{
87    Init();
88    m_pCamera = pCamera;
89    Create(parent, id, caption, pos, size, style);
90}
91
92/*!
93 * WCameraDialog creator
94 */
95
96bool WCameraDialog::Create( wxWindow* parent, wxWindowID id, const wxString& caption, const wxPoint& pos, const wxSize& size, long style )
97{
98////@begin WCameraDialog creation
99    SetExtraStyle(wxWS_EX_BLOCK_EVENTS);
100    wxDialog::Create( parent, id, caption, pos, size, style );
101
102    CreateControls();
103    if (GetSizer())
104    {
105        GetSizer()->SetSizeHints(this);
106    }
107    Centre();
108////@end WCameraDialog creation
109    return true;
110}
111
112
113/*!
114 * WCameraDialog destructor
115 */
116
117WCameraDialog::~WCameraDialog()
118{
119////@begin WCameraDialog destruction
120////@end WCameraDialog destruction
121}
122
123
124/*!
125 * Member initialisation
126 */
127
128void WCameraDialog::Init()
129{
130////@begin WCameraDialog member initialisation
131    m_scrollWindow = NULL;
132    m_controlsSizer = NULL;
133////@end WCameraDialog member initialisation
134        m_pCamera = NULL;
135        m_lastId = FIRST_CONTROL_ID;
136}
137
138
139/*!
140 * Control creation for WCameraDialog
141 */
142
143void WCameraDialog::CreateControls()
144{   
145////@begin WCameraDialog content construction
146    WCameraDialog* itemDialog1 = this;
147
148    wxBoxSizer* itemBoxSizer2 = new wxBoxSizer(wxVERTICAL);
149    itemDialog1->SetSizer(itemBoxSizer2);
150
151    wxPanel* itemPanel3 = new wxPanel( itemDialog1, ID_PANEL2, wxDefaultPosition, wxDefaultSize, wxSUNKEN_BORDER|wxTAB_TRAVERSAL );
152    itemBoxSizer2->Add(itemPanel3, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
153
154    m_scrollWindow = new wxScrolledWindow( itemPanel3, ID_SCROLLEDWINDOW1, wxDefaultPosition, wxSize(500, 400), wxSUNKEN_BORDER|wxVSCROLL );
155    m_scrollWindow->SetScrollbars(10, 10, 10, 10);
156    m_controlsSizer = new wxFlexGridSizer(0, 3, 0, 0);
157    m_scrollWindow->SetSizer(m_controlsSizer);
158
159    m_scrollWindow->FitInside();
160
161    wxBoxSizer* itemBoxSizer6 = new wxBoxSizer(wxHORIZONTAL);
162    itemBoxSizer2->Add(itemBoxSizer6, 0, wxALIGN_RIGHT|wxALL, 5);
163
164    wxButton* itemButton7 = new wxButton( itemDialog1, ID_BUTTON_CAMDIALOG_CLOSE, _("Close"), wxDefaultPosition, wxDefaultSize, 0 );
165    itemBoxSizer6->Add(itemButton7, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
166
167////@end WCameraDialog content construction
168       
169        // Add controls
170        for (unsigned int numControl= 0; numControl < m_pCamera->GetCameraControlsCount(); numControl++)
171                CreateCameraControlWidget( *(m_pCamera->GetCameraControl(numControl)), m_scrollWindow, m_controlsSizer);
172
173        // TODO: automatically set size to fit content
174//      wxSize size= m_controlsSizer->GetSize();
175//      printf ("Size: %d, %d\n", size.GetWidth(), size.GetHeight());
176//      size= m_scrollWindow->GetSize();       
177//      printf ("Size: %d, %d\n", size.GetWidth(), size.GetHeight());
178}
179
180
181void WCameraDialog::CreateCameraControlWidget (const CCameraControl& cc, wxWindow* parent, wxSizer* sizer)
182{
183        ControlInfo ci;
184        ci.cc = &cc;
185
186        wxStaticText* itemStaticText = new wxStaticText( parent, m_lastId+1, wxString(cc.GetName(),wxConvUTF8) + _T(":"), wxDefaultPosition, wxDefaultSize, 0); // wxSize(-1, -1), 0 );
187        sizer->Add(itemStaticText, 0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxALL, 5);
188
189        switch (cc.GetType())
190        {
191                case CCameraControl::CCTYPE_BOOLEAN:
192                {       
193                        wxCheckBox* itemCheckBox = new wxCheckBox( parent, m_lastId+2, _T(""), wxDefaultPosition, wxDefaultSize, 0 );
194                        itemCheckBox->SetValue( (cc.GetValue()? true : false) );
195                        sizer->Add(itemCheckBox, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
196                        sizer->Add(5, 5, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5);
197           
198                        ci.type.checkbox = itemCheckBox;
199                        itemCheckBox->Connect(m_lastId+2, wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler(WCameraDialog::OnCheckboxClick), NULL, this);                                           
200                }               
201                break;
202       
203                case CCameraControl::CCTYPE_CHOICE:
204                {
205                        wxArrayString choiceStrings;
206                        for (int i=0; i<=cc.GetMaximumValue(); i++)
207                                choiceStrings.Add(wxString (cc.GetChoiceName(i), wxConvUTF8));
208                               
209                        wxChoice* itemChoice = new wxChoice( parent, m_lastId+2, wxDefaultPosition, wxDefaultSize, choiceStrings, 0 );
210                        itemChoice->SetSelection(cc.GetValue());               
211                        sizer->Add(itemChoice, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
212            sizer->Add(5, 5, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5);
213                       
214                        ci.type.choice = itemChoice;
215                        itemChoice->Connect(m_lastId+2, wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler(WCameraDialog::OnChoiceSelected), NULL, this);                                             
216                }
217                break; 
218       
219                case CCameraControl::CCTYPE_NUMBER:
220                {
221                        wxSlider* itemSlider = new wxSlider( parent, m_lastId+2, cc.GetValue(), cc.GetMinimumValue(), cc.GetMaximumValue(), wxDefaultPosition, wxSize(100, -1), wxSL_HORIZONTAL );
222                        sizer->Add(itemSlider, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
223
224                        wxTextCtrl* itemTextCtrl = new wxTextCtrl( parent, m_lastId+3, wxString::Format(wxT("%i"),cc.GetValue()), wxDefaultPosition, wxDefaultSize, 0 );
225                        itemTextCtrl->SetEditable(false);               
226                        sizer->Add(itemTextCtrl, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
227                       
228                        ci.type.slider = itemSlider;
229                        ci.textCtrl = itemTextCtrl;
230                       
231                        itemSlider->Connect(m_lastId+2, wxEVT_COMMAND_SLIDER_UPDATED, wxCommandEventHandler(WCameraDialog::OnSliderUpdated), NULL, this);
232                }
233                break;
234               
235                case CCameraControl::CCTYPE_BUTTON:
236                {
237                        wxButton* itemButton = new wxButton( parent, m_lastId+2);
238                        sizer->Add(itemButton, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
239
240                        sizer->Add(5, 5, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
241                       
242                        ci.type.button = itemButton;
243                        ci.textCtrl = NULL;
244                       
245                        itemButton->Connect(m_lastId+2, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(WCameraDialog::OnButtonClick), NULL, this);
246                }
247                break;
248               
249                default: assert (false);
250       
251        }
252        m_lastId += 4;
253        m_controlList.push_back(ci);
254}
255
256
257/*!
258 * Should we show tooltips?
259 */
260
261bool WCameraDialog::ShowToolTips()
262{
263    return true;
264}
265
266/*!
267 * Get bitmap resources
268 */
269
270wxBitmap WCameraDialog::GetBitmapResource( const wxString& name )
271{
272    // Bitmap retrieval
273////@begin WCameraDialog bitmap retrieval
274    wxUnusedVar(name);
275    return wxNullBitmap;
276////@end WCameraDialog bitmap retrieval
277}
278
279/*!
280 * Get icon resources
281 */
282
283wxIcon WCameraDialog::GetIconResource( const wxString& name )
284{
285    // Icon retrieval
286////@begin WCameraDialog icon retrieval
287    wxUnusedVar(name);
288    return wxNullIcon;
289////@end WCameraDialog icon retrieval
290}
291
292
293void WCameraDialog::OnCheckboxClick( wxCommandEvent& event )
294{
295        CCameraControl* cc = (CCameraControl*) m_controlList[(event.GetId()-FIRST_CONTROL_ID)/4].cc;   
296        cc->SetValue(event.GetInt());
297        event.Skip(false);
298}
299
300void WCameraDialog::OnChoiceSelected( wxCommandEvent& event )
301{
302        CCameraControl* cc = (CCameraControl*) m_controlList[(event.GetId()-FIRST_CONTROL_ID)/4].cc;   
303        cc->SetValue(event.GetInt());
304        event.Skip(false);
305}
306
307void WCameraDialog::OnSliderUpdated( wxCommandEvent& event )
308{
309        CCameraControl* cc = (CCameraControl*) m_controlList[(event.GetId()-FIRST_CONTROL_ID)/4].cc;   
310        cc->SetValue(event.GetInt());
311        m_controlList[(event.GetId()-FIRST_CONTROL_ID)/4].textCtrl->SetValue(wxString::Format(wxT("%i"), cc->GetValue()));
312        event.Skip(false);
313}
314
315void WCameraDialog::OnButtonClick( wxCommandEvent& event )
316{
317        CCameraControl* cc = (CCameraControl*) m_controlList[(event.GetId()-FIRST_CONTROL_ID)/4].cc;   
318        cc->SetValue(1);
319        event.Skip(false);
320}
321
322/*!
323 * wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_BUTTON_CAMDIALOG_CLOSE
324 */
325
326void WCameraDialog::OnButtonCamdialogCloseClick( wxCommandEvent& event )
327{
328        Close();
329        event.Skip(false);
330}
331
Note: See TracBrowser for help on using the repository browser.