// KeyBindingsDialog.cpp : implementation file
//
#include "stdafx.h"
#include "WindowsSwitcher.h"
#include "KeyBindingsDialog.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CKeyBindingsDialog dialog
CKeyBindingsDialog::CKeyBindingsDialog( ::DSSharedObjects::IApplicationPtr pIApplication, CWnd* pParent /*=NULL*/)
: CDialog(CKeyBindingsDialog::IDD, pParent),
m_pIApplication( pIApplication )
{
//{{AFX_DATA_INIT(CKeyBindingsDialog)
//}}AFX_DATA_INIT
}
void CKeyBindingsDialog::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CKeyBindingsDialog)
DDX_Control(pDX, IDC_COMBO_MODIFIER_C6, m_oFindInFilesModifierCComboBox);
DDX_Control(pDX, IDC_COMBO_MODIFIER_B6, m_oFindInFilesModifierBComboBox);
DDX_Control(pDX, IDC_COMBO_MODIFIER_A6, m_oFindInFilesModifierAComboBox);
DDX_Control(pDX, IDC_COMBO_KEY6, m_oFindInFilesKeyComboBox);
DDX_Control(pDX, IDC_CHECK_KEY_FIND_IN_FILES_COMBO2, m_oFindInFilesCheckBox);
DDX_Control(pDX, IDC_COMBO_KEY5, m_oToggleOutputKeyComboBox);
DDX_Control(pDX, IDC_COMBO_MODIFIER_C5, m_oToggleOutputModifierCComboBox);
DDX_Control(pDX, IDC_COMBO_MODIFIER_B5, m_oToggleOutputModifierBComboBox);
DDX_Control(pDX, IDC_COMBO_MODIFIER_A5, m_oToggleOutputModifierAComboBox);
DDX_Control(pDX, IDC_CHECK_KEY_TOGGLE_OUTPUT_COMBO, m_oToggleOutputCheckBox);
DDX_Control(pDX, IDC_COMBO_KEY4, m_oActivateProjectKeyComboBox);
DDX_Control(pDX, IDC_COMBO_MODIFIER_C4, m_oActivateProjectModifierCComboBox);
DDX_Control(pDX, IDC_COMBO_MODIFIER_B4, m_oActivateProjectModifierBComboBox);
DDX_Control(pDX, IDC_COMBO_MODIFIER_A4, m_oActivateProjectModifierAComboBox);
DDX_Control(pDX, IDC_CHECK_KEY_PROJECT_COMBO, m_oActivateProjectCheckBox);
DDX_Control(pDX, IDC_COMBO_MODIFIER_C3, m_oActivateMemberModifierCComboBox);
DDX_Control(pDX, IDC_COMBO_MODIFIER_B3, m_oActivateMemberModifierBComboBox);
DDX_Control(pDX, IDC_COMBO_MODIFIER_A3, m_oActivateMemberModifierAComboBox);
DDX_Control(pDX, IDC_COMBO_KEY3, m_oActivateMemberKeyComboBox);
DDX_Control(pDX, IDC_CHECK_KEY_MEMBERS_COMBO, m_oActivateMemberCheckBox);
DDX_Control(pDX, IDC_COMBO_MODIFIER_C2, m_oActivateClassModifierCComboBox);
DDX_Control(pDX, IDC_COMBO_MODIFIER_B2, m_oActivateClassModifierBComboBox);
DDX_Control(pDX, IDC_COMBO_MODIFIER_A2, m_oActivateClassModifierAComboBox);
DDX_Control(pDX, IDC_COMBO_KEY2, m_oActivateClassKeyComboBox);
DDX_Control(pDX, IDC_CHECK_KEY_CLASS_COMBO, m_oActivateClassCheckBox);
DDX_Control(pDX, IDC_CHECK_KEY_WINDOWS_SWITCHER, m_oWindowsSwitcherCheckBox);
DDX_Control(pDX, IDC_COMBO_MODIFIER_C1, m_oWindowsSwitcherModifierCComboBox);
DDX_Control(pDX, IDC_COMBO_MODIFIER_B1, m_oWindowsSwitcherModifierBComboBox);
DDX_Control(pDX, IDC_COMBO_MODIFIER_A1, m_oWindowsSwitcherModifierAComboBox);
DDX_Control(pDX, IDC_COMBO_KEY1, m_oWindowsSwitcherKeyComboBox);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CKeyBindingsDialog, CDialog)
//{{AFX_MSG_MAP(CKeyBindingsDialog)
ON_BN_CLICKED(IDC_CHECK_KEY_WINDOWS_SWITCHER, OnCheckKeyWindowsSwitcher)
ON_BN_CLICKED(IDC_CHECK_KEY_CLASS_COMBO, OnCheckKeyClassCombo)
ON_BN_CLICKED(IDC_CHECK_KEY_MEMBERS_COMBO, OnCheckKeyMembersCombo)
ON_BN_CLICKED(IDC_CHECK_KEY_PROJECT_COMBO, OnCheckKeyProjectCombo)
ON_BN_CLICKED(IDC_CHECK_KEY_TOGGLE_OUTPUT_COMBO, OnCheckKeyToggleOutputCombo)
ON_BN_CLICKED(IDC_CHECK_KEY_FIND_IN_FILES_COMBO2, OnCheckKeyFindInFilesCombo2)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CKeyBindingsDialog message handlers
void CKeyBindingsDialog::InitControls( CButton &oCheckBox,
CComboBox &oModifierAComboBox,
CComboBox &oModifierBComboBox,
CComboBox &oModifierCComboBox,
CComboBox &oKeyComboBox,
eKeyModifiers eAKeyModifierValue,
eKeyModifiers eBKeyModifierValue,
eKeyModifiers eCKeyModifierValue,
const CString &oKeyValueString
)
{
PopulateModifierControl( oModifierAComboBox );
PopulateModifierControl( oModifierBComboBox );
PopulateModifierControl( oModifierCComboBox );
oCheckBox.SetCheck( TRUE );
oModifierAComboBox.SetCurSel( eAKeyModifierValue );
oModifierBComboBox.SetCurSel( eBKeyModifierValue );
oModifierCComboBox.SetCurSel( eCKeyModifierValue );
oKeyComboBox.SetWindowText( oKeyValueString );
}
BOOL CKeyBindingsDialog::OnInitDialog()
{
CDialog::OnInitDialog();
InitControls( m_oWindowsSwitcherCheckBox,
m_oWindowsSwitcherModifierAComboBox, m_oWindowsSwitcherModifierBComboBox, m_oWindowsSwitcherModifierCComboBox, m_oWindowsSwitcherKeyComboBox,
eKeyModifierCtrl, eKeyModifierNone, eKeyModifierNone, "Q" );
InitControls( m_oActivateClassCheckBox,
m_oActivateClassModifierAComboBox, m_oActivateClassModifierBComboBox, m_oActivateClassModifierCComboBox, m_oActivateClassKeyComboBox,
eKeyModifierCtrl, eKeyModifierNone, eKeyModifierNone, "1" );
InitControls( m_oActivateMemberCheckBox,
m_oActivateMemberModifierAComboBox, m_oActivateMemberModifierBComboBox, m_oActivateMemberModifierCComboBox, m_oActivateMemberKeyComboBox,
eKeyModifierCtrl, eKeyModifierNone, eKeyModifierNone, "2" );
InitControls( m_oActivateProjectCheckBox,
m_oActivateProjectModifierAComboBox, m_oActivateProjectModifierBComboBox, m_oActivateProjectModifierCComboBox, m_oActivateProjectKeyComboBox,
eKeyModifierCtrl, eKeyModifierNone, eKeyModifierNone, "3" );
InitControls( m_oToggleOutputCheckBox,
m_oToggleOutputModifierAComboBox, m_oToggleOutputModifierBComboBox, m_oToggleOutputModifierCComboBox, m_oToggleOutputKeyComboBox,
eKeyModifierCtrl, eKeyModifierNone, eKeyModifierNone, "`" );
InitControls( m_oFindInFilesCheckBox,
m_oFindInFilesModifierAComboBox, m_oFindInFilesModifierBComboBox, m_oFindInFilesModifierCComboBox, m_oFindInFilesKeyComboBox,
eKeyModifierCtrl, eKeyModifierNone, eKeyModifierNone, "D" );
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CKeyBindingsDialog::PopulateModifierControl( CComboBox &oModifierComboBox )
{
oModifierComboBox.ResetContent();
oModifierComboBox.AddString( "" );
oModifierComboBox.AddString( "ALT" );
oModifierComboBox.AddString( "CTRL" );
oModifierComboBox.AddString( "SHIFT" );
}
void CKeyBindingsDialog::OnOK()
{
UpdateData( TRUE );
BOOL bClose = TRUE;
CString oDescriptionString;
oDescriptionString.LoadString( IDS_KEYBINDING_DESC );
if( !AssignKeyBinging( m_oWindowsSwitcherCheckBox, m_oWindowsSwitcherModifierAComboBox,
m_oWindowsSwitcherModifierBComboBox, m_oWindowsSwitcherModifierCComboBox, m_oWindowsSwitcherKeyComboBox,
"WindowsSwitcherCommand", &oDescriptionString, "Show Windows Switcher" ) )
{
return;
}
if( !AssignKeyBinging( m_oActivateClassCheckBox, m_oActivateClassModifierAComboBox,
m_oActivateClassModifierBComboBox, m_oActivateClassModifierCComboBox, m_oActivateClassKeyComboBox,
"WBClassComboActive", &oDescriptionString, "Activate WizardBar Class Combo" ) )
{
return;
}
if( !AssignKeyBinging( m_oActivateMemberCheckBox, m_oActivateMemberModifierAComboBox,
m_oActivateMemberModifierBComboBox, m_oActivateMemberModifierCComboBox, m_oActivateMemberKeyComboBox,
"WBMembersComboActive", &oDescriptionString, "Activate Wizard Bar Member Combo" ) )
{
return;
}
if( !AssignKeyBinging( m_oActivateProjectCheckBox, m_oActivateProjectModifierAComboBox,
m_oActivateProjectModifierBComboBox, m_oActivateProjectModifierCComboBox, m_oActivateProjectKeyComboBox,
"ProjectSelectTool", &oDescriptionString, "Activate Project combo" ) )
{
return;
}
if( !AssignKeyBinging( m_oToggleOutputCheckBox, m_oToggleOutputModifierAComboBox,
m_oToggleOutputModifierBComboBox, m_oToggleOutputModifierCComboBox, m_oToggleOutputKeyComboBox,
"ToggleOutputWindow", &oDescriptionString, "Toggle Output window" ) )
{
return;
}
if( !AssignKeyBinging( m_oActivateProjectCheckBox, m_oFindInFilesModifierAComboBox,
m_oFindInFilesModifierBComboBox, m_oFindInFilesModifierCComboBox, m_oFindInFilesKeyComboBox,
"FindInFiles", &oDescriptionString, "Open Find in files dialog" ) )
{
return;
}
SaveDescriptionToTmpFile( oDescriptionString );
AfxMessageBox( "Key sequences were succesfully bound", MB_OK | MB_ICONINFORMATION );
CDialog::OnOK();
}
BOOL CKeyBindingsDialog::AssignKeyBinging( CButton &oCheckBox,
CComboBox &oModifierAComboBox,
CComboBox &oModifierBComboBox,
CComboBox &oModifierCComboBox,
CComboBox &oKeyComboBox,
const CString &oCommandString,
CString *poDescriptionString,
const CString &oCommandDescriptionString )
{
ASSERT( poDescriptionString );
if( oCheckBox.GetCheck() )
{
CString oKeySequenceString, oString;
oModifierAComboBox.GetWindowText( oString );
if( !oString.IsEmpty() )
{
oKeySequenceString += oString;
}
oModifierBComboBox.GetWindowText( oString );
if( !oString.IsEmpty() )
{
if( !oKeySequenceString.IsEmpty() )
{
oKeySequenceString += "+";
}
oKeySequenceString += oString;
}
oModifierCComboBox.GetWindowText( oString );
if( !oString.IsEmpty() )
{
if( !oKeySequenceString.IsEmpty() )
{
oKeySequenceString += "+";
}
oKeySequenceString += oString;
}
oKeyComboBox.GetWindowText( oString );
if( !oString.IsEmpty() )
{
if( !oKeySequenceString.IsEmpty() )
{
oKeySequenceString += "+";
}
oKeySequenceString += oString;
}
else
{
AfxMessageBox( "Please select key sequence for all checked command.", MB_ICONERROR );
return FALSE;
}
try
{
VERIFY( SUCCEEDED( m_pIApplication->AddKeyBinding( (_bstr_t)(BSTR)(CComBSTR)oKeySequenceString, (_bstr_t)(BSTR)(CComBSTR)oCommandString, (_bstr_t)(BSTR)(CComBSTR)"Main" ) ) );
VERIFY( SUCCEEDED( m_pIApplication->AddKeyBinding( (_bstr_t)(BSTR)(CComBSTR)oKeySequenceString, (_bstr_t)(BSTR)(CComBSTR)oCommandString, (_bstr_t)(BSTR)(CComBSTR)"Text" ) ) );
CString oItemDescriptionString;
oItemDescriptionString.Format( IDS_KEYBINDING_DESC_ITEM, oCommandDescriptionString, oKeySequenceString );
(*poDescriptionString) += oItemDescriptionString;
}
catch( _com_error &oComError )
{
AfxMessageBox( oComError.Description() );
return FALSE;
}
}
return TRUE;
}
void CKeyBindingsDialog::SaveDescriptionToTmpFile( const CString &oDescriptionString )
{
CString oTempDirPathString, oFileNameString;
if( ::GetTempPath( MAX_PATH, oTempDirPathString.GetBuffer( MAX_PATH ) ) )
{
oTempDirPathString.ReleaseBuffer();
oFileNameString = oTempDirPathString;
if( oFileNameString[oFileNameString.GetLength() - 1] != '\\' )
{
oFileNameString += '\\';
}
oFileNameString += "VCKeys.txt";
try
{
CStdioFile oFile( oFileNameString, CFile::modeCreate | CFile::modeWrite | CFile::shareDenyWrite );
oFile.WriteString( oDescriptionString );
oFile.Close();
}
catch( CFileException *poFileException )
{
poFileException->Delete();
return;
}
::ShellExecute( NULL, "open", oFileNameString, "", "", SW_SHOWDEFAULT );
}
else
{
oTempDirPathString.ReleaseBuffer( 0 );
}
}
void CKeyBindingsDialog::OnCheckKeyWindowsSwitcher()
{
EnableControls( m_oWindowsSwitcherCheckBox, m_oWindowsSwitcherModifierAComboBox, m_oWindowsSwitcherModifierBComboBox, m_oWindowsSwitcherModifierCComboBox, m_oWindowsSwitcherKeyComboBox );
}
void CKeyBindingsDialog::EnableControls( CButton &oCheckBox,
CComboBox &oModifierAComboBox,
CComboBox &oModifierBComboBox,
CComboBox &oModifierCComboBox,
CComboBox &oKeyComboBox )
{
BOOL bEnable = oCheckBox.GetCheck();
oModifierAComboBox.EnableWindow( bEnable );
oModifierBComboBox.EnableWindow( bEnable );
oModifierCComboBox.EnableWindow( bEnable );
oKeyComboBox.EnableWindow( bEnable );
}
void CKeyBindingsDialog::OnCheckKeyClassCombo()
{
EnableControls( m_oActivateClassCheckBox, m_oActivateClassModifierAComboBox, m_oActivateClassModifierBComboBox, m_oActivateClassModifierCComboBox, m_oActivateClassKeyComboBox );
}
void CKeyBindingsDialog::OnCheckKeyMembersCombo()
{
EnableControls( m_oActivateMemberCheckBox, m_oActivateMemberModifierAComboBox, m_oActivateMemberModifierBComboBox, m_oActivateMemberModifierCComboBox, m_oActivateMemberKeyComboBox );
}
void CKeyBindingsDialog::OnCheckKeyProjectCombo()
{
EnableControls( m_oActivateProjectCheckBox, m_oActivateProjectModifierAComboBox, m_oActivateProjectModifierBComboBox, m_oActivateProjectModifierCComboBox, m_oActivateProjectKeyComboBox );
}
void CKeyBindingsDialog::OnCheckKeyToggleOutputCombo()
{
EnableControls( m_oToggleOutputCheckBox, m_oToggleOutputModifierAComboBox, m_oToggleOutputModifierBComboBox, m_oToggleOutputModifierCComboBox, m_oToggleOutputKeyComboBox );
}
void CKeyBindingsDialog::OnCheckKeyFindInFilesCombo2()
{
EnableControls( m_oFindInFilesCheckBox, m_oFindInFilesModifierAComboBox, m_oFindInFilesModifierBComboBox, m_oFindInFilesModifierCComboBox, m_oFindInFilesKeyComboBox );
}