home *** CD-ROM | disk | FTP | other *** search
- // saveopt.cpp : implementation file
- //
-
- #include "stdafx.h"
- #include "mfcdemo.h"
- #include "saveopt.h"
-
- #ifdef _DEBUG
- #undef THIS_FILE
- static char BASED_CODE THIS_FILE[] = __FILE__;
- #endif
-
- enum SO_FORMATS {
- SO_LEAD,
- SO_JPEG,
- SO_CALS,
- SO_FAX,
- SO_EPS,
- SO_GEM,
- SO_GIF,
- SO_IOCA,
- SO_PCT,
- SO_MAC,
- SO_MSP,
- SO_OS2,
- SO_PCX,
- SO_SUN,
- SO_TGA,
- SO_TIF,
- SO_WIN,
- SO_WFX,
- SO_WMF,
- SO_WPG,
- SO_PNG,
- SO_PSD,
- SO_RLE,
- SO_DIC_G,
- SO_DIC_C,
- SO_ICO,
- SO_CUR,
- SO_EXIF,
- #ifdef WIN32
- SO_FPX,
- SO_AWD,
- #endif
- };
-
- #define SO_1 0x0001
- #define SO_4 0x0002
- #define SO_8 0x0004
- #define SO_16 0x0008
- #define SO_24 0x0010
- #define SO_32 0x0020
- #define SO_MULTI 0x0040
- #define SO_QFACTOR 0x0080
-
-
- #define MAXFLAVORS 20
-
- typedef struct tagFLAVOR
- {
- int nType;
- char strType[32];
- UINT uFlags;
- } FLAVOR;
-
- typedef struct tagFMT
- {
- char strType[32];
- UINT uNumFlavors;
- FLAVOR aFlavors[MAXFLAVORS];
- } FMT;
-
- static char *pszLeadQ[] =
- {
- "Custom",
- "PQ1",
- "PQ2",
- "QFS",
- "QMS",
- "QS",
- "SQS",
- "SQT",
- "MCQ",
- "MC"
- };
-
- #define NUMLEADQ (sizeof(pszLeadQ) / sizeof(*pszLeadQ))
-
- static int nLeadQ[] =
- {
- 0,
- CLead::QFACTOR_PQ1,
- CLead::QFACTOR_PQ2,
- CLead::QFACTOR_QFS,
- CLead::QFACTOR_QMS,
- CLead::QFACTOR_QS,
- CLead::QFACTOR_SQS,
- CLead::QFACTOR_SQT,
- CLead::QFACTOR_MCQ,
- CLead::QFACTOR_MC
- };
-
- static char *pszLead1Q[] =
- {
- "LEAD_0",
- "LEAD_1",
- };
-
- #define NUMLEAD1Q (sizeof(pszLead1Q) / sizeof(*pszLead1Q))
-
- static int nLead1Q[] =
- {
- CLead::QFACTOR_LEAD_0,
- CLead::QFACTOR_LEAD_1,
- };
-
- FMT aFormats[] =
- {
- {
- "LEAD",
- 1,
- {
- {CLead::FILE_LEAD, "" , SO_1 | SO_8 | SO_24 | SO_QFACTOR}
- }
- },
- {
- "JPEG",
- 3,
- {
- {CLead::FILE_LEAD1JFIF, "JFIF 4:1:1", SO_8 | SO_24 | SO_QFACTOR},
- {CLead::FILE_LEAD2JFIF, "JFIF 4:2:2", SO_8 | SO_24 | SO_QFACTOR},
- {CLead::FILE_JFIF, "JFIF 4:4:4", SO_8 | SO_24 | SO_QFACTOR},
- }
- },
- {
- "CALS",
- 1,
- {
- {CLead::FILE_CALS, "", SO_1 },
- }
- },
- {
- "CCITT Fax",
- 3,
- {
- { CLead::FILE_FAX_G3_1D, "Group 3, 1D", SO_1 },
- { CLead::FILE_FAX_G3_2D, "Group 3, 2D", SO_1 },
- { CLead::FILE_FAX_G4, "Group 4", SO_1 },
- }
- },
- {
- "Encapsulated Postscript",
- 1,
- {
- { CLead::FILE_EPS, "", SO_8 },
- }
- },
- {
- "GEM Image",
- 1,
- {
- { CLead::FILE_IMG, "", SO_1 },
- }
- },
- {
- "Compuserve GIF",
- 1,
- {
- { CLead::FILE_GIF, "", SO_8 },
- }
- },
- {
- "IBM IOCA",
- 3,
- {
- { CLead::FILE_ICA_G3_1D, "Group 3, 1D", SO_1 | SO_MULTI},
- { CLead::FILE_ICA_G3_2D, "Group 3, 2D", SO_1 | SO_MULTI},
- { CLead::FILE_ICA_G4, "Group 4", SO_1 | SO_MULTI},
- }
- },
- {
- "Macintosh Picture",
- 1,
- {
- { CLead::FILE_PCT, "", SO_1 | SO_4 | SO_8 | SO_24 },
- }
- },
- {
- "MacPaint",
- 1,
- {
- { CLead::FILE_MAC, "", SO_1 },
- }
- },
- {
- "Microsoft Paint",
- 1,
- {
- { CLead::FILE_MSP, "", SO_1 },
- }
- },
- {
- "OS/2 Bitmap",
- 2,
- {
- { CLead::FILE_OS2, "Type 1", SO_1 | SO_4 | SO_8 | SO_24 },
- { CLead::FILE_OS2_2, "Type 2", SO_1 | SO_4 | SO_8 | SO_24 },
- }
- },
- {
- "ZSoft PCX",
- 1,
- {
- { CLead::FILE_PCX, "", SO_1 | SO_4 | SO_8 | SO_24 | SO_MULTI},
- }
- },
- {
- "SUN Raster",
- 1,
- {
- { CLead::FILE_RAS, "", SO_1 | SO_8 | SO_16 | SO_24 | SO_32 },
- }
- },
- {
- "Targa",
- 1,
- {
- { CLead::FILE_TGA, "", SO_8 | SO_16 | SO_24 | SO_32 },
- }
- },
- {
- "TIFF",
- 15,
- {
- { CLead::FILE_TIF, "Uncompressed", SO_1 | SO_4 | SO_8 | SO_16 | SO_24 | SO_MULTI },
- { CLead::FILE_CCITT_GROUP3_1DIM, "CCITT Group 3, 1D", SO_1 | SO_MULTI },
- { CLead::FILE_CCITT_GROUP3_2DIM, "CCITT Group 3, 2D", SO_1 | SO_MULTI },
- { CLead::FILE_CCITT_GROUP4, "CCITT Group 4", SO_1 | SO_MULTI },
- { CLead::FILE_LEAD1JTIF, "JTIF 4:1:1", SO_24 | SO_QFACTOR},
- { CLead::FILE_LEAD2JTIF, "JTIF 4:2:2", SO_24 | SO_QFACTOR},
- { CLead::FILE_JTIF, "JTIF 4:4:4", SO_24 | SO_QFACTOR},
- { CLead::FILE_TIFLZW, "LZW encoded", SO_1 | SO_4 | SO_8 | SO_16 | SO_24 | SO_MULTI },
- { CLead::FILE_TIF_CMYK, "CMYK", SO_32 | SO_MULTI },
- { CLead::FILE_TIFLZW_CMYK, "LZW encoded CMYK", SO_32 | SO_MULTI },
- { CLead::FILE_TIF_PACKBITS, "RLE encoded", SO_1 | SO_4 | SO_8 | SO_16 | SO_24 | SO_32 | SO_MULTI },
- { CLead::FILE_TIF_PACKBITS_CMYK, "RLE encoded CMYK", SO_32 | SO_MULTI },
- { CLead::FILE_TIF_YCC, "YCbCr", SO_24 | SO_MULTI },
- { CLead::FILE_TIFLZW_YCC, "LZW encoded YCbCr", SO_24 | SO_MULTI },
- { CLead::FILE_TIF_PACKBITS_YCC, "RLE encoded YCbCr", SO_24 | SO_MULTI },
- }
- },
- {
- "Windows Bitmap",
- 1,
- {
- { CLead::FILE_BMP, "", SO_1 | SO_4 | SO_8 | SO_16 | SO_24 | SO_32 },
- }
- },
- {
- "WinFax",
- 2,
- {
- { CLead::FILE_WFX_G3_1D, "Group 3, 1D", SO_1 | SO_MULTI },
- { CLead::FILE_WFX_G4, "Group 4", SO_1 | SO_MULTI },
- }
- },
- {
- "Windows Metafile",
- 1,
- {
- { CLead::FILE_WMF, "", SO_8 | SO_24 },
- }
- },
- {
- "WordPerfect",
- 1,
- {
- { CLead::FILE_WPG, "", SO_1 | SO_4 | SO_8 },
- }
- },
- {
- "Compuserve PNG",
- 1,
- {
- { CLead::FILE_PNG, "", SO_1 | SO_4 | SO_8 | SO_24 },
- }
- },
- {
- "Adobe PSD",
- 1,
- {
- { CLead::FILE_PSD, "", SO_1 | SO_8 | SO_24 },
- }
- },
- {
- "Windows RLE BMP",
- 1,
- {
- { CLead::FILE_BMP_RLE, "", SO_4 | SO_8 },
- }
- },
- {
- "DICOM (Gray)",
- 1,
- {
- { CLead::FILE_DICOM_GRAY, "", SO_8 },
- }
- },
- {
- "DICOM (Color)",
- 1,
- {
- { CLead::FILE_DICOM_COLOR, "", SO_24 },
- }
- },
- {
- "ICON",
- 1,
- {
- { CLead::FILE_WIN_ICO, "", SO_4 },
- }
- },
- {
- "CURSOR",
- 1,
- {
- { CLead::FILE_WIN_CUR, "", SO_1 },
- }
- },
- {
- "EXIF",
- 3,
- {
- { CLead::FILE_EXIF, "RGB", SO_24 },
- { CLead::FILE_EXIF_YCC, "YCC", SO_24 },
- { CLead::FILE_EXIF_JPEG, "JPEG", SO_24 | SO_QFACTOR },
- }
- },
- #ifdef WIN32
- {
- "Kodak FPX",
- 4,
- {
- { CLead::FILE_FPX, "Uncompressed", SO_8 | SO_24 },
- { CLead::FILE_FPX_SINGLE_COLOR, "Single color", SO_8 | SO_24 },
- { CLead::FILE_FPX_JPEG, "Jpeg default", SO_8 | SO_24 },
- { CLead::FILE_FPX_JPEG_QFACTOR, "Jpeg custom", SO_8 | SO_24 | SO_QFACTOR },
- }
- },
- {
- "Microsoft AWD",
- 1,
- {
- { CLead::FILE_AWD, "", SO_1 },
- }
- },
- #endif
- };
-
- #define NUMFORMATS (sizeof(aFormats) / sizeof(FMT))
-
- static CString strJPEGflavors = _T(
- "JFIF 4:1:1|"
- "JFIF 4:2:2|"
- "JFIF 4:4:4|"
- );
-
- static CString strFAXflavors = _T(
- "Group 3, 1D|"
- "Group 3, 2D|"
- "Group 4|"
- );
-
- static CString strWFXflavors = _T(
- "Group 3, 1D|"
- "Group 4|"
- );
-
- static CString strTIFflavors = _T(
- "Uncompressed|"
- "CCITT Group 3, 1D|"
- "CCITT Group 3, 2D|"
- "CCITT Group 4|"
- "JTIF 4:1:1|"
- "JTIF 4:2:2|"
- "JTIF 4:4:4|"
- "LZW encoded|"
- "CMYK|"
- "LZW encoded CMYK|"
- "RLE encoded|"
- "RLE encoded CMYK|"
- "YCC|"
- "LZW encoded YCC|"
- "RLE encoded YCC|"
- );
-
- static CString strEXIFflavors = _T(
- "Uncompressed|"
- "YCC|"
- "JPEG|"
- );
-
- static CString strFPXflavors = _T(
- "Uncompressed|"
- "Single Color|"
- "JPEG Def. QFactor|"
- "JPEG Custom QFactor|"
- );
-
-
- /////////////////////////////////////////////////////////////////////////////
- // CSaveOptDlg dialog
-
-
- CSaveOptDlg::CSaveOptDlg(CWnd* pParent /*=NULL*/)
- : CDialog(CSaveOptDlg::IDD, pParent)
- {
- //{{AFX_DATA_INIT(CSaveOptDlg)
- m_nQFactor = 0;
- m_nList = 0;
- m_nFlavor = 0;
- m_nMin = 2;
- m_nMax = 255;
- m_nStep = 1;
- m_nPage = 10;
- m_nQList = 0;
- m_nQFactor = 2;
- m_nBitsPerPixel = 1;
- m_fAppend = FALSE;
- m_nFormat = 0;
-
- //}}AFX_DATA_INIT
- }
-
-
- void CSaveOptDlg::DoDataExchange(CDataExchange* pDX)
- {
- CDialog::DoDataExchange(pDX);
- //{{AFX_DATA_MAP(CSaveOptDlg)
- DDX_Control(pDX, IDC_CHECK1, m_Check1);
- DDX_Control(pDX, IDC_STATIC5, m_Static5);
- DDX_Control(pDX, IDC_STATIC1, m_Static1);
- DDX_Control(pDX, IDC_STATIC2, m_Static2);
- DDX_Control(pDX, IDC_SCROLLBAR1, m_ScrollBar);
- DDX_Control(pDX, IDC_LIST1, m_List1);
- DDX_Control(pDX, IDC_COMBO2, m_Combo2);
- DDX_Control(pDX, IDC_COMBO1, m_Combo1);
- DDX_Text(pDX, IDC_EDIT1, m_nQFactor);
- DDV_MinMaxInt(pDX, m_nQFactor, m_nMin, m_nMax);
- //}}AFX_DATA_MAP
- }
-
-
- BEGIN_MESSAGE_MAP(CSaveOptDlg, CDialog)
- //{{AFX_MSG_MAP(CSaveOptDlg)
- ON_CBN_SELCHANGE(IDC_COMBO1, OnSelchangeCombo1)
- ON_CBN_SELCHANGE(IDC_COMBO2, OnSelchangeCombo2)
- ON_EN_CHANGE(IDC_EDIT1, OnChangeEdit1)
- ON_LBN_SELCHANGE(IDC_LIST1, OnSelchangeList1)
- ON_BN_CLICKED(IDC_RADIO1, OnRadio1)
- ON_BN_CLICKED(IDC_RADIO2, OnRadio2)
- ON_BN_CLICKED(IDC_RADIO3, OnRadio3)
- ON_BN_CLICKED(IDC_RADIO4, OnRadio4)
- ON_BN_CLICKED(IDC_RADIO5, OnRadio5)
- ON_BN_CLICKED(IDC_RADIO6, OnRadio6)
- ON_WM_HSCROLL()
- //}}AFX_MSG_MAP
- END_MESSAGE_MAP()
-
-
- /////////////////////////////////////////////////////////////////////////////
- // CSaveOptDlg message handlers
-
-
- void CSaveOptDlg::DoQChange()
- {
- UINT uFlags = aFormats[m_nList].aFlavors[m_nFlavor].uFlags;
- BOOL fEnable = FALSE;
-
- if(uFlags & SO_QFACTOR)
- {
- if(m_nList == SO_LEAD)
- {
- if(m_nBitsPerPixel != 1)
- fEnable = !m_nQList;
- }
- else
- {
- fEnable = TRUE;
- }
- }
- GetDlgItem(IDC_EDIT1)->EnableWindow(fEnable);
- m_ScrollBar.EnableWindow(fEnable);
- }
-
- void CSaveOptDlg::DoBitChange()
- {
- UINT uFlags = aFormats[m_nList].aFlavors[m_nFlavor].uFlags;
- BOOL fEnable = FALSE;
- m_Static2.EnableWindow(uFlags & SO_QFACTOR);
- if(uFlags & SO_QFACTOR)
- {
- m_nQList = 0;
- m_Combo2.ResetContent();
- if(m_nList == SO_LEAD)
- {
- fEnable = TRUE;
- if(m_nBitsPerPixel == 1)
- {
- for(int i = 0; i < NUMLEAD1Q; i++)
- m_Combo2.AddString(pszLead1Q[i]);
- }
- else
- {
- for(int i = 0; i < NUMLEADQ; i++)
- m_Combo2.AddString(pszLeadQ[i]);
- }
- m_Combo2.SetCurSel(m_nQList);
- }
- }
- m_Combo2.EnableWindow(fEnable);
- DoQChange();
- }
-
-
- int CSaveOptDlg::GetBitMatch()
- {
- UINT uFlags = aFormats[m_nList].aFlavors[m_nFlavor].uFlags;
- int nLastMatch = 0;
-
- if(uFlags & SO_32)
- {
- if(m_nBitsPerPixel == 32)
- return(m_nBitsPerPixel);
- nLastMatch = 32;
- }
- if(uFlags & SO_24)
- {
- if(m_nBitsPerPixel == 24)
- return(m_nBitsPerPixel);
- if(m_nBitsPerPixel > 24 && nLastMatch)
- return(nLastMatch);
- nLastMatch = 24;
- }
- if(uFlags & SO_16)
- {
- if(m_nBitsPerPixel == 16)
- return(m_nBitsPerPixel);
- if(m_nBitsPerPixel > 16 && nLastMatch)
- return(nLastMatch);
- nLastMatch = 16;
- }
- if(uFlags & SO_8)
- {
- if(m_nBitsPerPixel == 8)
- return(m_nBitsPerPixel);
- if(m_nBitsPerPixel > 8 && nLastMatch)
- return(nLastMatch);
- nLastMatch = 8;
- }
- if(uFlags & SO_4)
- {
- if(m_nBitsPerPixel == 4)
- return(m_nBitsPerPixel);
- if(m_nBitsPerPixel > 4 && nLastMatch)
- return(nLastMatch);
- nLastMatch = 4;
- }
- if(uFlags & SO_1)
- {
- if(m_nBitsPerPixel == 1)
- return(m_nBitsPerPixel);
- if(m_nBitsPerPixel > 1 && nLastMatch)
- return(nLastMatch);
- nLastMatch = 1;
- }
- return(nLastMatch);
- }
-
- void CSaveOptDlg::DoFlavorChange()
- {
- UINT uFlags = aFormats[m_nList].aFlavors[m_nFlavor].uFlags;
- GetDlgItem(IDC_RADIO1)->EnableWindow(uFlags & SO_1);
- GetDlgItem(IDC_RADIO2)->EnableWindow(uFlags & SO_4);
- GetDlgItem(IDC_RADIO3)->EnableWindow(uFlags & SO_8);
- GetDlgItem(IDC_RADIO4)->EnableWindow(uFlags & SO_16);
- GetDlgItem(IDC_RADIO5)->EnableWindow(uFlags & SO_24);
- GetDlgItem(IDC_RADIO6)->EnableWindow(uFlags & SO_32);
- m_Check1.EnableWindow(uFlags & SO_MULTI);
- m_nBitsPerPixel = GetBitMatch();
- CheckDlgButton (IDC_RADIO1, m_nBitsPerPixel == 1);
- CheckDlgButton (IDC_RADIO2, m_nBitsPerPixel == 4);
- CheckDlgButton (IDC_RADIO3, m_nBitsPerPixel == 8);
- CheckDlgButton (IDC_RADIO4, m_nBitsPerPixel == 16);
- CheckDlgButton (IDC_RADIO5, m_nBitsPerPixel == 24);
- CheckDlgButton (IDC_RADIO6, m_nBitsPerPixel == 32);
-
- DoBitChange();
- }
-
- void CSaveOptDlg::DoFormatChange()
- {
- UINT i;
-
- m_Combo1.ResetContent();
- m_nFlavor = 0;
-
- if(aFormats[m_nList].uNumFlavors > 1)
- {
- for(i = 0; i < aFormats[m_nList].uNumFlavors; i++)
- {
- m_Combo1.AddString(aFormats[m_nList].aFlavors[i].strType);
- }
- m_Combo1.SetCurSel(m_nFlavor);
- m_Combo1.EnableWindow(TRUE);
- }
- else
- {
- m_Combo1.EnableWindow(FALSE);
- }
- DoFlavorChange();
- }
-
-
- void CSaveOptDlg::OnSelchangeCombo1()
- {
- m_nFlavor = m_Combo1.GetCurSel();
- DoFlavorChange();
- }
-
- void CSaveOptDlg::OnSelchangeCombo2()
- {
- m_nQList = m_Combo2.GetCurSel();
- DoQChange();
- }
-
- void CSaveOptDlg::OnChangeEdit1()
- {
- if(GetValue())
- m_ScrollBar.SetScrollPos(m_nQFactor);
- }
-
- void CSaveOptDlg::OnSelchangeList1()
- {
- m_nList = m_List1.GetCurSel();
- DoFormatChange();
- }
-
- void CSaveOptDlg::OnRadio1()
- {
- m_nBitsPerPixel = 1;
- DoBitChange();
- }
-
- void CSaveOptDlg::OnRadio2()
- {
- m_nBitsPerPixel = 4;
- DoBitChange();
- }
-
- void CSaveOptDlg::OnRadio3()
- {
- m_nBitsPerPixel = 8;
- DoBitChange();
- }
-
- void CSaveOptDlg::OnRadio4()
- {
- m_nBitsPerPixel = 16;
- DoBitChange();
-
- }
-
- void CSaveOptDlg::OnRadio5()
- {
- m_nBitsPerPixel = 24;
- DoBitChange();
-
- }
-
- void CSaveOptDlg::OnRadio6()
- {
- m_nBitsPerPixel = 32;
- DoBitChange();
-
- }
-
- void CSaveOptDlg::OnOK()
- {
- UINT uFlags = aFormats[m_nList].aFlavors[m_nFlavor].uFlags;
-
- m_fAppend = (m_Check1.GetCheck() ? TRUE : FALSE);
- m_nFormat = aFormats[m_nList].aFlavors[m_nFlavor].nType;
- if(m_nList == SO_LEAD)
- {
- if(m_nBitsPerPixel == 1)
- {
- m_nQFactor = 2;
- SetValue();
- m_nMin = m_nQFactor = nLead1Q[m_nQList];
- m_nFormat = CLead::FILE_LEAD1BIT;
- UpdateData(FALSE);
- }
- else if(m_nQList)
- {
- m_nQFactor = 2;
- SetValue();
- m_nMin = m_nQFactor = nLeadQ[m_nQList];
- UpdateData(FALSE);
- }
- }
- CDialog::OnOK();
- }
-
- BOOL CSaveOptDlg::OnInitDialog()
- {
- CDialog::OnInitDialog();
-
- m_ScrollBar.SetScrollRange(m_nMin, m_nMax, TRUE);
- m_ScrollBar.SetScrollPos(m_nQList);
- for(int i = 0; i < NUMFORMATS; i++)
- m_List1.AddString(aFormats[i].strType);
- m_List1.SetCurSel(m_nList);
- DoFormatChange();
- return TRUE; // return TRUE unless you set the focus to a control
- // EXCEPTION: OCX Property Pages should return FALSE
- }
-
- BOOL CSaveOptDlg::GetValue()
- {
- BOOL fTranslated;
- int n;
- n = GetDlgItemInt (IDC_EDIT1, &fTranslated, TRUE);
- if (!fTranslated || n < m_nMin || n > m_nMax)
- return(FALSE);
- m_nQFactor = n;
- return(TRUE);
- }
-
- void CSaveOptDlg::SetValue()
- {
- SetDlgItemInt (IDC_EDIT1, m_nQFactor, TRUE);
- }
-
- void CSaveOptDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
- {
- GetValue();
- switch (nSBCode)
- {
- case SB_LEFT:
- m_nQFactor = m_nMin;
- break;
- case SB_RIGHT:
- m_nQFactor = m_nMax;
- break;
- case SB_THUMBPOSITION:
- case SB_THUMBTRACK:
- m_nQFactor = (int) nPos;
- break;
- case SB_LINELEFT:
- m_nQFactor = max (m_nQFactor - m_nStep, m_nMin);
- break;
- case SB_LINERIGHT:
- m_nQFactor = min (m_nQFactor + m_nStep, m_nMax);
- break;
- case SB_PAGELEFT:
- m_nQFactor = max (m_nQFactor - m_nPage, m_nMin);
- break;
- case SB_PAGERIGHT:
- m_nQFactor = min (m_nQFactor + m_nPage, m_nMax);
- break;
- }
- pScrollBar->SetScrollPos(m_nQFactor);
- SetValue();
- }