CodeCompletionHelpView.st
author Claus Gittinger <cg@exept.de>
Wed, 13 Feb 2019 23:39:57 +0100
changeset 18587 dc3e84f464fc
parent 18449 12de5f12886f
child 18588 9790ae89ebee
permissions -rw-r--r--
#DOCUMENTATION by cg class: CodeCompletionHelpView changed: #installDelayedClose

"{ Encoding: utf8 }"

"
 COPYRIGHT (c) 2013 by Claus Gittinger
              All Rights Reserved

 This software is furnished under a license and may be used
 only in accordance with the terms of that license and with the
 inclusion of the above copyright notice.   This software may not
 be provided or otherwise made available to, or used by, any
 other person.  No title to or ownership of the software is
 hereby transferred.
"
"{ Package: 'stx:libtool' }"

"{ NameSpace: Smalltalk }"

View subclass:#CodeCompletionHelpView
	instanceVariableNames:'myView editView delayedCloseAction'
	classVariableNames:''
	poolDictionaries:''
	category:'Interface-Help'
!

!CodeCompletionHelpView class methodsFor:'documentation'!

copyright
"
 COPYRIGHT (c) 2013 by Claus Gittinger
              All Rights Reserved

 This software is furnished under a license and may be used
 only in accordance with the terms of that license and with the
 inclusion of the above copyright notice.   This software may not
 be provided or otherwise made available to, or used by, any
 other person.  No title to or ownership of the software is
 hereby transferred.
"
!

documentation
"
    used with code completion suggestions

    [author:]
        Claus Gittinger

    [See also:]
        ActiveHelp Workspace::CodeCompletionService
"
! !

!CodeCompletionHelpView class methodsFor:'instance creation'!

with:aView
    "create a talking-view wrapping some other view"

    ^ self new withView:aView

    "
     (ActiveHelpView with:(TextView new)) realize
     (ActiveHelpView with:(TextView new)) open
     (ActiveHelpView with:(Button label:'ok')) open
    "

    "Modified: 27.4.1996 / 15:14:18 / cg"
! !

!CodeCompletionHelpView methodsFor:'accessing'!

editView:aView
    editView := aView
!

withView:aView
    "set the component view"

    |fg|

    (aView isKindOf:Label) ifTrue:[
        aView viewBackground:viewBackground.
        aView backgroundColor:viewBackground.
        (fg := styleSheet colorAt:#'activeHelp.foregroundColor' default:nil) notNil ifTrue:[
            aView foregroundColor:fg.    
        ].
    ].
    self addSubView:aView.
    myView := aView.
    myView borderWidth:0.
    myView origin:(0.0@0.0) corner:(1.0@1.0).

    "Modified: 27.4.1996 / 15:16:46 / cg"
! !

!CodeCompletionHelpView methodsFor:'event handling'!

delayedClose
    self delayedUnmap

    "Created: / 05-08-2018 / 03:16:26 / Claus Gittinger"
!

delayedDestroy
    (subViews notEmptyOrNil) ifTrue:[
        self topView destroy
    ].
    ^ true

    "Created: / 04-08-2018 / 21:25:48 / Claus Gittinger"
!

delayedUnmap
    (subViews notEmptyOrNil) ifTrue:[
        self topView unmap
    ].
    ^ true

    "Created: / 05-08-2018 / 03:12:39 / Claus Gittinger"
!

focusOut
    self installDelayedClose.

    "Created: / 04-08-2018 / 10:41:59 / Claus Gittinger"
    "Modified: / 05-08-2018 / 03:12:58 / Claus Gittinger"
!

handlesButtonMotion:state inView:aView
    ^ false

    "Created: / 04-08-2018 / 16:55:09 / Claus Gittinger"
!

handlesButtonPress:state inView:aView
    ^ false

    "Created: / 04-08-2018 / 16:55:20 / Claus Gittinger"
!

handlesButtonRelease:state inView:aView
    ^ false

    "Created: / 04-08-2018 / 16:55:24 / Claus Gittinger"
!

handlesKeyPress:key inView:aView
    ^ true

    "Created: / 04-08-2018 / 16:54:44 / Claus Gittinger"
!

handlesKeyRelease:key inView:aView
    ^ false

    "Created: / 04-08-2018 / 16:54:54 / Claus Gittinger"
!

handlesPointerEnter:state inView:aView
    ^ true

    "Created: / 04-08-2018 / 16:55:49 / Claus Gittinger"
!

handlesPointerLeave:state inView:aView
    ^ true

    "Created: / 04-08-2018 / 16:55:53 / Claus Gittinger"
!

installDelayedClose
    delayedCloseAction notNil ifTrue:[
        Processor removeTimedBlock:delayedCloseAction.
    ].    
    delayedCloseAction := [ self delayedClose ]. 
    Processor addTimedBlock:delayedCloseAction for:nil after:0.5.

    "Created: / 05-08-2018 / 03:13:23 / Claus Gittinger"
    "Modified: / 13-02-2019 / 23:39:47 / Claus Gittinger"
!

keyPress:key x:x y:y view:aView
    key == #Escape ifTrue:[
        self delayedClose.
        ^ true.
    ].
    ( #( CursorUp CursorDown Return ) includes:key) ifFalse:[
        self installDelayedClose.
        ^ true.
    ].
    
"/    (subViews notNil and:[aView == (subViews firstIfEmpty:nil)]) ifTrue:[
"/        self topView destroy
"/    ].
    ^ false

    "Created: / 04-08-2018 / 17:00:33 / Claus Gittinger"
    "Modified: / 08-10-2018 / 08:36:52 / Claus Gittinger"
!

pointerEnter:state x:x y:y view:view
    delayedCloseAction notNil ifTrue:[
        Processor removeTimedBlock:delayedCloseAction.
    ].    
    ^ false

    "Created: / 04-08-2018 / 17:01:39 / Claus Gittinger"
!

pointerLeave:state view:view
    self installDelayedClose.
    ^ false

    "Created: / 04-08-2018 / 16:57:18 / Claus Gittinger"
    "Modified: / 05-08-2018 / 03:13:46 / Claus Gittinger"
! !

!CodeCompletionHelpView methodsFor:'initialization'!

initStyle
    "setup viewStyle specifics"

    <resource: #style (
                       "/ #'activeHelp.backgroundColor'
                       #'activeHelp.borderWidth'
                       "/ #'activeHelp.font'
                       )>

    |defaultFont|

    super initStyle.

"/    defaultFont := styleSheet fontAt:#'activeHelp.font' default:nil.
"/    defaultFont notNil ifTrue:[
"/        self font:defaultFont
"/    ].

    self borderWidth:(styleSheet at:#'activeHelp.borderWidth' default:1).

    "Modified: / 26.10.1997 / 17:02:09 / cg"
!

realize
    self create.
    "/ self computeShape.
    self enableMotionEvents.
    self enableButtonMotionEvents.
    self enableFocusEvents.
    self subViews do:[:eachView |
        eachView delegate:self.
    ].
    super realize

    "Modified: / 04-08-2018 / 16:53:13 / Claus Gittinger"
! !

!CodeCompletionHelpView methodsFor:'private'!

resizeToFit
    "resize myself to make the component view fit"

    |pref bw|

    pref := myView preferredExtent.
    myView extent:pref.
    bw := self borderWidth.
    self extent:(pref + (bw * 2)).
    myView origin:(bw asPoint).

    "Modified: 28.6.1997 / 14:23:49 / cg"
! !

!CodeCompletionHelpView methodsFor:'queries'!

isPopUpView
    "return true - I am a popUp type of view (no decoration, pop-to-top)"

    ^ true

    "Modified: 12.5.1996 / 21:58:12 / cg"
!

wantsFocusWithButtonPress
    "DEFINITELY not, because if we do so,
     the editView looses focus on click, and sends me to hell in its lost focus handling!!
     So I will be terminated by a buttonPress, before I get a chance to handle the buttonRelease
     (in which I fire my action)"

    ^ false
!

wantsFocusWithPointerEnter
    "DEFINITELY not, because if we do so,
     the editView looses focus on entry, and sends me to hell in its lost focus handling!!
     So I will be terminated by a motion"

    ^ false
! !

!CodeCompletionHelpView class methodsFor:'documentation'!

version
    ^ '$Header$'
!

version_CVS
    ^ '$Header$'
! !