\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
#endif // __WXGTK__\r
\r
#define USE_GENERIC_TREECTRL 0\r
+#define USE_PENCIL_ON_CANVAS 0\r
\r
#if USE_GENERIC_TREECTRL\r
#include "wx/generic/treectlg.h"\r
\r
#define OPJ_APPLICATION wxT("OPJViewer")\r
#define OPJ_APPLICATION_NAME wxT("OpenJPEG Viewer")\r
-#define OPJ_APPLICATION_VERSION wxT("0.2 alpha")\r
+#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
#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
\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
int m_resizemethod;\r
\r
// decoding engine parameters\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
#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
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
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
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
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
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
\r
\r
\r
-// Property sheet dialog\r
+// Property sheet dialog: encoder\r
+class OPJEncoderDialog: public wxPropertySheetDialog\r
+{\r
+DECLARE_CLASS(OPJEncoderDialog)\r
+public:\r
+ OPJEncoderDialog(wxWindow* parent, int dialogType);\r
+ ~OPJEncoderDialog();\r
+\r
+ wxBookCtrlBase* m_settingsNotebook;\r
+\r
+ wxPanel* CreateMainSettingsPage(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
+ 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
+ enum {\r
+ OPJENCO_ENABLEJPWL = 100,\r
+ OPJENCO_RATEFACTOR,\r
+ OPJENCO_QUALITYFACTOR,\r
+ OPJENCO_RESNUMBER,\r
+ OPJENCO_CODEBLOCKSIZE,\r
+ OPJENCO_PRECINCTSIZE,\r
+ OPJENCO_TILESIZE,\r
+ OPJENCO_PROGRESSION,\r
+ OPJENCO_SUBSAMPLING,\r
+ OPJENCO_ENABLESOP,\r
+ OPJENCO_ENABLEEPH,\r
+ OPJENCO_ENABLEBYPASS,\r
+ OPJENCO_ENABLERESET,\r
+ OPJENCO_ENABLERESTART,\r
+ 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_POCSPEC,\r
+ OPJENCO_ENABLECOMM,\r
+ OPJENCO_COMMENTTEXT\r
+ };\r
+\r
+DECLARE_EVENT_TABLE()\r
+};\r
+\r
+// Property sheet dialog: decoder\r
class OPJDecoderDialog: public wxPropertySheetDialog\r
{\r
DECLARE_CLASS(OPJDecoderDialog)\r
OPJDecoderDialog(wxWindow* parent, int dialogType);\r
~OPJDecoderDialog();\r
\r
+ wxBookCtrlBase* m_settingsNotebook;\r
+ wxCheckBox *m_enabledecoCheck, *m_enableparseCheck;\r
wxSpinCtrl *m_reduceCtrl, *m_layerCtrl, *m_numcompsCtrl;\r
wxRadioBox* m_resizeBox;\r
\r
+ void OnEnableDeco(wxCommandEvent& event);\r
+\r
wxPanel* CreateMainSettingsPage(wxWindow* parent);\r
wxPanel* CreatePart1SettingsPage(wxWindow* parent);\r
wxPanel* CreatePart3SettingsPage(wxWindow* parent);\r
OPJDECO_REDUCEFACTOR,\r
OPJDECO_QUALITYLAYERS,\r
OPJDECO_NUMCOMPS,\r
+ OPJDECO_ENABLEDECO,\r
+ OPJDECO_ENABLEPARSE,\r
OPJDECO_ENABLEJPWL,\r
OPJDECO_EXPCOMPS,\r
OPJDECO_MAXTILES,\r