void TMDIChild::ParseData(bool gotoPos) { if(m_ParseTree->GetClassData() == NULL) return; char *pointer = m_HexEditor->GetFastPointer(0, m_HexEditor->DataSize); m_ParseTree->SetParseData(pointer, m_HexEditor->DataSize); if(m_bFastParseMode) m_ParseTree->UnPackData(m_FastParsePos, 1); else m_ParseTree->UnPackData(m_HexEditor->SelStart, 1); m_ParseTree->ParseData(); m_HexEditor->Repaint(); if(gotoPos) { if(m_bFastParseMode) { GotoPosition(m_FastParsePos); } else { if(m_HexEditor->SelStart - 1 >= 0) GotoPosition(m_HexEditor->SelStart - 1); } } }
///////////////////////////////////// // @mfunc Search backward for a given string and select it if found. You may use regular expressions on the text. // @rvalue bool | true if text is ffound else false // bool CScintillaWnd::SearchBackward(LPSTR szText) { //@parm text to search if (szText == NULL) { return false; } long lPos = GetCurrentPosition(); long lMinSel = GetSelectionStart(); TextToFind tf; tf.lpstrText = szText; if (lMinSel >= 0) { tf.chrg.cpMin = lMinSel-1; } else { tf.chrg.cpMin = lPos-1; } tf.chrg.cpMax = 0; lPos = SendMessage(SCI_FINDTEXT, m_nSearchflags, (ULONG_PTR)&tf); if (lPos >= 0) { SetFocus(); GotoPosition(lPos); SendMessage(SCI_SETSEL, tf.chrgText.cpMin, tf.chrgText.cpMax); SendMessage(SCI_FINDTEXT, m_nSearchflags, (ULONG_PTR)&tf); return true; } return false; }
void CLATEDView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint) { if (lHint == CStdEditorDoc::GetPositionHint) { GetPosition (*(CStdEditorPosition *)pHint); return; } if (lHint == CStdEditorDoc::GotoPositionHint) { GotoPosition (*(CStdEditorPosition *)pHint); return; } LATED_HINT_TYPE type = (LATED_HINT_TYPE) lHint; switch(type) { case UPDATE_ALL: OnUpdateAll(pHint); return; case UPDATE_NEW: OnUpdateNew(); return; case UPDATE_CLEAR: { CTreeCtrl& rTree = GetTreeCtrl(); rTree.SelectItem(NULL); rTree.DeleteAllItems(); } return; case INVALID: break; } CTreeView::OnUpdate(pSender,lHint,pHint); }
void __fastcall TMDIChild::tvParseTreeClick(TObject *Sender) { m_HexEditor->Repaint(); //设置卷轴滚动 tagSelRect selRect; if(GetTreeSelRect(selRect) == false) return; if(selRect.SelStart < m_HexEditor->DataSize) { GotoPosition(selRect.SelStart); } SetSelectDetail(); RefreshStateBar(); //设置提示 String hint; ParseTreeNode * curParseTree = (ParseTreeNode *)tvParseTree->Selected->Data; if(curParseTree == NULL) { //选择的是结构体 hint = m_ParseTree->GetClassData()->GetComment(); } else { //选择的是变量 hint = curParseTree->GetClassMember()->GetComment(); } tvParseTree->Hint = hint; }
///////////////////////////////////// // @mfunc Reset the Scintiall control and add new Text // @rvalue void | not used // void CScintillaWnd::SetText (LPCSTR szText) { //@parm pointer to new text LRESULT lResult = 0; if (szText != NULL) { lResult = SendMessage(SCI_SETTEXT,0,(LPARAM)szText); } GotoPosition(0); SetFocus(); }
void __fastcall TMDIChild::FastParseExecute(TObject *Sender) { TMenuItem * selMenu = (TMenuItem * )Sender; String typeName = selMenu->Caption; //修正typeName if(selMenu->Caption == "-") return; if(typeName.Pos("[")) typeName = LeftString(typeName, "["); ClassData * curClass = GetCurParseClass(); // bool haveResult = false; String defaultName; if(curClass == NULL) { //当前无结构体, 新建结构体 int classCount = m_WorkSpace->GetClassManager()->GetClassCount(); defaultName = FormatStr("tagUnNamedStruct%d", classCount); curClass = m_WorkSpace->GetClassManager()->AddClass(); curClass->Init(defaultName, ""); RefreshAllClassView(); } String arrayVar; if(selMenu->Tag == 0) arrayVar = ""; else arrayVar = IntToStr(selMenu->Tag); ClassMember * curMember = curClass->AddMember(); defaultName = FormatStr("UnKnown%d", m_ParseTree->GetSize() + m_FastParsePos); curMember->Init(typeName, defaultName, "", arrayVar); m_ParseTree->BindClass(curClass); ExpandFirstNode(); ParseData(false); tagSelRect selRect; if(GetTreeSelRect(selRect) == false) return; GotoPosition(selRect.SelStart + selRect.SelLength); }
void __fastcall TMDIChild::actGoToNextExecute(TObject *Sender) { int gotoPos = m_ParseTree->GetCurPos() + m_ParseTree->GetSize(); if(gotoPos < m_HexEditor->DataSize) { m_ParseListHistory.push(m_HexEditor->SelStart); m_HexEditor->SelStart = m_ParseTree->GetCurPos() + m_ParseTree->GetSize(); ParseData(false); tagSelRect selRect; if(GetTreeSelRect(selRect) == false) return; GotoPosition(selRect.SelStart); edtCurParseCount->Value = m_ParseListHistory.size(); } }
///////////////////////////////////// // @mfunc Search forward for a given string and select it if found. You may use regular expressions on the text. // @rvalue bool | true if text is found else false // bool CScintillaWnd::SearchForward(LPSTR szText) { //@parm text to search if (szText == NULL) { return false; } long lPos = GetCurrentPosition(); TextToFind tf; tf.lpstrText = szText; tf.chrg.cpMin = lPos+1; tf.chrg.cpMax = SendMessage(SCI_GETLENGTH, 0, 0); lPos = SendMessage(SCI_FINDTEXT, m_nSearchflags, (ULONG_PTR)&tf); if (lPos >= 0) { SetFocus(); GotoPosition(lPos); SendMessage(SCI_SETSEL, tf.chrgText.cpMin, tf.chrgText.cpMax); SendMessage(SCI_FINDTEXT, m_nSearchflags, (ULONG_PTR)&tf); return true; } return false; }
/* * Posiciona cursor en fila y columna * fila: (9-fila)*8-1 (basado en 8 pixeles de alto por caracter) * columna: col*6-6 (basado en 6 pixeles de ancho por caracter) */ void rDK_GLCD::Goto(uint8_t col,uint8_t fila) { GotoPosition(lcdCol(col),lcdFila(fila)); }
/* * Nueva versión de este metodo para calcular posición en cada fila de arriba hacia abajo * fila 1=pixel 63, fila 2= pixel 55, fila 3= pixel 47 .... */ void rDK_GLCD::GotoLine(uint8_t fila) { GotoPosition(0,lcdFila(fila)); }