SmallSense__ClassPO.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Thu, 15 May 2014 14:41:52 +0100
changeset 212 a2caebc602a7
parent 210 1922d415c704
child 233 fb33bd6466a4
permissions -rw-r--r--
Fixes and improvements for Java/Groovy completion (part 1) * Better presentation of constructors. * Better alignment of completion window when completing packages / full class names.

"{ Package: 'jv:smallsense' }"

"{ NameSpace: SmallSense }"

PO subclass:#ClassPO
	instanceVariableNames:'showPrefix'
	classVariableNames:''
	poolDictionaries:''
	category:'SmallSense-Core-Interface-PO'
!


!ClassPO methodsFor:'accessing'!

icon

    icon ifNil:[icon := SystemBrowser iconForClass: subject].
    ^icon

    "Created: / 06-04-2011 / 23:36:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

klass
    ^ subject

    "Created: / 25-08-2013 / 13:07:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

klass: klass
    ^ subject := klass

    "Created: / 25-08-2013 / 13:07:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

name

    | nm |

    showPrefix ifTrue:[
        nm := subject name.
        (context notNil and:[subject isJavaClass]) ifTrue:[
            context language isJavaLike ifTrue:[
                nm := subject javaName
            ] ifFalse:[
                context language isSmalltalk ifTrue:[
                   nm := 'JAVA ' , (subject  binaryName copyReplaceAll: $/ with: Character space)
                 ]
            ]
        ].
    ] ifFalse:[
        nm := subject nameWithoutPrefix.
    ].
    ^nm

    "Created: / 26-08-2013 / 10:26:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 15-05-2014 / 07:28:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

showPrefix
    ^ showPrefix
!

showPrefix:aBoolean
    showPrefix := aBoolean.
!

stringAlreadyWritten
    "Answers a string already written in the textview"    

    subject isJavaClass ifTrue:[
        context language isSmalltalk ifTrue:[
            | rec |

            rec := context node .
            [ rec isUnaryMessage ] whileTrue:[
                rec := rec receiver.
            ].
            (rec isVariableNode and:['JAVA' startsWith: rec name]) ifTrue:[
                ^ context codeView contents asString copyFrom: rec startPosition to: context node endPosition
            ].
        ] ifFalse:[ 
        context language isJavaLike ifTrue:[
             ^ context wordBeforeCursorConsisitingOfCharactersMatching:[:c | c isAlphaNumeric or:['$_.' includes: c] ]
        ]].
    ].
    ^ super stringAlreadyWritten

    "Created: / 20-10-2013 / 02:46:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 15-05-2014 / 07:31:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

stringToCompleteForLanguage: language
    ^ (subject isJavaClass and:[language isSmalltalk]) ifTrue:[
        'JAVA ', (subject binaryName copyReplaceAll: $/ with: Character space)
    ] ifFalse:[
        super stringToCompleteForLanguage: language
    ].

    "Created: / 03-10-2013 / 16:42:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 20-10-2013 / 02:35:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

subject: aClass

    super subject: aClass.

    "Created: / 06-04-2011 / 21:02:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 03-10-2013 / 16:30:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!ClassPO methodsFor:'converting'!

asString
    ^subject isJavaClass ifTrue:[
        subject javaName
    ] ifFalse:[
        subject name
    ].

    "Created: / 04-04-2012 / 13:00:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 26-08-2013 / 10:27:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!ClassPO methodsFor:'displaying'!

displayLabel:aLabel h:lH on:aGC x:x y:y h:h
    | namespace y0 lw cnw fg |

    super displayLabel:aLabel h:lH on:aGC x:x y:y h:h.

    showPrefix ifFalse:[
        namespace := subject isJavaClass 
                        ifFalse:[subject  nameSpace name]
                        ifTrue:[subject javaPackage].
        (namespace notNil and:[namespace ~~ #Smalltalk]) ifTrue:[
            namespace := 'in ', namespace.
            lw :=  x + IconWidth + (aLabel widthOn: aGC).
            y0 := y - (lH + 1 - h // 2).
            y0 := y0 + (namespace ascentOn:aGC). 
            cnw := aGC widthOfString: namespace.

            (aGC width > (lw + cnw + 5)) ifTrue:[
                fg := aGC paint.
                aGC paint: (Color gray: 40).
                namespace displayOn:aGC x: aGC width - cnw - 5 y:y0.
                aGC paint: fg.
            ]
        ]
    ]

    "Created: / 18-09-2013 / 00:17:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

displayString
    ^ self name

    "Created: / 20-04-2012 / 18:19:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 26-08-2013 / 10:27:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!ClassPO methodsFor:'initialization'!

initialize
    "Invoked when a new instance is created."

    "/ please change as required (and remove this comment)
    "/ showPrefix := nil.

    super initialize.  
    showPrefix := false.

    "Modified: / 20-10-2013 / 02:38:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!ClassPO methodsFor:'testing'!

isSmallSenseClassPO
    ^ true
! !

!ClassPO class methodsFor:'documentation'!

version_HG

    ^ '$Changeset: <not expanded> $'
!

version_SVN
    ^ '$Id: SmallSense__ClassPO.st,v 1.2 2014/02/12 14:49:29 sr Exp $'
! !