Tools__ClassSearchDialog.st
author Stefan Vogel <sv@exept.de>
Fri, 17 May 2019 17:11:44 +0200
changeset 18767 0478d93cdb75
parent 17612 d5af388ae1aa
permissions -rw-r--r--
#REFACTORING by stefan Sanitize BlockValues class: Tools::Inspector2 changed: #toolbarBackgroundHolder
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
17612
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     1
"{ Package: 'stx:libtool' }"
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     2
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
"{ NameSpace: Tools }"
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
Object subclass:#ClassSearchDialog
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
	instanceVariableNames:'browser resources classFilter classNamesInChangeSet
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     7
		visitedShortNames visitedFullNames reallyAllClasses allClasses
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
		classNameHolder onlyShowJavaClassesHolder showFullNameHolder
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
		doFuzzyMatchHolder allNames allFullNames allClassesByFullName
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
		setOfClassNamesInChangeSet showingWhatLabel okText box'
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    11
	classVariableNames:'LastClassSearchBoxShowedFullName LastClassSearchBoxShowedJavaOnly
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
		LastClassSearchUsedFuzzyCompare'
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
	poolDictionaries:''
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
	category:'Interface-Browsers-Support'
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
!
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
!ClassSearchDialog class methodsFor:'documentation'!
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
documentation
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
"
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
    code extracted from SystemBrowser class,
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
    to make it easier to refactor and to reuse.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
"
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
! !
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
!ClassSearchDialog methodsFor:'asking'!
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    27
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    28
askForClassToSearch:doWhatByDefault single:singleClass msgTail:msgTail resources:resourcesOrNil filter:filterOrNil forBrowser:aBrowserOrNil thenDo:aBlock
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    29
    "utility common code for both opening a new browser on a class and
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
     to search for a class in an existing browser.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    31
     If singleClass is true, a single class will be asked for and browsed,
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    32
     otherwise, a match pattern is allowed and a multi-class browser is opened.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    33
     Moved from instance protocol for better reusability."
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    34
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    35
    |boxLabel title okText2 okText3 okText4 className canFind
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    36
     button2 button3 button4 doWhat doWhat2 doWhat3 doWhat4 check 
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
     navigationState enableFuzzyHolder|
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
    classFilter := filterOrNil. 
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
    self getResourcesFrom:resourcesOrNil orBrowser:aBrowserOrNil.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
    showFullNameHolder := (LastClassSearchBoxShowedFullName ? false) asValue.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
    onlyShowJavaClassesHolder := (LastClassSearchBoxShowedJavaOnly ? false) asValue.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
    doFuzzyMatchHolder := (LastClassSearchUsedFuzzyCompare ? false) asValue.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
    enableFuzzyHolder := true asValue. 
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
    
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
    aBrowserOrNil notNil ifTrue:[ navigationState := aBrowserOrNil navigationState].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
    doWhat := doWhatByDefault.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
    canFind := navigationState notNil and:[ navigationState isFullBrowser ].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
    (doWhat isNil or:[aBrowserOrNil isNil]) ifTrue:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
        title := 'Select a class'.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
        boxLabel := 'Select a class'.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
        okText := 'OK'.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
        okText2 := nil. doWhat2 := nil.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
        okText3 := nil. doWhat3 := nil.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
        okText4 := nil. doWhat4 := nil.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
    ] ifFalse:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
        title := (singleClass ifTrue:[ 'Class to browse' ] ifFalse:[ 'Class(es) to browse' ]).
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
        boxLabel := 'Browse or Search'.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
        (doWhat isNil and:[canFind not]) ifTrue:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
            doWhat := #newBuffer.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
        ].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    66
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
        doWhat == #newBrowser ifTrue:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
            okText := 'Open'.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
            okText2 := 'Add Buffer'. doWhat2 := #newBuffer.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
            okText3 := 'Open All'.   doWhat3 := #newBrowserForAll.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    71
            okText4 := 'Find'.       doWhat4 := nil.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
        ] ifFalse:[ doWhat == #newBuffer ifTrue:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    73
            okText := 'Add Buffer'.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
            okText2 := 'Open New'.   doWhat2 := #newBrowser.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
            okText3 := 'Open All'.   doWhat3 := #newBrowserForAll.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
            okText4 := 'Find'.       doWhat4 := nil.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
        ] ifFalse:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
            title := (singleClass ifTrue:[ 'Class to find' ] ifFalse:[ 'Class(es) to find' ]).
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    79
            okText := 'Find'.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    80
            okText2 := 'Open New'.   doWhat2 := #newBrowser.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    81
            okText3 := 'Open All'.   doWhat3 := #newBrowserForAll.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    82
            okText4 := 'Add Buffer'. doWhat4 := #newBuffer.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    83
        ]].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    84
    ].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    85
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
    self getClassNamesInChangeSet.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    87
    self getVisitedNames.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
    self getAllClasses.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    89
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    90
    self createDialogBox:msgTail title:title label:boxLabel.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    91
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    92
    doWhat notNil ifTrue:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    93
        button2 := Button label:(resources string:okText2).
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    94
        (navigationState notNil and:[navigationState isFullBrowser]) "singleClass" ifTrue:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    95
            button3 := Button label:(resources string:okText3).
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    96
            button4 := Button label:(resources string:okText4).
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    97
        ].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    98
        box addButton:button2 after:(box okButton).
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    99
        button3 notNil ifTrue:[box addButton:button3 after:button2].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   100
        button4 notNil ifTrue:[box addButton:button4 after:button3].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   101
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   102
        button2
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   103
            action:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   104
                doWhat := doWhat2.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   105
                box doAccept; okPressed.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   106
            ].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   107
        button3 notNil ifTrue:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   108
            button3
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   109
                action:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   110
                    doWhat := doWhat3.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   111
                    box doAccept; okPressed.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   112
                ].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   113
        ].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   114
        button4 notNil ifTrue:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   115
            button4
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   116
                action:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   117
                    doWhat := doWhat4.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   118
                    box doAccept; okPressed.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   119
                ].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   120
        ].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   121
    ].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   122
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   123
    classNameHolder := '' asValue.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   124
    box enterField model:classNameHolder; immediateAccept:true.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   125
    classNameHolder onChangeEvaluate:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   126
        enableFuzzyHolder value:(classNameHolder value includesMatchCharacters not).
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   127
        self updateList
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   128
    ].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   129
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   130
    box entryCompletionBlock:(DoWhatIMeanSupport classNameEntryCompletionBlock).
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   131
    box action:[:aString | className := aString ].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   132
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   133
    box panelView
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   134
        addSubView:(showingWhatLabel := (Label label:(resources string:'Recently Visited:')) adjust:#left) before:nil.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   135
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   136
    (JavaVM notNil and:[JavaVM isLoaded]) ifTrue:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   137
        box panelView
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   138
            addSubView:(check := CheckBox label:(resources string:'Only show Java Classes') model:onlyShowJavaClassesHolder) before:nil.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   139
    ].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   140
    box panelView
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   141
        addSubView:(check := CheckBox label:(resources string:'Show Full Name (do not Strip off Namespace)') model:showFullNameHolder) before:nil.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   142
    box panelView
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   143
        addSubView:(check := CheckBox label:(resources string:'Fuzzy Match (Instead of Substring Search)') model:doFuzzyMatchHolder) before:nil.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   144
    check enableChannel:enableFuzzyHolder.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   145
    
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   146
    doFuzzyMatchHolder onChangeEvaluate:[self updateList].   
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   147
    showFullNameHolder onChangeEvaluate:[self updateList].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   148
    onlyShowJavaClassesHolder onChangeEvaluate:[ self getAllClasses. self updateList].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   149
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   150
"/    box enterField 
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   151
"/        onKey:#CursorDown leaveWith:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   152
"/            |listView|
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   153
"/            
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   154
"/            listView := box listView.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   155
"/            listView windowGroup focusView:listView byTab:true.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   156
"/            listView hasSelection ifFalse:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   157
"/                listView selectFirst
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   158
"/            ] ifTrue:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   159
"/                listView selectNext
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   160
"/            ].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   161
"/        ].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   162
    box enterField 
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   163
        origin:(0 @ check corner y).
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   164
    box listView origin:(0 @ check corner y).
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   165
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   166
    box extent:(400 @ 550).
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   167
    box open.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   168
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   169
    className isEmptyOrNil ifTrue:[^ nil "cancel"].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   170
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   171
    LastClassSearchBoxShowedFullName := showFullNameHolder value.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   172
    LastClassSearchBoxShowedJavaOnly := onlyShowJavaClassesHolder value.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   173
    LastClassSearchUsedFuzzyCompare := doFuzzyMatchHolder value.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   174
    
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   175
    (className endsWith:$) ) ifTrue:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   176
        (className indexOfSubCollection:'(in ') == 0 ifTrue:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   177
            "/ a namespace
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   178
            className := (className copyTo:(className indexOfSubCollection:'(Name')-1) withoutSeparators
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   179
        ] ifFalse:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   180
            className := ((className copyFrom:(className indexOfSubCollection:'(in ')+4)
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   181
                            copyButLast)
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   182
                         , '::' , className asCollectionOfWords first
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   183
        ].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   184
        ((className startsWith:'JAVA::') and:[className includes:$.]) ifTrue:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   185
            className := className copyReplaceString:'.' withString:'::'
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   186
        ].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   187
    ].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   188
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   189
    (doWhat isNil or:[aBrowserOrNil isNil]) ifTrue:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   190
        aBlock notNil ifTrue:[aBlock value:className optionalArgument:singleClass and:doWhat].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   191
        ^ className
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   192
    ].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   193
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   194
    aBrowserOrNil withSearchCursorDo:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   195
        aBlock value:className value:singleClass value:doWhat.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   196
    ].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   197
    ^ className
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   198
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   199
    "Created: / 03-08-2017 / 12:25:45 / cg"
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   200
    "Modified: / 04-08-2017 / 13:02:36 / cg"
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   201
!
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   202
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   203
old_askForClassToSearch:doWhatByDefault single:singleClass msgTail:msgTail resources:resourcesOrNil filter:filterOrNil forBrowser:aBrowserOrNil thenDo:aBlock
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   204
    "utility common code for both opening a new browser on a class and
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   205
     to search for a class in an existing browser.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   206
     If singleClass is true, a single class will be asked for and browsed,
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   207
     otherwise, a match pattern is allowed and a multi-class browser is opened.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   208
     Moved from instance protocol for better reusability."
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   209
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   210
    "
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   211
     self new 
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   212
        old_askForClassToSearch:doWhatByDefault 
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   213
        single:singleClass 
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   214
        msgTail:msgTail 
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   215
        resources:resourcesOrNil 
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   216
        filter:filterOrNil 
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   217
        forBrowser:aBrowserOrNil 
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   218
        thenDo:aBlock
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   219
    "
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   220
    
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   221
    |className doWhat updateList check  |
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   222
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   223
    classFilter := filterOrNil.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   224
    self getResourcesFrom:resourcesOrNil orBrowser:aBrowserOrNil.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   225
    
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   226
    showFullNameHolder := (LastClassSearchBoxShowedFullName ? false) asValue.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   227
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   228
    doWhat := doWhatByDefault.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   229
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   230
    okText := 'OK'.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   231
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   232
    self getClassNamesInChangeSet.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   233
    self getVisitedNames.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   234
    self getAllClasses.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   235
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   236
    self createDialogBox:msgTail title:'Select a class' label:'Select a class'.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   237
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   238
    updateList := [ self halt. self updateList ].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   239
"/    updateList := [
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   240
"/            |nameToSearch list namesStarting namesIncluding lcName nameList|
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   241
"/
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   242
"/            (nameToSearch := classNameHolder value withoutSeparators) isEmpty ifTrue:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   243
"/                showingWhatLabel label:(resources string:'Recently visited:').
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   244
"/                list := (showFullNameHolder value ifTrue:[visitedFullNames] ifFalse:[visitedShortNames]).
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   245
"/            ] ifFalse:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   246
"/                showingWhatLabel label:(resources string:'Matching classes:').
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   247
"/                nameList := showFullNameHolder value
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   248
"/                                ifTrue:[ allFullNames ]
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   249
"/                                ifFalse:[ allNames ].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   250
"/
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   251
"/                lcName := nameToSearch asLowercase.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   252
"/                (lcName includesString:'::') ifTrue:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   253
"/                    list := OrderedCollection new.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   254
"/                    allClasses doWithIndex:[:cls :idx |
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   255
"/                        |isIncluded|
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   256
"/
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   257
"/                        (nameToSearch includesMatchCharacters) ifTrue:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   258
"/                            isIncluded := (lcName match:cls name asLowercase)
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   259
"/                        ] ifFalse:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   260
"/                            isIncluded := (cls name includesString:lcName caseSensitive:false)
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   261
"/                        ].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   262
"/                        isIncluded ifTrue:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   263
"/                            list add:(nameList at:idx)
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   264
"/                        ].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   265
"/                    ].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   266
"/                ] ifFalse:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   267
"/                    (nameToSearch includesMatchCharacters) ifTrue:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   268
"/                        list := nameList select:[:nm | lcName match:nm asLowercase]
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   269
"/                    ] ifFalse:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   270
"/                        namesIncluding := nameList
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   271
"/                                            select:[:nm |
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   272
"/                                                "/ nm asLowercase startsWith:lcName
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   273
"/                                                nm asLowercase includesString:lcName caseSensitive:false
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   274
"/                                            ].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   275
"/                        namesStarting := namesIncluding select:[:nm | nm asLowercase startsWith:lcName].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   276
"/                        list := namesStarting , {nil} , (namesIncluding \ namesStarting).
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   277
"/                    ]
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   278
"/                ]
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   279
"/            ].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   280
"/            box listView
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   281
"/                list:list;
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   282
"/                scrollToLine:((list findFirst:[:line | (line ? '') startsWith:lcName]) max:1)
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   283
"/        ].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   284
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   285
    classNameHolder := '' asValue.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   286
    box enterField model:classNameHolder; immediateAccept:true.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   287
    classNameHolder onChangeEvaluate:updateList.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   288
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   289
    box entryCompletionBlock:(DoWhatIMeanSupport classNameEntryCompletionBlock).
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   290
    box action:[:aString | className := aString].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   291
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   292
    box panelView
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   293
        addSubView:(showingWhatLabel := (Label label:(resources string:'Recently visited:')) adjust:#left) before:nil;
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   294
        addSubView:(check := CheckBox label:(resources string:'Show Full Name (do not strip off Namespace)') model:showFullNameHolder) before:nil.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   295
    showFullNameHolder onChangeEvaluate:updateList.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   296
    box enterField origin:(0 @ check corner y).
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   297
    box listView origin:(0 @ check corner y).
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   298
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   299
    box extent:(400 @ 350).
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   300
    box open.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   301
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   302
    className isEmptyOrNil ifTrue:[^ nil "cancel"].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   303
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   304
    LastClassSearchBoxShowedFullName := showFullNameHolder value.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   305
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   306
    (className endsWith:$) ) ifTrue:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   307
        (className indexOfSubCollection:'(in ') == 0 ifTrue:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   308
            "/ a namespace
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   309
            className := (className copyTo:(className indexOfSubCollection:'(Name')-1) withoutSeparators
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   310
        ] ifFalse:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   311
            className := ((className copyFrom:(className indexOfSubCollection:'(in ')+4)
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   312
                            copyButLast:1)
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   313
                         , '::' , className asCollectionOfWords first
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   314
        ].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   315
    ].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   316
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   317
    aBlock notNil ifTrue:[aBlock value:className optionalArgument:singleClass and:doWhat].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   318
    ^ className
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   319
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   320
    "Created: / 03-08-2017 / 12:31:08 / cg"
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   321
    "Modified: / 03-08-2017 / 14:14:39 / cg"
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   322
! !
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   323
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   324
!ClassSearchDialog methodsFor:'private helpers'!
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   325
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   326
createDialogBox:msg title:boxTitle label:boxLabel
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   327
    |title|
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   328
    
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   329
    title := (resources string:boxTitle) , msg , '.\' , (resources string:'(TAB to complete; matchPattern allowed - "*" for all):').
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   330
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   331
    box := SystemBrowser
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   332
                enterBoxForClassWithCodeSelectionTitle:title withCRs
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   333
                withList:(showFullNameHolder value ifTrue:[visitedFullNames] ifFalse:[visitedShortNames])
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   334
                okText:(okText ? 'OK')
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   335
                forBrowser:browser.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   336
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   337
    box label:(resources string:boxLabel).
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   338
    ^ box
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   339
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   340
    "Created: / 03-08-2017 / 14:02:33 / cg"
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   341
!
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   342
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   343
genShortNameListEntry:cls
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   344
    |ns|
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   345
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   346
    cls isNil ifTrue:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   347
        ^ nil
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   348
    ].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   349
    
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   350
    ns := cls topNameSpace name.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   351
    ns = 'Smalltalk'
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   352
        ifTrue:[ ns := '' ]
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   353
        ifFalse:[ns := ' (in ',ns,')'].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   354
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   355
    ^ cls nameWithoutNameSpacePrefix,ns
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   356
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   357
    "Created: / 03-08-2017 / 12:41:04 / cg"
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   358
!
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   359
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   360
getAllClasses
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   361
    "
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   362
     self new getAllClasses
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   363
     
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   364
     Time millisecondsToRun:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   365
        self new getAllClasses
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   366
     ]
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   367
    "
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   368
    
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   369
    |prefs emphasisForChanged |
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   370
    
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   371
    prefs := UserPreferences current.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   372
    emphasisForChanged := prefs emphasisForChangedCode.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   373
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   374
    setOfClassNamesInChangeSet isNil ifTrue:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   375
        self getClassNamesInChangeSet 
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   376
    ].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   377
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   378
    reallyAllClasses isNil ifTrue:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   379
        reallyAllClasses := Smalltalk allClasses copyAsOrderedCollection
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   380
    ].    
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   381
    allClasses := reallyAllClasses.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   382
    (onlyShowJavaClassesHolder value ? false) ifTrue:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   383
        allClasses := allClasses select:[:cls | cls isJavaClass].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   384
    ].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   385
    classFilter notNil ifTrue:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   386
        allClasses := allClasses select:classFilter
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   387
    ].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   388
    allClassesByFullName := allClasses copy.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   389
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   390
    allNames := (allClasses
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   391
                collect:[:cls |
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   392
                    |ns nm|
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   393
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   394
                    cls isJavaClass ifTrue:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   395
                        nm := cls javaName,' (in JAVA)'
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   396
                    ] ifFalse:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   397
                        ns := cls topNameSpace name.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   398
                        ns = 'Smalltalk'
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   399
                            ifTrue:[ ns := '' ]
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   400
                            ifFalse:[ns := ' (in ',ns,')'].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   401
                        cls isNameSpace ifTrue:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   402
                            nm := cls nameWithoutNameSpacePrefix,ns,' (Namespace)'
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   403
                        ] ifFalse:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   404
                            nm := cls nameWithoutNameSpacePrefix,ns
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   405
                        ].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   406
                    ].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   407
                    (setOfClassNamesInChangeSet includes:cls name) ifTrue:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   408
                        nm asText emphasisAllAdd:emphasisForChanged
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   409
                    ] ifFalse:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   410
                        nm
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   411
                    ].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   412
                ]) sortWith:allClasses; yourself.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   413
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   414
    allFullNames := (allClasses
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   415
                collect:[:cls |
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   416
                    |nm|
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   417
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   418
                    nm := cls name.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   419
                    (setOfClassNamesInChangeSet includes:nm) ifTrue:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   420
                        nm asText emphasisAllAdd:emphasisForChanged
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   421
                    ] ifFalse:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   422
                        nm
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   423
                    ].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   424
                ]) sortWith:allClassesByFullName; yourself.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   425
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   426
    "Created: / 03-08-2017 / 12:59:51 / cg"
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   427
!
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   428
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   429
getClassNamesInChangeSet
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   430
    |classesInChangeSet|
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   431
    
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   432
    classesInChangeSet := ChangeSet current changedClasses.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   433
    classFilter notNil ifTrue:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   434
        classesInChangeSet := classesInChangeSet select:classFilter
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   435
    ].    
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   436
        
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   437
    classNamesInChangeSet := classesInChangeSet collect:[:each | each theNonMetaclass name].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   438
    setOfClassNamesInChangeSet := classNamesInChangeSet asSet.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   439
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   440
    "Created: / 03-08-2017 / 12:47:00 / cg"
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   441
!
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   442
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   443
getResourcesFrom:resourcesOrNil orBrowser:aBrowserOrNil
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   444
    resources := resourcesOrNil.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   445
    resources isNil ifTrue:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   446
        aBrowserOrNil notNil ifTrue:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   447
            resources := aBrowserOrNil resources.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   448
        ].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   449
        resources isNil ifTrue:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   450
            resources := SystemBrowser classResources.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   451
        ].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   452
    ].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   453
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   454
    "Created: / 03-08-2017 / 12:31:58 / cg"
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   455
!
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   456
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   457
getVisitedNames
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   458
    |initialFullNames initialShortNames prefs 
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   459
     emphasisForChanged setOfClassNamesInChangeSet|
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   460
    
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   461
    initialFullNames := SystemBrowser visitedClassNamesHistory.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   462
    (classFilter notNil) ifTrue:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   463
        initialFullNames := initialFullNames 
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   464
                                select:[:nm | 
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   465
                                    |cls|
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   466
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   467
                                    (cls := Smalltalk at:nm) notNil 
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   468
                                    and:[classFilter value:cls]
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   469
                                ].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   470
    ].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   471
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   472
    initialFullNames := initialFullNames select:[:nm | nm notNil].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   473
    initialShortNames := initialFullNames collect:[:nm |
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   474
                            |cls|
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   475
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   476
                            cls := Smalltalk classNamed:nm.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   477
                            cls isNil ifTrue:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   478
                                "/ class no longer exists (removed?)
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   479
                                nm withColor:(Color gray)
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   480
                            ] ifFalse:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   481
                                cls isJavaClass ifTrue:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   482
                                    cls javaName
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   483
                                ] ifFalse:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   484
                                    self genShortNameListEntry:(Smalltalk classNamed:nm)
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   485
                                ].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   486
                            ].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   487
                        ].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   488
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   489
    prefs := UserPreferences current.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   490
    emphasisForChanged := prefs emphasisForChangedCode.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   491
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   492
    setOfClassNamesInChangeSet := classNamesInChangeSet asSet.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   493
    
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   494
    visitedFullNames := initialFullNames collect:[:clsName |
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   495
                                (setOfClassNamesInChangeSet includes:clsName) ifTrue:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   496
                                    clsName asText emphasisAllAdd:emphasisForChanged
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   497
                                ] ifFalse:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   498
                                    clsName
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   499
                                ].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   500
                            ].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   501
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   502
    visitedShortNames := initialShortNames with:initialFullNames collect:[:shortName :clsName |
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   503
                                (setOfClassNamesInChangeSet includes:clsName) ifTrue:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   504
                                    shortName asText emphasisAllAdd:emphasisForChanged
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   505
                                ] ifFalse:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   506
                                    shortName
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   507
                                ].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   508
                            ].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   509
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   510
    "Created: / 03-08-2017 / 12:54:10 / cg"
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   511
!
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   512
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   513
updateList
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   514
    |nameToSearch list namesStarting namesNotStarting lcName nameList classList 
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   515
     isGlobOrRegexMatch isFuzzySearch labelText sort|
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   516
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   517
    (nameToSearch := classNameHolder value withoutSeparators) isEmpty ifTrue:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   518
        labelText := 'Recently visited:'.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   519
        list := (showFullNameHolder value ifTrue:[visitedFullNames] ifFalse:[visitedShortNames]).
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   520
    ] ifFalse:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   521
        (nameToSearch includesString:'>>') ifTrue:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   522
            nameToSearch := (nameToSearch copyTo:(nameToSearch indexOfString:'>>')-1) withoutSeparators.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   523
        ].    
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   524
        isGlobOrRegexMatch := nameToSearch includesMatchCharacters.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   525
        isFuzzySearch := isGlobOrRegexMatch not and:[doFuzzyMatchHolder value].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   526
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   527
        labelText := 'Matching classes:'.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   528
        labelText := isGlobOrRegexMatch 
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   529
                        ifTrue:['Matching classes (pattern):'] 
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   530
                        ifFalse:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   531
                            isFuzzySearch ifTrue:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   532
                                'Matching classes (fuzzy match):'
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   533
                            ] ifFalse:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   534
                                'Matching classes (substring):'
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   535
                            ].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   536
                        ].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   537
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   538
        nameList := showFullNameHolder value ifTrue:[ allFullNames ] ifFalse:[ allNames ].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   539
        classList := showFullNameHolder value ifTrue:[ allClassesByFullName ] ifFalse:[ allClasses ].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   540
        lcName := nameToSearch asLowercase.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   541
        false "(lcName includesString:'::')" ifTrue:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   542
            list := OrderedCollection new.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   543
            allClasses doWithIndex:[:cls :idx |
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   544
                |isIncluded|
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   545
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   546
                isGlobOrRegexMatch ifTrue:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   547
                    isIncluded := (lcName match:cls name asLowercase)
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   548
                ] ifFalse:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   549
                    isIncluded := (cls name includesString:lcName caseSensitive:false)
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   550
                ].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   551
                isIncluded ifTrue:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   552
                    list add:(nameList at:idx)
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   553
                ].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   554
            ].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   555
        ] ifFalse:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   556
            isGlobOrRegexMatch ifTrue:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   557
                list := (1 to:allFullNames size)
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   558
                            select:
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   559
                                [:idx |
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   560
                                    |nm1 nm2|
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   561
                                    nm1 := (allFullNames at:idx) asLowercase.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   562
                                    nm2 := (classList at:idx) name asLowercase.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   563
                                    (lcName match:nm1)
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   564
                                    or:[ (nm1~=nm2) and:[ lcName match:nm2]]
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   565
                                ] 
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   566
                            thenCollect:[:idx | "nameList "allFullNames"" at:idx].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   567
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   568
            ] ifFalse:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   569
                (doFuzzyMatchHolder value and:[FuzzyMatcher notNil]) ifTrue:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   570
                    |matcher matches|
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   571
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   572
                    matches := OrderedCollection new.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   573
                    matcher := FuzzyMatcher pattern:lcName.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   574
                    allFullNames "nameList" do:[:eachClassName | 
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   575
                        matcher 
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   576
                            match:eachClassName
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   577
                            ifScored: [:score | 
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   578
                                matches add: { eachClassName . score . (matcher indexes copy) }
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   579
                            ] 
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   580
                    ].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   581
                    matches 
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   582
                        sort:[:a :b |
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   583
                            |score_a score_b|
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   584
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   585
                            score_a := a at:2.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   586
                            score_b := b at:2.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   587
                            score_a < score_b
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   588
                            or:[ score_a = score_b and:[ (a at:1) > (b at:1)]
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   589
                        ]
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   590
                    ].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   591
                    matches reverse.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   592
                    list := (matches copyTo:(matches size min:150)) 
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   593
                                        collect:[:triple |
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   594
                                            |name score indexes|
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   595
                                            name := triple first.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   596
                                            indexes := triple third.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   597
                                            name := name asText withColor:Color gray slightlyDarkened.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   598
                                            indexes do:[:each |
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   599
                                                "/ name emphasiseFrom:each to:each with:{ #bold . #color->Color black }  
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   600
                                                name emphasiseFrom:each to:each with:{ #color->Color black }  
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   601
                                            ].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   602
                                            name
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   603
                                        ].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   604
                ] ifFalse:[    
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   605
                    list := (1 to:nameList size)
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   606
                                        select:[:idx |
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   607
                                            |nm|
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   608
                                            nm := nameList at:idx.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   609
                                            (nm includesString:lcName caseSensitive:false)
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   610
                                            or:[ (classList at:idx) name includesString:lcName caseSensitive:false]
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   611
                                        ] thenCollect:[:idx | 
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   612
                                            |name matchPos|
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   613
                                            
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   614
                                            name := nameList at:idx.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   615
                                            matchPos := name indexOfSubCollection:lcName caseSensitive:false.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   616
                                            name := name asText withColor:Color gray slightlyDarkened.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   617
                                            matchPos ~~ 0 ifTrue:[
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   618
                                                name := name emphasiseFrom:matchPos to:matchPos+lcName size-1 with:{ #color->Color black }  
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   619
                                            ].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   620
                                            name
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   621
                                        ].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   622
                ].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   623
            ]
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   624
        ].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   625
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   626
        sort := 
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   627
            [:list |
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   628
                |list2 nameForDistance|
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   629
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   630
                nameForDistance := nameToSearch copyWithoutAll:'*#'.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   631
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   632
                list2 := list collect:[:nm | nm -> (nm levenshteinTo:nameForDistance)].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   633
                list2 sortBySelector:#value.
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   634
                list2 collect:#key
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   635
            ].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   636
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   637
        namesStarting := list select:[:nm | nm asLowercase startsWith:lcName].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   638
        namesNotStarting := (list \ namesStarting).
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   639
        list := (sort value:namesStarting) , {nil} , (sort value:namesNotStarting).
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   640
    ].
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   641
    
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   642
    showingWhatLabel label:(resources string:labelText).
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   643
    box listView
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   644
        list:list;
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   645
        scrollToLine:((list findFirst:[:line | (line ? '') startsWith:lcName]) max:1)
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   646
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   647
    "Created: / 03-08-2017 / 14:10:37 / cg"
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   648
    "Modified: / 04-08-2017 / 12:59:06 / cg"
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   649
! !
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   650
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   651
!ClassSearchDialog class methodsFor:'documentation'!
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   652
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   653
version
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   654
    ^ '$Header$'
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   655
!
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   656
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   657
version_CVS
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   658
    ^ '$Header$'
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   659
! !
d5af388ae1aa initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   660