3071 lines
81 KiB
C++
3071 lines
81 KiB
C++
// EdIRREd.cpp : implementation file
|
||
//
|
||
|
||
#include "stdafx.h"
|
||
|
||
#include "Defines.hpp"
|
||
|
||
#ifdef D_ED_IR_ACTIVE
|
||
|
||
#include "EdIRREd.hpp"
|
||
|
||
#include "EdIRREdA.hpp"
|
||
#include "EdIRREdD.hpp"
|
||
#include "EdIRREdP.hpp"
|
||
#include "EdIRRBox.hpp"
|
||
#include "EdIRRVw.hpp"
|
||
#include "EdIRFrm.hpp"
|
||
#include "EdIRBeEn.hpp"
|
||
#include "EdIRIRD.hpp"
|
||
#include "EdIRStrg.hpp"
|
||
#include "EdIRIAGl.hpp"
|
||
#include "EdIRRes.hm"
|
||
#include "EdIRReplce.hpp"
|
||
#include "Edirbis.hpp"
|
||
#include "EdIRDVVw.hpp"
|
||
#include "incAI.h"
|
||
|
||
#include "edirwaw.hpp"
|
||
#include "edirdat.hpp"
|
||
|
||
#include "EdIRBVw.hpp"
|
||
#include "EdIRBeha.hpp"
|
||
|
||
#include "EdIRIAWd.hpp"
|
||
|
||
#include "EdIRSele.hpp"
|
||
|
||
#include "ai_intf.hpp"
|
||
|
||
#include "../tempgrp/tid/inc/debugcom.h"
|
||
|
||
#include "EDACModl.hpp"
|
||
|
||
#include "x:\cpa\main\inc\_EditID.h"
|
||
|
||
#include "_Actors.hpp"
|
||
|
||
#ifdef _DEBUG
|
||
#define new DEBUG_NEW
|
||
#undef THIS_FILE
|
||
static char THIS_FILE[] = __FILE__;
|
||
#endif
|
||
|
||
#define M_TRANSLATE_KEYWORD_SCRIPT_TO_EDITOR(sz) fn_csGetKeyWordEditorNameFromId(fn_lGetKeyWordIdFromEditorName(sz))
|
||
#define M_TRANSLATE_ACTION_SCRIPT_TO_EDITOR(sz) fn_csGetMetaActionEditorNameFromId(fn_lGetMetaActionIdFromEditorName(sz))
|
||
|
||
#define M_ISALNUM(c) (isalnum(c) || (c)=='_')
|
||
|
||
#define C_KEYWORDCOLOR RGB(255,0,0)
|
||
#define C_ACTIONWORDCOLOR RGB(10,125,10)
|
||
#define C_CONDITIONWORDCOLOR RGB(0,0,255)
|
||
#define C_CONSTANTWORDCOLOR RGB(255,125,0)
|
||
#define C_DEFAULTCOLOR RGB(0,0,0)
|
||
#define C_COMMENTCOLOR RGB(150,70,150)
|
||
#define C_MACROWORDCOLOR RGB(255,0,255)
|
||
#define C_CONSTANTCOLOR RGB(0,100,100)
|
||
|
||
#define C_PAGEUP VK_PRIOR
|
||
#define C_PAGEDOWN VK_NEXT
|
||
#define C_ENTER VK_RETURN
|
||
#define C_TAB VK_TAB
|
||
#define C_BACKSPACE VK_BACK
|
||
#define C_INSER VK_INSERT
|
||
#define C_SUPPR VK_DELETE
|
||
#define C_CTRL VK_CONTROL
|
||
#define C_SHIFT VK_SHIFT
|
||
#define C_ALTGR VK_MENU
|
||
#define C_F9 VK_F9
|
||
#define C_F 70
|
||
|
||
#define C_L 76
|
||
|
||
#define C_COMMENT 190
|
||
#define C_DECOMMENT 191
|
||
|
||
#define C_F2 VK_F2
|
||
#define C_F3 VK_F3
|
||
#define C_F4 VK_F4
|
||
#define C_W 87
|
||
#define C_P 80
|
||
|
||
#define C_CTRLC 3
|
||
#define C_CTRLV 22
|
||
#define C_CTRLX 24
|
||
#define C_AUTOCOMPLETECHARDOWN 222
|
||
#define C_AUTOCOMPLETECHAR 178
|
||
#define C_CTRLZ 26
|
||
#define C_CTRLA 1
|
||
|
||
#define C_RETURN "\xD\xA"
|
||
|
||
//See help about MapVirtualKey
|
||
#define C_TRANSLATE_VK2CHAR 2
|
||
#define C_TRANSLATE_CHARMASK 0x0000FFFF
|
||
|
||
// #define DAVE [kwn]
|
||
|
||
BOOL fn_bIsValidCharacter (UINT nChar, BOOL bShiftPressed)
|
||
{
|
||
if (isprint(nChar))
|
||
return TRUE;
|
||
|
||
// special character
|
||
if (bShiftPressed)
|
||
{
|
||
switch (nChar)
|
||
{
|
||
// '<27>' => '0'
|
||
case 224:
|
||
return TRUE;
|
||
// '<27>' => '9'
|
||
case 231:
|
||
return TRUE;
|
||
// '<27>' => '7'
|
||
case 232:
|
||
return TRUE;
|
||
// '<27>' => '2'
|
||
case 233:
|
||
return TRUE;
|
||
}
|
||
}
|
||
return FALSE;
|
||
}
|
||
|
||
/////////////////////////////////////////////////////////////////////////////
|
||
// class CPA_EdIR_EditCtrl
|
||
/////////////////////////////////////////////////////////////////////////////
|
||
|
||
BEGIN_MESSAGE_MAP(CPA_EdIR_EditCtrl, CRichEditCtrl)
|
||
//{{AFX_MSG_MAP(CPA_EdIR_EditCtrl)
|
||
ON_WM_CHAR()
|
||
ON_WM_KEYDOWN()
|
||
ON_WM_MOUSEMOVE()
|
||
ON_WM_LBUTTONDOWN()
|
||
ON_WM_LBUTTONUP()
|
||
ON_WM_KEYUP()
|
||
ON_WM_HELPINFO()
|
||
ON_WM_LBUTTONDBLCLK()
|
||
ON_WM_RBUTTONDOWN()
|
||
ON_COMMAND(ID_IR_RULES_ADDWATCH, OnIrRulesAddwatch)
|
||
ON_COMMAND(ID_IR_RULES_FINDREPLACE, OnIrRulesFindreplace)
|
||
ON_COMMAND(ID_IR_RULES_NEXT, OnIrRulesNext)
|
||
ON_COMMAND(ID_IR_RULES_PREVIOUS, OnIrRulesPrevious)
|
||
ON_COMMAND(ID_IR_RULES_CHANGEFONT, OnIrChangeFont)
|
||
//}}AFX_MSG_MAP
|
||
END_MESSAGE_MAP()
|
||
|
||
CStringList gm_clKeyWords;
|
||
CStringList gm_clActionWords;
|
||
CStringList gm_clConditionWords;
|
||
CStringList gm_clConstantWords;
|
||
CStringList gm_clKnownWords;
|
||
static BOOL gb_Already = FALSE;
|
||
|
||
/**********************************************************************************/
|
||
CPA_EdIR_EditCtrl::CPA_EdIR_EditCtrl()
|
||
{
|
||
if(gb_Already == FALSE)
|
||
{
|
||
// Inserts known dsg var types
|
||
long lNbDsgVars=fn_lGetNbDsgVarTypes();
|
||
for(long lDsgVarIndex=0;lDsgVarIndex<lNbDsgVars;lDsgVarIndex++)
|
||
{
|
||
CString csDsgVarType=fn_csGetDsgVarTypeEditorNameFromId(lDsgVarIndex);
|
||
|
||
gm_clKeyWords.AddTail(csDsgVarType);
|
||
ASSERT(!csDsgVarType.IsEmpty());
|
||
}
|
||
|
||
// Inserts known keywords
|
||
long lNbKeyWords=fn_lGetNbKeyWords();
|
||
for(long lKeyWordIndex=0;lKeyWordIndex<lNbKeyWords;lKeyWordIndex++)
|
||
{
|
||
CString csKeyWord=fn_csGetKeyWordEditorNameFromId(lKeyWordIndex);
|
||
|
||
gm_clKeyWords.AddTail(csKeyWord);
|
||
ASSERT(!csKeyWord.IsEmpty());
|
||
}
|
||
|
||
gm_clKeyWords.AddTail("#define");
|
||
gm_clKeyWords.AddTail("private");
|
||
gm_clKeyWords.AddTail("public");
|
||
|
||
// Adds special words
|
||
if(g_pclAIInterface->M_GetMainWorld()->GetInterface()->fn_csGetCurrentLanguage()=="French")
|
||
{
|
||
gm_clKeyWords.AddTail("Macro");
|
||
gm_clKeyWords.AddTail("Subroutine");
|
||
gm_clKeyWords.AddTail("Vrai");
|
||
gm_clKeyWords.AddTail("Faux");
|
||
gm_clKeyWords.AddTail("BloquantMoteur");
|
||
gm_clKeyWords.AddTail("BloquantRegle");
|
||
gm_clKeyWords.AddTail("NonBloquant");
|
||
}
|
||
else
|
||
{
|
||
gm_clKeyWords.AddTail("Macro");
|
||
gm_clKeyWords.AddTail("Subroutine");
|
||
gm_clKeyWords.AddTail("True");
|
||
gm_clKeyWords.AddTail("False");
|
||
gm_clKeyWords.AddTail("StopEngine");
|
||
gm_clKeyWords.AddTail("StopRule");
|
||
gm_clKeyWords.AddTail("NonStop");
|
||
}
|
||
|
||
// Inserts known conditions
|
||
long lNbConditions=fn_lGetNbConditions();
|
||
for(long lCondIndex=0;lCondIndex<lNbConditions;lCondIndex++)
|
||
{
|
||
CString csCondition=fn_csGetConditionEditorNameFromId(lCondIndex);
|
||
|
||
gm_clConditionWords.AddTail(csCondition);
|
||
ASSERT(!csCondition.IsEmpty());
|
||
}
|
||
|
||
// Inserts known metaactions
|
||
long lNbMetaActions=fn_lGetNbMetaActions();
|
||
for(long lMetaActIndex=0;lMetaActIndex<lNbMetaActions;lMetaActIndex++)
|
||
{
|
||
CString csMetaAction=fn_csGetMetaActionEditorNameFromId(lMetaActIndex);
|
||
|
||
gm_clActionWords.AddTail(csMetaAction);
|
||
ASSERT(!csMetaAction.IsEmpty());
|
||
}
|
||
|
||
// Inserts known procedures
|
||
long lNbProcedures=fn_lGetNbProcedures();
|
||
for(long lProcIndex=0;lProcIndex<lNbProcedures;lProcIndex++)
|
||
{
|
||
CString csProcedure=fn_csGetProcedureEditorNameFromId(lProcIndex);
|
||
|
||
gm_clActionWords.AddTail(csProcedure);
|
||
ASSERT(!csProcedure.IsEmpty());
|
||
}
|
||
|
||
// Inserts known functions
|
||
long lNbFunctions=fn_lGetNbFunctions();
|
||
for(long lFuncIndex=0;lFuncIndex<lNbFunctions;lFuncIndex++)
|
||
{
|
||
CString csFunction=fn_csGetFunctionEditorNameFromId(lFuncIndex);
|
||
|
||
gm_clActionWords.AddTail(csFunction);
|
||
ASSERT(!csFunction.IsEmpty());
|
||
}
|
||
|
||
// Inserts known buttons
|
||
for(unsigned long ulKeyButtonIndex=0;ulKeyButtonIndex<IPT_fn_ulNumberOfEntryAction();ulKeyButtonIndex++)
|
||
{
|
||
CString csButton=IPT_fn_szEntryActionNumber(ulKeyButtonIndex);
|
||
|
||
gm_clConstantWords.AddTail(csButton);
|
||
ASSERT(!csButton.IsEmpty());
|
||
}
|
||
|
||
// Inserts known fields
|
||
long lNbFields=fn_lGetNbFields();
|
||
for(long lFieldIndex=0;lFieldIndex<lNbFields;lFieldIndex++)
|
||
{
|
||
CString csField=fn_csGetFieldEditorNameFromId(lFieldIndex);
|
||
|
||
gm_clConstantWords.AddTail(csField);
|
||
ASSERT(!csField.IsEmpty());
|
||
}
|
||
|
||
|
||
// Inserts known texts: scan the FON link table and get all keys
|
||
{
|
||
SCR_tdst_Link_Value *p_stTextEntry;
|
||
SCR_tdst_Link_Table *p_stTextLinkTable = FON_fn_p_stGetLinkTable();
|
||
unsigned int uiTextPos = 0;
|
||
SCR_M_DyAr_GetNextElement(
|
||
SCR_tdst_Link_Value,
|
||
uiTextPos,
|
||
p_stTextEntry,
|
||
p_stTextLinkTable->stLinkArray
|
||
);
|
||
/* while there are entries in the list */
|
||
while ( p_stTextEntry )
|
||
{
|
||
gm_clConstantWords.AddTail(SCR_M_p_sz_Link_GetKey(p_stTextEntry));
|
||
|
||
uiTextPos ++;
|
||
SCR_M_DyAr_GetNextElement(
|
||
SCR_tdst_Link_Value,
|
||
uiTextPos,
|
||
p_stTextEntry,
|
||
p_stTextLinkTable->stLinkArray
|
||
);
|
||
}
|
||
}
|
||
|
||
//Makes the KnownWords List
|
||
//KeyWords
|
||
POSITION pos=gm_clKeyWords.GetHeadPosition();
|
||
while(pos!=NULL)
|
||
gm_clKnownWords.AddTail(gm_clKeyWords.GetNext(pos));
|
||
|
||
//ConditionWords
|
||
pos=gm_clConditionWords.GetHeadPosition();
|
||
while(pos!=NULL)
|
||
gm_clKnownWords.AddTail(gm_clConditionWords.GetNext(pos));
|
||
|
||
//ActionWords
|
||
pos=gm_clActionWords.GetHeadPosition();
|
||
while(pos!=NULL)
|
||
gm_clKnownWords.AddTail(gm_clActionWords.GetNext(pos));
|
||
|
||
//ConstantWords
|
||
pos=gm_clConstantWords.GetHeadPosition();
|
||
while(pos!=NULL)
|
||
gm_clKnownWords.AddTail(gm_clConstantWords.GetNext(pos));
|
||
|
||
gb_Already = TRUE;
|
||
}
|
||
|
||
m_lOldCurrentCharIndex=0;
|
||
m_lOldScrollPosition=0;
|
||
m_csOldSelectedText="";
|
||
m_bSingleChar1=FALSE;
|
||
m_bSingleChar2=FALSE;
|
||
m_bShiftKeyIsPressed=FALSE;
|
||
m_bHasBeenModified=FALSE;
|
||
mb_CanDefault = TRUE;
|
||
m_lFirstSelectIndex = 0;
|
||
m_lLastSelectIndex = 0;
|
||
m_bSingleChar1=FALSE;
|
||
m_bSingleChar2=FALSE;
|
||
m_bSearchIsFinished=FALSE;
|
||
|
||
m_bShiftKeyIsPressed=FALSE;
|
||
m_bHasBeenModified=FALSE;
|
||
|
||
m_bParentsSeleIAObj = FALSE;
|
||
|
||
m_bRepaintParent = FALSE;
|
||
m_csLastSearched = "";
|
||
|
||
m_csFontType = "";
|
||
m_nFontSize = 0;
|
||
}
|
||
|
||
/**********************************************************************************/
|
||
CPA_EdIR_EditCtrl::~CPA_EdIR_EditCtrl()
|
||
{
|
||
}
|
||
|
||
/////////////////////////////////////////////////////////////////////////////
|
||
// CPA_EdIR_EditCtrl message handlers
|
||
|
||
/**********************************************************************************/
|
||
BOOL CPA_EdIR_EditCtrl::Create(DWORD dwStyle,const RECT& rect,CWnd* pParentWnd,UINT nID)
|
||
{
|
||
static my_nID = 123456789;
|
||
m_nID = my_nID ++;
|
||
|
||
BOOL bRes=CRichEditCtrl::Create(dwStyle,rect,pParentWnd,m_nID);
|
||
|
||
if(bRes)
|
||
{
|
||
//Sets courrier font size 10
|
||
SetFont(GetParent()->GetFont());
|
||
|
||
//Gets font size
|
||
CClientDC cdc(GetParent());
|
||
CFont *p_clOldFont=cdc.SelectObject(GetParent()->GetFont());
|
||
m_clFontSize=cdc.GetTextExtent("A");
|
||
cdc.SelectObject(p_clOldFont);
|
||
|
||
//Gets vertical scrollbar height
|
||
m_lVScrollHeight=GetSystemMetrics(SM_CYVSCROLL);
|
||
|
||
//Gets vertical scrollbar height
|
||
m_lHScrollWidth=GetSystemMetrics(SM_CXHSCROLL);
|
||
|
||
CHARFORMAT cfmCharFormat;
|
||
GetSelectionCharFormat(cfmCharFormat);
|
||
cfmCharFormat.crTextColor=C_DEFAULTCOLOR;
|
||
cfmCharFormat.dwMask=CFM_COLOR;
|
||
cfmCharFormat.dwEffects=NULL;
|
||
SetDefaultCharFormat(cfmCharFormat);
|
||
//END
|
||
}
|
||
|
||
m_clToolTip.Create(this);
|
||
|
||
GetWindowRect (& m_crRect);
|
||
ScreenToClient(& m_crRect);
|
||
m_clToolTip.AddTool(this, (LPCSTR) "", &m_crRect, m_nID);
|
||
|
||
return bRes;
|
||
}
|
||
|
||
/**********************************************************************************/
|
||
BOOL CPA_EdIR_EditCtrl::ShowWindow(int nCmdShow)
|
||
{
|
||
if(nCmdShow==SW_SHOW)
|
||
{
|
||
m_fn_vResizeToFitParent();
|
||
((CPA_EdIR_View*)GetParent())->m_fn_vSetEditControl(this);
|
||
|
||
//Sets cursor position
|
||
m_fn_vSetCursorPos(m_lOldCurrentCharIndex,m_lOldScrollPosition, -1, TRUE);
|
||
|
||
m_clToolTip.Activate(TRUE);
|
||
m_fn_vSetFontTypeAndSize( );
|
||
}
|
||
else
|
||
if(nCmdShow==SW_HIDE)
|
||
{
|
||
//Gets current char pos
|
||
m_lOldCurrentCharIndex=m_fn_lGetCurrentCharIndex();
|
||
|
||
//Gets scroll position
|
||
CPoint clScrollPos = GetScrollPosition();
|
||
m_lOldScrollPosition = clScrollPos.y;
|
||
|
||
m_clToolTip.Activate(FALSE);
|
||
}
|
||
|
||
return CRichEditCtrl::ShowWindow(nCmdShow);
|
||
}
|
||
|
||
/**********************************************************************************/
|
||
void CPA_EdIR_EditCtrl::m_fn_vCopyIntoClipBoard(CString csText)
|
||
{
|
||
if(OpenClipboard())
|
||
{
|
||
if(EmptyClipboard())
|
||
{
|
||
long lSize=csText.GetLength();
|
||
HANDLE hText=GlobalAlloc(GMEM_MOVEABLE|GMEM_DDESHARE,lSize+1);
|
||
|
||
if(hText!=NULL)
|
||
{
|
||
LPVOID pvText=GlobalLock(hText);
|
||
|
||
if(pvText!=NULL)
|
||
{
|
||
CopyMemory(pvText,LPCTSTR(csText),lSize+1);
|
||
|
||
HANDLE hRes=SetClipboardData(CF_TEXT,hText);
|
||
|
||
if(hRes==NULL)
|
||
MessageBox("Can't set clipboard data");
|
||
|
||
GlobalUnlock(hText);
|
||
}
|
||
else
|
||
MessageBox("Can't lock memory for clipboard operation");
|
||
}
|
||
else
|
||
MessageBox("Can't alloc memory for clipboard");
|
||
}
|
||
else
|
||
MessageBox("Can't empty clipboard");
|
||
|
||
CloseClipboard();
|
||
}
|
||
}
|
||
|
||
/**********************************************************************************/
|
||
CString CPA_EdIR_EditCtrl::m_fn_csGetStringFromClipBoard()
|
||
{
|
||
CString csText="";
|
||
|
||
if(OpenClipboard())
|
||
{
|
||
HANDLE hText=GetClipboardData(CF_TEXT);
|
||
|
||
if(hText!=NULL)
|
||
{
|
||
LPVOID pvText=GlobalLock(hText);
|
||
|
||
if(pvText!=NULL)
|
||
{
|
||
csText=(char *)pvText;
|
||
|
||
GlobalUnlock(hText);
|
||
}
|
||
else
|
||
MessageBox("Can't lock allocated memory for clipboard operation");
|
||
}
|
||
|
||
CloseClipboard();
|
||
}
|
||
|
||
return csText;
|
||
}
|
||
|
||
/**********************************************************************************/
|
||
void CPA_EdIR_EditCtrl::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
|
||
{
|
||
#ifdef DAVE
|
||
if(isprint(nChar))
|
||
m_fn_vOnChar(m_fn_lGetCurrentCharIndex(),nChar);
|
||
else
|
||
CRichEditCtrl::OnChar(nChar, nRepCnt, nFlags);
|
||
#else
|
||
if(isprint(nChar))
|
||
m_fn_vOnChar(m_fn_lGetCurrentCharIndex(),nChar);
|
||
else
|
||
CRichEditCtrl::OnChar(nChar, nRepCnt, nFlags);
|
||
/*kwn
|
||
if(!((CPA_EdIR_View *)GetParent())->m_bIsReadOnly)
|
||
{
|
||
//Undo
|
||
if(nChar==C_CTRLZ)
|
||
{
|
||
if(m_clEditManager.CanUndo())
|
||
m_clEditManager.Undo();
|
||
else
|
||
{
|
||
MessageBox("No Undo Available");
|
||
|
||
m_fn_vSetModified(FALSE);
|
||
}
|
||
}
|
||
|
||
//Redo
|
||
if(nChar==C_CTRLA)
|
||
{
|
||
if(m_clEditManager.CanRedo())
|
||
m_clEditManager.Redo();
|
||
else
|
||
MessageBox("No Redo Available");
|
||
}
|
||
|
||
//Default input
|
||
if(isprint(nChar))
|
||
m_fn_vOnChar(m_fn_lGetCurrentCharIndex(),nChar);
|
||
else
|
||
//Return
|
||
if(nChar==VK_RETURN)
|
||
{
|
||
CString csText;
|
||
GetWindowText(csText);
|
||
LPCSTR pcur = (LPCSTR) csText;
|
||
long lIndex = m_fn_lGetCurrentCharIndex(), cpttab = 0;
|
||
long lIndex1 = lIndex;
|
||
CString addtab;
|
||
|
||
while (lIndex && pcur[lIndex] != '\r')
|
||
lIndex--;
|
||
if(pcur[lIndex] == '\r')
|
||
{
|
||
lIndex++;
|
||
while(pcur[lIndex] && (lIndex < lIndex1 ) && ((pcur[lIndex] == '\t') || (pcur[lIndex] == ' ')))
|
||
{
|
||
addtab += pcur[lIndex];
|
||
lIndex++; cpttab++;
|
||
}
|
||
}
|
||
m_fn_vOnAddString(m_fn_lGetCurrentCharIndex(),C_RETURN);
|
||
if(cpttab)
|
||
m_fn_vOnAddString(m_fn_lGetCurrentCharIndex(),addtab);
|
||
}
|
||
}*/
|
||
#endif
|
||
}
|
||
|
||
/**********************************************************************************/
|
||
void CPA_EdIR_EditCtrl::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
|
||
{
|
||
|
||
#ifdef DAVE
|
||
CRichEditCtrl::OnKeyDown(nChar, nRepCnt, nFlags);
|
||
#else
|
||
//In order to manage selection with page up and page down
|
||
static long s_lSelectionStartIndex=-1;
|
||
|
||
// update display parameter
|
||
m_bRepaintParent = FALSE;
|
||
|
||
if(!((CPA_EdIR_View *)GetParent())->m_bIsReadOnly)
|
||
{
|
||
// intercept engine key
|
||
if (nChar == C_F2)
|
||
{
|
||
M_GetMainWnd()->SendMessage(WM_COMMAND, CPA_IDCB_SWAPTOEDITORS, 0);
|
||
|
||
}
|
||
|
||
// move from one word to another (Ctrl+arrow)
|
||
if(m_fn_bCtrlKeyIsPressed() && (nChar == VK_LEFT || nChar == VK_RIGHT))
|
||
{
|
||
CString csText;
|
||
int iIndex;
|
||
|
||
GetWindowText(csText);
|
||
CRichEditCtrl::OnKeyDown(nChar, nRepCnt, nFlags);
|
||
iIndex = (int) m_fn_lGetCurrentCharIndex();
|
||
|
||
while(nChar == VK_LEFT && iIndex > 0 && csText[iIndex-1] == '_')
|
||
{
|
||
CRichEditCtrl::OnKeyDown(nChar, nRepCnt, nFlags);
|
||
CRichEditCtrl::OnKeyDown(nChar, nRepCnt, nFlags);
|
||
iIndex = (int) m_fn_lGetCurrentCharIndex();
|
||
}
|
||
while(nChar == VK_RIGHT && iIndex < csText.GetLength() && csText[iIndex] == '_')
|
||
{
|
||
CRichEditCtrl::OnKeyDown(nChar, nRepCnt, nFlags);
|
||
CRichEditCtrl::OnKeyDown(nChar, nRepCnt, nFlags);
|
||
iIndex = (int) m_fn_lGetCurrentCharIndex();
|
||
}
|
||
return;
|
||
}
|
||
|
||
// shift mode
|
||
if(nChar==C_SHIFT)
|
||
{
|
||
if(m_bShiftKeyIsPressed==FALSE)
|
||
{
|
||
long lEndSelection;
|
||
GetSel(s_lSelectionStartIndex,lEndSelection);
|
||
}
|
||
|
||
m_bShiftKeyIsPressed=TRUE;
|
||
}
|
||
|
||
char cErasedChar=0;
|
||
|
||
// erase with Suppr Key
|
||
if(nChar==C_SUPPR && m_fn_lGetCurrentCharIndex()<GetTextLength())
|
||
{
|
||
CString csText;
|
||
GetWindowText(csText);
|
||
|
||
if ( m_fn_bCtrlKeyIsPressed() )
|
||
{
|
||
CString csDeleteString;
|
||
long lStartSelection, lEndSelection;
|
||
int iIndex;
|
||
|
||
iIndex = m_fn_lGetCurrentCharIndex();
|
||
|
||
if(!M_ISALNUM(csText[iIndex]))
|
||
{
|
||
cErasedChar = csText[iIndex];
|
||
m_bSingleChar2 = TRUE;
|
||
}
|
||
else
|
||
{
|
||
m_bSingleChar2 = FALSE;
|
||
csDeleteString = m_fn_csGetWordAfter((m_fn_lGetCurrentCharIndex()), lStartSelection, lEndSelection);
|
||
m_fn_vOnDelString(lStartSelection,csDeleteString,nChar,TRUE);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
cErasedChar=csText[int(m_fn_lGetCurrentCharIndex())];
|
||
}
|
||
}
|
||
// erase with backspace Key
|
||
else if(nChar==C_BACKSPACE && m_fn_lGetCurrentCharIndex()>0)
|
||
{
|
||
CString csText;
|
||
GetWindowText(csText);
|
||
|
||
if ( m_fn_bCtrlKeyIsPressed() )
|
||
{
|
||
CString csDeleteString;
|
||
long lStartSelection, lEndSelection;
|
||
int iIndex;
|
||
|
||
iIndex = m_fn_lGetCurrentCharIndex()-1;
|
||
|
||
if(!M_ISALNUM(csText[iIndex]))
|
||
{
|
||
cErasedChar=csText[iIndex];
|
||
m_bSingleChar1 = TRUE;
|
||
}
|
||
else
|
||
{
|
||
m_bSingleChar1 = FALSE;
|
||
csDeleteString = m_fn_csGetWordBefore((m_fn_lGetCurrentCharIndex()) ,lStartSelection ,lEndSelection);
|
||
m_fn_vOnDelString(lStartSelection,csDeleteString,nChar,TRUE);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
cErasedChar=csText[int(m_fn_lGetCurrentCharIndex()-1)];
|
||
}
|
||
}
|
||
|
||
//Gets selected text
|
||
CString csSelectedText;
|
||
long lStartSelection;
|
||
long lEndSelection;
|
||
BOOL bNoSelectedText;
|
||
|
||
|
||
GetSel(lStartSelection,lEndSelection);
|
||
bNoSelectedText=(lStartSelection==lEndSelection);
|
||
|
||
if(!bNoSelectedText)
|
||
{
|
||
GetWindowText(csSelectedText);
|
||
csSelectedText=csSelectedText.Mid(lStartSelection,lEndSelection-lStartSelection);
|
||
m_csOldSelectedText=csSelectedText;
|
||
}
|
||
else
|
||
m_csOldSelectedText="";
|
||
|
||
//Deletes
|
||
UINT nStandardChar = MapVirtualKey(nChar,C_TRANSLATE_VK2CHAR);
|
||
nStandardChar&=C_TRANSLATE_CHARMASK;
|
||
|
||
// check if the selection must be deleted
|
||
if( (!bNoSelectedText)
|
||
&&
|
||
((!m_fn_bCtrlKeyIsPressed()&&(nStandardChar!=0)&&(fn_bIsValidCharacter(nStandardChar, m_bShiftKeyIsPressed))) ||
|
||
(m_fn_bCtrlKeyIsPressed() && nChar=='V') ||
|
||
(!m_bShiftKeyIsPressed && nChar==C_SUPPR) ||
|
||
(m_bShiftKeyIsPressed && nChar==C_INSER) ||
|
||
(nChar==C_AUTOCOMPLETECHARDOWN) ||
|
||
(nChar==C_BACKSPACE)))
|
||
{
|
||
m_fn_vOnDelString(lStartSelection,m_csOldSelectedText,nChar,TRUE);
|
||
}
|
||
|
||
// check if something else must be deleted
|
||
else if((bNoSelectedText) && ((!m_bShiftKeyIsPressed && nChar==C_SUPPR)||(nChar==C_BACKSPACE)))
|
||
{
|
||
CString csDeletedString;
|
||
|
||
// end or begin of a line
|
||
if((nChar==C_SUPPR && cErasedChar=='\xD') ||
|
||
(nChar==C_BACKSPACE && cErasedChar=='\xA'))
|
||
csDeletedString=C_RETURN;
|
||
// nothing
|
||
else if(cErasedChar==0)
|
||
csDeletedString="";
|
||
// current character
|
||
else
|
||
csDeletedString=cErasedChar;
|
||
|
||
if(!m_fn_bCtrlKeyIsPressed() || m_bSingleChar1 || m_bSingleChar2 )
|
||
m_fn_vOnDelString(m_fn_lGetCurrentCharIndex(),csDeletedString,nChar,!bNoSelectedText);
|
||
}
|
||
|
||
//Processes input (default action)
|
||
if(nChar!=C_AUTOCOMPLETECHARDOWN &&
|
||
// nChar!=C_INSER &&
|
||
nChar!=C_SUPPR &&
|
||
nChar!=C_BACKSPACE &&
|
||
// nChar!=C_TAB &&
|
||
nChar!=C_PAGEUP &&
|
||
nChar!=C_PAGEDOWN &&
|
||
// !(m_fn_bCtrlKeyIsPressed() && nChar=='C') && // Copy
|
||
// !(m_fn_bCtrlKeyIsPressed() && nChar=='X') && // Cut
|
||
// !(m_fn_bCtrlKeyIsPressed() && nChar=='V') && // Paste
|
||
// !(m_fn_bCtrlKeyIsPressed() && nChar=='Z') && // Undo
|
||
// !(m_fn_bCtrlKeyIsPressed() && nChar=='A') && // ??
|
||
// !(m_fn_bCtrlKeyIsPressed() && nChar=='T') && // find by type
|
||
// !(m_fn_bCtrlKeyIsPressed() && nChar=='F') && // find & replace
|
||
!(m_fn_bCtrlKeyIsPressed() && nChar=='P') && // process AI
|
||
!(m_fn_bCtrlKeyIsPressed() && nChar=='W') && // ??
|
||
!(m_fn_bCtrlKeyIsPressed() && nChar==C_COMMENT) && // comment selection
|
||
!(m_fn_bCtrlKeyIsPressed() && nChar==C_DECOMMENT) //&& // decomment selection
|
||
// !(m_fn_bCtrlKeyIsPressed() && nChar==C_INSER) &&
|
||
// !(m_bShiftKeyIsPressed && nChar==C_SUPPR) &&
|
||
// !(m_bShiftKeyIsPressed && nChar==C_INSER)
|
||
)
|
||
CRichEditCtrl::OnKeyDown(nChar, nRepCnt, nFlags);
|
||
|
||
/* //Copies into clipboard
|
||
if(!m_csOldSelectedText.IsEmpty() && (m_fn_bCtrlKeyIsPressed() && ((nChar=='C')||(nChar==C_INSER))))
|
||
{
|
||
m_fn_vCopyIntoClipBoard(m_csOldSelectedText);
|
||
}
|
||
|
||
//Pastes from clipboard
|
||
if((m_fn_bCtrlKeyIsPressed() && nChar=='V')||(m_bShiftKeyIsPressed && nChar==C_INSER))
|
||
{
|
||
CString csText=m_fn_csGetStringFromClipBoard();
|
||
|
||
if(!csText.IsEmpty())
|
||
m_fn_vOnAddString(m_fn_lGetCurrentCharIndex(),csText);
|
||
}
|
||
|
||
//Cuts into clipboard
|
||
if(!m_csOldSelectedText.IsEmpty() && ((m_fn_bCtrlKeyIsPressed() && nChar=='X')||(m_bShiftKeyIsPressed && nChar==C_SUPPR)))
|
||
{
|
||
m_fn_vOnDelString(lStartSelection,m_csOldSelectedText,nChar,TRUE);
|
||
m_fn_vCopyIntoClipBoard(m_csOldSelectedText);
|
||
}
|
||
|
||
//Tabulation
|
||
if(nChar==C_TAB)
|
||
{
|
||
if( m_bShiftKeyIsPressed )
|
||
m_fn_vDeleteBlockTabulation();
|
||
else
|
||
m_fn_vAddBlockTabulation();
|
||
}
|
||
*/
|
||
//AutoCompletion
|
||
if(nChar==C_AUTOCOMPLETECHARDOWN)
|
||
{
|
||
long lCurrentCharLine=m_fn_lGetCurrentCharLine();
|
||
long lCurrentCharCol=m_fn_lGetCurrentCharCol();
|
||
|
||
m_fn_vCompleteWord(lCurrentCharLine,lCurrentCharCol);
|
||
}
|
||
|
||
//PageUp/Down capabilities
|
||
if((nChar==C_PAGEUP)||(nChar==C_PAGEDOWN))
|
||
{
|
||
CRect crClientRect;
|
||
long lWindowHeigth;
|
||
long lLineNumber;
|
||
|
||
GetParent()->GetClientRect(crClientRect);
|
||
|
||
lWindowHeigth=crClientRect.bottom-m_lVScrollHeight;
|
||
lWindowHeigth/=m_clFontSize.cy;
|
||
if(nChar==C_PAGEUP)
|
||
lWindowHeigth=-lWindowHeigth;
|
||
|
||
lLineNumber=m_fn_lGetCurrentCharLine();
|
||
lLineNumber+=lWindowHeigth;
|
||
if(lLineNumber<0)
|
||
lLineNumber=0;
|
||
|
||
if(m_bShiftKeyIsPressed==TRUE)
|
||
SetSel(s_lSelectionStartIndex,LineIndex(lLineNumber));
|
||
else
|
||
SetSel(LineIndex(lLineNumber),LineIndex(lLineNumber));
|
||
}
|
||
|
||
//Displays IA Objects
|
||
if(m_fn_bCtrlKeyIsPressed() && nChar=='T')
|
||
{
|
||
long lCurrentCharLine=m_fn_lGetCurrentCharLine();
|
||
long lCurrentCharCol=m_fn_lGetCurrentCharCol();
|
||
|
||
//Displays dialog box
|
||
m_fn_vDisplayIAObjectsAndCompleteWordNew(lCurrentCharLine,lCurrentCharCol);
|
||
}
|
||
/*
|
||
//Find&Replace
|
||
if(nChar==C_F && m_fn_bCtrlKeyIsPressed())
|
||
{
|
||
HINSTANCE hOldInstance=AfxGetResourceHandle();
|
||
AfxSetResourceHandle(g_stAIIdentity.hModule);
|
||
CPA_EdIR_DiagReplace m_DReplace(this);
|
||
m_DReplace.DoModal();
|
||
AfxSetResourceHandle(hOldInstance);
|
||
SetFocus();
|
||
}
|
||
|
||
//Find last searched word
|
||
if( nChar == C_L && m_fn_bCtrlKeyIsPressed() )
|
||
{
|
||
long lStart, lEnd;
|
||
GetSel( lStart, lEnd );
|
||
m_fn_vFindAndSelTextNext( lEnd, m_csLastSearched );
|
||
}
|
||
*/
|
||
//Add to watch
|
||
if( nChar == C_W && m_fn_bCtrlKeyIsPressed() )
|
||
{
|
||
OnIrRulesAddwatch();
|
||
}
|
||
|
||
//Process AI
|
||
if( nChar == C_P && m_fn_bCtrlKeyIsPressed() )
|
||
{
|
||
if (g_pclAIInterface && g_pclAIInterface->m_pclIRMainFrame &&
|
||
g_pclAIInterface->m_pclIRMainFrame->m_fn_pclGetButtonView())
|
||
g_pclAIInterface->m_pclIRMainFrame->m_fn_pclGetButtonView()->m_fn_vProcessIA();
|
||
}
|
||
/*
|
||
//Find next
|
||
if( nChar == C_F3 )
|
||
{
|
||
long first, last;
|
||
CString word;
|
||
|
||
GetSel( first, last );
|
||
if( first != last )
|
||
word = m_fn_csGetWordIn(first+1, first, last);
|
||
else
|
||
word = m_fn_csGetWordIn(m_fn_lGetCurrentCharIndex(),first, last);
|
||
|
||
m_csLastSearched = word;
|
||
|
||
m_fn_vFindAndSelTextNext( last, word );
|
||
}
|
||
// Find previous
|
||
if( nChar == C_F4 )
|
||
{
|
||
long first, last;
|
||
CString word;
|
||
|
||
GetSel( first, last );
|
||
if( first != last )
|
||
word = m_fn_csGetWordIn(first+1, first, last);
|
||
else
|
||
word = m_fn_csGetWordIn(m_fn_lGetCurrentCharIndex(),first, last);
|
||
|
||
m_csLastSearched = word;
|
||
|
||
m_fn_vFindAndSelTextPrevious( first, word );
|
||
}
|
||
*/
|
||
//Sets/Removes BreakPoint
|
||
if(nChar==C_F9)
|
||
{
|
||
long lLineIndex=m_fn_lGetCurrentCharLine();
|
||
long lStartLineIndex=LineIndex(lLineIndex);
|
||
|
||
((CPA_EdIR_Frame *)GetParentFrame())->m_fn_vSetOrRemoveOneBreakPoint(lStartLineIndex,lLineIndex*m_clFontSize.cy);
|
||
}
|
||
|
||
}
|
||
|
||
// comment current selected lines
|
||
if (m_fn_bCtrlKeyIsPressed() && nChar==C_COMMENT)
|
||
{
|
||
long lStartSelection, lEndSelection;
|
||
long lStartLine, lEndLine, lCurLine;
|
||
long lAddEnd = 0;
|
||
|
||
// get the selected lines
|
||
GetSel (lStartSelection, lEndSelection);
|
||
lStartLine = LineFromChar (lStartSelection);
|
||
lEndLine = LineFromChar (lEndSelection-1);
|
||
|
||
// for each selected line
|
||
for (lCurLine = lStartLine; lCurLine <= lEndLine; lCurLine ++)
|
||
{
|
||
m_fn_vOnChar (LineIndex (lCurLine), ';');
|
||
lAddEnd ++;
|
||
}
|
||
// restore selection
|
||
SetSel (lStartSelection, lEndSelection + lAddEnd);
|
||
}
|
||
// decomment selected lines
|
||
if (m_fn_bCtrlKeyIsPressed() && nChar==C_DECOMMENT)
|
||
{
|
||
long lStartSelection, lEndSelection;
|
||
long lStartLine, lEndLine, lCurLine;
|
||
long lAddEnd = 0;
|
||
|
||
// get the selected lines
|
||
GetSel (lStartSelection, lEndSelection);
|
||
lStartLine = LineFromChar (lStartSelection);
|
||
lEndLine = LineFromChar (lEndSelection-1);
|
||
|
||
// for each selected line
|
||
for (lCurLine = lStartLine; lCurLine <= lEndLine; lCurLine ++)
|
||
{
|
||
long lLineIndex = LineIndex (lCurLine);
|
||
long lLength = LineLength (lLineIndex);
|
||
|
||
// get the current line in the buffer
|
||
CString csLine = m_fn_csGetLine(lCurLine);
|
||
|
||
// check if the line is commented
|
||
CString csCommentLine = csLine;
|
||
csCommentLine.TrimLeft();
|
||
|
||
// if necessary, decomment it
|
||
if ((csCommentLine != "") && (csCommentLine[0] == ';'))
|
||
{
|
||
long lIndex = csLine.Find(';') + lLineIndex;
|
||
m_fn_vOnDelString (lIndex, ";", C_SUPPR, FALSE);
|
||
lAddEnd --;
|
||
}
|
||
}
|
||
// restore selection
|
||
SetSel (lStartSelection, lEndSelection + lAddEnd);
|
||
}
|
||
#endif
|
||
}
|
||
|
||
/**********************************************************************************/
|
||
void CPA_EdIR_EditCtrl::OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags)
|
||
{
|
||
#ifdef DAVE
|
||
CRichEditCtrl::OnKeyUp(nChar, nRepCnt, nFlags);
|
||
#else
|
||
if(!((CPA_EdIR_View *)GetParent())->m_bIsReadOnly)
|
||
{
|
||
CRichEditCtrl::OnKeyUp(nChar, nRepCnt, nFlags);
|
||
|
||
if((nChar==C_CTRL) || (nChar==C_ALTGR))
|
||
{
|
||
m_bSingleChar1 = FALSE;
|
||
m_bSingleChar2 = FALSE;
|
||
}
|
||
|
||
if(nChar==C_SHIFT)
|
||
m_bShiftKeyIsPressed=FALSE;
|
||
}
|
||
#endif
|
||
}
|
||
|
||
/**********************************************************************************/
|
||
void CPA_EdIR_EditCtrl::OnMouseMove(UINT nFlags,CPoint point)
|
||
{
|
||
CRichEditCtrl::OnMouseMove( nFlags, point );
|
||
}
|
||
|
||
/**********************************************************************************/
|
||
void CPA_EdIR_EditCtrl::OnLButtonDown(UINT nFlags,CPoint point)
|
||
{
|
||
GetParentFrame()->SetActiveView((CView *)GetParent());
|
||
m_bRepaintParent = TRUE;
|
||
CRichEditCtrl::OnLButtonDown(nFlags,point);
|
||
}
|
||
|
||
/**********************************************************************************/
|
||
void CPA_EdIR_EditCtrl::OnLButtonUp(UINT nFlags,CPoint point)
|
||
{
|
||
CRichEditCtrl::OnLButtonUp(nFlags,point);
|
||
}
|
||
|
||
/**********************************************************************************/
|
||
long CPA_EdIR_EditCtrl::m_fn_lSkipLeftAlphaNumChar(CString &csString,long lIndex)
|
||
{
|
||
long lResultIndex=0;
|
||
|
||
if(lIndex>0)
|
||
{
|
||
lResultIndex=lIndex-1;
|
||
while(lResultIndex>=0 && M_ISALNUM(csString[int(lResultIndex)]))
|
||
lResultIndex--;
|
||
lResultIndex++;
|
||
}
|
||
|
||
return lResultIndex;
|
||
}
|
||
|
||
/**********************************************************************************/
|
||
long CPA_EdIR_EditCtrl::m_fn_lSkipRightAlphaNumChar(CString &csString,long lIndex)
|
||
{
|
||
long lResultIndex=lIndex;
|
||
long lStringLen=csString.GetLength();
|
||
|
||
if(lIndex<lStringLen)
|
||
{
|
||
while(lResultIndex<=lStringLen-1 && M_ISALNUM(csString[int(lResultIndex)]))
|
||
lResultIndex++;
|
||
}
|
||
|
||
return lResultIndex;
|
||
}
|
||
|
||
/**********************************************************************************/
|
||
long CPA_EdIR_EditCtrl::m_fn_lSkipLeftNonAlphaNumChar(CString &csString,long lIndex)
|
||
{
|
||
long lResultIndex=0;
|
||
|
||
if(lIndex>0)
|
||
{
|
||
lResultIndex=lIndex-1;
|
||
while(lResultIndex>=0 && !M_ISALNUM(csString[int(lResultIndex)]))
|
||
lResultIndex--;
|
||
lResultIndex++;
|
||
}
|
||
|
||
return lResultIndex;
|
||
}
|
||
|
||
/**********************************************************************************/
|
||
long CPA_EdIR_EditCtrl::m_fn_lSkipRightNonAlphaNumChar(CString &csString,long lIndex)
|
||
{
|
||
long lResultIndex=lIndex;
|
||
long lStringLen=csString.GetLength();
|
||
|
||
if(lIndex<lStringLen)
|
||
{
|
||
while(lResultIndex<=lStringLen-1 && !M_ISALNUM(csString[int(lResultIndex)]))
|
||
lResultIndex++;
|
||
}
|
||
|
||
return lResultIndex;
|
||
}
|
||
|
||
/**********************************************************************************/
|
||
BOOL CPA_EdIR_EditCtrl::m_fn_bIsInTheListString(CString &csWord,CStringList *p_clListString)
|
||
{
|
||
POSITION pos=p_clListString->GetHeadPosition();
|
||
BOOL bFound=FALSE;
|
||
while(pos!=NULL && !bFound)
|
||
{
|
||
bFound=(p_clListString->GetNext(pos).CompareNoCase(csWord)==0);
|
||
}
|
||
|
||
return bFound;
|
||
}
|
||
|
||
/**********************************************************************************/
|
||
BOOL CPA_EdIR_EditCtrl::m_fn_bIsAKnownWord(CString &csWord)
|
||
{
|
||
return m_fn_bIsInTheListString(csWord,&gm_clKnownWords);
|
||
}
|
||
|
||
/**********************************************************************************/
|
||
BOOL CPA_EdIR_EditCtrl::m_fn_bIsAKeyWord(CString &csWord)
|
||
{
|
||
return m_fn_bIsInTheListString(csWord,&gm_clKeyWords);
|
||
}
|
||
|
||
/**********************************************************************************/
|
||
BOOL CPA_EdIR_EditCtrl::m_fn_bIsAnActionWord(CString &csWord)
|
||
{
|
||
return m_fn_bIsInTheListString(csWord,&gm_clActionWords);
|
||
}
|
||
|
||
/**********************************************************************************/
|
||
BOOL CPA_EdIR_EditCtrl::m_fn_bIsAConditionWord(CString &csWord)
|
||
{
|
||
return m_fn_bIsInTheListString(csWord,&gm_clConditionWords);
|
||
}
|
||
|
||
/**********************************************************************************/
|
||
BOOL CPA_EdIR_EditCtrl::m_fn_bIsAConstantWord(CString &csWord)
|
||
{
|
||
return m_fn_bIsInTheListString(csWord,&gm_clConstantWords);
|
||
}
|
||
|
||
/**********************************************************************************/
|
||
BOOL CPA_EdIR_EditCtrl::m_fn_bIsAMacroWord(CString &csWord)
|
||
{
|
||
POSITION pos;
|
||
CString csString;
|
||
void * p_Dummy;
|
||
if( g_clMacroList.map )
|
||
{
|
||
pos = g_clMacroList.map->GetStartPosition();
|
||
while( pos )
|
||
{
|
||
g_clMacroList.map->GetNextAssoc( pos, csString, p_Dummy );
|
||
if( csString.CompareNoCase( csWord ) == 0 )
|
||
return TRUE;
|
||
}
|
||
}
|
||
return FALSE;
|
||
}
|
||
|
||
/**********************************************************************************/
|
||
CStringList *CPA_EdIR_EditCtrl::m_fn_pclGetListMatchWord(CString csWord,CStringList *p_clListString)
|
||
{
|
||
CString csUpperWord=csWord;
|
||
csUpperWord.MakeUpper();
|
||
|
||
CStringList *p_clListMatchWord=new CStringList;
|
||
POSITION pos=p_clListString->GetHeadPosition();
|
||
|
||
while(pos!=NULL)
|
||
{
|
||
CString csCurrentString=p_clListString->GetAt(pos);
|
||
csCurrentString.MakeUpper();
|
||
|
||
if(csCurrentString.Find(csUpperWord)==0)
|
||
{
|
||
long l_id = fn_lGetProcedureIdFromEditorName(p_clListString->GetAt(pos));
|
||
CString cs_Params = fn_csGetProcedureParams(l_id);
|
||
CString szTemp;
|
||
int nStringLength=cs_Params.GetLength();
|
||
if (nStringLength)
|
||
{
|
||
szTemp="(";
|
||
for (int nLoop=0; nLoop<nStringLength; nLoop++)
|
||
{
|
||
switch (cs_Params[nLoop])
|
||
{
|
||
case 'A':
|
||
szTemp+="Action";
|
||
break;
|
||
case 'B':
|
||
szTemp+="Boolean";
|
||
break;
|
||
case 'C':
|
||
szTemp+="GMT";
|
||
break;
|
||
case 'D':
|
||
szTemp+="Array";
|
||
break;
|
||
case 'E':
|
||
szTemp+="ZDE_PERSO";
|
||
break;
|
||
case 'F':
|
||
szTemp+="Surface";
|
||
break;
|
||
case 'G':
|
||
szTemp+="Family";
|
||
break;
|
||
case 'H':
|
||
szTemp+="ENV";
|
||
break;
|
||
case 'I':
|
||
szTemp+="List";
|
||
break;
|
||
case 'J':
|
||
szTemp+="Objecttable";
|
||
break;
|
||
case 'K':
|
||
szTemp+="Mask";
|
||
break;
|
||
case 'L':
|
||
szTemp+="Long";
|
||
break;
|
||
case 'M':
|
||
szTemp+="Channel";
|
||
break;
|
||
case 'N':
|
||
szTemp+="Power";
|
||
break;
|
||
case 'O':
|
||
szTemp+="LIPSYNCHRO";
|
||
break;
|
||
case '!':
|
||
szTemp+="PERSO";
|
||
break;
|
||
case 'P':
|
||
szTemp+="PERSO";
|
||
break;
|
||
case 'Q':
|
||
szTemp+="Comport";
|
||
break;
|
||
case 'R':
|
||
szTemp+="Sector";
|
||
break;
|
||
case 'S':
|
||
szTemp+="String";
|
||
break;
|
||
case 'T':
|
||
szTemp+="Text";
|
||
break;
|
||
case 'U':
|
||
szTemp+="ZDM_PERSO";
|
||
break;
|
||
case 'V':
|
||
szTemp+="Vector";
|
||
break;
|
||
case 'W':
|
||
szTemp+="WayPoint";
|
||
break;
|
||
case 'X':
|
||
szTemp+="Real";
|
||
break;
|
||
case 'Z':
|
||
szTemp+="ZDD_PERSO";
|
||
break;
|
||
case '1':
|
||
szTemp+="my_Reflex";
|
||
break;
|
||
case '2':
|
||
szTemp+="my_Intell";
|
||
break;
|
||
case '3':
|
||
szTemp+="Reflex";
|
||
break;
|
||
case '4':
|
||
szTemp+="Intell";
|
||
break;
|
||
case '5':
|
||
szTemp+="Font";
|
||
break;
|
||
case '6':
|
||
szTemp+="Button";
|
||
break;
|
||
case '#':
|
||
szTemp+="Caps";
|
||
break;
|
||
case '$':
|
||
szTemp+="Graph";
|
||
break;
|
||
default:
|
||
break;
|
||
|
||
}
|
||
szTemp+=", ";
|
||
}
|
||
szTemp.SetAt(szTemp.GetLength()-2,')');
|
||
szTemp=szTemp.Left(szTemp.GetLength()-1);
|
||
}
|
||
szTemp=p_clListString->GetAt(pos)+szTemp;
|
||
|
||
POSITION pos1 = p_clListMatchWord->GetHeadPosition();
|
||
BOOL bOK = TRUE;
|
||
while(pos1)
|
||
{
|
||
if(p_clListMatchWord->GetNext(pos1).CompareNoCase(szTemp) == 0)
|
||
{
|
||
bOK = FALSE;
|
||
break;
|
||
}
|
||
}
|
||
if(bOK)
|
||
p_clListMatchWord->AddTail(szTemp);
|
||
}
|
||
p_clListString->GetNext(pos);
|
||
}
|
||
|
||
return p_clListMatchWord;
|
||
}
|
||
|
||
/**********************************************************************************/
|
||
COLORREF CPA_EdIR_EditCtrl::m_fn_rgbGetColor(CString &csWord)
|
||
{
|
||
if(m_fn_bIsAKeyWord(csWord))
|
||
return C_KEYWORDCOLOR;
|
||
|
||
if(m_fn_bIsAnActionWord(csWord))
|
||
return C_ACTIONWORDCOLOR;
|
||
|
||
if(m_fn_bIsAConditionWord(csWord))
|
||
return C_CONDITIONWORDCOLOR;
|
||
|
||
if(m_fn_bIsAConstantWord(csWord))
|
||
return C_CONSTANTWORDCOLOR;
|
||
|
||
if( m_fn_bIsAMacroWord( csWord ) )
|
||
return C_MACROWORDCOLOR;
|
||
|
||
CString csLower = csWord;
|
||
csLower.MakeLower();
|
||
if (g_pclAIInterface->m_pclIRMainFrame->m_clConstantList.m_fn_bIsAConstant(csLower))
|
||
return C_CONSTANTCOLOR;
|
||
|
||
return C_DEFAULTCOLOR;
|
||
}
|
||
|
||
/**********************************************************************************/
|
||
void CPA_EdIR_EditCtrl::m_fn_vColorText(long lStartWordIndex,long lEndWordIndex,COLORREF rgbColor, COLORREF rgbBackgroundColor, BOOL bRememberSel )
|
||
{
|
||
if((rgbColor == C_DEFAULTCOLOR) && (mb_CanDefault == FALSE))
|
||
return;
|
||
|
||
//First, remembers old selection
|
||
long lFirstSelectedCharIndex;
|
||
long lLastSelectedCharIndex;
|
||
if( bRememberSel )
|
||
GetSel(lFirstSelectedCharIndex,lLastSelectedCharIndex);
|
||
|
||
//Selects the word
|
||
SetSel(lStartWordIndex,lEndWordIndex);
|
||
|
||
//Changes word's color
|
||
CHARFORMAT cfmCharFormat;
|
||
GetSelectionCharFormat(cfmCharFormat);
|
||
cfmCharFormat.crTextColor=rgbColor;
|
||
cfmCharFormat.dwMask = CFM_COLOR | CFM_FACE | CFM_SIZE;
|
||
cfmCharFormat.dwEffects = NULL;
|
||
strcpy( cfmCharFormat.szFaceName, LPCSTR( m_csFontType ) );
|
||
cfmCharFormat.yHeight = m_nFontSize;
|
||
SetSelectionCharFormat(cfmCharFormat);
|
||
|
||
//Selects old selection
|
||
if( bRememberSel )
|
||
SetSel(lFirstSelectedCharIndex,lLastSelectedCharIndex);
|
||
}
|
||
|
||
/**********************************************************************************/
|
||
|
||
void CPA_EdIR_EditCtrl::m_fn_vColorLines(int iStartLine, int iNumLines)
|
||
{
|
||
#ifndef DAVE
|
||
for (int iLineNum = iStartLine ; iLineNum < (iStartLine + iNumLines) ; iLineNum++)
|
||
{
|
||
int iLineIndex = LineIndex(iLineNum);
|
||
CString strLine;
|
||
int iLineLen = LineLength(iLineIndex);
|
||
if (iLineLen == 0)
|
||
continue;
|
||
LPTSTR strBuffer = strLine.GetBuffer(iLineLen);
|
||
(*(DWORD*)strBuffer) = iLineLen;
|
||
GetLine(iLineNum, strBuffer);
|
||
strLine.ReleaseBuffer(iLineLen);
|
||
|
||
for (int iPos = 0 ; iPos < iLineLen ; )
|
||
{
|
||
int iNext = iPos;
|
||
while ((iNext < iLineLen) && (!isalnum(strLine[iNext]) && (strLine[iNext] != ';')))
|
||
iNext++;
|
||
if ((iNext < iLineLen) && (strLine[iNext] == ';'))
|
||
{
|
||
m_fn_vColorText(iLineIndex + iPos, iLineIndex + iLineLen, C_COMMENTCOLOR, -1, FALSE);
|
||
break;
|
||
}
|
||
iPos = iNext;
|
||
if (iPos == iLineLen)
|
||
continue;
|
||
int iTemp = iPos;
|
||
int iTemp1 = 0;
|
||
char mot[500];
|
||
while((iPos < iLineLen) && (isalnum(strLine[iPos]) || (strLine[iPos] == '_')))
|
||
mot[iTemp1++] = strLine[iPos++];
|
||
mot[iTemp1] = 0;
|
||
CString szWord = mot;
|
||
|
||
if (!szWord.CompareNoCase("define") && (strLine[iPos - 7] == '#'))
|
||
szWord = "#define";
|
||
|
||
m_fn_vColorText(iLineIndex + iTemp, iLineIndex + iPos, m_fn_rgbGetColor(szWord)/*, rgbBackgroundColor*/, -1, FALSE );
|
||
}
|
||
}
|
||
#endif
|
||
}
|
||
|
||
/**********************************************************************************/
|
||
void CPA_EdIR_EditCtrl::m_fn_vColorText(long lStartWordIndex, long lEndWordIndex/*, CPA_EdIR_DebugInfoList *pclDebugInfoList*/)
|
||
{
|
||
#ifndef DAVE
|
||
CString csText;
|
||
GetWindowText(csText);
|
||
LPCSTR lpsz = (LPCSTR) csText;
|
||
long lTemp, lTemp1;
|
||
char mot[500];
|
||
CString szWord;
|
||
|
||
//First, remembers old selection
|
||
long lFirstSelectedCharIndex, lLastSelectedCharIndex;
|
||
GetSel(lFirstSelectedCharIndex, lLastSelectedCharIndex);
|
||
|
||
m_fn_vColorText(0, -1, RGB(0,0,0), -1, FALSE);
|
||
|
||
lTemp = lStartWordIndex;
|
||
while(lTemp && (lpsz[lTemp] != ';') && (lpsz[lTemp] != '\r'))
|
||
lTemp--;
|
||
|
||
if(lpsz[lTemp] == ';')
|
||
{
|
||
com:
|
||
lTemp = lStartWordIndex;
|
||
while(lpsz[lStartWordIndex] && lpsz[lStartWordIndex] != '\r')
|
||
lStartWordIndex++;
|
||
m_fn_vColorText(lTemp, lStartWordIndex, C_COMMENTCOLOR, -1, FALSE);
|
||
}
|
||
|
||
while(lpsz[lStartWordIndex] && (lStartWordIndex <= lEndWordIndex))
|
||
{
|
||
// Find start of next word
|
||
while(lpsz[lStartWordIndex] && (lStartWordIndex <= lEndWordIndex) && !isalnum(lpsz[lStartWordIndex]) && lpsz[lStartWordIndex] != ';')
|
||
lStartWordIndex++;
|
||
if(lpsz[lStartWordIndex] == ';')
|
||
goto com;
|
||
|
||
lTemp = lStartWordIndex;
|
||
lTemp1 = 0;
|
||
while(lpsz[lStartWordIndex] && (lStartWordIndex <= lEndWordIndex) && (isalnum(lpsz[lStartWordIndex])||(lpsz[lStartWordIndex]=='_')))
|
||
mot[lTemp1++] = lpsz[lStartWordIndex++];
|
||
mot[lTemp1] = 0;
|
||
szWord = mot;
|
||
|
||
if (!szWord.CompareNoCase("define") && (lpsz[lStartWordIndex - 7] == '#'))
|
||
szWord = "#define";
|
||
|
||
m_fn_vColorText(lTemp, lStartWordIndex, m_fn_rgbGetColor(szWord)/*, rgbBackgroundColor*/, -1, FALSE );
|
||
}
|
||
|
||
SetSel(lFirstSelectedCharIndex,lLastSelectedCharIndex);
|
||
#endif
|
||
}
|
||
|
||
/**********************************************************************************/
|
||
void CPA_EdIR_EditCtrl::m_fn_vHideNonExecutedLines (CPA_EdIR_DebugInfoList *pclDebugInfoList)
|
||
{
|
||
CList <long, long> clLinesNumbersList;
|
||
POSITION pos = pclDebugInfoList->GetHeadPosition ();
|
||
CPA_EdIR_DebugInfo *pclDebugInfo;
|
||
|
||
long lSelLine;
|
||
// get the cursor position
|
||
lSelLine = m_fn_lGetSelLine ();
|
||
|
||
long lLastLineNumber = 0;
|
||
long lLineNumber;
|
||
//long lIndex;
|
||
|
||
// show all
|
||
clLinesNumbersList.RemoveAll ();
|
||
m_fn_vHideLines (clLinesNumbersList);
|
||
|
||
// nothing but show all
|
||
if (! g_pclAIInterface->m_pclIRMainFrame->m_bMarkExecutedLines)
|
||
{
|
||
BOOL bShowTests = g_pclAIInterface->m_pclIRMainFrame->m_bShowTests;
|
||
// assuming ascending line number info
|
||
while (pos)
|
||
{
|
||
pclDebugInfo = pclDebugInfoList->GetNext (pos);
|
||
//lIndex = pclDebugInfo->m_fn_lGetIndex ();
|
||
//lLineNumber = LineFromChar (lIndex);
|
||
lLineNumber = pclDebugInfo->m_fn_lGetLineNumber ();
|
||
|
||
if (! bShowTests &&
|
||
M_GetTypeInterpret (pclDebugInfo->m_fn_pstGetNode ()) == E_ti_KeyWord &&
|
||
M_eKeyWordIdInterpret (pclDebugInfo->m_fn_pstGetNode ()) == eKeyWord_If)
|
||
{
|
||
// we should force the deletion of this line (is a test)
|
||
while (lLastLineNumber <= lLineNumber)
|
||
{
|
||
clLinesNumbersList.AddTail (lLastLineNumber);
|
||
lLastLineNumber ++;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if (pclDebugInfo->m_fn_bGetExecuted () &&
|
||
lLineNumber >= lLastLineNumber)
|
||
{
|
||
// hide all between the last line one and this
|
||
while (lLastLineNumber < lLineNumber)
|
||
{
|
||
clLinesNumbersList.AddTail (lLastLineNumber);
|
||
lLastLineNumber ++;
|
||
}
|
||
// skip the current line
|
||
lLastLineNumber ++;
|
||
}
|
||
}
|
||
}
|
||
|
||
// and hide last lines, of course
|
||
long lLineCount = GetLineCount ();
|
||
|
||
while (lLastLineNumber < lLineCount)
|
||
{
|
||
clLinesNumbersList.AddTail (lLastLineNumber);
|
||
lLastLineNumber ++;
|
||
}
|
||
|
||
m_fn_vHideLines (clLinesNumbersList);
|
||
|
||
clLinesNumbersList.RemoveAll ();
|
||
}
|
||
|
||
m_fn_vSetSelLine (lSelLine);
|
||
}
|
||
|
||
//**********************************************************************************
|
||
LRESULT CPA_EdIR_EditCtrl::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
|
||
{
|
||
// We need to pass these messages to the tooltip for it to determine
|
||
// the position of the mouse
|
||
|
||
switch (message)
|
||
{
|
||
case WM_PAINT:
|
||
{
|
||
int nScrollPos = GetScrollPos( SB_VERT );
|
||
if( nScrollPos != m_lOldScrollPosition ||
|
||
( nScrollPos == GetScrollLimit( SB_VERT ) &&
|
||
m_bRepaintParent
|
||
)
|
||
)
|
||
{
|
||
m_lOldScrollPosition = nScrollPos;
|
||
CRect clClientRect;
|
||
GetParent()->GetClientRect( &clClientRect );
|
||
CRect clRect( 0, 0, 12, clClientRect.Height() );
|
||
GetParent()->InvalidateRect( &clRect );
|
||
GetParent()->UpdateWindow();
|
||
}
|
||
}
|
||
break;
|
||
|
||
case WM_VSCROLL:
|
||
{
|
||
CRect clClientRect;
|
||
GetParent()->GetClientRect( &clClientRect );
|
||
CRect clRect( 0, 0, 12, clClientRect.Height() );
|
||
GetParent()->InvalidateRect( &clRect );
|
||
GetParent()->UpdateWindow();
|
||
}
|
||
break;
|
||
|
||
|
||
case WM_LBUTTONDOWN:
|
||
case WM_RBUTTONDOWN:
|
||
case WM_MBUTTONDOWN:
|
||
case WM_LBUTTONUP:
|
||
case WM_MBUTTONUP:
|
||
case WM_RBUTTONUP:
|
||
case WM_MOUSEMOVE:
|
||
|
||
case WM_LBUTTONDBLCLK:
|
||
{
|
||
// all those only in debugger !
|
||
CPA_DLLBase *pclDebugDLL = (CPA_DLLBase*) (g_pclAIInterface->GetMainWorld ()->GetToolDLLWithName ("IA_Debugger"));
|
||
if (pclDebugDLL->fn_bIsCurrentEditor ())
|
||
{
|
||
long xPos = LOWORD(lParam);
|
||
long yPos = HIWORD(lParam);
|
||
|
||
CPoint cpScrollPos = /*((CScrollView *) GetParent ())->*/GetScrollPosition ();
|
||
|
||
long lCharLine = /*yPos / m_clFontSize.cy;*/(cpScrollPos.y + yPos) / m_clFontSize.cy;
|
||
long lPtCharCol = /*xPos;*/cpScrollPos.x + xPos;
|
||
long lIndex = LineIndex (lCharLine);
|
||
CString csLineText = m_fn_csGetLine (lCharLine);
|
||
long lPtCurCol = 0;
|
||
int iCurChar = 0;
|
||
long lCurCol = 0;
|
||
BOOL bInText = TRUE;
|
||
//Gets font size
|
||
CClientDC cdc (GetParent ());
|
||
CFont *p_clOldFont = cdc.SelectObject (GetParent ()->GetFont ());
|
||
CPoint cpCharSize;
|
||
while (lPtCurCol <= lPtCharCol)
|
||
{
|
||
if (iCurChar >= csLineText.GetLength ())
|
||
{
|
||
bInText = FALSE;
|
||
break;
|
||
}
|
||
char chChar = csLineText [iCurChar];
|
||
cpCharSize = cdc.GetTextExtent (chChar);
|
||
if (chChar == '\t')
|
||
{
|
||
// get the next tab position. *6, if you believe it!
|
||
long lFinalCol = (1 + lCurCol / 6) * 6;
|
||
long lIncrementCol = lFinalCol - lCurCol;
|
||
lCurCol = lFinalCol;
|
||
lPtCurCol += lIncrementCol * cpCharSize.x;
|
||
if (lPtCurCol > lPtCharCol)
|
||
{
|
||
bInText = FALSE;
|
||
break;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
lPtCurCol += cpCharSize.x;
|
||
lCurCol ++;
|
||
}
|
||
iCurChar ++;
|
||
}
|
||
cdc.SelectObject(p_clOldFont);
|
||
|
||
CString csVariableName;
|
||
if (! bInText)
|
||
{
|
||
csVariableName = "";
|
||
}
|
||
else
|
||
{
|
||
lIndex += iCurChar;
|
||
long lStart, lEnd;
|
||
csVariableName = m_fn_csGetWordIn (lIndex, lStart, lEnd);
|
||
}
|
||
|
||
// Get the value
|
||
CString csVariableValue = "";
|
||
long lVariableIndex;
|
||
if (csVariableName != "")
|
||
{
|
||
// ok, ok, but let's ask the debugger for the real value
|
||
lVariableIndex = -1;
|
||
CString *pcsVariableValue = NULL;
|
||
// get the brain. Darn, this IS tough
|
||
CPA_EdIR_Brain *pclBrain = g_pclAIInterface->m_pclIRMainFrame->m_pclDebugBrain;
|
||
if (pclBrain)
|
||
{
|
||
lVariableIndex = pclBrain->m_fn_lGetVariableIndex (csVariableName);
|
||
if (lVariableIndex >= 0)
|
||
pcsVariableValue = (CString *) pclDebugDLL->OnQueryAction (g_pclAIInterface, C_uiAI_GetVariableValue, lVariableIndex);
|
||
}
|
||
|
||
// if this not work - no node selected - then look for the current value
|
||
if (pcsVariableValue)
|
||
{
|
||
// extract the value from the pointer
|
||
csVariableValue = * pcsVariableValue;
|
||
}
|
||
else
|
||
{
|
||
CPA_DLLBase *pclActorDLL = (CPA_DLLBase*) (g_pclAIInterface->GetMainWorld ()->GetObjectDLLWithName (C_szDLLActorName));
|
||
CPA_EdIR_DesignerVariablesView *pclDsgVarView = (CPA_EdIR_DesignerVariablesView *) pclActorDLL->OnQueryAction (g_pclAIInterface, C_uiActor_GetDesignerVariablesView, 0);
|
||
CTL_Editor_Data *pclEditor_Data = pclDsgVarView->m_fn_pclGetVariable (csVariableName);
|
||
if (pclEditor_Data)
|
||
{
|
||
// what is shown by this control?
|
||
// format is as text.
|
||
CStringList *pcslVariableValues = pclEditor_Data->m_fn_pcslFormatDataValueString ();
|
||
POSITION pos = pcslVariableValues->GetHeadPosition ();
|
||
while (pos)
|
||
{
|
||
csVariableValue += pcslVariableValues->GetNext (pos);
|
||
csVariableValue += ",";
|
||
}
|
||
// eliminate the trailing comma
|
||
csVariableValue = csVariableValue.Left (csVariableValue.GetLength () - 1);
|
||
}
|
||
}
|
||
}
|
||
|
||
if (message == WM_LBUTTONDBLCLK)
|
||
{
|
||
if (csVariableName != "" && csVariableValue != "")
|
||
{
|
||
tdstDebugAICom stCom;
|
||
stCom.csName = csVariableName;
|
||
stCom.csValue = csVariableValue;
|
||
stCom.lIndex = lVariableIndex;
|
||
|
||
pclDebugDLL->OnQueryAction (g_pclAIInterface, C_uiAI_ViewVariable, (long) (& stCom));
|
||
}
|
||
|
||
break;
|
||
}
|
||
|
||
|
||
m_clToolTip.UpdateTipText ((LPCSTR) csVariableValue, this, m_nID);
|
||
|
||
// update the rect just in case...
|
||
GetWindowRect (& m_crRect);
|
||
ScreenToClient(& m_crRect);
|
||
|
||
MSG msg;
|
||
msg.hwnd = m_hWnd;
|
||
msg.message = message;
|
||
msg.wParam = wParam;
|
||
msg.lParam = lParam;
|
||
|
||
m_clToolTip.RelayEvent(&msg);
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
|
||
return CRichEditCtrlWithLineManagement::WindowProc(message,wParam,lParam);
|
||
}
|
||
|
||
/**********************************************************************************/
|
||
void CPA_EdIR_EditCtrl::m_fn_vAddText(long lIndex,CString csText,COLORREF rgbColor)
|
||
{
|
||
//First, remembers old selection
|
||
long lFirstSelectedCharIndex;
|
||
long lLastSelectedCharIndex;
|
||
GetSel(lFirstSelectedCharIndex,lLastSelectedCharIndex);
|
||
|
||
//Moves cursor on lIndex position
|
||
SetSel(lIndex,lIndex);
|
||
|
||
//Changes text's color
|
||
CHARFORMAT cfmCharFormat;
|
||
GetSelectionCharFormat(cfmCharFormat);
|
||
cfmCharFormat.crTextColor=rgbColor;
|
||
cfmCharFormat.dwMask = CFM_COLOR | CFM_FACE | CFM_SIZE;
|
||
cfmCharFormat.dwEffects = NULL;
|
||
strcpy( cfmCharFormat.szFaceName, LPCSTR( m_csFontType ) );
|
||
cfmCharFormat.yHeight = m_nFontSize;
|
||
SetSelectionCharFormat(cfmCharFormat);
|
||
|
||
//Inserts the text
|
||
ReplaceSel(csText,TRUE);
|
||
|
||
//Moves cursor after the text
|
||
SetSel(lFirstSelectedCharIndex+csText.GetLength(),lFirstSelectedCharIndex+csText.GetLength());
|
||
}
|
||
|
||
/**********************************************************************************/
|
||
void CPA_EdIR_EditCtrl::m_fn_vReplaceText(long lStartIndex,long lEndIndex,CString csText,COLORREF rgbColor)
|
||
{
|
||
//Selects text between lStartIndex position and lEndIndex position
|
||
SetSel(lStartIndex,lEndIndex);
|
||
|
||
//Changes text's color
|
||
CHARFORMAT cfmCharFormat;
|
||
GetSelectionCharFormat(cfmCharFormat);
|
||
cfmCharFormat.crTextColor=rgbColor;
|
||
cfmCharFormat.dwMask = CFM_COLOR | CFM_FACE | CFM_SIZE;
|
||
cfmCharFormat.dwEffects = NULL;
|
||
strcpy( cfmCharFormat.szFaceName, LPCSTR( m_csFontType ) );
|
||
cfmCharFormat.yHeight = m_nFontSize;
|
||
SetSelectionCharFormat(cfmCharFormat);
|
||
|
||
//Replaces the text
|
||
ReplaceSel(csText,TRUE);
|
||
|
||
//Moves cursor after the text
|
||
SetSel(lStartIndex+csText.GetLength(),lStartIndex+csText.GetLength());
|
||
}
|
||
|
||
/**********************************************************************************/
|
||
long CPA_EdIR_EditCtrl::m_fn_lGetCurrentCharIndex()
|
||
{
|
||
static long s_lOldCurrent=-1;
|
||
static long s_lOldStart=-1;
|
||
static long s_lOldEnd=-1;
|
||
|
||
long lStart;
|
||
long lEnd;
|
||
GetSel(lStart,lEnd);
|
||
|
||
if(s_lOldStart!=lStart || s_lOldEnd!=lEnd)
|
||
{
|
||
if(s_lOldStart==lStart)
|
||
s_lOldCurrent=lEnd;
|
||
else
|
||
s_lOldCurrent=lStart;
|
||
|
||
s_lOldStart=lStart;
|
||
s_lOldEnd=lEnd;
|
||
}
|
||
|
||
if(s_lOldCurrent>=GetTextLength())
|
||
return GetTextLength();
|
||
else
|
||
return s_lOldCurrent;
|
||
}
|
||
|
||
/**********************************************************************************/
|
||
long CPA_EdIR_EditCtrl::m_fn_lGetCurrentCharLine()
|
||
{
|
||
return LineFromChar(m_fn_lGetCurrentCharIndex());
|
||
}
|
||
|
||
/**********************************************************************************/
|
||
long CPA_EdIR_EditCtrl::m_fn_lGetCurrentCharCol()
|
||
{
|
||
long lCurrentCharIndex=m_fn_lGetCurrentCharIndex();
|
||
|
||
return lCurrentCharIndex-LineIndex(LineFromChar(lCurrentCharIndex));
|
||
}
|
||
|
||
/**********************************************************************************/
|
||
long CPA_EdIR_EditCtrl::m_fn_lGetCurrentCharLineLength()
|
||
{
|
||
return LineLength(m_fn_lGetCurrentCharIndex());
|
||
}
|
||
|
||
/**********************************************************************************/
|
||
CString CPA_EdIR_EditCtrl::m_fn_csGetWordBefore(long lIndex,long &lWordStartIndex,long &lWordEndIndex)
|
||
{
|
||
//Gets text
|
||
CString csText;
|
||
GetWindowText(csText);
|
||
|
||
//Gets word
|
||
lWordEndIndex=m_fn_lSkipLeftNonAlphaNumChar(csText,lIndex);
|
||
lWordStartIndex=m_fn_lSkipLeftAlphaNumChar(csText,lWordEndIndex);
|
||
|
||
return csText.Mid(lWordStartIndex,lWordEndIndex-lWordStartIndex);
|
||
}
|
||
|
||
/**********************************************************************************/
|
||
CString CPA_EdIR_EditCtrl::m_fn_csGetWordIn(long lIndex,long &lWordStartIndex,long &lWordEndIndex)
|
||
{
|
||
//Gets text
|
||
CString csText;
|
||
GetWindowText(csText);
|
||
|
||
//Gets word
|
||
lWordStartIndex=m_fn_lSkipLeftAlphaNumChar(csText,lIndex);
|
||
lWordEndIndex=m_fn_lSkipRightAlphaNumChar(csText,lIndex);
|
||
|
||
return csText.Mid(lWordStartIndex,lWordEndIndex-lWordStartIndex);
|
||
}
|
||
|
||
/**********************************************************************************/
|
||
CString CPA_EdIR_EditCtrl::m_fn_csGetWordAfter(long lIndex,long &lWordStartIndex,long &lWordEndIndex)
|
||
{
|
||
//Gets text
|
||
CString csText;
|
||
GetWindowText(csText);
|
||
|
||
//Gets word
|
||
lWordStartIndex=m_fn_lSkipRightNonAlphaNumChar(csText,lIndex);
|
||
lWordEndIndex=m_fn_lSkipRightAlphaNumChar(csText,lWordStartIndex);
|
||
|
||
return csText.Mid(lWordStartIndex,lWordEndIndex-lWordStartIndex);
|
||
}
|
||
|
||
/**********************************************************************************/
|
||
void CPA_EdIR_EditCtrl::m_fn_vUpdateColorText(long lLine,long lCol)
|
||
{
|
||
//Gets cursor's position
|
||
long lCurrentCharLine=lLine;
|
||
long lCurrentCharCol=lCol;
|
||
|
||
long lFirstCharInCurrentLineIndex=LineIndex(lCurrentCharLine);
|
||
long lCurrentCharIndex=lCol+lFirstCharInCurrentLineIndex;
|
||
|
||
//Gets text
|
||
CString csText;
|
||
GetWindowText(csText);
|
||
|
||
//Gets line length
|
||
long lCurrentLineLen=LineLength(lFirstCharInCurrentLineIndex);
|
||
|
||
//Cursor is between two word or not?
|
||
|
||
BOOL bTwoWords=TRUE;
|
||
if(lCurrentCharIndex>0 && lCurrentCharIndex<csText.GetLength())
|
||
{
|
||
if(M_ISALNUM(csText[int(lCurrentCharIndex-1)]) &&
|
||
M_ISALNUM(csText[int(lCurrentCharIndex)]))
|
||
bTwoWords=FALSE;
|
||
}
|
||
else
|
||
bTwoWords=FALSE;
|
||
|
||
if(bTwoWords)
|
||
{
|
||
//Gets left word
|
||
long lLeftWordStartIndex;
|
||
long lLeftWordEndIndex;
|
||
CString csLeftWord=m_fn_csGetWordBefore(lCurrentCharIndex,lLeftWordStartIndex,lLeftWordEndIndex);
|
||
|
||
if (!csLeftWord.CompareNoCase("define") && (csText[int(lLeftWordStartIndex-1)] == '#'))
|
||
{
|
||
lLeftWordStartIndex--;
|
||
csLeftWord = "#define";
|
||
}
|
||
|
||
//Colors left word
|
||
if(!m_fn_bIsInLineCommentedText(csText,lLeftWordStartIndex))
|
||
m_fn_vColorText(lLeftWordStartIndex,lLeftWordEndIndex,m_fn_rgbGetColor(csLeftWord));
|
||
|
||
if(lCurrentCharCol!=lCurrentLineLen)
|
||
{
|
||
//Gets right word
|
||
long lRightWordStartIndex;
|
||
long lRightWordEndIndex;
|
||
CString csRightWord=m_fn_csGetWordAfter(lCurrentCharIndex,lRightWordStartIndex,lRightWordEndIndex);
|
||
|
||
//Colors right word
|
||
if(!m_fn_bIsInLineCommentedText(csText,lRightWordStartIndex))
|
||
m_fn_vColorText(lRightWordStartIndex,lRightWordEndIndex,m_fn_rgbGetColor(csRightWord));
|
||
}
|
||
}
|
||
else
|
||
{
|
||
//Gets word
|
||
long lWordStartIndex;
|
||
long lWordEndIndex;
|
||
CString csWord;
|
||
if(lCurrentCharCol!=lCurrentLineLen)
|
||
csWord=m_fn_csGetWordIn(lCurrentCharIndex,lWordStartIndex,lWordEndIndex);
|
||
else
|
||
csWord=m_fn_csGetWordBefore(lCurrentCharIndex,lWordStartIndex,lWordEndIndex);
|
||
|
||
//Colors word
|
||
if(!m_fn_bIsInLineCommentedText(csText,lWordStartIndex))
|
||
m_fn_vColorText(lWordStartIndex,lWordEndIndex,m_fn_rgbGetColor(csWord));
|
||
}
|
||
}
|
||
|
||
/**********************************************************************************/
|
||
CString CPA_EdIR_EditCtrl::m_fn_csGetWordInAList(CStringList *p_clListString)
|
||
{
|
||
CPA_EdIR_ActCondBoxDlg dlg(p_clListString);
|
||
CString csString="";
|
||
|
||
if(dlg.DoModal()==IDOK)
|
||
csString=dlg.m_csSelectedString;
|
||
|
||
SetFocus();
|
||
|
||
return csString;
|
||
}
|
||
|
||
/**********************************************************************************/
|
||
void CPA_EdIR_EditCtrl::m_fn_vAddAction(long lIndex,COLORREF rgbColor)
|
||
{
|
||
CString csWord=m_fn_csGetWordInAList(&gm_clActionWords);
|
||
|
||
if(csWord!="")
|
||
m_fn_vOnAddString(lIndex,csWord);
|
||
}
|
||
|
||
/**********************************************************************************/
|
||
void CPA_EdIR_EditCtrl::m_fn_vAddCondition(long lIndex,COLORREF rgbColor)
|
||
{
|
||
CString csWord=m_fn_csGetWordInAList(&gm_clConditionWords);
|
||
|
||
if(csWord!="")
|
||
m_fn_vOnAddString(lIndex,csWord);
|
||
}
|
||
|
||
/**********************************************************************************/
|
||
void CPA_EdIR_EditCtrl::m_fn_vAddDesignerAction(long lIndex,COLORREF rgbColor)
|
||
{
|
||
CStringList cslDesignerActionList;
|
||
|
||
((CPA_EdIR_Frame *)GetParentFrame())->m_fn_vGetActionList(&cslDesignerActionList);
|
||
|
||
CString csWord=m_fn_csGetWordInAList(&cslDesignerActionList);
|
||
|
||
if(csWord!="")
|
||
m_fn_vOnAddString(lIndex,csWord);
|
||
}
|
||
|
||
/**********************************************************************************/
|
||
CString CPA_EdIR_EditCtrl::m_fn_csGetCompletedWord(CString csWord,CStringList *pclStringList)
|
||
{
|
||
CStringList *pclListString=m_fn_pclGetListMatchWord(csWord,pclStringList);
|
||
|
||
CString csCompleteWord;
|
||
|
||
switch(pclListString->GetCount())
|
||
{
|
||
case 1:
|
||
csCompleteWord=pclListString->GetHead();
|
||
break;
|
||
|
||
case 0:
|
||
csCompleteWord=csWord;
|
||
break;
|
||
|
||
default:
|
||
csCompleteWord=m_fn_csGetWordInAList(pclListString);
|
||
break;
|
||
}
|
||
|
||
delete pclListString;
|
||
|
||
return csCompleteWord;
|
||
}
|
||
|
||
/**********************************************************************************/
|
||
CString CPA_EdIR_EditCtrl::m_fn_csGetCompletedWord(CString csWord)
|
||
{
|
||
//Gets IA Objects
|
||
CStringList *pclIAObjects=fn_pclGetListIAObjects();
|
||
|
||
//Adds knownwords
|
||
POSITION pos=gm_clKnownWords.GetHeadPosition();
|
||
while(pos!=NULL)
|
||
pclIAObjects->AddTail(gm_clKnownWords.GetNext(pos));
|
||
|
||
//Gets complete word
|
||
CString csCompleteWord=m_fn_csGetCompletedWord(csWord,pclIAObjects);
|
||
|
||
delete pclIAObjects;
|
||
|
||
return csCompleteWord;
|
||
}
|
||
|
||
/**********************************************************************************/
|
||
void CPA_EdIR_EditCtrl::m_fn_vCompleteWord(long lLine,long lCol)
|
||
{
|
||
//Gets char index
|
||
long lFirstCharInLineIndex=LineIndex(lLine);
|
||
long lCharIndex=lCol+lFirstCharInLineIndex;
|
||
|
||
//Gets text
|
||
CString csText;
|
||
GetWindowText(csText);
|
||
|
||
//Cursor is inside a word?
|
||
BOOL bInsideAWord=(lCharIndex!=0) &&
|
||
(lCharIndex!=csText.GetLength()) &&
|
||
(M_ISALNUM(csText[int(lCharIndex-1)])) &&
|
||
(M_ISALNUM(csText[int(lCharIndex)]));
|
||
|
||
//Gets word
|
||
long lWordStartIndex;
|
||
long lWordEndIndex;
|
||
CString csWord;
|
||
if(bInsideAWord)
|
||
csWord=m_fn_csGetWordIn(lCharIndex,lWordStartIndex,lWordEndIndex);
|
||
else
|
||
{
|
||
if(lCharIndex!=0)
|
||
csWord=m_fn_csGetWordBefore(lCharIndex,lWordStartIndex,lWordEndIndex);
|
||
else
|
||
csWord=m_fn_csGetWordAfter(lCharIndex,lWordStartIndex,lWordEndIndex);
|
||
}
|
||
|
||
//Adds an action/condition word
|
||
if(m_fn_bIsAKeyWord(csWord) && !bInsideAWord && lCharIndex!=0)
|
||
{
|
||
COLORREF rgbWordColor=C_COMMENTCOLOR;
|
||
|
||
if(csWord.CompareNoCase(M_TRANSLATE_KEYWORD_SCRIPT_TO_EDITOR("If"))==0)
|
||
{
|
||
if(!m_fn_bIsInLineCommentedText(csText,lCharIndex))
|
||
rgbWordColor=C_CONDITIONWORDCOLOR;
|
||
|
||
m_fn_vAddCondition(lCharIndex,rgbWordColor);
|
||
}
|
||
else
|
||
if((csWord.CompareNoCase(M_TRANSLATE_KEYWORD_SCRIPT_TO_EDITOR("Then"))==0) ||
|
||
(csWord.CompareNoCase(M_TRANSLATE_KEYWORD_SCRIPT_TO_EDITOR("Else"))==0))
|
||
{
|
||
if(!m_fn_bIsInLineCommentedText(csText,lCharIndex))
|
||
rgbWordColor=C_ACTIONWORDCOLOR;
|
||
|
||
m_fn_vAddAction(lCharIndex,rgbWordColor);
|
||
}
|
||
else
|
||
{
|
||
/*
|
||
//Cursor is not inside a word
|
||
//Is there any space (or point comma .. non alnum char) between the previous word and the cursor
|
||
if(lCharIndex>lWordEndIndex)
|
||
{
|
||
//Gets a new word
|
||
CString csCompleteWord=m_fn_csGetCompletedWord("");
|
||
|
||
m_fn_vOnAddString(lCharIndex,csCompleteWord);
|
||
}
|
||
*/
|
||
// don't try to complete an empty word
|
||
;
|
||
//else nothing !! (csWord is a KeyWord so it's a complete word)
|
||
}
|
||
}
|
||
else
|
||
{
|
||
//Cursor is not at the beginnig
|
||
if(lCharIndex!=0)
|
||
{
|
||
/*
|
||
//Is there any space (or point comma .. non alnum char) between the previous word and the cursor
|
||
if(lCharIndex>lWordEndIndex)
|
||
{
|
||
//Gets a new word
|
||
CString csCompleteWord=m_fn_csGetCompletedWord("");
|
||
|
||
m_fn_vOnAddString(lCharIndex,csCompleteWord);
|
||
}
|
||
else
|
||
*/
|
||
// don't try to complete an empty word
|
||
if(lCharIndex<=lWordEndIndex)
|
||
{
|
||
//Gets the complete word
|
||
CString csCompleteWord=m_fn_csGetCompletedWord(csWord);
|
||
|
||
if(csWord!=csCompleteWord)
|
||
{
|
||
CString csWordToAdd=csCompleteWord.Right(csCompleteWord.GetLength()-csWord.GetLength());
|
||
m_fn_vOnAddString(lWordStartIndex+csWord.GetLength(),csWordToAdd);
|
||
}
|
||
}
|
||
}
|
||
else
|
||
//Cursor is at the beginning
|
||
{
|
||
//Gets the complete word
|
||
CString csCompleteWord=m_fn_csGetCompletedWord(csWord);
|
||
|
||
if(csWord!=csCompleteWord)
|
||
{
|
||
CString csWordToAdd=csCompleteWord.Right(csCompleteWord.GetLength()-csWord.GetLength());
|
||
m_fn_vOnAddString(lWordStartIndex+csWord.GetLength(),csWordToAdd);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
/**********************************************************************************/
|
||
void CPA_EdIR_EditCtrl::m_fn_vDisplayIAObjectsAndCompleteWord(long lLine,long lCol)
|
||
{
|
||
//Gets Type
|
||
CStringList *pclIAObjectsType=fn_pclGetListIATypeObjects();
|
||
|
||
CString csType=m_fn_csGetWordInAList(pclIAObjectsType);
|
||
|
||
delete pclIAObjectsType;
|
||
|
||
if(!csType.IsEmpty())
|
||
{
|
||
//Gets all objects with this type
|
||
CStringList *pclIAObjects=fn_pclGetListIAObjects(csType);
|
||
|
||
//Gets char index
|
||
long lFirstCharInLineIndex=LineIndex(lLine);
|
||
long lCharIndex=lCol+lFirstCharInLineIndex;
|
||
|
||
//Gets text
|
||
CString csText;
|
||
GetWindowText(csText);
|
||
|
||
//Cursor is inside a word?
|
||
BOOL bInsideAWord=(lCharIndex!=0) &&
|
||
(lCharIndex!=csText.GetLength()) &&
|
||
(M_ISALNUM(csText[int(lCharIndex-1)])) &&
|
||
(M_ISALNUM(csText[int(lCharIndex)]));
|
||
|
||
//Gets word
|
||
long lWordStartIndex;
|
||
long lWordEndIndex;
|
||
CString csWord;
|
||
if(bInsideAWord)
|
||
csWord=m_fn_csGetWordIn(lCharIndex,lWordStartIndex,lWordEndIndex);
|
||
else
|
||
{
|
||
if(lCharIndex!=0)
|
||
csWord=m_fn_csGetWordBefore(lCharIndex,lWordStartIndex,lWordEndIndex);
|
||
else
|
||
csWord=m_fn_csGetWordAfter(lCharIndex,lWordStartIndex,lWordEndIndex);
|
||
}
|
||
|
||
//Cursor is not at the beginnig
|
||
if(lCharIndex!=0)
|
||
{
|
||
//Is there any space (or point comma .. non alnum char) between the previous word and the cursor
|
||
if(lCharIndex>lWordEndIndex)
|
||
{
|
||
//Gets a new word
|
||
CString csCompleteWord=m_fn_csGetCompletedWord("",pclIAObjects);
|
||
|
||
m_fn_vOnAddString(lCharIndex,csCompleteWord);
|
||
}
|
||
else
|
||
{
|
||
//Gets the complete word
|
||
CString csCompleteWord=m_fn_csGetCompletedWord(csWord,pclIAObjects);
|
||
|
||
if(csWord!=csCompleteWord)
|
||
{
|
||
CString csWordToAdd=csCompleteWord.Right(csCompleteWord.GetLength()-csWord.GetLength());
|
||
m_fn_vOnAddString(lWordStartIndex+csWord.GetLength(),csWordToAdd);
|
||
}
|
||
}
|
||
}
|
||
else
|
||
//Cursor is at the beginning
|
||
{
|
||
//Gets the complete word
|
||
CString csCompleteWord=m_fn_csGetCompletedWord(csWord,pclIAObjects);
|
||
|
||
if(csWord!=csCompleteWord)
|
||
{
|
||
CString csWordToAdd=csCompleteWord.Right(csCompleteWord.GetLength()-csWord.GetLength());
|
||
m_fn_vOnAddString(lWordStartIndex+csWord.GetLength(),csWordToAdd);
|
||
}
|
||
}
|
||
|
||
delete pclIAObjects;
|
||
}
|
||
}
|
||
|
||
/**********************************************************************************/
|
||
void CPA_EdIR_EditCtrl::m_fn_vSetText(CString csText)
|
||
{
|
||
SetWindowText(csText);
|
||
SetSel(0, 0);
|
||
}
|
||
|
||
|
||
/**********************************************************************************/
|
||
CString CPA_EdIR_EditCtrl::m_fn_csGetText()
|
||
{
|
||
CString csText;
|
||
GetWindowText(csText);
|
||
return csText;
|
||
}
|
||
|
||
/**********************************************************************************/
|
||
void CPA_EdIR_EditCtrl::m_fn_vSetCursorPos(long lIndex)
|
||
{
|
||
SetSel(lIndex,lIndex);
|
||
m_lOldScrollPosition = GetScrollPosition().y;
|
||
}
|
||
|
||
/**********************************************************************************/
|
||
|
||
void CPA_EdIR_EditCtrl::m_fn_vSetCursorPos(long lIndex,long lScrollPosition, long lScrollPositionH, BOOL bScroll)
|
||
{
|
||
//Sets the cursor position
|
||
SetSel(lIndex,lIndex);
|
||
|
||
CPoint clActScroll = GetScrollPosition();
|
||
|
||
if( bScroll )
|
||
if( lScrollPositionH >= 0 )
|
||
ScrollToPosition(CPoint(lScrollPositionH,lScrollPosition));
|
||
else
|
||
ScrollToPosition(CPoint(clActScroll.x,lScrollPosition));
|
||
}
|
||
|
||
/**********************************************************************************/
|
||
long CPA_EdIR_EditCtrl::m_fn_lGetLineNumberInPixel(long lIndex)
|
||
{
|
||
return ( ( GetCharPos( LineIndex( LineFromChar(lIndex) ) ) ).y );
|
||
}
|
||
|
||
/**********************************************************************************/
|
||
BOOL CPA_EdIR_EditCtrl::m_fn_bIsInLineCommentedText(long lIndex)
|
||
{
|
||
CString csText;
|
||
GetWindowText(csText);
|
||
return m_fn_bIsInLineCommentedText(csText, lIndex);
|
||
}
|
||
|
||
BOOL CPA_EdIR_EditCtrl::m_fn_bIsInLineCommentedText(CString &csText,long lIndex)
|
||
{
|
||
long lSemiColonIndex = lIndex - 1;
|
||
LPCSTR lpsz = (LPCSTR) csText;
|
||
while((lSemiColonIndex >= 0) && (lpsz[lSemiColonIndex] != ';') && (lpsz[lSemiColonIndex] != '\r'))
|
||
lSemiColonIndex--;
|
||
if(lpsz[lSemiColonIndex] == ';')
|
||
return TRUE;
|
||
return FALSE;
|
||
}
|
||
|
||
/**********************************************************************************/
|
||
void CPA_EdIR_EditCtrl::m_fn_vProcessLineCommentInsertion(long lInsertionIndex)
|
||
{
|
||
if(!m_fn_bIsInLineCommentedText(lInsertionIndex))
|
||
{
|
||
long lLineLen=LineLength(lInsertionIndex);
|
||
long lStartLineIndex=LineIndex(LineFromChar(lInsertionIndex));
|
||
m_fn_vColorText(lInsertionIndex,lStartLineIndex+lLineLen,C_COMMENTCOLOR);
|
||
}
|
||
}
|
||
|
||
/**********************************************************************************/
|
||
void CPA_EdIR_EditCtrl::m_fn_vProcessLineCommentDeletion(long lDeletionIndex)
|
||
{
|
||
if(!m_fn_bIsInLineCommentedText(lDeletionIndex))
|
||
{
|
||
long lLineCommentIndex=m_fn_lFindCharInLine(lDeletionIndex,';');
|
||
|
||
if(lLineCommentIndex!=-1)
|
||
m_fn_vColorText(lDeletionIndex,lLineCommentIndex);
|
||
else
|
||
{
|
||
long lLineLen=LineLength(lDeletionIndex);
|
||
long lStartLineIndex=LineIndex(LineFromChar(lDeletionIndex));
|
||
m_fn_vColorText(lDeletionIndex,lStartLineIndex+lLineLen);
|
||
}
|
||
}
|
||
}
|
||
|
||
/**********************************************************************************/
|
||
long CPA_EdIR_EditCtrl::m_fn_lFind(long lStartIndex,char cLookedFor)
|
||
{
|
||
//Gets text
|
||
CString csText;
|
||
GetWindowText(csText);
|
||
|
||
CString csSearchInText=csText.Right(csText.GetLength()-lStartIndex);
|
||
|
||
//Looks for char
|
||
long lIndex=csSearchInText.Find(cLookedFor);
|
||
|
||
if(lIndex!=-1)
|
||
return lStartIndex+lIndex;
|
||
else
|
||
return -1;
|
||
}
|
||
|
||
/**********************************************************************************/
|
||
long CPA_EdIR_EditCtrl::m_fn_lReverseFind(long lEndIndex,char cLookedFor)
|
||
{
|
||
//Gets text
|
||
CString csText;
|
||
GetWindowText(csText);
|
||
|
||
CString csSearchInText=csText.Left(lEndIndex);
|
||
|
||
//Looks for char
|
||
long lIndex=csSearchInText.ReverseFind(cLookedFor);
|
||
|
||
return lIndex;
|
||
}
|
||
|
||
/**********************************************************************************/
|
||
long CPA_EdIR_EditCtrl::m_fn_lFindCharInLine(long lStartIndex,char cLookedFor)
|
||
{
|
||
//Gets text
|
||
CString csText;
|
||
long lColIndex=lStartIndex-LineIndex(LineFromChar(lStartIndex));
|
||
GetWindowText(csText);
|
||
|
||
CString csSearchInText=csText.Mid(lStartIndex,LineLength(lStartIndex)-lColIndex+1);
|
||
|
||
//Looks for char
|
||
long lIndex=csSearchInText.Find(cLookedFor);
|
||
|
||
if(lIndex!=-1)
|
||
return lStartIndex+lIndex;
|
||
else
|
||
return -1;
|
||
}
|
||
|
||
/**********************************************************************************/
|
||
BOOL CPA_EdIR_EditCtrl::OnHelpInfo(HELPINFO* pHelpInfo)
|
||
{
|
||
long lStartIndex;
|
||
long lEndIndex;
|
||
CString csKeyWord;
|
||
|
||
csKeyWord=m_fn_csGetWordIn(m_fn_lGetCurrentCharIndex(),lStartIndex,lEndIndex);
|
||
if(csKeyWord.IsEmpty())
|
||
{
|
||
csKeyWord=m_fn_csGetWordAfter(m_fn_lGetCurrentCharIndex(),lStartIndex,lEndIndex);
|
||
if(csKeyWord.IsEmpty())
|
||
csKeyWord=m_fn_csGetWordBefore(m_fn_lGetCurrentCharIndex(),lStartIndex,lEndIndex);
|
||
}
|
||
|
||
if(m_fn_bIsAKnownWord(csKeyWord))
|
||
::WinHelp(m_hWnd,g_pclAIInterface->m_csBrainHelpFileNameAndPath,HELP_KEY,(unsigned long)LPCTSTR(csKeyWord));
|
||
else
|
||
::WinHelp(m_hWnd,g_pclAIInterface->m_csBrainHelpFileNameAndPath,HELP_CONTEXT,HID_RULES_ZONE);
|
||
|
||
return FALSE;
|
||
}
|
||
|
||
/**********************************************************************************/
|
||
void CPA_EdIR_EditCtrl::m_fn_vOnChar(long lIndex,UINT nChar)
|
||
{
|
||
CPA_EdIR_UndoPressAKey *pclUndoPressAKey;
|
||
|
||
CPoint clScrollPos=GetScrollPosition();
|
||
|
||
pclUndoPressAKey=new CPA_EdIR_UndoPressAKey(this,nChar,lIndex,clScrollPos.y);
|
||
|
||
m_clEditManager.AskFor(pclUndoPressAKey);
|
||
}
|
||
|
||
/**********************************************************************************/
|
||
void CPA_EdIR_EditCtrl::m_fn_vAddChar(long lIndex,long lScrollPosition,UINT nChar)
|
||
{
|
||
if(!((CPA_EdIR_View *)GetParent())->m_bIsReadOnly)
|
||
{
|
||
m_fn_vReplaceText(lIndex,lIndex,CString((char)nChar),C_DEFAULTCOLOR);
|
||
|
||
if(nChar==';')
|
||
m_fn_vProcessLineCommentInsertion(lIndex);
|
||
|
||
long lCharLine=LineFromChar(lIndex);
|
||
long lCharCol=lIndex-LineIndex(lCharLine);
|
||
if(m_fn_bIsInLineCommentedText(lIndex))
|
||
m_fn_vColorText(lIndex,lIndex+1,C_COMMENTCOLOR);
|
||
else
|
||
m_fn_vColorText(lIndex,lIndex+1,C_DEFAULTCOLOR);
|
||
|
||
m_fn_vUpdateColorText(lCharLine,lCharCol);
|
||
|
||
//Sets cursor position
|
||
m_fn_vSetCursorPos(lIndex+1,lScrollPosition);
|
||
}
|
||
}
|
||
|
||
/**********************************************************************************/
|
||
void CPA_EdIR_EditCtrl::m_fn_vDelChar(long lIndex,long lScrollPosition,UINT nChar)
|
||
{
|
||
if(!((CPA_EdIR_View *)GetParent())->m_bIsReadOnly)
|
||
{
|
||
m_fn_vReplaceText(lIndex,lIndex+1,"",C_DEFAULTCOLOR);
|
||
|
||
if(nChar==';')
|
||
m_fn_vProcessLineCommentDeletion(lIndex);
|
||
|
||
long lCharLine=LineFromChar(lIndex);
|
||
long lCharCol=lIndex-LineIndex(lCharLine);
|
||
m_fn_vUpdateColorText(lCharLine,lCharCol);
|
||
|
||
//Sets cursor position
|
||
m_fn_vSetCursorPos(lIndex,lScrollPosition);
|
||
}
|
||
}
|
||
|
||
/**********************************************************************************/
|
||
void CPA_EdIR_EditCtrl::m_fn_vOnAddString(long lIndex,CString csString)
|
||
{
|
||
CPA_EdIR_UndoPaste *pclUndoPaste;
|
||
|
||
CPoint clScrollPos = GetScrollPosition();
|
||
|
||
pclUndoPaste=new CPA_EdIR_UndoPaste(this,csString,lIndex,clScrollPos.y);
|
||
|
||
m_clEditManager.AskFor(pclUndoPaste);
|
||
}
|
||
|
||
/**********************************************************************************/
|
||
void CPA_EdIR_EditCtrl::m_fn_vOnDelString(long lIndex,CString csString,UINT nDeletionType,BOOL bSelected)
|
||
{
|
||
CPA_EdIR_UndoDelete *pclUndoDelete;
|
||
|
||
CPoint clScrollPos=GetScrollPosition();
|
||
|
||
//Gets current position
|
||
long lCurrentIndex=lIndex;
|
||
|
||
if(nDeletionType==C_BACKSPACE && !bSelected)
|
||
lCurrentIndex-=csString.GetLength();
|
||
|
||
pclUndoDelete=new CPA_EdIR_UndoDelete(this,csString,lCurrentIndex,clScrollPos.y);
|
||
|
||
m_clEditManager.AskFor(pclUndoDelete);
|
||
}
|
||
|
||
/**********************************************************************************/
|
||
void CPA_EdIR_EditCtrl::m_fn_vAddString(long lIndex,long lScrollPosition,CString csString)
|
||
{
|
||
if(!((CPA_EdIR_View *)GetParent())->m_bIsReadOnly)
|
||
{
|
||
m_fn_vReplaceText(lIndex,lIndex,csString,C_DEFAULTCOLOR);
|
||
|
||
if(!m_fn_bIsInLineCommentedText(lIndex))
|
||
{
|
||
long lLineLen=LineLength(lIndex+csString.GetLength());
|
||
long lStartLineIndex=LineIndex(LineFromChar(lIndex+csString.GetLength()));
|
||
m_fn_vColorText(lIndex,lStartLineIndex+lLineLen);
|
||
}
|
||
else
|
||
{
|
||
m_fn_vColorText(lIndex,lIndex+csString.GetLength(),C_COMMENTCOLOR);
|
||
|
||
if(csString.Find(C_RETURN)!=-1)
|
||
{
|
||
long lFirstEndLineIndex=m_fn_lReverseFind(lIndex+csString.GetLength(),CString(C_RETURN)[1]);
|
||
long lSecondEndLineIndex=m_fn_lFind(lFirstEndLineIndex+1,CString(C_RETURN)[1]);
|
||
m_fn_vColorText(lFirstEndLineIndex,lSecondEndLineIndex);
|
||
}
|
||
}
|
||
|
||
long lCharLine=LineFromChar(lIndex);
|
||
long lCharCol=lIndex-LineIndex(lCharLine);
|
||
m_fn_vUpdateColorText(lCharLine,lCharCol);
|
||
|
||
//Sets cursor position
|
||
m_fn_vSetCursorPos(lIndex+csString.GetLength(),lScrollPosition);
|
||
}
|
||
}
|
||
|
||
/**********************************************************************************/
|
||
void CPA_EdIR_EditCtrl::m_fn_vDelString(long lIndex,long lScrollPosition,CString csString)
|
||
{
|
||
if(!((CPA_EdIR_View *)GetParent())->m_bIsReadOnly)
|
||
{
|
||
m_fn_vReplaceText(lIndex,lIndex+csString.GetLength(),"",C_DEFAULTCOLOR);
|
||
|
||
if(csString.Find(';')!=-1)
|
||
m_fn_vProcessLineCommentDeletion(lIndex);
|
||
|
||
long lCharLine=LineFromChar(lIndex);
|
||
long lCharCol=lIndex-LineIndex(lCharLine);
|
||
m_fn_vUpdateColorText(lCharLine,lCharCol);
|
||
|
||
if(csString.Find(C_RETURN)!=-1 && m_fn_bIsInLineCommentedText(lIndex))
|
||
{
|
||
long lStartLineIndex=LineIndex(LineFromChar(lIndex));
|
||
long lEndLineIndex=m_fn_lFind(lIndex,CString(C_RETURN)[1]);
|
||
|
||
m_fn_vColorText(lIndex,lEndLineIndex,C_COMMENTCOLOR);
|
||
}
|
||
|
||
//Sets cursor position
|
||
m_fn_vSetCursorPos(lIndex,lScrollPosition);
|
||
}
|
||
}
|
||
|
||
/**********************************************************************************/
|
||
BOOL CPA_EdIR_EditCtrl::m_fn_bHasBeenModified()
|
||
{
|
||
return m_bHasBeenModified;
|
||
}
|
||
|
||
/**********************************************************************************/
|
||
void CPA_EdIR_EditCtrl::m_fn_vSetModified(BOOL bModified)
|
||
{
|
||
if(bModified)
|
||
{
|
||
//Notifications
|
||
CPA_DLLBase *pclActorDLL=(CPA_DLLBase*)(g_pclAIInterface->GetMainWorld()->GetObjectDLLWithName(C_szDLLActorName));
|
||
CPA_Actor *pclSelectedActor=(CPA_Actor *)pclActorDLL->OnQueryAction(g_pclAIInterface,C_uiActor_GetSelectedActor,0);
|
||
if(pclSelectedActor)
|
||
{
|
||
if(pclSelectedActor->m_fn_bIsAnInstance())
|
||
pclSelectedActor=pclSelectedActor->m_fn_pclGetModel();
|
||
CPA_EdIR_Brain *pclBrain=((EdActors_EditorActorModel *)pclSelectedActor->m_fn_pclGetEditorActor())->m_pclBrain;
|
||
pclBrain->m_fn_vNotify();
|
||
}
|
||
}
|
||
|
||
m_bHasBeenModified=bModified;
|
||
}
|
||
|
||
long CPA_EdIR_EditCtrl::m_fn_lFindString(BOOL bCaseSensitive , long lStartIndex,CString scString)
|
||
{
|
||
CString csText;
|
||
GetWindowText(csText);
|
||
|
||
CString csSearchInText=csText.Right(csText.GetLength()-lStartIndex);
|
||
long l_Size = scString.GetLength();
|
||
|
||
//Looks for string
|
||
long lIndex=FindString(bCaseSensitive , csSearchInText ,scString);
|
||
|
||
if(lIndex!=-1)
|
||
{
|
||
if (m_fnGetSelectAString())
|
||
{
|
||
m_fn_vColorText( m_lFirstSelectIndex,m_lLastSelectIndex,col_last);
|
||
long lCharLine=LineFromChar(m_lFirstSelectIndex);
|
||
long lCharCol=m_lFirstSelectIndex-LineIndex(lCharLine);
|
||
|
||
m_fn_vUpdateColorText(lCharLine,lCharCol);
|
||
RestoreCol();
|
||
}
|
||
col_last = m_fn_rgbGetColor(scString);
|
||
m_lFirstSelectIndex = lStartIndex+lIndex ;
|
||
m_lLastSelectIndex = lStartIndex+lIndex+l_Size;
|
||
m_fnSetSelectAString(TRUE);
|
||
|
||
COLORREF col_selected=RGB( 255, 0, 255);
|
||
m_fn_vColorText( lStartIndex+lIndex ,lStartIndex+lIndex+l_Size,col_selected);
|
||
|
||
long lIndex1=FindString(bCaseSensitive ,csSearchInText , scString);
|
||
if (lIndex1==-1)
|
||
m_fnSetSelectAString(FALSE);
|
||
|
||
return lStartIndex+lIndex;
|
||
|
||
}
|
||
else
|
||
{
|
||
if (m_fnGetSelectAString())
|
||
{
|
||
m_fn_vColorText( m_lFirstSelectIndex,m_lLastSelectIndex,col_last);
|
||
long lCharLine=LineFromChar(m_lFirstSelectIndex);
|
||
long lCharCol=m_lFirstSelectIndex-LineIndex(lCharLine);
|
||
|
||
m_fn_vUpdateColorText(lCharLine,lCharCol);
|
||
RestoreCol();
|
||
m_fnSetSelectAString(FALSE);
|
||
return -1;
|
||
}
|
||
else
|
||
{
|
||
m_bSearchIsFinished=TRUE;
|
||
return -1;
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
void CPA_EdIR_EditCtrl::m_fn_ReplaceString(long lIndex, CString scString1, CString scString2)
|
||
{
|
||
m_fn_vOnDelString( lIndex, scString1, 8 , 0);
|
||
m_fn_vOnAddString( lIndex-scString1.GetLength(), scString2);
|
||
|
||
}
|
||
|
||
void CPA_EdIR_EditCtrl::m_fn_ReplaceAllString(BOOL bCaseSensitive , long lIndex, CString scString1, CString scString2)
|
||
{
|
||
long l_Size1 = scString1.GetLength();
|
||
long l_Size2 = scString2.GetLength();
|
||
CString csText;
|
||
GetWindowText(csText);
|
||
long l_size = csText.GetLength();
|
||
long lPos = lIndex;
|
||
if (m_fn_lFindString(bCaseSensitive,lIndex, scString1 )==-1)
|
||
{
|
||
m_bSearchIsFinished = TRUE;
|
||
}
|
||
else
|
||
{
|
||
long posModif = m_fn_lFindString(bCaseSensitive ,lPos , scString1);
|
||
|
||
while (lPos<l_size)
|
||
{
|
||
|
||
if (posModif>=0 )
|
||
{
|
||
m_fn_ReplaceString( m_lLastSelectIndex, scString1 , scString2);
|
||
posModif = m_fn_lFindString( bCaseSensitive , m_lLastSelectIndex, scString1 );
|
||
lPos=posModif+1;
|
||
l_size+=l_Size2-l_Size1;
|
||
|
||
}
|
||
else
|
||
lPos = l_size;
|
||
}
|
||
}
|
||
}
|
||
|
||
void CPA_EdIR_EditCtrl::OnLButtonDblClk(UINT nFlags, CPoint point)
|
||
{
|
||
long lWordStartIndex , lWordEndIndex;
|
||
long index = m_fn_lGetCurrentCharIndex();
|
||
m_fn_csGetWordIn( index, lWordStartIndex, lWordEndIndex);
|
||
SetSel(lWordStartIndex , lWordEndIndex);
|
||
}
|
||
|
||
long CPA_EdIR_EditCtrl::FindString(BOOL bCaseSensitive , CString cs_StringSource , CString cs_StringToFind)
|
||
{
|
||
long lIndex ;
|
||
long lWordStartIndex, lWordEndIndex;
|
||
long lLength = cs_StringSource.GetLength();
|
||
long lLengthToFind = cs_StringToFind.GetLength();
|
||
lWordStartIndex=m_fn_lSkipRightNonAlphaNumChar(cs_StringSource,0);
|
||
lWordEndIndex=m_fn_lSkipRightAlphaNumChar(cs_StringSource,lWordStartIndex+1);
|
||
|
||
if (!bCaseSensitive)
|
||
{
|
||
CString cs_StringSourceLow = cs_StringSource ;
|
||
cs_StringSourceLow.MakeLower();
|
||
CString cs_StringToFindLow = cs_StringToFind ;
|
||
cs_StringToFindLow.MakeLower();
|
||
lIndex = cs_StringSourceLow.Find(cs_StringToFindLow);
|
||
return lIndex;
|
||
}
|
||
else
|
||
{
|
||
lIndex = cs_StringSource.Find(cs_StringToFind);
|
||
return lIndex;
|
||
}
|
||
}
|
||
|
||
|
||
void CPA_EdIR_EditCtrl::RestoreCol()
|
||
{
|
||
// m_fn_vColorText( m_lFirstSelectIndex,m_lLastSelectIndex,col_last);
|
||
long lCharLine=LineFromChar(m_lFirstSelectIndex);
|
||
long lCharCol=m_lFirstSelectIndex-LineIndex(lCharLine);
|
||
if(m_fn_bIsInLineCommentedText(m_lFirstSelectIndex))
|
||
m_fn_vColorText(m_lFirstSelectIndex,m_lLastSelectIndex,C_COMMENTCOLOR);
|
||
else
|
||
m_fn_vColorText(m_lFirstSelectIndex,m_lLastSelectIndex,C_DEFAULTCOLOR);
|
||
|
||
m_fn_vUpdateColorText(lCharLine,lCharCol);
|
||
|
||
m_fnSetSelectAString(FALSE);
|
||
|
||
}
|
||
|
||
void CPA_EdIR_EditCtrl::OnRButtonDown(UINT nFlags,CPoint point)
|
||
{
|
||
CString word;
|
||
long first , last;
|
||
|
||
SendMessage(WM_LBUTTONDOWN, nFlags, MAKELPARAM(point.x, point.y));
|
||
word = m_fn_csGetWordIn(m_fn_lGetCurrentCharIndex(),first , last);
|
||
|
||
CRect clRect;
|
||
GetWindowRect(&clRect);
|
||
|
||
CMenu Menu;
|
||
Menu.LoadMenu(IDR_IR_MENU_POPUP_RULES);
|
||
|
||
CMenu *SousMenu=Menu.GetSubMenu(0);
|
||
|
||
CPA_DLLBase *pclActorDLL=(CPA_DLLBase*)(g_pclAIInterface->GetMainWorld()->GetObjectDLLWithName(C_szDLLActorName));
|
||
CPA_Actor *pclSelectedActor=(CPA_Actor *)pclActorDLL->OnQueryAction(g_pclAIInterface,C_uiActor_GetSelectedActor,0);
|
||
if(pclSelectedActor)
|
||
{
|
||
CTL_Editor_DataList *m_pclListOfDesignerVariableType = pclSelectedActor->m_fn_pclGetEditorActor()->m_pclListOfDesignerVariableType;
|
||
CTL_Editor_Data *pclData = (CTL_Editor_Data *)m_pclListOfDesignerVariableType->m_fn_pclGetDataFromName(word);
|
||
if(pclData /*&& MessageBox(word, "Add to Watch Window", MB_OK)*/)
|
||
{
|
||
SousMenu->EnableMenuItem(ID_IR_RULES_ADDWATCH, MF_ENABLED);
|
||
}
|
||
}
|
||
|
||
long l_id = fn_lGetProcedureIdFromEditorName(word);
|
||
CString cs_Params = fn_csGetProcedureParams(l_id);
|
||
|
||
if( !cs_Params.IsEmpty() )
|
||
{
|
||
SousMenu->EnableMenuItem( 4, MF_BYPOSITION );
|
||
CMenu *SousSousMenu = SousMenu->GetSubMenu(4);
|
||
|
||
SousSousMenu->RemoveMenu( 0, MF_BYPOSITION );
|
||
for( int i = 0; i < cs_Params.GetLength(); i++ )
|
||
SousSousMenu->AppendMenu( MF_STRING, 0, fn_csGetParamTypeInEnglish( cs_Params[i] ) );
|
||
}
|
||
|
||
SousMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,clRect.left+point.x,clRect.top+point.y,this);
|
||
SousMenu->DestroyMenu();
|
||
Menu.DestroyMenu();
|
||
}
|
||
|
||
|
||
void CPA_EdIR_EditCtrl::m_fn_vDisplayIAObjectsAndCompleteWordNew( long lLine, long lCol )
|
||
{
|
||
//Gets char index
|
||
long lFirstCharInLineIndex=LineIndex(lLine);
|
||
long lCharIndex=lCol+lFirstCharInLineIndex;
|
||
|
||
//Gets text
|
||
CString csText;
|
||
GetWindowText(csText);
|
||
|
||
//Cursor is inside a word?
|
||
BOOL bInsideAWord=(lCharIndex!=0) && (lCharIndex!=csText.GetLength()) &&
|
||
(M_ISALNUM(csText[int(lCharIndex-1)])) &&
|
||
(M_ISALNUM(csText[int(lCharIndex)]));
|
||
|
||
//Gets word
|
||
long lWordStartIndex;
|
||
long lWordEndIndex;
|
||
CString csWord;
|
||
if(bInsideAWord)
|
||
csWord=m_fn_csGetWordIn(lCharIndex,lWordStartIndex,lWordEndIndex);
|
||
else
|
||
{
|
||
if(lCharIndex!=0)
|
||
csWord=m_fn_csGetWordBefore(lCharIndex,lWordStartIndex,lWordEndIndex);
|
||
else
|
||
csWord=m_fn_csGetWordAfter(lCharIndex,lWordStartIndex,lWordEndIndex);
|
||
}
|
||
|
||
//Cursor is not at the beginnig
|
||
if(lCharIndex!=0)
|
||
{
|
||
//Is there any space (or point comma .. non alnum char) between the previous word and the cursor
|
||
if(lCharIndex>lWordEndIndex)
|
||
{
|
||
//Gets a new word
|
||
CString csCompleteWord=m_fn_csGetCompletedWordNew("");
|
||
m_fn_vOnAddString(lCharIndex,csCompleteWord);
|
||
}
|
||
else
|
||
{
|
||
//Gets the complete word
|
||
CString csCompleteWord=m_fn_csGetCompletedWordNew(csWord);
|
||
|
||
if(csWord!=csCompleteWord)
|
||
{
|
||
CString csWordToAdd=csCompleteWord.Right(csCompleteWord.GetLength()-csWord.GetLength());
|
||
m_fn_vOnAddString(lWordStartIndex+csWord.GetLength(),csWordToAdd);
|
||
}
|
||
}
|
||
}
|
||
else
|
||
//Cursor is at the beginning
|
||
{
|
||
//Gets the complete word
|
||
CString csCompleteWord=m_fn_csGetCompletedWordNew(csWord);
|
||
if(csWord!=csCompleteWord)
|
||
{
|
||
CString csWordToAdd=csCompleteWord.Right(csCompleteWord.GetLength()-csWord.GetLength());
|
||
m_fn_vOnAddString(lWordStartIndex+csWord.GetLength(),csWordToAdd);
|
||
}
|
||
}
|
||
}
|
||
|
||
CString CPA_EdIR_EditCtrl::m_fn_csGetCompletedWordNew(CString csWord)
|
||
{
|
||
CPA_EdIR_Select_IAObj SelDiag( &g_oBaseFrame, m_bParentsSeleIAObj, csWord);
|
||
CString csString = "";
|
||
|
||
if( SelDiag.DoModal() == IDOK )
|
||
csString = SelDiag.m_csRetWord;
|
||
|
||
m_bParentsSeleIAObj = SelDiag.m_bParentsShow;
|
||
SetFocus();
|
||
|
||
return csString;
|
||
}
|
||
|
||
void CPA_EdIR_EditCtrl::m_fn_vResizeToFitParent()
|
||
{
|
||
CRect clRect;
|
||
GetParent()->GetClientRect(&clRect);
|
||
MoveWindow( 12, 0, clRect.Width() - 13, clRect.Height() - 1);
|
||
UpdateWindow();
|
||
}
|
||
|
||
|
||
CPoint CPA_EdIR_EditCtrl::GetScrollPosition()
|
||
{
|
||
CPoint clPoint;
|
||
clPoint.x = GetScrollPos( SB_HORZ );
|
||
clPoint.y = GetScrollPos( SB_VERT );
|
||
return clPoint;
|
||
}
|
||
|
||
void CPA_EdIR_EditCtrl::ScrollToPosition(CPoint clPoint)
|
||
{
|
||
LineScroll( - ( GetScrollPos( SB_VERT ) ) / m_clFontSize.cy, - ( GetScrollPos( SB_HORZ ) ) / m_clFontSize.cx );
|
||
LineScroll( clPoint.y / m_clFontSize.cy, clPoint.x / m_clFontSize.cx );
|
||
UpdateWindow();
|
||
}
|
||
|
||
|
||
void CPA_EdIR_EditCtrl::m_fn_vAddBlockTabulation( )
|
||
{
|
||
long lStart, lEnd;
|
||
CString csString;
|
||
BOOL bSel = FALSE;
|
||
|
||
GetSel( lStart, lEnd );
|
||
if( lStart != lEnd )
|
||
bSel = TRUE;
|
||
|
||
GetWindowText( csString );
|
||
|
||
long j = 1;
|
||
SetSel( lStart,lStart );
|
||
m_fn_vOnChar(lStart,'\t');
|
||
|
||
for( long i = lStart; i < lEnd - 2 ; i++ )
|
||
if( LPCSTR(csString)[i] == '\r' )
|
||
{
|
||
m_fn_vOnChar( i + 2 + j, '\t');
|
||
j++;
|
||
}
|
||
if( bSel )
|
||
SetSel( lStart, lEnd + j );
|
||
}
|
||
|
||
void CPA_EdIR_EditCtrl::m_fn_vDeleteBlockTabulation( )
|
||
{
|
||
|
||
long lStart, lEnd, lScrollPos = (GetScrollPosition()).y;
|
||
CString csString;
|
||
BOOL bSel = FALSE;
|
||
|
||
GetSel( lStart, lEnd );
|
||
if( lStart != lEnd )
|
||
bSel = TRUE;
|
||
|
||
GetWindowText( csString );
|
||
|
||
while( lStart && ( LPCSTR(csString)[lStart - 1] == '\t' ) )
|
||
lStart--;
|
||
if( LPCSTR(csString)[lStart] != '\t' )
|
||
return;
|
||
for( long i = lStart; i < lEnd - 2 ; i++ )
|
||
if( LPCSTR(csString)[i] == '\r' )
|
||
if( LPCSTR(csString)[i + 2] != '\t' )
|
||
return;
|
||
|
||
long j = 1;
|
||
SetSel( lStart,lStart );
|
||
m_fn_vOnDelString(lStart, '\t', 0, 0);
|
||
|
||
for( i = lStart; i < lEnd - 2 ; i++ )
|
||
if( LPCSTR(csString)[i] == '\r' )
|
||
{
|
||
m_fn_vOnDelString( i + 2 - j, '\t', 0, 0 );
|
||
j++;
|
||
}
|
||
|
||
if( bSel )
|
||
SetSel( lStart, lEnd - j );
|
||
|
||
}
|
||
|
||
void CPA_EdIR_EditCtrl::m_fn_vFindAndSelTextPrevious( long lEnd, CString csText )
|
||
{
|
||
if( csText.IsEmpty() )
|
||
return;
|
||
long lIndex, lIndex1 = -1;
|
||
FINDTEXTEX stFind;
|
||
stFind.chrg.cpMin = 0;
|
||
stFind.chrg.cpMax = lEnd;
|
||
stFind.lpstrText = (char*)LPCSTR( csText );
|
||
while( ( lIndex = FindText( 0, &stFind ) ) >= 0 )
|
||
{ lIndex1 = lIndex;
|
||
stFind.chrg.cpMin = lIndex + 1;
|
||
}
|
||
if( lIndex1 >= 0 )
|
||
SetSel( lIndex1, lIndex1 + csText.GetLength() );
|
||
}
|
||
|
||
void CPA_EdIR_EditCtrl::m_fn_vFindAndSelTextNext( long lStart, CString csText )
|
||
{
|
||
if( csText.IsEmpty() )
|
||
return;
|
||
long lIndex;
|
||
FINDTEXTEX stFind;
|
||
stFind.chrg.cpMin = lStart;
|
||
stFind.chrg.cpMax = GetTextLength();
|
||
stFind.lpstrText = (char*)LPCSTR( csText );
|
||
lIndex = FindText( 0, &stFind );
|
||
if( lIndex >= 0)
|
||
SetSel( lIndex, lIndex + csText.GetLength() );
|
||
|
||
}
|
||
|
||
void CPA_EdIR_EditCtrl::OnIrRulesPrevious()
|
||
{
|
||
long first, last;
|
||
CString word = m_fn_csGetWordIn(m_fn_lGetCurrentCharIndex(),first, last);
|
||
m_csLastSearched = word;
|
||
|
||
m_fn_vFindAndSelTextPrevious( m_fn_lGetCurrentCharIndex(), word );
|
||
|
||
}
|
||
|
||
void CPA_EdIR_EditCtrl::OnIrRulesNext()
|
||
{
|
||
long first, last;
|
||
CString word = m_fn_csGetWordIn(m_fn_lGetCurrentCharIndex(),first, last);
|
||
m_csLastSearched = word;
|
||
|
||
m_fn_vFindAndSelTextNext( m_fn_lGetCurrentCharIndex(), word );
|
||
|
||
}
|
||
|
||
void CPA_EdIR_EditCtrl::OnIrRulesFindreplace()
|
||
{
|
||
long first, last;
|
||
m_csLastSearched = m_fn_csGetWordIn(m_fn_lGetCurrentCharIndex(),first, last);
|
||
HINSTANCE hOldInstance=AfxGetResourceHandle();
|
||
AfxSetResourceHandle(g_stAIIdentity.hModule);
|
||
CPA_EdIR_DiagReplace m_DReplace(this);
|
||
m_DReplace.DoModal();
|
||
AfxSetResourceHandle(hOldInstance);
|
||
SetFocus();
|
||
}
|
||
|
||
|
||
void CPA_EdIR_EditCtrl::OnIrRulesAddwatch()
|
||
{
|
||
long first, last;
|
||
CString word = m_fn_csGetWordIn(m_fn_lGetCurrentCharIndex(),first, last);
|
||
CPA_DLLBase *pclActorDLL=(CPA_DLLBase*)(g_pclAIInterface->GetMainWorld()->GetObjectDLLWithName(C_szDLLActorName));
|
||
CPA_Actor *pclSelectedActor=(CPA_Actor *)pclActorDLL->OnQueryAction(g_pclAIInterface,C_uiActor_GetSelectedActor,0);
|
||
if(pclSelectedActor)
|
||
{
|
||
CTL_Editor_DataList *m_pclListOfDesignerVariableType = pclSelectedActor->m_fn_pclGetEditorActor()->m_pclListOfDesignerVariableType;
|
||
CTL_Editor_Data *pclData = (CTL_Editor_Data *)m_pclListOfDesignerVariableType->m_fn_pclGetDataFromName(word);
|
||
if(pclData /*&& MessageBox(word, "Add to Watch Window", MB_OK)*/)
|
||
{
|
||
fn_vAddValueInWatch(pclData);
|
||
fn_vSetInWatch(pclData,TRUE);
|
||
}
|
||
}
|
||
}
|
||
|
||
void CPA_EdIR_EditCtrl::m_fn_vSetFontTypeAndSize( )
|
||
{
|
||
CHARFORMAT stCharFormat;
|
||
CString csString;
|
||
|
||
CString csFontType = ((CPA_EdIR_View*)GetParent())->m_fn_csGetFontType();
|
||
int nSize = ((CPA_EdIR_View*)GetParent())->m_fn_nGetFontSize();
|
||
|
||
if( m_csFontType != csFontType || m_nFontSize != nSize )
|
||
{
|
||
m_csFontType = csFontType;
|
||
m_nFontSize = nSize;
|
||
|
||
stCharFormat.cbSize = sizeof( stCharFormat );
|
||
stCharFormat.dwMask = CFM_FACE | CFM_SIZE;
|
||
strcpy( stCharFormat.szFaceName, LPCSTR( m_csFontType ) );
|
||
stCharFormat.yHeight = m_nFontSize;
|
||
SetDefaultCharFormat( stCharFormat );
|
||
|
||
//to set the text with the new default char format
|
||
GetWindowText( csString );
|
||
SetWindowText( csString );
|
||
|
||
#ifdef DAVE
|
||
m_fn_vColorLines(0, GetLineCount());
|
||
#else
|
||
m_fn_vColorText( 0, GetTextLength() );
|
||
#endif
|
||
|
||
m_clFontSize = ((CPA_EdIR_View*)GetParent())->m_fn_clGetFontExtent( );
|
||
}
|
||
}
|
||
|
||
void CPA_EdIR_EditCtrl::OnIrChangeFont()
|
||
{
|
||
((CPA_EdIR_View*)GetParent())->m_fn_vChooseFont();
|
||
}
|
||
|
||
#endif //D_ED_IR_ACTIVE
|
||
|