You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
774 lines
21 KiB
C++
774 lines
21 KiB
C++
// XTPSyntaxEditPropertiesPageColor.cpp : implementation file
|
|
//
|
|
// This file is a part of the XTREME TOOLKIT PRO MFC class library.
|
|
// (c)1998-2012 Codejock Software, All Rights Reserved.
|
|
//
|
|
// THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
|
|
// RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
|
|
// CONSENT OF CODEJOCK SOFTWARE.
|
|
//
|
|
// THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
|
|
// IN THE XTREME SYNTAX EDIT LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
|
|
// YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
|
|
// SINGLE COMPUTER.
|
|
//
|
|
// CONTACT INFORMATION:
|
|
// support@codejock.com
|
|
// http://www.codejock.com
|
|
//
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
#include "StdAfx.h"
|
|
#include "Resource.h"
|
|
|
|
// common includes
|
|
#include "Common/XTPSmartPtrInternalT.h"
|
|
#include "Common/XTPVC80Helpers.h"
|
|
#include "Common/XTPColorManager.h"
|
|
|
|
#include "Common/XTPResourceManager.h"
|
|
#include "Common/XTPDrawHelpers.h"
|
|
|
|
// syntax editor includes
|
|
#include "XTPSyntaxEditDefines.h"
|
|
#include "XTPSyntaxEditStruct.h"
|
|
#include "XTPSyntaxEditLexPtrs.h"
|
|
#include "XTPSyntaxEditLexClassSubObjT.h"
|
|
#include "XTPSyntaxEditSectionManager.h"
|
|
#include "XTPSyntaxEditLexCfgFileReader.h"
|
|
#include "XTPSyntaxEditLexClassSubObjDef.h"
|
|
#include "XTPSyntaxEditLexClass.h"
|
|
#include "XTPSyntaxEditLexColorFileReader.h"
|
|
#include "XTPSyntaxEditCtrl.h"
|
|
#include "XTPSyntaxEditDoc.h"
|
|
#include "XTPSyntaxEditView.h"
|
|
#include "XTPSyntaxEditPaintManager.h"
|
|
#include "XTPSyntaxEditColorSampleText.h"
|
|
#include "XTPSyntaxEditColorComboBox.h"
|
|
#include "XTPSyntaxEditPropertiesPage.h"
|
|
|
|
#ifdef _DEBUG
|
|
#undef THIS_FILE
|
|
static char BASED_CODE THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
|
|
AFX_STATIC int CALLBACK EnumFontFamExProc(
|
|
ENUMLOGFONTEX *lpelfe, // logical-font data
|
|
NEWTEXTMETRICEX *lpntme, // physical-font data
|
|
DWORD FontType, // type of font
|
|
LPARAM lParam); // application-defined data
|
|
|
|
namespace XTPSyntaxEditLexAnalyser
|
|
{
|
|
extern CString MakeStr(const CStringArray& rArProps, LPCTSTR strSplitter);
|
|
extern BOOL PropPathSplit(LPCTSTR pcszPropPath, CStringArray& rArProps);
|
|
}
|
|
|
|
using namespace XTPSyntaxEditLexAnalyser;
|
|
|
|
//===========================================================================
|
|
// CXTPSyntaxEditPropertiesPageColor property page
|
|
//===========================================================================
|
|
|
|
CXTPSyntaxEditPropertiesPageColor::CXTPSyntaxEditPropertiesPageColor(CXTPSyntaxEditView* pEditView/*=NULL*/)
|
|
: //CPropertyPage(CXTPSyntaxEditPropertiesPageColor::IDD),
|
|
m_bModified(FALSE)
|
|
, m_pEditView(pEditView)
|
|
, m_parLexClassInfo(NULL)
|
|
{
|
|
|
|
m_psp.dwFlags |= PSP_DLGINDIRECT;
|
|
m_psp.pResource = XTPResourceManager()->LoadDialogTemplate(IDD);
|
|
|
|
//{{AFX_DATA_INIT(CXTPSyntaxEditPropertiesPageColor)
|
|
m_bBold = FALSE;
|
|
m_bItalic = FALSE;
|
|
m_bUnderline = FALSE;
|
|
//}}AFX_DATA_INIT
|
|
|
|
SetDefaults();
|
|
|
|
m_ptrConfigMgr = NULL;
|
|
|
|
if (m_pEditView)
|
|
{
|
|
CXTPSyntaxEditConfigurationManager* ptrConfigMgr =
|
|
m_pEditView->GetEditCtrl().GetLexConfigurationManager();
|
|
|
|
if (ptrConfigMgr)
|
|
{
|
|
m_ptrConfigMgr = ptrConfigMgr;
|
|
CMDTARGET_ADDREF(m_ptrConfigMgr);
|
|
|
|
m_pTextSchemesMgr = &m_ptrConfigMgr->GetTextSchemesManager();
|
|
}
|
|
}
|
|
}
|
|
|
|
CXTPSyntaxEditPropertiesPageColor::~CXTPSyntaxEditPropertiesPageColor()
|
|
{
|
|
XTPSyntaxEditLexConfig()->CleanInfoMap(m_mapLexClassInfo);
|
|
|
|
CMDTARGET_RELEASE(m_ptrConfigMgr);
|
|
|
|
}
|
|
|
|
void CXTPSyntaxEditPropertiesPageColor::SetDefaults()
|
|
{
|
|
// reset color values.
|
|
m_crText = ::GetSysColor(COLOR_WINDOWTEXT);
|
|
m_crBack = ::GetSysColor(COLOR_WINDOW);
|
|
m_crHiliteText = ::GetSysColor(COLOR_HIGHLIGHTTEXT);
|
|
m_crHiliteBack = ::GetSysColor(COLOR_HIGHLIGHT);
|
|
|
|
// reset font attribute flags.
|
|
m_bBold = FALSE;
|
|
m_bItalic = FALSE;
|
|
m_bUnderline = FALSE;
|
|
|
|
if (::IsWindow(m_hWnd))
|
|
{
|
|
UpdateData(FALSE);
|
|
}
|
|
}
|
|
|
|
void CXTPSyntaxEditPropertiesPageColor::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CPropertyPage::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CXTPSyntaxEditPropertiesPageColor)
|
|
DDX_Check(pDX, XTP_IDC_EDIT_CHK_BOLD, m_bBold);
|
|
DDX_Check(pDX, XTP_IDC_EDIT_CHK_ITALIC, m_bItalic);
|
|
DDX_Check(pDX, XTP_IDC_EDIT_CHK_UNDERLINE, m_bUnderline);
|
|
DDX_Control(pDX, XTP_IDC_EDIT_COMB_TEXT, m_wndComboText);
|
|
DDX_Control(pDX, XTP_IDC_EDIT_COMB_BACK, m_wndComboBack);
|
|
DDX_Control(pDX, XTP_IDC_EDIT_COMB_TEXTSEL, m_wndComboHiliteText);
|
|
DDX_Control(pDX, XTP_IDC_EDIT_COMB_BACKSEL, m_wndComboHiliteBack);
|
|
DDX_Control(pDX, XTP_IDC_EDIT_TXT_SAMPLE, m_txtSample);
|
|
DDX_Control(pDX, XTP_IDC_EDIT_TXT_SAMPLESEL, m_txtSampleSel);
|
|
DDX_Control(pDX, XTP_IDC_EDIT_LBOX_SCHEMANAMES, m_lboxName);
|
|
DDX_Control(pDX, XTP_IDC_EDIT_LBOX_SCHEMAPROP, m_lboxProp);
|
|
DDX_Control(pDX, XTP_IDC_EDIT_CHK_BOLD, m_btnBold);
|
|
DDX_Control(pDX, XTP_IDC_EDIT_CHK_ITALIC, m_btnItalic);
|
|
DDX_Control(pDX, XTP_IDC_EDIT_CHK_UNDERLINE, m_btnUnderline);
|
|
DDX_Control(pDX, XTP_IDC_EDIT_BTN_CUSTOM_TEXT, m_btnCustomText);
|
|
DDX_Control(pDX, XTP_IDC_EDIT_BTN_CUSTOM_BACK, m_btnCustomBack);
|
|
DDX_Control(pDX, XTP_IDC_EDIT_BTN_CUSTOM_TEXTSEL, m_btnCustomHiliteText);
|
|
DDX_Control(pDX, XTP_IDC_EDIT_BTN_CUSTOM_BACKSEL, m_btnCustomHiliteBack);
|
|
DDX_Control(pDX, XTP_IDC_EDIT_GRP_SAMPLE, m_gboxSampleText);
|
|
DDX_CBSyntaxColor(pDX, XTP_IDC_EDIT_COMB_TEXT, m_crText);
|
|
DDX_CBSyntaxColor(pDX, XTP_IDC_EDIT_COMB_BACK, m_crBack);
|
|
DDX_CBSyntaxColor(pDX, XTP_IDC_EDIT_COMB_TEXTSEL, m_crHiliteText);
|
|
DDX_CBSyntaxColor(pDX, XTP_IDC_EDIT_COMB_BACKSEL, m_crHiliteBack);
|
|
//}}AFX_DATA_MAP
|
|
}
|
|
|
|
IMPLEMENT_DYNCREATE(CXTPSyntaxEditPropertiesPageColor, CPropertyPage)
|
|
|
|
BEGIN_MESSAGE_MAP(CXTPSyntaxEditPropertiesPageColor, CPropertyPage)
|
|
//{{AFX_MSG_MAP(CXTPSyntaxEditPropertiesPageColor)
|
|
ON_BN_CLICKED(XTP_IDC_EDIT_CHK_BOLD, OnChkBold)
|
|
ON_BN_CLICKED(XTP_IDC_EDIT_CHK_ITALIC, OnChkItalic)
|
|
ON_BN_CLICKED(XTP_IDC_EDIT_CHK_UNDERLINE, OnChkUnderline)
|
|
ON_BN_CLICKED(XTP_IDC_EDIT_BTN_CUSTOM_TEXT, OnBtnCustomText)
|
|
ON_BN_CLICKED(XTP_IDC_EDIT_BTN_CUSTOM_BACK, OnBtnCustomBack)
|
|
ON_BN_CLICKED(XTP_IDC_EDIT_BTN_CUSTOM_TEXTSEL, OnBtnCustomHiliteText)
|
|
ON_BN_CLICKED(XTP_IDC_EDIT_BTN_CUSTOM_BACKSEL, OnBtnCustomtHiliteBack)
|
|
ON_CBN_SELENDOK(XTP_IDC_EDIT_COMB_TEXTSEL, OnSelEndOkHiliteText)
|
|
ON_CBN_SELENDOK(XTP_IDC_EDIT_COMB_BACKSEL, OnSelEndOkHiliteBack)
|
|
ON_CBN_SELENDOK(XTP_IDC_EDIT_COMB_TEXT, OnSelEndOkText)
|
|
ON_CBN_SELENDOK(XTP_IDC_EDIT_COMB_BACK, OnSelEndOkBack)
|
|
ON_LBN_SELCHANGE(XTP_IDC_EDIT_LBOX_SCHEMANAMES, OnSelChangeSchemaNames)
|
|
ON_LBN_SELCHANGE(XTP_IDC_EDIT_LBOX_SCHEMAPROP, OnSelChangeSchemaProp)
|
|
ON_LBN_DBLCLK(XTP_IDC_EDIT_LBOX_SCHEMANAMES, OnDblClickSchema)
|
|
ON_WM_CONTEXTMENU()
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
void CXTPSyntaxEditPropertiesPageColor::UpdateSampleColors()
|
|
{
|
|
m_txtSampleSel.SetBackColor(m_crHiliteBack);
|
|
m_txtSampleSel.SetTextColor(m_crHiliteText);
|
|
m_txtSample.SetBackColor(m_crBack);
|
|
m_txtSample.SetTextColor(m_crText);
|
|
}
|
|
|
|
BOOL CXTPSyntaxEditPropertiesPageColor::OnInitDialog()
|
|
{
|
|
CPropertyPage::OnInitDialog();
|
|
|
|
// TODO: Add extra initialization here
|
|
m_wndComboHiliteBack.SetAutoColor(::GetSysColor(COLOR_HIGHLIGHT));
|
|
m_wndComboHiliteText.SetAutoColor(::GetSysColor(COLOR_HIGHLIGHTTEXT));
|
|
m_wndComboBack.SetAutoColor(::GetSysColor(COLOR_WINDOW));
|
|
m_wndComboText.SetAutoColor(::GetSysColor(COLOR_WINDOWTEXT));
|
|
|
|
if (m_wndComboBack.SetSelColor(m_crBack) == CB_ERR)
|
|
{
|
|
m_wndComboBack.SetUserColor(m_crBack);
|
|
m_wndComboBack.SetSelColor(m_crBack);
|
|
}
|
|
|
|
if (m_wndComboText.SetSelColor(m_crText) == CB_ERR)
|
|
{
|
|
m_wndComboText.SetUserColor(m_crText);
|
|
m_wndComboText.SetSelColor(m_crText);
|
|
}
|
|
|
|
if (m_wndComboHiliteBack.SetSelColor(m_crHiliteBack) == CB_ERR)
|
|
{
|
|
m_wndComboHiliteBack.SetUserColor(m_crHiliteBack);
|
|
m_wndComboHiliteBack.SetSelColor(m_crHiliteBack);
|
|
}
|
|
|
|
if (m_wndComboHiliteText.SetSelColor(m_crHiliteText) == CB_ERR)
|
|
{
|
|
m_wndComboHiliteText.SetUserColor(m_crHiliteText);
|
|
m_wndComboHiliteText.SetSelColor(m_crHiliteText);
|
|
}
|
|
|
|
XTPSyntaxEditLexConfig()->CopyInfoMap(m_mapLexClassInfo);
|
|
|
|
// Get all schemes names
|
|
CXTPSyntaxEditSchemaFileInfoList* pinfoList = m_pTextSchemesMgr->GetSchemaList();
|
|
for (POSITION pos = pinfoList->GetHeadPosition(); pos;)
|
|
{
|
|
XTP_EDIT_SCHEMAFILEINFO& info = pinfoList->GetNext(pos);
|
|
int iIndex = m_lboxName.AddString((info.csDesc.GetLength() > 0)? info.csDesc: info.csName);
|
|
if (iIndex != LB_ERR)
|
|
{
|
|
m_lboxName.SetItemData(iIndex, (DWORD_PTR)&info);
|
|
}
|
|
}
|
|
|
|
if (m_lboxName.GetCount() > 0)
|
|
{
|
|
m_lboxName.SetCurSel(0);
|
|
OnSelChangeSchemaNames();
|
|
}
|
|
|
|
return TRUE; // return TRUE unless you set the focus to a control
|
|
// EXCEPTION: OCX Property Pages should return FALSE
|
|
}
|
|
|
|
BOOL CXTPSyntaxEditPropertiesPageColor::WriteRegistryValues()
|
|
{
|
|
if (!::IsWindow(m_pEditView->GetSafeHwnd()))
|
|
return FALSE;
|
|
|
|
for (POSITION pos = m_mapLexClassInfo.GetStartPosition(); pos;)
|
|
{
|
|
CString csKey; CXTPSyntaxEditLexClassInfoArray* pLexClassArray = NULL;
|
|
m_mapLexClassInfo.GetNextAssoc(pos, csKey, (void*&)pLexClassArray);
|
|
XTPSyntaxEditLexConfig()->WriteCfgFile(csKey, *pLexClassArray);
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
void CXTPSyntaxEditPropertiesPageColor::OnSelEndOkHiliteText()
|
|
{
|
|
UpdateData();
|
|
UpdateSampleColors();
|
|
SetModified(TRUE);
|
|
UpdateColorValue(m_wndComboHiliteText, m_crHiliteText, XTPLEX_ATTR_TXT_COLORSELFG);
|
|
}
|
|
|
|
void CXTPSyntaxEditPropertiesPageColor::OnSelEndOkHiliteBack()
|
|
{
|
|
UpdateData();
|
|
UpdateSampleColors();
|
|
SetModified(TRUE);
|
|
UpdateColorValue(m_wndComboHiliteBack, m_crHiliteBack, XTPLEX_ATTR_TXT_COLORSELBK);
|
|
}
|
|
|
|
void CXTPSyntaxEditPropertiesPageColor::OnSelEndOkText()
|
|
{
|
|
UpdateData();
|
|
UpdateSampleColors();
|
|
SetModified(TRUE);
|
|
UpdateColorValue(m_wndComboText, m_crText, XTPLEX_ATTR_TXT_COLORFG);
|
|
}
|
|
|
|
void CXTPSyntaxEditPropertiesPageColor::OnSelEndOkBack()
|
|
{
|
|
UpdateData();
|
|
UpdateSampleColors();
|
|
SetModified(TRUE);
|
|
UpdateColorValue(m_wndComboBack, m_crBack, XTPLEX_ATTR_TXT_COLORBK);
|
|
}
|
|
|
|
void CXTPSyntaxEditPropertiesPageColor::OnChkBold()
|
|
{
|
|
UpdateData();
|
|
UpdateFont();
|
|
SetModified(TRUE);
|
|
UpdateFontValue(m_bBold, XTPLEX_ATTR_TXT_BOLD);
|
|
}
|
|
|
|
void CXTPSyntaxEditPropertiesPageColor::OnChkItalic()
|
|
{
|
|
UpdateData();
|
|
UpdateFont();
|
|
SetModified(TRUE);
|
|
UpdateFontValue(m_bItalic, XTPLEX_ATTR_TXT_ITALIC);
|
|
}
|
|
|
|
void CXTPSyntaxEditPropertiesPageColor::OnChkUnderline()
|
|
{
|
|
UpdateData();
|
|
UpdateFont();
|
|
SetModified(TRUE);
|
|
UpdateFontValue(m_bUnderline, XTPLEX_ATTR_TXT_UNDERLINE);
|
|
}
|
|
|
|
void CXTPSyntaxEditPropertiesPageColor::OnBtnCustomText()
|
|
{
|
|
if (m_wndComboText.SelectUserColor() != CB_ERR)
|
|
{
|
|
m_crText = m_wndComboText.GetSelColor();
|
|
OnSelEndOkText();
|
|
}
|
|
}
|
|
|
|
void CXTPSyntaxEditPropertiesPageColor::OnBtnCustomBack()
|
|
{
|
|
if (m_wndComboBack.SelectUserColor() != CB_ERR)
|
|
{
|
|
m_crBack = m_wndComboBack.GetSelColor();
|
|
OnSelEndOkBack();
|
|
}
|
|
}
|
|
|
|
void CXTPSyntaxEditPropertiesPageColor::OnBtnCustomHiliteText()
|
|
{
|
|
if (m_wndComboHiliteText.SelectUserColor() != CB_ERR)
|
|
{
|
|
m_crHiliteText = m_wndComboHiliteText.GetSelColor();
|
|
OnSelEndOkHiliteText();
|
|
}
|
|
}
|
|
|
|
void CXTPSyntaxEditPropertiesPageColor::OnBtnCustomtHiliteBack()
|
|
{
|
|
if (m_wndComboHiliteBack.SelectUserColor() != CB_ERR)
|
|
{
|
|
m_crHiliteBack = m_wndComboHiliteBack.GetSelColor();
|
|
OnSelEndOkHiliteBack();
|
|
}
|
|
}
|
|
|
|
BOOL CXTPSyntaxEditPropertiesPageColor::OnSetActive()
|
|
{
|
|
UpdateFont();
|
|
return CPropertyPage::OnSetActive();
|
|
}
|
|
|
|
void CXTPSyntaxEditPropertiesPageColor::UpdateFont()
|
|
{
|
|
CPropertySheet* pParentDlg = DYNAMIC_DOWNCAST(
|
|
CPropertySheet, GetParent());
|
|
|
|
if (!pParentDlg)
|
|
return;
|
|
|
|
CXTPSyntaxEditPropertiesPageFont* pPage2 = DYNAMIC_DOWNCAST(
|
|
CXTPSyntaxEditPropertiesPageFont, pParentDlg->GetPage(1));
|
|
|
|
if (!pPage2)
|
|
return;
|
|
|
|
LOGFONT lf = {0};
|
|
if (!pPage2->GetSafeLogFont(lf))
|
|
return;
|
|
|
|
lf.lfStrikeOut = 0;
|
|
lf.lfItalic = (BYTE)m_bItalic;
|
|
lf.lfUnderline = (BYTE)m_bUnderline;
|
|
lf.lfWeight = m_bBold? FW_BOLD: FW_NORMAL;
|
|
|
|
if (pPage2->CreateSafeFontIndirect(m_editFont, lf))
|
|
{
|
|
m_txtSample.SetFont(&m_editFont);
|
|
m_txtSampleSel.SetFont(&m_editFont);
|
|
}
|
|
}
|
|
|
|
BOOL CXTPSyntaxEditPropertiesPageColor::OnApply()
|
|
{
|
|
if (!CPropertyPage::OnApply())
|
|
return FALSE;
|
|
|
|
// no changes made or they have already been applied.
|
|
if (!m_bModified)
|
|
return TRUE;
|
|
|
|
// update registry settings.
|
|
if (!WriteRegistryValues())
|
|
return FALSE;
|
|
|
|
m_bModified = FALSE;
|
|
|
|
if (m_pEditView && m_pEditView->GetDocument())
|
|
m_pEditView->GetDocument()->UpdateAllViews(NULL, xtpEditHintInitView);
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
void CXTPSyntaxEditPropertiesPageColor::EnableControls()
|
|
{
|
|
BOOL bEnable = (m_lboxName.GetCurSel() != LB_ERR);
|
|
m_lboxProp.EnableWindow(bEnable);
|
|
|
|
bEnable = (bEnable && m_lboxProp.GetCurSel() != LB_ERR);
|
|
m_txtSampleSel.EnableWindow(bEnable);
|
|
m_txtSample.EnableWindow(bEnable);
|
|
m_gboxSampleText.EnableWindow(bEnable);
|
|
m_wndComboHiliteText.EnableWindow(bEnable);
|
|
m_wndComboHiliteBack.EnableWindow(bEnable);
|
|
m_wndComboText.EnableWindow(bEnable);
|
|
m_wndComboBack.EnableWindow(bEnable);
|
|
m_btnBold.EnableWindow(bEnable);
|
|
m_btnItalic.EnableWindow(bEnable);
|
|
m_btnUnderline.EnableWindow(bEnable);
|
|
m_btnCustomText.EnableWindow(bEnable);
|
|
m_btnCustomBack.EnableWindow(bEnable);
|
|
m_btnCustomHiliteText.EnableWindow(bEnable);
|
|
m_btnCustomHiliteBack.EnableWindow(bEnable);
|
|
}
|
|
|
|
void CXTPSyntaxEditPropertiesPageColor::OnSelChangeSchemaNames()
|
|
{
|
|
if (!m_lboxName.SelChanged())
|
|
return;
|
|
|
|
SetDefaults();
|
|
|
|
int iIndex = m_lboxName.GetCurSel();
|
|
if (iIndex != LB_ERR)
|
|
{
|
|
XTP_EDIT_SCHEMAFILEINFO* pSchemaInfo = (XTP_EDIT_SCHEMAFILEINFO*)m_lboxName.GetItemData(iIndex);
|
|
if (pSchemaInfo)
|
|
{
|
|
InitSchemaClasses(pSchemaInfo);
|
|
}
|
|
}
|
|
}
|
|
|
|
void CXTPSyntaxEditPropertiesPageColor::OnSelChangeSchemaProp()
|
|
{
|
|
if (!m_lboxProp.SelChanged())
|
|
return;
|
|
|
|
SetDefaults();
|
|
|
|
int iIndex = m_lboxProp.GetCurSel();
|
|
if (iIndex == LB_ERR)
|
|
return;
|
|
|
|
XTP_EDIT_LEXCLASSINFO* pInfoClass = (XTP_EDIT_LEXCLASSINFO*)m_lboxProp.GetItemData(iIndex);
|
|
if (!pInfoClass)
|
|
return;
|
|
|
|
InitClassData(*pInfoClass);
|
|
UpdateData(FALSE);
|
|
}
|
|
|
|
BOOL CXTPSyntaxEditPropertiesPageColor::IsTopLevelClass(const XTP_EDIT_LEXCLASSINFO& infoClass)
|
|
{
|
|
int nPropertiesCount = (int)infoClass.arPropertyDesc.GetSize();
|
|
for (int iIndex = 0; iIndex < nPropertiesCount; iIndex++)
|
|
{
|
|
// Process property name
|
|
const XTP_EDIT_LEXPROPINFO& infoProp =
|
|
infoClass.arPropertyDesc.GetAt(iIndex);
|
|
|
|
if (infoProp.arPropName.GetSize() != 2)
|
|
continue;
|
|
|
|
CString csParent = infoProp.arPropName.GetAt(0);
|
|
if (csParent.CompareNoCase(_T("parent")) != 0)
|
|
continue;
|
|
|
|
CString csFile = infoProp.arPropName.GetAt(1);
|
|
if (csFile.CompareNoCase(_T("file")) != 0)
|
|
continue;
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
CString CXTPSyntaxEditPropertiesPageColor::GetDisplayName(const XTP_EDIT_LEXCLASSINFO& info) const
|
|
{
|
|
for (int i = 0; i < info.arPropertyDesc.GetSize(); ++i)
|
|
{
|
|
if (MakeStr(info.arPropertyDesc[i].arPropName, _T(":")) == XTPLEX_ATTR_DISPLAYNAME)
|
|
{
|
|
CString csDisplayName = GetPropValue(info.arPropertyDesc[i]);
|
|
csDisplayName.Remove(39);
|
|
return csDisplayName;
|
|
}
|
|
}
|
|
return info.csClassName;
|
|
}
|
|
|
|
BOOL CXTPSyntaxEditPropertiesPageColor::InitSchemaClasses(XTP_EDIT_SCHEMAFILEINFO* pSchemaInfo)
|
|
{
|
|
CString csKey = pSchemaInfo->csValue;
|
|
csKey.MakeLower();
|
|
|
|
m_parLexClassInfo = NULL;
|
|
if (!m_mapLexClassInfo.Lookup(csKey, (void*&)m_parLexClassInfo) || !m_parLexClassInfo)
|
|
return FALSE;
|
|
|
|
m_lboxProp.SetRedraw(FALSE);
|
|
m_lboxProp.ResetContent();
|
|
|
|
// For all classes in the current scheme
|
|
int iSize = (int)m_parLexClassInfo->GetSize();
|
|
for (int i = 0; i < iSize; i++)
|
|
{
|
|
int iIndex = m_lboxProp.AddString(GetDisplayName((*m_parLexClassInfo)[i]));
|
|
if (iIndex != LB_ERR)
|
|
m_lboxProp.SetItemData(iIndex, (DWORD_PTR)&(*m_parLexClassInfo)[i]);
|
|
}
|
|
|
|
m_lboxProp.SetCurSel(0);
|
|
OnSelChangeSchemaProp();
|
|
|
|
m_lboxProp.SetRedraw(TRUE);
|
|
m_lboxProp.RedrawWindow();
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
CString CXTPSyntaxEditPropertiesPageColor::GetPropValue(const XTP_EDIT_LEXPROPINFO& infoProp) const
|
|
{
|
|
CString csValue;
|
|
for (int iItem = 0; iItem < infoProp.arPropValue.GetSize(); iItem++)
|
|
{
|
|
if (iItem > 0)
|
|
{
|
|
csValue += _T(", ");
|
|
}
|
|
CString strProp1 = infoProp.arPropValue.GetAt(iItem);
|
|
csValue += XTPSyntaxEditLexConfig()->ESToStr(strProp1, TRUE);
|
|
}
|
|
return csValue;
|
|
}
|
|
|
|
AFX_STATIC int AFX_CDECL AfxStrToInt(LPCTSTR pcszValue)
|
|
{
|
|
TCHAR* pCh = NULL;
|
|
return _tcstol(pcszValue, &pCh, 0);
|
|
}
|
|
|
|
AFX_STATIC DWORD AFX_CDECL AfxStrToRGB(LPCTSTR pcszValue)
|
|
{
|
|
return XTP_EDIT_RGB_INT2CLR(AfxStrToInt(pcszValue));
|
|
}
|
|
|
|
void CXTPSyntaxEditPropertiesPageColor::InitClassData(const XTP_EDIT_LEXCLASSINFO& infoClass)
|
|
{
|
|
int iCount = (int)infoClass.arPropertyDesc.GetSize();
|
|
for (int iIndex = 0; iIndex < iCount; ++iIndex)
|
|
{
|
|
const XTP_EDIT_LEXPROPINFO& infoProp = infoClass.arPropertyDesc.GetAt(iIndex);
|
|
CString csPropName = MakeStr(infoProp.arPropName, _T(":"));
|
|
|
|
if (csPropName == XTPLEX_ATTR_TXT_COLORFG)
|
|
{
|
|
m_crText = AfxStrToRGB(GetPropValue(infoProp));
|
|
}
|
|
else if (csPropName == XTPLEX_ATTR_TXT_COLORBK)
|
|
{
|
|
m_crBack = AfxStrToRGB(GetPropValue(infoProp));
|
|
}
|
|
else if (csPropName == XTPLEX_ATTR_TXT_COLORSELFG)
|
|
{
|
|
m_crHiliteText = AfxStrToRGB(GetPropValue(infoProp));
|
|
}
|
|
else if (csPropName == XTPLEX_ATTR_TXT_COLORSELBK)
|
|
{
|
|
m_crHiliteBack = AfxStrToRGB(GetPropValue(infoProp));
|
|
}
|
|
else if (csPropName == XTPLEX_ATTR_TXT_BOLD)
|
|
{
|
|
m_bBold = (BOOL)_ttoi(GetPropValue(infoProp));
|
|
}
|
|
else if (csPropName == XTPLEX_ATTR_TXT_ITALIC)
|
|
{
|
|
m_bItalic = (BOOL)_ttoi(GetPropValue(infoProp));
|
|
}
|
|
else if (csPropName == XTPLEX_ATTR_TXT_UNDERLINE)
|
|
{
|
|
m_bUnderline = (BOOL)_ttoi(GetPropValue(infoProp));
|
|
}
|
|
}
|
|
|
|
UpdateFont();
|
|
UpdateSampleColors();
|
|
EnableControls();
|
|
}
|
|
|
|
void CXTPSyntaxEditPropertiesPageColor::SetModified(BOOL bChanged/*=TRUE*/)
|
|
{
|
|
CPropertyPage::SetModified(bChanged);
|
|
m_bModified = bChanged;
|
|
|
|
if (m_parLexClassInfo)
|
|
m_parLexClassInfo->m_bModified = bChanged;
|
|
}
|
|
|
|
int CXTPSyntaxEditPropertiesPageColor::PropExists(CXTPSyntaxEditLexPropInfoArray& arrProp, LPCTSTR lpszPropName)
|
|
{
|
|
int iCount = (int)arrProp.GetSize();
|
|
for (int iIndex = 0; iIndex < iCount; ++iIndex)
|
|
{
|
|
const XTP_EDIT_LEXPROPINFO& infoProp = arrProp.GetAt(iIndex);
|
|
CString csPropName = MakeStr(infoProp.arPropName, _T(":"));
|
|
|
|
if (csPropName.CompareNoCase(lpszPropName) == 0)
|
|
{
|
|
return iIndex;
|
|
}
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
BOOL CXTPSyntaxEditPropertiesPageColor::UpdateColorValue(CXTPSyntaxEditColorComboBox& combo, COLORREF& color, LPCTSTR lpszPropName)
|
|
{
|
|
int iSel = m_lboxProp.GetCurSel();
|
|
|
|
XTP_EDIT_LEXCLASSINFO* pInfoClass = (XTP_EDIT_LEXCLASSINFO*)m_lboxProp.GetItemData(iSel);
|
|
if (!pInfoClass)
|
|
return FALSE;
|
|
|
|
int iIndex = PropExists(pInfoClass->arPropertyDesc, lpszPropName);
|
|
|
|
// automatic color selected, remove from array.
|
|
if (combo.GetAutoColor() == color)
|
|
{
|
|
if (iIndex != -1)
|
|
{
|
|
pInfoClass->arPropertyDesc.RemoveAt(iIndex);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
else
|
|
{
|
|
CString csColor;
|
|
csColor.Format(_T("0x%06X"), XTP_EDIT_RGB_INT2CLR(color));
|
|
|
|
if (iIndex == -1)
|
|
{
|
|
XTP_EDIT_LEXPROPINFO infoProp;
|
|
infoProp.arPropValue.Add(csColor);
|
|
PropPathSplit(lpszPropName, infoProp.arPropName);
|
|
pInfoClass->arPropertyDesc.Add(infoProp);
|
|
}
|
|
else
|
|
{
|
|
XTP_EDIT_LEXPROPINFO& infoProp = pInfoClass->arPropertyDesc[iIndex];
|
|
infoProp.arPropValue.RemoveAll();
|
|
infoProp.arPropValue.Add(csColor);
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
BOOL CXTPSyntaxEditPropertiesPageColor::UpdateFontValue(BOOL& bValue, LPCTSTR lpszPropName)
|
|
{
|
|
CString csValue(_T("1"));
|
|
int iSel = m_lboxProp.GetCurSel();
|
|
|
|
XTP_EDIT_LEXCLASSINFO* pInfoClass = (XTP_EDIT_LEXCLASSINFO*)m_lboxProp.GetItemData(iSel);
|
|
if (!pInfoClass)
|
|
return FALSE;
|
|
|
|
int iIndex = PropExists(pInfoClass->arPropertyDesc, lpszPropName);
|
|
if (iIndex != -1)
|
|
{
|
|
pInfoClass->arPropertyDesc.RemoveAt(iIndex);
|
|
}
|
|
|
|
if (bValue == TRUE)
|
|
{
|
|
XTP_EDIT_LEXPROPINFO infoProp;
|
|
PropPathSplit(lpszPropName, infoProp.arPropName);
|
|
infoProp.arPropValue.Add(csValue);
|
|
pInfoClass->arPropertyDesc.Add(infoProp);
|
|
return TRUE;
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
void CXTPSyntaxEditPropertiesPageColor::OnDblClickSchema()
|
|
{
|
|
int iIndex = m_lboxName.GetCurSel();
|
|
if (iIndex == LB_ERR)
|
|
return;
|
|
|
|
XTP_EDIT_SCHEMAFILEINFO* pSchemaInfo = (XTP_EDIT_SCHEMAFILEINFO*)m_lboxName.GetItemData(iIndex);
|
|
if (pSchemaInfo == NULL)
|
|
return;
|
|
|
|
if (!FILEEXISTS_S(pSchemaInfo->csValue))
|
|
return;
|
|
|
|
TCHAR szDrive[_MAX_DRIVE], szDir[_MAX_DIR], szFileName[_MAX_FNAME], szEx[_MAX_EXT];
|
|
SPLITPATH_S(pSchemaInfo->csValue, szDrive, szDir, szFileName, szEx);
|
|
|
|
CString csBuffer;
|
|
XTPResourceManager()->LoadString(
|
|
&csBuffer, XTP_IDS_EDIT_OPENSCHEMAMSG);
|
|
|
|
CString csMessage;
|
|
csMessage.Format(csBuffer, szFileName, szEx);
|
|
if (AfxMessageBox(csMessage, MB_ICONQUESTION | MB_YESNO) == IDYES)
|
|
{
|
|
// close the options dialog.
|
|
CPropertySheet* pWndParent = DYNAMIC_DOWNCAST(CPropertySheet, GetParent());
|
|
if (pWndParent)
|
|
pWndParent->EndDialog(IDCANCEL);
|
|
|
|
// open the document.
|
|
CWinApp* pWinApp = AfxGetApp();
|
|
if (pWinApp)
|
|
pWinApp->OpenDocumentFile(pSchemaInfo->csValue);
|
|
}
|
|
}
|
|
|
|
void CXTPSyntaxEditPropertiesPageColor::OnContextMenu(CWnd* pWnd, CPoint point)
|
|
{
|
|
UNREFERENCED_PARAMETER(pWnd);
|
|
|
|
int iItem = m_lboxName.HitTest(point);
|
|
if (iItem != LB_ERR)
|
|
{
|
|
m_lboxName.SetCurSel(iItem);
|
|
OnSelChangeSchemaNames();
|
|
|
|
CString csBuffer;
|
|
XTPResourceManager()->LoadString(
|
|
&csBuffer, XTP_IDS_EDIT_OPENSCHEMACMD);
|
|
|
|
CMenu menu;
|
|
menu.CreatePopupMenu();
|
|
menu.AppendMenu(MF_STRING, ID_FILE_OPEN, csBuffer);
|
|
|
|
UINT nFlags = TPM_LEFTALIGN|TPM_RIGHTBUTTON|TPM_NONOTIFY|TPM_RETURNCMD;
|
|
if (menu.TrackPopupMenu(nFlags, point.x, point.y, this) == ID_FILE_OPEN)
|
|
{
|
|
OnDblClickSchema();
|
|
}
|
|
}
|
|
}
|