356 lines
9.9 KiB
C++
356 lines
9.9 KiB
C++
// ==========================================================================
|
|
// Class Implementation: COXCustomizeWorkspaceStatePage
|
|
// ==========================================================================
|
|
|
|
// Version: 9.3
|
|
|
|
// This software along with its related components, documentation and files ("The Libraries")
|
|
// is © 1994-2007 The Code Project (1612916 Ontario Limited) and use of The Libraries is
|
|
// governed by a software license agreement ("Agreement"). Copies of the Agreement are
|
|
// available at The Code Project (www.codeproject.com), as part of the package you downloaded
|
|
// to obtain this file, or directly from our office. For a copy of the license governing
|
|
// this software, you may contact us at legalaffairs@codeproject.com, or by calling 416-849-8900.
|
|
|
|
// //////////////////////////////////////////////////////////////////////////
|
|
|
|
#include "stdafx.h"
|
|
#include "OXCustomizeWorkspaceStatePage.h"
|
|
#include "OXCustomizeManager.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
const UINT IDC_CHECK_PAGE_BASE=2000;
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// COXCustomizeWorkspaceStatePage dialog
|
|
|
|
IMPLEMENT_DYNCREATE(COXCustomizeWorkspaceStatePage, COXCustomizePage)
|
|
|
|
COXCustomizeWorkspaceStatePage::COXCustomizeWorkspaceStatePage()
|
|
{
|
|
//{{AFX_DATA_INIT(COXCustomizeWorkspaceStatePage)
|
|
m_bIncludeBars = FALSE;
|
|
m_bIncludeMainWnd = FALSE;
|
|
m_bIncludeChildFrames = FALSE;
|
|
m_bIncludeSplitterPanes = FALSE;
|
|
//}}AFX_DATA_INIT
|
|
|
|
m_nDialogID=IDD;
|
|
m_sProfileName.Empty();
|
|
}
|
|
|
|
|
|
COXCustomizeWorkspaceStatePage::~COXCustomizeWorkspaceStatePage()
|
|
{
|
|
}
|
|
|
|
|
|
BOOL COXCustomizeWorkspaceStatePage::OnCloseManager(BOOL bIsOk)
|
|
{
|
|
if(bIsOk)
|
|
{
|
|
if(!m_sProfileName.IsEmpty())
|
|
{
|
|
#ifndef _MAC
|
|
CWinApp* pApp=AfxGetApp();
|
|
ASSERT(pApp!=NULL);
|
|
|
|
if(!UpdateData(TRUE))
|
|
return FALSE;
|
|
|
|
pApp->WriteProfileInt(m_sProfileName,
|
|
_T("IncludeBars"),m_bIncludeBars);
|
|
pApp->WriteProfileInt(m_sProfileName,
|
|
_T("IncludeMainWnd"),m_bIncludeMainWnd);
|
|
pApp->WriteProfileInt(m_sProfileName,
|
|
_T("IncludeChildFrames"),m_bIncludeChildFrames);
|
|
pApp->WriteProfileInt(m_sProfileName,
|
|
_T("IncludeSplitterPanes"),m_bIncludeSplitterPanes);
|
|
|
|
// save info about customize pages viewability
|
|
POSITION pos=m_mapPageNames.GetStartPosition();
|
|
int nIndex=0;
|
|
while(pos!=NULL)
|
|
{
|
|
CString sPageKey(_T(""));
|
|
BOOL bViewable=FALSE;
|
|
m_mapPageNames.GetNextAssoc(pos,sPageKey,bViewable);
|
|
ASSERT(!sPageKey.IsEmpty());
|
|
|
|
CString sProfileKey;
|
|
sProfileKey.Format(_T("%d_CustomizePageKey"),nIndex);
|
|
pApp->WriteProfileString(m_sProfileName,sProfileKey,sPageKey);
|
|
|
|
pApp->WriteProfileInt(m_sProfileName,sPageKey,bViewable);
|
|
|
|
nIndex++;
|
|
}
|
|
#endif
|
|
}
|
|
}
|
|
else
|
|
{
|
|
GetPagesInfo();
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
BOOL COXCustomizeWorkspaceStatePage::
|
|
LoadWorkspaceState(BOOL bIncludeMainWnd/*=TRUE*/,
|
|
BOOL bIncludeBars/*=TRUE*/,
|
|
BOOL bIncludeChildFrames/*=TRUE*/,
|
|
BOOL bIncludeSplitterPanes/*=TRUE*/,
|
|
LPCTSTR lpszProfileName/*=_T("CustomizeWorkspaceState")*/)
|
|
{
|
|
m_bIncludeBars=bIncludeBars;
|
|
m_bIncludeMainWnd=bIncludeMainWnd;
|
|
m_bIncludeChildFrames=bIncludeChildFrames;
|
|
m_bIncludeSplitterPanes=bIncludeSplitterPanes;
|
|
|
|
m_sProfileName=lpszProfileName;
|
|
if(!m_sProfileName.IsEmpty())
|
|
{
|
|
#ifndef _MAC
|
|
CWinApp* pApp=AfxGetApp();
|
|
ASSERT(pApp!=NULL);
|
|
|
|
m_bIncludeBars=(BOOL)pApp->GetProfileInt(lpszProfileName,
|
|
_T("IncludeBars"),m_bIncludeBars);
|
|
m_bIncludeMainWnd=(BOOL)pApp->GetProfileInt(lpszProfileName,
|
|
_T("IncludeMainWnd"),m_bIncludeMainWnd);
|
|
m_bIncludeChildFrames=(BOOL)pApp->GetProfileInt(lpszProfileName,
|
|
_T("IncludeChildFrames"),m_bIncludeChildFrames);
|
|
m_bIncludeSplitterPanes=(BOOL)pApp->GetProfileInt(lpszProfileName,
|
|
_T("IncludeSplitterPanes"),m_bIncludeSplitterPanes);
|
|
#endif
|
|
}
|
|
|
|
m_workspaceState.IncludeMainWindow(m_bIncludeMainWnd);
|
|
m_workspaceState.IncludeChildFrame(m_bIncludeChildFrames);
|
|
m_workspaceState.IncludeSplitterPane(m_bIncludeSplitterPanes);
|
|
m_workspaceState.IncludeBarProperty(m_pCustomizeManager->IsDockingFramework() ?
|
|
FALSE : m_bIncludeBars);
|
|
BOOL bResult=m_workspaceState.LoadFromRegistry();
|
|
|
|
if(bResult)
|
|
{
|
|
// read saved info about customize pages displayed
|
|
GetPagesInfo();
|
|
}
|
|
else
|
|
{
|
|
TRACE(_T("COXCustomizeWorkspaceStatePage::LoadWorkspaceState: failed to load workspace from registry, continuing\n"));
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
BOOL COXCustomizeWorkspaceStatePage::SaveWorkspaceState()
|
|
{
|
|
if(!COXCustomizePage::SaveWorkspaceState())
|
|
return FALSE;
|
|
|
|
m_workspaceState.IncludeMainWindow(m_bIncludeMainWnd);
|
|
m_workspaceState.IncludeChildFrame(m_bIncludeChildFrames);
|
|
m_workspaceState.IncludeSplitterPane(m_bIncludeSplitterPanes);
|
|
m_workspaceState.IncludeBarProperty(m_pCustomizeManager->IsDockingFramework() ?
|
|
FALSE : m_bIncludeBars);
|
|
if(!m_workspaceState.StoreToRegistry())
|
|
{
|
|
TRACE(_T("COXCustomizeWorkspaceStatePage::SaveWorkspaceState: failed to save workspace from registry, continuing\n"));
|
|
return FALSE;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
void COXCustomizeWorkspaceStatePage::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
COXCustomizePage::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(COXCustomizeWorkspaceStatePage)
|
|
DDX_Control(pDX, IDC_OX_SEPARATOR_WORKSPACE, m_separator);
|
|
DDX_Control(pDX, IDC_OX_TREE_CUSTOMIZE_PAGES, m_treePages);
|
|
DDX_Check(pDX, IDC_OX_CHECK_BAR, m_bIncludeBars);
|
|
DDX_Check(pDX, IDC_OX_CHECK_MAINWND, m_bIncludeMainWnd);
|
|
DDX_Check(pDX, IDC_OX_CHECK_CHILD, m_bIncludeChildFrames);
|
|
DDX_Check(pDX, IDC_OX_CHECK_SPLITTER, m_bIncludeSplitterPanes);
|
|
//}}AFX_DATA_MAP
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(COXCustomizeWorkspaceStatePage, COXCustomizePage)
|
|
//{{AFX_MSG_MAP(COXCustomizeWorkspaceStatePage)
|
|
ON_NOTIFY(OTN_OPTIONCHANGED, IDC_OX_TREE_CUSTOMIZE_PAGES, OnOptionChanged)
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// COXCustomizeWorkspaceStatePage message handlers
|
|
|
|
BOOL COXCustomizeWorkspaceStatePage::Load(const COXCustomizeManager* pCustomizeManager)
|
|
{
|
|
// Call default implementation. It will load this demo dialog as the first
|
|
// page and will create About and CodeSample pages if specified.
|
|
if(!COXCustomizePage::Load(pCustomizeManager))
|
|
return FALSE;
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
void COXCustomizeWorkspaceStatePage::Unload()
|
|
{
|
|
// add here code for cleaning up all objects created by demo
|
|
//
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
COXCustomizePage::Unload();
|
|
}
|
|
|
|
void COXCustomizeWorkspaceStatePage::OnInitDialog()
|
|
{
|
|
// must call default implementation
|
|
COXCustomizePage::OnInitDialog();
|
|
|
|
// add here initialization code for your demo dialog. Treat it as a
|
|
// normal CDialog::OnInitDialog function
|
|
|
|
GetVars();
|
|
|
|
// layout
|
|
//
|
|
m_LayoutManager.TieChild(&m_treePages,OX_LMS_ANY,OX_LMT_SAME);
|
|
m_LayoutManager.TieChild(&m_separator,OX_LMS_LEFT|OX_LMS_RIGHT,OX_LMT_SAME);
|
|
//
|
|
///////////////////////////////////////
|
|
|
|
m_bInitialized=TRUE;
|
|
}
|
|
|
|
|
|
void COXCustomizeWorkspaceStatePage::GetVars()
|
|
{
|
|
if(!m_pCustomizeManager->IsMDIFramework())
|
|
GetDlgItem(IDC_OX_CHECK_CHILD)->ShowWindow(SW_HIDE);
|
|
|
|
// build tree control
|
|
//
|
|
m_treePages.DeleteAllItems();
|
|
|
|
// root item
|
|
int nImageIndex=m_treePages.AddImage(IDB_OX_CUSTOMIZEWORKSPACESTATE_PAGES,RGB(192,192,192));
|
|
ASSERT(nImageIndex!=-1);
|
|
CString sItem;
|
|
VERIFY(sItem.LoadString(IDS_OX_CSTMZEWORKSPACEGROUP));//"Customize pages (check the page to be displayed)"
|
|
HTREEITEM hRootItem=m_treePages.AddControlGroup(sItem,NULL,TRUE,
|
|
nImageIndex,nImageIndex);
|
|
ASSERT(hRootItem!=NULL);
|
|
m_treePages.SetItemState(hRootItem,TVIS_BOLD,TVIS_BOLD);
|
|
|
|
CMapPages* pMapPages=m_pCustomizeManager->GetMapPages();
|
|
ASSERT(pMapPages!=NULL);
|
|
POSITION pos=pMapPages->GetStartPosition();
|
|
int nIndex=0;
|
|
while(pos!=NULL)
|
|
{
|
|
DWORD dwID=NULL;
|
|
COXCustomizePage* pCustomizePage=NULL;
|
|
pMapPages->GetNextAssoc(pos,pCustomizePage,dwID);
|
|
ASSERT(pCustomizePage!=NULL && dwID!=NULL);
|
|
|
|
|
|
HSHBGROUP hGroupTest=NULL;
|
|
int nIndexTest=-1;
|
|
BOOL bIsViewable=m_pCustomizeManager->FindPage(pCustomizePage,
|
|
hGroupTest,nIndexTest);
|
|
BOOL bIsReadOnly=(pCustomizePage==this);
|
|
HTREEITEM hItem=m_treePages.AddCheckBox(IDC_CHECK_PAGE_BASE+nIndex,
|
|
pCustomizePage->GetTitle(),hRootItem,
|
|
(bIsViewable ? OTITEM_CHECKED : OTITEM_UNCHECKED),
|
|
TVI_SORT,bIsReadOnly);
|
|
ASSERT(hItem!=NULL);
|
|
VERIFY(m_treePages.SetItemData(hItem,(LPARAM)pCustomizePage));
|
|
|
|
nIndex++;
|
|
}
|
|
}
|
|
|
|
|
|
BOOL COXCustomizeWorkspaceStatePage::IsViewablePage(COXCustomizePage* pCustomizePage)
|
|
{
|
|
ASSERT(pCustomizePage!=NULL);
|
|
if(pCustomizePage==NULL)
|
|
return FALSE;
|
|
|
|
if(pCustomizePage==this)
|
|
return TRUE;
|
|
|
|
CString sPageKey=BuildPageKey(pCustomizePage);
|
|
ASSERT(!sPageKey.IsEmpty());
|
|
BOOL bViewable=FALSE;
|
|
if(!m_mapPageNames.Lookup(sPageKey,bViewable))
|
|
{
|
|
TRACE(_T("COXCustomizeWorkspaceStatePage::IsViewablePage: failed to find specified page\n"));
|
|
return TRUE;
|
|
}
|
|
|
|
return bViewable;
|
|
}
|
|
|
|
|
|
void COXCustomizeWorkspaceStatePage::OnOptionChanged(NMHDR* pNMHDR, LRESULT* pResult)
|
|
{
|
|
NMOPTIONTREE* pNMOptionTree=(NMOPTIONTREE*)pNMHDR;
|
|
ASSERT(pNMOptionTree!=NULL);
|
|
// TODO: Add your control notification handler code here
|
|
|
|
*pResult = 0;
|
|
|
|
HTREEITEM hItem=pNMOptionTree->hItem;
|
|
ASSERT(hItem!=NULL);
|
|
COXCustomizePage* pCustomizePage=
|
|
(COXCustomizePage*)m_treePages.GetItemData(hItem);
|
|
ASSERT(pCustomizePage!=NULL);
|
|
|
|
BOOL bViewable=FALSE;
|
|
CString sPageKey=BuildPageKey(pCustomizePage);
|
|
ASSERT(!sPageKey.IsEmpty());
|
|
|
|
bViewable=(pNMOptionTree->nNewCheck==OTITEM_CHECKED);
|
|
m_mapPageNames.SetAt(sPageKey,bViewable);
|
|
|
|
}
|
|
|
|
|
|
void COXCustomizeWorkspaceStatePage::GetPagesInfo()
|
|
{
|
|
m_mapPageNames.RemoveAll();
|
|
|
|
if(!m_sProfileName.IsEmpty())
|
|
{
|
|
#ifndef _MAC
|
|
CWinApp* pApp=AfxGetApp();
|
|
ASSERT(pApp!=NULL);
|
|
|
|
for(int nIndex=0; ; nIndex++)
|
|
{
|
|
CString sProfileKey;
|
|
sProfileKey.Format(_T("%d_CustomizePageKey"),nIndex);
|
|
CString sPageKey=pApp->GetProfileString(m_sProfileName,sProfileKey);
|
|
if(sPageKey.IsEmpty())
|
|
break;
|
|
BOOL bViewable=(BOOL)pApp->GetProfileInt(m_sProfileName,sPageKey,TRUE);
|
|
m_mapPageNames.SetAt(sPageKey,bViewable);
|
|
}
|
|
#endif
|
|
}
|
|
} |