diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 5ea2bc9c71..0c34729cc0 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -16,6 +16,15 @@ The license applies to all entries newer than 2009-04-28. */ +2012-08-13 22:27 UTC-0800 Pritpal Bedi (bedipritpal@hotmail.com) + * contrib/hbide/edit.prg + * contrib/hbide/saveload.prg + * contrib/hbide/setup.ui + + Added: flag to toggle [YES]. + + Implemented: [YES] + [Data Member][VAR], [METHODS][new], [FORMAT][class:method] + These are self explanatory, please report deviations. + 2012-08-13 09:30 UTC-0800 Pritpal Bedi (bedipritpal@hotmail.com) * contrib/hbide/dict.prg % Added: some more data members, q work-in-progress. diff --git a/harbour/contrib/hbide/edit.prg b/harbour/contrib/hbide/edit.prg index 1d6e24042d..4cea00ab6c 100644 --- a/harbour/contrib/hbide/edit.prg +++ b/harbour/contrib/hbide/edit.prg @@ -173,7 +173,6 @@ CLASS IdeEdit INHERIT IdeObject METHOD reLayMarkButtons() METHOD presentSkeletons() METHOD handleCurrentIndent() - METHOD handlePreviousWord( lUpdatePrevWord ) METHOD loadFuncHelp() METHOD clickFuncHelp() METHOD goto( nLine ) @@ -532,7 +531,6 @@ METHOD IdeEdit:execEvent( nMode, p, p1 ) #if 0 CASE __textChanged__ ::oEditor:setTabImage( ::qEdit ) - ::handlePreviousWord( ::lUpdatePrevWord ) EXIT CASE __modificationChanged__ ::oEditor:setTabImage( ::qEdit ) @@ -597,13 +595,13 @@ METHOD IdeEdit:execKeyEvent( nMode, nEvent, p, p1 ) ENDIF EXIT CASE Qt_Key_Space - IF !lAlt .AND. !lShift .AND. !lCtrl + IF ! lAlt .AND. ! lShift .AND. ! lCtrl ::lUpdatePrevWord := .t. ENDIF EXIT CASE Qt_Key_Return CASE Qt_Key_Enter - ::handlePreviousWord( .t. ) + ::reformatLine( -1, 0, 1 ) ::lIndentIt := .t. EXIT CASE Qt_Key_ParenLeft @@ -2234,8 +2232,12 @@ METHOD IdeEdit:reformatLine( nPos, nDeleted, nAdded ) nPostn := qCursor:position() nLine := qCursor:blockNumber() - IF ( nCol := nPostn - qCursor:block():position() ) > 0 - cCWord := SubStr( qCursor:block():text(), nCol, 1 ) + IF nPos == -1 + cCWord := " " + ELSE + IF ( nCol := nPostn - qCursor:block():position() ) > 0 + cCWord := SubStr( qCursor:block():text(), nCol, 1 ) + ENDIF ENDIF IF qCursor:movePosition( QTextCursor_EndOfLine, QTextCursor_KeepAnchor ) .AND. qCursor:position() > nPostn @@ -2371,17 +2373,27 @@ METHOD IdeEdit:reformatLine( nPos, nDeleted, nAdded ) ELSEIF cWord == "next" hbide_alignToPrevWord( qCursor, "for", "next", Len( cWord ), nPostn ) - ENDIF - - IF Lower( cPPWord ) == "static" .AND. ( cPWord == "function" .OR. cPWord == "procedure" ) + ELSEIF Lower( cPPWord ) == "static" .AND. ( cPWord == "function" .OR. cPWord == "procedure" ) hbide_removeStartingSpaces( qCursor, nCPrevPrev ) - hbide_appendFunction( qCursor, ::nTabSpaces, ::oINI:lISLocal, ::oINI:lISReturn, ::oINI:lISSeparator, ::oINI:lReturnAsBeginKeyword, ::cSeparator ) + IF ::oINI:lISFunction + hbide_appendFunction( qCursor, ::nTabSpaces, ::oINI:lISLocal, ::oINI:lISReturn, ::oINI:lISSeparator, ::oINI:lReturnAsBeginKeyword, ::cSeparator ) + ENDIF ELSEIF Empty( cPPWord ) .AND. ( cPWord == "function" .OR. cPWord == "procedure" ) - hbide_appendFunction( qCursor, ::nTabSpaces, ::oINI:lISLocal, ::oINI:lISReturn, ::oINI:lISSeparator, ::oINI:lReturnAsBeginKeyword, ::cSeparator ) + IF ::oINI:lISFunction + hbide_appendFunction( qCursor, ::nTabSpaces, ::oINI:lISLocal, ::oINI:lISReturn, ::oINI:lISSeparator, ::oINI:lReturnAsBeginKeyword, ::cSeparator ) + ENDIF ELSEIF Lower( cPPWord ) == "create" .AND. cPWord == "class" hbide_removeStartingSpaces( qCursor, nCPrevPrev ) + IF ::oINI:lISClass + hbide_appendClass( qCursor, ::nTabSpaces, ::oINI ) + ENDIF + + ELSEIF Empty( cPPWord ) .AND. cPWord == "class" + IF ::oINI:lISClass + hbide_appendClass( qCursor, ::nTabSpaces, ::oINI ) + ENDIF ENDIF ENDIF @@ -2392,7 +2404,9 @@ METHOD IdeEdit:reformatLine( nPos, nDeleted, nAdded ) qCursor:endEditBlock() ENDIF - ::handleCurrentIndent() + IF nPos != -1 + ::handleCurrentIndent() + ENDIF IF ::nProtoLine != -1 IF ::getLineNo() == ::nProtoLine .AND. ::getColumnNo() >= ::nProtoCol + 1 @@ -2405,20 +2419,21 @@ METHOD IdeEdit:reformatLine( nPos, nDeleted, nAdded ) ENDIF ENDIF - HB_SYMBOL_UNUSED( nPos ) HB_SYMBOL_UNUSED( nDeleted ) - RETURN cRest /*----------------------------------------------------------------------*/ STATIC FUNCTION hbide_removeStartingSpaces( qCursor, nCPrevPrev ) - LOCAL nPostn := qCursor:position() + LOCAL nPostn - qCursor:movePosition( QTextCursor_StartOfBlock ) - qCursor:movePosition( QTextCursor_NextWord, QTextCursor_KeepAnchor ) - qCursor:removeSelectedText() - qCursor:setPosition( nPostn - nCPrevPrev ) + IF nCPrevPrev > 0 + nPostn := qCursor:position() + qCursor:movePosition( QTextCursor_StartOfBlock ) + qCursor:movePosition( QTextCursor_NextWord, QTextCursor_KeepAnchor ) + qCursor:removeSelectedText() + qCursor:setPosition( nPostn - nCPrevPrev ) + ENDIF RETURN NIL @@ -2468,6 +2483,44 @@ STATIC FUNCTION hbide_replaceWord( qCursor, nWord, cWord, nPostn ) /*----------------------------------------------------------------------*/ +STATIC FUNCTION hbide_appendClass( qCursor, nTabSpaces, oINI ) + LOCAL cMethod + LOCAL aMethods := hb_ATokens( oINI:cISMethods, ";" ) + LOCAL nPostn := qCursor:position() + LOCAL nClosingIndent := iif( oINI:lReturnAsBeginKeyword, 0, nTabSpaces ) + + qCursor:movePosition( QTextCursor_EndOfBlock ) + qCursor:insertBlock() + qCursor:insertText( Space( nTabSpaces ) + PadR( oINI:cISData, 7 ) + "xDummy" + Space( 34 ) + "INIT NIL" ) + qCursor:insertBlock() + FOR EACH cMethod IN aMethods + qCursor:insertBlock() + qCursor:insertText( Space( nTabSpaces ) + "METHOD " + cMethod + "()" ) + NEXT + qCursor:insertBlock() + qCursor:insertBlock() + qCursor:insertText( Space( nClosingIndent ) + "ENDCLASS " ) + qCursor:insertBlock() + qCursor:insertBlock() + FOR EACH cMethod IN aMethods + qCursor:insertBlock() + IF oINI:cISFormat == "class:method" + qCursor:insertText( "METHOD " + ":" + cMethod + "()" ) + ELSE + qCursor:insertText( "METHOD " + cMethod + "() CLASS " ) + ENDIF + qCursor:insertBlock() + qCursor:insertBlock() + qCursor:insertText( Space( nClosingIndent ) + "RETURN Self " ) + qCursor:insertBlock() + NEXT + qCursor:insertBlock() + qCursor:setPosition( nPostn ) + + RETURN NIL + +/*----------------------------------------------------------------------*/ + STATIC FUNCTION hbide_appendFunction( qCursor, nTabSpaces, lLocal, lReturn, lSeparator, lReturnAsBeginKeyword, cSeparator ) LOCAL nPostn := qCursor:position() @@ -2606,98 +2659,6 @@ STATIC FUNCTION hbide_appendIf( qCursor, nIndent, nCurPos, nTabSpaces, lElse, lE /*----------------------------------------------------------------------*/ -METHOD IdeEdit:handlePreviousWord( lUpdatePrevWord ) - HB_SYMBOL_UNUSED( lUpdatePrevWord ) - - RETURN Self - -/*----------------------------------------------------------------------*/ -#if 0 -METHOD IdeEdit:handlePreviousWord( lUpdatePrevWord ) - LOCAL qCursor, qTextBlock, cText, cWord, nB, nL, qEdit, lPrevOnly, nCol, nSpace, nSpaces, nOff - - IF ! lUpdatePrevWord - RETURN Self - ENDIF - ::lUpdatePrevWord := .f. - - qEdit := ::qEdit - - qCursor := qEdit:textCursor() - qTextBlock := qCursor:block() - cText := qTextBlock:text() - nCol := qCursor:columnNumber() - IF ( substr( cText, nCol - 1, 1 ) == " " ) - RETURN NIL - ENDIF - nSpace := iif( substr( cText, nCol, 1 ) == " ", 1, 0 ) - cWord := hbide_getPreviousWord( cText, nCol + 1 ) - - IF !empty( cWord ) .AND. hbide_isHarbourKeyword( cWord, ::oIde ) - lPrevOnly := left( lower( ltrim( cText ) ), Len( cWord ) ) == lower( cWord ) - - nL := Len( cWord ) + nSpace - nB := qCursor:position() - nL - - IF lower( ::oEditor:cExt ) $ ".prg,.hb" .AND. ! ::oINI:lSupressHbKWordsToUpper - qCursor:beginEditBlock() - qCursor:setPosition( nB ) - qCursor:movePosition( QTextCursor_NextCharacter, QTextCursor_KeepAnchor, nL ) - qCursor:removeSelectedText() - qCursor:insertText( upper( cWord ) + space( nSpace ) ) - qCursor:endEditBlock() - qEdit:setTextCursor( qCursor ) - ENDIF - - IF hbide_isStartingKeyword( cWord, ::oIde ) - IF lPrevOnly - qCursor:setPosition( nB ) - IF ( nCol := qCursor:columnNumber() ) > 0 - qCursor:beginEditBlock() - qCursor:movePosition( QTextCursor_StartOfBlock ) - qCursor:movePosition( QTextCursor_NextCharacter, QTextCursor_KeepAnchor, nCol ) - qCursor:removeSelectedText() - qCursor:movePosition( QTextCursor_NextCharacter, QTextCursor_MoveAnchor, nL ) - qCursor:endEditBlock() - qEdit:setTextCursor( qCursor ) - ENDIF - ENDIF - - ELSEIF hbide_isMinimumIndentableKeyword( cWord, ::oIde ) .AND. ::oINI:lAutoIndent - IF lPrevOnly - qCursor:setPosition( nB ) - IF ( nCol := qCursor:columnNumber() ) >= 0 - qCursor:beginEditBlock() - qCursor:movePosition( QTextCursor_StartOfBlock ) - qCursor:movePosition( QTextCursor_NextCharacter, QTextCursor_KeepAnchor, nCol ) - qCursor:removeSelectedText() - qCursor:insertText( space( ::nTabSpaces ) ) - qCursor:movePosition( QTextCursor_NextCharacter, QTextCursor_MoveAnchor, nL ) - qEdit:setTextCursor( qCursor ) - qCursor:endEditBlock() - ENDIF - ENDIF - - ELSEIF hbide_isIndentableKeyword( cWord, ::oIde ) .AND. ::oINI:lAutoIndent - IF lPrevOnly - nSpaces := hbide_getFrontSpacesAndWord( cText ) - IF nSpaces > 0 .AND. ( nOff := nSpaces % ::nTabSpaces ) > 0 - qCursor:setPosition( nB ) - qCursor:beginEditBlock() - qCursor:movePosition( QTextCursor_PreviousCharacter, QTextCursor_KeepAnchor, nOff ) - qCursor:removeSelectedText() - qCursor:movePosition( QTextCursor_NextCharacter, QTextCursor_MoveAnchor, nL ) - qEdit:setTextCursor( qCursor ) - qCursor:endEditBlock() - ENDIF - ENDIF - ENDIF - ENDIF - - RETURN .t. -#endif -/*----------------------------------------------------------------------*/ - METHOD IdeEdit:findLastIndent() LOCAL qCursor, qTextBlock, cText, cWord LOCAL nSpaces := 0 diff --git a/harbour/contrib/hbide/saveload.prg b/harbour/contrib/hbide/saveload.prg index 56e5dfa513..6d8b265f4a 100644 --- a/harbour/contrib/hbide/saveload.prg +++ b/harbour/contrib/hbide/saveload.prg @@ -263,6 +263,11 @@ CLASS IdeINI INHERIT IdeObject DATA lISReturn INIT .T. DATA lISSeparator INIT .T. DATA lISDocs INIT .F. + DATA lISFunction INIT .T. + DATA lISClass INIT .T. + DATA cISData INIT "VAR" + DATA cISMethods INIT "new" + DATA cISFormat INIT "class:method" METHOD new( oIde ) METHOD create( oIde ) @@ -523,6 +528,11 @@ METHOD IdeINI:save( cHbideIni ) AAdd( txt_, "ISReturn" + "=" + iif( ::lISReturn , "YES", "NO" ) ) AAdd( txt_, "ISSeparator" + "=" + iif( ::lISSeparator , "YES", "NO" ) ) AAdd( txt_, "ISDocs" + "=" + iif( ::lISDocs , "YES", "NO" ) ) + AAdd( txt_, "ISFunction" + "=" + iif( ::lISFunction , "YES", "NO" ) ) + AAdd( txt_, "ISClass" + "=" + iif( ::lISClass , "YES", "NO" ) ) + AAdd( txt_, "ISData" + "=" + ::cISData ) + AAdd( txt_, "ISMethods" + "=" + ::cISMethods ) + AAdd( txt_, "ISFormat" + "=" + ::cISFormat ) aadd( txt_, "" ) aadd( txt_, "[PROJECTS]" ) @@ -880,6 +890,11 @@ METHOD IdeINI:load( cHbideIni ) CASE "ISReturn" ; ::lISReturn := !( cVal == "NO" ) ; EXIT CASE "ISSeparator" ; ::lISSeparator := !( cVal == "NO" ) ; EXIT CASE "ISDocs" ; ::lISDocs := !( cVal == "NO" ) ; EXIT + CASE "ISFunction" ; ::lISFunction := !( cVal == "NO" ) ; EXIT + CASE "ISClass" ; ::lISClass := !( cVal == "NO" ) ; EXIT + CASE "ISData" ; ::cISData := cVal ; EXIT + CASE "ISMethods" ; ::cISMethods := cVal ; EXIT + CASE "ISFormat" ; ::cISFormat := cVal ; EXIT ENDSWITCH ENDIF @@ -1534,10 +1549,15 @@ METHOD IdeSetup:retrieve() ::oINI:lISAlignAssign := ::oUI:chkISAlignAssign : isChecked() ::oINI:lISFmtLine := ::oUI:chkISFmtLine : isChecked() ::oINI:lISEmbrace := ::oUI:ChkISEmbrace : isChecked() - ::oINI:lISLocal := ::oUI:ChkISLocal : isChecked() - ::oINI:lISReturn := ::oUI:ChkISReturn : isChecked() - ::oINI:lISSeparator := ::oUI:ChkISSeparator : isChecked() - ::oINI:lISDocs := ::oUI:ChkISDocs : isChecked() + ::oINI:lISLocal := ::oUI:chkISLocal : isChecked() + ::oINI:lISReturn := ::oUI:chkISReturn : isChecked() + ::oINI:lISSeparator := ::oUI:chkISSeparator : isChecked() + ::oINI:lISDocs := ::oUI:chkISDocs : isChecked() + ::oINI:lISFunction := ::oUI:grpISFunction : isChecked() + ::oINI:lISClass := ::oUI:grpISClass : isChecked() + ::oINI:cISData := ::oUI:comboISData : currentText() + ::oINI:cISMethods := ::oUI:comboISMethods : currentText() + ::oINI:cISFormat := ::oUI:comboISFormat : currentText() RETURN Self @@ -1662,6 +1682,11 @@ METHOD IdeSetup:populate() ::oUI:chkISReturn : setChecked( ::oINI:lISReturn ) ::oUI:chkISSeparator : setChecked( ::oINI:lISSeparator ) ::oUI:chkISDocs : setChecked( ::oINI:lISDocs ) + ::oUI:grpISFunction : setChecked( ::oINI:lISFunction ) + ::oUI:grpISClass : setChecked( ::oINI:lISClass ) + ::oUI:comboISData : setCurrentIndex( iif( ::oINI:cISData == "VAR", 0, 1 ) ) + ::oUI:comboISMethods : setCurrentIndex( AScan( { "new", "new;create", "new;create;destroy" }, {|e| e == ::oINI:cISMethods } ) - 1 ) + ::oUI:comboISFormat : setCurrentIndex( iif( ::oINI:cISFormat == "class:method", 0, 1 ) ) ::connectSlots() @@ -1723,6 +1748,17 @@ METHOD IdeSetup:show() aeval( ::aTBSize, {|e| ::oUI:comboTBSize:addItem( e ) } ) ::oUI:comboTBSize:setCurrentIndex( ascan( ::aTBSize, {|e| e == ::oINI:cToolbarSize } ) - 1 ) + /* Intelli-sense */ + ::oUI:comboISData : addItem( "VAR" ) + ::oUI:comboISData : addItem( "DATA" ) + + ::oUI:comboISMethods : addItem( "new" ) + ::oUI:comboISMethods : addItem( "new;create" ) + ::oUI:comboISMethods : addItem( "new;create;destroy" ) + + ::oUI:comboISFormat : addItem( "class:method" ) + ::oUI:comboISFormat : addItem( "method CLASS class" ) + ::setIcons() ::connectSlots() diff --git a/harbour/contrib/hbide/setup.ui b/harbour/contrib/hbide/setup.ui index 8f790bbb0d..e16df3430e 100644 --- a/harbour/contrib/hbide/setup.ui +++ b/harbour/contrib/hbide/setup.ui @@ -475,7 +475,10 @@ - CLOSING STATEMENTS + Closing Statements + + + Qt::AlignCenter true @@ -667,13 +670,16 @@ 8 - 188 + 236 333 - 41 + 37 - FUNCTION CALL + Function Call + + + Qt::AlignCenter false @@ -682,8 +688,8 @@ 8 - 20 - 149 + 16 + 145 18 @@ -695,13 +701,13 @@ 156 - 20 + 16 169 18 - Add Spaces After/Before () + Add Spaces After/ Before () @@ -709,19 +715,22 @@ 8 - 232 + 272 333 - 125 + 85 - GENERAL + General + + + Qt::AlignCenter 8 - 20 + 16 205 16 @@ -734,7 +743,7 @@ 8 - 40 + 32 205 18 @@ -747,7 +756,7 @@ 8 - 100 + 64 205 18 @@ -760,7 +769,7 @@ 8 - 60 + 48 205 18 @@ -770,23 +779,29 @@ - + 8 - 136 + 140 333 - 49 + 37 - FUNCTION / PROCEDURE DECLARATION + Function Declaration + + + Qt::AlignCenter + + + true 8 - 20 + 16 61 17 @@ -799,7 +814,7 @@ 80 - 20 + 16 70 17 @@ -812,8 +827,8 @@ 156 - 20 - 89 + 16 + 81 17 @@ -825,7 +840,7 @@ 240 - 20 + 16 89 17 @@ -835,6 +850,100 @@ + + + + 8 + 180 + 333 + 53 + + + + Class Declaration + + + Qt::AlignCenter + + + true + + + + + 8 + 28 + 61 + 19 + + + + + + + 80 + 28 + 133 + 19 + + + + + + + 8 + 12 + 61 + 16 + + + + Data Mem As + + + + + + 80 + 12 + 133 + 16 + + + + Initial Methods + + + Qt::AlignCenter + + + + + + 224 + 28 + 101 + 19 + + + + + + + 224 + 12 + 101 + 16 + + + + Method Format + + + Qt::AlignCenter + + +