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 |
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>" |
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 | |