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.

308 lines
8.7 KiB
C++

// XTPSyntaxEditPropertiesPageEdit.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 "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
//===========================================================================
// CXTPSyntaxEditPropertiesPageEdit property page
//===========================================================================
CXTPSyntaxEditPropertiesPageEdit::CXTPSyntaxEditPropertiesPageEdit(CXTPSyntaxEditView* pEditView/*=NULL*/)
: //CPropertyPage(CXTPSyntaxEditPropertiesPageEdit::IDD),
m_bModified(FALSE)
, m_pEditView(pEditView)
{
ASSERT_VALID(m_pEditView); // must be valid.
m_psp.dwFlags |= PSP_DLGINDIRECT;
m_psp.pResource = XTPResourceManager()->LoadDialogTemplate(IDD);
//{{AFX_DATA_INIT(CXTPSyntaxEditPropertiesPageEdit)
m_bAutoReload = TRUE;
m_bHorzScrollBar = TRUE;
m_bVertScrollBar = TRUE;
m_bSyntaxColor = TRUE;
m_bAutoIndent = TRUE;
m_bSelMargin = TRUE;
m_bLineNumbers = TRUE;
m_bVirtualSpace = TRUE;
m_bCollapsibleNodes = TRUE;
m_nCaretStyle = 0;
m_nTabSize = 4;
m_nTabType = 1;
//}}AFX_DATA_INIT
ReadRegistryValues();
}
CXTPSyntaxEditPropertiesPageEdit::~CXTPSyntaxEditPropertiesPageEdit()
{
}
void CXTPSyntaxEditPropertiesPageEdit::DoDataExchange(CDataExchange* pDX)
{
CPropertyPage::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CXTPSyntaxEditPropertiesPageEdit)
DDX_Check(pDX, XTP_IDC_EDIT_CHK_AUTO_RELOAD, m_bAutoReload);
DDX_Check(pDX, XTP_IDC_EDIT_CHK_HORZ_SCROLLBAR, m_bHorzScrollBar);
DDX_Check(pDX, XTP_IDC_EDIT_CHK_VERT_SCROLLBAR, m_bVertScrollBar);
DDX_Check(pDX, XTP_IDC_EDIT_CHK_SYNTAX_COLOR, m_bSyntaxColor);
DDX_Check(pDX, XTP_IDC_EDIT_CHK_AUTO_INDENT, m_bAutoIndent);
DDX_Check(pDX, XTP_IDC_EDIT_CHK_SELMARGIN, m_bSelMargin);
DDX_Check(pDX, XTP_IDC_EDIT_CHK_LINE_NUMBERS, m_bLineNumbers);
DDX_Check(pDX, XTP_IDC_EDIT_CHK_VIRTUAL_SPACE, m_bVirtualSpace);
DDX_Check(pDX, XTP_IDC_EDIT_CHK_COLLAPSIBLE_NODES, m_bCollapsibleNodes);
DDX_Control(pDX, XTP_IDC_EDIT_RAD_TABS_SPACES, m_btnRadioSpaces);
DDX_Control(pDX, XTP_IDC_EDIT_RAD_TABS_TAB, m_btnRadioTab);
DDX_Control(pDX, XTP_IDC_EDIT_RAD_CARET_THIN, m_btnRadioCaretThin);
DDX_Control(pDX, XTP_IDC_EDIT_RAD_CARET_THICK, m_btnRadioCaretThick);
DDX_Text(pDX, XTP_IDC_EDIT_TABS_SIZE, m_nTabSize);
DDV_MinMaxInt(pDX, m_nTabSize, 1, 64);
//}}AFX_DATA_MAP
}
IMPLEMENT_DYNCREATE(CXTPSyntaxEditPropertiesPageEdit, CPropertyPage)
BEGIN_MESSAGE_MAP(CXTPSyntaxEditPropertiesPageEdit, CPropertyPage)
//{{AFX_MSG_MAP(CXTPSyntaxEditPropertiesPageEdit)
ON_BN_CLICKED(XTP_IDC_EDIT_CHK_AUTO_RELOAD, OnChkAutoReload)
ON_BN_CLICKED(XTP_IDC_EDIT_CHK_HORZ_SCROLLBAR, OnChkHorzScrollBar)
ON_BN_CLICKED(XTP_IDC_EDIT_CHK_VERT_SCROLLBAR, OnChkVertScrollBar)
ON_BN_CLICKED(XTP_IDC_EDIT_CHK_SYNTAX_COLOR, OnChkSyntaxColor)
ON_BN_CLICKED(XTP_IDC_EDIT_CHK_AUTO_INDENT, OnChkAutoIndent)
ON_BN_CLICKED(XTP_IDC_EDIT_CHK_SELMARGIN, OnChkSelMargin)
ON_BN_CLICKED(XTP_IDC_EDIT_CHK_LINE_NUMBERS, OnChkLineNumbers)
ON_BN_CLICKED(XTP_IDC_EDIT_CHK_COLLAPSIBLE_NODES, OnChkLineNumbers)
ON_BN_CLICKED(XTP_IDC_EDIT_CHK_VIRTUAL_SPACE, OnChkVirtualSpace)
ON_BN_CLICKED(XTP_IDC_EDIT_RAD_TABS_SPACES, OnTabsSpaces)
ON_BN_CLICKED(XTP_IDC_EDIT_RAD_TABS_TAB, OnTabsTab)
ON_BN_CLICKED(XTP_IDC_EDIT_RAD_CARET_THIN, OnCaretThin)
ON_BN_CLICKED(XTP_IDC_EDIT_RAD_CARET_THICK, OnCaretThick)
ON_EN_CHANGE(XTP_IDC_EDIT_TABS_SIZE, OnChangeTabsSize)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
BOOL CXTPSyntaxEditPropertiesPageEdit::ReadRegistryValues()
{
if (!::IsWindow(m_pEditView->GetSafeHwnd()))
return FALSE;
CXTPSyntaxEditDoc* pEditDoc = m_pEditView->GetDocument();
if (pEditDoc)
{
m_bAutoReload = pEditDoc->GetAutoReload();
}
CXTPSyntaxEditCtrl& wndEditCtrl = m_pEditView->GetEditCtrl();
if (::IsWindow(wndEditCtrl.m_hWnd))
{
m_bVertScrollBar = wndEditCtrl.GetVertScrollBar();
m_bHorzScrollBar = wndEditCtrl.GetHorzScrollBar();
m_bSyntaxColor = wndEditCtrl.GetSyntaxColor();
m_bAutoIndent = wndEditCtrl.GetAutoIndent();
m_bSelMargin = wndEditCtrl.GetSelMargin();
m_bLineNumbers = wndEditCtrl.GetLineNumbers();
m_bVirtualSpace = wndEditCtrl.IsEnabledVirtualSpace();
m_bCollapsibleNodes = wndEditCtrl.GetCollapsibleNodes();
m_nCaretStyle = wndEditCtrl.GetWideCaret();
m_nTabSize = wndEditCtrl.GetTabSize();
m_nTabType = wndEditCtrl.GetTabWithSpace() ? 0: 1;
}
return TRUE;
}
BOOL CXTPSyntaxEditPropertiesPageEdit::WriteRegistryValues()
{
if (!::IsWindow(m_pEditView->GetSafeHwnd()))
return FALSE;
CXTPSyntaxEditDoc* pEditDoc = m_pEditView->GetDocument();
if (pEditDoc)
{
pEditDoc->SetAutoReload(m_bAutoReload, TRUE);
}
CXTPSyntaxEditCtrl& wndEditCtrl = m_pEditView->GetEditCtrl();
if (::IsWindow(wndEditCtrl.m_hWnd))
{
wndEditCtrl.SetScrollBars(m_bHorzScrollBar, m_bVertScrollBar, TRUE);
wndEditCtrl.SetSyntaxColor(m_bSyntaxColor, TRUE);
wndEditCtrl.SetAutoIndent(m_bAutoIndent, TRUE);
wndEditCtrl.SetSelMargin(m_bSelMargin, TRUE);
wndEditCtrl.SetLineNumbers(m_bLineNumbers, TRUE);
wndEditCtrl.EnableVirtualSpace(m_bVirtualSpace, TRUE);
wndEditCtrl.SetCollapsibleNodes(m_bCollapsibleNodes, TRUE);
wndEditCtrl.SetWideCaret(m_nCaretStyle, TRUE);
wndEditCtrl.SetTabSize(m_nTabSize, TRUE);
wndEditCtrl.SetTabWithSpace(m_nTabType? FALSE: TRUE, TRUE);
}
wndEditCtrl.RestoreCursor();
return TRUE;
}
void CXTPSyntaxEditPropertiesPageEdit::OnChkAutoReload()
{
UpdateData();
SetModified(TRUE);
}
void CXTPSyntaxEditPropertiesPageEdit::OnChkHorzScrollBar()
{
UpdateData();
SetModified(TRUE);
}
void CXTPSyntaxEditPropertiesPageEdit::OnChkVertScrollBar()
{
UpdateData();
SetModified(TRUE);
}
void CXTPSyntaxEditPropertiesPageEdit::OnChkSyntaxColor()
{
UpdateData();
SetModified(TRUE);
}
void CXTPSyntaxEditPropertiesPageEdit::OnChkAutoIndent()
{
UpdateData();
SetModified(TRUE);
}
void CXTPSyntaxEditPropertiesPageEdit::OnChkSelMargin()
{
UpdateData();
SetModified(TRUE);
}
void CXTPSyntaxEditPropertiesPageEdit::OnChkLineNumbers()
{
UpdateData();
SetModified(TRUE);
}
void CXTPSyntaxEditPropertiesPageEdit::OnChkVirtualSpace()
{
UpdateData();
SetModified(TRUE);
}
void CXTPSyntaxEditPropertiesPageEdit::OnChangeTabsSize()
{
UpdateData();
SetModified(TRUE);
}
void CXTPSyntaxEditPropertiesPageEdit::OnTabsSpaces()
{
m_nTabType = 0;
SetModified(TRUE);
}
void CXTPSyntaxEditPropertiesPageEdit::OnTabsTab()
{
m_nTabType = 1;
SetModified(TRUE);
}
void CXTPSyntaxEditPropertiesPageEdit::OnCaretThin()
{
m_nCaretStyle = 0;
SetModified(TRUE);
}
void CXTPSyntaxEditPropertiesPageEdit::OnCaretThick()
{
m_nCaretStyle = 1;
SetModified(TRUE);
}
BOOL CXTPSyntaxEditPropertiesPageEdit::OnInitDialog()
{
CPropertyPage::OnInitDialog();
m_btnRadioSpaces.SetCheck(m_nTabType == 0);
m_btnRadioTab.SetCheck(m_nTabType == 1);
m_btnRadioCaretThin.SetCheck(m_nCaretStyle == 0);
m_btnRadioCaretThick.SetCheck(m_nCaretStyle == 1);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
BOOL CXTPSyntaxEditPropertiesPageEdit::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 CXTPSyntaxEditPropertiesPageEdit::SetModified(BOOL bChanged/*=TRUE*/)
{
CPropertyPage::SetModified();
m_bModified = bChanged;
}