410 lines
9.2 KiB
C++
410 lines
9.2 KiB
C++
// CustomizePageTools.cpp : implementation file
|
|
//
|
|
// This file is a part of the XTREME TOOLKIT PRO MFC class library.
|
|
// (c)1998-2008 Codejock Software, All Rights Reserved.
|
|
//
|
|
// THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
|
|
// RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
|
|
// CONSENT OF CODEJOCK SOFTWARE.
|
|
//
|
|
// THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
|
|
// IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
|
|
// YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
|
|
// SINGLE COMPUTER.
|
|
//
|
|
// CONTACT INFORMATION:
|
|
// support@codejock.com
|
|
// http://www.codejock.com
|
|
//
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
#include "stdafx.h"
|
|
#include "CustomizeDlg.h"
|
|
#include "CustomizePageTools.h"
|
|
#include <io.h>
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
CToolsList CCustomizePageTools::m_lstTools;
|
|
|
|
void CToolRec::Serialize(CArchive& ar)
|
|
{
|
|
if (ar.IsStoring())
|
|
{
|
|
ar << m_strTitle << m_strArg << m_strCmd << m_strDir;
|
|
}
|
|
else
|
|
{
|
|
ar >> m_strTitle >> m_strArg >> m_strCmd >> m_strDir;
|
|
|
|
}
|
|
}
|
|
|
|
template <> void AFXAPI SerializeElements <CToolRec> ( CArchive& ar, CToolRec* pNewTool, INT_PTR nCount )
|
|
{
|
|
for ( int i = 0; i < nCount; i++, pNewTool++ )
|
|
{
|
|
// Serialize each CToolRec object
|
|
pNewTool->Serialize( ar );
|
|
}
|
|
}
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CCustomizePageTools property page
|
|
|
|
IMPLEMENT_DYNCREATE(CCustomizePageTools, CPropertyPage)
|
|
|
|
CCustomizePageTools::CCustomizePageTools() : CPropertyPage(CCustomizePageTools::IDD)
|
|
{
|
|
//{{AFX_DATA_INIT(CCustomizePageTools)
|
|
m_strToolsDir = _T( "" );
|
|
m_strToolsArg = _T( "" );
|
|
m_strToolsCmd = _T( "" );
|
|
//}}AFX_DATA_INIT
|
|
}
|
|
|
|
CCustomizePageTools::~CCustomizePageTools()
|
|
{
|
|
}
|
|
|
|
void CCustomizePageTools::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CPropertyPage::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CCustomizePageTools)
|
|
DDX_Control(pDX, IDC_TXT_TOOLSDIR, m_txtToolsDir);
|
|
DDX_Control(pDX, IDC_TXT_TOOLSARG, m_txtToolsArg);
|
|
DDX_Control(pDX, IDC_TXT_TOOLSCMD, m_txtToolsCmd);
|
|
DDX_Control(pDX, IDC_EDIT_TOOLSDIR, m_editToolsDir);
|
|
DDX_Control(pDX, IDC_EDIT_TOOLSARG, m_editToolsArg);
|
|
DDX_Control(pDX, IDC_EDIT_TOOLSCMD, m_editToolsCmd);
|
|
DDX_Control(pDX, IDC_LBOX_TOOLSLIST, m_lboxToolsList);
|
|
DDX_Text(pDX, IDC_EDIT_TOOLSDIR, m_strToolsDir);
|
|
DDX_Text(pDX, IDC_EDIT_TOOLSARG, m_strToolsArg);
|
|
DDX_Text(pDX, IDC_EDIT_TOOLSCMD, m_strToolsCmd);
|
|
//}}AFX_DATA_MAP
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CCustomizePageTools, CPropertyPage)
|
|
//{{AFX_MSG_MAP(CCustomizePageTools)
|
|
ON_LBN_SELCHANGE(IDC_LBOX_TOOLSLIST, OnSelchangeEditList)
|
|
ON_EN_CHANGE(IDC_EDIT_TOOLSCMD, OnChangeToolsCmd)
|
|
ON_EN_CHANGE(IDC_EDIT_TOOLSARG, OnChangeToolsArg)
|
|
ON_EN_CHANGE(IDC_EDIT_TOOLSDIR, OnChangeToolsDir)
|
|
ON_WM_DESTROY()
|
|
//}}AFX_MSG_MAP
|
|
|
|
ON_LBN_XT_LABELEDITEND(IDC_LBOX_TOOLSLIST, OnLabelEditEnd)
|
|
ON_LBN_XT_LABELEDITCANCEL(IDC_LBOX_TOOLSLIST, OnLabelEditCancel)
|
|
ON_LBN_XT_NEWITEM(IDC_LBOX_TOOLSLIST, OnNewItem)
|
|
ON_LBN_XT_PREDELETEITEM(IDC_LBOX_TOOLSLIST, OnPreDeleteItem)
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CCustomizePageTools message handlers
|
|
|
|
BOOL CCustomizePageTools::OnInitDialog()
|
|
{
|
|
CPropertyPage::OnInitDialog();
|
|
|
|
m_editToolsCmd.Initialize(this, BES_XT_CHOOSEFILE);
|
|
m_editToolsCmd.SetDlgTitle( _T("Browse") );
|
|
|
|
m_editToolsCmd.SetDlgFilter( _T("Executable (*.exe)|*.exe|Command (*.com)|*.com|Information (*.pif)|*.pif|Batch (*.bat;*.cmd)|*.bat; *.cmd|All Files (*.*)|*.*||"));
|
|
|
|
m_lboxToolsList.SetListEditStyle( _T(" &Menu contents:"), LBS_XT_DEFAULT);
|
|
|
|
int iArgPopup = 0; //IDR_ARG_POPUP;
|
|
int iDirPopup = 0;//IDR_DIR_POPUP;
|
|
|
|
if ( iArgPopup != 0 ) {
|
|
m_editToolsArg.Initialize(this, BES_XT_POPUPMENU, iArgPopup, 0 );
|
|
}
|
|
else {
|
|
m_editToolsArg.Initialize(this, BES_XT_CHOOSEFILE );
|
|
}
|
|
|
|
if ( iDirPopup != 0 ) {
|
|
m_editToolsDir.Initialize(this, BES_XT_POPUPMENU, iDirPopup, 0 );
|
|
}
|
|
else {
|
|
m_editToolsDir.Initialize(this, BES_XT_CHOOSEDIR );
|
|
}
|
|
|
|
POSITION pos = m_lstTools.GetHeadPosition();
|
|
while (pos)
|
|
{
|
|
CToolRec* pRec = new CToolRec;
|
|
*pRec = m_lstTools.GetNext(pos);
|
|
int nIndex = m_lboxToolsList.AddString(pRec->m_strTitle);
|
|
m_lboxToolsList.SetItemData(nIndex, (DWORD_PTR)pRec);
|
|
}
|
|
|
|
m_lboxToolsList.SetCurSel( 0 );
|
|
OnSelchangeEditList( );
|
|
|
|
return TRUE; // return TRUE unless you set the focus to a control
|
|
// EXCEPTION: OCX Property Pages should return FALSE
|
|
}
|
|
|
|
|
|
|
|
void CCustomizePageTools::EnableControls(bool bEnable)
|
|
{
|
|
m_txtToolsDir.EnableWindow( bEnable );
|
|
m_txtToolsArg.EnableWindow( bEnable );
|
|
m_txtToolsCmd.EnableWindow( bEnable );
|
|
m_editToolsDir.EnableWindow( bEnable );
|
|
m_editToolsArg.EnableWindow( bEnable );
|
|
m_editToolsCmd.EnableWindow( bEnable );
|
|
}
|
|
|
|
void CCustomizePageTools::OnSelchangeEditList()
|
|
{
|
|
int iIndex = m_lboxToolsList.GetCurSel( );
|
|
if ( iIndex == LB_ERR )
|
|
{
|
|
m_strToolsDir = _T( "" );
|
|
m_strToolsArg = _T( "" );
|
|
m_strToolsCmd = _T( "" );
|
|
|
|
EnableControls( false );
|
|
}
|
|
else if ( iIndex >= m_lboxToolsList.GetCount( ) )
|
|
{
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
CToolRec* pTool = ( CToolRec* )m_lboxToolsList.GetItemData( iIndex );
|
|
if ( pTool == NULL )
|
|
{
|
|
return;
|
|
}
|
|
|
|
m_strToolsDir = pTool->m_strDir;
|
|
m_strToolsArg = pTool->m_strArg;
|
|
m_strToolsCmd = pTool->m_strCmd;
|
|
|
|
EnableControls( true );
|
|
}
|
|
|
|
UpdateData( FALSE );
|
|
}
|
|
|
|
void CCustomizePageTools::UpdateToolData()
|
|
{
|
|
UpdateData();
|
|
|
|
// get the index of the currently selected item.
|
|
int iItem = m_lboxToolsList.GetCurSel( );
|
|
if ( iItem == LB_ERR )
|
|
{
|
|
return;
|
|
}
|
|
|
|
// get a pointer to the item data for the selection.
|
|
CToolRec* pTool = ( CToolRec* )m_lboxToolsList.GetItemData( iItem );
|
|
if ( pTool != NULL )
|
|
{
|
|
pTool->m_strCmd = m_strToolsCmd;
|
|
pTool->m_strArg = m_strToolsArg;
|
|
pTool->m_strDir = m_strToolsDir;
|
|
}
|
|
}
|
|
|
|
void CCustomizePageTools::OnChangeToolsCmd()
|
|
{
|
|
UpdateToolData( );
|
|
}
|
|
|
|
void CCustomizePageTools::OnChangeToolsArg()
|
|
{
|
|
UpdateToolData( );
|
|
}
|
|
|
|
void CCustomizePageTools::OnChangeToolsDir()
|
|
{
|
|
UpdateToolData( );
|
|
}
|
|
|
|
void CCustomizePageTools::OnLabelEditEnd()
|
|
{
|
|
|
|
int iIndex = m_lboxToolsList.GetCurrentIndex( );
|
|
CToolRec* pTool = ( CToolRec* )m_lboxToolsList.GetItemData( iIndex );
|
|
if ( pTool != NULL )
|
|
{
|
|
CString strText;
|
|
m_lboxToolsList.GetText( iIndex, strText );
|
|
|
|
pTool->m_strTitle = strText;
|
|
m_lboxToolsList.SetCurSel( iIndex );
|
|
}
|
|
|
|
}
|
|
|
|
void CCustomizePageTools::OnLabelEditCancel()
|
|
{
|
|
m_lboxToolsList.SetCurSel(
|
|
m_lboxToolsList.GetCurrentIndex( ) );
|
|
}
|
|
|
|
|
|
void CCustomizePageTools::OnNewItem()
|
|
{
|
|
int iItem = m_lboxToolsList.GetCurrentIndex( );
|
|
if ( iItem != -1 )
|
|
{
|
|
CString strTitle;
|
|
m_lboxToolsList.GetText( iItem, strTitle );
|
|
|
|
CToolRec* pTool = new CToolRec(strTitle);
|
|
|
|
m_lboxToolsList.SetCurSel( iItem );
|
|
|
|
m_strToolsDir = _T("");
|
|
m_strToolsArg = _T("");
|
|
m_strToolsCmd = _T("");
|
|
|
|
m_lboxToolsList.SetItemData( iItem, (DWORD_PTR)pTool);
|
|
|
|
EnableControls( true );
|
|
UpdateData( FALSE );
|
|
}
|
|
}
|
|
|
|
void CCustomizePageTools::OnPreDeleteItem()
|
|
{
|
|
int iIndex = m_lboxToolsList.GetCurSel( );
|
|
if ( iIndex == LB_ERR )
|
|
return;
|
|
|
|
delete ( CToolRec* )m_lboxToolsList.GetItemData( iIndex );
|
|
}
|
|
|
|
|
|
void CCustomizePageTools::UpdateToolsList()
|
|
{
|
|
m_lstTools.RemoveAll();
|
|
|
|
for (int i = 0; i < m_lboxToolsList.GetCount( ); ++i )
|
|
{
|
|
CToolRec* pOldTool = ( CToolRec* )m_lboxToolsList.GetItemData( i );
|
|
if ( pOldTool == NULL )
|
|
continue;
|
|
|
|
m_lstTools.AddTail( *pOldTool );
|
|
delete pOldTool;
|
|
}
|
|
|
|
m_lboxToolsList.ResetContent();
|
|
}
|
|
|
|
BOOL CCustomizePageTools::OnKillActive()
|
|
{
|
|
return CPropertyPage::OnKillActive();
|
|
}
|
|
|
|
void CCustomizePageTools::OnDestroy()
|
|
{
|
|
UpdateToolsList( );
|
|
UpdateIcons();
|
|
CPropertyPage::OnDestroy();
|
|
}
|
|
|
|
static const TCHAR _lpszTools[] = _T("Tools");
|
|
|
|
void CCustomizePageTools::SaveTools(LPCTSTR lpszProfileName)
|
|
{
|
|
CMemFile file;
|
|
CArchive ar (&file, CArchive::store);
|
|
m_lstTools.Serialize(ar);
|
|
ar.Flush ();
|
|
|
|
DWORD dwDataSize = (DWORD)file.GetPosition();
|
|
LPBYTE lpbData = file.Detach();
|
|
|
|
AfxGetApp()->WriteProfileBinary(lpszProfileName, _lpszTools, lpbData, dwDataSize);
|
|
|
|
ar.Close();
|
|
file.Close();
|
|
free (lpbData);
|
|
|
|
}
|
|
|
|
void CCustomizePageTools::UpdateIcons()
|
|
{
|
|
int nIconIndex = 8000;
|
|
|
|
POSITION pos = m_lstTools.GetHeadPosition();
|
|
while (pos)
|
|
{
|
|
CToolRec& tool = m_lstTools.GetNext(pos);
|
|
tool.m_nIconID = 0;
|
|
|
|
CString strPath = tool.m_strCmd;
|
|
TCHAR lpszPath [MAX_PATH];
|
|
|
|
if (::SearchPath (NULL, strPath, NULL, MAX_PATH,
|
|
lpszPath, NULL) != 0)
|
|
{
|
|
strPath = lpszPath;
|
|
}
|
|
|
|
SHFILEINFO sfi;
|
|
|
|
if (::SHGetFileInfo (strPath, 0, &sfi, sizeof(SHFILEINFO),
|
|
SHGFI_ICON | SHGFI_SHELLICONSIZE | SHGFI_SMALLICON))
|
|
{
|
|
HICON hIcon = sfi.hIcon;
|
|
|
|
if (hIcon)
|
|
{
|
|
XTPImageManager()->SetIcon(hIcon, nIconIndex);
|
|
tool.m_nIconID = nIconIndex++;
|
|
DestroyIcon(hIcon);
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
BOOL CCustomizePageTools::LoadTools(LPCTSTR lpszProfileName)
|
|
{
|
|
BOOL bResult = FALSE;
|
|
|
|
LPBYTE lpbData;
|
|
UINT dwDataSize;
|
|
if (AfxGetApp()->GetProfileBinary(lpszProfileName, _lpszTools, &lpbData, &dwDataSize))
|
|
{
|
|
try
|
|
{
|
|
CMemFile file(lpbData, dwDataSize);
|
|
CArchive ar (&file, CArchive::load);
|
|
m_lstTools.Serialize(ar);
|
|
|
|
bResult = TRUE;
|
|
}
|
|
catch (CMemoryException* pEx)
|
|
{
|
|
pEx->Delete ();
|
|
}
|
|
catch (CArchiveException* pEx)
|
|
{
|
|
pEx->Delete ();
|
|
}
|
|
|
|
delete[] lpbData;
|
|
|
|
UpdateIcons();
|
|
|
|
}
|
|
return bResult;
|
|
}
|