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.
217 lines
5.1 KiB
C++
217 lines
5.1 KiB
C++
2 years ago
|
// XTPSyntaxEditGoToLineDlg.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 TOOLKIT PRO 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/XTPDrawHelpers.h"
|
||
|
#include "Common/XTPResourceManager.h"
|
||
|
#include "Common/XTPColorManager.h"
|
||
|
|
||
|
// syntax editor includes
|
||
|
#include "XTPSyntaxEditDefines.h"
|
||
|
#include "XTPSyntaxEditStruct.h"
|
||
|
#include "XTPSyntaxEditCtrl.h"
|
||
|
#include "XTPSyntaxEditGoToLineDlg.h"
|
||
|
|
||
|
#ifdef _DEBUG
|
||
|
#define new DEBUG_NEW
|
||
|
#undef THIS_FILE
|
||
|
static char THIS_FILE[] = __FILE__;
|
||
|
#endif
|
||
|
|
||
|
//===========================================================================
|
||
|
// CXTPSyntaxEditGoToLineDlg
|
||
|
//===========================================================================
|
||
|
|
||
|
CXTPSyntaxEditGoToLineDlg::CXTPSyntaxEditGoToLineDlg(CWnd* pParent /*=NULL*/)
|
||
|
: //CDialog(CXTPSyntaxEditGoToLineDlg::IDD, pParent),
|
||
|
m_pEditCtrl(NULL)
|
||
|
, m_iMaxLineNo(0)
|
||
|
, m_ptWndPos(CPoint(-1, -1))
|
||
|
, m_bHideOnFind(TRUE)
|
||
|
, m_bSelectLine(FALSE)
|
||
|
{
|
||
|
InitModalIndirect(XTPResourceManager()->LoadDialogTemplate(IDD), pParent);
|
||
|
|
||
|
//{{AFX_DATA_INIT(CXTPSyntaxEditGoToLineDlg)
|
||
|
m_iLineNo = 0;
|
||
|
m_csLineNo = _T("");
|
||
|
//}}AFX_DATA_INIT
|
||
|
}
|
||
|
|
||
|
void CXTPSyntaxEditGoToLineDlg::DoDataExchange(CDataExchange* pDX)
|
||
|
{
|
||
|
CDialog::DoDataExchange(pDX);
|
||
|
//{{AFX_DATA_MAP(CXTPSyntaxEditGoToLineDlg)
|
||
|
DDX_Control(pDX, XTP_IDC_EDIT_LINENO, m_wndEditLineNo);
|
||
|
DDX_Text(pDX, XTP_IDC_EDIT_LINENO, m_iLineNo);
|
||
|
DDX_Text(pDX, XTP_IDC_EDIT_TXT_LINENO, m_csLineNo);
|
||
|
//}}AFX_DATA_MAP
|
||
|
}
|
||
|
|
||
|
BEGIN_MESSAGE_MAP(CXTPSyntaxEditGoToLineDlg, CDialog)
|
||
|
//{{AFX_MSG_MAP(CXTPSyntaxEditGoToLineDlg)
|
||
|
ON_EN_CHANGE(XTP_IDC_EDIT_LINENO, OnChangeEditLineNo)
|
||
|
ON_BN_CLICKED(XTP_IDC_EDIT_BTN_GOTO, OnBtnGoTo)
|
||
|
//}}AFX_MSG_MAP
|
||
|
END_MESSAGE_MAP()
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// CXTPSyntaxEditGoToLineDlg message handlers
|
||
|
|
||
|
void CXTPSyntaxEditGoToLineDlg::OnChangeEditLineNo()
|
||
|
{
|
||
|
UpdateData();
|
||
|
}
|
||
|
|
||
|
BOOL CXTPSyntaxEditGoToLineDlg::OnInitDialog()
|
||
|
{
|
||
|
CDialog::OnInitDialog();
|
||
|
|
||
|
// TODO: Add extra initialization here
|
||
|
ASSERT_VALID(m_pEditCtrl);
|
||
|
|
||
|
m_iMaxLineNo = m_pEditCtrl->GetRowCount();
|
||
|
m_iLineNo = m_pEditCtrl->GetCurRow();
|
||
|
|
||
|
m_csLineNo.Format(XTPResourceManager()->LoadString(XTP_IDS_EDIT_LINENO), m_iMaxLineNo);
|
||
|
UpdateData(FALSE);
|
||
|
|
||
|
return TRUE; // return TRUE unless you set the focus to a control
|
||
|
// EXCEPTION: OCX Property Pages should return FALSE
|
||
|
}
|
||
|
|
||
|
BOOL CXTPSyntaxEditGoToLineDlg::ShowDialog(CXTPSyntaxEditCtrl* pEditCtrl, BOOL bSelectLine /*=FALSE*/, BOOL bHideOnFind /*=FALSE*/)
|
||
|
{
|
||
|
ASSERT_VALID(pEditCtrl);
|
||
|
|
||
|
if (!::IsWindow(pEditCtrl->GetSafeHwnd()))
|
||
|
return FALSE;
|
||
|
|
||
|
m_pEditCtrl = pEditCtrl;
|
||
|
m_bSelectLine = bSelectLine;
|
||
|
m_bHideOnFind = bHideOnFind;
|
||
|
|
||
|
// already created, bring to foreground.
|
||
|
if (::IsWindow(m_hWnd))
|
||
|
{
|
||
|
::ShowWindow(m_hWnd, SW_RESTORE);
|
||
|
::BringWindowToTop(m_hWnd);
|
||
|
::SetForegroundWindow(m_hWnd);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
if (!CreateIndirect(XTPResourceManager()->LoadDialogTemplate(IDD), m_pEditCtrl))
|
||
|
{
|
||
|
TRACE0("Error creating go to dialog.\n");
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
UpdateData(FALSE);
|
||
|
LoadPos();
|
||
|
|
||
|
CXTPWindowRect rc(this);
|
||
|
::MoveWindow(m_hWnd, m_ptWndPos.x, m_ptWndPos.y, rc.Width(), rc.Height(), FALSE);
|
||
|
::ShowWindow(m_hWnd, SW_SHOW);
|
||
|
}
|
||
|
|
||
|
m_wndEditLineNo.SetFocus();
|
||
|
m_wndEditLineNo.SetSel(0, -1);
|
||
|
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
BOOL CXTPSyntaxEditGoToLineDlg::LoadPos()
|
||
|
{
|
||
|
if (!::IsWindow(m_hWnd))
|
||
|
return FALSE;
|
||
|
|
||
|
if (m_ptWndPos.x != -1 && m_ptWndPos.y != -1)
|
||
|
return FALSE;
|
||
|
|
||
|
CXTPWindowRect r1(this);
|
||
|
CXTPWindowRect r2(m_pEditCtrl);
|
||
|
|
||
|
m_ptWndPos.x = r2.left + ((r2.Width()-r1.Width())/2);
|
||
|
m_ptWndPos.y = r2.top + ((r2.Height()-r1.Height())/2);
|
||
|
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
BOOL CXTPSyntaxEditGoToLineDlg::SavePos()
|
||
|
{
|
||
|
if (!::IsWindow(m_hWnd))
|
||
|
return FALSE;
|
||
|
|
||
|
CXTPWindowRect rc(this);
|
||
|
m_ptWndPos = rc.TopLeft();
|
||
|
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
BOOL CXTPSyntaxEditGoToLineDlg::PreTranslateMessage(MSG* pMsg)
|
||
|
{
|
||
|
if ((pMsg->message == WM_KEYDOWN) && (pMsg->wParam == VK_RETURN))
|
||
|
{
|
||
|
OnBtnGoTo();
|
||
|
return TRUE; // don't close dialog.
|
||
|
}
|
||
|
|
||
|
return CDialog::PreTranslateMessage(pMsg);
|
||
|
}
|
||
|
|
||
|
void CXTPSyntaxEditGoToLineDlg::OnBtnGoTo()
|
||
|
{
|
||
|
if (m_iLineNo > m_iMaxLineNo)
|
||
|
{
|
||
|
m_iLineNo = m_iMaxLineNo;
|
||
|
UpdateData(FALSE);
|
||
|
}
|
||
|
|
||
|
else if (m_iLineNo < 1)
|
||
|
{
|
||
|
m_iLineNo = 1;
|
||
|
UpdateData(FALSE);
|
||
|
}
|
||
|
|
||
|
m_pEditCtrl->GoToRow(m_iLineNo, m_bSelectLine);
|
||
|
|
||
|
if (!m_bHideOnFind && !m_bSelectLine)
|
||
|
m_pEditCtrl->SetFocus();
|
||
|
|
||
|
else if (m_bHideOnFind)
|
||
|
OnCancel();
|
||
|
|
||
|
else
|
||
|
m_wndEditLineNo.SetSel(0, -1);
|
||
|
}
|
||
|
|
||
|
void CXTPSyntaxEditGoToLineDlg::OnCancel()
|
||
|
{
|
||
|
SavePos();
|
||
|
|
||
|
CDialog::OnCancel();
|
||
|
|
||
|
if (::IsWindow(m_hWnd))
|
||
|
::DestroyWindow(m_hWnd);
|
||
|
}
|