// Implementation of the CPA_Meca_ControlView class /////////////////////////////////////////////////////////////////// #include "StdAfx.h" #include "EMECVwMn.hpp" #include "EMECFmMn.hpp" #include "EMECVwMS.hpp" #include "EMECDoc.hpp" #include "EMECCnst.hpp" #include "EMECDgNC.hpp" #include "EMECDgSp.hpp" #include "EMECDgQu.hpp" #include "_MecCard.hpp" #include "_Minterf.hpp" #include "help_def.h" //For Context help //External Modules #include "ErO.h" #include "IncTUT.h" //End of External Modules #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CPA_Meca_ControlView IMPLEMENT_DYNCREATE(CPA_Meca_ControlView, CFormView) BEGIN_MESSAGE_MAP(CPA_Meca_ControlView, CFormView) //{{AFX_MSG_MAP(CPA_Meca_ControlView) ON_BN_CLICKED(IDC_BUTTON_CREATE, OnButtonCreate) ON_BN_CLICKED(IDC_BUTTON_DELETE, OnButtonDelete) ON_BN_CLICKED(IDC_BUTTON_RENAME, OnButtonRename) ON_CBN_SELCHANGE(IDC_LIST_CARD_TYPES, OnSelchangeComboCardTypes) ON_WM_HELPINFO() ON_WM_SIZE() ON_BN_CLICKED(IDC_BUTTON_COPY, OnButtonCopy) ON_WM_DESTROY() //}}AFX_MSG_MAP ON_NOTIFY_EX( TTN_NEEDTEXT, 0, OnToolTipNotify ) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CPA_Meca_ControlView construction/destruction //*************************************************************************** CPA_Meca_ControlView::CPA_Meca_ControlView() : CFormView( IDD_MECA_DIALOG_CONTROL ) { } //*************************************************************************** CPA_Meca_ControlView::~CPA_Meca_ControlView() { } ///////////////////////////////////////////////////////////////////////////// // CPA_Meca_ControlView message handlers //*************************************************************************** void CPA_Meca_ControlView::OnInitialUpdate() { CFormView::OnInitialUpdate(); EnableToolTips(TRUE); m_fn_pclGetDocument()->m_pclControlView = this; CRect crClientRect; GetClientRect(crClientRect); CRect crLastRect; GetDlgItem(IDC_LIST_CARD_TYPES)->GetClientRect(crLastRect); crClientRect.bottom = crLastRect.bottom + 5; crClientRect.right = crLastRect.right + 5; MoveWindow(crClientRect); SetScrollSizes(MM_TEXT, CSize(crClientRect.Width() - 5, crClientRect.Height() - 5)); //Sets Icons for Butttons HICON hIcon = AfxGetApp()->LoadIcon(IDI_ICON_BUTTON_CREATE); ((CButton *)GetDlgItem(IDC_BUTTON_CREATE))->SetIcon(hIcon); hIcon = AfxGetApp()->LoadIcon(IDI_ICON_BUTTON_RENAME); ((CButton *)GetDlgItem(IDC_BUTTON_RENAME))->SetIcon(hIcon); hIcon = AfxGetApp()->LoadIcon(IDI_ICON_BUTTON_DELETE); ((CButton *)GetDlgItem(IDC_BUTTON_DELETE))->SetIcon(hIcon); hIcon = AfxGetApp()->LoadIcon(IDI_ICON_BUTTON_COPY); ((CButton *)GetDlgItem(IDC_BUTTON_COPY))->SetIcon(hIcon); //Fills the list of cards types CListBox *pclTypeLB = (CListBox *)GetDlgItem(IDC_LIST_CARD_TYPES); pclTypeLB->ResetContent(); CPA_Meca_CardType *pclCardType; short wIndex = 0; POSITION pos = m_fn_pclGetDocument()->m_clCardTypeList.GetHeadPosition(); while ( pos != NULL ) { pclCardType = m_fn_pclGetDocument()->m_clCardTypeList.GetNext(pos); wIndex = pclTypeLB->AddString(pclCardType->m_fn_csGetCardTypeName()); pclTypeLB->SetItemDataPtr(wIndex, (void *)pclCardType); } ////////////// ////////////// //Registers for TUT Module TUT_M_vGetTutDll(); TUT_M_vRegisterControlID(IDC_BUTTON_CREATE, "TMe_ControlView_CreateButton", TUT_e_Button); TUT_M_vRegisterControlID(IDC_BUTTON_RENAME, "TMe_ControlView_RenameButton", TUT_e_Button); TUT_M_vRegisterControlID(IDC_BUTTON_DELETE, "TMe_ControlView_DeleteButton", TUT_e_Button); TUT_M_vRegisterControlID(IDC_BUTTON_COPY, "TMe_ControlView_CopyButton", TUT_e_Button); TUT_M_vRegisterControlID(IDC_LIST_CARD_TYPES, "TMe_ControlView_ListBox", TUT_e_ListBox); //End of Registers for TUT Module ////////////// } //******************************************************************************* void CPA_Meca_ControlView::OnDestroy() { ////////////// ////////////// //UnRegisters for TUT Module TUT_M_vGetTutDll(); TUT_M_vUnregisterControlID(IDC_BUTTON_CREATE); TUT_M_vUnregisterControlID(IDC_BUTTON_RENAME); TUT_M_vUnregisterControlID(IDC_BUTTON_DELETE); TUT_M_vUnregisterControlID(IDC_BUTTON_COPY); TUT_M_vUnregisterControlID(IDC_LIST_CARD_TYPES); //End of UnRegisters for TUT Module ////////////// CFormView::OnDestroy(); } //******************************************************************************* void CPA_Meca_ControlView::OnButtonCreate() { if ( m_fn_pclGetDocument()->m_pclCurrentCardType != NULL ) { CString csNewCardProposedName = m_fn_pclGetDocument()->m_pclCurrentCardType->m_fn_csGetCardTypeName(); //Erases 's' at the End if ( csNewCardProposedName.Right(1).CompareNoCase("s") == 0 ) csNewCardProposedName = csNewCardProposedName.Left(csNewCardProposedName.GetLength() - 1); CString csTrueNewCardProposedName; csTrueNewCardProposedName.Format("%s_%i", csNewCardProposedName, m_fn_pclGetDocument()->m_pclCurrentCardType->m_fn_ulGetCardsNumber() + 1); m_fn_pclGetDocument()->m_fn_vCheckSpacesInString(csTrueNewCardProposedName); CPA_Meca_NewCardDialog dial(csTrueNewCardProposedName, this); if ( dial.DoModal() == IDOK ) { m_fn_pclGetDocument()->m_fn_vCheckSpacesInString(dial.m_csName); //Adds to Card Type's list of Cards CPA_Meca_Card *pclNewCard = m_fn_pclGetDocument()->m_pclCurrentCardType->m_fn_pclGetCardsList()->m_fn_pclAddElement(dial.m_csName, m_fn_pclGetDocument()->m_pclCurrentCardType, NULL, m_fn_pclGetDocument()->m_pclCurrentCardType->m_fn_csGetFileName(), m_fn_pclGetDocument()->m_pclCurrentCardType->m_fn_csGetActionName()); //Adds to the Main list m_fn_pclGetDocument()->m_clListOfCards.fn_bAddObject(pclNewCard); //Sets the text for the number of Cards m_fn_vUpdateCardsNumber(pclNewCard->m_fn_pclGetCardType()); //Updates Dialog List m_fn_pclGetDocument()->m_pclDialogList->fn_vUpdateSelection(E_lrm_ReinitList); //Edits new Card m_fn_pclGetDocument()->m_fn_vEditCard(pclNewCard); } } } //******************************************************************************* // Deletes a Card void CPA_Meca_ControlView::OnButtonDelete() { CPA_Meca_Card *pclCurrentCard = m_fn_pclGetDocument()->m_pclCurrentCard; CPA_Meca_CardType *pclCurrentCardType = pclCurrentCard->m_fn_pclGetCardType(); ERROR_ASSERT( pclCurrentCard != NULL ); ERROR_ASSERT( pclCurrentCardType != NULL ); CString csQuestion = "BE CAREFUL !\nYou are going to destroy a Mechanical Card !"; csQuestion += "Name is '" + pclCurrentCard->GetName() + "', of type '" + pclCurrentCardType->m_fn_csGetCardTypeName() + "'\n"; csQuestion += "Do you really want to continue ?"; CPA_Meca_QuestionDialog dial(this, csQuestion); if ( dial.DoModal() == IDYES ) { //Adds to the Main list m_fn_pclGetDocument()->m_clListOfCards.fn_bRemoveObject(pclCurrentCard); //Destroys the Card ... //...from the list m_fn_pclGetDocument()->m_fn_vRemoveCard(pclCurrentCard); //Sets the text for the number of Cards m_fn_vUpdateCardsNumber(pclCurrentCardType); //Updates Dialog List m_fn_pclGetDocument()->m_pclDialogList->fn_vUpdateSelection(E_lrm_ReinitList); } } //******************************************************************************* void CPA_Meca_ControlView::OnButtonRename() { CPA_Meca_NewCardDialog dial(m_fn_pclGetDocument()->m_pclCurrentCard->m_fn_csGetCardName(), this); if ( dial.DoModal() == IDOK ) { m_fn_pclGetDocument()->m_pclCurrentCard->fn_eRename(dial.m_csName); //Updates Dialog List m_fn_pclGetDocument()->m_pclDialogList->fn_vUpdateSelection(E_lrm_ReinitList); } } //******************************************************************************* void CPA_Meca_ControlView::OnButtonCopy() { //Creates a copy of the currently selected Card if ( m_fn_pclGetDocument()->m_pclCurrentCard != NULL ) { CPA_Meca_Card *pclCopyCard = m_fn_pclGetDocument()->m_pub_fn_vCreateCopyOfCard(m_fn_pclGetDocument()->m_pclCurrentCard); if (pclCopyCard == NULL) return; //ERROR_ASSERT( pclCopyCard != NULL ); //Adds to the Main list m_fn_pclGetDocument()->m_clListOfCards.fn_bAddObject(pclCopyCard); //Sets the text for the number of Cards m_fn_vUpdateCardsNumber(pclCopyCard->m_fn_pclGetCardType()); //Updates Dialog List m_fn_pclGetDocument()->m_pclDialogList->fn_vUpdateSelection(E_lrm_ReinitList); //Edits new Card m_fn_pclGetDocument()->m_fn_vEditCard(pclCopyCard); } } //******************************************************************************* void CPA_Meca_ControlView::OnSelchangeComboCardTypes() { //Gets the new selected type CPA_Meca_CardType *pclCardType = NULL; CListBox *pclTypeLB = (CListBox *)GetDlgItem(IDC_LIST_CARD_TYPES); short wIndex = pclTypeLB->GetCurSel(); if ( wIndex != CB_ERR ) { pclCardType = (CPA_Meca_CardType *)pclTypeLB->GetItemDataPtr(wIndex); //Sets document's pointer m_fn_pclGetDocument()->m_fn_vDisplayCardType(pclCardType); //Sets the text for the number of Cards m_fn_vUpdateCardsNumber(pclCardType); //Sets document's pointer if ( pclCardType->m_fn_pclGetEditedCard() != NULL ) m_fn_pclGetDocument()->m_fn_vEditCard(pclCardType->m_fn_pclGetEditedCard()); } //Refreshes controls ((CButton *)GetDlgItem(IDC_BUTTON_CREATE))->EnableWindow( wIndex != CB_ERR ); //Updates Dialog List if ( pclCardType != NULL ) { CString csType = "Cards of type '" + pclCardType->m_fn_csGetCardTypeName() + "'"; m_fn_pclGetDocument()->m_pclDialogList->fn_vInitButtonTest( csType, TRUE, TRUE); m_fn_pclGetDocument()->m_pclDialogList->fn_vUpdateSelection(E_lrm_ReinitList); } } //******************************************************************************* void CPA_Meca_ControlView::m_fn_vUpdateCardsNumber(CPA_Meca_CardType *_pclCardType) { if ( _pclCardType != NULL ) { CString csNumberOfCards; CString csCard = (_pclCardType->m_fn_pclGetCardsList()->GetCount() > 1) ? "Cards" : "Card"; csNumberOfCards.Format("%i %s", _pclCardType->m_fn_pclGetCardsList()->GetCount(), LPCTSTR(csCard)); GetDlgItem(IDC_STATIC_CARD_NUMBER)->SetWindowText(csNumberOfCards); } } //******************************************************************************* void CPA_Meca_ControlView::m_fn_vUpdateCardsName() { if ( m_fn_pclGetDocument()->m_pclCurrentCard != NULL ) { //Displays Card's Name in View's title bar CString csCardName = m_fn_pclGetDocument()->m_pclCurrentCard->GetName(); if ( m_fn_pclGetDocument()->m_pclCurrentCard->m_pub_fn_bIsNotified() ) csCardName += " (** Modified **)"; GetDlgItem(IDC_TEXT_CARD_NAME)->SetWindowText(csCardName); } } //******************************************************************************* CPA_Meca_MyDocument* CPA_Meca_ControlView::m_fn_pclGetDocument() { return g_pclInterface->m_fn_pclGetDocument(); } //******************************************************************************* BOOL CPA_Meca_ControlView::OnHelpInfo(HELPINFO* pHelpInfo) { CString csFileAndWindow = g_pclInterface->m_clDocument.m_csHelpFileNameAndPath; ::WinHelp(m_hWnd, LPCTSTR(csFileAndWindow), HELP_CONTEXT, IDH_GENERAL); return FALSE; } //************************************************************************* //Definition of texts for Tool Tips BOOL CPA_Meca_ControlView::OnToolTipNotify( UINT id, NMHDR * pNMHDR, LRESULT * pResult ) { TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pNMHDR; UINT nID =pNMHDR->idFrom; nID = ::GetDlgCtrlID((HWND)nID); BOOL bReturn = FALSE; switch ( nID ) { case IDC_BUTTON_CREATE: strcpy(pTTT->szText,"Creates a Mechanics Card"); break; case IDC_BUTTON_RENAME: strcpy(pTTT->szText,"Renames the current Card"); break; case IDC_BUTTON_DELETE: strcpy(pTTT->szText,"Deletes the current Card"); break; case IDC_BUTTON_COPY: strcpy(pTTT->szText,"Creates a copy of the current Card"); break; case IDC_LIST_CARD_TYPES: strcpy(pTTT->szText,"All types of Mechanics Card"); break; case IDC_STATIC_CARD_NUMBER: strcpy(pTTT->szText,"Number of Cards for the current Type"); break; default: strcpy(pTTT->szText,""); break; }; return (TRUE); } #define EdMeca_C_ControlsSpacing 2 #define EdMeca_C_EditHeight 15 //************************************************************************* void CPA_Meca_ControlView::OnSize(UINT nType, int cx, int cy) { CFormView::OnSize(nType, cx, cy); //Adjusts controls CRect crCurrentRect; long lBottom; //ListBox if ( GetDlgItem(IDC_LIST_CARD_TYPES) != NULL ) { GetDlgItem(IDC_LIST_CARD_TYPES)->GetWindowRect(crCurrentRect); ScreenToClient(crCurrentRect); lBottom = cy - EdMeca_C_EditHeight - 2*EdMeca_C_ControlsSpacing; crCurrentRect.bottom = lBottom; GetDlgItem(IDC_LIST_CARD_TYPES)->MoveWindow(crCurrentRect); } //Edit (for the current Card's name) if ( GetDlgItem(IDC_TEXT_CARD_NAME) != NULL ) { GetDlgItem(IDC_TEXT_CARD_NAME)->GetWindowRect(crCurrentRect); ScreenToClient(crCurrentRect); crCurrentRect.top = lBottom + EdMeca_C_ControlsSpacing; crCurrentRect.bottom = crCurrentRect.top + EdMeca_C_EditHeight; GetDlgItem(IDC_TEXT_CARD_NAME)->MoveWindow(crCurrentRect); } } //******************************************************************************* //******************************************************************************* ///////////////////////////////////////////////////////////////////////////// // CPA_Meca_ControlView diagnostics #ifdef _DEBUG void CPA_Meca_ControlView::AssertValid() const { CFormView::AssertValid(); } void CPA_Meca_ControlView::Dump(CDumpContext& dc) const { CFormView::Dump(dc); } #endif //_DEBUG