Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

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