7757ec73b81eba7792634d8a77ce69de8bfb2348
[openjpeg.git] / OPJViewer / source / OPJViewer.h
1 /*\r
2  * Copyright (c) 2007, Digital Signal Processing Laboratory, Universit� degli studi di Perugia (UPG), Italy\r
3  * All rights reserved.\r
4  *\r
5  * Redistribution and use in source and binary forms, with or without\r
6  * modification, are permitted provided that the following conditions\r
7  * are met:\r
8  * 1. Redistributions of source code must retain the above copyright\r
9  *    notice, this list of conditions and the following disclaimer.\r
10  * 2. Redistributions in binary form must reproduce the above copyright\r
11  *    notice, this list of conditions and the following disclaimer in the\r
12  *    documentation and/or other materials provided with the distribution.\r
13  *\r
14  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'\r
15  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
16  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
17  * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\r
18  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
19  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
20  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
21  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
22  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
23  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
24  * POSSIBILITY OF SUCH DAMAGE.\r
25  */\r
26 /////////////////////////////////////////////////////////////////////////////\r
27 // Name:        sashtest.h\r
28 // Purpose:     Layout window/sash sample\r
29 // Author:      Julian Smart\r
30 // Modified by:\r
31 // Created:     04/01/98\r
32 // RCS-ID:      $Id: sashtest.h,v 1.5 2005/06/02 12:04:24 JS Exp $\r
33 // Copyright:   (c) Julian Smart\r
34 // Licence:     wxWindows license\r
35 /////////////////////////////////////////////////////////////////////////////\r
36 /////////////////////////////////////////////////////////////////////////////\r
37 // Name:        treectrl.h\r
38 // Purpose:     wxTreeCtrl sample\r
39 // Author:      Julian Smart\r
40 // Modified by:\r
41 // Created:     04/01/98\r
42 // RCS-ID:      $Id: treetest.h,v 1.50 2006/11/04 11:26:51 VZ Exp $\r
43 // Copyright:   (c) Julian Smart\r
44 // Licence:     wxWindows license\r
45 /////////////////////////////////////////////////////////////////////////////\r
46 /////////////////////////////////////////////////////////////////////////////\r
47 // Name:        dialogs.h\r
48 // Purpose:     Common dialogs demo\r
49 // Author:      Julian Smart\r
50 // Modified by: ABX (2004) - adjustementd for conditional building\r
51 // Created:     04/01/98\r
52 // RCS-ID:      $Id: dialogs.h,v 1.50 2006/10/08 14:12:59 VZ Exp $\r
53 // Copyright:   (c) Julian Smart\r
54 // Licence:     wxWindows license\r
55 /////////////////////////////////////////////////////////////////////////////\r
56 \r
57 #ifndef __OPJ_VIEWER_H__\r
58 #define __OPJ_VIEWER_H__\r
59 \r
60 // For compilers that support precompilation, includes "wx/wx.h".\r
61 #include "wx/wxprec.h"\r
62 \r
63 #ifdef __BORLANDC__\r
64 #pragma hdrstop\r
65 #endif\r
66 \r
67 #ifndef WX_PRECOMP\r
68 #include "wx/wx.h"\r
69 #include "wx/mdi.h"\r
70 #endif\r
71 \r
72 #include "wx/toolbar.h"\r
73 #include "wx/laywin.h"\r
74 #include "wx/treectrl.h"\r
75 \r
76 #include "icon1.xpm"\r
77 #include "icon2.xpm"\r
78 #include "icon3.xpm"\r
79 #include "icon4.xpm"\r
80 #include "icon5.xpm"\r
81 \r
82 #include "wx/filedlg.h"\r
83 #include "wx/toolbar.h"\r
84 #include <wx/filename.h>\r
85 #include <wx/busyinfo.h>\r
86 #include <wx/cmdline.h>\r
87 #include <wx/file.h>\r
88 #include "wx/notebook.h"\r
89 #include <wx/numdlg.h>\r
90 \r
91 #include "wx/propdlg.h"\r
92 #include "wx/spinctrl.h"\r
93 \r
94 #include <wx/dnd.h>\r
95 #include "wx/wxhtml.h"\r
96 #include "wx/statline.h"\r
97 #include <wx/fs_mem.h>\r
98 \r
99 #include <wx/imaglist.h>\r
100 \r
101 #include "libopenjpeg/openjpeg.h"\r
102 \r
103 #include "imagj2k.h"\r
104 #include "imagjp2.h"\r
105 #include "imagmj2.h"\r
106 \r
107 #ifdef __WXMSW__\r
108 typedef unsigned __int64 int8byte;\r
109 #endif // __WXMSW__\r
110 \r
111 #ifdef __WXGTK__\r
112 typedef unsigned long long int8byte;\r
113 #endif // __WXGTK__\r
114 \r
115 #define USE_GENERIC_TREECTRL 0\r
116 #define USE_PENCIL_ON_CANVAS 0\r
117 \r
118 #if USE_GENERIC_TREECTRL\r
119 #include "wx/generic/treectlg.h"\r
120 #ifndef wxTreeCtrl\r
121 #define wxTreeCtrl wxGenericTreeCtrl\r
122 #define sm_classwxTreeCtrl sm_classwxGenericTreeCtrl\r
123 #endif\r
124 #endif\r
125 \r
126 #define OPJ_APPLICATION             wxT("OPJViewer")\r
127 #define OPJ_APPLICATION_NAME            wxT("OpenJPEG Viewer")\r
128 #define OPJ_APPLICATION_VERSION         wxT("0.3 alpha")\r
129 #define OPJ_APPLICATION_TITLEBAR        OPJ_APPLICATION_NAME wxT(" ") OPJ_APPLICATION_VERSION\r
130 #define OPJ_APPLICATION_COPYRIGHT       wxT("(C) 2007, Giuseppe Baruffa")\r
131 \r
132 #ifdef __WXMSW__\r
133 #define OPJ_APPLICATION_PLATFORM    wxT("Windows")\r
134 #endif\r
135 \r
136 #ifdef __WXGTK__\r
137 #define OPJ_APPLICATION_PLATFORM    wxT("Linux")\r
138 #endif\r
139 \r
140 #define OPJ_CANVAS_BORDER 10\r
141 #define OPJ_CANVAS_COLOUR *wxWHITE\r
142 \r
143 class OPJDecoThread;\r
144 class OPJParseThread;\r
145 WX_DEFINE_ARRAY_PTR(wxThread *, wxArrayThread);\r
146 class OPJChildFrame;\r
147 \r
148 //////////////////////////////////\r
149 // this is our main application //\r
150 //////////////////////////////////\r
151 class OPJViewerApp: public wxApp\r
152 {\r
153         // public methods and variables\r
154         public:\r
155 \r
156                 // class constructor\r
157                 OPJViewerApp() { m_showImages = true; m_showButtons = false; }\r
158 \r
159                 // other methods\r
160                 bool OnInit(void);\r
161                 void SetShowImages(bool show) { m_showImages = show; }\r
162                 bool ShowImages() const { return m_showImages; }\r
163                 void ShowCmdLine(const wxCmdLineParser& parser);\r
164 \r
165                 // all the threads currently alive - as soon as the thread terminates, it's\r
166                 // removed from the array\r
167                 wxArrayThread m_deco_threads, m_parse_threads;\r
168 \r
169                 // crit section protects access to all of the arrays below\r
170                 wxCriticalSection m_deco_critsect, m_parse_critsect;\r
171 \r
172                 // semaphore used to wait for the threads to exit, see OPJFrame::OnQuit()\r
173                 wxSemaphore m_deco_semAllDone, m_parse_semAllDone;\r
174 \r
175                 // the last exiting thread should post to m_semAllDone if this is true\r
176                 // (protected by the same m_critsect)\r
177                 bool m_deco_waitingUntilAllDone, m_parse_waitingUntilAllDone;\r
178 \r
179                 // the list of all filenames written in the command line\r
180                 wxArrayString m_filelist;\r
181 \r
182                 // displaying engine parameters\r
183                 int m_resizemethod;\r
184 \r
185                 // decoding engine parameters\r
186                 bool m_enabledeco;\r
187                 int m_reducefactor, m_qualitylayers, m_components, m_framenum;\r
188 #ifdef USE_JPWL\r
189                 bool m_enablejpwl;\r
190                 int m_expcomps, m_maxtiles;\r
191 #endif // USE_JPWL\r
192 \r
193         // private methods and variables\r
194         private:\r
195                 bool m_showImages, m_showButtons;\r
196 \r
197 };\r
198 \r
199 DECLARE_APP(OPJViewerApp)\r
200 \r
201 ///////////////////////////////////////////\r
202 // this canvas is used to draw the image //\r
203 ///////////////////////////////////////////\r
204 class OPJCanvas: public wxScrolledWindow\r
205 {\r
206         // public methods and variables\r
207         public:\r
208 \r
209                 // class constructor\r
210                 OPJCanvas(wxFileName fname, wxWindow *parent, const wxPoint& pos, const wxSize& size);\r
211 \r
212                 virtual void OnDraw(wxDC& dc);\r
213                 void OnEvent(wxMouseEvent& event);\r
214                 void WriteText(const wxString& text) {\r
215 #ifndef __WXGTK__ \r
216                         wxMutexGuiEnter();\r
217 #endif //__WXGTK__\r
218                         wxLogMessage(text);\r
219 #ifndef __WXGTK__ \r
220                         wxMutexGuiLeave();\r
221 #endif //__WXGTK__\r
222                 }\r
223                 OPJDecoThread *CreateDecoThread(void);\r
224                 OPJChildFrame *m_childframe;\r
225 \r
226                 wxBitmap  m_image, m_image100;\r
227                 wxFileName m_fname;\r
228                 long m_zooml;\r
229 \r
230         DECLARE_EVENT_TABLE()\r
231 };\r
232 \r
233 ///////////////////////////////////////////////////\r
234 // the data associated to each tree leaf or node //\r
235 ///////////////////////////////////////////////////\r
236 class OPJMarkerData : public wxTreeItemData\r
237 {\r
238         // public methods and variables\r
239         public:\r
240 \r
241                 // class constructor\r
242                 OPJMarkerData(const wxString& desc, const wxString& fname = wxT(""), wxFileOffset start = 0, wxFileOffset length = 0) : m_desc(desc), m_filestring(fname) { m_start = start; m_length = length; }\r
243 \r
244                 void ShowInfo(wxTreeCtrl *tree);\r
245                 const wxChar *GetDesc1() const { return m_desc.c_str(); }\r
246                 const wxChar *GetDesc2() const { return m_filestring.c_str(); }\r
247                 wxFileOffset m_start, m_length;\r
248 \r
249         // private methods and variables\r
250         private:\r
251                 wxString m_desc;\r
252                 wxString m_filestring;\r
253 };\r
254 \r
255 \r
256 class OPJMarkerTree : public wxTreeCtrl\r
257 {\r
258 public:\r
259     enum\r
260     {\r
261         TreeCtrlIcon_File,\r
262         TreeCtrlIcon_FileSelected,\r
263         TreeCtrlIcon_Folder,\r
264         TreeCtrlIcon_FolderSelected,\r
265         TreeCtrlIcon_FolderOpened\r
266     };\r
267 \r
268     OPJMarkerTree() { };\r
269     OPJMarkerTree(wxWindow *parent, OPJChildFrame *subframe, wxFileName fname, wxString name, const wxWindowID id,\r
270                const wxPoint& pos, const wxSize& size,\r
271                long style);\r
272     virtual ~OPJMarkerTree(){};\r
273         OPJParseThread *CreateParseThread(wxTreeItemId parentid = 0x00, OPJChildFrame *subframe = NULL);\r
274     void WriteText(const wxString& text) { wxMutexGuiEnter(); wxLogMessage(text); wxMutexGuiLeave(); }\r
275 \r
276         wxFileName m_fname;\r
277         wxTextCtrl *m_peektextCtrl;\r
278         OPJChildFrame *m_childframe;\r
279 \r
280     /*void OnBeginDrag(wxTreeEvent& event);\r
281     void OnBeginRDrag(wxTreeEvent& event);\r
282     void OnEndDrag(wxTreeEvent& event);*/\r
283     /*void OnBeginLabelEdit(wxTreeEvent& event);\r
284     void OnEndLabelEdit(wxTreeEvent& event);*/\r
285     /*void OnDeleteItem(wxTreeEvent& event);*/\r
286     /*void OnContextMenu(wxContextMenuEvent& event);*/\r
287     void OnItemMenu(wxTreeEvent& event);\r
288     /*void OnGetInfo(wxTreeEvent& event);\r
289     void OnSetInfo(wxTreeEvent& event);*/\r
290     /*void OnItemExpanded(wxTreeEvent& event);*/\r
291     void OnItemExpanding(wxTreeEvent& event);\r
292     /*void OnItemCollapsed(wxTreeEvent& event);\r
293     void OnItemCollapsing(wxTreeEvent& event);*/\r
294     void OnSelChanged(wxTreeEvent& event);\r
295     /*void OnSelChanging(wxTreeEvent& event);*/\r
296     /*void OnTreeKeyDown(wxTreeEvent& event);*/\r
297     /*void OnItemActivated(wxTreeEvent& event);*/\r
298     /*void OnItemRClick(wxTreeEvent& event);*/\r
299     /*void OnRMouseDown(wxMouseEvent& event);\r
300     void OnRMouseUp(wxMouseEvent& event);\r
301     void OnRMouseDClick(wxMouseEvent& event);*/\r
302     /*void GetItemsRecursively(const wxTreeItemId& idParent,\r
303                              wxTreeItemIdValue cookie = 0);*/\r
304 \r
305     void CreateImageList(int size = 16);\r
306     void CreateButtonsImageList(int size = 11);\r
307 \r
308     /*void AddTestItemsToTree(size_t numChildren, size_t depth);*/\r
309     /*void DoSortChildren(const wxTreeItemId& item, bool reverse = false)\r
310         { m_reverseSort = reverse; wxTreeCtrl::SortChildren(item); }*/\r
311     /*void DoEnsureVisible() { if (m_lastItem.IsOk()) EnsureVisible(m_lastItem); }*/\r
312     /*void DoToggleIcon(const wxTreeItemId& item);*/\r
313     /*void ShowMenu(wxTreeItemId id, const wxPoint& pt);*/\r
314 \r
315     int ImageSize(void) const { return m_imageSize; }\r
316 \r
317     void SetLastItem(wxTreeItemId id) { m_lastItem = id; }\r
318 \r
319 protected:\r
320     /*virtual int OnCompareItems(const wxTreeItemId& i1, const wxTreeItemId& i2);*/\r
321 \r
322     // is this the test item which we use in several event handlers?\r
323     /*bool IsTestItem(const wxTreeItemId& item)\r
324     {\r
325         // the test item is the first child folder\r
326         return GetItemParent(item) == GetRootItem() && !GetPrevSibling(item);\r
327     }*/\r
328 \r
329 private:\r
330     /*void AddItemsRecursively(const wxTreeItemId& idParent,\r
331                              size_t nChildren,\r
332                              size_t depth,\r
333                              size_t folder);*/\r
334 \r
335     void LogEvent(const wxChar *name, const wxTreeEvent& event);\r
336 \r
337     int          m_imageSize;               // current size of images\r
338     bool         m_reverseSort;             // flag for OnCompareItems\r
339     wxTreeItemId m_lastItem,                // for OnEnsureVisible()\r
340                  m_draggedItem;             // item being dragged right now\r
341 \r
342     // NB: due to an ugly wxMSW hack you _must_ use DECLARE_DYNAMIC_CLASS()\r
343     //     if you want your overloaded OnCompareItems() to be called.\r
344     //     OTOH, if you don't want it you may omit the next line - this will\r
345     //     make default (alphabetical) sorting much faster under wxMSW.\r
346     DECLARE_DYNAMIC_CLASS(OPJMarkerTree)\r
347     DECLARE_EVENT_TABLE()\r
348 };\r
349 \r
350 // this hash map stores all the trees of currently opened images, with an integer key\r
351 WX_DECLARE_HASH_MAP(int, OPJMarkerTree*, wxIntegerHash, wxIntegerEqual, OPJMarkerTreeHash);\r
352 \r
353 // this hash map stores all the children of currently opened images, with an integer key\r
354 WX_DECLARE_HASH_MAP(int, OPJChildFrame*, wxIntegerHash, wxIntegerEqual, OPJChildFrameHash);\r
355 \r
356 // Define a new frame\r
357 class OPJFrame: public wxMDIParentFrame\r
358 {\r
359   public:\r
360 \r
361     OPJFrame(wxWindow *parent, const wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, const long style);\r
362 \r
363     ~OPJFrame(void);\r
364         void OnSize(wxSizeEvent& WXUNUSED(event));\r
365     void OnAbout(wxCommandEvent& WXUNUSED(event));\r
366     void OnFileOpen(wxCommandEvent& WXUNUSED(event));\r
367     void OnQuit(wxCommandEvent& WXUNUSED(event));\r
368     void OnClose(wxCommandEvent& WXUNUSED(event));\r
369     void OnZoom(wxCommandEvent& WXUNUSED(event));\r
370         void OnFit(wxCommandEvent& WXUNUSED(event));\r
371         void OnToggleBrowser(wxCommandEvent& WXUNUSED(event));\r
372         void OnTogglePeeker(wxCommandEvent& WXUNUSED(event));\r
373         void OnReload(wxCommandEvent& event);\r
374         void OnSetsEnco(wxCommandEvent& event);\r
375         void OnSetsDeco(wxCommandEvent& event);\r
376         void OnSashDrag(wxSashEvent& event);\r
377         void OpenFiles(wxArrayString paths, wxArrayString filenames);\r
378         void OnNotebook(wxNotebookEvent& event);\r
379         void Rescale(int scale, OPJChildFrame *child);\r
380 \r
381         OPJMarkerTreeHash m_treehash;\r
382         OPJChildFrameHash m_childhash;\r
383     wxSashLayoutWindow* markerTreeWindow;\r
384     wxSashLayoutWindow* loggingWindow;\r
385     void Resize(int number);\r
386         wxNotebook *m_bookCtrl;\r
387         wxNotebook *m_bookCtrlbottom;\r
388     wxTextCtrl *m_textCtrlbrowse;\r
389 \r
390   private:\r
391     void TogStyle(int id, long flag);\r
392 \r
393     void DoSort(bool reverse = false);\r
394 \r
395     wxPanel *m_panel;\r
396     wxTextCtrl *m_textCtrl;\r
397 \r
398     void DoSetBold(bool bold = true);\r
399 \r
400 protected:\r
401     wxSashLayoutWindow* m_topWindow;\r
402     wxSashLayoutWindow* m_leftWindow2;\r
403 \r
404 DECLARE_EVENT_TABLE()\r
405 };\r
406 \r
407 class OPJChildFrame: public wxMDIChildFrame\r
408 {\r
409   public:\r
410     OPJCanvas *m_canvas;\r
411     OPJChildFrame(OPJFrame *parent, wxFileName fname, int winnumber, const wxString& title, const wxPoint& pos, const wxSize& size, const long style);\r
412     ~OPJChildFrame(void);\r
413     void OnActivate(wxActivateEvent& event);\r
414         /*void OnQuit(wxCommandEvent& WXUNUSED(event));*/\r
415         void OnClose(wxCloseEvent& event);\r
416         void OnGotFocus(wxFocusEvent& event);\r
417         void OnLostFocus(wxFocusEvent& event);\r
418     OPJFrame *m_frame;\r
419         wxFileName m_fname;\r
420         int m_winnumber;\r
421 \r
422         unsigned long  m_twidth, m_theight, m_tx, m_ty;\r
423 \r
424         DECLARE_EVENT_TABLE()\r
425 };\r
426 \r
427 // frame and main menu ids\r
428 enum {\r
429         OPJFRAME_FILEEXIT = wxID_EXIT,\r
430         OPJFRAME_HELPABOUT = wxID_ABOUT,\r
431         OPJFRAME_FILEOPEN,\r
432         OPJFRAME_FILETOGGLEB,\r
433         OPJFRAME_FILETOGGLEP,\r
434         OPJFRAME_VIEWZOOM,\r
435         OPJFRAME_VIEWFIT,\r
436         OPJFRAME_VIEWRELOAD,\r
437         OPJFRAME_FILECLOSE,\r
438         OPJFRAME_SETSENCO,\r
439         OPJFRAME_SETSDECO,\r
440 \r
441         OPJFRAME_BROWSEWIN = 10000,\r
442         OPJFRAME_LOGWIN\r
443 };\r
444 \r
445 \r
446 // menu and control ids\r
447 enum\r
448 {\r
449     TreeTest_Quit = wxID_EXIT,\r
450     TreeTest_About = wxID_ABOUT,\r
451     TreeTest_TogButtons = wxID_HIGHEST,\r
452     TreeTest_TogTwist,\r
453     TreeTest_TogLines,\r
454     TreeTest_TogEdit,\r
455     TreeTest_TogHideRoot,\r
456     TreeTest_TogRootLines,\r
457     TreeTest_TogBorder,\r
458     TreeTest_TogFullHighlight,\r
459     TreeTest_SetFgColour,\r
460     TreeTest_SetBgColour,\r
461     TreeTest_ResetStyle,\r
462     TreeTest_Highlight,\r
463     TreeTest_Dump,\r
464     TreeTest_DumpSelected,\r
465     TreeTest_Count,\r
466     TreeTest_CountRec,\r
467     TreeTest_Sort,\r
468     TreeTest_SortRev,\r
469     TreeTest_SetBold,\r
470     TreeTest_ClearBold,\r
471     TreeTest_Rename,\r
472     TreeTest_Delete,\r
473     TreeTest_DeleteChildren,\r
474     TreeTest_DeleteAll,\r
475     TreeTest_Recreate,\r
476     TreeTest_ToggleImages,\r
477     TreeTest_ToggleButtons,\r
478     TreeTest_SetImageSize,\r
479     TreeTest_ToggleSel,\r
480     TreeTest_CollapseAndReset,\r
481     TreeTest_EnsureVisible,\r
482     TreeTest_AddItem,\r
483     TreeTest_InsertItem,\r
484     TreeTest_IncIndent,\r
485     TreeTest_DecIndent,\r
486     TreeTest_IncSpacing,\r
487     TreeTest_DecSpacing,\r
488     TreeTest_ToggleIcon,\r
489     TreeTest_Select,\r
490     TreeTest_Unselect,\r
491     TreeTest_SelectRoot,\r
492     TreeTest_Ctrl = 1000,\r
493         BOTTOM_NOTEBOOK_ID,\r
494         LEFT_NOTEBOOK_ID\r
495 };\r
496 \r
497 class OPJDecoThread : public wxThread\r
498 {\r
499 public:\r
500     OPJDecoThread(OPJCanvas *canvas);\r
501 \r
502     // thread execution starts here\r
503     virtual void *Entry();\r
504 \r
505     // called when the thread exits - whether it terminates normally or is\r
506     // stopped with Delete() (but not when it is Kill()ed!)\r
507     virtual void OnExit();\r
508 \r
509     // write something to the text control\r
510     void WriteText(const wxString& text);\r
511 \r
512 public:\r
513     unsigned m_count;\r
514     OPJCanvas *m_canvas;\r
515 };\r
516 \r
517 class OPJParseThread : public wxThread\r
518 {\r
519 public:\r
520     OPJParseThread(OPJMarkerTree *tree, wxTreeItemId parentid = 0x00);\r
521 \r
522     // thread execution starts here\r
523     virtual void *Entry();\r
524 \r
525     // called when the thread exits - whether it terminates normally or is\r
526     // stopped with Delete() (but not when it is Kill()ed!)\r
527     virtual void OnExit();\r
528 \r
529     // write something to the text control\r
530     void WriteText(const wxString& text);\r
531         void LoadFile(wxFileName fname);\r
532         void ParseJ2KFile(wxFile *m_file, wxFileOffset offset, wxFileOffset length, wxTreeItemId parentid);\r
533         void ParseJP2File(wxFile *fileid, wxFileOffset filepoint, wxFileOffset filelimit, wxTreeItemId parentid);\r
534 \r
535     unsigned m_count;\r
536     OPJMarkerTree *m_tree;\r
537         wxTreeItemId m_parentid;\r
538 \r
539 private:\r
540         int jpeg2000parse(wxFile *fileid, wxFileOffset filepoint, wxFileOffset filelimit,\r
541                         wxTreeItemId parentid, int level, char *scansign, unsigned long int *scanpoint);\r
542         int box_handler_function(int boxtype, wxFile *fileid, wxFileOffset filepoint, wxFileOffset filelimit,\r
543                         wxTreeItemId parentid, int level, char *scansign, unsigned long int *scanpoint);\r
544 \r
545 };\r
546 \r
547 \r
548 // Drag and drop files target\r
549 class OPJDnDFile: public wxFileDropTarget\r
550 {\r
551 public:\r
552     OPJDnDFile(OPJFrame *pOwner) { m_pOwner = pOwner; }\r
553     virtual bool OnDropFiles(wxCoord x, wxCoord y, const wxArrayString& filenames);\r
554 \r
555 private:\r
556     OPJFrame *m_pOwner;\r
557 };\r
558 \r
559 \r
560 \r
561 // Property sheet dialog: encoder\r
562 class OPJEncoderDialog: public wxPropertySheetDialog\r
563 {\r
564 DECLARE_CLASS(OPJEncoderDialog)\r
565 public:\r
566     OPJEncoderDialog(wxWindow* parent, int dialogType);\r
567     ~OPJEncoderDialog();\r
568 \r
569         wxBookCtrlBase* m_settingsNotebook;\r
570 \r
571     wxPanel* CreateMainSettingsPage(wxWindow* parent);\r
572     wxPanel* CreatePart1SettingsPage(wxWindow* parent);\r
573 /*    wxPanel* CreatePart3SettingsPage(wxWindow* parent);*/\r
574 #ifdef USE_JPWL\r
575         void OnEnableJPWL(wxCommandEvent& event);\r
576 /*    wxPanel* CreatePart11SettingsPage(wxWindow* parent);\r
577         wxCheckBox *m_enablejpwlCheck;*/\r
578 #endif // USE_JPWL\r
579 \r
580 \r
581 protected:\r
582 \r
583     enum {\r
584                 OPJENCO_ENABLEJPWL = 100,\r
585                 OPJENCO_RATEFACTOR,\r
586                 OPJENCO_QUALITYFACTOR,\r
587                 OPJENCO_RESNUMBER,\r
588                 OPJENCO_CODEBLOCKSIZE,\r
589                 OPJENCO_PRECINCTSIZE,\r
590                 OPJENCO_TILESIZE,\r
591                 OPJENCO_PROGRESSION,\r
592                 OPJENCO_SUBSAMPLING,\r
593                 OPJENCO_ENABLESOP,\r
594                 OPJENCO_ENABLEEPH,\r
595                 OPJENCO_ENABLEBYPASS,\r
596                 OPJENCO_ENABLERESET,\r
597                 OPJENCO_ENABLERESTART,\r
598                 OPJENCO_ENABLEVSC,\r
599                 OPJENCO_ENABLEERTERM,\r
600                 OPJENCO_ENABLESEGMARK,\r
601                 OPJENCO_ROICOMP,\r
602                 OPJENCO_ROISHIFT,\r
603                 OPJENCO_IMORIG,\r
604                 OPJENCO_TILORIG,\r
605                 OPJENCO_ENABLEIRREV,\r
606                 OPJENCO_ENABLEINDEX,\r
607                 OPJENCO_INDEXNAME\r
608     };\r
609 \r
610 DECLARE_EVENT_TABLE()\r
611 };\r
612 \r
613 // Property sheet dialog: decoder\r
614 class OPJDecoderDialog: public wxPropertySheetDialog\r
615 {\r
616 DECLARE_CLASS(OPJDecoderDialog)\r
617 public:\r
618     OPJDecoderDialog(wxWindow* parent, int dialogType);\r
619     ~OPJDecoderDialog();\r
620 \r
621         wxBookCtrlBase* m_settingsNotebook;\r
622         wxCheckBox *m_enabledecoCheck;\r
623         wxSpinCtrl *m_reduceCtrl, *m_layerCtrl, *m_numcompsCtrl;\r
624         wxRadioBox* m_resizeBox;\r
625 \r
626         void OnEnableDeco(wxCommandEvent& event);\r
627 \r
628     wxPanel* CreateMainSettingsPage(wxWindow* parent);\r
629     wxPanel* CreatePart1SettingsPage(wxWindow* parent);\r
630     wxPanel* CreatePart3SettingsPage(wxWindow* parent);\r
631 #ifdef USE_JPWL\r
632         void OnEnableJPWL(wxCommandEvent& event);\r
633     wxPanel* CreatePart11SettingsPage(wxWindow* parent);\r
634         wxSpinCtrl *m_expcompsCtrl, *m_framenumCtrl, *m_maxtilesCtrl;\r
635         wxCheckBox *m_enablejpwlCheck;\r
636 #endif // USE_JPWL\r
637 \r
638 \r
639 protected:\r
640 \r
641     enum {\r
642                 OPJDECO_RESMETHOD = 100,\r
643                 OPJDECO_REDUCEFACTOR,\r
644                 OPJDECO_QUALITYLAYERS,\r
645                 OPJDECO_NUMCOMPS,\r
646                 OPJDECO_ENABLEDECO,\r
647                 OPJDECO_ENABLEJPWL,\r
648                 OPJDECO_EXPCOMPS,\r
649                 OPJDECO_MAXTILES,\r
650                 OPJDECO_FRAMENUM\r
651     };\r
652 \r
653 DECLARE_EVENT_TABLE()\r
654 };\r
655 \r
656 #endif //__OPJ_VIEWER_H__\r
657 \r
658 \r
659 \r