Tools__LintRuleSettingsApplication.st
branchjv
changeset 15738 b8319952027b
parent 15733 332bb9af57e1
parent 15736 0d31fb46a29b
child 16573 2f5cd8950dcf
equal deleted inserted replaced
15733:332bb9af57e1 15738:b8319952027b
    15 
    15 
    16 "{ NameSpace: Tools }"
    16 "{ NameSpace: Tools }"
    17 
    17 
    18 AbstractSettingsApplication subclass:#LintRuleSettingsApplication
    18 AbstractSettingsApplication subclass:#LintRuleSettingsApplication
    19 	instanceVariableNames:'rulesetList rulesetSelectionHolder hasSelectionHolder
    19 	instanceVariableNames:'rulesetList rulesetSelectionHolder hasSelectionHolder
    20 		hasSelectionAndUserDefinedHolder smallSenseEnabledHolder'
    20 		hasSelectionAndUserDefinedHolder smallSenseEnabledHolder
       
    21 		smallLintRulesetDefault defaultInBrowserRuleNameHolder'
    21 	classVariableNames:'LastFileName'
    22 	classVariableNames:'LastFileName'
    22 	poolDictionaries:''
    23 	poolDictionaries:''
    23 	category:'Interface-Lint'
    24 	category:'Interface-Lint'
    24 !
    25 !
    25 
    26 
    89 #remove
    90 #remove
    90 'Remove the selected ruleset'
    91 'Remove the selected ruleset'
    91 
    92 
    92 #resetDefault
    93 #resetDefault
    93 'Recreate the default ruleset with all existing RBRules.\(Do this after new rules have been added or rule classes were modified)'
    94 'Recreate the default ruleset with all existing RBRules.\(Do this after new rules have been added or rule classes were modified)'
       
    95 
       
    96 #makeDefaultInBrowser
       
    97 'Make this the default ruleset to be used in browsers'
    94 
    98 
    95 #smallSenseEnabled
    99 #smallSenseEnabled
    96 'Enable SmallSense (incremental lint rule checking in the editor).\If the SmallSense package is not yet loaded, checking this will force it into the image.\\Sorry, but this will only affect new windows,\so you have to reopen the browsers.'
   100 'Enable SmallSense (incremental lint rule checking in the editor).\If the SmallSense package is not yet loaded, checking this will force it into the image.\\Sorry, but this will only affect new windows,\so you have to reopen the browsers.'
    97 
   101 
    98 )
   102 )
   176                          translateLabel: true
   180                          translateLabel: true
   177                          adjust: left
   181                          adjust: left
   178                        )
   182                        )
   179                       (SelectionInListModelViewSpec
   183                       (SelectionInListModelViewSpec
   180                          name: 'ProfileList'
   184                          name: 'ProfileList'
   181                          layout: (LayoutFrame 0 0 30 0 -128 1 0 1)
   185                          layout: (LayoutFrame 0 0 30 0 -128 1 -30 1)
   182                          enableChannel: svnEnabled
   186                          enableChannel: svnEnabled
   183                          model: rulesetSelectionHolder
   187                          model: rulesetSelectionHolder
   184                          hasHorizontalScrollBar: true
   188                          hasHorizontalScrollBar: true
   185                          hasVerticalScrollBar: true
   189                          hasVerticalScrollBar: true
   186                          listModel: rulesetList
   190                          listModel: rulesetList
   188                          highlightMode: line
   192                          highlightMode: line
   189                          doubleClickSelector: doEdit
   193                          doubleClickSelector: doEdit
   190                        )
   194                        )
   191                       (VerticalPanelViewSpec
   195                       (VerticalPanelViewSpec
   192                          name: 'Buttons1'
   196                          name: 'Buttons1'
   193                          layout: (LayoutFrame -128 1 30 0 0 1 -65 0.70000000000000018)
   197                          layout: (LayoutFrame -128 1 30 0 0 1 -65 0.70000000000000095)
   194                          horizontalLayout: fit
   198                          horizontalLayout: fit
   195                          verticalLayout: top
   199                          verticalLayout: top
   196                          horizontalSpace: 5
   200                          horizontalSpace: 5
   197                          verticalSpace: 3
   201                          verticalSpace: 3
   198                          component: 
   202                          component: 
   201                             (ActionButtonSpec
   205                             (ActionButtonSpec
   202                                label: 'Edit'
   206                                label: 'Edit'
   203                                name: 'ButtonEdit'
   207                                name: 'ButtonEdit'
   204                                activeHelpKey: edit
   208                                activeHelpKey: edit
   205                                translateLabel: true
   209                                translateLabel: true
       
   210                                tabable: true
   206                                model: doEdit
   211                                model: doEdit
   207                                enableChannel: canEditHolder
       
   208                                extent: (Point 128 22)
   212                                extent: (Point 128 22)
   209                              )
   213                              )
   210                             (ActionButtonSpec
   214                             (ActionButtonSpec
   211                                label: 'Copy'
   215                                label: 'Copy'
   212                                name: 'ButtonCopy'
   216                                name: 'ButtonCopy'
   213                                activeHelpKey: copy
   217                                activeHelpKey: copy
   214                                translateLabel: true
   218                                translateLabel: true
       
   219                                tabable: true
   215                                model: doCopy
   220                                model: doCopy
   216                                enableChannel: canCopyHolder
       
   217                                extent: (Point 128 22)
   221                                extent: (Point 128 22)
   218                              )
   222                              )
   219                             (ActionButtonSpec
   223                             (ActionButtonSpec
   220                                label: 'New'
   224                                label: 'New'
   221                                name: 'ButtonAdd'
   225                                name: 'ButtonAdd'
   222                                activeHelpKey: add
   226                                activeHelpKey: add
   223                                translateLabel: true
   227                                translateLabel: true
       
   228                                tabable: true
   224                                model: doAdd
   229                                model: doAdd
   225                                extent: (Point 128 22)
   230                                extent: (Point 128 22)
   226                              )
   231                              )
   227                             (ActionButtonSpec
   232                             (ActionButtonSpec
   228                                label: 'Remove'
   233                                label: 'Remove'
   229                                name: 'ButtonRemove'
   234                                name: 'ButtonRemove'
   230                                activeHelpKey: remove
   235                                activeHelpKey: remove
   231                                translateLabel: true
   236                                translateLabel: true
       
   237                                tabable: true
   232                                model: doRemove
   238                                model: doRemove
   233                                enableChannel: canRemoveHolder
       
   234                                extent: (Point 128 22)
   239                                extent: (Point 128 22)
   235                              )
   240                              )
   236                             )
   241                             )
   237                           
   242                           
   238                          )
   243                          )
   239                        )
   244                        )
   240                       (VerticalPanelViewSpec
   245                       (VerticalPanelViewSpec
   241                          name: 'Buttons2'
   246                          name: 'Buttons2'
   242                          layout: (LayoutFrame -128 1 -64 0.70000000000000018 0 1 0 1)
   247                          layout: (LayoutFrame -128 1 -64 0.70000000000000095 0 1 0 1)
   243                          horizontalLayout: fit
   248                          horizontalLayout: fit
   244                          verticalLayout: bottom
   249                          verticalLayout: bottom
   245                          horizontalSpace: 5
   250                          horizontalSpace: 5
   246                          verticalSpace: 3
   251                          verticalSpace: 3
   247                          component: 
   252                          component: 
   248                         (SpecCollection
   253                         (SpecCollection
   249                            collection: (
   254                            collection: (
   250                             (ActionButtonSpec
   255                             (ActionButtonSpec
   251                                label: 'Reset Default'
   256                                label: 'Make Default\in Browser'
       
   257                                name: 'Button5'
       
   258                                activeHelpKey: makeDefaultInBrowser
       
   259                                translateLabel: true
       
   260                                adjust: centerEach
       
   261                                multiLineLabel: true
       
   262                                tabable: true
       
   263                                model: makeDefaultInBrowser
       
   264                                enableChannel: hasSelectionHolder
       
   265                                extent: (Point 128 44)
       
   266                              )
       
   267                             (ViewSpec
       
   268                                name: 'Box3'
       
   269                                extent: (Point 128 29)
       
   270                              )
       
   271                             (ActionButtonSpec
       
   272                                label: 'Reinitialize'
   252                                name: 'Button4'
   273                                name: 'Button4'
   253                                activeHelpKey: resetDefault
   274                                activeHelpKey: resetDefault
   254                                translateLabel: true
   275                                translateLabel: true
       
   276                                tabable: true
   255                                model: doResetDefault
   277                                model: doResetDefault
   256                                extent: (Point 128 22)
   278                                extent: (Point 128 22)
   257                              )
   279                              )
   258                             (ViewSpec
   280                             (ViewSpec
   259                                name: 'Box1'
   281                                name: 'Box1'
   262                             (ActionButtonSpec
   284                             (ActionButtonSpec
   263                                label: 'Export'
   285                                label: 'Export'
   264                                name: 'Button2'
   286                                name: 'Button2'
   265                                activeHelpKey: export
   287                                activeHelpKey: export
   266                                translateLabel: true
   288                                translateLabel: true
       
   289                                tabable: true
   267                                model: doExport
   290                                model: doExport
   268                                enableChannel: canExportHolder
       
   269                                extent: (Point 128 22)
   291                                extent: (Point 128 22)
   270                              )
   292                              )
   271                             (ActionButtonSpec
   293                             (ActionButtonSpec
   272                                label: 'Import'
   294                                label: 'Import'
   273                                name: 'Button3'
   295                                name: 'Button3'
   274                                activeHelpKey: import
   296                                activeHelpKey: import
   275                                translateLabel: true
   297                                translateLabel: true
       
   298                                tabable: true
   276                                model: doImport
   299                                model: doImport
   277                                extent: (Point 128 22)
   300                                extent: (Point 128 22)
   278                              )
   301                              )
   279                             )
   302                             )
   280                           
   303                           
   281                          )
   304                          )
       
   305                        )
       
   306                       (LabelSpec
       
   307                          label: 'Default in Browser:'
       
   308                          name: 'Label1'
       
   309                          layout: (LayoutFrame 0 0 -30 1 170 0 0 1)
       
   310                          translateLabel: true
       
   311                          adjust: left
       
   312                        )
       
   313                       (LabelSpec
       
   314                          label: 'default ruleset in browser'
       
   315                          name: 'Label2'
       
   316                          layout: (LayoutFrame 170 0 -30 1 -128 1 0 1)
       
   317                          translateLabel: true
       
   318                          labelChannel: defaultInBrowserRuleNameHolder
       
   319                          adjust: left
   282                        )
   320                        )
   283                       )
   321                       )
   284                     
   322                     
   285                    )
   323                    )
   286                    extent: (Point 587 443)
   324                    extent: (Point 587 443)
   389 doExport
   427 doExport
   390     <resource: #uiCallback>
   428     <resource: #uiCallback>
   391 
   429 
   392     | file |
   430     | file |
   393 
   431 
   394     DIalog warn: 'Not yet implemented'.
   432     Dialog warn: 'Not yet implemented'.
   395     ^ self.
   433     ^ self.
   396 
   434 
   397     file := Dialog requestFileName: (resources string: 'Select file') default: (LastFileName ? Filename currentDirectory / 'exported-ruleset.st').
   435 "/    file := Dialog requestFileName: (resources string: 'Select file') default: (LastFileName ? Filename currentDirectory / 'exported-ruleset.st').
   398     file isEmptyOrNil ifTrue:[ ^ self ].
   436 "/    file isEmptyOrNil ifTrue:[ ^ self ].
   399 
   437 "/
   400     self shouldImplement
   438 "/    self shouldImplement
   401 
   439 
   402     "Modified: / 14-10-2014 / 16:33:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   440     "Modified: / 14-10-2014 / 16:33:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   403 !
   441 !
   404 
   442 
   405 doImport
   443 doImport
   411 !
   449 !
   412 
   450 
   413 doRemove
   451 doRemove
   414     <resource: #uiCallback>
   452     <resource: #uiCallback>
   415 
   453 
   416     | rule idx |
   454     | rule idx rulesetList |
   417 
   455 
   418     rule := self rulesetSelectionHolder value.
   456     rule := self rulesetSelectionHolder value.
   419     idx := self rulesetList indexOf: rule.
   457     rulesetList := self rulesetList.
       
   458     idx := rulesetList indexOf: rule.
   420     idx ~~ 0 ifTrue:[
   459     idx ~~ 0 ifTrue:[
   421         self rulesetList remove: rule.
   460         rulesetList remove: rule.
   422         self rulesetList size > 0 ifTrue:[
   461         rulesetList size > 0 ifTrue:[
   423             self rulesetSelectionHolder value: (self rulesetList at: ((idx -1 ) max: 1))
   462             self rulesetSelectionHolder value: (rulesetList at: ((idx -1 ) max: 1))
   424         ]
   463         ]
   425     ].
   464     ].
   426     self updateModifiedChannel
   465     self updateModifiedChannel
   427 
   466 
   428     "Modified: / 27-02-2013 / 11:57:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   467     "Modified: / 27-02-2013 / 11:57:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   430 
   469 
   431 doResetDefault
   470 doResetDefault
   432     <resource: #uiCallback>
   471     <resource: #uiCallback>
   433 
   472 
   434     RBBuiltinRuleSet flushBuiltinDefault.
   473     RBBuiltinRuleSet flushBuiltinDefault.
       
   474 !
       
   475 
       
   476 makeDefaultInBrowser
       
   477     <resource: #uiCallback>
       
   478 
       
   479     self smallLintRulesetDefault value:(self rulesetSelectionHolder value).
   435 ! !
   480 ! !
   436 
   481 
   437 !LintRuleSettingsApplication methodsFor:'aspects'!
   482 !LintRuleSettingsApplication methodsFor:'aspects'!
   438 
   483 
   439 canCopyHolder
   484 canCopyHolder
   458 canRemoveHolder
   503 canRemoveHolder
   459     ^self hasSelectionAndUserDefinedHolder
   504     ^self hasSelectionAndUserDefinedHolder
   460 
   505 
   461     "Created: / 27-02-2013 / 11:24:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   506     "Created: / 27-02-2013 / 11:24:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   462     "Modified: / 11-11-2014 / 15:12:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   507     "Modified: / 11-11-2014 / 15:12:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
   508 !
       
   509 
       
   510 defaultInBrowserRuleNameHolder
       
   511     defaultInBrowserRuleNameHolder isNil ifTrue:[
       
   512         defaultInBrowserRuleNameHolder := '' asValue
       
   513     ].
       
   514     ^ defaultInBrowserRuleNameHolder
   463 !
   515 !
   464 
   516 
   465 hasSelectionAndUserDefinedHolder
   517 hasSelectionAndUserDefinedHolder
   466 
   518 
   467 
   519 
   510 
   562 
   511     rulesetSelectionHolder isNil ifTrue:[
   563     rulesetSelectionHolder isNil ifTrue:[
   512         rulesetSelectionHolder := ValueHolder new.
   564         rulesetSelectionHolder := ValueHolder new.
   513     ].
   565     ].
   514     ^ rulesetSelectionHolder
   566     ^ rulesetSelectionHolder
       
   567 !
       
   568 
       
   569 smallLintRulesetDefault
       
   570     smallLintRulesetDefault isNil ifTrue:[
       
   571         smallLintRulesetDefault := ValueHolder with:false.
       
   572         smallLintRulesetDefault 
       
   573             onChangeEvaluate:[
       
   574                 self updateModifiedChannel.
       
   575                 self defaultInBrowserRuleNameHolder 
       
   576                     value:(smallLintRulesetDefault value isNil
       
   577                             ifTrue:[ RBBuiltinRuleSet rulesetBuiltinDefault]
       
   578                             ifFalse:[ smallLintRulesetDefault value name ])
       
   579             ].
       
   580     ].
       
   581     ^ smallLintRulesetDefault
   515 !
   582 !
   516 
   583 
   517 smallSenseEnabledHolder
   584 smallSenseEnabledHolder
   518     smallSenseEnabledHolder isNil ifTrue:[
   585     smallSenseEnabledHolder isNil ifTrue:[
   519         smallSenseEnabledHolder := ValueHolder with:false.
   586         smallSenseEnabledHolder := ValueHolder with:false.
   529 
   596 
   530     |rbCompositeLintRuleClass|
   597     |rbCompositeLintRuleClass|
   531 
   598 
   532     self smallSenseEnabledHolder 
   599     self smallSenseEnabledHolder 
   533         value:(self hasSmallSenseLoaded
   600         value:(self hasSmallSenseLoaded
   534                and:[ UserPreferences current perform:#smallSenseEnabled ifNotUnderstood:false]).
   601                and:[ currentUserPrefs perform:#smallSenseEnabled ifNotUnderstood:false]).
       
   602 
       
   603     self smallLintRulesetDefault value:(currentUserPrefs smallLintRulesetDefault).
   535 
   604 
   536     rbCompositeLintRuleClass := Smalltalk at:#'RBCompositeLintRule'.
   605     rbCompositeLintRuleClass := Smalltalk at:#'RBCompositeLintRule'.
   537 
   606 
   538     rbCompositeLintRuleClass isNil ifTrue:[ 
   607     rbCompositeLintRuleClass isNil ifTrue:[ 
   539         "/ Not loaded?
   608         "/ Not loaded?
   558 
   627 
   559 basicSaveSettings
   628 basicSaveSettings
   560     | oldRulesets newRulesets toRemove toAdd rbCompositeLintRuleClass|
   629     | oldRulesets newRulesets toRemove toAdd rbCompositeLintRuleClass|
   561 
   630 
   562     self smallSenseEnabledHolder value ifTrue:[
   631     self smallSenseEnabledHolder value ifTrue:[
   563         UserPreferences current addPreloadedPackage:'stx:goodies/smallsense'
   632         currentUserPrefs addPreloadedPackage:'stx:goodies/smallsense'
   564     ] ifFalse:[
   633     ] ifFalse:[
   565         UserPreferences current removePreloadedPackage:'stx:goodies/smallsense'
   634         currentUserPrefs removePreloadedPackage:'stx:goodies/smallsense'
   566     ].
   635     ].
       
   636     currentUserPrefs smallLintRulesetDefault:(smallLintRulesetDefault value).
       
   637 
   567     (Smalltalk at:#'SmallSense::SmalltalkChecker') notNil ifTrue:[
   638     (Smalltalk at:#'SmallSense::SmalltalkChecker') notNil ifTrue:[
   568         UserPreferences current 
   639         UserPreferences current 
   569             perform:#smallSenseEnabled: with:(self smallSenseEnabledHolder value) ifNotUnderstood:[]
   640             perform:#smallSenseEnabled: with:(self smallSenseEnabledHolder value) ifNotUnderstood:[]
   570     ].
   641     ].
   571 
   642 
   609     "superclass AbstractSettingsApplication says that I am responsible to implement this method"
   680     "superclass AbstractSettingsApplication says that I am responsible to implement this method"
   610 
   681 
   611     |defaultRules currentRules firstTry rbCompositeLintRuleClass|
   682     |defaultRules currentRules firstTry rbCompositeLintRuleClass|
   612 
   683 
   613     self smallSenseEnabledHolder value ifTrue:[
   684     self smallSenseEnabledHolder value ifTrue:[
   614         UserPreferences current addPreloadedPackage:'stx:goodies/smallsense'
   685         currentUserPrefs addPreloadedPackage:'stx:goodies/smallsense'
   615     ].
   686     ].
   616     (UserPreferences current perform:#smallSenseEnabled ifNotUnderstood:false)
   687     (currentUserPrefs perform:#smallSenseEnabled ifNotUnderstood:false)
   617             ~= (self smallSenseEnabledHolder value) 
   688             ~= (self smallSenseEnabledHolder value) 
   618     ifTrue:[
   689     ifTrue:[
   619         ^ true
   690         ^ true
   620     ].
   691     ].
       
   692     currentUserPrefs smallLintRulesetDefault ~= (smallLintRulesetDefault value) ifTrue:[^ true].
       
   693 
   621     rbCompositeLintRuleClass := Smalltalk at:#'RBCompositeLintRule'.
   694     rbCompositeLintRuleClass := Smalltalk at:#'RBCompositeLintRule'.
   622     rbCompositeLintRuleClass isNil ifTrue:[^ false].
   695     rbCompositeLintRuleClass isNil ifTrue:[^ false].
   623 
   696 
   624     firstTry := true.
   697     firstTry := true.
   625     SequenceableCollection missingClassInLiteralArrayErrorSignal handle:[:ex |
   698     SequenceableCollection missingClassInLiteralArrayErrorSignal handle:[:ex |