Define method

One of the very boring things when hacking a little function directly into the Sourcefile is to copy its definition to the Headerfile.

Here is a quick Solution:

Put the Cursor in the Line where the Function starts (for Example : void foo( int x) ). Call the Makro 'DefineMethod'. It searches for the header file, and then for the beginnig of the public, protected and private blocks. After that it ask you in which block your function is defined. If there is no block the macro creates one.

It uses the 'ToggleHandCPP' macro from Ian Southwell (link here) !


'
'MTMacro.dsm - Written by M.Taupitz
'
'------------------------------------------------------------------------------
'FILE DESCRIPTION: copys the definition from the CPP to the header.
'------------------------------------------------------------------------------

Sub DefineMethod()
'DESCRIPTION: Copy the Definition into the Header-File
	strHpt = ActiveDocument.FullName
	if right(strHpt,3) = "CPP" Or right (strHpt,3) = "cpp" Then
		ActiveDocument.Selection.SelectLine
		strText = ActiveDocument.Selection.Text
		if (Instr(strText, "::" ) = 0) Then
			MsgBox("Line not valid !!")
			Exit Sub
		End If

		pos = Instr(strText, "::")
		strName = Right(strText, (Len(strText) - (pos+1)))

		strClass = Left(strText,pos - 1)
		while (instr(strClass, " ") > 0)
			pos = instr(strClass, " ")
			strTyp = strTyp & Left(strClass, pos)
			strClass = Right(strClass, Len(strClass) - (pos) )
		wend

		strName = strTyp & "	" & Left(strName,Len(strName)-2 ) '(without CRLF also -2)
		iCou = InStr(ActiveDocument.Selection.Text,"//")
		if (iCou > 0) Then
			strName = strName & Trim( Left(strName, iCou - 1))
		End If
		while (instr(strName, ")" ) = 0 )
			ActiveDocument.Selection.StartOfLine
			ActiveDocument.Selection.LineDown dsMove
			ActiveDocument.Selection.StartOfLine dsExtend
			ActiveDocument.Selection.EndOfLine dsExtend
			while Left(strName,1) = "	" Or Left(strName,1) = " "
				strName = Right(strName, Len(strName) -1)
			Wend
			iCou = InStr(ActiveDocument.Selection.Text,"//")
			if (iCou = 0)Then
				strName = strName & Trim(ActiveDocument.Selection.Text)
			Else
				strName = strName & Trim( Left(ActiveDocument.Selection.Text, iCou - 1))
			End If

			' kill the Tabs
			tabCou = InStr(strName, vbTab)
			while tabCou > 0
				strName = (Left(strName, tabCou-1)) & (Right(strName, Len(strName)-tabCou ) )
				tabCou = InStr(strName, vbTab)
			Wend 'tabCou
		Wend

		strName = strName & ";" & vbCrLf

		ToggleHandCPP

		ActiveDocument.Selection.SelectAll
		strHead = ActiveDocument.Selection.Text

		if (instr(strHead,strClass)  = 0) Then
			MsgBox(" Can't find class " & strClass & " !!")
			ToggleHandCPP
			Exit Sub
		End If

		pos = instr(strHead,strClass)

		linePublic = 0
		linePrivate = 0
		lineProtected = 0
		ActiveDocument.Selection.EndOfDocument
		lineBottom = ActiveDocument.Selection.CurrentLine

		ActiveDocument.Selection.StartOfDocument
		ActiveDocument.Selection.StartOfLine
		ActiveDocument.Selection.SelectLine
		strLine = ActiveDocument.Selection.Text
		while (instr(strLine, "private:" ) = 0  And ActiveDocument.Selection.CurrentLine <> lineBottom)
			ActiveDocument.Selection.StartOfLine
			ActiveDocument.Selection.LineDown dsMove
			ActiveDocument.Selection.SelectLine
			strLine = ActiveDocument.Selection.Text
		Wend
		if (ActiveDocument.Selection.CurrentLine < lineBottom) Then
			linePrivate = ActiveDocument.Selection.CurrentLine
		else
			linePrivate = 0
		end if

		ActiveDocument.Selection.StartOfDocument
		ActiveDocument.Selection.SelectLine
		strLine = ActiveDocument.Selection.Text
		while (instr(strLine, "protected:" ) = 0 And ActiveDocument.Selection.CurrentLine <> lineBottom)
			ActiveDocument.Selection.StartOfLine
			ActiveDocument.Selection.LineDown dsMove
			ActiveDocument.Selection.SelectLine
			strLine = ActiveDocument.Selection.Text
		Wend
		if (ActiveDocument.Selection.CurrentLine < lineBottom) Then
			lineProtected = ActiveDocument.Selection.CurrentLine
		else
			lineProtected = 0
		end if

		ActiveDocument.Selection.StartOfDocument
		ActiveDocument.Selection.SelectLine
		strLine = ActiveDocument.Selection.Text
		while (instr(strLine, "public:" ) = 0 And ActiveDocument.Selection.CurrentLine <> lineBottom)
			ActiveDocument.Selection.StartOfLine
			ActiveDocument.Selection.LineDown dsMove
			ActiveDocument.Selection.SelectLine
			strLine = ActiveDocument.Selection.Text
		Wend
		if (ActiveDocument.Selection.CurrentLine < lineBottom) Then
			linePublic = ActiveDocument.Selection.CurrentLine
		else
			linePublic = 0
		end if


		ActiveDocument.Selection.StartOfDocument
		ActiveDocument.Selection.SelectLine
		strLine = ActiveDocument.Selection.Text
		while (instr(strLine, "{" ) = 0 And ActiveDocument.Selection.CurrentLine <> lineBottom)
			ActiveDocument.Selection.StartOfLine
			ActiveDocument.Selection.LineDown dsMove
			ActiveDocument.Selection.SelectLine
			strLine = ActiveDocument.Selection.Text
		Wend
		if (ActiveDocument.Selection.CurrentLine < lineBottom) Then
			lineStart = ActiveDocument.Selection.CurrentLine
		else
			lineStart = 0
		end if

		bAnswer = MsgBox("Copy the definition as -public-(YES), -protected-(NO) or -private-(CANCEL) ?", vbYesNoCancel)

		Replace strName, vbCrLf, " "
		Replace strName, vbCr, " "
		Replace strName, vbLf, " "

		If bAnswer = vbYes Then
			if linePublic = 0 Then
				ActiveDocument.Selection.GoToLine lineStart+1, dsSelect
				ActiveDocument.Selection = ActiveDocument.Selection & "public:" & vbCrLf & vbTab & strName
			Else
				ActiveDocument.Selection.GoToLine linePublic+1, dsSelect
				ActiveDocument.Selection = ActiveDocument.Selection & vbTab & strName
			End If
		End If

		If bAnswer = vbNo Then
			if lineProtected = 0 Then
				ActiveDocument.Selection.GoToLine lineStart+1, dsSelect
				ActiveDocument.Selection =  ActiveDocument.Selection & "protected:" & vbCrLf & vbTab & strName
			Else
				ActiveDocument.Selection.GoToLine lineProtected+1, dsSelect
				ActiveDocument.Selection = ActiveDocument.Selection & vbTab & strName
			End If
		End If

		If bAnswer = vbCancel Then
			if linePrivate = 0 Then
				ActiveDocument.Selection.GoToLine lineStart+1, dsSelect
				ActiveDocument.Selection = ActiveDocument.Selection & "private:" & vbCrLf & vbTab & strName
			Else
				ActiveDocument.Selection.GoToLine linePrivate+1, dsSelect
				ActiveDocument.Selection = ActiveDocument.Selection & vbTab & strName
			End If
		End If

		ToggleHandCPP
	End If 'right = "CPP"

End Sub


Comments

  • Cool but i would need it reverse

    Posted by Legacy on 01/29/2002 12:00am

    Originally posted by: poidi

    hi,

    nice stuff!

    on the other hand, i prefer it the other direction.

    first i write the .h file, then i would like to have some macro that writes the prototype and the body of the actual function (or maybe all declarated functions in the .h file)
    into the .cpp file

    thx
    poidi

    Reply
  • good stuff! but ToggleHandCPP link is wrong

    Posted by Legacy on 03/23/2000 12:00am

    Originally posted by: les engelbrecht

    i tracked down the ToggleHandCPP macro to:
    http://www.codeguru.com/devstudio_macros/open_current_header.shtml

    Reply
Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • Organizations are increasingly gravitating toward mobile-first application development as they assess the need to revamp their application portfolios to support touch computing and mobility. Consumerization has brought higher expectations for application usability along with the mobile devices themselves. Enterprises are increasingly shifting their new application acquisitions and development efforts toward mobile platforms. With this backdrop, it is natural to expect application platform vendors to invest in …

  • Do you spend a lot of time thinking about your enemies? Attacker attribution - figuring out who's out to get you - is one of the most important things an organization can do to protect itself.  Because you have no hope of defending yourself if you don't understand who the attackers are. Good news? Every organization isn't targeted by all the attackers. Bad news? No one can identify your potential attackers as well as you. Read this graphics-rich threat summary for 2014 to determine who might be your next …

Most Popular Programming Stories

More for Developers

RSS Feeds

Thanks for your registration, follow us on our social networks to keep up-to-date