// J2KOptions.cpp : implementation file // #include "stdafx.h" #include "resource.h" #include "J2KOptions.h" #ifndef Edit_SetSel #define Edit_SetSel(hwndCtl, ichStart, ichEnd) ((void)::SendMessage((hwndCtl), EM_SETSEL, (ichStart), (ichEnd))) #endif//#ifndef Edit_SetSel #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CJ2KOptions dialog CJ2KOptions::CJ2KOptions(CWnd* pParent /*=NULL*/) : CDialog(CJ2KOptions::IDD, pParent) { //{{AFX_DATA_INIT(CJ2KOptions) //}}AFX_DATA_INIT m_pDS = NULL; m_bLossless = FALSE; m_nQFactor = 2; } void CJ2KOptions::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CJ2KOptions) DDX_Control(pDX, LT_DLG_SAVE_IDCMB_J2KPROGRESSIONORDER, m_cmbProgressOrder); DDX_Control(pDX, LT_DLG_SAVE_IDCMB_J2KCOMPRESSIONCONTROL, m_CompressionCtrl); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CJ2KOptions, CDialog) //{{AFX_MSG_MAP(CJ2KOptions) ON_BN_CLICKED(LT_DLG_J2KOPTIONS_IDBTN_DEFAULT, OnDlgJ2koptionsIdbtnDefault) ON_CBN_SELCHANGE(LT_DLG_SAVE_IDCMB_J2KCOMPRESSIONCONTROL, OnSelchangeDlgSaveIdcmbJ2kcompressioncontrol) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CJ2KOptions message handlers L_VOID CJ2KOptions::FileSaveFillJ2KOptionsAdvanced( pFILEJ2KOPTIONS pJ2KOptions) { if((pJ2KOptions == NULL )|| (pJ2KOptions->uStructSize == 0)) return; CheckDlgButton(LT_DLG_J2KOPTIONS_IDCHK_SELECTIVEACBYPASS,(pJ2KOptions->CodBlockStyleFlags.bSelectiveACBypass? BST_CHECKED : BST_UNCHECKED ) ); CheckDlgButton(LT_DLG_J2KOPTIONS_IDCHK_RESETCONTEXT, (pJ2KOptions->CodBlockStyleFlags.bResetContextOnBoundaries? BST_CHECKED : BST_UNCHECKED ) ); CheckDlgButton(LT_DLG_J2KOPTIONS_IDCHK_TERMINATION, (pJ2KOptions->CodBlockStyleFlags.bTerminationOnEachPass? BST_CHECKED : BST_UNCHECKED ) ); CheckDlgButton(LT_DLG_J2KOPTIONS_IDCHK_VERTICALLYCAUSAL, (pJ2KOptions->CodBlockStyleFlags.bVerticallyCausalContext? BST_CHECKED : BST_UNCHECKED ) ); CheckDlgButton(LT_DLG_J2KOPTIONS_IDCHK_PREDICTABLETERMINATION, (pJ2KOptions->CodBlockStyleFlags.bPredictableTermination? BST_CHECKED : BST_UNCHECKED ) ); CheckDlgButton(LT_DLG_J2KOPTIONS_IDCHK_ERRORRESILIENCE, (pJ2KOptions->CodBlockStyleFlags.bErrorResilienceSymbol? BST_CHECKED : BST_UNCHECKED ) ); CheckDlgButton(LT_DLG_J2KOPTIONS_IDCHK_COLORTRANSFORM, (pJ2KOptions->bUseColorTransform? BST_CHECKED : BST_UNCHECKED ) ); CheckDlgButton(LT_DLG_J2KOPTIONS_IDCHK_DERIVEDQUANTIZATION, (pJ2KOptions->bDerivedQuantization? BST_CHECKED : BST_UNCHECKED ) ); CheckDlgButton(LT_DLG_J2KOPTIONS_IDCHK_USESOPMARKER, (pJ2KOptions->bUseSOPMarker? BST_CHECKED : BST_UNCHECKED ) ); CheckDlgButton(LT_DLG_J2KOPTIONS_IDCHK_USEEPHMARKER, (pJ2KOptions->bUseEPHMarker? BST_CHECKED : BST_UNCHECKED ) ); SetDlgItemInt (LT_DLG_J2KOPTIONS_IDEDT_XOSIZ ,pJ2KOptions->uXOsiz); SetDlgItemInt (LT_DLG_J2KOPTIONS_IDEDT_YOSIZ ,pJ2KOptions->uYOsiz); SetDlgItemInt (LT_DLG_J2KOPTIONS_IDEDT_XTSIZ ,pJ2KOptions->uXTsiz); SetDlgItemInt (LT_DLG_J2KOPTIONS_IDEDT_YTSIZ ,pJ2KOptions->uYTsiz); SetDlgItemInt (LT_DLG_J2KOPTIONS_IDEDT_XTOSIZ ,pJ2KOptions->uXTOsiz); SetDlgItemInt (LT_DLG_J2KOPTIONS_IDEDT_YTOSIZ ,pJ2KOptions->uYTOsiz); SetDlgItemInt (LT_DLG_J2KOPTIONS_IDEDT_DECOMPLEVEL ,pJ2KOptions->uDecompLevel); SetDlgItemInt (LT_DLG_J2KOPTIONS_IDEDT_GUARDBITS ,pJ2KOptions->uGuardBits); SetDlgItemInt (LT_DLG_J2KOPTIONS_IDEDT_MANTISSA ,pJ2KOptions->nDerivedBaseMantissa); SetDlgItemInt (LT_DLG_J2KOPTIONS_IDEDT_EXPONENT ,pJ2KOptions->nDerivedBaseExponent); SetDlgItemInt (LT_DLG_J2KOPTIONS_IDEDT_CODEBLOCKWIDTH ,pJ2KOptions->nCodBlockWidth); SetDlgItemInt (LT_DLG_J2KOPTIONS_IDEDT_CODEBLOCKHEIGHT ,pJ2KOptions->nCodBlockHeight); SetDlgItemInt (LT_DLG_SAVE_IDEDT_J2KTARGETSIZE ,pJ2KOptions->uTargetFileSize); SetDlgItemInt (LT_DLG_SAVE_IDEDT_QFACTOR ,m_nQFactor); CString strTemp; strTemp.Format("%f",pJ2KOptions->fCompressionRatio); SetDlgItemText(LT_DLG_SAVE_IDEDT_J2KCOMPRESSIONRATIO ,(LPCSTR)strTemp); switch(pJ2KOptions->uCompressionControl) { case J2K_COMPRESSION_RATIO: m_CompressionCtrl.SetCurSel(0); ShowHideCompressionFields(0); break; case J2K_COMPRESSION_TARGETSIZE: m_CompressionCtrl.SetCurSel(1); ShowHideCompressionFields(1); break; case J2K_COMPRESSION_QFACTOR : m_CompressionCtrl.SetCurSel(2); ShowHideCompressionFields(2); break; } switch(pJ2KOptions->uProgressOrder) { case J2K_LAYER_RESOLUTION_COMPONENT_POSITION : m_cmbProgressOrder.SetCurSel(0); break; case J2K_RESOLUTION_LAYER_COMPONENT_POSITION : m_cmbProgressOrder.SetCurSel(1); break; case J2K_RESOLUTION_POSITION_COMPONENT_LAYER : m_cmbProgressOrder.SetCurSel(2); break; case J2K_POSITION_COMPONENT_RESOLUTION_LAYER : m_cmbProgressOrder.SetCurSel(3); break; case J2K_COMPONENT_POSITION_RESOLUTION_LAYER : m_cmbProgressOrder.SetCurSel(4); break; } } BOOL CJ2KOptions::OnInitDialog() { if(m_pDS == NULL) return TRUE; CDialog::OnInitDialog(); FILEJ2KOPTIONS FileJ2KOptions; FileJ2KOptions.uStructSize =0; for(int i = 0 ; i < SIZE_OF_ARRAY(J2KCompressionStrings);i++) { m_CompressionCtrl.AddString(J2KCompressionStrings[i]); } for(i = 0 ; i < SIZE_OF_ARRAY(J2KProgressingOrders);i++) { m_cmbProgressOrder.AddString(J2KProgressingOrders[i]); } m_pDS->GetJ2KOptions(&FileJ2KOptions, sizeof(FILEJ2KOPTIONS)); FileSaveFillJ2KOptionsAdvanced (&FileJ2KOptions); if(m_bLossless) { CWnd *pWnd; pWnd = GetDlgItem(LT_DLG_SAVE_IDCMB_J2KCOMPRESSIONCONTROL); if(pWnd) { pWnd->EnableWindow(FALSE); } pWnd = GetDlgItem(LT_DLG_SAVE_IDEDT_J2KTARGETSIZE); if(pWnd) { pWnd->EnableWindow(FALSE); } pWnd = GetDlgItem(LT_DLG_SAVE_IDEDT_J2KCOMPRESSIONRATIO); if(pWnd) { pWnd->EnableWindow(FALSE); } pWnd = GetDlgItem(LT_DLG_SAVE_IDEDT_QFACTOR); if(pWnd) { pWnd->EnableWindow(FALSE); } } return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CJ2KOptions::OnDlgJ2koptionsIdbtnDefault() { FILEJ2KOPTIONS J2K_Options ; if(m_pDS == NULL) return; m_pDS->GetDefaultJ2KOptions ( &J2K_Options, sizeof( J2K_Options ) ) ; FileSaveFillJ2KOptionsAdvanced ( &J2K_Options ) ; } L_BOOL CJ2KOptions::FileSaveGetJ2KOptionsAdvanced ( pFILEJ2KOPTIONS pJ2KOptions ) { FILEJ2KOPTIONS J2KOptions; L_INT xcb, ycb; L_INT width; L_INT height; J2KOptions = *pJ2KOptions; if(!GetEditInt( LT_DLG_J2KOPTIONS_IDEDT_XOSIZ, (int *) &J2KOptions.uXOsiz, 0, 0x3FFFFFFF)) return FALSE; if(!GetEditInt(LT_DLG_J2KOPTIONS_IDEDT_YOSIZ, (int *) &J2KOptions.uYOsiz, 0, 0x3FFFFFFF)) return FALSE; if(!GetEditInt(LT_DLG_J2KOPTIONS_IDEDT_XTSIZ, (int *) &J2KOptions.uXTsiz, 0, 0x3FFFFFFF)) return FALSE; if(!GetEditInt(LT_DLG_J2KOPTIONS_IDEDT_YTSIZ, (int *) &J2KOptions.uYTsiz, 0, 0x3FFFFFFF)) return FALSE; if(!GetEditInt(LT_DLG_J2KOPTIONS_IDEDT_XTOSIZ, (int *) &J2KOptions.uXTOsiz, 0, 0x3FFFFFFF)) return FALSE; if(!GetEditInt(LT_DLG_J2KOPTIONS_IDEDT_YTOSIZ, (int *)&J2KOptions.uYTOsiz, 0, 0x3FFFFFFF)) return FALSE; if(!GetEditInt(LT_DLG_J2KOPTIONS_IDEDT_DECOMPLEVEL, (int *) &J2KOptions.uDecompLevel, 0, 32)) return FALSE; if(!GetEditInt(LT_DLG_J2KOPTIONS_IDEDT_GUARDBITS, (int *) &J2KOptions.uGuardBits, 0, 7)) return FALSE; if(!GetEditInt(LT_DLG_J2KOPTIONS_IDEDT_MANTISSA, &J2KOptions.nDerivedBaseMantissa, 0, 2047)) return FALSE; if(!GetEditInt(LT_DLG_J2KOPTIONS_IDEDT_EXPONENT, &J2KOptions.nDerivedBaseExponent, 0, 16)) return FALSE; if(!GetEditInt(LT_DLG_J2KOPTIONS_IDEDT_CODEBLOCKWIDTH, &J2KOptions.nCodBlockWidth, 2, 64)) return FALSE; if(!GetEditInt(LT_DLG_J2KOPTIONS_IDEDT_CODEBLOCKHEIGHT, &J2KOptions.nCodBlockHeight, 2, 64)) return FALSE; for (xcb=0, width = J2KOptions.nCodBlockWidth; width > (1< (1< 12)) { SelectTextAndBeep(LT_DLG_J2KOPTIONS_IDEDT_CODEBLOCKHEIGHT); return FALSE; } if ( J2KOptions.uXTOsiz > J2KOptions.uXOsiz ) { SelectTextAndBeep(LT_DLG_J2KOPTIONS_IDEDT_XTOSIZ); return FALSE; } if ( J2KOptions.uYTOsiz > J2KOptions.uYOsiz ) { SelectTextAndBeep(LT_DLG_J2KOPTIONS_IDEDT_YTOSIZ); return FALSE; } if(J2KOptions.uXOsiz > J2KOptions.uXTOsiz + J2KOptions.uXTsiz) { SelectTextAndBeep(LT_DLG_J2KOPTIONS_IDEDT_XOSIZ); return FALSE; } if(J2KOptions.uYOsiz > J2KOptions.uYTOsiz + J2KOptions.uYTsiz) { SelectTextAndBeep(LT_DLG_J2KOPTIONS_IDEDT_YOSIZ); return FALSE; } if(J2KOptions.uXTsiz < (L_UINT)(2 << J2KOptions.uDecompLevel) || J2KOptions.uYTsiz < (L_UINT)(2 << J2KOptions.uDecompLevel)) { SelectTextAndBeep(LT_DLG_J2KOPTIONS_IDEDT_DECOMPLEVEL); return FALSE; } J2KOptions.bUseColorTransform = IsDlgButtonChecked(LT_DLG_J2KOPTIONS_IDCHK_COLORTRANSFORM) ; J2KOptions.bDerivedQuantization = IsDlgButtonChecked(LT_DLG_J2KOPTIONS_IDCHK_DERIVEDQUANTIZATION) ; J2KOptions.bUseSOPMarker = IsDlgButtonChecked(LT_DLG_J2KOPTIONS_IDCHK_USESOPMARKER) ; J2KOptions.bUseEPHMarker = IsDlgButtonChecked(LT_DLG_J2KOPTIONS_IDCHK_USEEPHMARKER) ; J2KOptions.CodBlockStyleFlags.bSelectiveACBypass = IsDlgButtonChecked(LT_DLG_J2KOPTIONS_IDCHK_SELECTIVEACBYPASS) ; J2KOptions.CodBlockStyleFlags.bResetContextOnBoundaries = IsDlgButtonChecked(LT_DLG_J2KOPTIONS_IDCHK_RESETCONTEXT) ; J2KOptions.CodBlockStyleFlags.bTerminationOnEachPass = IsDlgButtonChecked(LT_DLG_J2KOPTIONS_IDCHK_TERMINATION) ; J2KOptions.CodBlockStyleFlags.bVerticallyCausalContext = IsDlgButtonChecked(LT_DLG_J2KOPTIONS_IDCHK_VERTICALLYCAUSAL) ; J2KOptions.CodBlockStyleFlags.bPredictableTermination = IsDlgButtonChecked(LT_DLG_J2KOPTIONS_IDCHK_PREDICTABLETERMINATION) ; J2KOptions.CodBlockStyleFlags.bErrorResilienceSymbol = IsDlgButtonChecked(LT_DLG_J2KOPTIONS_IDCHK_ERRORRESILIENCE) ; J2KOptions.uCompressionControl = (J2KCOMPRESSIONCONTROL)(m_CompressionCtrl.GetCurSel()+1); J2KOptions.uProgressOrder = (m_cmbProgressOrder.GetCurSel()); J2KOptions.uTargetFileSize = GetDlgItemInt (LT_DLG_SAVE_IDEDT_J2KTARGETSIZE); m_nQFactor = GetDlgItemInt (LT_DLG_SAVE_IDEDT_QFACTOR); CWnd * pWnd = GetDlgItem(LT_DLG_SAVE_IDEDT_J2KCOMPRESSIONRATIO); if(pWnd) { CString strTemp; pWnd->GetWindowText(strTemp); if(strTemp.GetLength() > 0) { J2KOptions.fCompressionRatio = (L_FLOAT )atof(((char *)(LPCSTR)strTemp)); if(J2KOptions.fCompressionRatio < 1.0) { J2KOptions.fCompressionRatio = 15.0f; } } else { J2KOptions.fCompressionRatio = 15.0f; } } *pJ2KOptions = J2KOptions; return TRUE; } L_BOOL CJ2KOptions::GetEditInt ( L_INT nID, L_INT L_FAR* pVal, L_INT nMinVal, L_INT nMaxVal ) { *pVal = GetDlgItemInt(nID); if(*pVal < nMinVal || *pVal > nMaxVal) { SelectTextAndBeep(nID); return FALSE; } return TRUE; } L_VOID CJ2KOptions::SelectTextAndBeep ( L_INT nID ) { Edit_SetSel(GetDlgItem(nID)->m_hWnd, 0, -1); GetDlgItem(nID)->SetFocus(); MessageBeep(0); } void CJ2KOptions::OnSelchangeDlgSaveIdcmbJ2kcompressioncontrol() { int nCursel = m_CompressionCtrl.GetCurSel(); if(nCursel != CB_ERR ) { ShowHideCompressionFields(nCursel); } } L_VOID CJ2KOptions::ShowHideCompressionFields(L_INT nIndex) { CWnd *pWnd; switch(nIndex) { //Compression Ratio case 0: pWnd = GetDlgItem(LT_DLG_SAVE_IDEDT_J2KTARGETSIZE); if(pWnd ) { pWnd->ShowWindow(SW_HIDE); } pWnd = GetDlgItem(LT_DLG_SAVE_IDSTC_J2KTARGETSIZE); if(pWnd ) { pWnd->ShowWindow(SW_HIDE); } pWnd = GetDlgItem(LT_DLG_SAVE_IDSTC_J2KCOMPRESSIONRATIO); if(pWnd ) { pWnd->ShowWindow(SW_SHOW); } pWnd = GetDlgItem(LT_DLG_SAVE_IDEDT_J2KCOMPRESSIONRATIO); if(pWnd ) { pWnd->ShowWindow(SW_SHOW); } pWnd = GetDlgItem(LT_DLG_SAVE_IDEDT_QFACTOR); if(pWnd ) { pWnd->ShowWindow(SW_HIDE); } pWnd = GetDlgItem(LT_DLG_SAVE_IDSTC_QFACTOR); if(pWnd ) { pWnd->ShowWindow(SW_HIDE); } break; //Target File Size case 1: pWnd = GetDlgItem(LT_DLG_SAVE_IDEDT_J2KTARGETSIZE); if(pWnd ) { pWnd->ShowWindow(SW_SHOW); } pWnd = GetDlgItem(LT_DLG_SAVE_IDSTC_J2KTARGETSIZE); if(pWnd ) { pWnd->ShowWindow(SW_SHOW); } pWnd = GetDlgItem(LT_DLG_SAVE_IDSTC_J2KCOMPRESSIONRATIO); if(pWnd ) { pWnd->ShowWindow(SW_HIDE); } pWnd = GetDlgItem(LT_DLG_SAVE_IDEDT_J2KCOMPRESSIONRATIO); if(pWnd ) { pWnd->ShowWindow(SW_HIDE); } pWnd = GetDlgItem(LT_DLG_SAVE_IDEDT_QFACTOR); if(pWnd ) { pWnd->ShowWindow(SW_HIDE); } pWnd = GetDlgItem(LT_DLG_SAVE_IDSTC_QFACTOR); if(pWnd ) { pWnd->ShowWindow(SW_HIDE); } break; //Use QFactor case 2: pWnd = GetDlgItem(LT_DLG_SAVE_IDEDT_J2KTARGETSIZE); if(pWnd ) { pWnd->ShowWindow(SW_HIDE); } pWnd = GetDlgItem(LT_DLG_SAVE_IDSTC_J2KTARGETSIZE); if(pWnd ) { pWnd->ShowWindow(SW_HIDE); } pWnd = GetDlgItem(LT_DLG_SAVE_IDSTC_J2KCOMPRESSIONRATIO); if(pWnd ) { pWnd->ShowWindow(SW_HIDE); } pWnd = GetDlgItem(LT_DLG_SAVE_IDEDT_J2KCOMPRESSIONRATIO); if(pWnd ) { pWnd->ShowWindow(SW_HIDE); } pWnd = GetDlgItem(LT_DLG_SAVE_IDEDT_QFACTOR); if(pWnd ) { pWnd->ShowWindow(SW_SHOW); } pWnd = GetDlgItem(LT_DLG_SAVE_IDSTC_QFACTOR); if(pWnd ) { pWnd->ShowWindow(SW_SHOW); } break; } } void CJ2KOptions::OnOK() { FILEJ2KOPTIONS FileJ2KOptions; memset(&FileJ2KOptions,0,sizeof(FILEJ2KOPTIONS)); FileJ2KOptions.uStructSize = sizeof(FILEJ2KOPTIONS); if(!FileSaveGetJ2KOptionsAdvanced ( &FileJ2KOptions)) { return; } m_pDS->SetJ2KOptions(&FileJ2KOptions); CDialog::OnOK(); }