// Copyright: (c) 1998-2002 wxWidgets team\r
// License: wxWindows license\r
/////////////////////////////////////////////////////////////////////////////\r
-#include "OPJViewer.h"\r
+/////////////////////////////////////////////////////////////////////////////\r
+// Name: dialogs.cpp\r
+// Purpose: Common dialogs demo\r
+// Author: Julian Smart\r
+// Modified by: ABX (2004) - adjustements for conditional building + new menu\r
+// Created: 04/01/98\r
+// RCS-ID: $Id: dialogs.cpp,v 1.163 2006/11/04 10:57:24 VZ Exp $\r
+// Copyright: (c) Julian Smart\r
+// Licence: wxWindows license\r
+/////////////////////////////////////////////////////////////////////////////\r
+/////////////////////////////////////////////////////////////////////////////\r
+// Name: dnd.cpp\r
+// Purpose: Drag and drop sample\r
+// Author: Vadim Zeitlin\r
+// Modified by:\r
+// Created: 04/01/98\r
+// RCS-ID: $Id: dnd.cpp,v 1.107 2006/10/30 20:23:41 VZ Exp $\r
+// Copyright:\r
+// Licence: wxWindows licence\r
+/////////////////////////////////////////////////////////////////////////////\r
+/////////////////////////////////////////////////////////////////////////////\r
+// Name: test.cpp\r
+// Purpose: wxHtml testing example\r
+/////////////////////////////////////////////////////////////////////////////\r
\r
-OPJFrame *frame = NULL;\r
-wxList my_children;\r
+\r
+#include "OPJViewer.h"\r
\r
IMPLEMENT_APP(OPJViewerApp)\r
\r
bool OPJViewerApp::OnInit(void)\r
{\r
#if wxUSE_UNICODE\r
+\r
wxChar **wxArgv = new wxChar *[argc + 1];\r
\r
- {\r
- int n;\r
+ for (int n = 0; n < argc; n++ ) {\r
+ wxMB2WXbuf warg = wxConvertMB2WX(argv[n]);\r
+ wxArgv[n] = wxStrdup(warg);\r
+ }\r
\r
- for (n = 0; n < argc; n++ )\r
- {\r
- wxMB2WXbuf warg = wxConvertMB2WX(argv[n]);\r
- wxArgv[n] = wxStrdup(warg);\r
- }\r
+ wxArgv[n] = NULL;\r
\r
- wxArgv[n] = NULL;\r
- }\r
#else // !wxUSE_UNICODE\r
+\r
#define wxArgv argv\r
+\r
#endif // wxUSE_UNICODE/!wxUSE_UNICODE\r
\r
#if wxUSE_CMDLINE_PARSER\r
+\r
static const wxCmdLineEntryDesc cmdLineDesc[] =\r
{\r
{ wxCMD_LINE_SWITCH, _T("h"), _T("help"), _T("show this help message"),\r
wxCMD_LINE_VAL_NONE, wxCMD_LINE_OPTION_HELP },\r
- /*{ wxCMD_LINE_SWITCH, _T("v"), _T("verbose"), _T("be verbose") },\r
- { wxCMD_LINE_SWITCH, _T("q"), _T("quiet"), _T("be quiet") },\r
-\r
- { wxCMD_LINE_OPTION, _T("o"), _T("output"), _T("output file") },\r
- { wxCMD_LINE_OPTION, _T("i"), _T("input"), _T("input dir") },\r
- { wxCMD_LINE_OPTION, _T("s"), _T("size"), _T("output block size"),\r
- wxCMD_LINE_VAL_NUMBER },\r
- { wxCMD_LINE_OPTION, _T("d"), _T("date"), _T("output file date"),\r
- wxCMD_LINE_VAL_DATE },*/\r
\r
{ wxCMD_LINE_PARAM, NULL, NULL, _T("input file"),\r
wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_OPTIONAL | wxCMD_LINE_PARAM_MULTIPLE },\r
wxCMD_LINE_VAL_STRING,\r
wxCMD_LINE_OPTION_MANDATORY | wxCMD_LINE_NEEDS_SEPARATOR);*/\r
\r
- switch ( parser.Parse() )\r
- {\r
- case -1:\r
- wxLogMessage(_T("Help was given, terminating."));\r
- break;\r
+ switch (parser.Parse()) {\r
+ case -1:\r
+ wxLogMessage(wxT("Help was given, terminating."));\r
+ break;\r
\r
- case 0:\r
- ShowCmdLine(parser);\r
- break;\r
+ case 0:\r
+ ShowCmdLine(parser);\r
+ break;\r
\r
- default:\r
- wxLogMessage(_T("Syntax error detected."));\r
- break;\r
+ default:\r
+ wxLogMessage(wxT("Syntax error detected."));\r
+ break;\r
}\r
+\r
#endif // wxUSE_CMDLINE_PARSER\r
\r
//wxInitAllImageHandlers();\r
wxImage::AddHandler( new wxJP2Handler );\r
wxImage::AddHandler( new wxMJ2Handler );\r
#endif\r
-\r
+ // we use a PNG image in our HTML page\r
+ wxImage::AddHandler(new wxPNGHandler);\r
+\r
+ // set decoding engine parameters\r
+ m_reducefactor = 0;\r
+ m_qualitylayers = 0;\r
+ m_components = 0;\r
+#ifdef USE_JPWL\r
+ m_enablejpwl = true;\r
+ m_expcomps = JPWL_EXPECTED_COMPONENTS;\r
+ m_maxtiles = JPWL_MAXIMUM_TILES;\r
+#endif // USE_JPWL\r
\r
// Create the main frame window\r
-\r
- frame = new OPJFrame(NULL, wxID_ANY, OPJ_APPLICATION_TITLEBAR, wxDefaultPosition, wxSize(800, 600),\r
- wxDEFAULT_FRAME_STYLE |\r
- wxNO_FULL_REPAINT_ON_RESIZE |\r
+ OPJFrame *frame = new OPJFrame(NULL, wxID_ANY, OPJ_APPLICATION_TITLEBAR,\r
+ wxDefaultPosition, wxSize(800, 600),\r
+ wxDEFAULT_FRAME_STYLE | wxNO_FULL_REPAINT_ON_RESIZE |\r
wxHSCROLL | wxVSCROLL);\r
\r
// Give it an icon (this is ignored in MDI mode: uses resources)\r
#ifdef __WXMSW__\r
- frame->SetIcon(wxIcon(_T("OPJViewer16")));\r
+ frame->SetIcon(wxIcon(wxT("OPJViewer16")));\r
#endif\r
\r
frame->Show(true);\r
\r
SetTopWindow(frame);\r
\r
+ // if there are files on the command line, open them\r
+ if (!(m_filelist.IsEmpty())) {\r
+ //wxLogMessage(wxT("Habemus files!!!"));\r
+ wxArrayString paths, filenames;\r
+ for (int f = 0; f < wxGetApp().m_filelist.GetCount(); f++) {\r
+ paths.Add(wxFileName(wxGetApp().m_filelist[f]).GetFullPath());\r
+ filenames.Add(wxFileName(wxGetApp().m_filelist[f]).GetFullName());\r
+ }\r
+ //wxLogMessage(paths[0]);\r
+ frame->OpenFiles(paths, filenames);\r
+ }\r
+\r
return true;\r
}\r
\r
void OPJViewerApp::ShowCmdLine(const wxCmdLineParser& parser)\r
{\r
- wxString s = _T("Command line parsed successfully:\nInput files: ");\r
+ wxString s = wxT("Command line parsed successfully:\nInput files: ");\r
\r
size_t count = parser.GetParamCount();\r
- for ( size_t param = 0; param < count; param++ )\r
- {\r
+ for (size_t param = 0; param < count; param++) {\r
s << parser.GetParam(param) << ';';\r
-\r
m_filelist.Add(parser.GetParam(param));\r
}\r
\r
- /*s << '\n'\r
- << _T("Verbose:\t") << (parser.Found(_T("v")) ? _T("yes") : _T("no")) << '\n'\r
- << _T("Quiet:\t") << (parser.Found(_T("q")) ? _T("yes") : _T("no")) << '\n';\r
-\r
- wxString strVal;\r
- long lVal;\r
- wxDateTime dt;\r
- if ( parser.Found(_T("o"), &strVal) )\r
- s << _T("Output file:\t") << strVal << '\n';\r
- if ( parser.Found(_T("i"), &strVal) )\r
- s << _T("Input dir:\t") << strVal << '\n';\r
- if ( parser.Found(_T("s"), &lVal) )\r
- s << _T("Size:\t") << lVal << '\n';\r
- if ( parser.Found(_T("d"), &dt) )\r
- s << _T("Date:\t") << dt.FormatISODate() << '\n';\r
- if ( parser.Found(_T("project_name"), &strVal) )\r
- s << _T("Project:\t") << strVal << '\n';*/\r
-\r
//wxLogMessage(s);\r
}\r
\r
// OPJFrame events\r
BEGIN_EVENT_TABLE(OPJFrame, wxMDIParentFrame)\r
- EVT_MENU(SASHTEST_ABOUT, OPJFrame::OnAbout)\r
- EVT_MENU(SASHTEST_NEW_WINDOW, OPJFrame::OnFileOpen)\r
+ EVT_MENU(OPJFRAME_HELPABOUT, OPJFrame::OnAbout)\r
+ EVT_MENU(OPJFRAME_FILEOPEN, OPJFrame::OnFileOpen)\r
EVT_SIZE(OPJFrame::OnSize)\r
- EVT_MENU(SASHTEST_QUIT, OPJFrame::OnQuit)\r
- EVT_MENU(SASHTEST_TOGGLE_WINDOW, OPJFrame::OnToggleWindow)\r
- EVT_SASH_DRAGGED_RANGE(ID_WINDOW_TOP, ID_WINDOW_BOTTOM, OPJFrame::OnSashDrag)\r
+ EVT_MENU(OPJFRAME_FILEEXIT, OPJFrame::OnQuit)\r
+ EVT_MENU(OPJFRAME_FILECLOSE, OPJFrame::OnClose)\r
+ EVT_MENU(OPJFRAME_VIEWZOOM, OPJFrame::OnZoom)\r
+ EVT_MENU(OPJFRAME_VIEWFIT, OPJFrame::OnFit)\r
+ EVT_MENU(OPJFRAME_FILETOGGLE, OPJFrame::OnToggleWindow)\r
+ EVT_MENU(OPJFRAME_SETSDECO, OPJFrame::OnSetsDeco)\r
+ EVT_SASH_DRAGGED_RANGE(OPJFRAME_BROWSEWIN, OPJFRAME_LOGWIN, OPJFrame::OnSashDrag)\r
EVT_NOTEBOOK_PAGE_CHANGED(LEFT_NOTEBOOK_ID, OPJFrame::OnNotebook)\r
END_EVENT_TABLE()\r
\r
// file menu and its items\r
wxMenu *file_menu = new wxMenu;\r
\r
- file_menu->Append(SASHTEST_NEW_WINDOW, wxT("&Open\tCtrl+O"));\r
- file_menu->SetHelpString(SASHTEST_NEW_WINDOW, wxT("Open one or more files"));\r
+ file_menu->Append(OPJFRAME_FILEOPEN, wxT("&Open\tCtrl+O"));\r
+ file_menu->SetHelpString(OPJFRAME_FILEOPEN, wxT("Open one or more files"));\r
+\r
+ file_menu->Append(OPJFRAME_FILETOGGLE, wxT("&Toggle browser\tCtrl+T"));\r
+ file_menu->SetHelpString(OPJFRAME_FILETOGGLE, wxT("Toggle the left browsing pane"));\r
+\r
+ file_menu->Append(OPJFRAME_FILECLOSE, wxT("&Close\tCtrl+C"));\r
+ file_menu->SetHelpString(OPJFRAME_FILECLOSE, wxT("Close current image"));\r
+\r
+ file_menu->Append(OPJFRAME_FILEEXIT, wxT("&Exit\tCtrl+Q"));\r
+ file_menu->SetHelpString(OPJFRAME_FILEEXIT, wxT("Quit this program"));\r
\r
- file_menu->Append(SASHTEST_TOGGLE_WINDOW, wxT("&Toggle browser\tCtrl+T"));\r
- file_menu->SetHelpString(SASHTEST_TOGGLE_WINDOW, wxT("Toggle the left browsing pane"));\r
+ // view menu and its items\r
+ wxMenu *view_menu = new wxMenu;\r
\r
- file_menu->Append(SASHTEST_QUIT, wxT("&Exit\tCtrl+Q"));\r
- file_menu->SetHelpString(SASHTEST_QUIT, wxT("Quit this program"));\r
+ view_menu->Append(OPJFRAME_VIEWZOOM, wxT("&Zoom\tCtrl+Z"));\r
+ view_menu->SetHelpString(OPJFRAME_VIEWZOOM, wxT("Rescale the image"));\r
+\r
+ view_menu->Append(OPJFRAME_VIEWFIT, wxT("Zoom to &fit\tCtrl+F"));\r
+ view_menu->SetHelpString(OPJFRAME_VIEWFIT, wxT("Fit the image in canvas"));\r
+\r
+ // settings menu and its items\r
+ wxMenu *sets_menu = new wxMenu;\r
+\r
+ sets_menu->Append(OPJFRAME_SETSDECO, wxT("&Decoder\tCtrl+D"));\r
+ sets_menu->SetHelpString(OPJFRAME_SETSDECO, wxT("Decoder settings"));\r
\r
// help menu and its items\r
wxMenu *help_menu = new wxMenu;\r
\r
- help_menu->Append(SASHTEST_ABOUT, wxT("&About\tF1"));\r
- help_menu->SetHelpString(SASHTEST_ABOUT, wxT("Basic info on the program"));\r
+ help_menu->Append(OPJFRAME_HELPABOUT, wxT("&About\tF1"));\r
+ help_menu->SetHelpString(OPJFRAME_HELPABOUT, wxT("Basic info on the program"));\r
\r
// the whole menubar\r
wxMenuBar *menu_bar = new wxMenuBar;\r
menu_bar->Append(file_menu, wxT("&File"));\r
+ menu_bar->Append(view_menu, wxT("&View"));\r
+ menu_bar->Append(sets_menu, wxT("&Settings"));\r
menu_bar->Append(help_menu, wxT("&Help"));\r
\r
// Associate the menu bar with the frame\r
CreateStatusBar();\r
\r
// the logging window\r
- loggingWindow = new wxSashLayoutWindow(this, ID_WINDOW_BOTTOM,\r
+ loggingWindow = new wxSashLayoutWindow(this, OPJFRAME_LOGWIN,\r
wxDefaultPosition, wxSize(400, 130),\r
wxNO_BORDER | wxSW_3D | wxCLIP_CHILDREN\r
);\r
// create the text control of the browser\r
m_textCtrlbrowse = new wxTextCtrl(m_bookCtrlbottom, wxID_ANY, wxT(""),\r
wxDefaultPosition, wxDefaultSize,\r
- wxTE_MULTILINE | wxSUNKEN_BORDER | wxTE_READONLY \r
+ wxTE_MULTILINE | wxSUNKEN_BORDER | wxTE_READONLY | wxTE_RICH \r
);\r
- m_textCtrlbrowse->SetValue(_T("Browsing window\n"));\r
+ wxFont *browsefont = new wxFont(wxNORMAL_FONT->GetPointSize(),\r
+ wxFONTFAMILY_TELETYPE, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL);\r
+ m_textCtrlbrowse->SetDefaultStyle(wxTextAttr(wxNullColour, wxNullColour, *browsefont));\r
+ m_textCtrlbrowse->AppendText(wxT("Browsing window\n"));\r
\r
// add it the notebook\r
- m_bookCtrlbottom->AddPage(m_textCtrlbrowse, wxT("Peek"));\r
+ m_bookCtrlbottom->AddPage(m_textCtrlbrowse, wxT("Peek"), false);\r
\r
// the browser window\r
- markerTreeWindow = new wxSashLayoutWindow(this, ID_WINDOW_LEFT1,\r
+ markerTreeWindow = new wxSashLayoutWindow(this, OPJFRAME_BROWSEWIN,\r
wxDefaultPosition, wxSize(300, 30),\r
wxNO_BORDER | wxSW_3D | wxCLIP_CHILDREN\r
);\r
wxDefaultPosition, wxDefaultSize,\r
wxBK_TOP);\r
\r
-\r
-#if wxUSE_LOG\r
#ifdef __WXMOTIF__\r
// For some reason, we get a memcpy crash in wxLogStream::DoLogStream\r
// on gcc/wxMotif, if we use wxLogTextCtl. Maybe it's just gcc?\r
wxLogTextCtrl *logWindow = new wxLogTextCtrl(m_textCtrl);\r
delete wxLog::SetActiveTarget(logWindow);\r
#endif\r
-#endif // wxUSE_LOG\r
\r
- // if there are files on the command line, open them\r
- /*if (!wxGetApp().m_filelist.IsEmpty()) {\r
- wxLogMessage(wxT("Habemus files!!!"));\r
- wxArrayString paths, filenames;\r
- for (int f = 0; f < wxGetApp().m_filelist.GetCount(); f++) {\r
- paths.Add(wxFileName(wxGetApp().m_filelist[f]).GetFullPath());\r
- filenames.Add(wxFileName(wxGetApp().m_filelist[f]).GetFullName());\r
- }\r
- OpenFiles(paths, filenames);\r
- }*/\r
+ // associate drop targets with the controls\r
+ SetDropTarget(new OPJDnDFile(this));\r
+\r
}\r
\r
// this is the frame destructor\r
\r
m_childhash[childnum]->Activate();\r
\r
- wxLogMessage(wxString::Format(wxT("Selection changed (now %d --> %d)"), childnum, m_childhash[childnum]->m_winnumber));\r
+ //wxLogMessage(wxT("Selection changed (now %d --> %d)"), childnum, m_childhash[childnum]->m_winnumber);\r
\r
}\r
\r
wxSize size = GetClientSize();\r
}\r
\r
+void OPJFrame::OnSetsDeco(wxCommandEvent& event)\r
+{\r
+ OPJDecoderDialog dialog(this, event.GetId());\r
+\r
+ if (dialog.ShowModal() == wxID_OK) {\r
+\r
+ // load settings\r
+ wxGetApp().m_reducefactor = dialog.m_reduceCtrl->GetValue();\r
+ wxGetApp().m_qualitylayers = dialog.m_layerCtrl->GetValue();\r
+ wxGetApp().m_components = dialog.m_numcompsCtrl->GetValue();\r
+#ifdef USE_JPWL\r
+ wxGetApp().m_enablejpwl = dialog.m_enablejpwlCheck->GetValue();\r
+ wxGetApp().m_expcomps = dialog.m_expcompsCtrl->GetValue();\r
+ wxGetApp().m_maxtiles = dialog.m_maxtilesCtrl->GetValue();\r
+#endif // USE_JPWL \r
+ \r
+ }; \r
+}\r
+\r
void OPJFrame::OnQuit(wxCommandEvent& WXUNUSED(event))\r
{\r
Close(true);\r
}\r
\r
+void OPJFrame::OnClose(wxCommandEvent& WXUNUSED(event))\r
+{\r
+ // current frame\r
+ OPJChildFrame *currframe = (OPJChildFrame *) GetActiveChild();\r
+\r
+ if (!currframe)\r
+ return;\r
+\r
+ wxCloseEvent e;\r
+ currframe->OnClose(e);\r
+}\r
+\r
+void OPJFrame::OnFit(wxCommandEvent& WXUNUSED(event))\r
+{\r
+ // current child\r
+ OPJChildFrame *currchild = (OPJChildFrame *) GetActiveChild();\r
+ if (!currchild)\r
+ return;\r
+\r
+ // current canvas\r
+ OPJCanvas *currcanvas = currchild->m_canvas;\r
+\r
+ // find a fit-to-width zoom\r
+ int zooml, wzooml, hzooml;\r
+ wxSize clientsize = currcanvas->GetClientSize();\r
+ wzooml = (int) ceil(100.0 * (double) (clientsize.GetWidth() - 2 * OPJ_CANVAS_BORDER) / (double) (currcanvas->m_image100.GetWidth()));\r
+ hzooml = (int) ceil(100.0 * (double) (clientsize.GetHeight() - 2 * OPJ_CANVAS_BORDER) / (double) (currcanvas->m_image100.GetHeight()));\r
+ zooml = wxMin(100, wxMin(wzooml, hzooml));\r
+\r
+ // fit to width\r
+ Rescale(zooml, currchild);\r
+}\r
+\r
+void OPJFrame::OnZoom(wxCommandEvent& WXUNUSED(event))\r
+{\r
+ // current frame\r
+ OPJChildFrame *currframe = (OPJChildFrame *) GetActiveChild();\r
+\r
+ if (!currframe)\r
+ return;\r
+\r
+ // get the preferred zoom\r
+ long zooml = wxGetNumberFromUser(wxT("Choose a scale between 5% and 300%"),\r
+ wxT("Zoom (%)"),\r
+ wxT("Image scale"),\r
+ currframe->m_canvas->m_zooml, 5, 300, NULL, wxDefaultPosition);\r
+\r
+ // rescale current frame image if necessary\r
+ if (zooml >= 5) {\r
+ Rescale(zooml, currframe);\r
+ wxLogMessage(wxT("zoom to %d%%"), zooml);\r
+ }\r
+}\r
+\r
+void OPJFrame::Rescale(int zooml, OPJChildFrame *currframe)\r
+{\r
+ wxImage new_image = currframe->m_canvas->m_image100.ConvertToImage();\r
+ if (zooml != 100)\r
+ new_image.Rescale((int) ((double) zooml * (double) new_image.GetWidth() / 100.0),\r
+ (int) ((double) zooml * (double) new_image.GetHeight() / 100.0),\r
+ wxIMAGE_QUALITY_NORMAL);\r
+ currframe->m_canvas->m_image = wxBitmap(new_image);\r
+ currframe->m_canvas->SetScrollbars(20,\r
+ 20,\r
+ (int)(0.5 + (double) new_image.GetWidth() / 20.0),\r
+ (int)(0.5 + (double) new_image.GetHeight() / 20.0)\r
+ );\r
+ currframe->m_canvas->Refresh();\r
+\r
+ // update zoom\r
+ currframe->m_canvas->m_zooml = zooml;\r
+}\r
+\r
+\r
// about window for the frame\r
void OPJFrame::OnAbout(wxCommandEvent& WXUNUSED(event))\r
{\r
+#ifdef OPJ_HTMLABOUT\r
+\r
+ wxBoxSizer *topsizer;\r
+ wxHtmlWindow *html;\r
+ wxDialog dlg(this, wxID_ANY, wxString(_("About")));\r
+\r
+ topsizer = new wxBoxSizer(wxVERTICAL);\r
+\r
+ html = new wxHtmlWindow(&dlg, wxID_ANY, wxDefaultPosition, wxSize(350, 250), wxHW_SCROLLBAR_NEVER);\r
+ html->SetBorders(0);\r
+ html->LoadPage(wxT("about/about.htm"));\r
+ //html->SetPage("<html><body>Hello, world!</body></html>");\r
+ html->SetSize(html->GetInternalRepresentation()->GetWidth(),\r
+ html->GetInternalRepresentation()->GetHeight());\r
+\r
+ topsizer->Add(html, 1, wxALL, 10);\r
+\r
+ topsizer->Add(new wxStaticLine(&dlg, wxID_ANY), 0, wxEXPAND | wxLEFT | wxRIGHT, 10);\r
+\r
+ wxButton *bu1 = new wxButton(&dlg, wxID_OK, wxT("OK"));\r
+ bu1->SetDefault();\r
+\r
+ topsizer->Add(bu1, 0, wxALL | wxALIGN_RIGHT, 15);\r
+\r
+ dlg.SetSizer(topsizer);\r
+ topsizer->Fit(&dlg);\r
+\r
+ dlg.ShowModal();\r
+\r
+#else\r
+\r
wxMessageBox(wxString::Format(OPJ_APPLICATION_TITLEBAR\r
wxT("\n\n")\r
wxT("Built with %s and OpenJPEG ")\r
wxT("\nRunning under %s\n\n")\r
OPJ_APPLICATION_COPYRIGHT,\r
wxVERSION_STRING,\r
- wxGetOsDescription().c_str()\r
- ),\r
+ wxGetOsDescription().c_str()),\r
wxT("About ") OPJ_APPLICATION_NAME,\r
wxOK | wxICON_INFORMATION,\r
this\r
);\r
+\r
+#endif\r
+\r
}\r
\r
void OPJFrame::OnToggleWindow(wxCommandEvent& WXUNUSED(event))\r
{\r
if (markerTreeWindow->IsShown())\r
- {\r
markerTreeWindow->Show(false);\r
- }\r
else\r
- {\r
markerTreeWindow->Show(true);\r
- }\r
-#if wxUSE_MDI_ARCHITECTURE\r
+\r
wxLayoutAlgorithm layout;\r
layout.LayoutMDIFrame(this);\r
-#endif // wxUSE_MDI_ARCHITECTURE\r
}\r
\r
void OPJFrame::OnSashDrag(wxSashEvent& event)\r
if (event.GetDragStatus() == wxSASH_STATUS_OUT_OF_RANGE)\r
return;\r
\r
- switch (event.GetId())\r
- {\r
- case ID_WINDOW_LEFT1:\r
- {\r
- markerTreeWindow->SetDefaultSize(wxSize(event.GetDragRect().width, 1000));\r
- break;\r
- }\r
- case ID_WINDOW_BOTTOM:\r
- {\r
- loggingWindow->SetDefaultSize(wxSize(1000, event.GetDragRect().height));\r
- break;\r
- }\r
+ switch (event.GetId()) {\r
+ case OPJFRAME_BROWSEWIN:\r
+ {\r
+ markerTreeWindow->SetDefaultSize(wxSize(event.GetDragRect().width, 1000));\r
+ break;\r
+ }\r
+ case OPJFRAME_LOGWIN:\r
+ {\r
+ loggingWindow->SetDefaultSize(wxSize(1000, event.GetDragRect().height));\r
+ break;\r
+ }\r
}\r
\r
-#if wxUSE_MDI_ARCHITECTURE\r
wxLayoutAlgorithm layout;\r
layout.LayoutMDIFrame(this);\r
-#endif // wxUSE_MDI_ARCHITECTURE\r
\r
// Leaves bits of itself behind sometimes\r
GetClientWindow()->Refresh();\r
void OPJFrame::OpenFiles(wxArrayString paths, wxArrayString filenames)\r
{\r
\r
- size_t count = paths.GetCount();\r
- for ( size_t n = 0; n < count; n++ )\r
- {\r
- wxString msg, s;\r
- s.Printf(_T("File %d: %s (%s)\n"),\r
- (int)n, paths[n].c_str(), filenames[n].c_str());\r
-\r
- msg += s;\r
- //s.Printf(_T("Filter index: %d"), dialog.GetFilterIndex());\r
- msg += s;\r
-\r
- /*wxMessageDialog dialog2(this, msg, _T("Selected files"));\r
- dialog2.ShowModal();*/\r
-\r
- // Make another frame, containing a canvas\r
- OPJChildFrame *subframe = new OPJChildFrame(frame,\r
- paths[n],\r
- winNumber,\r
- _T("Canvas Frame"),\r
- wxDefaultPosition, wxSize(300, 300),\r
- wxDEFAULT_FRAME_STYLE |\r
- wxNO_FULL_REPAINT_ON_RESIZE);\r
- m_childhash[winNumber] = subframe;\r
-\r
- // create own marker tree\r
- long tstyle = wxTR_DEFAULT_STYLE | wxSUNKEN_BORDER | \r
- #ifndef NO_VARIABLE_HEIGHT\r
- wxTR_HAS_VARIABLE_ROW_HEIGHT /*|*/\r
- #endif\r
- /*wxTR_EDIT_LABELS*/;\r
-\r
- m_treehash[winNumber] = new OPJMarkerTree(m_bookCtrl, paths[n], wxT("Parsing..."), TreeTest_Ctrl,\r
- wxDefaultPosition, wxDefaultSize,\r
- tstyle);\r
-\r
- m_bookCtrl->AddPage(m_treehash[winNumber],\r
- wxString::Format(wxT("%u"), winNumber), false);\r
-\r
- for (int p = 0; p < m_bookCtrl->GetPageCount(); p++) {\r
-\r
- if (m_bookCtrl->GetPageText(p) == wxString::Format(wxT("%u"), winNumber)) {\r
- m_bookCtrl->ChangeSelection(p);\r
- break;\r
- }\r
-\r
- }\r
-\r
- winNumber++;\r
- \r
- }\r
+ size_t count = paths.GetCount();\r
+ for (size_t n = 0; n < count; n++) {\r
+\r
+ wxString msg, s;\r
+ s.Printf(_T("File %d: %s (%s)\n"), (int)n, paths[n].c_str(), filenames[n].c_str());\r
+\r
+ msg += s;\r
+\r
+ /*wxMessageDialog dialog2(this, msg, _T("Selected files"));\r
+ dialog2.ShowModal();*/\r
+\r
+ // Make another frame, containing a canvas\r
+ OPJChildFrame *subframe = new OPJChildFrame(this,\r
+ paths[n],\r
+ winNumber,\r
+ wxT("Canvas Frame"),\r
+ wxDefaultPosition, wxSize(300, 300),\r
+ wxDEFAULT_FRAME_STYLE | wxNO_FULL_REPAINT_ON_RESIZE\r
+ );\r
+ m_childhash[winNumber] = subframe;\r
+\r
+ // create own marker tree\r
+ m_treehash[winNumber] = new OPJMarkerTree(m_bookCtrl, paths[n], wxT("Parsing..."), TreeTest_Ctrl,\r
+ wxDefaultPosition, wxDefaultSize,\r
+ wxTR_DEFAULT_STYLE | wxSUNKEN_BORDER\r
+ );\r
\r
+ m_bookCtrl->AddPage(m_treehash[winNumber], wxString::Format(wxT("%u"), winNumber), false);\r
\r
+ for (int p = 0; p < m_bookCtrl->GetPageCount(); p++) {\r
+ if (m_bookCtrl->GetPageText(p) == wxString::Format(wxT("%u"), winNumber)) {\r
+ m_bookCtrl->ChangeSelection(p);\r
+ break;\r
+ }\r
+ }\r
+\r
+ winNumber++;\r
+ }\r
}\r
\r
void OPJFrame::OnFileOpen(wxCommandEvent& WXUNUSED(event))\r
wxEmptyString, wxEmptyString, wildcards,\r
wxFD_OPEN|wxFD_MULTIPLE);\r
\r
- if (dialog.ShowModal() == wxID_OK)\r
- {\r
+ if (dialog.ShowModal() == wxID_OK) {\r
wxArrayString paths, filenames;\r
\r
dialog.GetPaths(paths);\r
dialog.GetFilenames(filenames);\r
\r
OpenFiles(paths, filenames);\r
-\r
}\r
\r
}\r
SetBackgroundColour(OPJ_CANVAS_COLOUR);\r
\r
m_fname = fname;\r
+ m_childframe = (OPJChildFrame *) parent;\r
\r
OPJDecoThread *dthread = CreateDecoThread();\r
\r
if (dthread->Run() != wxTHREAD_NO_ERROR)\r
wxLogMessage(wxT("Can't start deco thread!"));\r
else\r
- wxLogMessage(_T("New deco thread started."));\r
+ wxLogMessage(wxT("New deco thread started."));\r
\r
+ // 100% zoom\r
+ m_zooml = 100;\r
}\r
\r
OPJDecoThread *OPJCanvas::CreateDecoThread(void)\r
// Define the repainting behaviour\r
void OPJCanvas::OnDraw(wxDC& dc)\r
{\r
- /*dc.SetFont(*wxSWISS_FONT);\r
- dc.SetPen(*wxBLACK_PEN);\r
- dc.DrawText(_T("Image drawing canvas"), 10, 10);\r
- dc.DrawLine(8, 22, 300, 22);*/\r
if (m_image.Ok()) {\r
dc.DrawBitmap(m_image, OPJ_CANVAS_BORDER, OPJ_CANVAS_BORDER);\r
} else {\r
dc.SetPen(*wxBLACK_PEN);\r
dc.DrawText(_T("Decoding image, please wait..."), 40, 50);\r
}\r
-\r
- /*dc.SetFont(*wxSWISS_FONT);\r
- dc.SetPen(*wxGREEN_PEN);\r
- dc.DrawLine(0, 0, 200, 200);\r
- dc.DrawLine(200, 0, 0, 200);\r
-\r
- dc.SetBrush(*wxCYAN_BRUSH);\r
- dc.SetPen(*wxRED_PEN);\r
- dc.DrawRectangle(100, 100, 100, 50);\r
- dc.DrawRoundedRectangle(150, 150, 100, 50, 20);\r
-\r
- dc.DrawEllipse(250, 250, 100, 50);\r
-#if wxUSE_SPLINES\r
- dc.DrawSpline(50, 200, 50, 100, 200, 10);\r
-#endif // wxUSE_SPLINES\r
- dc.DrawLine(50, 230, 200, 230);\r
- dc.DrawText(_T("This is a test string"), 50, 230);\r
-\r
- wxPoint points[3];\r
- points[0].x = 200; points[0].y = 300;\r
- points[1].x = 100; points[1].y = 400;\r
- points[2].x = 300; points[2].y = 400;\r
-\r
- dc.DrawPolygon(3, points);*/\r
}\r
\r
// This implements a tiny doodling program! Drag the mouse using\r
\r
wxPoint pt(event.GetLogicalPosition(dc));\r
\r
- if (xpos > -1 && ypos > -1 && event.Dragging())\r
- {\r
- dc.SetPen(*wxBLACK_PEN);\r
+ if ((xpos > -1) && (ypos > -1) && event.Dragging()) {\r
+ dc.SetPen(*wxRED_PEN);\r
dc.DrawLine(xpos, ypos, pt.x, pt.y);\r
}\r
xpos = pt.x;\r
\r
void OPJFrame::OnSize(wxSizeEvent& WXUNUSED(event))\r
{\r
-#if wxUSE_MDI_ARCHITECTURE\r
wxLayoutAlgorithm layout;\r
layout.LayoutMDIFrame(this);\r
-#endif // wxUSE_MDI_ARCHITECTURE\r
}\r
\r
-// Note that SASHTEST_NEW_WINDOW and SASHTEST_ABOUT commands get passed\r
+// Note that OPJFRAME_FILEOPEN and OPJFRAME_HELPABOUT commands get passed\r
// to the parent window for processing, so no need to\r
// duplicate event handlers here.\r
\r
/*EVT_MENU(SASHTEST_CHILD_QUIT, OPJChildFrame::OnQuit)*/\r
EVT_CLOSE(OPJChildFrame::OnClose)\r
EVT_SET_FOCUS(OPJChildFrame::OnGotFocus)\r
- /*EVT_KILL_FOCUS(OPJChildFrame::OnLostFocus)*/\r
+ EVT_KILL_FOCUS(OPJChildFrame::OnLostFocus)\r
END_EVENT_TABLE()\r
\r
OPJChildFrame::OPJChildFrame(OPJFrame *parent, wxFileName fname, int winnumber, const wxString& title, const wxPoint& pos, const wxSize& size,\r
{\r
m_frame = (OPJFrame *) parent;\r
m_canvas = NULL;\r
- my_children.Append(this);\r
+ //my_children.Append(this);\r
m_fname = fname;\r
m_winnumber = winnumber;\r
SetTitle(wxString::Format(_T("%d: "), m_winnumber) + m_fname.GetFullName());\r
\r
// Give it an icon (this is ignored in MDI mode: uses resources)\r
#ifdef __WXMSW__\r
- SetIcon(wxIcon(_T("sashtest_icn")));\r
+ SetIcon(wxIcon(wxT("OPJChild16")));\r
#endif\r
\r
-#if wxUSE_STATUSBAR\r
// Give it a status line\r
- //CreateStatusBar();\r
-#endif // wxUSE_STATUSBAR\r
-\r
- // Make a menubar\r
- /*wxMenu *file_menu = new wxMenu;\r
-\r
- file_menu->Append(SASHTEST_NEW_WINDOW, _T("&Open\tCtrl+O"));\r
- file_menu->Append(SASHTEST_CHILD_QUIT, _T("&Close\tCtrl+C"));\r
- file_menu->Append(SASHTEST_QUIT, _T("&Exit\tCtrl+Q"));\r
-\r
- wxMenu *option_menu = new wxMenu;\r
-\r
- // Dummy option\r
- option_menu->Append(SASHTEST_REFRESH, _T("&Refresh picture"));\r
-\r
- wxMenu *help_menu = new wxMenu;\r
- help_menu->Append(SASHTEST_ABOUT, _T("&About\tF1"));\r
-\r
- wxMenuBar *menu_bar = new wxMenuBar;\r
-\r
- menu_bar->Append(file_menu, _T("&File"));\r
- menu_bar->Append(option_menu, _T("&Options"));\r
- menu_bar->Append(help_menu, _T("&Help"));\r
-\r
- // Associate the menu bar with the frame\r
- SetMenuBar(menu_bar);*/\r
-\r
+ /*CreateStatusBar();*/\r
\r
int width, height;\r
GetClientSize(&width, &height);\r
canvas->SetCursor(wxCursor(wxCURSOR_PENCIL));\r
m_canvas = canvas;\r
\r
- // Give it scrollbars\r
+ // Give it scrollbars\r
canvas->SetScrollbars(20, 20, 5, 5);\r
\r
Show(true);\r
Maximize(true);\r
\r
-\r
- /*wxSize gsize = m_frame->m_bookCtrl->GetClientSize();\r
- m_frame->m_treehash[m_winnumber]->SetSize(0, 0, gsize.x, gsize.y);*/\r
-\r
- /*m_frame->Resize(m_winnumber);*/\r
- /*m_frame->m_treehash[0]->Show(false);\r
- m_frame->m_treehash[m_winnumber]->Show(true);*/\r
- /*m_frame->Resize(m_winnumber);*/\r
-\r
/*wxLogError(wxString::Format(wxT("Created tree %d (0x%x)"), m_winnumber, m_frame->m_treehash[m_winnumber]));*/\r
\r
}\r
\r
OPJChildFrame::~OPJChildFrame(void)\r
{\r
- my_children.DeleteObject(this);\r
+ //my_children.DeleteObject(this);\r
}\r
\r
-/*void OPJChildFrame::OnQuit(wxCommandEvent& WXUNUSED(event))\r
-{\r
- for (int p = 0; p < m_frame->m_bookCtrl->GetPageCount(); p++) {\r
-\r
- if (m_frame->m_bookCtrl->GetPageText(p) == wxString::Format(wxT("%u"), m_winnumber)) {\r
- m_frame->m_bookCtrl->DeletePage(p);;\r
- break;\r
- }\r
-\r
- }\r
-\r
- Close(true);\r
-}*/\r
\r
void OPJChildFrame::OnClose(wxCloseEvent& event)\r
{\r
}\r
Destroy();\r
\r
- wxLogMessage(wxString::Format(wxT("Closed: %d"), m_winnumber));\r
+ wxLogMessage(wxT("Closed: %d"), m_winnumber);\r
\r
}\r
\r
\r
}\r
\r
- wxLogMessage(wxString::Format(wxT("Got focus: %d (%x)"), m_winnumber, event.GetWindow()));\r
+ //wxLogMessage(wxT("Got focus: %d (%x)"), m_winnumber, event.GetWindow());\r
}\r
\r
-/*void OPJChildFrame::OnLostFocus(wxFocusEvent& event)\r
+void OPJChildFrame::OnLostFocus(wxFocusEvent& event)\r
{\r
- wxLogMessage(wxString::Format(wxT("Lost focus: %d (%x)"), m_winnumber, event.GetWindow()));\r
-\r
-}*/\r
+ //wxLogMessage(wxT("Lost focus: %d (%x)"), m_winnumber, event.GetWindow());\r
+}\r
\r
#if USE_GENERIC_TREECTRL\r
BEGIN_EVENT_TABLE(OPJMarkerTree, wxGenericTreeCtrl)\r
// EVT_TREE_ITEM_MENU is the preferred event for creating context menus\r
// on a tree control, because it includes the point of the click or item,\r
// meaning that no additional placement calculations are required.\r
- /*EVT_TREE_ITEM_MENU(TreeTest_Ctrl, OPJMarkerTree::OnItemMenu)*/\r
+ EVT_TREE_ITEM_MENU(TreeTest_Ctrl, OPJMarkerTree::OnItemMenu)\r
/*EVT_TREE_ITEM_RIGHT_CLICK(TreeTest_Ctrl, OPJMarkerTree::OnItemRClick)*/\r
\r
/*EVT_RIGHT_DOWN(OPJMarkerTree::OnRMouseDown)\r
#endif\r
\r
OPJMarkerTree::OPJMarkerTree(wxWindow *parent, wxFileName fname, wxString name, const wxWindowID id,\r
- const wxPoint& pos, const wxSize& size,\r
- long style)\r
+ const wxPoint& pos, const wxSize& size, long style)\r
: wxTreeCtrl(parent, id, pos, size, style)\r
{\r
m_reverseSort = false;\r
if (pthread->Run() != wxTHREAD_NO_ERROR)\r
wxLogMessage(wxT("Can't start parse thread!"));\r
else\r
- wxLogMessage(_T("New parse thread started."));\r
+ wxLogMessage(wxT("New parse thread started."));\r
}\r
\r
void OPJMarkerTree::CreateImageList(int size)\r
{\r
- if ( size == -1 )\r
- {\r
+ if (size == -1) {\r
SetImageList(NULL);\r
return;\r
}\r
- if ( size == 0 )\r
+ if (size == 0)\r
size = m_imageSize;\r
else\r
m_imageSize = size;\r
icons[4] = wxIcon(icon5_xpm);\r
\r
int sizeOrig = icons[0].GetWidth();\r
- for ( size_t i = 0; i < WXSIZEOF(icons); i++ )\r
- {\r
- if ( size == sizeOrig )\r
- {\r
+ for (size_t i = 0; i < WXSIZEOF(icons); i++) {\r
+ if (size == sizeOrig) {\r
images->Add(icons[i]);\r
- }\r
- else\r
- {\r
+ } else {\r
images->Add(wxBitmap(wxBitmap(icons[i]).ConvertToImage().Rescale(size, size)));\r
}\r
}\r
#if USE_GENERIC_TREECTRL || !defined(__WXMSW__)\r
void OPJMarkerTree::CreateButtonsImageList(int size)\r
{\r
- if ( size == -1 )\r
- {\r
+ if ( size == -1 ) {\r
SetButtonsImageList(NULL);\r
return;\r
}\r
icons[2] = wxIcon(icon5_xpm); // open\r
icons[3] = wxIcon(icon5_xpm); // open, selected\r
\r
- for ( size_t i = 0; i < WXSIZEOF(icons); i++ )\r
- {\r
+ for ( size_t i = 0; i < WXSIZEOF(icons); i++ ) {\r
int sizeOrig = icons[i].GetWidth();\r
- if ( size == sizeOrig )\r
- {\r
+ if ( size == sizeOrig ) {\r
images->Add(icons[i]);\r
- }\r
- else\r
- {\r
+ } else {\r
images->Add(wxBitmap(wxBitmap(icons[i]).ConvertToImage().Rescale(size, size)));\r
}\r
}\r
wxTreeItemId item = event.GetItem();\r
wxString text;\r
if ( item.IsOk() )\r
- text << _T('"') << GetItemText(item).c_str() << _T('"');\r
+ text << wxT('"') << GetItemText(item).c_str() << wxT('"');\r
else\r
- text = _T("invalid item");\r
+ text = wxT("invalid item");\r
wxLogMessage(wxT("%s(%s)"), name, text.c_str());\r
}\r
\r
\r
void OPJMarkerTree::OnSelChanged(wxTreeEvent& event)\r
{\r
-#define BUNCH_LINESIZE 24\r
-#define BUNCH_NUMLINES 6\r
+#define BUNCH_LINESIZE 16\r
+#define BUNCH_NUMLINES 7\r
\r
wxTreeItemId item = event.GetItem();\r
OPJMarkerData* data = (OPJMarkerData *) GetItemData(item);\r
\r
m_peektextCtrl->Clear();\r
\r
- /*wxTextAttr myattr = m_peektextCtrl->GetDefaultStyle();\r
- myattr.SetFont(wxFont(10, wxFONTFAMILY_TELETYPE, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL));\r
- m_peektextCtrl->SetDefaultStyle(myattr);*/\r
-\r
- text << wxString::Format(wxT("Selected... (%s -> %s, %s, %d, %d)"),\r
+ /*text << wxString::Format(wxT("Selected... (%s -> %s, %s, %d, %d)"),\r
text.c_str(), data->GetDesc1(), data->GetDesc2(),\r
- data->m_start, data->m_length) << wxT("\n");\r
+ data->m_start, data->m_length) << wxT("\n");*/\r
\r
// open the file and browse a little\r
wxFile *fp = new wxFile(m_fname.GetFullPath().c_str(), wxFile::read);\r
int max_read = wxMin(WXSIZEOF(buffer), data->m_length - data->m_start + 1);\r
fp->Read(buffer, max_read);\r
\r
+ // write the file data between start and stop\r
pos = 0;\r
for (l = 0; l < BUNCH_NUMLINES; l++) {\r
\r
- text << wxString::Format(wxT("%08d:"), data->m_start + pos);\r
+ text << wxString::Format(wxT("%010d:"), data->m_start + pos);\r
\r
pre_pos = pos;\r
\r
for (c = 0; c < BUNCH_LINESIZE; c++) {\r
\r
if (pre_pos < max_read) {\r
- if ((buffer[pre_pos] == '\n') || (buffer[pre_pos] == '\t'))\r
+ if ((buffer[pre_pos] == '\n') ||\r
+ (buffer[pre_pos] == '\t') ||\r
+ (buffer[pre_pos] == '\0') ||\r
+ (buffer[pre_pos] == 0x0D) ||\r
+ (buffer[pre_pos] == 0x0B))\r
buffer[pre_pos] = ' ';\r
text << wxString::Format(wxT("%c."), wxChar(buffer[pre_pos]));\r
} else\r
}\r
}\r
\r
- wxLogMessage( wxT("%s event: %s (flags = %c%c%c%c)"),\r
+ wxLogMessage(wxT("%s event: %s (flags = %c%c%c%c)"),\r
name,\r
key.c_str(),\r
event.ControlDown() ? wxT('C') : wxT('-'),\r
wxLogMessage(wxT("OnItemActivated"));\r
}*/\r
\r
-/*void OPJMarkerTree::OnItemMenu(wxTreeEvent& event)\r
+void OPJMarkerTree::OnItemMenu(wxTreeEvent& event)\r
{\r
- wxTreeItemId itemId = event.GetItem();\r
+ /*wxTreeItemId itemId = event.GetItem();\r
OPJMarkerData *item = itemId.IsOk() ? (OPJMarkerData *)GetItemData(itemId)\r
: NULL;\r
\r
wxLogMessage(wxT("OnItemMenu for item \"%s\""), item ? item->GetDesc()\r
- : _T(""));\r
+ : _T(""));*/\r
\r
- event.Skip();\r
-}*/\r
+ //wxLogMessage(wxT("EEEEEEEEEE"));\r
+\r
+ //event.Skip();\r
+}\r
\r
/*void OPJMarkerTree::OnContextMenu(wxContextMenuEvent& event)\r
{\r
\r
srand(GetId());\r
int m_countnum = rand() % 9;\r
- text.Printf(wxT("Deco thread 0x%lx started (priority = %u, time = %d)."),\r
- GetId(), GetPriority(), m_countnum);\r
+ //text.Printf(wxT("Deco thread 0x%lx started (priority = %u, time = %d)."),\r
+ // GetId(), GetPriority(), m_countnum);\r
+ text.Printf(wxT("Deco thread %d started"), m_canvas->m_childframe->m_winnumber);\r
WriteText(text);\r
- // wxLogMessage(text); -- test wxLog thread safeness\r
-\r
- //wxBusyCursor wait;\r
- //wxBusyInfo wait(wxT("Decoding image ..."));\r
-\r
-\r
- /*for (m_count = 0; m_count < m_countnum; m_count++) {\r
- // check if we were asked to exit\r
- if ( TestDestroy() )\r
- break;\r
\r
- text.Printf(wxT("[%u] Deco thread 0x%lx here."), m_count, GetId());\r
- WriteText(text);\r
-\r
- // wxSleep() can't be called from non-GUI thread!\r
- wxThread::Sleep(10);\r
- }*/\r
-\r
- wxBitmap bitmap( 100, 100 );\r
+ wxBitmap bitmap(100, 100);\r
wxImage image = bitmap.ConvertToImage();\r
image.Destroy();\r
\r
WriteText(m_canvas->m_fname.GetFullPath());\r
\r
+ // set handler properties\r
+ wxJ2KHandler *j2kkkhandler = (wxJ2KHandler *) wxImage::FindHandler( wxBITMAP_TYPE_J2K);\r
+ j2kkkhandler->m_reducefactor = wxGetApp().m_reducefactor;\r
+ j2kkkhandler->m_qualitylayers = wxGetApp().m_qualitylayers;\r
+ j2kkkhandler->m_components = wxGetApp().m_components;\r
+#ifdef USE_JPWL\r
+ j2kkkhandler->m_enablejpwl = wxGetApp().m_enablejpwl;\r
+ j2kkkhandler->m_expcomps = wxGetApp().m_expcomps;\r
+ j2kkkhandler->m_maxtiles = wxGetApp().m_maxtiles;\r
+#endif // USE_JPWL\r
+\r
+ wxJP2Handler *jp222handler = (wxJP2Handler *) wxImage::FindHandler( wxBITMAP_TYPE_JP2);\r
+ jp222handler->m_reducefactor = wxGetApp().m_reducefactor;\r
+ jp222handler->m_qualitylayers = wxGetApp().m_qualitylayers;\r
+ jp222handler->m_components = wxGetApp().m_components;\r
+#ifdef USE_JPWL\r
+ jp222handler->m_enablejpwl = wxGetApp().m_enablejpwl;\r
+ jp222handler->m_expcomps = wxGetApp().m_expcomps;\r
+ jp222handler->m_maxtiles = wxGetApp().m_maxtiles;\r
+#endif // USE_JPWL\r
+\r
+ wxMJ2Handler *mj222handler = (wxMJ2Handler *) wxImage::FindHandler( wxBITMAP_TYPE_MJ2);\r
+ mj222handler->m_reducefactor = wxGetApp().m_reducefactor;\r
+ mj222handler->m_qualitylayers = wxGetApp().m_qualitylayers;\r
+ mj222handler->m_components = wxGetApp().m_components;\r
+#ifdef USE_JPWL\r
+ mj222handler->m_enablejpwl = wxGetApp().m_enablejpwl;\r
+ mj222handler->m_expcomps = wxGetApp().m_expcomps;\r
+ mj222handler->m_maxtiles = wxGetApp().m_maxtiles;\r
+#endif // USE_JPWL\r
+\r
+ // load the file\r
if (!image.LoadFile(m_canvas->m_fname.GetFullPath(), wxBITMAP_TYPE_ANY), 0) {\r
- wxLogError(wxT("Can't load image"));\r
+ WriteText(wxT("Can't load image"));\r
return NULL;\r
}\r
\r
- m_canvas->m_image = wxBitmap(image);\r
- m_canvas->Refresh();\r
- m_canvas->SetScrollbars(20, 20, (int)(0.5 + (double) image.GetWidth() / 20.0), (int)(0.5 + (double) image.GetHeight() / 20.0));\r
+ // assign 100% image\r
+ m_canvas->m_image100 = wxBitmap(image);\r
+\r
+ // find a fit-to-width zoom\r
+ int zooml, wzooml, hzooml;\r
+ wxSize clientsize = m_canvas->GetClientSize();\r
+ wzooml = (int) floor(100.0 * (double) clientsize.GetWidth() / (double) (2 * OPJ_CANVAS_BORDER + image.GetWidth()));\r
+ hzooml = (int) floor(100.0 * (double) clientsize.GetHeight() / (double) (2 * OPJ_CANVAS_BORDER + image.GetHeight()));\r
+ zooml = wxMin(100, wxMin(wzooml, hzooml));\r
+\r
+ // fit to width\r
+ m_canvas->m_childframe->m_frame->Rescale(zooml, m_canvas->m_childframe);\r
\r
- text.Printf(wxT("Deco thread 0x%lx finished."), GetId());\r
+ //m_canvas->m_image = m_canvas->m_image100;\r
+ //m_canvas->Refresh();\r
+ //m_canvas->SetScrollbars(20, 20, (int)(0.5 + (double) image.GetWidth() / 20.0), (int)(0.5 + (double) image.GetHeight() / 20.0));\r
+\r
+ //text.Printf(wxT("Deco thread 0x%lx finished."), GetId());\r
+ text.Printf(wxT("Deco thread %d finished"), m_canvas->m_childframe->m_winnumber);\r
WriteText(text);\r
- // wxLogMessage(text); -- test wxLog thread safeness\r
\r
return NULL;\r
}\r
wxArrayThread& threads = wxGetApp().m_parse_threads;\r
threads.Remove(this);\r
\r
- if ( threads.IsEmpty() )\r
- {\r
+ if (threads.IsEmpty()) {\r
// signal the main thread that there are no more threads left if it is\r
// waiting for us\r
- if ( wxGetApp().m_parse_waitingUntilAllDone )\r
- {\r
+ if (wxGetApp().m_parse_waitingUntilAllDone) {\r
wxGetApp().m_parse_waitingUntilAllDone = false;\r
-\r
wxGetApp().m_parse_semAllDone.Post();\r
}\r
}\r
\r
wxString text;\r
\r
- srand( GetId() );\r
+ srand(GetId());\r
int m_countnum = rand() % 9;\r
text.Printf(wxT("Parse thread 0x%lx started (priority = %u, time = %d)."),\r
- GetId(), GetPriority(), m_countnum);\r
+ GetId(), GetPriority(), m_countnum);\r
WriteText(text);\r
// wxLogMessage(text); -- test wxLog thread safeness\r
\r
\r
return NULL;\r
}\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+// ----------------------------------------------------------------------------\r
+// OPJDecoderDialog\r
+// ----------------------------------------------------------------------------\r
+\r
+IMPLEMENT_CLASS(OPJDecoderDialog, wxPropertySheetDialog)\r
+\r
+BEGIN_EVENT_TABLE(OPJDecoderDialog, wxPropertySheetDialog)\r
+#ifdef USE_JPWL\r
+ EVT_CHECKBOX(OPJDECO_ENABLEJPWL, OPJDecoderDialog::OnEnableJPWL)\r
+#endif // USE_JPWL\r
+END_EVENT_TABLE()\r
+\r
+OPJDecoderDialog::OPJDecoderDialog(wxWindow* win, int dialogType)\r
+{\r
+ SetExtraStyle(wxDIALOG_EX_CONTEXTHELP|wxWS_EX_VALIDATE_RECURSIVELY);\r
+\r
+ int tabImage1 = -1;\r
+ int tabImage2 = -1;\r
+\r
+ int resizeBorder = wxRESIZE_BORDER;\r
+\r
+ m_imageList = NULL;\r
+\r
+ Create(win, wxID_ANY, wxT("Decoder settings"), wxDefaultPosition, wxDefaultSize,\r
+ wxDEFAULT_DIALOG_STYLE| (int) wxPlatform::IfNot(wxOS_WINDOWS_CE, resizeBorder)\r
+ );\r
+\r
+ CreateButtons(wxOK | wxCANCEL | (int)wxPlatform::IfNot(wxOS_WINDOWS_CE, wxHELP));\r
+\r
+ wxBookCtrlBase* notebook = GetBookCtrl();\r
+ notebook->SetImageList(m_imageList);\r
+\r
+ wxPanel* mainSettings = CreateMainSettingsPage(notebook);\r
+#ifdef USE_JPWL\r
+ wxPanel* jpwlSettings = CreateJPWLSettingsPage(notebook);\r
+#endif // USE_JPWL\r
+\r
+ notebook->AddPage(mainSettings, wxT("Main"), false);\r
+#ifdef USE_JPWL\r
+ notebook->AddPage(jpwlSettings, wxT("JPWL"), false);\r
+#endif // USE_JPWL\r
+\r
+ LayoutDialog();\r
+}\r
+\r
+OPJDecoderDialog::~OPJDecoderDialog()\r
+{\r
+ delete m_imageList;\r
+}\r
+\r
+/*wxPanel* OPJDecoderDialog::CreateGeneralSettingsPage(wxWindow* parent)\r
+{\r
+ wxPanel* panel = new wxPanel(parent, wxID_ANY);\r
+\r
+ wxBoxSizer *topSizer = new wxBoxSizer( wxVERTICAL );\r
+ wxBoxSizer *item0 = new wxBoxSizer( wxVERTICAL );\r
+\r
+ //// LOAD LAST FILE\r
+\r
+ wxBoxSizer* itemSizer3 = new wxBoxSizer( wxHORIZONTAL );\r
+ wxCheckBox* checkBox3 = new wxCheckBox(panel, ID_LOAD_LAST_PROJECT, _("&Load last project on startup"), wxDefaultPosition, wxDefaultSize);\r
+ itemSizer3->Add(checkBox3, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5);\r
+ item0->Add(itemSizer3, 0, wxGROW|wxALL, 0);\r
+\r
+ //// AUTOSAVE\r
+\r
+ wxString autoSaveLabel = _("&Auto-save every");\r
+ wxString minsLabel = _("mins");\r
+\r
+ wxBoxSizer* itemSizer12 = new wxBoxSizer( wxHORIZONTAL );\r
+ wxCheckBox* checkBox12 = new wxCheckBox(panel, ID_AUTO_SAVE, autoSaveLabel, wxDefaultPosition, wxDefaultSize);\r
+\r
+ wxSpinCtrl* spinCtrl12 = new wxSpinCtrl(panel, ID_AUTO_SAVE_MINS, wxEmptyString,\r
+ wxDefaultPosition, wxSize(40, wxDefaultCoord), wxSP_ARROW_KEYS, 1, 60, 1);\r
+\r
+ itemSizer12->Add(checkBox12, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5);\r
+ itemSizer12->Add(spinCtrl12, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5);\r
+ itemSizer12->Add(new wxStaticText(panel, wxID_STATIC, minsLabel), 0, wxALL|wxALIGN_CENTER_VERTICAL, 5);\r
+ item0->Add(itemSizer12, 0, wxGROW|wxALL, 0);\r
+\r
+ //// TOOLTIPS\r
+\r
+ wxBoxSizer* itemSizer8 = new wxBoxSizer( wxHORIZONTAL );\r
+ wxCheckBox* checkBox6 = new wxCheckBox(panel, ID_SHOW_TOOLTIPS, _("Show &tooltips"), wxDefaultPosition, wxDefaultSize);\r
+ itemSizer8->Add(checkBox6, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5);\r
+ item0->Add(itemSizer8, 0, wxGROW|wxALL, 0);\r
+\r
+ topSizer->Add( item0, 1, wxGROW|wxALIGN_CENTRE|wxALL, 5 );\r
+\r
+ panel->SetSizer(topSizer);\r
+ topSizer->Fit(panel);\r
+\r
+ return panel;\r
+}*/\r
+\r
+/*wxPanel* OPJDecoderDialog::CreateAestheticSettingsPage(wxWindow* parent)\r
+{\r
+ wxPanel* panel = new wxPanel(parent, wxID_ANY);\r
+\r
+ wxBoxSizer *topSizer = new wxBoxSizer( wxVERTICAL );\r
+ wxBoxSizer *item0 = new wxBoxSizer( wxVERTICAL );\r
+\r
+ //// PROJECT OR GLOBAL\r
+ wxString globalOrProjectChoices[2];\r
+ globalOrProjectChoices[0] = _("&New projects");\r
+ globalOrProjectChoices[1] = _("&This project");\r
+\r
+ wxRadioBox* projectOrGlobal = new wxRadioBox(panel, ID_APPLY_SETTINGS_TO, _("&Apply settings to:"),\r
+ wxDefaultPosition, wxDefaultSize, 2, globalOrProjectChoices);\r
+ item0->Add(projectOrGlobal, 0, wxGROW|wxALL, 5);\r
+\r
+ projectOrGlobal->SetSelection(0);\r
+\r
+ //// BACKGROUND STYLE\r
+ wxArrayString backgroundStyleChoices;\r
+ backgroundStyleChoices.Add(wxT("Colour"));\r
+ backgroundStyleChoices.Add(wxT("Image"));\r
+ wxStaticBox* staticBox3 = new wxStaticBox(panel, wxID_ANY, _("Background style:"));\r
+\r
+ wxBoxSizer* styleSizer = new wxStaticBoxSizer( staticBox3, wxVERTICAL );\r
+ item0->Add(styleSizer, 0, wxGROW|wxALL, 5);\r
+\r
+ wxBoxSizer* itemSizer2 = new wxBoxSizer( wxHORIZONTAL );\r
+\r
+ wxChoice* choice2 = new wxChoice(panel, ID_BACKGROUND_STYLE, wxDefaultPosition, wxDefaultSize, backgroundStyleChoices);\r
+\r
+ itemSizer2->Add(new wxStaticText(panel, wxID_ANY, _("&Window:")), 0, wxALL|wxALIGN_CENTER_VERTICAL, 5);\r
+ itemSizer2->Add(5, 5, 1, wxALL, 0);\r
+ itemSizer2->Add(choice2, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5);\r
+\r
+ styleSizer->Add(itemSizer2, 0, wxGROW|wxALL, 5);\r
+\r
+#if wxUSE_SPINCTRL\r
+ //// FONT SIZE SELECTION\r
+\r
+ wxStaticBox* staticBox1 = new wxStaticBox(panel, wxID_ANY, _("Tile font size:"));\r
+ wxBoxSizer* itemSizer5 = new wxStaticBoxSizer( staticBox1, wxHORIZONTAL );\r
+\r
+ wxSpinCtrl* spinCtrl = new wxSpinCtrl(panel, ID_FONT_SIZE, wxEmptyString, wxDefaultPosition,\r
+ wxSize(80, wxDefaultCoord));\r
+ itemSizer5->Add(spinCtrl, 0, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);\r
+\r
+ item0->Add(itemSizer5, 0, wxGROW|wxLEFT|wxRIGHT, 5);\r
+#endif\r
+\r
+ topSizer->Add( item0, 1, wxGROW|wxALIGN_CENTRE|wxALL, 5 );\r
+ topSizer->AddSpacer(5);\r
+\r
+ panel->SetSizer(topSizer);\r
+ topSizer->Fit(panel);\r
+\r
+ return panel;\r
+}*/\r
+\r
+wxPanel* OPJDecoderDialog::CreateMainSettingsPage(wxWindow* parent)\r
+{\r
+ wxPanel* panel = new wxPanel(parent, wxID_ANY);\r
+\r
+ // top sizer\r
+ wxBoxSizer *topSizer = new wxBoxSizer(wxVERTICAL);\r
+\r
+ // add some space\r
+ //topSizer->AddSpacer(5);\r
+\r
+ // sub top sizer\r
+ wxBoxSizer *subtopSizer = new wxBoxSizer(wxVERTICAL);\r
+\r
+ // resolutions settings, column\r
+ wxStaticBox* resolutionBox = new wxStaticBox(panel, wxID_ANY, wxT("Resolutions"));\r
+ wxBoxSizer* resolutionSizer = new wxStaticBoxSizer(resolutionBox, wxVERTICAL);\r
+\r
+ // reduce factor sizer, row\r
+ wxBoxSizer* reduceSizer = new wxBoxSizer(wxHORIZONTAL);\r
+\r
+ // add some text\r
+ reduceSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Reduce factor:")),\r
+ 0, wxALL | wxALIGN_CENTER_VERTICAL, 5);\r
+\r
+ // add some horizontal space\r
+ reduceSizer->Add(5, 5, 1, wxALL, 0);\r
+\r
+ // add the value control\r
+ reduceSizer->Add(\r
+ m_reduceCtrl = new wxSpinCtrl(panel, OPJDECO_REDUCEFACTOR,\r
+ wxString::Format(wxT("%d"), wxGetApp().m_reducefactor),\r
+ wxDefaultPosition, wxSize(80, wxDefaultCoord),\r
+ wxSP_ARROW_KEYS,\r
+ 0, 10000, wxGetApp().m_reducefactor),\r
+ 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);\r
+\r
+ resolutionSizer->Add(reduceSizer, 0, wxGROW | wxALL, 5);\r
+\r
+ subtopSizer->Add(resolutionSizer, 0, wxGROW | wxALL, 5);\r
+\r
+ // quality layer settings, column\r
+ wxStaticBox* layerBox = new wxStaticBox(panel, wxID_ANY, wxT("Layers"));\r
+ wxBoxSizer* layerSizer = new wxStaticBoxSizer(layerBox, wxVERTICAL);\r
+\r
+ // quality layers sizer, row\r
+ wxBoxSizer* qualitySizer = new wxBoxSizer(wxHORIZONTAL);\r
+\r
+ // add some text\r
+ qualitySizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Quality layers:")),\r
+ 0, wxALL | wxALIGN_CENTER_VERTICAL, 5);\r
+\r
+ // add some horizontal space\r
+ qualitySizer->Add(5, 5, 1, wxALL, 0);\r
+\r
+ // add the value control\r
+ qualitySizer->Add(\r
+ m_layerCtrl = new wxSpinCtrl(panel, OPJDECO_QUALITYLAYERS,\r
+ wxString::Format(wxT("%d"), wxGetApp().m_qualitylayers),\r
+ wxDefaultPosition, wxSize(80, wxDefaultCoord),\r
+ wxSP_ARROW_KEYS,\r
+ 0, 100000, wxGetApp().m_qualitylayers),\r
+ 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);\r
+\r
+ layerSizer->Add(qualitySizer, 0, wxGROW | wxALL, 5);\r
+\r
+ subtopSizer->Add(layerSizer, 0, wxGROW | wxALL, 5);\r
+\r
+ // component settings, column\r
+ wxStaticBox* compoBox = new wxStaticBox(panel, wxID_ANY, wxT("Components"));\r
+ wxBoxSizer* compoSizer = new wxStaticBoxSizer(compoBox, wxVERTICAL);\r
+\r
+ // quality layers sizer, row\r
+ wxBoxSizer* numcompsSizer = new wxBoxSizer(wxHORIZONTAL);\r
+\r
+ // add some text\r
+ numcompsSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&No. of components:")),\r
+ 0, wxALL | wxALIGN_CENTER_VERTICAL, 5);\r
+\r
+ // add some horizontal space\r
+ numcompsSizer->Add(5, 5, 1, wxALL, 0);\r
+\r
+ // add the value control\r
+ numcompsSizer->Add(\r
+ m_numcompsCtrl = new wxSpinCtrl(panel, OPJDECO_NUMCOMPS,\r
+ wxString::Format(wxT("%d"), wxGetApp().m_components),\r
+ wxDefaultPosition, wxSize(80, wxDefaultCoord),\r
+ wxSP_ARROW_KEYS,\r
+ 0, 100000, wxGetApp().m_components),\r
+ 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);\r
+\r
+ compoSizer->Add(numcompsSizer, 0, wxGROW | wxALL, 5);\r
+\r
+ subtopSizer->Add(compoSizer, 0, wxGROW | wxALL, 5);\r
+\r
+ topSizer->Add(subtopSizer, 1, wxGROW | wxALIGN_CENTRE | wxALL, 5);\r
+\r
+ // assign top and fit it\r
+ panel->SetSizer(topSizer);\r
+ topSizer->Fit(panel);\r
+\r
+ return panel;\r
+}\r
+\r
+#ifdef USE_JPWL\r
+wxPanel* OPJDecoderDialog::CreateJPWLSettingsPage(wxWindow* parent)\r
+{\r
+ wxPanel* panel = new wxPanel(parent, wxID_ANY);\r
+\r
+ // top sizer\r
+ wxBoxSizer *topSizer = new wxBoxSizer(wxVERTICAL);\r
+\r
+ // add some space\r
+ //topSizer->AddSpacer(5);\r
+\r
+ // sub top sizer\r
+ wxBoxSizer *subtopSizer = new wxBoxSizer(wxVERTICAL);\r
+\r
+ // add JPWL enabling check box\r
+ subtopSizer->Add(\r
+ m_enablejpwlCheck = new wxCheckBox(panel, OPJDECO_ENABLEJPWL, wxT("Enable JPWL"), wxDefaultPosition, wxDefaultSize),\r
+ 0, wxGROW | wxALL, 5);\r
+ m_enablejpwlCheck->SetValue(wxGetApp().m_enablejpwl);\r
+\r
+ // component settings, column\r
+ wxStaticBox* compoBox = new wxStaticBox(panel, wxID_ANY, wxT("Components"));\r
+ wxBoxSizer* compoSizer = new wxStaticBoxSizer(compoBox, wxVERTICAL);\r
+\r
+ // expected components sizer, row\r
+ wxBoxSizer* expcompsSizer = new wxBoxSizer(wxHORIZONTAL);\r
+\r
+ // add some text\r
+ expcompsSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Expected comps.:")),\r
+ 0, wxALL | wxALIGN_CENTER_VERTICAL, 5);\r
+\r
+ // add some horizontal space\r
+ expcompsSizer->Add(5, 5, 1, wxALL, 0);\r
+\r
+ // add the value control\r
+ expcompsSizer->Add(\r
+ m_expcompsCtrl = new wxSpinCtrl(panel, OPJDECO_EXPCOMPS,\r
+ wxString::Format(wxT("%d"), wxGetApp().m_expcomps),\r
+ wxDefaultPosition, wxSize(80, wxDefaultCoord),\r
+ wxSP_ARROW_KEYS,\r
+ 1, 100000, wxGetApp().m_expcomps),\r
+ 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);\r
+ m_expcompsCtrl->Enable(wxGetApp().m_enablejpwl);\r
+\r
+ compoSizer->Add(expcompsSizer, 0, wxGROW | wxALL, 5);\r
+\r
+ subtopSizer->Add(compoSizer, 0, wxGROW | wxALL, 5);\r
+\r
+ // tiles settings, column\r
+ wxStaticBox* tileBox = new wxStaticBox(panel, wxID_ANY, wxT("Tiles"));\r
+ wxBoxSizer* tileSizer = new wxStaticBoxSizer(tileBox, wxVERTICAL);\r
+\r
+ // maximum tiles sizer, row\r
+ wxBoxSizer* maxtileSizer = new wxBoxSizer(wxHORIZONTAL);\r
+\r
+ // add some text\r
+ maxtileSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Max. no. of tiles:")),\r
+ 0, wxALL | wxALIGN_CENTER_VERTICAL, 5);\r
+\r
+ // add some horizontal space\r
+ maxtileSizer->Add(5, 5, 1, wxALL, 0);\r
+\r
+ // add the value control\r
+ maxtileSizer->Add(\r
+ m_maxtilesCtrl = new wxSpinCtrl(panel, OPJDECO_MAXTILES,\r
+ wxString::Format(wxT("%d"), wxGetApp().m_maxtiles),\r
+ wxDefaultPosition, wxSize(80, wxDefaultCoord),\r
+ wxSP_ARROW_KEYS,\r
+ 1, 100000, wxGetApp().m_maxtiles),\r
+ 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);\r
+ m_maxtilesCtrl->Enable(wxGetApp().m_enablejpwl);\r
+\r
+ tileSizer->Add(maxtileSizer, 0, wxGROW | wxALL, 5);\r
+\r
+ subtopSizer->Add(tileSizer, 0, wxGROW | wxALL, 5);\r
+\r
+ topSizer->Add(subtopSizer, 1, wxGROW | wxALIGN_CENTRE | wxALL, 5);\r
+\r
+ // assign top and fit it\r
+ panel->SetSizer(topSizer);\r
+ topSizer->Fit(panel);\r
+\r
+ return panel;\r
+}\r
+\r
+void OPJDecoderDialog::OnEnableJPWL(wxCommandEvent& event)\r
+{\r
+ if (event.IsChecked()) {\r
+ wxLogMessage(wxT("JPWL enabled"));\r
+ m_expcompsCtrl->Enable(true);\r
+ m_maxtilesCtrl->Enable(true);\r
+ } else {\r
+ wxLogMessage(wxT("JPWL disabled"));\r
+ m_expcompsCtrl->Enable(false);\r
+ m_maxtilesCtrl->Enable(false);\r
+ }\r
+\r
+}\r
+\r
+bool OPJDnDFile::OnDropFiles(wxCoord, wxCoord, const wxArrayString& filenames)\r
+{\r
+ /*size_t nFiles = filenames.GetCount();\r
+ wxString str;\r
+ str.Printf( _T("%d files dropped\n"), (int)nFiles);\r
+ for ( size_t n = 0; n < nFiles; n++ ) {\r
+ str << filenames[n] << wxT("\n");\r
+ }\r
+ wxLogMessage(str);*/\r
+ m_pOwner->OpenFiles(filenames, filenames);\r
+\r
+ return true;\r
+}\r
+\r
+#endif // USE_JPWL\r
+\r