]> granicus.if.org Git - openjpeg/commitdiff
OPJViewer should now work under Linux, at least with not big j2k files. Tested under...
authorGiuseppe Baruffa <gbaruffa@users.noreply.github.com>
Fri, 30 Mar 2007 09:27:08 +0000 (09:27 +0000)
committerGiuseppe Baruffa <gbaruffa@users.noreply.github.com>
Fri, 30 Mar 2007 09:27:08 +0000 (09:27 +0000)
ChangeLog
OPJViewer/Makefile [new file with mode: 0644]
OPJViewer/source/OPJViewer.cpp
OPJViewer/source/OPJViewer.h
OPJViewer/source/imagj2k.cpp
OPJViewer/source/imagjp2.cpp
OPJViewer/source/wxj2kparser.cpp
OPJViewer/source/wxjp2parser.cpp

index ae8d66229d8c22bbea55b46a903fdfc365578484..40f5798f5e9187f45011caf40118cef9fa433563 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -5,6 +5,9 @@ What's New for OpenJPEG
 ! : changed
 + : added
 
+March 30, 2007
+* [GB] OPJViewer should now work under Linux, at least with not big j2k files. Tested under Suse 10.1 64 bit.
+
 March 29, 2007
 * [Parvatha] Enable accepting file names with `-´ symbol .Modification getopt.c
 * [Parvatha] Rsiz profile name generation to be STD_RSIZ for profiles which are not DCI compliant.Modification in image_to_j2k.c
diff --git a/OPJViewer/Makefile b/OPJViewer/Makefile
new file mode 100644 (file)
index 0000000..1224f42
--- /dev/null
@@ -0,0 +1,41 @@
+# Makefile for the main JPWL OpenJPEG codecs: JPWL_ j2k_to_image and JPWL_image_to_j2k
+
+# General configuration variables:
+CC = $(shell wx-config-2.8 --cxx)
+AR = ar
+
+CFLAGS = -DUSE_JPWL -DwxUSE_LIBOPENJPEG -DwxUSE_GUI=1 -DOPJ_STATIC -DOPJ_HTMLABOUT $(shell wx-config-2.8 --cxxflags) # -g -p -pg -DUSE_JPWL
+
+OPJV_SRCS = source/imagj2k.cpp source/imagmj2.cpp source/wxj2kparser.cpp source/imagjp2.cpp source/OPJViewer.cpp source/wxjp2parser.cpp
+
+MODULES = $(OPJV_SRCS:.cpp=.o)
+
+all: opjviewer lib
+
+.cpp.o:
+       $(CC) $(CFLAGS) -c $< -o $@
+
+lib:
+       cd ../jpwl; make
+
+opjviewer: $(OPJV_SRCS) lib
+       $(CC) $(CFLAGS) -I .. $(OPJV_SRCS) -o OPJViewer -L ../jpwl -lopenjpeg_JPWL -lm -lstdc++ -ltiff $(shell wx-config-2.8 --libs)  
+
+
+clean:
+       rm -f OPJViewer *.o *.a
+       cd ../libopenjpeg; rm -f *.o
+
+
+
+
+#.cpp.o :
+#      $(CXX) -g -c `wx-config-2.8 --cxxflags` -I ../.. -D wxUSE_LIBOPENJPEG -D wxHACK_BOOLEAN -o $@ $<
+
+#all:    $(PROGRAM)
+
+#$(PROGRAM):     $(OBJECTS)
+#      $(CXX) -o $(PROGRAM) $(OBJECTS) -lopenjpeg -L ../.. `wx-config-2.8 --libs`
+
+#clean:
+#      rm -f *.o $(PROGRAM)
index d796fbb273f282b058f06d8f6a6f1d4213a4f49f..1dcd026eed6e178e459426677693c946cec8c982 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
- * Copyright (c) 2007, Digital Signal Processing Laboratory, Università degli studi di Perugia (UPG), Italy\r
+ * Copyright (c) 2007, Digital Signal Processing Laboratory, Università degli studi di Perugia (UPG), Italy\r
  * All rights reserved.\r
  *\r
  * Redistribution and use in source and binary forms, with or without\r
@@ -351,7 +351,7 @@ OPJFrame::OPJFrame(wxWindow *parent, const wxWindowID id, const wxString& title,
        // create the text control of the logger\r
        m_textCtrl = new wxTextCtrl(m_bookCtrlbottom, wxID_ANY, wxT(""),\r
                                                                wxDefaultPosition, wxDefaultSize,\r
-                                                               wxTE_MULTILINE | wxSUNKEN_BORDER | wxTE_READONLY \r
+                                                               wxTE_MULTILINE | wxSUNKEN_BORDER | wxTE_READONLY\r
                                                                );\r
        m_textCtrl->SetValue(_T("Logging window\n"));\r
 \r
@@ -361,7 +361,7 @@ OPJFrame::OPJFrame(wxWindow *parent, const wxWindowID id, const wxString& title,
        // 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 | wxTE_RICH \r
+                                                               wxTE_MULTILINE | wxSUNKEN_BORDER | wxTE_READONLY | wxTE_RICH\r
                                                                );\r
        wxFont *browsefont = new wxFont(wxNORMAL_FONT->GetPointSize(),\r
                wxFONTFAMILY_TELETYPE, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL);\r
@@ -430,7 +430,8 @@ void OPJFrame::OnNotebook(wxNotebookEvent& event)
 \r
        m_bookCtrl->GetPageText(sel).ToLong(&childnum);\r
 \r
-       m_childhash[childnum]->Activate();\r
+       if (m_childhash[childnum])\r
+               m_childhash[childnum]->Activate();\r
 \r
        //wxLogMessage(wxT("Selection changed (now %d --> %d)"), childnum, m_childhash[childnum]->m_winnumber);\r
 \r
@@ -458,9 +459,9 @@ void OPJFrame::OnSetsDeco(wxCommandEvent& event)
                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
+#endif // USE_JPWL\r
+\r
+       };\r
 }\r
 \r
 void OPJFrame::OnQuit(wxCommandEvent& WXUNUSED(event))\r
@@ -744,6 +745,8 @@ OPJCanvas::OPJCanvas(wxFileName fname, wxWindow *parent, const wxPoint& pos, con
 \r
        m_fname = fname;\r
        m_childframe = (OPJChildFrame *) parent;\r
+       // 100% zoom\r
+       m_zooml = 100;\r
 \r
     OPJDecoThread *dthread = CreateDecoThread();\r
 \r
@@ -753,7 +756,8 @@ OPJCanvas::OPJCanvas(wxFileName fname, wxWindow *parent, const wxPoint& pos, con
                wxLogMessage(wxT("New deco thread started."));\r
 \r
        // 100% zoom\r
-       m_zooml = 100;\r
+       //m_zooml = 100;\r
+\r
 }\r
 \r
 OPJDecoThread *OPJCanvas::CreateDecoThread(void)\r
@@ -1113,7 +1117,7 @@ void OPJParseThread::LoadFile(wxFileName fname)
        else\r
                //m_tree->SetItemText(rootid, wxString::Format(wxT("%s (%d B)"), fname.GetFullName(), m_file.Length()));\r
                m_tree->SetItemText(rootid, fname.GetFullName());\r
-       \r
+\r
        // close the file\r
        m_file.Close();\r
 \r
@@ -1347,7 +1351,7 @@ void OPJMarkerTree::OnSelChanged(wxTreeEvent& event)
        fp->Seek(data->m_start, wxFromStart);\r
 \r
        // read a bunch\r
-       int max_read = wxMin(WXSIZEOF(buffer), data->m_length - data->m_start + 1);\r
+       int max_read = wxMin(wxFileOffset(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
@@ -1795,12 +1799,16 @@ void OPJDecoThread::WriteText(const wxString& text)
     // before doing any GUI calls we must ensure that this thread is the only\r
     // one doing it!\r
 \r
+#ifndef __WXGTK__ \r
     wxMutexGuiEnter();\r
+#endif // __WXGTK__\r
 \r
     msg << text;\r
     m_canvas->WriteText(msg);\r
 \r
+#ifndef __WXGTK__ \r
     wxMutexGuiLeave();\r
+#endif // __WXGTK__\r
 }\r
 \r
 void OPJDecoThread::OnExit()\r
@@ -1827,18 +1835,23 @@ void *OPJDecoThread::Entry()
     wxString text;\r
 \r
        srand(GetId());\r
-       int m_countnum = rand() % 9;\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 %d started"), m_canvas->m_childframe->m_winnumber);\r
+\r
+\r
+\r
+\r
     WriteText(text);\r
 \r
     wxBitmap bitmap(100, 100);\r
-    wxImage image = bitmap.ConvertToImage();\r
+    wxImage image(100, 100, true); //= bitmap.ConvertToImage();\r
     image.Destroy();\r
 \r
        WriteText(m_canvas->m_fname.GetFullPath());\r
 \r
+\r
        // set handler properties\r
        wxJ2KHandler *j2kkkhandler = (wxJ2KHandler *) wxImage::FindHandler( wxBITMAP_TYPE_J2K);\r
        j2kkkhandler->m_reducefactor = wxGetApp().m_reducefactor;\r
@@ -1888,7 +1901,9 @@ void *OPJDecoThread::Entry()
        zooml = wxMin(100, wxMin(wzooml, hzooml));\r
 \r
        // fit to width\r
+#ifndef __WXGTK__\r
        m_canvas->m_childframe->m_frame->Rescale(zooml, m_canvas->m_childframe);\r
+#endif // __WXGTK__\r
 \r
        //m_canvas->m_image = m_canvas->m_image100;\r
        //m_canvas->Refresh();\r
@@ -1897,8 +1912,8 @@ void *OPJDecoThread::Entry()
     //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
-\r
     return NULL;\r
+\r
 }\r
 \r
 /////////////////////////////////////////////////////////////////////\r
@@ -1920,12 +1935,16 @@ void OPJParseThread::WriteText(const wxString& text)
     // before doing any GUI calls we must ensure that this thread is the only\r
     // one doing it!\r
 \r
+#ifndef __WXGTK__ \r
     wxMutexGuiEnter();\r
+#endif // __WXGTK\r
 \r
     msg << text;\r
     m_tree->WriteText(msg);\r
 \r
+#ifndef __WXGTK__ \r
     wxMutexGuiLeave();\r
+#endif // __WXGTK\r
 }\r
 \r
 void OPJParseThread::OnExit()\r
@@ -1948,6 +1967,8 @@ void OPJParseThread::OnExit()
 void *OPJParseThread::Entry()\r
 {\r
 \r
+       printf("Entering\n\n");\r
+\r
     wxString text;\r
 \r
        srand(GetId());\r
@@ -1955,7 +1976,12 @@ void *OPJParseThread::Entry()
     text.Printf(wxT("Parse thread 0x%lx started (priority = %u, time = %d)."),\r
             GetId(), GetPriority(), m_countnum);\r
     WriteText(text);\r
-    // wxLogMessage(text); -- test wxLog thread safeness\r
+    LoadFile(m_tree->m_fname);\r
+    text.Printf(wxT("Parse thread 0x%lx finished."), GetId());\r
+    WriteText(text);\r
+\r
+\r
+    //wxLogMessage(wxT("Entering\n")); //test wxLog thread safeness\r
 \r
        //wxBusyCursor wait;\r
        //wxBusyInfo wait(wxT("Decoding image ..."));\r
@@ -1974,13 +2000,10 @@ void *OPJParseThread::Entry()
         wxThread::Sleep(10);\r
     }*/\r
 \r
-\r
-    LoadFile(m_tree->m_fname);\r
-\r
-    text.Printf(wxT("Parse thread 0x%lx finished."), GetId());\r
-    WriteText(text);\r
     // wxLogMessage(text); -- test wxLog thread safeness\r
 \r
+       printf("Exiting\n\n");\r
+\r
     return NULL;\r
 }\r
 \r
index 2dde2f73a3f136a0a4eb8ebd1caf7c236abc83e0..deb3e8f08c2bb462af337d02d0f6c0cbf3e52fe4 100644 (file)
@@ -209,7 +209,15 @@ class OPJCanvas: public wxScrolledWindow
 \r
                virtual void OnDraw(wxDC& dc);\r
                void OnEvent(wxMouseEvent& event);\r
-               void WriteText(const wxString& text) { wxMutexGuiEnter(); wxLogMessage(text); wxMutexGuiLeave();}\r
+               void WriteText(const wxString& text) {\r
+#ifndef __WXGTK__ \r
+                       wxMutexGuiEnter();\r
+#endif //__WXGTK__\r
+                       wxLogMessage(text);\r
+#ifndef __WXGTK__ \r
+                       wxMutexGuiLeave();\r
+#endif //__WXGTK__\r
+               }\r
                OPJDecoThread *CreateDecoThread(void);\r
                OPJChildFrame *m_childframe;\r
 \r
index 4a7ed492d515fa86fbd06c3944cd31bb1998a8e0..65f9a42bbb8f2d49aab609217f14e9dc075af456 100644 (file)
@@ -85,27 +85,27 @@ void j2k_error_callback(const char *msg, void *client_data) {
        int message_len = strlen(msg) - 1;\r
        if (msg[message_len] != '\n')\r
                message_len = MAX_MESSAGE_LEN;\r
-    wxMutexGuiEnter();\r
+    /*wxMutexGuiEnter();\r
        wxLogMessage(wxT("[ERROR] %.*s"), message_len, msg);\r
-    wxMutexGuiLeave();\r
+    wxMutexGuiLeave();*/\r
 }\r
 /* sample warning callback expecting a FILE* client object */\r
 void j2k_warning_callback(const char *msg, void *client_data) {\r
        int message_len = strlen(msg) - 1;\r
        if (msg[message_len] != '\n')\r
                message_len = MAX_MESSAGE_LEN;\r
-    wxMutexGuiEnter();\r
+    /*wxMutexGuiEnter();\r
        wxLogMessage(wxT("[WARNING] %.*s"), message_len, msg);\r
-    wxMutexGuiLeave();\r
+    wxMutexGuiLeave();*/\r
 }\r
 /* sample debug callback expecting no client object */\r
 void j2k_info_callback(const char *msg, void *client_data) {\r
        int message_len = strlen(msg) - 1;\r
        if (msg[message_len] != '\n')\r
                message_len = MAX_MESSAGE_LEN;\r
-    wxMutexGuiEnter();\r
+    /*wxMutexGuiEnter();\r
        wxLogMessage(wxT("[INFO] %.*s"), message_len, msg);\r
-    wxMutexGuiLeave();\r
+    wxMutexGuiLeave();*/\r
 }\r
 \r
 // load the j2k codestream\r
@@ -126,6 +126,7 @@ bool wxJ2KHandler::LoadFile(wxImage *image, wxInputStream& stream, bool verbose,
        opj_dinfo_t* dinfo = NULL;      \r
        opj_cio_t *cio = NULL;\r
 \r
+\r
        /* configure the event callbacks (not required) */\r
        memset(&event_mgr, 0, sizeof(opj_event_mgr_t));\r
        event_mgr.error_handler = j2k_error_callback;\r
index b1a23bde613ca90f3b6b54408c2131bbb03a6494..849c6e453580dc86ba78a3361890e380aec38730 100644 (file)
@@ -112,6 +112,7 @@ void jp2_info_callback(const char *msg, void *client_data) {
     wxMutexGuiLeave();\r
 }\r
 \r
+\r
 // load the jp2 file format\r
 bool wxJP2Handler::LoadFile(wxImage *image, wxInputStream& stream, bool verbose, int index)\r
 {\r
index 8401d251a2501ef1417c307ca4bfde04e20a8d60..02d8b4a5f64de0d179bc83412fbec178eded3fb9 100644 (file)
@@ -251,7 +251,9 @@ void OPJParseThread::ParseJ2KFile(wxFile *m_file, wxFileOffset offset, wxFileOff
 \r
                // append the marker\r
                wxTreeItemId currid = m_tree->AppendItem(parentid,\r
-                       wxString::Format(wxT("%03d: %s (0x%04X)"), nmarks, marker_name[m], marker_val[m]),\r
+                       wxString::Format(wxT("%03d: "), nmarks) +\r
+                       wxString::FromAscii(marker_name[m]) + \r
+                       wxString::Format(wxT(" (0x%04X)"), marker_val[m]),\r
                        image, imageSel,\r
                        new OPJMarkerData(wxT("MARK"), m_tree->m_fname.GetFullPath(), offset, offset + currlen + 1)\r
                        );\r
@@ -262,7 +264,7 @@ void OPJParseThread::ParseJ2KFile(wxFile *m_file, wxFileOffset offset, wxFileOff
 \r
                // marker name\r
                wxTreeItemId subcurrid1 = m_tree->AppendItem(currid,\r
-                       wxT("*** ") + wxString::Format(wxT("%s"), marker_descr[m]) + wxT(" ***"),\r
+                       wxT("*** ") + wxString::FromAscii(marker_descr[m]) + wxT(" ***"),\r
                        image, imageSel,\r
                        new OPJMarkerData(wxT("INFO"))\r
                        );\r
@@ -555,7 +557,7 @@ void OPJParseThread::ParseJ2KFile(wxFile *m_file, wxFileOffset offset, wxFileOff
                case SIZ_VAL:\r
                        {\r
                        int c;\r
-\r
+                       \r
                        if (m_file->Read(twobytes, 2) != 2)\r
                                break;\r
                        unsigned short int rsiz = STREAM_TO_UINT16(twobytes, 0);\r
@@ -1179,7 +1181,8 @@ void OPJParseThread::ParseJ2KFile(wxFile *m_file, wxFileOffset offset, wxFileOff
                case COM_VAL:\r
                        {\r
                        #define showlen 25\r
-                       unsigned char comment[showlen];\r
+                       char comment[showlen];\r
+                       wxString comments;\r
 \r
                        if (m_file->Read(twobytes, 2) != 2)\r
                                break;\r
@@ -1202,9 +1205,11 @@ void OPJParseThread::ParseJ2KFile(wxFile *m_file, wxFileOffset offset, wxFileOff
 \r
                        if (m_file->Read(comment, showlen) != showlen)\r
                                break;\r
+                       comments = wxString::FromAscii(comment).Truncate(wxMin(showlen, currlen - 4));\r
+                       if ((currlen - 4) > showlen)\r
+                               comments << wxT("...");\r
                        subcurrid3 = m_tree->AppendItem(currid,\r
-                               wxString::Format(wxT("%.*s%s"), wxMin(showlen, currlen - 4), comment,\r
-                               (((currlen - 4) > showlen) ? "..." : "")),\r
+                               comments,\r
                                image, imageSel,\r
                                new OPJMarkerData(wxT("INFO"))\r
                                );\r
index 9291f9aa6e789fd2790a6ff09013cc621e78c74c..4832870f1da62acffcf7c579b81e43b8d5907066 100644 (file)
@@ -398,7 +398,9 @@ int OPJParseThread::box_handler_function(int boxtype, wxFile *fileid, wxFileOffs
 \r
                        // add info\r
                        wxTreeItemId currid = m_tree->AppendItem(parentid,\r
-                               wxString::Format(wxT("Brand/Minor version: %.4s/%d"), BR, MinV),\r
+                               wxT("Brand/Minor version: ") +\r
+                               wxString::FromAscii(BR).Truncate(4) +\r
+                               wxString::Format(wxT("/%d"), MinV),\r
                                m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,\r
                                new OPJMarkerData(wxT("INFO"))\r
                                );\r
@@ -412,7 +414,7 @@ int OPJParseThread::box_handler_function(int boxtype, wxFile *fileid, wxFileOffs
                        for (i = 0; i < numCL; i++) {\r
                                fileid->Read(CL, sizeof(char) * 4);\r
                                m_tree->AppendItem(currid,\r
-                                       wxString::Format(wxT("%.4s"), CL),\r
+                                       wxString::FromAscii(CL).Truncate(4),\r
                                        m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,\r
                                        new OPJMarkerData(wxT("INFO"))\r
                                        );\r
@@ -511,7 +513,9 @@ int OPJParseThread::box_handler_function(int boxtype, wxFile *fileid, wxFileOffs
 \r
                        // add info\r
                        wxTreeItemId currid = m_tree->AppendItem(parentid,\r
-                               wxString::Format(wxT("Specification method: %d (%s)"), METH, methdescr),\r
+                               wxString::Format(wxT("Specification method: %d ("), METH) +\r
+                               wxString::FromAscii(methdescr) +\r
+                               wxT(")"),\r
                                m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,\r
                                new OPJMarkerData(wxT("INFO"))\r
                                );\r
@@ -530,7 +534,9 @@ int OPJParseThread::box_handler_function(int boxtype, wxFile *fileid, wxFileOffs
 \r
                        if (METH != 2)\r
                                currid = m_tree->AppendItem(parentid,\r
-                                       wxString::Format(wxT("Enumerated colourspace: %d (%s)"), EnumCS, enumcsdescr),\r
+                                       wxString::Format(wxT("Enumerated colourspace: %d ("), EnumCS) +\r
+                                       wxString::FromAscii(enumcsdescr) +\r
+                                       wxT(")"),\r
                                        m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,\r
                                        new OPJMarkerData(wxT("INFO"))\r
                                        );\r
@@ -758,7 +764,9 @@ int OPJParseThread::box_handler_function(int boxtype, wxFile *fileid, wxFileOffs
                        opcolor[2] = BYTE_SWAP2(opcolor[2]);\r
 \r
                        wxTreeItemId currid = m_tree->AppendItem(parentid,\r
-                               wxString::Format(wxT("Composition mode: %d (%s)"), graphicsmode, graphicsdescr),\r
+                               wxString::Format(wxT("Composition mode: %d (")) + \r
+                               wxString::FromAscii(graphicsdescr) +\r
+                               wxT(")"),\r
                                m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,\r
                                new OPJMarkerData(wxT("INFO"), m_tree->m_fname.GetFullPath(), filepoint, filelimit)\r
                                );\r
@@ -922,7 +930,9 @@ int OPJParseThread::jpeg2000parse(wxFile *fileid, wxFileOffset filepoint, wxFile
                image = m_tree->TreeCtrlIcon_Folder;\r
                imageSel = image + 1;\r
                wxTreeItemId currid = m_tree->AppendItem(parentid,\r
-                       wxString::Format(wxT("%03d: %s (0x%04X)"), box_num, TBox,\r
+                       wxString::Format(wxT("%03d: "), box_num) +\r
+                       wxString::FromAscii(TBox) +\r
+                       wxString::Format(wxT(" (0x%04X)"),\r
                                ((unsigned long int) TBox[3]) + ((unsigned long int) TBox[2] << 8) +\r
                                ((unsigned long int) TBox[1] << 16) + ((unsigned long int) TBox[0] << 24)\r
                        ),\r
@@ -936,7 +946,7 @@ int OPJParseThread::jpeg2000parse(wxFile *fileid, wxFileOffset filepoint, wxFile
 \r
                // box name\r
                wxTreeItemId subcurrid1 = m_tree->AppendItem(currid,\r
-                       wxT("*** ") + wxString::Format(wxT("%s"), j22box[box_type].name) + wxT(" ***"),\r
+                       wxT("*** ") + wxString::FromAscii(j22box[box_type].name) + wxT(" ***"),\r
                        image, imageSel,\r
                        new OPJMarkerData(wxT("INFO"))\r
                        );\r