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 <Function Declaration> [YES].
    + Implemented: <Setup><HbIDE Setup><Intelli-sense><Class Declaration> [YES]
       [Data Member][VAR], [METHODS][new], [FORMAT][class:method]
        These are self explanatory, please report deviations.
This commit is contained in:
Pritpal Bedi
2012-08-14 05:36:14 +00:00
parent 95c834188a
commit 8ba895ce8e
4 changed files with 254 additions and 139 deletions

View File

@@ -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 <Function Declaration> [YES].
+ Implemented: <Setup><HbIDE Setup><Intelli-sense><Class Declaration> [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.

View File

@@ -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

View File

@@ -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()

View File

@@ -475,7 +475,10 @@
</rect>
</property>
<property name="title">
<string>CLOSING STATEMENTS</string>
<string>Closing Statements</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="checkable">
<bool>true</bool>
@@ -667,13 +670,16 @@
<property name="geometry">
<rect>
<x>8</x>
<y>188</y>
<y>236</y>
<width>333</width>
<height>41</height>
<height>37</height>
</rect>
</property>
<property name="title">
<string>FUNCTION CALL</string>
<string>Function Call</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="checkable">
<bool>false</bool>
@@ -682,8 +688,8 @@
<property name="geometry">
<rect>
<x>8</x>
<y>20</y>
<width>149</width>
<y>16</y>
<width>145</width>
<height>18</height>
</rect>
</property>
@@ -695,13 +701,13 @@
<property name="geometry">
<rect>
<x>156</x>
<y>20</y>
<y>16</y>
<width>169</width>
<height>18</height>
</rect>
</property>
<property name="text">
<string>Add Spaces After/Before ()</string>
<string>Add Spaces After/ Before ()</string>
</property>
</widget>
</widget>
@@ -709,19 +715,22 @@
<property name="geometry">
<rect>
<x>8</x>
<y>232</y>
<y>272</y>
<width>333</width>
<height>125</height>
<height>85</height>
</rect>
</property>
<property name="title">
<string>GENERAL</string>
<string>General</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<widget class="QCheckBox" name="chkISCodeBlock">
<property name="geometry">
<rect>
<x>8</x>
<y>20</y>
<y>16</y>
<width>205</width>
<height>16</height>
</rect>
@@ -734,7 +743,7 @@
<property name="geometry">
<rect>
<x>8</x>
<y>40</y>
<y>32</y>
<width>205</width>
<height>18</height>
</rect>
@@ -747,7 +756,7 @@
<property name="geometry">
<rect>
<x>8</x>
<y>100</y>
<y>64</y>
<width>205</width>
<height>18</height>
</rect>
@@ -760,7 +769,7 @@
<property name="geometry">
<rect>
<x>8</x>
<y>60</y>
<y>48</y>
<width>205</width>
<height>18</height>
</rect>
@@ -770,23 +779,29 @@
</property>
</widget>
</widget>
<widget class="QGroupBox" name="groupBox_28">
<widget class="QGroupBox" name="grpISFunction">
<property name="geometry">
<rect>
<x>8</x>
<y>136</y>
<y>140</y>
<width>333</width>
<height>49</height>
<height>37</height>
</rect>
</property>
<property name="title">
<string>FUNCTION / PROCEDURE DECLARATION</string>
<string>Function Declaration</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<widget class="QCheckBox" name="chkISLocal">
<property name="geometry">
<rect>
<x>8</x>
<y>20</y>
<y>16</y>
<width>61</width>
<height>17</height>
</rect>
@@ -799,7 +814,7 @@
<property name="geometry">
<rect>
<x>80</x>
<y>20</y>
<y>16</y>
<width>70</width>
<height>17</height>
</rect>
@@ -812,8 +827,8 @@
<property name="geometry">
<rect>
<x>156</x>
<y>20</y>
<width>89</width>
<y>16</y>
<width>81</width>
<height>17</height>
</rect>
</property>
@@ -825,7 +840,7 @@
<property name="geometry">
<rect>
<x>240</x>
<y>20</y>
<y>16</y>
<width>89</width>
<height>17</height>
</rect>
@@ -835,6 +850,100 @@
</property>
</widget>
</widget>
<widget class="QGroupBox" name="grpISClass">
<property name="geometry">
<rect>
<x>8</x>
<y>180</y>
<width>333</width>
<height>53</height>
</rect>
</property>
<property name="title">
<string>Class Declaration</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<widget class="QComboBox" name="comboISData">
<property name="geometry">
<rect>
<x>8</x>
<y>28</y>
<width>61</width>
<height>19</height>
</rect>
</property>
</widget>
<widget class="QComboBox" name="comboISMethods">
<property name="geometry">
<rect>
<x>80</x>
<y>28</y>
<width>133</width>
<height>19</height>
</rect>
</property>
</widget>
<widget class="QLabel" name="label_37">
<property name="geometry">
<rect>
<x>8</x>
<y>12</y>
<width>61</width>
<height>16</height>
</rect>
</property>
<property name="text">
<string>Data Mem As</string>
</property>
</widget>
<widget class="QLabel" name="label_38">
<property name="geometry">
<rect>
<x>80</x>
<y>12</y>
<width>133</width>
<height>16</height>
</rect>
</property>
<property name="text">
<string>Initial Methods</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
<widget class="QComboBox" name="comboISFormat">
<property name="geometry">
<rect>
<x>224</x>
<y>28</y>
<width>101</width>
<height>19</height>
</rect>
</property>
</widget>
<widget class="QLabel" name="label_39">
<property name="geometry">
<rect>
<x>224</x>
<y>12</y>
<width>101</width>
<height>16</height>
</rect>
</property>
<property name="text">
<string>Method Format</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</widget>
</widget>
</widget>
<widget class="QWidget" name="pageSelections">