// StackPropDlg.cpp : implementation file // #include "stdafx.h" #include "imgconvw.h" #include "StackPropDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CStackPropDlg dialog CStackPropDlg::CStackPropDlg(LImageViewer *pImageViewer, CWnd* pParent /*=NULL*/) : CDialog(CStackPropDlg::IDD, pParent) { memset(&m_StackProp, 0, sizeof(DISPSTACKACTIONPROPS)); m_StackProp.DispContainerActionProps.uStructSize = sizeof(DISPSTACKACTIONPROPS); m_pImageViewer = pImageViewer; //{{AFX_DATA_INIT(CStackPropDlg) m_uSensitivity = 0; m_bCircleMouse = FALSE; //}}AFX_DATA_INIT } void CStackPropDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CStackPropDlg) DDX_Control(pDX, IDEDT_STACK_ACTV, m_edtActiveSubCell); DDX_Control(pDX, IDEDT_STACK_STACK, m_edtStack); DDX_Control(pDX, IDEDT_STACK_CELLINDEX, m_edtCellIndex); DDX_Control(pDX, IDCMB_STACK_CELLINDEX, m_cmbCell); DDX_Control(pDX, IDCMB_STACK_MOD, m_cmbModifier); DDX_Control(pDX, IDCMB_STACK_LEFTKEY, m_cmbLeftKey); DDX_Control(pDX, IDCMB_STACK_RIGHTKEY, m_cmbRightKey); DDX_Control(pDX, IDBTN_STACK_CUR, m_ActionCursor); DDX_Text(pDX, IDEDT_STACK_SEN, m_uSensitivity); DDX_Check(pDX, IDCHK_STACK_CIRCLE, m_bCircleMouse); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CStackPropDlg, CDialog) //{{AFX_MSG_MAP(CStackPropDlg) ON_BN_CLICKED(IDAPPLY, OnApply) ON_BN_CLICKED(IDBTN_STACK_CUR, OnStackCur) ON_CBN_SELCHANGE(IDCMB_STACK_CELLINDEX, OnSelChangeStackCellIndex) ON_EN_CHANGE(IDEDT_STACK_CELLINDEX, OnChangeStackCellIndex) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CStackPropDlg message handlers BOOL CStackPropDlg::OnInitDialog() { CDialog::OnInitDialog(); L_INT nIndex; L_INT nCount =0; CString strVal; 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_STACK, nIndex, 0, (LONG)&m_StackProp, CONTAINER_ACTION_CONTAINERLEVEL); m_pImageViewer->GetActionProperties(CONTAINER_ACTION_STACK, nIndex, 0, (LONG)&m_StackProp, CONTAINER_ACTION_CELLLEVEL); nCount = m_pImageViewer->GetCellCount(0); if (nCount) { strVal.Format(TEXT("%d"), max(0, nIndex)); m_edtCellIndex.SetWindowText(strVal); strVal.Format(TEXT("%d"), m_StackProp.nScrollValue); m_edtStack.SetWindowText(strVal); strVal.Format(TEXT("%d"), m_StackProp.nActiveSubCell); m_edtActiveSubCell.SetWindowText(strVal); m_edtCellIndex.SetNumericEditBox(0, nCount - 1, 1, 0, 0); m_edtActiveSubCell.SetNumericEditBox(0, 10000, 1, 0, 0); m_edtStack.SetNumericEditBox(0, 1000, 1, 0, 0); } m_cmbCell.AddString(TEXT("None")); m_cmbCell.AddString(TEXT("All")); m_cmbCell.AddString(TEXT("Custom")); m_cmbCell.SetCurSel(0); nCount = m_pImageViewer->GetCellCount(0); if (!nCount) { m_cmbCell.EnableWindow(FALSE); } m_edtCellIndex.EnableWindow(FALSE); m_edtStack.EnableWindow(FALSE); m_edtActiveSubCell.EnableWindow(FALSE); m_bCircleMouse = m_StackProp.DispContainerActionProps.bCircularMouseMove; m_uSensitivity = m_StackProp.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_StackProp.DispContainerActionProps.bCircularMouseMove); m_ActionCursor.SetIcon(m_StackProp.DispContainerActionProps.hCursor ? m_StackProp.DispContainerActionProps.hCursor : LoadCursor(NULL, IDC_ARROW)); m_hOldCursor = m_StackProp.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 CStackPropDlg::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 CStackPropDlg::OnOK() { OnApply(); CDialog::OnOK(); } void CStackPropDlg::OnApply() { CString strVal; L_INT nRet; L_INT nVk; L_UINT uState = (8 >> (4 - m_cmbModifier.GetCurSel())); L_INT nIndex=0; UpdateData(TRUE); m_StackProp.DispContainerActionProps.bCircularMouseMove = m_bCircleMouse; m_StackProp.DispContainerActionProps.nChange = m_uSensitivity; m_StackProp.DispContainerActionProps.hCursor = m_ActionCursor.GetIcon(); nRet = m_pImageViewer->SetActionProperties(CONTAINER_ACTION_STACK, 0, 0, (LONG)&m_StackProp, CONTAINER_ACTION_CONTAINERLEVEL); nRet = m_cmbCell.GetCurSel(); if (nRet != 0) { m_edtStack.GetWindowText(strVal); m_StackProp.nScrollValue = _ttoi(strVal); m_edtActiveSubCell.GetWindowText(strVal); m_StackProp.nActiveSubCell = _ttoi(strVal); if (m_cmbCell.GetCurSel() == 1) { nIndex = -1; } else { m_edtCellIndex.GetWindowText(strVal); nIndex = _ttoi(strVal); } nRet = m_pImageViewer->SetActionProperties( CONTAINER_ACTION_STACK, nIndex, 0, (LONG)&m_StackProp, CONTAINER_ACTION_CELLLEVEL); } nVk = CImgConVwApp::GetVirtualKey(&m_cmbLeftKey); if (nVk != 0) m_pImageViewer->SetKeyboardAction(CONTAINER_ACTION_STACK, CONTAINER_MOUSEMOVE_UP, nVk, uState); nVk = CImgConVwApp::GetVirtualKey(&m_cmbRightKey); if (nVk != 0) m_pImageViewer->SetKeyboardAction(CONTAINER_ACTION_STACK, CONTAINER_MOUSEMOVE_DOWN, nVk, uState); UpdateData(FALSE); } int CStackPropDlg::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 CStackPropDlg::OnStackCur() { TCHAR strFileName[MAX_PATH]; if(GetIconFileName(strFileName)) { m_ActionCursor.SetCursor(LoadCursorFromFile(strFileName)); } } void CStackPropDlg::OnSelChangeStackCellIndex() { L_INT nRet = m_cmbCell.GetCurSel(); m_edtCellIndex.EnableWindow(nRet == 2); m_edtStack.EnableWindow(nRet != 0); m_edtActiveSubCell.EnableWindow(nRet != 0); } void CStackPropDlg::OnChangeStackCellIndex() { L_INT nCellIndex =0, nSubCellIndex = 0; CString strVal; m_edtCellIndex.GetWindowText(strVal); nCellIndex = _ttoi(strVal); m_pImageViewer->GetActionProperties(CONTAINER_ACTION_STACK, nCellIndex, nSubCellIndex, (LONG)&m_StackProp, CONTAINER_ACTION_CELLLEVEL); strVal.Format(TEXT("%d"), m_StackProp.nScrollValue); m_edtStack.SetWindowText(strVal); strVal.Format(TEXT("%d"), m_StackProp.nActiveSubCell); m_edtActiveSubCell.SetWindowText(strVal); UpdateData(FALSE); }