add info on how to build doxygen doc with autotools
[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 "wx/toolbar.h"\r
102 #include "wx/artprov.h"\r
103 \r
104 #include "libopenjpeg/openjpeg.h"\r
105 \r
106 //#include "imagj2k.h"\r
107 //#include "imagjp2.h"\r
108 //#include "imagmj2.h"\r
109 #include "imagjpeg2000.h"\r
110 #ifdef USE_MXF\r
111 #include "imagmxf.h"\r
112 #endif // USE_MXF\r
113 \r
114 #ifdef __WXMSW__\r
115 typedef unsigned __int64 int8byte;\r
116 #endif // __WXMSW__\r
117 \r
118 #ifdef __WXGTK__\r
119 typedef unsigned long long int8byte;\r
120 #endif // __WXGTK__\r
121 \r
122 #define USE_GENERIC_TREECTRL 0\r
123 #define USE_PENCIL_ON_CANVAS 0\r
124 \r
125 #if USE_GENERIC_TREECTRL\r
126 #include "wx/generic/treectlg.h"\r
127 #ifndef wxTreeCtrl\r
128 #define wxTreeCtrl wxGenericTreeCtrl\r
129 #define sm_classwxTreeCtrl sm_classwxGenericTreeCtrl\r
130 #endif\r
131 #endif\r
132 \r
133 #define OPJ_APPLICATION             wxT("OPJViewer")\r
134 #define OPJ_APPLICATION_NAME            wxT("OpenJPEG Viewer")\r
135 #define OPJ_APPLICATION_VERSION         wxT("0.4 beta")\r
136 #define OPJ_APPLICATION_TITLEBAR        OPJ_APPLICATION_NAME wxT(" ") OPJ_APPLICATION_VERSION\r
137 #define OPJ_APPLICATION_COPYRIGHT       wxT("(C) 2007-2008, Giuseppe Baruffa")\r
138 #define OPJ_APPLICATION_VENDOR      wxT("OpenJPEG")\r
139 \r
140 #ifdef __WXMSW__\r
141 #define OPJ_APPLICATION_PLATFORM    wxT("Windows")\r
142 #endif\r
143 \r
144 #ifdef __WXGTK__\r
145 #define OPJ_APPLICATION_PLATFORM    wxT("Linux")\r
146 #endif\r
147 \r
148 #define OPJ_FRAME_WIDTH   800\r
149 #define OPJ_FRAME_HEIGHT  600\r
150 \r
151 #define OPJ_BROWSER_WIDTH 300\r
152 #define OPJ_PEEKER_HEIGHT 130\r
153 \r
154 #define OPJ_CANVAS_BORDER 10\r
155 #define OPJ_CANVAS_COLOUR *wxWHITE\r
156 \r
157 \r
158 \r
159 #ifdef USE_JPWL\r
160 \r
161 //#define MYJPWL_MAX_NO_TILESPECS JPWL_MAX_NO_TILESPECS\r
162 #define MYJPWL_MAX_NO_TILESPECS 4\r
163 \r
164 #endif // USE_JPWL\r
165 \r
166 \r
167 class OPJDecoThread;\r
168 class OPJEncoThread;\r
169 class OPJParseThread;\r
170 WX_DEFINE_ARRAY_PTR(wxThread *, wxArrayThread);\r
171 class OPJChildFrame;\r
172 \r
173 //////////////////////////////////\r
174 // this is our main application //\r
175 //////////////////////////////////\r
176 class OPJViewerApp: public wxApp\r
177 {\r
178         // public methods and variables\r
179         public:\r
180 \r
181                 // class constructor\r
182                 OPJViewerApp() { m_showImages = true; m_showButtons = false; }\r
183 \r
184                 // other methods\r
185                 bool OnInit(void);\r
186                 int OnExit(void);\r
187                 void SetShowImages(bool show) { m_showImages = show; }\r
188                 bool ShowImages() const { return m_showImages; }\r
189                 void ShowCmdLine(const wxCmdLineParser& parser);\r
190 \r
191                 // all the threads currently alive - as soon as the thread terminates, it's\r
192                 // removed from the array\r
193                 wxArrayThread m_deco_threads, m_parse_threads, m_enco_threads;\r
194 \r
195                 // crit section protects access to all of the arrays below\r
196                 wxCriticalSection m_deco_critsect, m_parse_critsect, m_enco_critsect;\r
197 \r
198                 // semaphore used to wait for the threads to exit, see OPJFrame::OnQuit()\r
199                 wxSemaphore m_deco_semAllDone, m_parse_semAllDone, m_enco_semAllDone;\r
200 \r
201                 // the last exiting thread should post to m_semAllDone if this is true\r
202                 // (protected by the same m_critsect)\r
203                 bool m_deco_waitingUntilAllDone, m_parse_waitingUntilAllDone, m_enco_waitingUntilAllDone;\r
204 \r
205                 // the list of all filenames written in the command line\r
206                 wxArrayString m_filelist;\r
207 \r
208                 // displaying engine parameters\r
209                 int m_resizemethod;\r
210 \r
211                 // decoding engine parameters\r
212                 bool m_enabledeco, m_enableparse;\r
213                 int m_reducefactor, m_qualitylayers, m_components, m_framenum;\r
214 #ifdef USE_JPWL\r
215                 bool m_enablejpwl, m_enablejpwle;\r
216                 int m_expcomps, m_maxtiles;\r
217                 int m_framewidth, m_frameheight;\r
218 #endif // USE_JPWL\r
219 \r
220                 // encoding engine parameters\r
221                 wxString m_subsampling, m_origin, m_rates, m_comment, m_index, m_quality;\r
222                 wxString m_cbsize, m_prsize, m_tsize, m_torigin, m_poc;\r
223                 bool m_enablecomm, m_enableidx, m_multicomp, m_irreversible, m_enablesop, m_enableeph;\r
224                 bool m_enablebypass, m_enablereset, m_enablerestart, m_enablevsc, m_enableerterm;\r
225                 bool m_enablesegmark, m_enablepoc;\r
226                 bool m_enablequality;\r
227                 int m_resolutions, m_progression;\r
228 #ifdef USE_JPWL\r
229                 int m_hprotsel[MYJPWL_MAX_NO_TILESPECS], m_pprotsel[MYJPWL_MAX_NO_TILESPECS];\r
230                 int m_htileval[MYJPWL_MAX_NO_TILESPECS], m_ptileval[MYJPWL_MAX_NO_TILESPECS],\r
231                         m_ppackval[MYJPWL_MAX_NO_TILESPECS];\r
232                 int m_sensisel[MYJPWL_MAX_NO_TILESPECS], m_stileval[MYJPWL_MAX_NO_TILESPECS];\r
233 #endif // USE_JPWL\r
234 \r
235                 // some layout settings\r
236                 bool m_showtoolbar, m_showbrowser, m_showpeeker;\r
237                 int m_browserwidth, m_peekerheight;\r
238 \r
239                 // application configuration\r
240                 wxConfig *OPJconfig; \r
241 \r
242         // private methods and variables\r
243         private:\r
244                 bool m_showImages, m_showButtons;\r
245 \r
246 };\r
247 \r
248 DECLARE_APP(OPJViewerApp)\r
249 \r
250 ///////////////////////////////////////////\r
251 // this canvas is used to draw the image //\r
252 ///////////////////////////////////////////\r
253 class OPJCanvas: public wxScrolledWindow\r
254 {\r
255         // public methods and variables\r
256         public:\r
257 \r
258                 // class constructor\r
259                 OPJCanvas(wxFileName fname, wxWindow *parent, const wxPoint& pos, const wxSize& size);\r
260 \r
261                 virtual void OnDraw(wxDC& dc);\r
262                 void OnEvent(wxMouseEvent& event);\r
263                 void WriteText(const wxString& text) {\r
264 #ifndef __WXGTK__ \r
265                         wxMutexGuiEnter();\r
266 #endif //__WXGTK__\r
267                         wxLogMessage(text);\r
268 #ifndef __WXGTK__ \r
269                         wxMutexGuiLeave();\r
270 #endif //__WXGTK__\r
271                 }\r
272 \r
273                 void OnThreadSignal(wxCommandEvent& event);\r
274 \r
275                 OPJDecoThread *CreateDecoThread(void);\r
276                 OPJEncoThread *CreateEncoThread(void);\r
277 \r
278 \r
279                 OPJChildFrame *m_childframe;\r
280 \r
281                 wxBitmap  m_image, m_image100;\r
282                 wxFileName m_fname, m_savename;\r
283                 long m_zooml;\r
284 \r
285         DECLARE_EVENT_TABLE()\r
286 };\r
287 \r
288 ///////////////////////////////////////////////////\r
289 // the data associated to each tree leaf or node //\r
290 ///////////////////////////////////////////////////\r
291 class OPJMarkerData : public wxTreeItemData\r
292 {\r
293         // public methods and variables\r
294         public:\r
295 \r
296                 // class constructor\r
297                 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
298 \r
299                 void ShowInfo(wxTreeCtrl *tree);\r
300                 const wxChar *GetDesc1() const { return m_desc.c_str(); }\r
301                 const wxChar *GetDesc2() const { return m_filestring.c_str(); }\r
302                 wxFileOffset m_start, m_length;\r
303                 wxString m_desc;\r
304 \r
305         // private methods and variables\r
306         private:\r
307                 wxString m_filestring;\r
308 };\r
309 \r
310 \r
311 class OPJMarkerTree : public wxTreeCtrl\r
312 {\r
313 public:\r
314     enum\r
315     {\r
316         TreeCtrlIcon_File,\r
317         TreeCtrlIcon_FileSelected,\r
318         TreeCtrlIcon_Folder,\r
319         TreeCtrlIcon_FolderSelected,\r
320         TreeCtrlIcon_FolderOpened\r
321     };\r
322 \r
323     OPJMarkerTree() { };\r
324     OPJMarkerTree(wxWindow *parent, OPJChildFrame *subframe, wxFileName fname, wxString name, const wxWindowID id,\r
325                const wxPoint& pos, const wxSize& size,\r
326                long style);\r
327     virtual ~OPJMarkerTree(){};\r
328         OPJParseThread *CreateParseThread(wxTreeItemId parentid = 0x00, OPJChildFrame *subframe = NULL);\r
329     void WriteText(const wxString& text) { wxMutexGuiEnter(); wxLogMessage(text); wxMutexGuiLeave(); }\r
330 \r
331         wxFileName m_fname;\r
332         wxTextCtrl *m_peektextCtrl;\r
333         OPJChildFrame *m_childframe;\r
334 \r
335     /*void OnBeginDrag(wxTreeEvent& event);\r
336     void OnBeginRDrag(wxTreeEvent& event);\r
337     void OnEndDrag(wxTreeEvent& event);*/\r
338     /*void OnBeginLabelEdit(wxTreeEvent& event);\r
339     void OnEndLabelEdit(wxTreeEvent& event);*/\r
340     /*void OnDeleteItem(wxTreeEvent& event);*/\r
341     /*void OnContextMenu(wxContextMenuEvent& event);*/\r
342     void OnItemMenu(wxTreeEvent& event);\r
343     /*void OnGetInfo(wxTreeEvent& event);\r
344     void OnSetInfo(wxTreeEvent& event);*/\r
345     /*void OnItemExpanded(wxTreeEvent& event);*/\r
346     void OnItemExpanding(wxTreeEvent& event);\r
347     /*void OnItemCollapsed(wxTreeEvent& event);\r
348     void OnItemCollapsing(wxTreeEvent& event);*/\r
349     void OnSelChanged(wxTreeEvent& event);\r
350     /*void OnSelChanging(wxTreeEvent& event);*/\r
351     /*void OnTreeKeyDown(wxTreeEvent& event);*/\r
352     /*void OnItemActivated(wxTreeEvent& event);*/\r
353     /*void OnItemRClick(wxTreeEvent& event);*/\r
354     /*void OnRMouseDown(wxMouseEvent& event);\r
355     void OnRMouseUp(wxMouseEvent& event);\r
356     void OnRMouseDClick(wxMouseEvent& event);*/\r
357     /*void GetItemsRecursively(const wxTreeItemId& idParent,\r
358                              wxTreeItemIdValue cookie = 0);*/\r
359 \r
360     void CreateImageList(int size = 16);\r
361     void CreateButtonsImageList(int size = 11);\r
362 \r
363     /*void AddTestItemsToTree(size_t numChildren, size_t depth);*/\r
364     /*void DoSortChildren(const wxTreeItemId& item, bool reverse = false)\r
365         { m_reverseSort = reverse; wxTreeCtrl::SortChildren(item); }*/\r
366     /*void DoEnsureVisible() { if (m_lastItem.IsOk()) EnsureVisible(m_lastItem); }*/\r
367     /*void DoToggleIcon(const wxTreeItemId& item);*/\r
368     /*void ShowMenu(wxTreeItemId id, const wxPoint& pt);*/\r
369 \r
370     int ImageSize(void) const { return m_imageSize; }\r
371 \r
372     void SetLastItem(wxTreeItemId id) { m_lastItem = id; }\r
373 \r
374 protected:\r
375     /*virtual int OnCompareItems(const wxTreeItemId& i1, const wxTreeItemId& i2);*/\r
376 \r
377     // is this the test item which we use in several event handlers?\r
378     /*bool IsTestItem(const wxTreeItemId& item)\r
379     {\r
380         // the test item is the first child folder\r
381         return GetItemParent(item) == GetRootItem() && !GetPrevSibling(item);\r
382     }*/\r
383 \r
384 private:\r
385     /*void AddItemsRecursively(const wxTreeItemId& idParent,\r
386                              size_t nChildren,\r
387                              size_t depth,\r
388                              size_t folder);*/\r
389 \r
390     void LogEvent(const wxChar *name, const wxTreeEvent& event);\r
391 \r
392     int          m_imageSize;               // current size of images\r
393     bool         m_reverseSort;             // flag for OnCompareItems\r
394     wxTreeItemId m_lastItem,                // for OnEnsureVisible()\r
395                  m_draggedItem;             // item being dragged right now\r
396 \r
397     // NB: due to an ugly wxMSW hack you _must_ use DECLARE_DYNAMIC_CLASS()\r
398     //     if you want your overloaded OnCompareItems() to be called.\r
399     //     OTOH, if you don't want it you may omit the next line - this will\r
400     //     make default (alphabetical) sorting much faster under wxMSW.\r
401     DECLARE_DYNAMIC_CLASS(OPJMarkerTree)\r
402     DECLARE_EVENT_TABLE()\r
403 };\r
404 \r
405 // this hash map stores all the trees of currently opened images, with an integer key\r
406 WX_DECLARE_HASH_MAP(int, OPJMarkerTree*, wxIntegerHash, wxIntegerEqual, OPJMarkerTreeHash);\r
407 \r
408 // this hash map stores all the children of currently opened images, with an integer key\r
409 WX_DECLARE_HASH_MAP(int, OPJChildFrame*, wxIntegerHash, wxIntegerEqual, OPJChildFrameHash);\r
410 \r
411 // Define a new frame\r
412 class OPJFrame: public wxMDIParentFrame\r
413 {\r
414   public:\r
415 \r
416     OPJFrame(wxWindow *parent, const wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, const long style);\r
417 \r
418     ~OPJFrame(void);\r
419         void OnSize(wxSizeEvent& WXUNUSED(event));\r
420     void OnAbout(wxCommandEvent& WXUNUSED(event));\r
421     void OnFileOpen(wxCommandEvent& WXUNUSED(event));\r
422     void OnFileSaveAs(wxCommandEvent& WXUNUSED(event));\r
423     void OnMemoryOpen(wxCommandEvent& WXUNUSED(event));\r
424     void OnQuit(wxCommandEvent& WXUNUSED(event));\r
425     void OnClose(wxCommandEvent& WXUNUSED(event));\r
426     void OnZoom(wxCommandEvent& WXUNUSED(event));\r
427         void OnFit(wxCommandEvent& event);\r
428         void OnToggleBrowser(wxCommandEvent& WXUNUSED(event));\r
429         void OnTogglePeeker(wxCommandEvent& WXUNUSED(event));\r
430         void OnToggleToolbar(wxCommandEvent& WXUNUSED(event));\r
431         void OnReload(wxCommandEvent& event);\r
432         void OnPrevFrame(wxCommandEvent& event);\r
433         void OnHomeFrame(wxCommandEvent& event);\r
434         void OnNextFrame(wxCommandEvent& event);\r
435         void OnLessLayers(wxCommandEvent& event);\r
436         void OnAllLayers(wxCommandEvent& event);\r
437         void OnMoreLayers(wxCommandEvent& event);\r
438         void OnLessRes(wxCommandEvent& event);\r
439         void OnFullRes(wxCommandEvent& event);\r
440         void OnMoreRes(wxCommandEvent& event);\r
441         void OnPrevComp(wxCommandEvent& event);\r
442         void OnAllComps(wxCommandEvent& event);\r
443         void OnNextComp(wxCommandEvent& event);\r
444         void OnSetsEnco(wxCommandEvent& event);\r
445         void OnSetsDeco(wxCommandEvent& event);\r
446         void OnSashDrag(wxSashEvent& event);\r
447         void OpenFiles(wxArrayString paths, wxArrayString filenames);\r
448         void SaveFile(wxArrayString paths, wxArrayString filenames);\r
449         void OnNotebook(wxNotebookEvent& event);\r
450         void Rescale(int scale, OPJChildFrame *child);\r
451         void OnThreadLogmsg(wxCommandEvent& event);\r
452 \r
453         OPJMarkerTreeHash m_treehash;\r
454         OPJChildFrameHash m_childhash;\r
455     wxSashLayoutWindow* markerTreeWindow;\r
456     wxSashLayoutWindow* loggingWindow;\r
457         wxToolBar* tool_bar;\r
458     void Resize(int number);\r
459         wxNotebook *m_bookCtrl;\r
460         wxNotebook *m_bookCtrlbottom;\r
461     wxTextCtrl *m_textCtrlbrowse;\r
462 \r
463   private:\r
464     void TogStyle(int id, long flag);\r
465 \r
466     void DoSort(bool reverse = false);\r
467 \r
468     wxPanel *m_panel;\r
469     wxTextCtrl *m_textCtrl;\r
470 \r
471     void DoSetBold(bool bold = true);\r
472 \r
473 protected:\r
474     wxSashLayoutWindow* m_topWindow;\r
475     wxSashLayoutWindow* m_leftWindow2;\r
476 \r
477 DECLARE_EVENT_TABLE()\r
478 };\r
479 \r
480 class OPJChildFrame: public wxMDIChildFrame\r
481 {\r
482   public:\r
483     OPJCanvas *m_canvas;\r
484     OPJChildFrame(OPJFrame *parent, wxFileName fname, int winnumber, const wxString& title, const wxPoint& pos, const wxSize& size, const long style);\r
485     ~OPJChildFrame(void);\r
486     void OnActivate(wxActivateEvent& event);\r
487         /*void OnQuit(wxCommandEvent& WXUNUSED(event));*/\r
488         void OnClose(wxCloseEvent& event);\r
489         void OnGotFocus(wxFocusEvent& event);\r
490         void OnLostFocus(wxFocusEvent& event);\r
491     OPJFrame *m_frame;\r
492         wxFileName m_fname;\r
493         int m_winnumber;\r
494 \r
495         unsigned long  m_twidth, m_theight, m_tx, m_ty;\r
496 \r
497         DECLARE_EVENT_TABLE()\r
498 };\r
499 \r
500 // frame and main menu ids\r
501 enum {\r
502         OPJFRAME_FILEEXIT = wxID_EXIT,\r
503         OPJFRAME_HELPABOUT = wxID_ABOUT,\r
504         OPJFRAME_FILEOPEN,\r
505         OPJFRAME_MEMORYOPEN,\r
506         OPJFRAME_FILESAVEAS,\r
507         OPJFRAME_FILETOGGLEB,\r
508         OPJFRAME_FILETOGGLEP,\r
509         OPJFRAME_FILETOGGLET,\r
510         OPJFRAME_VIEWZOOM,\r
511         OPJFRAME_VIEWFIT,\r
512         OPJFRAME_VIEWRELOAD,\r
513         OPJFRAME_VIEWPREVFRAME,\r
514         OPJFRAME_VIEWHOMEFRAME,\r
515         OPJFRAME_VIEWNEXTFRAME,\r
516         OPJFRAME_VIEWLESSLAYERS,\r
517         OPJFRAME_VIEWALLLAYERS,\r
518         OPJFRAME_VIEWMORELAYERS,\r
519         OPJFRAME_VIEWLESSRES,\r
520         OPJFRAME_VIEWFULLRES,\r
521         OPJFRAME_VIEWMORERES,\r
522         OPJFRAME_VIEWPREVCOMP,\r
523         OPJFRAME_VIEWALLCOMPS,\r
524         OPJFRAME_VIEWNEXTCOMP,\r
525         OPJFRAME_FILECLOSE,\r
526         OPJFRAME_SETSENCO,\r
527         OPJFRAME_SETSDECO,\r
528 \r
529         OPJFRAME_BROWSEWIN = 10000,\r
530         OPJFRAME_LOGWIN,\r
531         OPJFRAME_TOOLBAR,\r
532 \r
533         OPJFRAME_THREADLOGMSG,\r
534         OPJCANVAS_THREADSIGNAL\r
535 };\r
536 \r
537 \r
538 // menu and control ids\r
539 enum\r
540 {\r
541     TreeTest_Quit = wxID_EXIT,\r
542     TreeTest_About = wxID_ABOUT,\r
543     TreeTest_TogButtons = wxID_HIGHEST,\r
544     TreeTest_TogTwist,\r
545     TreeTest_TogLines,\r
546     TreeTest_TogEdit,\r
547     TreeTest_TogHideRoot,\r
548     TreeTest_TogRootLines,\r
549     TreeTest_TogBorder,\r
550     TreeTest_TogFullHighlight,\r
551     TreeTest_SetFgColour,\r
552     TreeTest_SetBgColour,\r
553     TreeTest_ResetStyle,\r
554     TreeTest_Highlight,\r
555     TreeTest_Dump,\r
556     TreeTest_DumpSelected,\r
557     TreeTest_Count,\r
558     TreeTest_CountRec,\r
559     TreeTest_Sort,\r
560     TreeTest_SortRev,\r
561     TreeTest_SetBold,\r
562     TreeTest_ClearBold,\r
563     TreeTest_Rename,\r
564     TreeTest_Delete,\r
565     TreeTest_DeleteChildren,\r
566     TreeTest_DeleteAll,\r
567     TreeTest_Recreate,\r
568     TreeTest_ToggleImages,\r
569     TreeTest_ToggleButtons,\r
570     TreeTest_SetImageSize,\r
571     TreeTest_ToggleSel,\r
572     TreeTest_CollapseAndReset,\r
573     TreeTest_EnsureVisible,\r
574     TreeTest_AddItem,\r
575     TreeTest_InsertItem,\r
576     TreeTest_IncIndent,\r
577     TreeTest_DecIndent,\r
578     TreeTest_IncSpacing,\r
579     TreeTest_DecSpacing,\r
580     TreeTest_ToggleIcon,\r
581     TreeTest_Select,\r
582     TreeTest_Unselect,\r
583     TreeTest_SelectRoot,\r
584     TreeTest_Ctrl = 1000,\r
585         BOTTOM_NOTEBOOK_ID,\r
586         LEFT_NOTEBOOK_ID\r
587 };\r
588 \r
589 class OPJEncoThread : public wxThread\r
590 {\r
591 public:\r
592     OPJEncoThread(OPJCanvas *canvas);\r
593 \r
594     // thread execution starts here\r
595     virtual void *Entry();\r
596 \r
597     // called when the thread exits - whether it terminates normally or is\r
598     // stopped with Delete() (but not when it is Kill()ed!)\r
599     virtual void OnExit();\r
600 \r
601     // write something to the text control\r
602     void WriteText(const wxString& text);\r
603 \r
604 public:\r
605     unsigned m_count;\r
606     OPJCanvas *m_canvas;\r
607 };\r
608 \r
609 class OPJDecoThread : public wxThread\r
610 {\r
611 public:\r
612     OPJDecoThread(OPJCanvas *canvas);\r
613 \r
614     // thread execution starts here\r
615     virtual void *Entry();\r
616 \r
617     // called when the thread exits - whether it terminates normally or is\r
618     // stopped with Delete() (but not when it is Kill()ed!)\r
619     virtual void OnExit();\r
620 \r
621     // write something to the text control\r
622     void WriteText(const wxString& text);\r
623 \r
624 public:\r
625     unsigned m_count;\r
626     OPJCanvas *m_canvas;\r
627 };\r
628 \r
629 class OPJParseThread : public wxThread\r
630 {\r
631 public:\r
632     OPJParseThread(OPJMarkerTree *tree, wxTreeItemId parentid = 0x00);\r
633 \r
634     // thread execution starts here\r
635     virtual void *Entry();\r
636 \r
637     // called when the thread exits - whether it terminates normally or is\r
638     // stopped with Delete() (but not when it is Kill()ed!)\r
639     virtual void OnExit();\r
640 \r
641     // write something to the text control\r
642     void WriteText(const wxString& text);\r
643         void LoadFile(wxFileName fname);\r
644         void ParseJ2KFile(wxFile *m_file, wxFileOffset offset, wxFileOffset length, wxTreeItemId parentid);\r
645         void ParseJP2File(wxFile *fileid, wxFileOffset filepoint, wxFileOffset filelimit, wxTreeItemId parentid);\r
646 \r
647     unsigned m_count;\r
648     OPJMarkerTree *m_tree;\r
649         wxTreeItemId m_parentid;\r
650 \r
651 private:\r
652         int jpeg2000parse(wxFile *fileid, wxFileOffset filepoint, wxFileOffset filelimit,\r
653                         wxTreeItemId parentid, int level, char *scansign, unsigned long int *scanpoint);\r
654         int box_handler_function(int boxtype, wxFile *fileid, wxFileOffset filepoint, wxFileOffset filelimit,\r
655                         wxTreeItemId parentid, int level, char *scansign, unsigned long int *scanpoint);\r
656 \r
657 };\r
658 \r
659 \r
660 // Drag and drop files target\r
661 class OPJDnDFile: public wxFileDropTarget\r
662 {\r
663 public:\r
664     OPJDnDFile(OPJFrame *pOwner) { m_pOwner = pOwner; }\r
665     virtual bool OnDropFiles(wxCoord x, wxCoord y, const wxArrayString& filenames);\r
666 \r
667 private:\r
668     OPJFrame *m_pOwner;\r
669 };\r
670 \r
671 \r
672 \r
673 // Property sheet dialog: encoder\r
674 class OPJEncoderDialog: public wxPropertySheetDialog\r
675 {\r
676 DECLARE_CLASS(OPJEncoderDialog)\r
677 public:\r
678     OPJEncoderDialog(wxWindow* parent, int dialogType);\r
679     ~OPJEncoderDialog();\r
680 \r
681         wxBookCtrlBase* m_settingsNotebook;\r
682 \r
683     wxPanel* CreateMainSettingsPage(wxWindow* parent);\r
684     wxPanel* CreatePart1_1SettingsPage(wxWindow* parent);\r
685     wxPanel* CreatePart1_2SettingsPage(wxWindow* parent);\r
686 /*    wxPanel* CreatePart3SettingsPage(wxWindow* parent);*/\r
687         void OnEnableComm(wxCommandEvent& event);\r
688         void OnEnableIdx(wxCommandEvent& event);\r
689         void OnEnablePoc(wxCommandEvent& event);\r
690         void OnRadioQualityRate(wxCommandEvent& event);\r
691 #ifdef USE_JPWL\r
692         void OnEnableJPWL(wxCommandEvent& event);\r
693         wxPanel* CreatePart11SettingsPage(wxWindow* parent);\r
694         /*wxCheckBox *m_enablejpwlCheck;*/\r
695         wxChoice *m_hprotChoice[MYJPWL_MAX_NO_TILESPECS];\r
696         wxSpinCtrl *m_htileCtrl[MYJPWL_MAX_NO_TILESPECS];\r
697         wxChoice *m_pprotChoice[MYJPWL_MAX_NO_TILESPECS];\r
698         wxSpinCtrl *m_ptileCtrl[MYJPWL_MAX_NO_TILESPECS];\r
699         wxSpinCtrl *m_ppackCtrl[MYJPWL_MAX_NO_TILESPECS];\r
700         wxChoice *m_sensiChoice[MYJPWL_MAX_NO_TILESPECS];\r
701         wxSpinCtrl *m_stileCtrl[MYJPWL_MAX_NO_TILESPECS];\r
702         void OnHprotSelect(wxCommandEvent& event);\r
703         void OnPprotSelect(wxCommandEvent& event);\r
704         void OnSensiSelect(wxCommandEvent& event);\r
705 #endif // USE_JPWL\r
706 \r
707         wxTextCtrl *m_subsamplingCtrl, *m_originCtrl, *m_rateCtrl, *m_commentCtrl;\r
708         wxRadioButton *m_rateRadio, *m_qualityRadio;\r
709         wxTextCtrl *m_indexCtrl, *m_qualityCtrl, *m_cbsizeCtrl, *m_prsizeCtrl, *m_pocCtrl;\r
710         wxTextCtrl *m_tsizeCtrl, *m_toriginCtrl;\r
711         wxRadioBox *progressionBox;\r
712         wxCheckBox *m_enablecommCheck, *m_enableidxCheck, *m_mctCheck, *m_irrevCheck;\r
713         wxCheckBox *m_sopCheck, *m_ephCheck, *m_enablebypassCheck, *m_enableresetCheck,\r
714                 *m_enablerestartCheck, *m_enablevscCheck, *m_enableertermCheck, *m_enablesegmarkCheck;\r
715         wxCheckBox *m_enablepocCheck, *m_enablejpwlCheck;\r
716         wxSpinCtrl *m_resolutionsCtrl;\r
717 \r
718 protected:\r
719 \r
720     enum {\r
721                 OPJENCO_ENABLEJPWL = 100,\r
722                 OPJENCO_RATEFACTOR,\r
723                 OPJENCO_RATERADIO,\r
724                 OPJENCO_QUALITYFACTOR,\r
725                 OPJENCO_QUALITYRADIO,\r
726                 OPJENCO_RESNUMBER,\r
727                 OPJENCO_CODEBLOCKSIZE,\r
728                 OPJENCO_PRECINCTSIZE,\r
729                 OPJENCO_TILESIZE,\r
730                 OPJENCO_PROGRESSION,\r
731                 OPJENCO_SUBSAMPLING,\r
732                 OPJENCO_ENABLESOP,\r
733                 OPJENCO_ENABLEEPH,\r
734                 OPJENCO_ENABLEBYPASS,\r
735                 OPJENCO_ENABLERESET,\r
736                 OPJENCO_ENABLERESTART,\r
737                 OPJENCO_ENABLEVSC,\r
738                 OPJENCO_ENABLEERTERM,\r
739                 OPJENCO_ENABLESEGMARK,\r
740                 OPJENCO_ENABLEPOC,\r
741                 OPJENCO_ROICOMP,\r
742                 OPJENCO_ROISHIFT,\r
743                 OPJENCO_IMORIG,\r
744                 OPJENCO_TILORIG,\r
745                 OPJENCO_ENABLEMCT,\r
746                 OPJENCO_ENABLEIRREV,\r
747                 OPJENCO_ENABLEINDEX,\r
748                 OPJENCO_INDEXNAME,\r
749                 OPJENCO_POCSPEC,\r
750                 OPJENCO_ENABLECOMM,\r
751                 OPJENCO_COMMENTTEXT,\r
752                 OPJENCO_HPROT,\r
753                 OPJENCO_HTILE,\r
754                 OPJENCO_PPROT,\r
755                 OPJENCO_PTILE,\r
756                 OPJENCO_PPACK,\r
757                 OPJENCO_SENSI,\r
758                 OPJENCO_STILE\r
759     };\r
760 \r
761 DECLARE_EVENT_TABLE()\r
762 };\r
763 \r
764 // Property sheet dialog: decoder\r
765 class OPJDecoderDialog: public wxPropertySheetDialog\r
766 {\r
767 DECLARE_CLASS(OPJDecoderDialog)\r
768 public:\r
769     OPJDecoderDialog(wxWindow* parent, int dialogType);\r
770     ~OPJDecoderDialog();\r
771 \r
772         wxBookCtrlBase* m_settingsNotebook;\r
773         wxCheckBox *m_enabledecoCheck, *m_enableparseCheck;\r
774         wxSpinCtrl *m_reduceCtrl, *m_layerCtrl, *m_numcompsCtrl;\r
775         wxRadioBox* m_resizeBox;\r
776 \r
777         void OnEnableDeco(wxCommandEvent& event);\r
778 \r
779     wxPanel* CreateMainSettingsPage(wxWindow* parent);\r
780     wxPanel* CreatePart1SettingsPage(wxWindow* parent);\r
781     wxPanel* CreatePart3SettingsPage(wxWindow* parent);\r
782 #ifdef USE_JPWL\r
783         void OnEnableJPWL(wxCommandEvent& event);\r
784     wxPanel* CreatePart11SettingsPage(wxWindow* parent);\r
785         wxSpinCtrl *m_expcompsCtrl, *m_framenumCtrl, *m_maxtilesCtrl;\r
786         wxCheckBox *m_enablejpwlCheck;\r
787 #endif // USE_JPWL\r
788 \r
789 \r
790 protected:\r
791 \r
792     enum {\r
793                 OPJDECO_RESMETHOD = 100,\r
794                 OPJDECO_REDUCEFACTOR,\r
795                 OPJDECO_QUALITYLAYERS,\r
796                 OPJDECO_NUMCOMPS,\r
797                 OPJDECO_ENABLEDECO,\r
798                 OPJDECO_ENABLEPARSE,\r
799                 OPJDECO_ENABLEJPWL,\r
800                 OPJDECO_EXPCOMPS,\r
801                 OPJDECO_MAXTILES,\r
802                 OPJDECO_FRAMENUM\r
803     };\r
804 \r
805 DECLARE_EVENT_TABLE()\r
806 };\r
807 \r
808 #endif //__OPJ_VIEWER_H__\r
809 \r
810 \r
811 \r