2 * Copyright (c) 2007, Digital Signal Processing Laboratory, Universit� degli studi di Perugia (UPG), Italy
\r
3 * All rights reserved.
\r
5 * Redistribution and use in source and binary forms, with or without
\r
6 * modification, are permitted provided that the following conditions
\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
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
26 /////////////////////////////////////////////////////////////////////////////
\r
28 // Purpose: Layout window/sash sample
\r
29 // Author: Julian Smart
\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
38 // Purpose: wxTreeCtrl sample
\r
39 // Author: Julian Smart
\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
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
57 #ifndef __OPJ_VIEWER_H__
\r
58 #define __OPJ_VIEWER_H__
\r
60 // For compilers that support precompilation, includes "wx/wx.h".
\r
61 #include "wx/wxprec.h"
\r
72 #include "wx/toolbar.h"
\r
73 #include "wx/laywin.h"
\r
74 #include "wx/treectrl.h"
\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
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
91 #include "wx/propdlg.h"
\r
92 #include "wx/spinctrl.h"
\r
95 #include "wx/wxhtml.h"
\r
96 #include "wx/statline.h"
\r
97 #include <wx/fs_mem.h>
\r
99 #include <wx/imaglist.h>
\r
101 #include "wx/toolbar.h"
\r
102 #include "wx/artprov.h"
\r
104 #include "libopenjpeg/openjpeg.h"
\r
106 //#include "imagj2k.h"
\r
107 //#include "imagjp2.h"
\r
108 //#include "imagmj2.h"
\r
109 #include "imagjpeg2000.h"
\r
111 #include "imagmxf.h"
\r
115 typedef unsigned __int64 int8byte;
\r
116 #endif // __WXMSW__
\r
119 typedef unsigned long long int8byte;
\r
120 #endif // __WXGTK__
\r
122 #define USE_GENERIC_TREECTRL 0
\r
123 #define USE_PENCIL_ON_CANVAS 0
\r
125 #if USE_GENERIC_TREECTRL
\r
126 #include "wx/generic/treectlg.h"
\r
128 #define wxTreeCtrl wxGenericTreeCtrl
\r
129 #define sm_classwxTreeCtrl sm_classwxGenericTreeCtrl
\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
141 #define OPJ_APPLICATION_PLATFORM wxT("Windows")
\r
145 #define OPJ_APPLICATION_PLATFORM wxT("Linux")
\r
148 #define OPJ_FRAME_WIDTH 800
\r
149 #define OPJ_FRAME_HEIGHT 600
\r
151 #define OPJ_BROWSER_WIDTH 300
\r
152 #define OPJ_PEEKER_HEIGHT 130
\r
154 #define OPJ_CANVAS_BORDER 10
\r
155 #define OPJ_CANVAS_COLOUR *wxWHITE
\r
161 //#define MYJPWL_MAX_NO_TILESPECS JPWL_MAX_NO_TILESPECS
\r
162 #define MYJPWL_MAX_NO_TILESPECS 4
\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
173 //////////////////////////////////
\r
174 // this is our main application //
\r
175 //////////////////////////////////
\r
176 class OPJViewerApp: public wxApp
\r
178 // public methods and variables
\r
181 // class constructor
\r
182 OPJViewerApp() { m_showImages = true; m_showButtons = false; }
\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
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
195 // crit section protects access to all of the arrays below
\r
196 wxCriticalSection m_deco_critsect, m_parse_critsect, m_enco_critsect;
\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
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
205 // the list of all filenames written in the command line
\r
206 wxArrayString m_filelist;
\r
208 // displaying engine parameters
\r
209 int m_resizemethod;
\r
211 // decoding engine parameters
\r
212 bool m_enabledeco, m_enableparse;
\r
213 int m_reducefactor, m_qualitylayers, m_components, m_framenum;
\r
215 bool m_enablejpwl, m_enablejpwle;
\r
216 int m_expcomps, m_maxtiles;
\r
217 int m_framewidth, m_frameheight;
\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
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
235 // some layout settings
\r
236 bool m_showtoolbar, m_showbrowser, m_showpeeker;
\r
237 int m_browserwidth, m_peekerheight;
\r
239 // application configuration
\r
240 wxConfig *OPJconfig;
\r
242 // private methods and variables
\r
244 bool m_showImages, m_showButtons;
\r
248 DECLARE_APP(OPJViewerApp)
\r
250 ///////////////////////////////////////////
\r
251 // this canvas is used to draw the image //
\r
252 ///////////////////////////////////////////
\r
253 class OPJCanvas: public wxScrolledWindow
\r
255 // public methods and variables
\r
258 // class constructor
\r
259 OPJCanvas(wxFileName fname, wxWindow *parent, const wxPoint& pos, const wxSize& size);
\r
261 virtual void OnDraw(wxDC& dc);
\r
262 void OnEvent(wxMouseEvent& event);
\r
263 void WriteText(const wxString& text) {
\r
267 wxLogMessage(text);
\r
273 void OnThreadSignal(wxCommandEvent& event);
\r
275 OPJDecoThread *CreateDecoThread(void);
\r
276 OPJEncoThread *CreateEncoThread(void);
\r
279 OPJChildFrame *m_childframe;
\r
281 wxBitmap m_image, m_image100;
\r
282 wxFileName m_fname, m_savename;
\r
285 DECLARE_EVENT_TABLE()
\r
288 ///////////////////////////////////////////////////
\r
289 // the data associated to each tree leaf or node //
\r
290 ///////////////////////////////////////////////////
\r
291 class OPJMarkerData : public wxTreeItemData
\r
293 // public methods and variables
\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
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
305 // private methods and variables
\r
307 wxString m_filestring;
\r
311 class OPJMarkerTree : public wxTreeCtrl
\r
317 TreeCtrlIcon_FileSelected,
\r
318 TreeCtrlIcon_Folder,
\r
319 TreeCtrlIcon_FolderSelected,
\r
320 TreeCtrlIcon_FolderOpened
\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
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
331 wxFileName m_fname;
\r
332 wxTextCtrl *m_peektextCtrl;
\r
333 OPJChildFrame *m_childframe;
\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
360 void CreateImageList(int size = 16);
\r
361 void CreateButtonsImageList(int size = 11);
\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
370 int ImageSize(void) const { return m_imageSize; }
\r
372 void SetLastItem(wxTreeItemId id) { m_lastItem = id; }
\r
375 /*virtual int OnCompareItems(const wxTreeItemId& i1, const wxTreeItemId& i2);*/
\r
377 // is this the test item which we use in several event handlers?
\r
378 /*bool IsTestItem(const wxTreeItemId& item)
\r
380 // the test item is the first child folder
\r
381 return GetItemParent(item) == GetRootItem() && !GetPrevSibling(item);
\r
385 /*void AddItemsRecursively(const wxTreeItemId& idParent,
\r
390 void LogEvent(const wxChar *name, const wxTreeEvent& event);
\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
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
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
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
411 // Define a new frame
\r
412 class OPJFrame: public wxMDIParentFrame
\r
416 OPJFrame(wxWindow *parent, const wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, const long style);
\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
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
464 void TogStyle(int id, long flag);
\r
466 void DoSort(bool reverse = false);
\r
469 wxTextCtrl *m_textCtrl;
\r
471 void DoSetBold(bool bold = true);
\r
474 wxSashLayoutWindow* m_topWindow;
\r
475 wxSashLayoutWindow* m_leftWindow2;
\r
477 DECLARE_EVENT_TABLE()
\r
480 class OPJChildFrame: public wxMDIChildFrame
\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
492 wxFileName m_fname;
\r
495 unsigned long m_twidth, m_theight, m_tx, m_ty;
\r
497 DECLARE_EVENT_TABLE()
\r
500 // frame and main menu ids
\r
502 OPJFRAME_FILEEXIT = wxID_EXIT,
\r
503 OPJFRAME_HELPABOUT = wxID_ABOUT,
\r
505 OPJFRAME_MEMORYOPEN,
\r
506 OPJFRAME_FILESAVEAS,
\r
507 OPJFRAME_FILETOGGLEB,
\r
508 OPJFRAME_FILETOGGLEP,
\r
509 OPJFRAME_FILETOGGLET,
\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
529 OPJFRAME_BROWSEWIN = 10000,
\r
533 OPJFRAME_THREADLOGMSG,
\r
534 OPJCANVAS_THREADSIGNAL
\r
538 // menu and control ids
\r
541 TreeTest_Quit = wxID_EXIT,
\r
542 TreeTest_About = wxID_ABOUT,
\r
543 TreeTest_TogButtons = wxID_HIGHEST,
\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
556 TreeTest_DumpSelected,
\r
562 TreeTest_ClearBold,
\r
565 TreeTest_DeleteChildren,
\r
566 TreeTest_DeleteAll,
\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
575 TreeTest_InsertItem,
\r
576 TreeTest_IncIndent,
\r
577 TreeTest_DecIndent,
\r
578 TreeTest_IncSpacing,
\r
579 TreeTest_DecSpacing,
\r
580 TreeTest_ToggleIcon,
\r
583 TreeTest_SelectRoot,
\r
584 TreeTest_Ctrl = 1000,
\r
585 BOTTOM_NOTEBOOK_ID,
\r
589 class OPJEncoThread : public wxThread
\r
592 OPJEncoThread(OPJCanvas *canvas);
\r
594 // thread execution starts here
\r
595 virtual void *Entry();
\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
601 // write something to the text control
\r
602 void WriteText(const wxString& text);
\r
606 OPJCanvas *m_canvas;
\r
609 class OPJDecoThread : public wxThread
\r
612 OPJDecoThread(OPJCanvas *canvas);
\r
614 // thread execution starts here
\r
615 virtual void *Entry();
\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
621 // write something to the text control
\r
622 void WriteText(const wxString& text);
\r
626 OPJCanvas *m_canvas;
\r
629 class OPJParseThread : public wxThread
\r
632 OPJParseThread(OPJMarkerTree *tree, wxTreeItemId parentid = 0x00);
\r
634 // thread execution starts here
\r
635 virtual void *Entry();
\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
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
648 OPJMarkerTree *m_tree;
\r
649 wxTreeItemId m_parentid;
\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
660 // Drag and drop files target
\r
661 class OPJDnDFile: public wxFileDropTarget
\r
664 OPJDnDFile(OPJFrame *pOwner) { m_pOwner = pOwner; }
\r
665 virtual bool OnDropFiles(wxCoord x, wxCoord y, const wxArrayString& filenames);
\r
668 OPJFrame *m_pOwner;
\r
673 // Property sheet dialog: encoder
\r
674 class OPJEncoderDialog: public wxPropertySheetDialog
\r
676 DECLARE_CLASS(OPJEncoderDialog)
\r
678 OPJEncoderDialog(wxWindow* parent, int dialogType);
\r
679 ~OPJEncoderDialog();
\r
681 wxBookCtrlBase* m_settingsNotebook;
\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
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
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
721 OPJENCO_ENABLEJPWL = 100,
\r
722 OPJENCO_RATEFACTOR,
\r
724 OPJENCO_QUALITYFACTOR,
\r
725 OPJENCO_QUALITYRADIO,
\r
727 OPJENCO_CODEBLOCKSIZE,
\r
728 OPJENCO_PRECINCTSIZE,
\r
730 OPJENCO_PROGRESSION,
\r
731 OPJENCO_SUBSAMPLING,
\r
734 OPJENCO_ENABLEBYPASS,
\r
735 OPJENCO_ENABLERESET,
\r
736 OPJENCO_ENABLERESTART,
\r
738 OPJENCO_ENABLEERTERM,
\r
739 OPJENCO_ENABLESEGMARK,
\r
746 OPJENCO_ENABLEIRREV,
\r
747 OPJENCO_ENABLEINDEX,
\r
750 OPJENCO_ENABLECOMM,
\r
751 OPJENCO_COMMENTTEXT,
\r
761 DECLARE_EVENT_TABLE()
\r
764 // Property sheet dialog: decoder
\r
765 class OPJDecoderDialog: public wxPropertySheetDialog
\r
767 DECLARE_CLASS(OPJDecoderDialog)
\r
769 OPJDecoderDialog(wxWindow* parent, int dialogType);
\r
770 ~OPJDecoderDialog();
\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
777 void OnEnableDeco(wxCommandEvent& event);
\r
779 wxPanel* CreateMainSettingsPage(wxWindow* parent);
\r
780 wxPanel* CreatePart1SettingsPage(wxWindow* parent);
\r
781 wxPanel* CreatePart3SettingsPage(wxWindow* parent);
\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
793 OPJDECO_RESMETHOD = 100,
\r
794 OPJDECO_REDUCEFACTOR,
\r
795 OPJDECO_QUALITYLAYERS,
\r
797 OPJDECO_ENABLEDECO,
\r
798 OPJDECO_ENABLEPARSE,
\r
799 OPJDECO_ENABLEJPWL,
\r
805 DECLARE_EVENT_TABLE()
\r
808 #endif //__OPJ_VIEWER_H__
\r