#if !defined(_SSITEMOPERATIONDLG_H_INCLUDED_)
#define _SSITEMOPERATIONDLG_H_INCLUDED_
#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
#include "ssauto.h"
#include "ListCtrlEx.h"
enum ItemOperation
{
ge_OP_CHECKOUT,
ge_OP_UNDOCHECKOUT,
ge_OP_CHECKIN,
ge_OP_LABEL,
ge_OP_ADDSUBITEM,
ge_OP_NEWPROJECT,
ge_OP_GET,
};
const long gal_OPTIONS[]=
{
/*ge_OP_CHECKOUT*/ VSSFLAG_GETYES | VSSFLAG_GETNO |
VSSFLAG_RECURSNO | VSSFLAG_RECURSYES |
VSSFLAG_USERRONO | VSSFLAG_USERROYES |
VSSFLAG_CMPFULL | VSSFLAG_CMPTIME | VSSFLAG_CMPCHKSUM | VSSFLAG_CMPFAIL |
VSSFLAG_TIMENOW | VSSFLAG_TIMEMOD | VSSFLAG_TIMEUPD |
VSSFLAG_EOLCR | VSSFLAG_EOLLF | VSSFLAG_EOLCRLF |
VSSFLAG_REPASK | VSSFLAG_REPREPLACE | VSSFLAG_REPSKIP |
VSSFLAG_CHKEXCLUSIVEYES | VSSFLAG_CHKEXCLUSIVENO |
VSSFLAG_FORCEDIRNO | VSSFLAG_FORCEDIRYES | VSSFLAG_CHKEXCLUSIVEYES,
/*ge_OP_UNDOCHECKOUT*/ VSSFLAG_RECURSNO | VSSFLAG_RECURSYES |
VSSFLAG_USERRONO | VSSFLAG_USERROYES |
VSSFLAG_CMPFULL | VSSFLAG_CMPTIME | VSSFLAG_CMPCHKSUM | VSSFLAG_CMPFAIL |
VSSFLAG_TIMENOW | VSSFLAG_TIMEMOD | VSSFLAG_TIMEUPD |
VSSFLAG_EOLCR | VSSFLAG_EOLLF | VSSFLAG_EOLCRLF |
VSSFLAG_REPASK | VSSFLAG_REPREPLACE | VSSFLAG_REPSKIP |
VSSFLAG_FORCEDIRNO | VSSFLAG_FORCEDIRYES |
VSSFLAG_KEEPNO | VSSFLAG_KEEPYES |
VSSFLAG_DELNO | VSSFLAG_DELYES | VSSFLAG_DELNOREPLACE,
/*ge_OP_CHECKIN*/ VSSFLAG_RECURSNO | VSSFLAG_RECURSYES |
VSSFLAG_USERRONO | VSSFLAG_USERROYES |
VSSFLAG_CMPFULL | VSSFLAG_CMPTIME | VSSFLAG_CMPCHKSUM | VSSFLAG_CMPFAIL |
VSSFLAG_TIMENOW | VSSFLAG_TIMEMOD | VSSFLAG_TIMEUPD |
VSSFLAG_EOLCR | VSSFLAG_EOLLF | VSSFLAG_EOLCRLF |
VSSFLAG_REPASK | VSSFLAG_REPREPLACE | VSSFLAG_REPSKIP |
VSSFLAG_FORCEDIRNO | VSSFLAG_FORCEDIRYES |
VSSFLAG_KEEPNO | VSSFLAG_KEEPYES |
VSSFLAG_DELNO | VSSFLAG_DELYES | VSSFLAG_DELNOREPLACE |
VSSFLAG_UPDASK | VSSFLAG_UPDUPDATE | VSSFLAG_UPDUNCH,
/*ge_OP_LABEL*/ 0,
/*ge_OP_ADDSUBITEM*/ VSSFLAG_DELTAYES | VSSFLAG_DELTANO |
VSSFLAG_RECURSNO | VSSFLAG_RECURSYES |
VSSFLAG_USERRONO | VSSFLAG_USERROYES |
VSSFLAG_KEEPNO | VSSFLAG_KEEPYES |
VSSFLAG_BINTEST | VSSFLAG_BINBINARY | VSSFLAG_BINTEXT |
VSSFLAG_DELNO | VSSFLAG_DELYES | VSSFLAG_DELNOREPLACE,
/*ge_OP_NEWPROJECT*/ 0,
/*ge_OP_GET*/ VSSFLAG_RECURSNO | VSSFLAG_RECURSYES |
VSSFLAG_USERRONO | VSSFLAG_USERROYES |
VSSFLAG_CMPFULL | VSSFLAG_CMPTIME | VSSFLAG_CMPCHKSUM | VSSFLAG_CMPFAIL |
VSSFLAG_TIMENOW | VSSFLAG_TIMEMOD | VSSFLAG_TIMEUPD |
VSSFLAG_EOLCR | VSSFLAG_EOLLF | VSSFLAG_EOLCRLF |
VSSFLAG_REPASK | VSSFLAG_REPREPLACE | VSSFLAG_REPSKIP |
VSSFLAG_FORCEDIRNO | VSSFLAG_FORCEDIRYES,
};
const LPCTSTR gasz_OPTION_TEXT[] =
{
_T("VSSFLAG_USERRONO"),
_T("VSSFLAG_USERROYES"),
_T("VSSFLAG_TIMENOW"),
_T("VSSFLAG_TIMEMOD"),
_T("VSSFLAG_TIMEUPD"),
_T("VSSFLAG_EOLCR"),
_T("VSSFLAG_EOLLF"),
_T("VSSFLAG_EOLCRLF"),
_T("VSSFLAG_REPASK"),
_T("VSSFLAG_REPREPLACE"),
_T("VSSFLAG_REPSKIP"),
_T("VSSFLAG_REPMERGE"),
_T("VSSFLAG_CMPFULL"),
_T("VSSFLAG_CMPTIME"),
_T("VSSFLAG_CMPCHKSUM"),
_T("VSSFLAG_CMPFAIL"),
_T("VSSFLAG_RECURSNO"),
_T("VSSFLAG_RECURSYES"),
_T("VSSFLAG_FORCEDIRNO"),
_T("VSSFLAG_FORCEDIRYES"),
_T("VSSFLAG_KEEPNO"),
_T("VSSFLAG_KEEPYES"),
_T("VSSFLAG_DELNO"),
_T("VSSFLAG_DELYES"),
_T("VSSFLAG_DELNOREPLACE"),
_T("VSSFLAG_BINTEST"),
_T("VSSFLAG_BINBINARY"),
_T("VSSFLAG_BINTEXT"),
_T("VSSFLAG_DELTAYES"),
_T("VSSFLAG_DELTANO"),
_T("VSSFLAG_UPDASK"),
_T("VSSFLAG_UPDUPDATE"),
_T("VSSFLAG_UPDUNCH"),
_T("VSSFLAG_GETYES"),
_T("VSSFLAG_GETNO"),
_T("VSSFLAG_CHKEXCLUSIVEYES"),
_T("VSSFLAG_CHKEXCLUSIVENO"),
_T("VSSFLAG_HISTIGNOREFILES"),
};
class CSSItemOperationDlg : public CDialogImpl<CSSItemOperationDlg>,
public CWinDataExchange<CSSItemOperationDlg>
{
protected:
ItemOperation me_operation;
CListCtrlEx m_optionsCtrl;
IVSSItemPtr m_item;
public:
CString mstr_label;
CString mstr_labelValue;
CString mstr_comment;
long ml_flags;
enum { IDD = IDD_ITEM_OPERATION_DIALOG };
BEGIN_MSG_MAP(CSSItemOperationDlg)
MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
COMMAND_ID_HANDLER(IDOK, OnOK)
COMMAND_ID_HANDLER(IDCANCEL, OnCancel)
COMMAND_ID_HANDLER(IDC_SELECT_FILE, OnGetFile)
REFLECT_NOTIFICATIONS();
END_MSG_MAP()
BEGIN_DDX_MAP(CSSItemOperationDlg)
DDX_TEXT(IDC_LABEL, mstr_label)
DDX_TEXT(IDC_LABEL_VALUE, mstr_labelValue)
DDX_TEXT(IDC_COMMENT, mstr_comment)
DDX_CONTROL(IDC_OPTIONS_LIST, m_optionsCtrl);
END_DDX_MAP()
CSSItemOperationDlg(IVSSItemPtr item, ItemOperation e_operation)
{
m_item = item;
me_operation = e_operation;
}
LRESULT OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
CComBSTR bstr_text;
m_item->get_Name(&bstr_text);
mstr_label = _T("Item Name:");
mstr_labelValue = bstr_text;
BOOL b_labelEditable = FALSE;
BOOL b_commentEditable = TRUE;
switch (me_operation)
{
case ge_OP_CHECKOUT:
mstr_label = _T("Checkout Item:");
break;
case ge_OP_UNDOCHECKOUT:
mstr_label = _T("Undo Checkout Item:");
b_commentEditable = FALSE;
break;
case ge_OP_CHECKIN:
mstr_label = _T("Checkin Item:");
break;
case ge_OP_LABEL:
mstr_label.Format(_T("Label for %s:"), mstr_labelValue);
mstr_labelValue = _T("");
b_labelEditable = TRUE;
break;
case ge_OP_ADDSUBITEM:
mstr_label.Format(_T("Add Item under %s:"), mstr_labelValue);
mstr_labelValue = _T("");
b_labelEditable = TRUE;
::EnableWindow(GetDlgItem(IDC_SELECT_FILE), TRUE);
break;
case ge_OP_NEWPROJECT:
mstr_label.Format(_T("Add New Project under %s:"), mstr_labelValue);
mstr_labelValue = _T("");
b_labelEditable = TRUE;
break;
case ge_OP_GET:
mstr_label.Format(_T("Retrieve %s to:"), mstr_labelValue);
m_item->get_LocalSpec(&bstr_text);
mstr_labelValue = bstr_text;
break;
}
DoDataExchange(FALSE);
CEdit labelWindow(GetDlgItem(IDC_LABEL_VALUE));
labelWindow.SetReadOnly(!b_labelEditable);
CEdit commentWindow(GetDlgItem(IDC_COMMENT));
labelWindow.SetReadOnly(!b_commentEditable);
m_optionsCtrl.SetExtendedListViewStyle(LVS_EX_CHECKBOXES);
m_optionsCtrl.InsertColumn(0, _T("Options"), LVCFMT_LEFT, 50 ,-1);
long l_optionFlags = gal_OPTIONS[me_operation];
int i = 0;
int i_row = 0;
while (l_optionFlags > 0)
{
if (l_optionFlags&0x1)
{
m_optionsCtrl.SetItemData(m_optionsCtrl.InsertItem(i_row++, gasz_OPTION_TEXT[i]), i);
}
i++;
l_optionFlags = l_optionFlags>>1;
}
m_optionsCtrl.SetColumnWidth(0, LVSCW_AUTOSIZE_USEHEADER);
return 0L;
}
LRESULT OnOK(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
if (DoDataExchange(TRUE))
{
ml_flags = 0;
for (int i = 0; i < m_optionsCtrl.GetItemCount(); i++)
{
if (m_optionsCtrl.GetCheckState(i))
{
ml_flags |= 0x1<<m_optionsCtrl.GetItemData(i);
}
}
EndDialog(wID);
return 0;
}
return 0;
}
LRESULT OnCancel(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
ml_flags = 0;
EndDialog(wID);
return 0;
}
LRESULT OnGetFile(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
CFileDialog myDLG( TRUE,_T("*.*"), _T("*.*"),OFN_HIDEREADONLY, _T("All Files (*.*)"));
CComBSTR bstr_text;
m_item->get_LocalSpec(&bstr_text);
myDLG.m_ofn.lpstrFile = NULL;
myDLG.m_ofn.lpstrInitialDir = bstr_text;
// Display the dialog
if ( myDLG.DoModal()==IDOK )
{
mstr_label = myDLG.m_ofn.lpstrFile;
DoDataExchange(FALSE);
}
return 0;
}
};
#endif // _SSITEMOPERATIONDLG_H_INCLUDED_