WorkspaceCompletionSupport.st
author Claus Gittinger <cg@exept.de>
Fri, 06 Mar 2020 21:56:26 +0100
changeset 6843 6c5e543e903e
parent 6705 efea30a3e8e0
permissions -rw-r--r--
#OTHER by cg class: SimpleView added: #isWarningBox
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
6048
a57cf8f8b0f6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5996
diff changeset
     1
"
a57cf8f8b0f6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5996
diff changeset
     2
 COPYRIGHT (c) 2013 by eXept Software AG
a57cf8f8b0f6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5996
diff changeset
     3
              All Rights Reserved
a57cf8f8b0f6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5996
diff changeset
     4
a57cf8f8b0f6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5996
diff changeset
     5
 This software is furnished under a license and may be used
a57cf8f8b0f6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5996
diff changeset
     6
 only in accordance with the terms of that license and with the
a57cf8f8b0f6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5996
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
a57cf8f8b0f6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5996
diff changeset
     8
 be provided or otherwise made available to, or used by, any
a57cf8f8b0f6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5996
diff changeset
     9
 other person.  No title to or ownership of the software is
a57cf8f8b0f6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5996
diff changeset
    10
 hereby transferred.
a57cf8f8b0f6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5996
diff changeset
    11
"
4789
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    12
"{ Package: 'stx:libwidg' }"
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    13
5694
111c73cd9b4b #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 5097
diff changeset
    14
"{ NameSpace: Smalltalk }"
111c73cd9b4b #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 5097
diff changeset
    15
4789
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    16
EditTextViewCompletionSupport subclass:#WorkspaceCompletionSupport
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    17
	instanceVariableNames:''
6631
476a7030cebb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 6224
diff changeset
    18
	classVariableNames:'NumberOfCompletionSuggestionsShown'
4789
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    19
	poolDictionaries:''
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    20
	category:'Interface-Smalltalk'
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    21
!
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    22
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    23
!WorkspaceCompletionSupport class methodsFor:'documentation'!
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    24
6048
a57cf8f8b0f6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5996
diff changeset
    25
copyright
a57cf8f8b0f6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5996
diff changeset
    26
"
a57cf8f8b0f6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5996
diff changeset
    27
 COPYRIGHT (c) 2013 by eXept Software AG
a57cf8f8b0f6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5996
diff changeset
    28
              All Rights Reserved
a57cf8f8b0f6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5996
diff changeset
    29
a57cf8f8b0f6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5996
diff changeset
    30
 This software is furnished under a license and may be used
a57cf8f8b0f6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5996
diff changeset
    31
 only in accordance with the terms of that license and with the
a57cf8f8b0f6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5996
diff changeset
    32
 inclusion of the above copyright notice.   This software may not
a57cf8f8b0f6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5996
diff changeset
    33
 be provided or otherwise made available to, or used by, any
a57cf8f8b0f6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5996
diff changeset
    34
 other person.  No title to or ownership of the software is
a57cf8f8b0f6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5996
diff changeset
    35
 hereby transferred.
a57cf8f8b0f6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5996
diff changeset
    36
"
a57cf8f8b0f6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5996
diff changeset
    37
!
a57cf8f8b0f6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5996
diff changeset
    38
4789
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    39
documentation
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    40
"
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    41
    A completion support using DWIM to complete code for Smalltalk (and JavaScript)
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    42
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    43
    [author:]
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    44
        Claus Gittinger
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    45
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    46
    [instance variables:]
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    47
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    48
    [class variables:]
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    49
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    50
    [see also:]
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    51
        DoWhatIMeanSupport
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    52
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    53
"
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    54
! !
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    55
6631
476a7030cebb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 6224
diff changeset
    56
!WorkspaceCompletionSupport class methodsFor:'defaults'!
476a7030cebb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 6224
diff changeset
    57
476a7030cebb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 6224
diff changeset
    58
numberOfCompletionSuggestionsShown
476a7030cebb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 6224
diff changeset
    59
    "/ used to be 25, but that makes a long list, which seems disturbung
476a7030cebb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 6224
diff changeset
    60
    ^ NumberOfCompletionSuggestionsShown ? 15.
476a7030cebb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 6224
diff changeset
    61
476a7030cebb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 6224
diff changeset
    62
    "Created: / 15-07-2019 / 17:24:03 / Claus Gittinger"
476a7030cebb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 6224
diff changeset
    63
! !
476a7030cebb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 6224
diff changeset
    64
4789
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    65
!WorkspaceCompletionSupport methodsFor:'private'!
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    66
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    67
computeCompletions
6631
476a7030cebb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 6224
diff changeset
    68
    "compute completions (but do not show them)"
4789
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    69
5996
120d210b278d #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5723
diff changeset
    70
    |topView suggestions implementations actions contextOrNil|
4789
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    71
5996
120d210b278d #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5723
diff changeset
    72
    "/ a hack - we get better completions, if we know the current context
120d210b278d #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5723
diff changeset
    73
    topView := editView topView.
120d210b278d #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5723
diff changeset
    74
    (topView notNil and:[topView isDebugView]) ifTrue:[
120d210b278d #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5723
diff changeset
    75
        contextOrNil := topView selectedContext.
4789
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    76
    ].
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    77
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    78
    UserInformation ignoreIn:[
6130
c040bfbfde85 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 6048
diff changeset
    79
        DoWhatIMeanSupport new
c040bfbfde85 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 6048
diff changeset
    80
            setSelf: (editView simulatedSelf);
4802
a25143f6e512 Added codeAspect to EditTextView to signify what's being edited.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4789
diff changeset
    81
            codeCompletionFor: editView codeAspect
a25143f6e512 Added codeAspect to EditTextView to signify what's being edited.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4789
diff changeset
    82
            language: editView editedLanguage
4789
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    83
            method:editView editedMethod
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    84
            orClass:editView editedClass 
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    85
            context:contextOrNil 
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    86
            codeView:editView 
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    87
            into:[:listOfSuggestions :listOfActions :titleWhenAsking |
6130
c040bfbfde85 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 6048
diff changeset
    88
                    "/ (listOfSuggestions contains:[:l | l isEmptyOrNil]) ifTrue:[self halt].
4789
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    89
                    suggestions := listOfSuggestions collect:[:entry | entry isArray ifTrue:[entry first] ifFalse:[entry]].
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    90
                    implementations := listOfSuggestions collect:[:entry | entry isArray ifTrue:[entry second] ifFalse:[nil]].                            
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    91
                    actions := listOfActions.
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    92
                    nil "/ must return nil to avoid DWIM to do it itself (for now)
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    93
            ]
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    94
    ].
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    95
    "/ Transcript show:'suggestions: '; showCR:suggestions.
5047
091548040432 class: WorkspaceCompletionSupport
Claus Gittinger <cg@exept.de>
parents: 4870
diff changeset
    96
    "/ Transcript show:'actions: '; showCR:actions. 
6631
476a7030cebb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 6224
diff changeset
    97
    ^ {suggestions . implementations . actions . autoSelect }
4789
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    98
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    99
    "Created: / 26-09-2013 / 17:44:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
6130
c040bfbfde85 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 6048
diff changeset
   100
    "Modified: / 09-03-2017 / 10:48:44 / cg"
6631
476a7030cebb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 6224
diff changeset
   101
    "Modified (comment): / 15-07-2019 / 17:34:27 / Claus Gittinger"
4789
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   102
!
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   103
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   104
suggestionsArrived:suggestionsArg implementations:implementationsArg actions:actionsArg autoSelect:autoSelectArg
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   105
    "the background process has generated some suggestions"
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   106
5694
111c73cd9b4b #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 5097
diff changeset
   107
    |v numShown numFirst numLast numSkipped
6631
476a7030cebb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 6224
diff changeset
   108
     suggestions implementations actions suggestionOffsetDueToSnippets keyAndSnippet indexOfSnippet|
4789
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   109
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   110
    (editView sensor hasKeyPressEventFor:nil) ifTrue:[ 
6631
476a7030cebb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 6224
diff changeset
   111
        "/ self closeCompletionView. 
4789
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   112
        ^ self
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   113
    ].
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   114
6705
efea30a3e8e0 #UI_ENHANCEMENT by exept
Claus Gittinger <cg@exept.de>
parents: 6688
diff changeset
   115
    completionView isNil ifTrue:[
efea30a3e8e0 #UI_ENHANCEMENT by exept
Claus Gittinger <cg@exept.de>
parents: 6688
diff changeset
   116
        self openCompletionView:nil.
efea30a3e8e0 #UI_ENHANCEMENT by exept
Claus Gittinger <cg@exept.de>
parents: 6688
diff changeset
   117
    ].
efea30a3e8e0 #UI_ENHANCEMENT by exept
Claus Gittinger <cg@exept.de>
parents: 6688
diff changeset
   118
efea30a3e8e0 #UI_ENHANCEMENT by exept
Claus Gittinger <cg@exept.de>
parents: 6688
diff changeset
   119
    "/ if the completionView has been closed in the meantime
efea30a3e8e0 #UI_ENHANCEMENT by exept
Claus Gittinger <cg@exept.de>
parents: 6688
diff changeset
   120
    (v := completionView) isNil ifTrue: [
efea30a3e8e0 #UI_ENHANCEMENT by exept
Claus Gittinger <cg@exept.de>
parents: 6688
diff changeset
   121
        ^ self
efea30a3e8e0 #UI_ENHANCEMENT by exept
Claus Gittinger <cg@exept.de>
parents: 6688
diff changeset
   122
    ].
efea30a3e8e0 #UI_ENHANCEMENT by exept
Claus Gittinger <cg@exept.de>
parents: 6688
diff changeset
   123
4789
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   124
    implementations := implementationsArg.
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   125
    actions := actionsArg.
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   126
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   127
    suggestions := suggestionsArg ? #().
6224
051efa88ece4 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 6130
diff changeset
   128
    suggestions := suggestions reject:[:el | el isNil].  
051efa88ece4 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 6130
diff changeset
   129
6631
476a7030cebb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 6224
diff changeset
   130
    numShown := self class numberOfCompletionSuggestionsShown.
5694
111c73cd9b4b #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 5097
diff changeset
   131
    suggestions size > numShown ifTrue:[
6631
476a7030cebb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 6224
diff changeset
   132
        numFirst := numShown-3.    
476a7030cebb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 6224
diff changeset
   133
        numLast := 3.
6681
15155b2f3dc7 #WORKAROUND by exept
Claus Gittinger <cg@exept.de>
parents: 6658
diff changeset
   134
        numLast := 0.
6631
476a7030cebb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 6224
diff changeset
   135
        numSkipped := suggestions size-numShown.
476a7030cebb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 6224
diff changeset
   136
476a7030cebb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 6224
diff changeset
   137
        suggestions := (suggestions copyTo:numShown-numLast) 
6688
e2c2e797ab21 #OTHER by exept
Claus Gittinger <cg@exept.de>
parents: 6681
diff changeset
   138
                        , { ('<< %1 more skipped >>' bindWith:numSkipped) allGray }  
6631
476a7030cebb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 6224
diff changeset
   139
                        , (suggestions copyLast:numLast).
476a7030cebb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 6224
diff changeset
   140
        implementations isSequenceable ifTrue:[ 
476a7030cebb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 6224
diff changeset
   141
            implementations := (implementations copyTo:numShown-numLast),#(nil),(implementations copyLast:numLast).
476a7030cebb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 6224
diff changeset
   142
        ] ifFalse:[
476a7030cebb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 6224
diff changeset
   143
            self halt
476a7030cebb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 6224
diff changeset
   144
        ].    
476a7030cebb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 6224
diff changeset
   145
        actions isSequenceable ifTrue:[ 
476a7030cebb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 6224
diff changeset
   146
            actions := (actions copyTo:numShown-numLast),#(nil),(actions copyLast:numLast).
476a7030cebb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 6224
diff changeset
   147
        ] ifFalse:[
6681
15155b2f3dc7 #WORKAROUND by exept
Claus Gittinger <cg@exept.de>
parents: 6658
diff changeset
   148
"/            actions isBlock ifTrue:[
15155b2f3dc7 #WORKAROUND by exept
Claus Gittinger <cg@exept.de>
parents: 6658
diff changeset
   149
"/                "/ the block will be called with the index of the selected completion;
15155b2f3dc7 #WORKAROUND by exept
Claus Gittinger <cg@exept.de>
parents: 6658
diff changeset
   150
"/                "/ this is now wrong, as we have changed the list!!.
15155b2f3dc7 #WORKAROUND by exept
Claus Gittinger <cg@exept.de>
parents: 6658
diff changeset
   151
"/                "/ wrap the block by an index-adjusting action
6631
476a7030cebb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 6224
diff changeset
   152
"/                actions := [:selectedIndex |
476a7030cebb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 6224
diff changeset
   153
"/                                |adjustedIndex|
476a7030cebb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 6224
diff changeset
   154
"/
476a7030cebb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 6224
diff changeset
   155
"/                                selectedIndex <= numShown ifTrue:[
476a7030cebb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 6224
diff changeset
   156
"/                                    adjustedIndex := selectedIndex
476a7030cebb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 6224
diff changeset
   157
"/                                ] ifFalse:[
476a7030cebb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 6224
diff changeset
   158
"/                                    adjustedIndex := selectedIndex + numSkipped.
476a7030cebb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 6224
diff changeset
   159
"/                                ].  
476a7030cebb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 6224
diff changeset
   160
"/                                actionsArg value:adjustedIndex.
476a7030cebb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 6224
diff changeset
   161
"/                           ].     
6681
15155b2f3dc7 #WORKAROUND by exept
Claus Gittinger <cg@exept.de>
parents: 6658
diff changeset
   162
"/            ] ifFalse:[
15155b2f3dc7 #WORKAROUND by exept
Claus Gittinger <cg@exept.de>
parents: 6658
diff changeset
   163
"/                self halt
15155b2f3dc7 #WORKAROUND by exept
Claus Gittinger <cg@exept.de>
parents: 6658
diff changeset
   164
"/            ].    
6631
476a7030cebb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 6224
diff changeset
   165
        ].    
4789
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   166
    ].
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   167
6705
efea30a3e8e0 #UI_ENHANCEMENT by exept
Claus Gittinger <cg@exept.de>
parents: 6688
diff changeset
   168
    "/ append snippet, if any (can be easily reached via CRSR-up)
6631
476a7030cebb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 6224
diff changeset
   169
    suggestionOffsetDueToSnippets := 0.
4789
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   170
    indexOfSnippet := nil.
4870
2714e7b0261e class: WorkspaceCompletionSupport
Claus Gittinger <cg@exept.de>
parents: 4810
diff changeset
   171
    UserPreferences current appendAbbreviationsToCompletionSuggestions ifTrue:[
2714e7b0261e class: WorkspaceCompletionSupport
Claus Gittinger <cg@exept.de>
parents: 4810
diff changeset
   172
        (keyAndSnippet := editView findAbbreviationKeyBeforeCursor) notNil ifTrue:[
2714e7b0261e class: WorkspaceCompletionSupport
Claus Gittinger <cg@exept.de>
parents: 4810
diff changeset
   173
            |abbrev sniplet i line|
4789
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   174
4870
2714e7b0261e class: WorkspaceCompletionSupport
Claus Gittinger <cg@exept.de>
parents: 4810
diff changeset
   175
            abbrev := keyAndSnippet first.
2714e7b0261e class: WorkspaceCompletionSupport
Claus Gittinger <cg@exept.de>
parents: 4810
diff changeset
   176
            sniplet := keyAndSnippet second.
2714e7b0261e class: WorkspaceCompletionSupport
Claus Gittinger <cg@exept.de>
parents: 4810
diff changeset
   177
2714e7b0261e class: WorkspaceCompletionSupport
Claus Gittinger <cg@exept.de>
parents: 4810
diff changeset
   178
            "/ if the abbreviation is simply at the end of a longer word, ignore the abbrev.
2714e7b0261e class: WorkspaceCompletionSupport
Claus Gittinger <cg@exept.de>
parents: 4810
diff changeset
   179
            line := editView lineStringBeforeCursor.
2714e7b0261e class: WorkspaceCompletionSupport
Claus Gittinger <cg@exept.de>
parents: 4810
diff changeset
   180
            i := line findLast:[:ch | ch isLetterOrDigit not].
2714e7b0261e class: WorkspaceCompletionSupport
Claus Gittinger <cg@exept.de>
parents: 4810
diff changeset
   181
            (i < (line size - abbrev size - 1)) ifFalse:[
2714e7b0261e class: WorkspaceCompletionSupport
Claus Gittinger <cg@exept.de>
parents: 4810
diff changeset
   182
                sniplet := sniplet copyWithout:$!!.
4789
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   183
4870
2714e7b0261e class: WorkspaceCompletionSupport
Claus Gittinger <cg@exept.de>
parents: 4810
diff changeset
   184
                "/ true, false and self are often found in both lists
2714e7b0261e class: WorkspaceCompletionSupport
Claus Gittinger <cg@exept.de>
parents: 4810
diff changeset
   185
                (suggestions includes:sniplet) ifFalse:[   
2714e7b0261e class: WorkspaceCompletionSupport
Claus Gittinger <cg@exept.de>
parents: 4810
diff changeset
   186
                    suggestions isEmpty ifFalse:[ suggestions := suggestions copyWith: '-' ]. 
2714e7b0261e class: WorkspaceCompletionSupport
Claus Gittinger <cg@exept.de>
parents: 4810
diff changeset
   187
                    suggestions := suggestions copyWith: ( '%1 %2'
2714e7b0261e class: WorkspaceCompletionSupport
Claus Gittinger <cg@exept.de>
parents: 4810
diff changeset
   188
                                            bindWith:(sniplet asStringCollection first "contractTo:25")
6688
e2c2e797ab21 #OTHER by exept
Claus Gittinger <cg@exept.de>
parents: 6681
diff changeset
   189
                                            with: ( ('("',abbrev,'" snippet)') allGray)).
4870
2714e7b0261e class: WorkspaceCompletionSupport
Claus Gittinger <cg@exept.de>
parents: 4810
diff changeset
   190
                    indexOfSnippet := suggestions size.
4789
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   191
6631
476a7030cebb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 6224
diff changeset
   192
                    "/ change below, when reversing the order in above code (i.e. when snippets come first)
476a7030cebb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 6224
diff changeset
   193
                    "/ suggestionOffsetDueToSnippets := 2.
4870
2714e7b0261e class: WorkspaceCompletionSupport
Claus Gittinger <cg@exept.de>
parents: 4810
diff changeset
   194
                ]
4789
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   195
            ]
4870
2714e7b0261e class: WorkspaceCompletionSupport
Claus Gittinger <cg@exept.de>
parents: 4810
diff changeset
   196
        ].
4789
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   197
    ].
4870
2714e7b0261e class: WorkspaceCompletionSupport
Claus Gittinger <cg@exept.de>
parents: 4810
diff changeset
   198
4789
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   199
    suggestions isEmptyOrNil ifTrue:[
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   200
        self closeCompletionView.
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   201
        ^ self
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   202
    ].
6705
efea30a3e8e0 #UI_ENHANCEMENT by exept
Claus Gittinger <cg@exept.de>
parents: 6688
diff changeset
   203
    (v == completionView) ifFalse: [
efea30a3e8e0 #UI_ENHANCEMENT by exept
Claus Gittinger <cg@exept.de>
parents: 6688
diff changeset
   204
        "/ the completionView has been closed in the meantime
4789
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   205
        ^ self
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   206
    ].
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   207
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   208
    v sensor
6705
efea30a3e8e0 #UI_ENHANCEMENT by exept
Claus Gittinger <cg@exept.de>
parents: 6688
diff changeset
   209
        pushAction:[
4789
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   210
            |top idx preselectIdx performCompletion|
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   211
6705
efea30a3e8e0 #UI_ENHANCEMENT by exept
Claus Gittinger <cg@exept.de>
parents: 6688
diff changeset
   212
            "/ if the completionView has not been closed in the meantime
4789
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   213
            (v == completionView) ifTrue: [
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   214
                top := v topView.
4810
c273ec93c680 class: WorkspaceCompletionSupport
Claus Gittinger <cg@exept.de>
parents: 4809
diff changeset
   215
                autoSelectArg ifTrue:[
c273ec93c680 class: WorkspaceCompletionSupport
Claus Gittinger <cg@exept.de>
parents: 4809
diff changeset
   216
                    LastCompletions notNil ifTrue:[
c273ec93c680 class: WorkspaceCompletionSupport
Claus Gittinger <cg@exept.de>
parents: 4809
diff changeset
   217
                        "/ one of the last completions in list?
c273ec93c680 class: WorkspaceCompletionSupport
Claus Gittinger <cg@exept.de>
parents: 4809
diff changeset
   218
                        idx := LastCompletions findFirst:[:compl | suggestions includes:compl].
c273ec93c680 class: WorkspaceCompletionSupport
Claus Gittinger <cg@exept.de>
parents: 4809
diff changeset
   219
                        idx ~~ 0 ifTrue:[
c273ec93c680 class: WorkspaceCompletionSupport
Claus Gittinger <cg@exept.de>
parents: 4809
diff changeset
   220
                            preselectIdx := suggestions indexOf:(LastCompletions at:idx).
c273ec93c680 class: WorkspaceCompletionSupport
Claus Gittinger <cg@exept.de>
parents: 4809
diff changeset
   221
                        ].
4789
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   222
                    ].
4810
c273ec93c680 class: WorkspaceCompletionSupport
Claus Gittinger <cg@exept.de>
parents: 4809
diff changeset
   223
                    (preselectIdx isNil and:[suggestions size == 1]) ifTrue:[
c273ec93c680 class: WorkspaceCompletionSupport
Claus Gittinger <cg@exept.de>
parents: 4809
diff changeset
   224
                        preselectIdx := 1.
c273ec93c680 class: WorkspaceCompletionSupport
Claus Gittinger <cg@exept.de>
parents: 4809
diff changeset
   225
                    ].
4789
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   226
                ].
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   227
                preselectIdx notNil ifTrue:[
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   228
                    |pref|
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   229
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   230
                    pref := suggestions at:preselectIdx.
4807
8f6cd2048807 class: WorkspaceCompletionSupport
Claus Gittinger <cg@exept.de>
parents: 4806
diff changeset
   231
                    pref notNil ifTrue:[
8f6cd2048807 class: WorkspaceCompletionSupport
Claus Gittinger <cg@exept.de>
parents: 4806
diff changeset
   232
                        "/ for now, do not move to front (action needs the index)
8f6cd2048807 class: WorkspaceCompletionSupport
Claus Gittinger <cg@exept.de>
parents: 4806
diff changeset
   233
                        suggestions at:preselectIdx put:(pref allBold).
4789
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   234
"/                    suggestions removeAtIndex:preselectIdx.                    
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   235
"/                    suggestions addFirst:(pref allBold).
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   236
"/                    implementations notNil ifTrue:[
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   237
"/                        implementations removeAtIndex:preselectIdx.
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   238
"/                        implementations addFirst:implementations.
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   239
"/                    ]
4807
8f6cd2048807 class: WorkspaceCompletionSupport
Claus Gittinger <cg@exept.de>
parents: 4806
diff changeset
   240
                    ].
4789
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   241
                ].
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   242
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   243
                performCompletion :=
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   244
                    [:selectedListIndex | 
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   245
                        self closeCompletionView.
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   246
                        (selectedListIndex == indexOfSnippet) ifTrue:[
6631
476a7030cebb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 6224
diff changeset
   247
                            "/ replace by the sniplet
4789
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   248
                            editView sensor pushUserEvent:#expandAbbreviation for:editView
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   249
                        ] ifFalse:[
6631
476a7030cebb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 6224
diff changeset
   250
                            |indexInSuggestions|
476a7030cebb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 6224
diff changeset
   251
476a7030cebb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 6224
diff changeset
   252
                            indexInSuggestions := selectedListIndex - suggestionOffsetDueToSnippets.
4789
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   253
                            LastCompletions isNil ifTrue:[
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   254
                                LastCompletions := OrderedCollection new.
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   255
                            ].
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   256
                            LastCompletions add:(suggestions at:indexInSuggestions).
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   257
                            LastCompletions size > 200 ifTrue:[
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   258
                                LastCompletions removeLast
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   259
                            ].
5694
111c73cd9b4b #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 5097
diff changeset
   260
                            
4789
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   261
                            actions notNil ifTrue:[
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   262
                                actions isBlock ifTrue:[
5694
111c73cd9b4b #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 5097
diff changeset
   263
                                    (numFirst notNil and:[indexInSuggestions > numFirst]) ifTrue:[
111c73cd9b4b #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 5097
diff changeset
   264
                                        indexInSuggestions := indexInSuggestions + numSkipped - 1.
111c73cd9b4b #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 5097
diff changeset
   265
                                    ].    
4789
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   266
                                    actions value:indexInSuggestions
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   267
                                ] ifFalse:[
5711
79fed9b84afe #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 5695
diff changeset
   268
                                    (actions at:indexInSuggestions) valueWithOptionalArgument:indexInSuggestions
4789
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   269
                                ].
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   270
                            ].
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   271
                        ].
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   272
                        "/ disabled - user has made his choice; so don't show more suggestions
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   273
                        "/ editView sensor pushUserEvent:#updateCompletionList for:self
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   274
                    ].
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   275
4809
d4cc6e25b3d3 class: WorkspaceCompletionSupport
Claus Gittinger <cg@exept.de>
parents: 4807
diff changeset
   276
                (autoSelectArg 
d4cc6e25b3d3 class: WorkspaceCompletionSupport
Claus Gittinger <cg@exept.de>
parents: 4807
diff changeset
   277
                    and:[ (suggestions size == 1) 
d4cc6e25b3d3 class: WorkspaceCompletionSupport
Claus Gittinger <cg@exept.de>
parents: 4807
diff changeset
   278
                    and:[ preselectIdx == 1
d4cc6e25b3d3 class: WorkspaceCompletionSupport
Claus Gittinger <cg@exept.de>
parents: 4807
diff changeset
   279
                    and:[ preselectIdx ~~ indexOfSnippet ]]]) ifTrue:[
4789
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   280
                    "/ do it, right here and now
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   281
                    performCompletion value:preselectIdx.
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   282
                ] ifFalse:[
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   283
                    top open.
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   284
                    v list:suggestions 
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   285
                            expandTabs:false scanForNonStrings:false
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   286
                            includesNonStrings:false redraw:true.
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   287
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   288
                    implementations notNil ifTrue:[
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   289
                        implementations keysAndValuesDo:[:idx :impls |
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   290
                            |implsMenu|
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   291
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   292
                            impls notEmptyOrNil ifTrue:[
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   293
                                implsMenu := Menu new.
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   294
                                impls do:[:each |
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   295
                                    implsMenu addItem:(MenuItem new label:each name).
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   296
                                ].
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   297
                                v subMenuAt:idx put:implsMenu
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   298
                            ].
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   299
                        ].
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   300
                    ].
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   301
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   302
                    v enable:true.
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   303
                    preselectIdx notNil ifTrue:[
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   304
                        "/ very disturbing!!
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   305
                        v selection:preselectIdx.
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   306
                    ].
6705
efea30a3e8e0 #UI_ENHANCEMENT by exept
Claus Gittinger <cg@exept.de>
parents: 6688
diff changeset
   307
                    "/ v extent:completionView preferredExtentForContents.
4789
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   308
                    v action:performCompletion.
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   309
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   310
                    (top ~~ v) ifTrue:[
6705
efea30a3e8e0 #UI_ENHANCEMENT by exept
Claus Gittinger <cg@exept.de>
parents: 6688
diff changeset
   311
                        self adjustSizeOfCompletionView:top.
efea30a3e8e0 #UI_ENHANCEMENT by exept
Claus Gittinger <cg@exept.de>
parents: 6688
diff changeset
   312
"/                        top resizeToFit.
efea30a3e8e0 #UI_ENHANCEMENT by exept
Claus Gittinger <cg@exept.de>
parents: 6688
diff changeset
   313
"/                        top bottom > v device usableHeight ifTrue:[
efea30a3e8e0 #UI_ENHANCEMENT by exept
Claus Gittinger <cg@exept.de>
parents: 6688
diff changeset
   314
"/                            top origin:((top origin x) @ (v device usableHeight - v height)).
efea30a3e8e0 #UI_ENHANCEMENT by exept
Claus Gittinger <cg@exept.de>
parents: 6688
diff changeset
   315
"/                        ].
4789
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   316
                        top raise.
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   317
                    ]
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   318
                ]
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   319
            ]
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   320
        ]
6224
051efa88ece4 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 6130
diff changeset
   321
051efa88ece4 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 6130
diff changeset
   322
    "Modified: / 05-11-2017 / 11:10:47 / cg"
6631
476a7030cebb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 6224
diff changeset
   323
    "Modified: / 15-07-2019 / 17:57:56 / Claus Gittinger"
4789
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   324
! !
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   325
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   326
!WorkspaceCompletionSupport class methodsFor:'documentation'!
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   327
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   328
version
5694
111c73cd9b4b #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 5097
diff changeset
   329
    ^ '$Header$'
4789
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   330
!
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   331
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   332
version_CVS
5694
111c73cd9b4b #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 5097
diff changeset
   333
    ^ '$Header$'
4789
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   334
! !
8bc0605911b2 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   335