Improved success for the linux build; OPJViewer shows all the COM contents
[openjpeg.git] / OPJViewer / source / OPJViewer.h
index 7757ec73b81eba7792634d8a77ce69de8bfb2348..d861fac59b5329fb08c0048a4fe6a6eb4e4d9cc7 100644 (file)
@@ -98,6 +98,9 @@
 \r
 #include <wx/imaglist.h>\r
 \r
+#include "wx/toolbar.h"\r
+#include "wx/artprov.h"\r
+\r
 #include "libopenjpeg/openjpeg.h"\r
 \r
 #include "imagj2k.h"\r
@@ -128,6 +131,7 @@ typedef unsigned long long int8byte;
 #define OPJ_APPLICATION_VERSION                wxT("0.3 alpha")\r
 #define OPJ_APPLICATION_TITLEBAR       OPJ_APPLICATION_NAME wxT(" ") OPJ_APPLICATION_VERSION\r
 #define OPJ_APPLICATION_COPYRIGHT      wxT("(C) 2007, Giuseppe Baruffa")\r
+#define OPJ_APPLICATION_VENDOR      wxT("OpenJPEG")\r
 \r
 #ifdef __WXMSW__\r
 #define OPJ_APPLICATION_PLATFORM    wxT("Windows")\r
@@ -137,10 +141,17 @@ typedef unsigned long long int8byte;
 #define OPJ_APPLICATION_PLATFORM    wxT("Linux")\r
 #endif\r
 \r
+#define OPJ_FRAME_WIDTH   800\r
+#define OPJ_FRAME_HEIGHT  600\r
+\r
+#define OPJ_BROWSER_WIDTH 300\r
+#define OPJ_PEEKER_HEIGHT 130\r
+\r
 #define OPJ_CANVAS_BORDER 10\r
 #define OPJ_CANVAS_COLOUR *wxWHITE\r
 \r
 class OPJDecoThread;\r
+class OPJEncoThread;\r
 class OPJParseThread;\r
 WX_DEFINE_ARRAY_PTR(wxThread *, wxArrayThread);\r
 class OPJChildFrame;\r
@@ -158,23 +169,24 @@ class OPJViewerApp: public wxApp
 \r
                // other methods\r
                bool OnInit(void);\r
+               int OnExit(void);\r
                void SetShowImages(bool show) { m_showImages = show; }\r
                bool ShowImages() const { return m_showImages; }\r
                void ShowCmdLine(const wxCmdLineParser& parser);\r
 \r
                // all the threads currently alive - as soon as the thread terminates, it's\r
                // removed from the array\r
-               wxArrayThread m_deco_threads, m_parse_threads;\r
+               wxArrayThread m_deco_threads, m_parse_threads, m_enco_threads;\r
 \r
                // crit section protects access to all of the arrays below\r
-               wxCriticalSection m_deco_critsect, m_parse_critsect;\r
+               wxCriticalSection m_deco_critsect, m_parse_critsect, m_enco_critsect;\r
 \r
                // semaphore used to wait for the threads to exit, see OPJFrame::OnQuit()\r
-               wxSemaphore m_deco_semAllDone, m_parse_semAllDone;\r
+               wxSemaphore m_deco_semAllDone, m_parse_semAllDone, m_enco_semAllDone;\r
 \r
                // the last exiting thread should post to m_semAllDone if this is true\r
                // (protected by the same m_critsect)\r
-               bool m_deco_waitingUntilAllDone, m_parse_waitingUntilAllDone;\r
+               bool m_deco_waitingUntilAllDone, m_parse_waitingUntilAllDone, m_enco_waitingUntilAllDone;\r
 \r
                // the list of all filenames written in the command line\r
                wxArrayString m_filelist;\r
@@ -183,13 +195,27 @@ class OPJViewerApp: public wxApp
                int m_resizemethod;\r
 \r
                // decoding engine parameters\r
-               bool m_enabledeco;\r
+               bool m_enabledeco, m_enableparse;\r
                int m_reducefactor, m_qualitylayers, m_components, m_framenum;\r
 #ifdef USE_JPWL\r
                bool m_enablejpwl;\r
                int m_expcomps, m_maxtiles;\r
+               int m_framewidth, m_frameheight;\r
 #endif // USE_JPWL\r
 \r
+               // encoding engine parameters\r
+               wxString m_subsampling, m_origin, m_rates, m_comment, m_index, m_quality;\r
+               wxString m_cbsize, m_prsize, m_tsize, m_torigin;\r
+               bool m_enablecomm, m_enableidx, m_irreversible, m_enablesop, m_enableeph;\r
+               int m_resolutions;\r
+\r
+               // some layout settings\r
+               bool m_showtoolbar, m_showbrowser, m_showpeeker;\r
+               int m_browserwidth, m_peekerheight;\r
+\r
+               // application configuration\r
+               wxConfig *OPJconfig; \r
+\r
        // private methods and variables\r
        private:\r
                bool m_showImages, m_showButtons;\r
@@ -221,10 +247,11 @@ class OPJCanvas: public wxScrolledWindow
 #endif //__WXGTK__\r
                }\r
                OPJDecoThread *CreateDecoThread(void);\r
+               OPJEncoThread *CreateEncoThread(void);\r
                OPJChildFrame *m_childframe;\r
 \r
                wxBitmap  m_image, m_image100;\r
-               wxFileName m_fname;\r
+               wxFileName m_fname, m_savename;\r
                long m_zooml;\r
 \r
        DECLARE_EVENT_TABLE()\r
@@ -245,10 +272,10 @@ class OPJMarkerData : public wxTreeItemData
                const wxChar *GetDesc1() const { return m_desc.c_str(); }\r
                const wxChar *GetDesc2() const { return m_filestring.c_str(); }\r
                wxFileOffset m_start, m_length;\r
+               wxString m_desc;\r
 \r
        // private methods and variables\r
        private:\r
-               wxString m_desc;\r
                wxString m_filestring;\r
 };\r
 \r
@@ -364,17 +391,24 @@ class OPJFrame: public wxMDIParentFrame
        void OnSize(wxSizeEvent& WXUNUSED(event));\r
     void OnAbout(wxCommandEvent& WXUNUSED(event));\r
     void OnFileOpen(wxCommandEvent& WXUNUSED(event));\r
+    void OnFileSaveAs(wxCommandEvent& WXUNUSED(event));\r
+    void OnMemoryOpen(wxCommandEvent& WXUNUSED(event));\r
     void OnQuit(wxCommandEvent& WXUNUSED(event));\r
     void OnClose(wxCommandEvent& WXUNUSED(event));\r
     void OnZoom(wxCommandEvent& WXUNUSED(event));\r
        void OnFit(wxCommandEvent& WXUNUSED(event));\r
        void OnToggleBrowser(wxCommandEvent& WXUNUSED(event));\r
        void OnTogglePeeker(wxCommandEvent& WXUNUSED(event));\r
+       void OnToggleToolbar(wxCommandEvent& WXUNUSED(event));\r
        void OnReload(wxCommandEvent& event);\r
+       void OnPrevFrame(wxCommandEvent& event);\r
+       void OnHomeFrame(wxCommandEvent& event);\r
+       void OnNextFrame(wxCommandEvent& event);\r
        void OnSetsEnco(wxCommandEvent& event);\r
        void OnSetsDeco(wxCommandEvent& event);\r
        void OnSashDrag(wxSashEvent& event);\r
        void OpenFiles(wxArrayString paths, wxArrayString filenames);\r
+       void SaveFile(wxArrayString paths, wxArrayString filenames);\r
        void OnNotebook(wxNotebookEvent& event);\r
        void Rescale(int scale, OPJChildFrame *child);\r
 \r
@@ -382,6 +416,7 @@ class OPJFrame: public wxMDIParentFrame
        OPJChildFrameHash m_childhash;\r
     wxSashLayoutWindow* markerTreeWindow;\r
     wxSashLayoutWindow* loggingWindow;\r
+       wxToolBar* tool_bar;\r
     void Resize(int number);\r
        wxNotebook *m_bookCtrl;\r
        wxNotebook *m_bookCtrlbottom;\r
@@ -429,17 +464,24 @@ enum {
        OPJFRAME_FILEEXIT = wxID_EXIT,\r
        OPJFRAME_HELPABOUT = wxID_ABOUT,\r
        OPJFRAME_FILEOPEN,\r
+       OPJFRAME_MEMORYOPEN,\r
+       OPJFRAME_FILESAVEAS,\r
        OPJFRAME_FILETOGGLEB,\r
        OPJFRAME_FILETOGGLEP,\r
+       OPJFRAME_FILETOGGLET,\r
        OPJFRAME_VIEWZOOM,\r
        OPJFRAME_VIEWFIT,\r
        OPJFRAME_VIEWRELOAD,\r
+       OPJFRAME_VIEWPREVFRAME,\r
+       OPJFRAME_VIEWHOMEFRAME,\r
+       OPJFRAME_VIEWNEXTFRAME,\r
        OPJFRAME_FILECLOSE,\r
        OPJFRAME_SETSENCO,\r
        OPJFRAME_SETSDECO,\r
 \r
        OPJFRAME_BROWSEWIN = 10000,\r
-       OPJFRAME_LOGWIN\r
+       OPJFRAME_LOGWIN,\r
+       OPJFRAME_TOOLBAR\r
 };\r
 \r
 \r
@@ -494,6 +536,26 @@ enum
        LEFT_NOTEBOOK_ID\r
 };\r
 \r
+class OPJEncoThread : public wxThread\r
+{\r
+public:\r
+    OPJEncoThread(OPJCanvas *canvas);\r
+\r
+    // thread execution starts here\r
+    virtual void *Entry();\r
+\r
+    // called when the thread exits - whether it terminates normally or is\r
+    // stopped with Delete() (but not when it is Kill()ed!)\r
+    virtual void OnExit();\r
+\r
+    // write something to the text control\r
+    void WriteText(const wxString& text);\r
+\r
+public:\r
+    unsigned m_count;\r
+    OPJCanvas *m_canvas;\r
+};\r
+\r
 class OPJDecoThread : public wxThread\r
 {\r
 public:\r
@@ -569,14 +631,23 @@ public:
        wxBookCtrlBase* m_settingsNotebook;\r
 \r
     wxPanel* CreateMainSettingsPage(wxWindow* parent);\r
-    wxPanel* CreatePart1SettingsPage(wxWindow* parent);\r
+    wxPanel* CreatePart1_1SettingsPage(wxWindow* parent);\r
+    wxPanel* CreatePart1_2SettingsPage(wxWindow* parent);\r
 /*    wxPanel* CreatePart3SettingsPage(wxWindow* parent);*/\r
 #ifdef USE_JPWL\r
        void OnEnableJPWL(wxCommandEvent& event);\r
-/*    wxPanel* CreatePart11SettingsPage(wxWindow* parent);\r
-       wxCheckBox *m_enablejpwlCheck;*/\r
+       void OnEnableComm(wxCommandEvent& event);\r
+       void OnEnableIdx(wxCommandEvent& event);\r
+       wxPanel* CreatePart11SettingsPage(wxWindow* parent);\r
+       /*wxCheckBox *m_enablejpwlCheck;*/\r
 #endif // USE_JPWL\r
 \r
+       wxTextCtrl *m_subsamplingCtrl, *m_originCtrl, *m_rateCtrl, *m_commentCtrl;\r
+       wxTextCtrl *m_indexCtrl, *m_qualityCtrl, *m_cbsizeCtrl, *m_prsizeCtrl, *m_pocCtrl;\r
+       wxTextCtrl *m_tsizeCtrl, *m_toriginCtrl;\r
+       wxCheckBox *m_enablecommCheck, *m_enableidxCheck, *m_irrevCheck, *m_sopCheck, *m_ephCheck;\r
+       wxCheckBox *m_enablepocCheck;\r
+       wxSpinCtrl *m_resolutionsCtrl;\r
 \r
 protected:\r
 \r
@@ -598,13 +669,17 @@ protected:
                OPJENCO_ENABLEVSC,\r
                OPJENCO_ENABLEERTERM,\r
                OPJENCO_ENABLESEGMARK,\r
+               OPJENCO_ENABLEPOC,\r
                OPJENCO_ROICOMP,\r
                OPJENCO_ROISHIFT,\r
                OPJENCO_IMORIG,\r
                OPJENCO_TILORIG,\r
                OPJENCO_ENABLEIRREV,\r
                OPJENCO_ENABLEINDEX,\r
-               OPJENCO_INDEXNAME\r
+               OPJENCO_INDEXNAME,\r
+               OPJENCO_POCSPEC,\r
+               OPJENCO_ENABLECOMM,\r
+               OPJENCO_COMMENTTEXT\r
     };\r
 \r
 DECLARE_EVENT_TABLE()\r
@@ -619,7 +694,7 @@ public:
     ~OPJDecoderDialog();\r
 \r
        wxBookCtrlBase* m_settingsNotebook;\r
-       wxCheckBox *m_enabledecoCheck;\r
+       wxCheckBox *m_enabledecoCheck, *m_enableparseCheck;\r
        wxSpinCtrl *m_reduceCtrl, *m_layerCtrl, *m_numcompsCtrl;\r
        wxRadioBox* m_resizeBox;\r
 \r
@@ -644,6 +719,7 @@ protected:
                OPJDECO_QUALITYLAYERS,\r
                OPJDECO_NUMCOMPS,\r
                OPJDECO_ENABLEDECO,\r
+               OPJDECO_ENABLEPARSE,\r
                OPJDECO_ENABLEJPWL,\r
                OPJDECO_EXPCOMPS,\r
                OPJDECO_MAXTILES,\r