////////////////////////////////////////////////////////////////////////////////
//
// APropertyUserControlEvent  -     
// ATreeCtrlEvent             -    ocx 
// AToolBarCtrlEvent          -    ocx toolbar'a
// AContextMenuEvent          -    ocx  
//
////////////////////////////////////////////////////////////////////////////////
#include "stdafx.h"

//#include "cPropMen.h"
#include "aPropUserEvent.h"
#include "Resource.h"


//-------------------------------------------------------------------------------
// 
// ---
APropertyUserControlEvent::APropertyUserControlEvent( LPDISPATCH ctrl, long controlID )
  : ABaseEvent( ctrl, DIID_ksPropertyUserControlNotify ), m_controlID(controlID)
 
{
  Advise();
}

//-------------------------------------------------------------------------------
// 
// ---
APropertyUserControlEvent::~APropertyUserControlEvent()
{
  DestroyOCX();
}

//-------------------------------------------------------------------------------
//  
// ---
BEGIN_EVENTSINK_MAP(APropertyUserControlEvent, ABaseEvent)
  //    
  ON_EVENT (APropertyUserControlEvent, (unsigned int)-1, puCreateOCX,  CreateOCX,  VTS_DISPATCH )
  //    
  ON_EVENT (APropertyUserControlEvent, (unsigned int)-1, puDestroyOCX, DestroyOCX, VTS_NONE )
END_EVENTSINK_MAP()

//-----------------------------------------------------------------------------
// puCreateOCX -     
// ---
afx_msg BOOL APropertyUserControlEvent::CreateOCX( LPDISPATCH iOcx )
{
  if ( m_notifyObj )
    m_notifyObj->CallbackCreateOCX ( iOcx, m_controlID );
  return TRUE;
}


//-----------------------------------------------------------------------------
// puDestroyOCX - " OCX ."
// ---
afx_msg BOOL APropertyUserControlEvent::DestroyOCX( )
{
  if ( m_notifyObj )
    m_notifyObj->CallbackDestroyOCX ( m_controlID );
  return TRUE;
}



////////////////////////////////////////////////////////////////////////////////
//
// ATreeCtrlEvent  -    ocx 
//
////////////////////////////////////////////////////////////////////////////////

//-------------------------------------------------------------------------------
// 
// ---
ATreeCtrlEvent::ATreeCtrlEvent( LPDISPATCH ctrl )
  : ABaseEvent( ctrl, DIID_ITreeViewEvents )
{
  Advise();
}

//-------------------------------------------------------------------------------
// 
// ---
ATreeCtrlEvent::~ATreeCtrlEvent()
{
}

//-------------------------------------------------------------------------------
//  
// ---
BEGIN_EVENTSINK_MAP(ATreeCtrlEvent, ABaseEvent)
  ON_EVENT(ATreeCtrlEvent, (unsigned int)-1, 1, BeforeLabelEdit, VTS_PI2 )  
  ON_EVENT(ATreeCtrlEvent, (unsigned int)-1, 2, AfterLabelEdit,  VTS_PI2 VTS_PBSTR )
  ON_EVENT(ATreeCtrlEvent, (unsigned int)-1, 3, Collapse,        VTS_DISPATCH )
  ON_EVENT(ATreeCtrlEvent, (unsigned int)-1, 4, Expand,          VTS_DISPATCH )
  ON_EVENT(ATreeCtrlEvent, (unsigned int)-1, 5, NodeClick,       VTS_DISPATCH )
  ON_EVENT(ATreeCtrlEvent, (unsigned int)-1, 6, NodeCheck,       VTS_DISPATCH )
END_EVENTSINK_MAP()
  

//-----------------------------------------------------------------------------
/// 
// ---
void ATreeCtrlEvent::BeforeLabelEdit ( short * Cancel )
{
  if ( ::YesNo("  ?") == 0 )
    *Cancel = true;
}
  

//-----------------------------------------------------------------------------
/// 
// ---
void ATreeCtrlEvent::AfterLabelEdit ( short * Cancel, BSTR * NewString )
{
  if ( ::YesNo(" ?") == 0 )
    *Cancel = true;
}
  

//-----------------------------------------------------------------------------
/// 
// ---
void ATreeCtrlEvent::Collapse ( struct INode * Node )
{
  if ( Node )
  {
    CString buf;
    buf.Format(_T("  - %s"), (LPCTSTR)Node->GetText() );
   ::MessageT((LPTSTR)(LPCTSTR)buf);
  }
}
  

//-----------------------------------------------------------------------------
/// 
// ---
void ATreeCtrlEvent::Expand ( struct INode * Node )
{
  if ( Node )
  {
    CString buf;
    buf.Format(_T("  - %s"), (LPCTSTR)Node->GetText() );
    ::MessageT((LPTSTR)(LPCTSTR)buf);
  }
}
  

//-----------------------------------------------------------------------------
/// 
// ---
void ATreeCtrlEvent::NodeClick ( struct INode * Node )
{
  CString buf;
  buf.Format(_T("NodeClick - %s"), Node ? (LPCTSTR)Node->Text : _T("Unknown") );
  ::MessageT((LPTSTR)(LPCTSTR)buf);
}
 



//-----------------------------------------------------------------------------
/// 
// ---
void ATreeCtrlEvent::NodeCheck ( struct INode * Node )
{
}


////////////////////////////////////////////////////////////////////////////////
//
// AToolBarCtrlEvent  -    ocx toolbar'a
//
////////////////////////////////////////////////////////////////////////////////

//-------------------------------------------------------------------------------
// 
// ---
AToolBarCtrlEvent::AToolBarCtrlEvent( LPDISPATCH ctrl )
  : ABaseEvent( ctrl, DIID_IToolbarEvents )
{
  Advise();
}

//-------------------------------------------------------------------------------
// 
// ---
AToolBarCtrlEvent::~AToolBarCtrlEvent()
{
}

//-------------------------------------------------------------------------------
//  
// ---
BEGIN_EVENTSINK_MAP(AToolBarCtrlEvent, ABaseEvent)
  ON_EVENT(AToolBarCtrlEvent, (unsigned int)-1, 1, ButtonClick,     VTS_DISPATCH )  
  ON_EVENT(AToolBarCtrlEvent, (unsigned int)-1, 2, Change,          VTS_NONE )
  ON_EVENT(AToolBarCtrlEvent, (unsigned int)-1, 3, ButtonMenuClick, VTS_DISPATCH )
  ON_EVENT(AToolBarCtrlEvent, (unsigned int)-1, 4, ButtonDropDown,  VTS_DISPATCH )
END_EVENTSINK_MAP()
  

//-----------------------------------------------------------------------------
/// 
// ---
void AToolBarCtrlEvent::ButtonClick ( struct IButton * Button )
{
  ::Message("ToolBar ButtonClick");
}


//-----------------------------------------------------------------------------
/// 
// ---
void AToolBarCtrlEvent::Change()
{
}

//-----------------------------------------------------------------------------
/// 
// ---
void AToolBarCtrlEvent::ButtonMenuClick ( struct IButtonMenu * ButtonMenu )
{
  ::Message("ButtonMenuClick");
}


//-----------------------------------------------------------------------------
/// 
// ---
void AToolBarCtrlEvent::ButtonDropDown ( struct IButton * Button )
{
}
  

////////////////////////////////////////////////////////////////////////////////
//
// AContextMenuEvent          -    ocx  
//
////////////////////////////////////////////////////////////////////////////////

//-------------------------------------------------------------------------------
// 
// ---
AContextMenuEvent::AContextMenuEvent( _DVCTree * ctrl )
  : ABaseEvent( ctrl, DIID__DVCTreeEvents )
  , m_ctrl    ( ctrl )
{
  // BitMap  
  ASSERT(m_MenuBmp.LoadBitmap(MAKEINTRESOURCE(IDB_MENU_BITMAP)));
  m_contextMenu.CreatePopupMenu();
  m_contextMenu.AppendMenu(MF_STRING | MF_ENABLED,              IDM_MENU_COMMAND1, _T("Test1"));
  m_contextMenu.AppendMenu(MF_STRING | MF_GRAYED,               IDM_MENU_COMMAND2, _T("Test2"));
  m_contextMenu.AppendMenu(MF_STRING | MF_ENABLED | MF_CHECKED, IDM_MENU_COMMAND3, _T("Test3"));
  m_contextMenu.AppendMenu(MF_STRING | MF_ENABLED | MF_CHECKED, IDM_MENU_COMMAND4, _T("Test4"));
  m_contextMenu.SetMenuItemBitmaps(IDM_MENU_COMMAND3, MF_BYCOMMAND, &m_MenuBmp, &m_MenuBmp);

  if ( m_ctrl )
      m_ctrl->SetContextMenu( (long)(HMENU)m_contextMenu );
  else
    ASSERT(FALSE);

  Advise();
}

//-------------------------------------------------------------------------------
// 
// ---
AContextMenuEvent::~AContextMenuEvent()
{
    if ( m_ctrl )
      m_ctrl->SetContextMenu( NULL );
  else
    ASSERT(FALSE);

}

//-------------------------------------------------------------------------------
//  
// ---
BEGIN_EVENTSINK_MAP(AContextMenuEvent, ABaseEvent)
  ON_EVENT(AContextMenuEvent, (unsigned int)-1, 1, MenuCommand, VTS_I4 )  
END_EVENTSINK_MAP()
  

//-----------------------------------------------------------------------------
/// 
// ---
void AContextMenuEvent::MenuCommand( long Id )
{
  ::Message("MenuClick");
}
  
