add info on how to build doxygen doc with autotools
[openjpeg.git] / OPJViewer / source / OPJDialogs.cpp
1 /*\r
2  * Copyright (c) 2007, Digital Signal Processing Laboratory, Universita'� degli studi di Perugia (UPG), Italy\r
3  * All rights reserved.\r
4  *\r
5  * Redistribution and use in source and binary forms, with or without\r
6  * modification, are permitted provided that the following conditions\r
7  * are met:\r
8  * 1. Redistributions of source code must retain the above copyright\r
9  *    notice, this list of conditions and the following disclaimer.\r
10  * 2. Redistributions in binary form must reproduce the above copyright\r
11  *    notice, this list of conditions and the following disclaimer in the\r
12  *    documentation and/or other materials provided with the distribution.\r
13  *\r
14  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'\r
15  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
16  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
17  * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\r
18  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
19  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
20  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
21  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
22  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
23  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
24  * POSSIBILITY OF SUCH DAMAGE.\r
25  */\r
26 #include "OPJViewer.h"\r
27 \r
28 // ----------------------------------------------------------------------------\r
29 // OPJDecoderDialog\r
30 // ----------------------------------------------------------------------------\r
31 \r
32 IMPLEMENT_CLASS(OPJDecoderDialog, wxPropertySheetDialog)\r
33 \r
34 BEGIN_EVENT_TABLE(OPJDecoderDialog, wxPropertySheetDialog)\r
35         EVT_CHECKBOX(OPJDECO_ENABLEDECO, OPJDecoderDialog::OnEnableDeco)\r
36 #ifdef USE_JPWL\r
37         EVT_CHECKBOX(OPJDECO_ENABLEJPWL, OPJDecoderDialog::OnEnableJPWL)\r
38 #endif // USE_JPWL\r
39 END_EVENT_TABLE()\r
40 \r
41 OPJDecoderDialog::OPJDecoderDialog(wxWindow* win, int dialogType)\r
42 {\r
43         SetExtraStyle(wxDIALOG_EX_CONTEXTHELP|wxWS_EX_VALIDATE_RECURSIVELY);\r
44 \r
45         Create(win, wxID_ANY, wxT("Decoder settings"),\r
46                 wxDefaultPosition, wxDefaultSize,\r
47                 wxDEFAULT_DIALOG_STYLE| (int) wxPlatform::IfNot(wxOS_WINDOWS_CE, wxRESIZE_BORDER)\r
48                 );\r
49 \r
50         CreateButtons(wxOK | wxCANCEL | (int)wxPlatform::IfNot(wxOS_WINDOWS_CE, wxHELP));\r
51 \r
52         m_settingsNotebook = GetBookCtrl();\r
53 \r
54         wxPanel* mainSettings = CreateMainSettingsPage(m_settingsNotebook);\r
55         wxPanel* jpeg2000Settings = CreatePart1SettingsPage(m_settingsNotebook);\r
56         if (!wxGetApp().m_enabledeco)\r
57                 jpeg2000Settings->Enable(false);\r
58         wxPanel* mjpeg2000Settings = CreatePart3SettingsPage(m_settingsNotebook);\r
59         if (!wxGetApp().m_enabledeco)\r
60                 mjpeg2000Settings->Enable(false);\r
61 #ifdef USE_JPWL\r
62         wxPanel* jpwlSettings = CreatePart11SettingsPage(m_settingsNotebook);\r
63         if (!wxGetApp().m_enabledeco)\r
64                 jpwlSettings->Enable(false);\r
65 #endif // USE_JPWL\r
66 \r
67         m_settingsNotebook->AddPage(mainSettings, wxT("Display"), false);\r
68         m_settingsNotebook->AddPage(jpeg2000Settings, wxT("JPEG 2000"), false);\r
69         m_settingsNotebook->AddPage(mjpeg2000Settings, wxT("MJPEG 2000"), false);\r
70 #ifdef USE_JPWL\r
71         m_settingsNotebook->AddPage(jpwlSettings, wxT("JPWL"), false);\r
72 #endif // USE_JPWL\r
73 \r
74         LayoutDialog();\r
75 }\r
76 \r
77 OPJDecoderDialog::~OPJDecoderDialog()\r
78 {\r
79 }\r
80 \r
81 wxPanel* OPJDecoderDialog::CreateMainSettingsPage(wxWindow* parent)\r
82 {\r
83     wxPanel* panel = new wxPanel(parent, wxID_ANY);\r
84 \r
85         // top sizer\r
86     wxBoxSizer *topSizer = new wxBoxSizer(wxVERTICAL);\r
87 \r
88                 // sub top sizer\r
89                 wxBoxSizer *subtopSizer = new wxBoxSizer(wxVERTICAL);\r
90 \r
91                 // add decoding enabling check box\r
92                 subtopSizer->Add(\r
93                         m_enabledecoCheck = new wxCheckBox(panel, OPJDECO_ENABLEDECO, wxT("Enable decoding"), wxDefaultPosition, wxDefaultSize),\r
94                         0, wxGROW | wxALL, 5);\r
95                 m_enabledecoCheck->SetValue(wxGetApp().m_enabledeco);\r
96 \r
97                 // add parsing enabling check box\r
98                 subtopSizer->Add(\r
99                         m_enableparseCheck = new wxCheckBox(panel, OPJDECO_ENABLEPARSE, wxT("Enable parsing"), wxDefaultPosition, wxDefaultSize),\r
100                         0, wxGROW | wxALL, 5);\r
101                 m_enableparseCheck->SetValue(wxGetApp().m_enableparse);\r
102 \r
103                         // resize settings, column\r
104                         wxString choices[] = {wxT("Don't resize"), wxT("Low quality"), wxT("High quality")};\r
105                         m_resizeBox = new wxRadioBox(panel, OPJDECO_RESMETHOD,\r
106                                 wxT("Resize method"),\r
107                                 wxDefaultPosition, wxDefaultSize,\r
108                                 WXSIZEOF(choices),\r
109                                 choices,\r
110                                 1,\r
111                                 wxRA_SPECIFY_ROWS);\r
112                         m_resizeBox->SetSelection(wxGetApp().m_resizemethod + 1);\r
113 \r
114                 subtopSizer->Add(m_resizeBox, 0, wxGROW | wxALL, 5);\r
115 \r
116         topSizer->Add(subtopSizer, 1, wxGROW | wxALIGN_CENTRE | wxALL, 5);\r
117 \r
118         // assign top and fit it\r
119     panel->SetSizer(topSizer);\r
120     topSizer->Fit(panel);\r
121 \r
122     return panel;\r
123 }\r
124 \r
125 wxPanel* OPJDecoderDialog::CreatePart3SettingsPage(wxWindow* parent)\r
126 {\r
127     wxPanel* panel = new wxPanel(parent, wxID_ANY);\r
128 \r
129         // top sizer\r
130     wxBoxSizer *topSizer = new wxBoxSizer(wxVERTICAL);\r
131 \r
132         // add some space\r
133         //topSizer->AddSpacer(5);\r
134 \r
135                 // sub top sizer\r
136                 wxBoxSizer *subtopSizer = new wxBoxSizer(wxVERTICAL);\r
137 \r
138                         // frame settings, column\r
139                         wxStaticBox* frameBox = new wxStaticBox(panel, wxID_ANY, wxT("Frame"));\r
140                         wxBoxSizer* frameSizer = new wxStaticBoxSizer(frameBox, wxVERTICAL);\r
141 \r
142                                 // selected frame number, row\r
143                                 wxBoxSizer* framenumSizer = new wxBoxSizer(wxHORIZONTAL);\r
144 \r
145                                 // add some text\r
146                                 framenumSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Displayed frame:")),\r
147                                                                 0, wxALL | wxALIGN_CENTER_VERTICAL, 5);\r
148 \r
149                                 // add some horizontal space\r
150                                 framenumSizer->Add(5, 5, 1, wxALL, 0);\r
151 \r
152                                 // add the value control\r
153                                 framenumSizer->Add(\r
154                                         m_framenumCtrl = new wxSpinCtrl(panel, OPJDECO_FRAMENUM,\r
155                                                                 wxString::Format(wxT("%d"), wxGetApp().m_framenum),\r
156                                                                 wxDefaultPosition, wxSize(80, wxDefaultCoord),\r
157                                                                 wxSP_ARROW_KEYS,\r
158                                                                 1, 100000, wxGetApp().m_framenum),\r
159                                         0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);\r
160 \r
161                         frameSizer->Add(framenumSizer, 0, wxGROW | wxALL, 5);\r
162 \r
163                 subtopSizer->Add(frameSizer, 0, wxGROW | wxALL, 5);\r
164 \r
165         topSizer->Add(subtopSizer, 1, wxGROW | wxALIGN_CENTRE | wxALL, 5);\r
166 \r
167         // assign top and fit it\r
168     panel->SetSizer(topSizer);\r
169     topSizer->Fit(panel);\r
170 \r
171     return panel;\r
172 }\r
173 \r
174 wxPanel* OPJDecoderDialog::CreatePart1SettingsPage(wxWindow* parent)\r
175 {\r
176     wxPanel* panel = new wxPanel(parent, wxID_ANY);\r
177 \r
178         // top sizer\r
179     wxBoxSizer *topSizer = new wxBoxSizer(wxVERTICAL);\r
180 \r
181         // add some space\r
182         //topSizer->AddSpacer(5);\r
183 \r
184                 // sub top sizer\r
185                 wxBoxSizer *subtopSizer = new wxBoxSizer(wxVERTICAL);\r
186 \r
187                         // resolutions settings, column\r
188                         wxStaticBox* resolutionBox = new wxStaticBox(panel, wxID_ANY, wxT("Resolutions"));\r
189                         wxBoxSizer* resolutionSizer = new wxStaticBoxSizer(resolutionBox, wxVERTICAL);\r
190 \r
191                                 // reduce factor sizer, row\r
192                                 wxBoxSizer* reduceSizer = new wxBoxSizer(wxHORIZONTAL);\r
193 \r
194                                 // add some text\r
195                                 reduceSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Reduce factor:")),\r
196                                                                 0, wxALL | wxALIGN_CENTER_VERTICAL, 5);\r
197 \r
198                                 // add some horizontal space\r
199                                 reduceSizer->Add(5, 5, 1, wxALL, 0);\r
200 \r
201                                 // add the value control\r
202                                 reduceSizer->Add(\r
203                                         m_reduceCtrl = new wxSpinCtrl(panel, OPJDECO_REDUCEFACTOR,\r
204                                         wxString::Format(wxT("%d"), wxGetApp().m_reducefactor),\r
205                                                                 wxDefaultPosition, wxSize(80, wxDefaultCoord),\r
206                                                                 wxSP_ARROW_KEYS,\r
207                                                                 0, 10000, wxGetApp().m_reducefactor),\r
208                                         0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);\r
209 \r
210                         resolutionSizer->Add(reduceSizer, 0, wxGROW | wxALL, 5);\r
211 \r
212                 subtopSizer->Add(resolutionSizer, 0, wxGROW | wxALL, 5);\r
213 \r
214                         // quality layer settings, column\r
215                         wxStaticBox* layerBox = new wxStaticBox(panel, wxID_ANY, wxT("Layers"));\r
216                         wxBoxSizer* layerSizer = new wxStaticBoxSizer(layerBox, wxVERTICAL);\r
217 \r
218                                 // quality layers sizer, row\r
219                                 wxBoxSizer* qualitySizer = new wxBoxSizer(wxHORIZONTAL);\r
220 \r
221                                 // add some text\r
222                                 qualitySizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Quality layers:")),\r
223                                                                 0, wxALL | wxALIGN_CENTER_VERTICAL, 5);\r
224 \r
225                                 // add some horizontal space\r
226                                 qualitySizer->Add(5, 5, 1, wxALL, 0);\r
227 \r
228                                 // add the value control\r
229                                 qualitySizer->Add(\r
230                                         m_layerCtrl = new wxSpinCtrl(panel, OPJDECO_QUALITYLAYERS,\r
231                                                                 wxString::Format(wxT("%d"), wxGetApp().m_qualitylayers),\r
232                                                                 wxDefaultPosition, wxSize(80, wxDefaultCoord),\r
233                                                                 wxSP_ARROW_KEYS,\r
234                                                                 0, 100000, wxGetApp().m_qualitylayers),\r
235                                         0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);\r
236 \r
237                         layerSizer->Add(qualitySizer, 0, wxGROW | wxALL, 5);\r
238 \r
239                 subtopSizer->Add(layerSizer, 0, wxGROW | wxALL, 5);\r
240 \r
241                         // component settings, column\r
242                         wxStaticBox* compoBox = new wxStaticBox(panel, wxID_ANY, wxT("Components"));\r
243                         wxBoxSizer* compoSizer = new wxStaticBoxSizer(compoBox, wxVERTICAL);\r
244 \r
245                                 // quality layers sizer, row\r
246                                 wxBoxSizer* numcompsSizer = new wxBoxSizer(wxHORIZONTAL);\r
247 \r
248                                 // add some text\r
249                                 numcompsSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Component displayed:")),\r
250                                                                 0, wxALL | wxALIGN_CENTER_VERTICAL, 5);\r
251 \r
252                                 // add some horizontal space\r
253                                 numcompsSizer->Add(5, 5, 1, wxALL, 0);\r
254 \r
255                                 // add the value control\r
256                                 numcompsSizer->Add(\r
257                                         m_numcompsCtrl = new wxSpinCtrl(panel, OPJDECO_NUMCOMPS,\r
258                                                                 wxString::Format(wxT("%d"), wxGetApp().m_components),\r
259                                                                 wxDefaultPosition, wxSize(80, wxDefaultCoord),\r
260                                                                 wxSP_ARROW_KEYS,\r
261                                                                 0, 100000, wxGetApp().m_components),\r
262                                         0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);\r
263                                 m_numcompsCtrl->Enable(true);\r
264 \r
265                         compoSizer->Add(numcompsSizer, 0, wxGROW | wxALL, 5);\r
266 \r
267                 subtopSizer->Add(compoSizer, 0, wxGROW | wxALL, 5);\r
268 \r
269         topSizer->Add(subtopSizer, 1, wxGROW | wxALIGN_CENTRE | wxALL, 5);\r
270 \r
271         // assign top and fit it\r
272     panel->SetSizer(topSizer);\r
273     topSizer->Fit(panel);\r
274 \r
275     return panel;\r
276 }\r
277 \r
278 #ifdef USE_JPWL\r
279 wxPanel* OPJDecoderDialog::CreatePart11SettingsPage(wxWindow* parent)\r
280 {\r
281     wxPanel* panel = new wxPanel(parent, wxID_ANY);\r
282 \r
283         // top sizer\r
284     wxBoxSizer *topSizer = new wxBoxSizer(wxVERTICAL);\r
285 \r
286         // add some space\r
287         //topSizer->AddSpacer(5);\r
288 \r
289                 // sub top sizer\r
290                 wxBoxSizer *subtopSizer = new wxBoxSizer(wxVERTICAL);\r
291 \r
292                 // add JPWL enabling check box\r
293                 subtopSizer->Add(\r
294                         m_enablejpwlCheck = new wxCheckBox(panel, OPJDECO_ENABLEJPWL, wxT("Enable JPWL"), wxDefaultPosition, wxDefaultSize),\r
295                         0, wxGROW | wxALL, 5);\r
296                 m_enablejpwlCheck->SetValue(wxGetApp().m_enablejpwl);\r
297 \r
298                         // component settings, column\r
299                         wxStaticBox* compoBox = new wxStaticBox(panel, wxID_ANY, wxT("Components"));\r
300                         wxBoxSizer* compoSizer = new wxStaticBoxSizer(compoBox, wxVERTICAL);\r
301 \r
302                                 // expected components sizer, row\r
303                                 wxBoxSizer* expcompsSizer = new wxBoxSizer(wxHORIZONTAL);\r
304 \r
305                                 // add some text\r
306                                 expcompsSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Expected comps.:")),\r
307                                                                 0, wxALL | wxALIGN_CENTER_VERTICAL, 5);\r
308 \r
309                                 // add some horizontal space\r
310                                 expcompsSizer->Add(5, 5, 1, wxALL, 0);\r
311 \r
312                                 // add the value control\r
313                                 expcompsSizer->Add(\r
314                                         m_expcompsCtrl = new wxSpinCtrl(panel, OPJDECO_EXPCOMPS,\r
315                                                                 wxString::Format(wxT("%d"), wxGetApp().m_expcomps),\r
316                                                                 wxDefaultPosition, wxSize(80, wxDefaultCoord),\r
317                                                                 wxSP_ARROW_KEYS,\r
318                                                                 1, 100000, wxGetApp().m_expcomps),\r
319                                         0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);\r
320                                 m_expcompsCtrl->Enable(wxGetApp().m_enablejpwl);\r
321 \r
322                         compoSizer->Add(expcompsSizer, 0, wxGROW | wxALL, 5);\r
323 \r
324                 subtopSizer->Add(compoSizer, 0, wxGROW | wxALL, 5);\r
325 \r
326                         // tiles settings, column\r
327                         wxStaticBox* tileBox = new wxStaticBox(panel, wxID_ANY, wxT("Tiles"));\r
328                         wxBoxSizer* tileSizer = new wxStaticBoxSizer(tileBox, wxVERTICAL);\r
329 \r
330                                 // maximum tiles sizer, row\r
331                                 wxBoxSizer* maxtileSizer = new wxBoxSizer(wxHORIZONTAL);\r
332 \r
333                                 // add some text\r
334                                 maxtileSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Max. no. of tiles:")),\r
335                                                                 0, wxALL | wxALIGN_CENTER_VERTICAL, 5);\r
336 \r
337                                 // add some horizontal space\r
338                                 maxtileSizer->Add(5, 5, 1, wxALL, 0);\r
339 \r
340                                 // add the value control\r
341                                 maxtileSizer->Add(\r
342                                         m_maxtilesCtrl = new wxSpinCtrl(panel, OPJDECO_MAXTILES,\r
343                                                                 wxString::Format(wxT("%d"), wxGetApp().m_maxtiles),\r
344                                                                 wxDefaultPosition, wxSize(80, wxDefaultCoord),\r
345                                                                 wxSP_ARROW_KEYS,\r
346                                                                 1, 100000, wxGetApp().m_maxtiles),\r
347                                         0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);\r
348                                 m_maxtilesCtrl->Enable(wxGetApp().m_enablejpwl);\r
349 \r
350                         tileSizer->Add(maxtileSizer, 0, wxGROW | wxALL, 5);\r
351 \r
352                 subtopSizer->Add(tileSizer, 0, wxGROW | wxALL, 5);\r
353 \r
354         topSizer->Add(subtopSizer, 1, wxGROW | wxALIGN_CENTRE | wxALL, 5);\r
355 \r
356         // assign top and fit it\r
357     panel->SetSizer(topSizer);\r
358     topSizer->Fit(panel);\r
359 \r
360     return panel;\r
361 }\r
362 \r
363 void OPJDecoderDialog::OnEnableDeco(wxCommandEvent& event)\r
364 {\r
365         size_t pp;\r
366 \r
367         if (event.IsChecked()) {\r
368                 wxLogMessage(wxT("Decoding enabled"));\r
369                 m_resizeBox->Enable(true);\r
370                 // enable all tabs except ourselves\r
371                 for (pp = 0; pp < m_settingsNotebook->GetPageCount(); pp++) {\r
372                         if (m_settingsNotebook->GetPageText(pp) != wxT("Display"))\r
373                                 m_settingsNotebook->GetPage(pp)->Enable(true);\r
374                 }\r
375         } else {\r
376                 wxLogMessage(wxT("Decoding disabled"));\r
377                 m_resizeBox->Enable(false);\r
378                 // disable all tabs except ourselves\r
379                 for (pp = 0; pp < m_settingsNotebook->GetPageCount(); pp++) {\r
380                         if (m_settingsNotebook->GetPageText(pp) != wxT("Display"))\r
381                                 m_settingsNotebook->GetPage(pp)->Enable(false);\r
382                 }\r
383         }\r
384 \r
385 }\r
386 \r
387 void OPJDecoderDialog::OnEnableJPWL(wxCommandEvent& event)\r
388 {\r
389         if (event.IsChecked()) {\r
390                 wxLogMessage(wxT("JPWL enabled"));\r
391                 m_expcompsCtrl->Enable(true);\r
392                 m_maxtilesCtrl->Enable(true);\r
393         } else {\r
394                 wxLogMessage(wxT("JPWL disabled"));\r
395                 m_expcompsCtrl->Enable(false);\r
396                 m_maxtilesCtrl->Enable(false);\r
397         }\r
398 \r
399 }\r
400 \r
401 #endif // USE_JPWL\r
402 \r
403 \r
404 \r
405 \r
406 // ----------------------------------------------------------------------------\r
407 // OPJEncoderDialog\r
408 // ----------------------------------------------------------------------------\r
409 \r
410 IMPLEMENT_CLASS(OPJEncoderDialog, wxPropertySheetDialog)\r
411 \r
412 BEGIN_EVENT_TABLE(OPJEncoderDialog, wxPropertySheetDialog)\r
413         EVT_CHECKBOX(OPJENCO_ENABLECOMM, OPJEncoderDialog::OnEnableComm)\r
414         EVT_CHECKBOX(OPJENCO_ENABLEINDEX, OPJEncoderDialog::OnEnableIdx)\r
415         EVT_CHECKBOX(OPJENCO_ENABLEPOC, OPJEncoderDialog::OnEnablePoc)\r
416         EVT_RADIOBUTTON(OPJENCO_RATERADIO, OPJEncoderDialog::OnRadioQualityRate)\r
417         EVT_RADIOBUTTON(OPJENCO_QUALITYRADIO, OPJEncoderDialog::OnRadioQualityRate)\r
418 #ifdef USE_JPWL\r
419         EVT_CHECKBOX(OPJENCO_ENABLEJPWL, OPJEncoderDialog::OnEnableJPWL)\r
420         EVT_CHOICE(OPJENCO_HPROT, OPJEncoderDialog::OnHprotSelect)\r
421         EVT_CHOICE(OPJENCO_PPROT, OPJEncoderDialog::OnPprotSelect)\r
422         EVT_CHOICE(OPJENCO_SENSI, OPJEncoderDialog::OnSensiSelect)\r
423 #endif // USE_JPWL\r
424 END_EVENT_TABLE()\r
425 \r
426 OPJEncoderDialog::OPJEncoderDialog(wxWindow* win, int dialogType)\r
427 {\r
428         SetExtraStyle(wxDIALOG_EX_CONTEXTHELP|wxWS_EX_VALIDATE_RECURSIVELY);\r
429 \r
430         Create(win, wxID_ANY, wxT("Encoder settings"),\r
431                 wxDefaultPosition, wxDefaultSize,\r
432                 wxDEFAULT_DIALOG_STYLE| (int) wxPlatform::IfNot(wxOS_WINDOWS_CE, wxRESIZE_BORDER)\r
433                 );\r
434 \r
435         CreateButtons(wxOK | wxCANCEL | (int)wxPlatform::IfNot(wxOS_WINDOWS_CE, wxHELP));\r
436 \r
437         m_settingsNotebook = GetBookCtrl();\r
438 \r
439         wxPanel* jpeg2000_1Settings = CreatePart1_1SettingsPage(m_settingsNotebook);\r
440         wxPanel* jpeg2000_2Settings = CreatePart1_2SettingsPage(m_settingsNotebook);\r
441         wxPanel* mainSettings = CreateMainSettingsPage(m_settingsNotebook);\r
442 #ifdef USE_JPWL\r
443         wxPanel* jpwlSettings = CreatePart11SettingsPage(m_settingsNotebook);\r
444 #endif // USE_JPWL\r
445 \r
446 #ifdef USE_JPWL\r
447         m_settingsNotebook->AddPage(jpwlSettings, wxT("JPWL"), false);\r
448 #endif // USE_JPWL\r
449         m_settingsNotebook->AddPage(jpeg2000_1Settings, wxT("JPEG 2000 - 1"), false);\r
450         m_settingsNotebook->AddPage(jpeg2000_2Settings, wxT("JPEG 2000 - 2"), false);\r
451         m_settingsNotebook->AddPage(mainSettings, wxT("General"), false);\r
452 \r
453         LayoutDialog();\r
454 }\r
455 \r
456 OPJEncoderDialog::~OPJEncoderDialog()\r
457 {\r
458 }\r
459 \r
460 wxPanel* OPJEncoderDialog::CreateMainSettingsPage(wxWindow* parent)\r
461 {\r
462     wxPanel* panel = new wxPanel(parent, wxID_ANY);\r
463 \r
464         // top sizer\r
465     wxBoxSizer *topSizer = new wxBoxSizer(wxVERTICAL);\r
466 \r
467                 // sub top sizer\r
468                 wxBoxSizer *subtopSizer = new wxBoxSizer(wxVERTICAL);\r
469 \r
470         topSizer->Add(subtopSizer, 1, wxGROW | wxALIGN_CENTRE | wxALL, 5);\r
471 \r
472         // assign top and fit it\r
473     panel->SetSizer(topSizer);\r
474     topSizer->Fit(panel);\r
475 \r
476     return panel;\r
477 }\r
478 \r
479 #ifdef USE_JPWL\r
480 wxPanel* OPJEncoderDialog::CreatePart11SettingsPage(wxWindow* parent)\r
481 {\r
482     wxPanel* panel = new wxPanel(parent, wxID_ANY);\r
483         int specno;\r
484 \r
485         // top sizer\r
486     wxBoxSizer *topSizer = new wxBoxSizer(wxVERTICAL);\r
487 \r
488                 // add JPWL enabling check box\r
489                 topSizer->Add(\r
490                         m_enablejpwlCheck = new wxCheckBox(panel, OPJENCO_ENABLEJPWL, wxT("Enable JPWL"),\r
491                         wxDefaultPosition, wxDefaultSize),\r
492                         0, wxGROW | wxALL | wxALIGN_CENTER, 5);\r
493                 m_enablejpwlCheck->SetValue(wxGetApp().m_enablejpwle);\r
494 \r
495                 // sub top sizer\r
496                 wxFlexGridSizer *subtopSizer = new wxFlexGridSizer(2, 3, 3);\r
497 \r
498                         // header settings, column\r
499                         wxStaticBox* headerBox = new wxStaticBox(panel, wxID_ANY, wxT("Header protection"));\r
500                         wxBoxSizer* headerSizer = new wxStaticBoxSizer(headerBox, wxVERTICAL);\r
501 \r
502                                 // info sizer, row\r
503                                 wxBoxSizer* info1Sizer = new wxBoxSizer(wxHORIZONTAL);\r
504 \r
505                                 // add some text\r
506                                 info1Sizer->Add(new wxStaticText(panel, wxID_ANY,\r
507                                                                 wxT("Type")),\r
508                                                                 0, wxALL | wxALIGN_CENTER_VERTICAL, 1);\r
509 \r
510                                 // add some horizontal space\r
511                                 info1Sizer->Add(3, 3, 1, wxALL, 0);\r
512 \r
513                                 // add some text\r
514                                 info1Sizer->Add(new wxStaticText(panel, wxID_ANY,\r
515                                                                 wxT("Tile part")),\r
516                                                                 0, wxALL | wxALIGN_CENTER_VERTICAL, 1);\r
517 \r
518                         headerSizer->Add(info1Sizer, 0, wxGROW | wxALL, 0);\r
519 \r
520                         // specify specs\r
521                         wxString hprotvalues[] = {wxT("None"), wxT("Pred."), wxT("CRC16"), wxT("CRC32"),\r
522                                 wxT("RS37"), wxT("RS38"), wxT("RS40"), wxT("RS43"), wxT("RS45"), wxT("RS48"),\r
523                                 wxT("RS51"), wxT("RS53"), wxT("RS56"), wxT("RS64"), wxT("RS75"), wxT("RS80"),\r
524                                 wxT("RS85"), wxT("RS96"), wxT("RS112"), wxT("RS128")};\r
525                         for (specno = 0; specno < MYJPWL_MAX_NO_TILESPECS; specno++) {\r
526 \r
527                                         // tile+hprot sizer, row\r
528                                         wxBoxSizer* tilehprotSizer = new wxBoxSizer(wxHORIZONTAL);\r
529 \r
530                                         // add the value selection\r
531                                         tilehprotSizer->Add(\r
532                                                 m_hprotChoice[specno] = new wxChoice(panel, OPJENCO_HPROT,\r
533                                                         wxDefaultPosition, wxSize(60, wxDefaultCoord),\r
534                                                         WXSIZEOF(hprotvalues), hprotvalues),\r
535                                                 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 1);\r
536                                         m_hprotChoice[specno]->SetSelection(wxGetApp().m_hprotsel[specno]);\r
537 \r
538                                         // add some horizontal space\r
539                                         tilehprotSizer->Add(3, 3, 1, wxALL, 0);\r
540 \r
541                                         // add the value control\r
542                                         tilehprotSizer->Add(\r
543                                                 m_htileCtrl[specno] = new wxSpinCtrl(panel, OPJENCO_HTILE,\r
544                                                         wxString::Format(wxT("%d"), wxGetApp().m_htileval[specno]),\r
545                                                         wxDefaultPosition, wxSize(45, wxDefaultCoord),\r
546                                                         wxSP_ARROW_KEYS,\r
547                                                         0, JPWL_MAXIMUM_TILES - 1, 0),\r
548                                                 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 1);\r
549 \r
550                                 headerSizer->Add(tilehprotSizer, 0, wxGROW | wxALL, 0);\r
551                         }\r
552 \r
553                         wxCommandEvent event1;\r
554                         OnHprotSelect(event1);\r
555 \r
556                 subtopSizer->Add(headerSizer, 0, wxGROW | wxALL, 3);\r
557 \r
558                         // packet settings, column\r
559                         wxStaticBox* packetBox = new wxStaticBox(panel, wxID_ANY, wxT("Packet protection"));\r
560                         wxBoxSizer* packetSizer = new wxStaticBoxSizer(packetBox, wxVERTICAL);\r
561 \r
562                                 // info sizer, row\r
563                                 wxBoxSizer* info2Sizer = new wxBoxSizer(wxHORIZONTAL);\r
564 \r
565                                 // add some text\r
566                                 info2Sizer->Add(new wxStaticText(panel, wxID_ANY,\r
567                                                                 wxT("Type")),\r
568                                                                 0, wxALL | wxALIGN_CENTER_VERTICAL, 1);\r
569 \r
570                                 // add some horizontal space\r
571                                 info2Sizer->Add(3, 3, 1, wxALL, 0);\r
572 \r
573                                 // add some text\r
574                                 info2Sizer->Add(new wxStaticText(panel, wxID_ANY,\r
575                                                                 wxT("Tile part")),\r
576                                                                 0, wxALL | wxALIGN_CENTER_VERTICAL, 1);\r
577 \r
578                                 // add some horizontal space\r
579                                 info2Sizer->Add(3, 3, 1, wxALL, 0);\r
580 \r
581                                 // add some text\r
582                                 info2Sizer->Add(new wxStaticText(panel, wxID_ANY,\r
583                                                                 wxT("Packet")),\r
584                                                                 0, wxALL | wxALIGN_CENTER_VERTICAL, 1);\r
585 \r
586                         packetSizer->Add(info2Sizer, 0, wxGROW | wxALL, 0);\r
587 \r
588                         // specify specs\r
589                         wxString pprotvalues[] = {wxT("None"), wxT("Pred."), wxT("CRC16"), wxT("CRC32"),\r
590                                 wxT("RS37"), wxT("RS38"), wxT("RS40"), wxT("RS43"), wxT("RS45"), wxT("RS48"),\r
591                                 wxT("RS51"), wxT("RS53"), wxT("RS56"), wxT("RS64"), wxT("RS75"), wxT("RS80"),\r
592                                 wxT("RS85"), wxT("RS96"), wxT("RS112"), wxT("RS128")};\r
593                         for (specno = 0; specno < MYJPWL_MAX_NO_TILESPECS; specno++) {\r
594 \r
595                                         // tile+pprot sizer, row\r
596                                         wxBoxSizer* tilepprotSizer = new wxBoxSizer(wxHORIZONTAL);\r
597 \r
598                                         // add the value selection\r
599                                         tilepprotSizer->Add(\r
600                                                 m_pprotChoice[specno] = new wxChoice(panel, OPJENCO_PPROT,\r
601                                                         wxDefaultPosition, wxSize(60, wxDefaultCoord),\r
602                                                         WXSIZEOF(pprotvalues), pprotvalues),\r
603                                                 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 1);\r
604                                         m_pprotChoice[specno]->SetSelection(wxGetApp().m_pprotsel[specno]);\r
605 \r
606                                         // add some horizontal space\r
607                                         tilepprotSizer->Add(3, 3, 1, wxALL, 0);\r
608 \r
609                                         // add the value control\r
610                                         tilepprotSizer->Add(\r
611                                                 m_ptileCtrl[specno] = new wxSpinCtrl(panel, OPJENCO_PTILE,\r
612                                                         wxString::Format(wxT("%d"), wxGetApp().m_ptileval[specno]),\r
613                                                         wxDefaultPosition, wxSize(45, wxDefaultCoord),\r
614                                                         wxSP_ARROW_KEYS,\r
615                                                         0, JPWL_MAXIMUM_TILES - 1, 0),\r
616                                                 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 1);\r
617 \r
618                                         // add some horizontal space\r
619                                         tilepprotSizer->Add(3, 3, 1, wxALL, 0);\r
620 \r
621                                         // add the value control\r
622                                         tilepprotSizer->Add(\r
623                                                 m_ppackCtrl[specno] = new wxSpinCtrl(panel, OPJENCO_PPACK,\r
624                                                         wxString::Format(wxT("%d"), wxGetApp().m_ppackval[specno]),\r
625                                                         wxDefaultPosition, wxSize(50, wxDefaultCoord),\r
626                                                         wxSP_ARROW_KEYS,\r
627                                                         0, 2047, 0),\r
628                                                 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 1);\r
629 \r
630                                 packetSizer->Add(tilepprotSizer, 0, wxGROW | wxALL, 0);\r
631                         }\r
632 \r
633                         wxCommandEvent event2;\r
634                         OnPprotSelect(event2);\r
635 \r
636                 subtopSizer->Add(packetSizer, 0, wxGROW | wxALL, 3);\r
637 \r
638                         // sensitivity settings, column\r
639                         wxStaticBox* sensiBox = new wxStaticBox(panel, wxID_ANY, wxT("Sensitivity"));\r
640                         wxBoxSizer* sensiSizer = new wxStaticBoxSizer(sensiBox, wxVERTICAL);\r
641 \r
642                                 // info sizer, row\r
643                                 wxBoxSizer* info3Sizer = new wxBoxSizer(wxHORIZONTAL);\r
644 \r
645                                 // add some text\r
646                                 info3Sizer->Add(new wxStaticText(panel, wxID_ANY,\r
647                                                                 wxT("Type")),\r
648                                                                 0, wxALL | wxALIGN_CENTER_VERTICAL, 1);\r
649 \r
650                                 // add some horizontal space\r
651                                 info3Sizer->Add(3, 3, 1, wxALL, 0);\r
652 \r
653                                 // add some text\r
654                                 info3Sizer->Add(new wxStaticText(panel, wxID_ANY,\r
655                                                                 wxT("Tile part")),\r
656                                                                 0, wxALL | wxALIGN_CENTER_VERTICAL, 1);\r
657 \r
658                         sensiSizer->Add(info3Sizer, 0, wxGROW | wxALL, 0);\r
659 \r
660                         // specify specs\r
661                         wxString sensivalues[] = {wxT("None"), wxT("RELATIVE ERROR"), wxT("MSE"),\r
662                                 wxT("MSE REDUCTION"), wxT("PSNR INCREMENT"), wxT("MAXERR"), wxT("TSE")};\r
663                         for (specno = 0; specno < MYJPWL_MAX_NO_TILESPECS; specno++) {\r
664 \r
665                                         // tile+sensi sizer, row\r
666                                         wxBoxSizer* tilesensiSizer = new wxBoxSizer(wxHORIZONTAL);\r
667 \r
668                                         // add the value selection\r
669                                         tilesensiSizer->Add(\r
670                                                 m_sensiChoice[specno] = new wxChoice(panel, OPJENCO_SENSI,\r
671                                                         wxDefaultPosition, wxSize(110, wxDefaultCoord),\r
672                                                         WXSIZEOF(sensivalues), sensivalues),\r
673                                                 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 1);\r
674                                         m_sensiChoice[specno]->SetSelection(wxGetApp().m_sensisel[specno]);\r
675 \r
676                                         // add some horizontal space\r
677                                         tilesensiSizer->Add(3, 3, 1, wxALL, 0);\r
678 \r
679                                         // add the value control\r
680                                         tilesensiSizer->Add(\r
681                                                 m_stileCtrl[specno] = new wxSpinCtrl(panel, OPJENCO_STILE,\r
682                                                         wxString::Format(wxT("%d"), wxGetApp().m_stileval[specno]),\r
683                                                         wxDefaultPosition, wxSize(45, wxDefaultCoord),\r
684                                                         wxSP_ARROW_KEYS,\r
685                                                         0, JPWL_MAXIMUM_TILES - 1, 0),\r
686                                                 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 1);\r
687 \r
688                                 sensiSizer->Add(tilesensiSizer, 0, wxGROW | wxALL, 0);\r
689                         }\r
690 \r
691                         wxCommandEvent event3;\r
692                         OnSensiSelect(event3);\r
693 \r
694                 subtopSizer->Add(sensiSizer, 0, wxGROW | wxALL, 3);\r
695 \r
696         topSizer->Add(subtopSizer, 1, wxGROW | wxALIGN_CENTRE | wxALL, 5);\r
697 \r
698         // assign top and fit it\r
699     panel->SetSizer(topSizer);\r
700     topSizer->Fit(panel);\r
701 \r
702     return panel;\r
703 }\r
704 #endif // USE_JPWL\r
705 \r
706 wxPanel* OPJEncoderDialog::CreatePart1_1SettingsPage(wxWindow* parent)\r
707 {\r
708     wxPanel* panel = new wxPanel(parent, wxID_ANY);\r
709 \r
710         // top sizer\r
711     wxBoxSizer *topSizer = new wxBoxSizer(wxVERTICAL);\r
712 \r
713         // add some space\r
714         //topSizer->AddSpacer(5);\r
715 \r
716                 // sub top sizer\r
717                 wxFlexGridSizer *subtopSizer = new wxFlexGridSizer(2, 3, 3);\r
718 \r
719                         // image settings, column\r
720                         wxStaticBox* imageBox = new wxStaticBox(panel, wxID_ANY, wxT("Image"));\r
721                         wxBoxSizer* imageSizer = new wxStaticBoxSizer(imageBox, wxVERTICAL);\r
722 \r
723                                 // subsampling factor sizer, row\r
724                                 wxBoxSizer* subsSizer = new wxBoxSizer(wxHORIZONTAL);\r
725 \r
726                                 // add some text\r
727                                 subsSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Subsampling:")),\r
728                                                                 0, wxALL | wxALIGN_CENTER_VERTICAL, 3);\r
729 \r
730                                 // add some horizontal space\r
731                                 subsSizer->Add(3, 3, 1, wxALL, 0);\r
732 \r
733                                 // add the value control\r
734                                 subsSizer->Add(\r
735                                         m_subsamplingCtrl = new wxTextCtrl(panel, OPJENCO_SUBSAMPLING,\r
736                                                                 wxGetApp().m_subsampling,\r
737                                                                 wxDefaultPosition, wxSize(80, wxDefaultCoord),\r
738                                                                 wxTE_LEFT),\r
739                                         0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);\r
740 \r
741                         imageSizer->Add(subsSizer, 0, wxGROW | wxALL, 3);\r
742 \r
743                                 // origin sizer, row\r
744                                 wxBoxSizer* imorigSizer = new wxBoxSizer(wxHORIZONTAL);\r
745 \r
746                                 // add some text\r
747                                 imorigSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Origin:")),\r
748                                                                 0, wxALL | wxALIGN_CENTER_VERTICAL, 3);\r
749 \r
750                                 // add some horizontal space\r
751                                 imorigSizer->Add(3, 3, 1, wxALL, 0);\r
752 \r
753                                 // add the value control\r
754                                 imorigSizer->Add(\r
755                                         m_originCtrl = new wxTextCtrl(panel, OPJENCO_IMORIG,\r
756                                                                 wxGetApp().m_origin,\r
757                                                                 wxDefaultPosition, wxSize(80, wxDefaultCoord),\r
758                                                                 wxTE_LEFT),\r
759                                         0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);\r
760 \r
761                         imageSizer->Add(imorigSizer, 0, wxGROW | wxALL, 3);\r
762 \r
763                 subtopSizer->Add(imageSizer, 0, wxGROW | wxALL, 3);\r
764 \r
765                         // layer settings, column\r
766                         wxStaticBox* layerBox = new wxStaticBox(panel, wxID_ANY, wxT("Layers/compression"));\r
767                         wxBoxSizer* layerSizer = new wxStaticBoxSizer(layerBox, wxVERTICAL);\r
768 \r
769                                 // rate factor sizer, row\r
770                                 wxBoxSizer* rateSizer = new wxBoxSizer(wxHORIZONTAL);\r
771 \r
772                                 // add some text\r
773                                 /*rateSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Rate values:")),\r
774                                                                 0, wxALL | wxALIGN_CENTER_VERTICAL, 3);*/\r
775 \r
776                                 // add the radio button\r
777                                 rateSizer->Add(\r
778                                         m_rateRadio = new wxRadioButton(panel, OPJENCO_RATERADIO, wxT("&Rate values"),\r
779                                                                 wxDefaultPosition, wxDefaultSize,\r
780                                                                 wxRB_GROUP),\r
781                                                                 0, wxALL | wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL\r
782                                                                 );\r
783                                 m_rateRadio->SetValue(!(wxGetApp().m_enablequality));\r
784 \r
785                                 // add some horizontal space\r
786                                 rateSizer->Add(3, 3, 1, wxALL, 0);\r
787 \r
788                                 // add the value control\r
789                                 rateSizer->Add(\r
790                                         m_rateCtrl = new wxTextCtrl(panel, OPJENCO_RATEFACTOR,\r
791                                                                 wxGetApp().m_rates,\r
792                                                                 wxDefaultPosition, wxSize(100, wxDefaultCoord),\r
793                                                                 wxTE_LEFT),\r
794                                         0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);\r
795                                 if (wxGetApp().m_enablequality == true)\r
796                                         m_rateCtrl->Enable(false);\r
797 \r
798                         layerSizer->Add(rateSizer, 0, wxGROW | wxALL, 3);\r
799 \r
800                                 // quality factor sizer, row\r
801                                 wxBoxSizer* qualitySizer = new wxBoxSizer(wxHORIZONTAL);\r
802 \r
803                                 // add some text\r
804                                 /*qualitySizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Quality values:")),\r
805                                                                 0, wxALL | wxALIGN_CENTER_VERTICAL, 3);*/\r
806 \r
807                                 // add the radio button\r
808                                 qualitySizer->Add(\r
809                                         m_qualityRadio = new wxRadioButton(panel, OPJENCO_QUALITYRADIO, wxT("&Quality values"),\r
810                                                                 wxDefaultPosition, wxDefaultSize),\r
811                                                                 0, wxALL | wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL\r
812                                                                 );\r
813                                 m_qualityRadio->SetValue(wxGetApp().m_enablequality);\r
814 \r
815                                 // add some horizontal space\r
816                                 qualitySizer->Add(3, 3, 1, wxALL, 0);\r
817 \r
818                                 // add the value control\r
819                                 qualitySizer->Add(\r
820                                         m_qualityCtrl = new wxTextCtrl(panel, OPJENCO_QUALITYFACTOR,\r
821                                                                 wxGetApp().m_quality,\r
822                                                                 wxDefaultPosition, wxSize(100, wxDefaultCoord),\r
823                                                                 wxTE_LEFT),\r
824                                         0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);\r
825                                 if (wxGetApp().m_enablequality == false)\r
826                                         m_qualityCtrl->Enable(false);\r
827 \r
828                         layerSizer->Add(qualitySizer, 0, wxGROW | wxALL, 3);\r
829 \r
830                 subtopSizer->Add(layerSizer, 0, wxGROW | wxALL, 3);\r
831 \r
832                         // wavelet settings, column\r
833                         wxStaticBox* transformBox = new wxStaticBox(panel, wxID_ANY, wxT("Transforms"));\r
834                         wxBoxSizer* transformSizer = new wxStaticBoxSizer(transformBox, wxVERTICAL);\r
835 \r
836                         // multiple component check box\r
837                         transformSizer->Add(\r
838                                 m_mctCheck = new wxCheckBox(panel, OPJENCO_ENABLEMCT, wxT("Multiple component"),\r
839                                 wxDefaultPosition, wxDefaultSize),\r
840                                 0, wxGROW | wxALL, 3);\r
841                         m_mctCheck->SetValue(wxGetApp().m_multicomp);\r
842 \r
843                         // irreversible wavelet check box\r
844                         transformSizer->Add(\r
845                                 m_irrevCheck = new wxCheckBox(panel, OPJENCO_ENABLEIRREV, wxT("Irreversible wavelet"),\r
846                                 wxDefaultPosition, wxDefaultSize),\r
847                                 0, wxGROW | wxALL, 3);\r
848                         m_irrevCheck->SetValue(wxGetApp().m_irreversible);\r
849 \r
850                                 // resolution number sizer, row\r
851                                 wxBoxSizer* resnumSizer = new wxBoxSizer(wxHORIZONTAL);\r
852 \r
853                                 // add some text\r
854                                 resnumSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Resolutions:")),\r
855                                                                 0, wxALL | wxALIGN_CENTER_VERTICAL, 3);\r
856 \r
857                                 // add some horizontal space\r
858                                 resnumSizer->Add(3, 3, 1, wxALL, 0);\r
859 \r
860                                 // add the value control\r
861                                 resnumSizer->Add(\r
862                                         m_resolutionsCtrl = new wxSpinCtrl(panel, OPJENCO_RESNUMBER,\r
863                                                                 wxString::Format(wxT("%d"), wxGetApp().m_resolutions),\r
864                                                                 wxDefaultPosition, wxSize(80, wxDefaultCoord),\r
865                                                                 wxSP_ARROW_KEYS,\r
866                                                                 1, 256, 6),\r
867                                         0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);\r
868 \r
869                         transformSizer->Add(resnumSizer, 0, wxGROW | wxALL, 3);\r
870 \r
871                 subtopSizer->Add(transformSizer, 0, wxGROW | wxALL, 3);\r
872 \r
873                         // codestream settings, column\r
874                         wxStaticBox* codestreamBox = new wxStaticBox(panel, wxID_ANY, wxT("Codestream"));\r
875                         wxBoxSizer* codestreamSizer = new wxStaticBoxSizer(codestreamBox, wxVERTICAL);\r
876 \r
877                                 // codeblock sizer, row\r
878                                 wxBoxSizer* codeblockSizer = new wxBoxSizer(wxHORIZONTAL);\r
879 \r
880                                 // add some text\r
881                                 codeblockSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Codeblocks size:")),\r
882                                                                 0, wxALL | wxALIGN_CENTER_VERTICAL, 3);\r
883 \r
884                                 // add some horizontal space\r
885                                 codeblockSizer->Add(3, 3, 1, wxALL, 0);\r
886 \r
887                                 // add the value control\r
888                                 codeblockSizer->Add(\r
889                                         m_cbsizeCtrl = new wxTextCtrl(panel, OPJENCO_CODEBLOCKSIZE,\r
890                                                                 wxGetApp().m_cbsize,\r
891                                                                 wxDefaultPosition, wxSize(100, wxDefaultCoord),\r
892                                                                 wxTE_LEFT),\r
893                                         0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);\r
894 \r
895                         codestreamSizer->Add(codeblockSizer, 0, wxGROW | wxALL, 3);\r
896 \r
897                                 // precinct sizer, row\r
898                                 wxBoxSizer* precinctSizer = new wxBoxSizer(wxHORIZONTAL);\r
899 \r
900                                 // add some text\r
901                                 precinctSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Precincts size:")),\r
902                                                                 0, wxALL | wxALIGN_CENTER_VERTICAL, 3);\r
903 \r
904                                 // add some horizontal space\r
905                                 precinctSizer->Add(3, 3, 1, wxALL, 0);\r
906 \r
907                                 // add the value control\r
908                                 precinctSizer->Add(\r
909                                         m_prsizeCtrl = new wxTextCtrl(panel, OPJENCO_PRECINCTSIZE,\r
910                                                                 wxGetApp().m_prsize,\r
911                                                                 wxDefaultPosition, wxSize(100, wxDefaultCoord),\r
912                                                                 wxTE_LEFT),\r
913                                         0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);\r
914 \r
915                         codestreamSizer->Add(precinctSizer, 0, wxGROW | wxALL, 3);\r
916 \r
917                 subtopSizer->Add(codestreamSizer, 0, wxGROW | wxALL, 3);\r
918 \r
919                         // tile settings, column\r
920                         wxStaticBox* tileBox = new wxStaticBox(panel, wxID_ANY, wxT("Tiles"));\r
921                         wxBoxSizer* tileSizer = new wxStaticBoxSizer(tileBox, wxVERTICAL);\r
922 \r
923                                 // tile size sizer, row\r
924                                 wxBoxSizer* tilesizeSizer = new wxBoxSizer(wxHORIZONTAL);\r
925 \r
926                                 // add some text\r
927                                 tilesizeSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Size:")),\r
928                                                                 0, wxALL | wxALIGN_CENTER_VERTICAL, 3);\r
929 \r
930                                 // add some horizontal space\r
931                                 tilesizeSizer->Add(3, 3, 1, wxALL, 0);\r
932 \r
933                                 // add the value control\r
934                                 tilesizeSizer->Add(\r
935                                         m_tsizeCtrl = new wxTextCtrl(panel, OPJENCO_TILESIZE,\r
936                                                                 wxGetApp().m_tsize,\r
937                                                                 wxDefaultPosition, wxSize(80, wxDefaultCoord),\r
938                                                                 wxTE_LEFT),\r
939                                         0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);\r
940 \r
941                         tileSizer->Add(tilesizeSizer, 0, wxGROW | wxALL, 3);\r
942 \r
943                                 // tile origin sizer, row\r
944                                 wxBoxSizer* tilorigSizer = new wxBoxSizer(wxHORIZONTAL);\r
945 \r
946                                 // add some text\r
947                                 tilorigSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Origin:")),\r
948                                                                 0, wxALL | wxALIGN_CENTER_VERTICAL, 3);\r
949 \r
950                                 // add some horizontal space\r
951                                 tilorigSizer->Add(3, 3, 1, wxALL, 0);\r
952 \r
953                                 // add the value control\r
954                                 tilorigSizer->Add(\r
955                                         m_toriginCtrl = new wxTextCtrl(panel, OPJENCO_TILORIG,\r
956                                                                 wxGetApp().m_torigin,\r
957                                                                 wxDefaultPosition, wxSize(80, wxDefaultCoord),\r
958                                                                 wxTE_LEFT),\r
959                                         0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);\r
960 \r
961                         tileSizer->Add(tilorigSizer, 0, wxGROW | wxALL, 3);\r
962 \r
963                 subtopSizer->Add(tileSizer, 0, wxGROW | wxALL, 3);\r
964 \r
965                         // progression and profile settings, column\r
966                         wxString choices[] = {wxT("LRCP"), wxT("RLCP"), wxT("RPCL"), wxT("PCRL"), wxT("CPRL"),\r
967                                 wxT("DCI2K24"), wxT("DCI2K48"), wxT("DCI4K")};\r
968                         progressionBox = new wxRadioBox(panel, OPJENCO_PROGRESSION,\r
969                                 wxT("Progression order/profile"),\r
970                                 wxDefaultPosition, wxDefaultSize,\r
971                                 WXSIZEOF(choices),\r
972                                 choices,\r
973                                 3,\r
974                                 wxRA_SPECIFY_COLS);\r
975                         progressionBox->SetSelection(wxGetApp().m_progression);\r
976 \r
977                 subtopSizer->Add(progressionBox, 0, wxGROW | wxALL, 3);\r
978 \r
979         topSizer->Add(subtopSizer, 1, wxGROW | wxALIGN_CENTRE | wxALL, 5);\r
980 \r
981         // assign top and fit it\r
982     panel->SetSizer(topSizer);\r
983     topSizer->Fit(panel);\r
984 \r
985     return panel;\r
986 }\r
987 \r
988 wxPanel* OPJEncoderDialog::CreatePart1_2SettingsPage(wxWindow* parent)\r
989 {\r
990     wxPanel* panel = new wxPanel(parent, wxID_ANY);\r
991 \r
992         // top sizer\r
993     wxBoxSizer *topSizer = new wxBoxSizer(wxVERTICAL);\r
994 \r
995         // add some space\r
996         //topSizer->AddSpacer(5);\r
997 \r
998                 // sub top sizer\r
999                 wxFlexGridSizer *subtopSizer = new wxFlexGridSizer(2, 3, 3);\r
1000                         \r
1001                         // resilience settings, column\r
1002                         wxStaticBox* resilBox = new wxStaticBox(panel, wxID_ANY, wxT("Error resilience"));\r
1003                         wxBoxSizer* resilSizer = new wxStaticBoxSizer(resilBox, wxVERTICAL);\r
1004 \r
1005                                 // resil2 sizer, row\r
1006                                 wxBoxSizer* resil2Sizer = new wxBoxSizer(wxHORIZONTAL);\r
1007 \r
1008                                 // SOP check box\r
1009                                 resil2Sizer->Add(\r
1010                                         m_sopCheck = new wxCheckBox(panel, OPJENCO_ENABLESOP, wxT("SOP"),\r
1011                                                 wxDefaultPosition, wxDefaultSize),\r
1012                                                 0, wxGROW | wxALL, 3);\r
1013                                 m_sopCheck->SetValue(wxGetApp().m_enablesop);\r
1014 \r
1015                                 // EPH check box\r
1016                                 resil2Sizer->Add(\r
1017                                         m_ephCheck = new wxCheckBox(panel, OPJENCO_ENABLEEPH, wxT("EPH"),\r
1018                                                 wxDefaultPosition, wxDefaultSize),\r
1019                                                 0, wxGROW | wxALL, 3);\r
1020                                 m_ephCheck->SetValue(wxGetApp().m_enableeph);\r
1021 \r
1022                         resilSizer->Add(resil2Sizer, 0, wxGROW | wxALL, 3);\r
1023 \r
1024                         // separation\r
1025                         resilSizer->Add(new wxStaticLine(panel, wxID_ANY), 0, wxEXPAND | wxLEFT | wxRIGHT, 3);\r
1026 \r
1027                                 // resil3 sizer, row\r
1028                                 wxFlexGridSizer* resil3Sizer = new wxFlexGridSizer(3, 3, 3);\r
1029 \r
1030                                 // BYPASS check box\r
1031                                 resil3Sizer->Add(\r
1032                                         m_enablebypassCheck = new wxCheckBox(panel, OPJENCO_ENABLEBYPASS, wxT("BYPASS"),\r
1033                                         wxDefaultPosition, wxDefaultSize),\r
1034                                         0, wxGROW | wxALL, 3);\r
1035                                 m_enablebypassCheck->SetValue(wxGetApp().m_enablebypass);\r
1036 \r
1037                                 // RESET check box\r
1038                                 resil3Sizer->Add(\r
1039                                         m_enableresetCheck = new wxCheckBox(panel, OPJENCO_ENABLERESET, wxT("RESET"),\r
1040                                         wxDefaultPosition, wxDefaultSize),\r
1041                                         0, wxGROW | wxALL, 3);\r
1042                                 m_enableresetCheck->SetValue(wxGetApp().m_enablereset);\r
1043 \r
1044                                 // RESTART check box\r
1045                                 resil3Sizer->Add(\r
1046                                         m_enablerestartCheck = new wxCheckBox(panel, OPJENCO_ENABLERESTART, wxT("RESTART"),\r
1047                                         wxDefaultPosition, wxDefaultSize),\r
1048                                         0, wxGROW | wxALL, 3);\r
1049                                 m_enablerestartCheck->SetValue(wxGetApp().m_enablerestart);\r
1050 \r
1051                                 // VSC check box\r
1052                                 resil3Sizer->Add(\r
1053                                         m_enablevscCheck = new wxCheckBox(panel, OPJENCO_ENABLEVSC, wxT("VSC"),\r
1054                                         wxDefaultPosition, wxDefaultSize),\r
1055                                         0, wxGROW | wxALL, 3);\r
1056                                 m_enablevscCheck->SetValue(wxGetApp().m_enablevsc);\r
1057 \r
1058                                 // ERTERM check box\r
1059                                 resil3Sizer->Add(\r
1060                                         m_enableertermCheck = new wxCheckBox(panel, OPJENCO_ENABLEERTERM, wxT("ERTERM"),\r
1061                                         wxDefaultPosition, wxDefaultSize),\r
1062                                         0, wxGROW | wxALL, 3);\r
1063                                 m_enableertermCheck->SetValue(wxGetApp().m_enableerterm);\r
1064 \r
1065                                 // SEGMARK check box\r
1066                                 resil3Sizer->Add(\r
1067                                         m_enablesegmarkCheck = new wxCheckBox(panel, OPJENCO_ENABLESEGMARK, wxT("SEGMARK"),\r
1068                                         wxDefaultPosition, wxDefaultSize),\r
1069                                         0, wxGROW | wxALL, 3);\r
1070                                 m_enablesegmarkCheck->SetValue(wxGetApp().m_enablesegmark);\r
1071 \r
1072                         resilSizer->Add(resil3Sizer, 0, wxGROW | wxALL, 3);\r
1073 \r
1074                 subtopSizer->Add(resilSizer, 0, wxGROW | wxALL, 3);\r
1075 \r
1076                         // ROI settings, column\r
1077                         wxStaticBox* roiBox = new wxStaticBox(panel, wxID_ANY, wxT("Region Of Interest"));\r
1078                         wxBoxSizer* roiSizer = new wxStaticBoxSizer(roiBox, wxVERTICAL);\r
1079 \r
1080                                 // component number sizer, row\r
1081                                 wxBoxSizer* roicompSizer = new wxBoxSizer(wxHORIZONTAL);\r
1082 \r
1083                                 // add some text\r
1084                                 roicompSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Component:")),\r
1085                                                                 0, wxALL | wxALIGN_CENTER_VERTICAL, 3);\r
1086 \r
1087                                 // add some horizontal space\r
1088                                 roicompSizer->Add(3, 3, 1, wxALL, 0);\r
1089 \r
1090                                 // add the value control\r
1091                                 roicompSizer->Add(\r
1092                                         /*m_layerCtrl =*/ new wxSpinCtrl(panel, OPJENCO_ROICOMP,\r
1093                                                                 wxT("0"),\r
1094                                                                 wxDefaultPosition, wxSize(80, wxDefaultCoord),\r
1095                                                                 wxSP_ARROW_KEYS,\r
1096                                                                 0, 256, 0),\r
1097                                         0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);\r
1098 \r
1099                         roiSizer->Add(roicompSizer, 0, wxGROW | wxALL, 3);\r
1100 \r
1101                                 // upshift sizer, row\r
1102                                 wxBoxSizer* roishiftSizer = new wxBoxSizer(wxHORIZONTAL);\r
1103 \r
1104                                 // add some text\r
1105                                 roishiftSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Upshift:")),\r
1106                                                                 0, wxALL | wxALIGN_CENTER_VERTICAL, 3);\r
1107 \r
1108                                 // add some horizontal space\r
1109                                 roishiftSizer->Add(3, 3, 1, wxALL, 0);\r
1110 \r
1111                                 // add the value control\r
1112                                 roishiftSizer->Add(\r
1113                                         /*m_layerCtrl =*/ new wxSpinCtrl(panel, OPJENCO_ROISHIFT,\r
1114                                                                 wxT("0"),\r
1115                                                                 wxDefaultPosition, wxSize(80, wxDefaultCoord),\r
1116                                                                 wxSP_ARROW_KEYS,\r
1117                                                                 0, 37, 0),\r
1118                                         0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);\r
1119 \r
1120                         roiSizer->Add(roishiftSizer, 0, wxGROW | wxALL, 3);\r
1121 \r
1122                 subtopSizer->Add(roiSizer, 0, wxGROW | wxALL, 3);\r
1123 \r
1124                         // POC settings, column\r
1125                         wxStaticBox* pocBox = new wxStaticBox(panel, wxID_ANY, wxT("POC"));\r
1126                         wxBoxSizer* pocSizer = new wxStaticBoxSizer(pocBox, wxVERTICAL);\r
1127 \r
1128                         // POC check box\r
1129                         pocSizer->Add(\r
1130                                 m_enablepocCheck = new wxCheckBox(panel, OPJENCO_ENABLEPOC, wxT("Enabled (tn=rs,cs,le,re,ce,pr)"),\r
1131                                 wxDefaultPosition, wxDefaultSize),\r
1132                                 0, wxGROW | wxALL, 3);\r
1133                         m_enablepocCheck->SetValue(wxGetApp().m_enablepoc);\r
1134 \r
1135                                 // POC sizer, row\r
1136                                 wxBoxSizer* pocspecSizer = new wxBoxSizer(wxHORIZONTAL);\r
1137 \r
1138                                 // add some text\r
1139                                 pocspecSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Changes:")),\r
1140                                                                 0, wxALL | wxALIGN_TOP, 3);\r
1141 \r
1142                                 // add some horizontal space\r
1143                                 pocspecSizer->Add(3, 3, 1, wxALL, 0);\r
1144 \r
1145                                 // add the value control\r
1146                                 pocspecSizer->Add(\r
1147                                         m_pocCtrl = new wxTextCtrl(panel, OPJENCO_POCSPEC,\r
1148                                                                 wxGetApp().m_poc,\r
1149                                                                 wxDefaultPosition, wxSize(140, 60),\r
1150                                                                 wxTE_LEFT | wxTE_MULTILINE),\r
1151                                         0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);\r
1152                                 m_pocCtrl->Enable(wxGetApp().m_enablepoc);\r
1153 \r
1154                         pocSizer->Add(pocspecSizer, 0, wxGROW | wxALL, 3);\r
1155 \r
1156                 subtopSizer->Add(pocSizer, 0, wxGROW | wxALL, 3);\r
1157                         \r
1158                         // Comment settings, column\r
1159                         wxStaticBox* commentBox = new wxStaticBox(panel, wxID_ANY, wxT("Comment"));\r
1160                         wxBoxSizer* commentSizer = new wxStaticBoxSizer(commentBox, wxVERTICAL);\r
1161 \r
1162                         // commenting check box\r
1163                         commentSizer->Add(\r
1164                                 m_enablecommCheck = new wxCheckBox(panel, OPJENCO_ENABLECOMM, wxT("Enabled (empty to reset)"),\r
1165                                 wxDefaultPosition, wxDefaultSize),\r
1166                                 0, wxGROW | wxALL, 3);\r
1167                         m_enablecommCheck->SetValue(wxGetApp().m_enablecomm);\r
1168 \r
1169                         // add some horizontal space\r
1170                         commentSizer->Add(3, 3, 1, wxALL, 0);\r
1171 \r
1172                         // add the value control\r
1173                         commentSizer->Add(\r
1174                                 m_commentCtrl = new wxTextCtrl(panel, OPJENCO_COMMENTTEXT,\r
1175                                                         wxGetApp().m_comment,\r
1176                                                         wxDefaultPosition, wxSize(wxDefaultCoord, 60),\r
1177                                                         wxTE_LEFT | wxTE_MULTILINE),\r
1178                                 0, wxGROW | wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);\r
1179                         m_commentCtrl->Enable(wxGetApp().m_enablecomm);\r
1180 \r
1181                 subtopSizer->Add(commentSizer, 0, wxGROW | wxALL, 3);\r
1182 \r
1183                         // Index file settings, column\r
1184                         wxStaticBox* indexBox = new wxStaticBox(panel, wxID_ANY, wxT("Indexing"));\r
1185                         wxBoxSizer* indexSizer = new wxStaticBoxSizer(indexBox, wxVERTICAL);\r
1186 \r
1187                         // indexing check box\r
1188                         indexSizer->Add(\r
1189                                 m_enableidxCheck = new wxCheckBox(panel, OPJENCO_ENABLEINDEX, wxT("Enabled"),\r
1190                                 wxDefaultPosition, wxDefaultSize),\r
1191                                 0, wxGROW | wxALL, 3);\r
1192                         m_enableidxCheck->SetValue(wxGetApp().m_enableidx);\r
1193 \r
1194                                 // index file sizer, row\r
1195                                 wxBoxSizer* indexnameSizer = new wxBoxSizer(wxHORIZONTAL);\r
1196 \r
1197                                 // add some text\r
1198                                 indexnameSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&File name:")),\r
1199                                                                 0, wxALL | wxALIGN_CENTER_VERTICAL, 3);\r
1200 \r
1201                                 // add some horizontal space\r
1202                                 indexnameSizer->Add(3, 3, 1, wxALL, 0);\r
1203 \r
1204                                 // add the value control\r
1205                                 indexnameSizer->Add(\r
1206                                         m_indexCtrl = new wxTextCtrl(panel, OPJENCO_INDEXNAME,\r
1207                                                                 wxGetApp().m_index,\r
1208                                                                 wxDefaultPosition, wxSize(120, wxDefaultCoord),\r
1209                                                                 wxTE_LEFT),\r
1210                                         0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);\r
1211                                 m_indexCtrl->Enable(wxGetApp().m_enableidx);\r
1212 \r
1213                         indexSizer->Add(indexnameSizer, 0, wxGROW | wxALL, 3);\r
1214 \r
1215                 subtopSizer->Add(indexSizer, 0, wxGROW | wxALL, 3);\r
1216 \r
1217         topSizer->Add(subtopSizer, 1, wxGROW | wxALIGN_CENTRE | wxALL, 5);\r
1218 \r
1219         // assign top and fit it\r
1220     panel->SetSizer(topSizer);\r
1221     topSizer->Fit(panel);\r
1222 \r
1223     return panel;\r
1224 }\r
1225 \r
1226 void OPJEncoderDialog::OnEnableComm(wxCommandEvent& event)\r
1227 {\r
1228         if (event.IsChecked()) {\r
1229                 wxLogMessage(wxT("Comment enabled"));\r
1230                 m_commentCtrl->Enable(true);\r
1231         } else {\r
1232                 wxLogMessage(wxT("Comment disabled"));\r
1233                 m_commentCtrl->Enable(false);\r
1234         }\r
1235 \r
1236 }\r
1237 \r
1238 void OPJEncoderDialog::OnEnableIdx(wxCommandEvent& event)\r
1239 {\r
1240         if (event.IsChecked()) {\r
1241                 wxLogMessage(wxT("Index enabled"));\r
1242                 m_indexCtrl->Enable(true);\r
1243         } else {\r
1244                 wxLogMessage(wxT("Index disabled"));\r
1245                 m_indexCtrl->Enable(false);\r
1246         }\r
1247 \r
1248 }\r
1249 \r
1250 void OPJEncoderDialog::OnEnablePoc(wxCommandEvent& event)\r
1251 {\r
1252         if (event.IsChecked()) {\r
1253                 wxLogMessage(wxT("POC enabled"));\r
1254                 m_pocCtrl->Enable(true);\r
1255         } else {\r
1256                 wxLogMessage(wxT("POC disabled"));\r
1257                 m_pocCtrl->Enable(false);\r
1258         }\r
1259 \r
1260 }\r
1261 \r
1262 void OPJEncoderDialog::OnRadioQualityRate(wxCommandEvent& event)\r
1263 {\r
1264         if (event.GetId() == OPJENCO_QUALITYRADIO) {\r
1265                 wxLogMessage(wxT("Quality selected"));\r
1266                 m_rateCtrl->Enable(false);\r
1267                 m_qualityCtrl->Enable(true);\r
1268         } else {\r
1269                 wxLogMessage(wxT("Rate selected"));\r
1270                 m_rateCtrl->Enable(true);\r
1271                 m_qualityCtrl->Enable(false);\r
1272         }\r
1273 }\r
1274 \r
1275 #ifdef USE_JPWL\r
1276 void OPJEncoderDialog::OnEnableJPWL(wxCommandEvent& event)\r
1277 {\r
1278         int specno;\r
1279 \r
1280         if (event.IsChecked()) {\r
1281                 wxLogMessage(wxT("JPWL enabled"));\r
1282                 for (specno = 0; specno < MYJPWL_MAX_NO_TILESPECS; specno++) {\r
1283                         m_hprotChoice[specno]->Enable(true);\r
1284                         m_htileCtrl[specno]->Enable(true);\r
1285                         m_pprotChoice[specno]->Enable(true);\r
1286                         m_ptileCtrl[specno]->Enable(true);\r
1287                         m_ppackCtrl[specno]->Enable(true);\r
1288                         m_sensiChoice[specno]->Enable(true);\r
1289                         m_stileCtrl[specno]->Enable(true);\r
1290                 }\r
1291                 OnHprotSelect(event);\r
1292                 OnPprotSelect(event);\r
1293                 OnSensiSelect(event);\r
1294         } else {\r
1295                 wxLogMessage(wxT("JPWL disabled"));\r
1296                 for (specno = 0; specno < MYJPWL_MAX_NO_TILESPECS; specno++) {\r
1297                         m_hprotChoice[specno]->Enable(false);\r
1298                         m_htileCtrl[specno]->Enable(false);\r
1299                         m_pprotChoice[specno]->Enable(false);\r
1300                         m_ptileCtrl[specno]->Enable(false);\r
1301                         m_ppackCtrl[specno]->Enable(false);\r
1302                         m_sensiChoice[specno]->Enable(false);\r
1303                         m_stileCtrl[specno]->Enable(false);\r
1304                 }\r
1305         }\r
1306 \r
1307 }\r
1308 \r
1309 void OPJEncoderDialog::OnHprotSelect(wxCommandEvent& event)\r
1310 {\r
1311         int specno;\r
1312 \r
1313         // deactivate properly\r
1314         for (specno = MYJPWL_MAX_NO_TILESPECS - 1; specno >= 0; specno--) {\r
1315                 if (!m_hprotChoice[specno]->GetSelection()) {\r
1316                         m_hprotChoice[specno]->Enable(false);\r
1317                         m_htileCtrl[specno]->Enable(false);\r
1318                 } else\r
1319                         break;\r
1320         }\r
1321         if (specno < (MYJPWL_MAX_NO_TILESPECS - 1)) {\r
1322                 m_hprotChoice[specno + 1]->Enable(true);\r
1323                 m_htileCtrl[specno + 1]->Enable(true);\r
1324         }\r
1325 \r
1326         //wxLogMessage(wxT("hprot changed: %d"), specno);\r
1327 }\r
1328 \r
1329 void OPJEncoderDialog::OnPprotSelect(wxCommandEvent& event)\r
1330 {\r
1331         int specno;\r
1332 \r
1333         // deactivate properly\r
1334         for (specno = MYJPWL_MAX_NO_TILESPECS - 1; specno >= 0; specno--) {\r
1335                 if (!m_pprotChoice[specno]->GetSelection()) {\r
1336                         m_pprotChoice[specno]->Enable(false);\r
1337                         m_ptileCtrl[specno]->Enable(false);\r
1338                         m_ppackCtrl[specno]->Enable(false);\r
1339                 } else\r
1340                         break;\r
1341         }\r
1342         if (specno < (MYJPWL_MAX_NO_TILESPECS - 1)) {\r
1343                 m_pprotChoice[specno + 1]->Enable(true);\r
1344                 m_ptileCtrl[specno + 1]->Enable(true);\r
1345                 m_ppackCtrl[specno + 1]->Enable(true);\r
1346         }\r
1347 \r
1348         //wxLogMessage(wxT("pprot changed: %d"), specno);\r
1349 }\r
1350 \r
1351 void OPJEncoderDialog::OnSensiSelect(wxCommandEvent& event)\r
1352 {\r
1353         int specno;\r
1354 \r
1355         // deactivate properly\r
1356         for (specno = MYJPWL_MAX_NO_TILESPECS - 1; specno >= 0; specno--) {\r
1357                 if (!m_sensiChoice[specno]->GetSelection()) {\r
1358                         m_sensiChoice[specno]->Enable(false);\r
1359                         m_stileCtrl[specno]->Enable(false);\r
1360                 } else\r
1361                         break;\r
1362         }\r
1363         if (specno < (MYJPWL_MAX_NO_TILESPECS - 1)) {\r
1364                 m_sensiChoice[specno + 1]->Enable(true);\r
1365                 m_stileCtrl[specno + 1]->Enable(true);\r
1366         }\r
1367 \r
1368         //wxLogMessage(wxT("sprot changed: %d"), specno);\r
1369 }\r
1370 \r
1371 \r
1372 #endif // USE_JPWL\r
1373 \r