// AlphaPropDlg.cpp : implementation file // #include "stdafx.h" #include "imgconvw.h" #include "AlphaPropDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CAlphaPropDlg dialog CAlphaPropDlg::CAlphaPropDlg(LImageViewer *pImageViewer, CWnd* pParent /*=NULL*/) : CDialog(CAlphaPropDlg::IDD, pParent) { memset(&m_AlphaProp, 0, sizeof(m_AlphaProp)); m_AlphaProp.DispContainerActionProps.uStructSize = sizeof(DISPALPHAACTIONPROPS); m_pImageViewer = pImageViewer; //{{AFX_DATA_INIT(CAlphaPropDlg) m_uSensitivity = 0; m_bCircleMouse = FALSE; //}}AFX_DATA_INIT } void CAlphaPropDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CAlphaPropDlg) DDX_Control(pDX, IDEDT_ALPHA_FACTOR, m_edtAlphaFactor); DDX_Control(pDX, IDCMB_ALPHA_SUBCELLINDEX, m_cmbSubCellIndex); DDX_Control(pDX, IDEDT_ALPHA_SUBCELLINDEX, m_edtSubCellIndex); DDX_Control(pDX, IDEDT_ALPHA_CELLINDEX, m_edtCellIndex); DDX_Control(pDX, IDCMB_ALPHA_CELLINDEX, m_cmbCell); DDX_Control(pDX, IDCMB_ALPHA_MOD, m_cmbModifier); DDX_Control(pDX, IDCMB_ALPHA_RIGHTKEY, m_cmbRightKey); DDX_Control(pDX, IDCMB_ALPHA_LEFTKEY, m_cmbLeftKey); DDX_Control(pDX, IDBTN_ALPHA_CUR, m_ActionCursor); DDX_Text(pDX, IDEDT_ALPHA_SEN, m_uSensitivity); DDX_Check(pDX, IDCHK_ALPHA_CIRCLE, m_bCircleMouse); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CAlphaPropDlg, CDialog) //{{AFX_MSG_MAP(CAlphaPropDlg) ON_BN_CLICKED(IDAPPLY, OnApply) ON_BN_CLICKED(IDBTN_ALPHA_CUR, OnAlphaCur) ON_EN_CHANGE(IDEDT_ALPHA_CELLINDEX, OnChangeAlphaCellIndex) ON_CBN_SELCHANGE(IDCMB_ALPHA_CELLINDEX, OnSelChangeAlphaCellIndex) ON_CBN_SELCHANGE(IDCMB_ALPHA_SUBCELLINDEX, OnSelChangeAlphaSubcellIndex) ON_EN_CHANGE(IDEDT_ALPHA_SUBCELLINDEX, OnChangeAlphaSubCellIndex) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CAlphaPropDlg message handlers BOOL CAlphaPropDlg::OnInitDialog() { CDialog::OnInitDialog(); L_INT nIndex; L_INT nCount =0; CString strVal; L_INT nListCount =0; HBITMAPLIST hBitmapList; LBitmapList BitmapList; for (nIndex = 0; nIndex < nCount; nIndex++) { if(m_pImageViewer) { if (m_pImageViewer->IsCellSelected(nIndex,0)) break; } } if (nIndex == nCount) nIndex = -1; m_pImageViewer->GetActionProperties(CONTAINER_ACTION_ALPHA, nIndex, 0, (LONG)&m_AlphaProp, CONTAINER_ACTION_CONTAINERLEVEL); m_pImageViewer->GetActionProperties(CONTAINER_ACTION_ALPHA, nIndex, 0, (LONG)&m_AlphaProp, CONTAINER_ACTION_CELLLEVEL); nCount = m_pImageViewer->GetCellCount(0); if (nCount) { strVal.Format(TEXT("%d"), 0); m_edtSubCellIndex.SetWindowText(strVal); strVal.Format(TEXT("%d"), max(0, nIndex)); m_edtCellIndex.SetWindowText(strVal); strVal.Format(TEXT("%d"), m_AlphaProp.nFactor); m_edtAlphaFactor.SetWindowText(strVal); m_pImageViewer->GetCellBitmapList(nIndex, &hBitmapList, 0); BitmapList.SetHandle(hBitmapList); nListCount = BitmapList.GetItemsCount(); m_edtCellIndex.SetNumericEditBox(0, nCount - 1, 1, 0, 0); m_edtSubCellIndex.SetNumericEditBox(0, nListCount - 1, 1, 0, 0); m_edtAlphaFactor.SetNumericEditBox( -1000, 1000, 1, 0, 0); } m_cmbCell.AddString(TEXT("None")); m_cmbCell.AddString(TEXT("All")); m_cmbCell.AddString(TEXT("Custom")); m_cmbCell.SetCurSel(0); m_cmbSubCellIndex.AddString(TEXT("All")); m_cmbSubCellIndex.AddString(TEXT("Custom")); m_cmbSubCellIndex.SetCurSel(0); nCount = m_pImageViewer->GetCellCount(0); if (!nCount) { m_cmbCell.EnableWindow(FALSE); } m_cmbSubCellIndex.EnableWindow(FALSE); m_edtCellIndex.EnableWindow(FALSE); m_edtSubCellIndex.EnableWindow(FALSE); m_edtAlphaFactor.EnableWindow(FALSE); m_bCircleMouse = m_AlphaProp.DispContainerActionProps.bCircularMouseMove; m_uSensitivity = m_AlphaProp.DispContainerActionProps.nChange; CImgConVwApp::AddSupString(&m_cmbModifier); CImgConVwApp::AddVirtualKeyString(&m_cmbLeftKey); CImgConVwApp::AddVirtualKeyString(&m_cmbRightKey); GetKeyboardAction(&m_cmbLeftKey, &m_cmbModifier, CONTAINER_ACTION_ALPHA, CONTAINER_MOUSEMOVE_LEFT); GetKeyboardAction(&m_cmbRightKey, &m_cmbModifier, CONTAINER_ACTION_ALPHA, CONTAINER_MOUSEMOVE_RIGHT); m_ActionCursor.SetCheck(m_AlphaProp.DispContainerActionProps.bCircularMouseMove); m_ActionCursor.SetIcon(m_AlphaProp.DispContainerActionProps.hCursor ? m_AlphaProp.DispContainerActionProps.hCursor : LoadCursor(NULL, IDC_ARROW)); m_hOldCursor = m_AlphaProp.DispContainerActionProps.hCursor; UpdateData(FALSE); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } L_VOID CAlphaPropDlg::GetKeyboardAction(CComboBox * pVComboBox, CComboBox * pModComboBox, L_INT nAction, L_INT nMouseDirection) { L_UINT uVk, uModifier; m_pImageViewer->GetKeyboardAction(nAction, nMouseDirection, &uVk, &uModifier, 0); for(int i=0;i< pVComboBox->GetCount(); ++i) { if(pVComboBox->GetItemData(i) == uVk) { pVComboBox->SetCurSel(i); break; } } pModComboBox->SetCurSel(min(3, uModifier)); } void CAlphaPropDlg::OnOK() { OnApply(); CDialog::OnOK(); } void CAlphaPropDlg::OnApply() { CString strVal; L_INT nRet; L_INT nVk; L_UINT uState = (8 >> (4 - m_cmbModifier.GetCurSel())); L_INT nIndex=0; L_INT nSubIndex=0; UpdateData(TRUE); m_AlphaProp.DispContainerActionProps.bCircularMouseMove = m_bCircleMouse; m_AlphaProp.DispContainerActionProps.nChange = m_uSensitivity; m_AlphaProp.DispContainerActionProps.hCursor = m_ActionCursor.GetIcon(); nRet = m_pImageViewer->SetActionProperties(CONTAINER_ACTION_ALPHA, 0, 0, (LONG)&m_AlphaProp, CONTAINER_ACTION_CONTAINERLEVEL); nRet = m_cmbCell.GetCurSel(); if (nRet != 0) { m_edtAlphaFactor.GetWindowText(strVal); m_AlphaProp.nFactor = _ttoi(strVal); if (m_cmbCell.GetCurSel() == 1) { nIndex = -1; } else { m_edtCellIndex.GetWindowText(strVal); nIndex = _ttoi(strVal); } if (m_cmbSubCellIndex.GetCurSel() == 0) { nSubIndex = -1; } else { m_edtSubCellIndex.GetWindowText(strVal); nSubIndex = _ttoi(strVal); } nRet = m_pImageViewer->SetActionProperties(CONTAINER_ACTION_ALPHA, nIndex, nSubIndex, (LONG)&m_AlphaProp, CONTAINER_ACTION_CELLLEVEL); } nVk = CImgConVwApp::GetVirtualKey(&m_cmbLeftKey); if (nVk != 0) m_pImageViewer->SetKeyboardAction(CONTAINER_ACTION_ALPHA, CONTAINER_MOUSEMOVE_LEFT, nVk, uState); nVk = CImgConVwApp::GetVirtualKey(&m_cmbRightKey); if (nVk != 0) m_pImageViewer->SetKeyboardAction(CONTAINER_ACTION_ALPHA, CONTAINER_MOUSEMOVE_RIGHT, nVk, uState); UpdateData(FALSE); } int CAlphaPropDlg::GetIconFileName(L_TCHAR * m_FileName) { L_INT nRet; OPENFILENAME OpenFileName; memset(&OpenFileName, 0, sizeof(OPENFILENAME)); memset(m_FileName, 0, MAX_PATH * sizeof(TCHAR)); OpenFileName.lStructSize = sizeof(OPENFILENAME); OpenFileName.lpstrFilter = TEXT("Cursors(*.cur)\0 *.cur"); OpenFileName.nMaxCustFilter = 12; OpenFileName.hwndOwner = this->GetSafeHwnd(); OpenFileName.lpstrTitle = TEXT("Open a File"); OpenFileName.Flags = OFN_HIDEREADONLY | OFN_CREATEPROMPT; OpenFileName.lpstrFile = m_FileName; OpenFileName.nMaxFile = MAX_PATH; nRet = GetOpenFileName(&OpenFileName); return nRet; } void CAlphaPropDlg::OnAlphaCur() { TCHAR strFileName[MAX_PATH]; if(GetIconFileName(strFileName)) { m_ActionCursor.SetCursor(LoadCursorFromFile(strFileName)); } } void CAlphaPropDlg::OnChangeAlphaCellIndex() { L_INT nCellIndex =0, nSubCellIndex =0, nListCount=0; CString strVal; HBITMAPLIST hBitmapList; LBitmapList BitmapList; m_edtCellIndex.GetWindowText(strVal); nCellIndex = _ttoi(strVal); m_edtSubCellIndex.GetWindowText(strVal); nSubCellIndex = _ttoi(strVal); m_pImageViewer->GetActionProperties(CONTAINER_ACTION_ALPHA, nCellIndex, nSubCellIndex, (LONG)&m_AlphaProp, CONTAINER_ACTION_CELLLEVEL); strVal.Format(TEXT("%d"), m_AlphaProp.nFactor); m_edtAlphaFactor.SetWindowText(strVal); m_pImageViewer->GetCellBitmapList(nCellIndex, &hBitmapList, 0); BitmapList.SetHandle(hBitmapList); nListCount = BitmapList.GetItemsCount(); m_edtSubCellIndex.SetNumericEditBox(0, nListCount - 1, 1, 0, 0); BitmapList.SetHandle(NULL,0,0); UpdateData(FALSE); } void CAlphaPropDlg::OnSelChangeAlphaCellIndex() { L_INT nRet = m_cmbCell.GetCurSel(); m_edtCellIndex.EnableWindow(nRet == 2); m_cmbSubCellIndex.EnableWindow((nRet != 0)); m_edtSubCellIndex.EnableWindow((nRet != 0) && (m_cmbSubCellIndex.GetCurSel())); m_edtAlphaFactor.EnableWindow(nRet != 0); } void CAlphaPropDlg::OnSelChangeAlphaSubcellIndex() { m_edtSubCellIndex.EnableWindow((m_cmbSubCellIndex.GetCurSel() == 1)); } void CAlphaPropDlg::OnChangeAlphaSubCellIndex() { L_INT nCellIndex =0, nSubCellIndex =0; CString strVal; UpdateData(TRUE); m_edtCellIndex.GetWindowText(strVal); nCellIndex = _ttoi(strVal); m_edtSubCellIndex.GetWindowText(strVal); nSubCellIndex = _ttoi(strVal); m_pImageViewer->GetActionProperties(CONTAINER_ACTION_ALPHA, nCellIndex, nSubCellIndex, (LONG)&m_AlphaProp, CONTAINER_ACTION_CELLLEVEL); strVal.Format(TEXT("%d"), m_AlphaProp.nFactor); m_edtAlphaFactor.SetWindowText(strVal); UpdateData(FALSE); }