#include "stdafx.h"
#include "PGL/pgl.h"
#include "PGL/PGLAllPropsDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
CPGLAllPropsDlg::CPGLAllPropsDlg(CWnd* pParent , CPGLGraph* _pGraph)
: CDialog(CPGLAllPropsDlg::IDD, pParent)
{
PGL_TRACE("CPGLAllPropsDlg - construtor\n");
m_pGraph=_pGraph;
m_pSheet=NULL;
m_lSelID=0;
}
void CPGLAllPropsDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_PGL_OBJECTTREE, m_tree);
}
BEGIN_MESSAGE_MAP(CPGLAllPropsDlg, CDialog)
ON_WM_DESTROY()
ON_NOTIFY(TVN_SELCHANGED, IDC_PGL_OBJECTTREE, OnSelchangedPglObjecttree)
ON_BN_CLICKED(IDC_PGL_BUTTON_CLOSE, OnPglButtonClose)
END_MESSAGE_MAP()
void CPGLAllPropsDlg::FillTree()
{
CString str;
ASSERT_VALID(m_pGraph);
VERIFY(m_imgList.Create( 12, 12, ILC_COLOR4, 7, 5));
COLORREF crMask=0;
HINSTANCE hOldInst=AfxGetResourceHandle();
AfxSetResourceHandle(AfxGetInstanceHandle());
m_bmpSelect.LoadBitmap(IDB_PGL_SELECT_BITMAP);
AfxSetResourceHandle(hOldInst);
m_imgList.Add(&m_bmpSelect,crMask);
m_tree.SetImageList(&m_imgList, TVSIL_NORMAL);
m_pGraph->AddPropTree(&m_tree,TVI_ROOT);
}
BOOL CPGLAllPropsDlg::OnInitDialog()
{
CDialog::OnInitDialog();
FillTree();
UpdateData(FALSE);
return TRUE;
}
void CPGLAllPropsDlg::OnDestroy()
{
while (m_imgList.GetImageCount()>0)
{
m_imgList.Remove(0);
}
m_imgList.DeleteImageList();
if (m_pSheet)
{
CPropertyPage* pPage=m_pSheet->GetActivePage();
ASSERT_VALID(pPage);
pPage->OnKillActive();
for (int i=0;i<m_pSheet->GetPageCount();i++)
{
CPropertyPage* pPage=m_pSheet->GetPage(i);
if (pPage)
delete pPage;
}
delete m_pSheet;
m_pSheet=NULL;
}
m_tree.DeleteAllItems();
CDialog::OnDestroy();
}
void CPGLAllPropsDlg::OnSelchangedPglObjecttree(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
ASSERT_VALID(m_pGraph);
if (m_pSheet)
{
CPropertyPage* pPage=m_pSheet->GetActivePage();
ASSERT_VALID(pPage);
pPage->OnKillActive();
for (int i=0;i<m_pSheet->GetPageCount();i++)
{
pPage=m_pSheet->GetPage(i);
if (pPage)
delete pPage;
}
delete m_pSheet;
m_pSheet=NULL;
}
CPGLObject* pObj;
TVITEM pItemOld=pNMTreeView->itemOld;
TVITEM pItemNew=pNMTreeView->itemNew;
if (pItemOld.hItem)
{
VERIFY(m_tree.SetItemState( pItemOld.hItem, !TVIS_BOLD , TVIS_BOLD) );
pObj=m_pGraph->FindObject(pItemOld.lParam);
if (pObj)
{
m_tree.SetItemText( pItemOld.hItem,pObj->GetName());
}
}
VERIFY(m_tree.SetItemState( pItemNew.hItem, TVIS_BOLD ,TVIS_BOLD) );
if (pItemNew.lParam==-1)
{
*pResult = 0;
return;
}
pObj=m_pGraph->FindObject(pItemNew.lParam);
if (pObj==NULL)
{
*pResult = 0;
return;
}
ASSERT_VALID(pObj);
m_pSheet=new CPropertySheet;
pObj->AddPropertyPage(m_pSheet);
m_pSheet->Create(this, WS_CHILD | WS_VISIBLE, 0);
m_pSheet->ModifyStyleEx(0,WS_EX_CONTROLPARENT);
m_pSheet->ModifyStyle(0,WS_TABSTOP);
CRect rect;
GetDlgItem(IDC_PGL_STATIC_PROPSHEET)->GetWindowRect(&rect);
ScreenToClient(&rect);
m_pSheet->SetWindowPos(NULL,rect.left,rect.top,
rect.right-rect.left,rect.top-rect.bottom,
SWP_NOZORDER | SWP_NOSIZE | SWP_NOACTIVATE);
*pResult = 0;
}
void CPGLAllPropsDlg::OnPglButtonClose()
{
CDialog::OnOK();
}