360 lines
No EOL
21 KiB
C++
360 lines
No EOL
21 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"
|
||
|
||
// v93 update 03 - 64-bit
|
||
#include "UTB64Bit.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
|
||
}
|
||
} |