164 #(#SpecCollection |
164 #(#SpecCollection |
165 #'collection:' |
165 #'collection:' |
166 #( |
166 #( |
167 #(#LabelSpec |
167 #(#LabelSpec |
168 #'name:' 'Label' |
168 #'name:' 'Label' |
169 #'layout:' #(#AlignmentOrigin 63 0 34 0 1 0.5) |
169 #'layout:' #(#AlignmentOrigin 73 0 34 0 1 0.5) |
170 #'label:' 'Label:' |
170 #'label:' 'Label:' |
171 #'resizeForLabel:' true |
171 #'resizeForLabel:' true |
172 ) |
172 ) |
173 #(#InputFieldSpec |
173 #(#InputFieldSpec |
174 #'name:' 'LabelField' |
174 #'name:' 'LabelField' |
175 #'layout:' #(#LayoutFrame 66 0 24 0 -4 1.0 46 0) |
175 #'layout:' #(#LayoutFrame 75 0 24 0 -4 1.0 46 0) |
176 #'activeHelpKey:' #label |
176 #'activeHelpKey:' #label |
177 #'model:' #label |
177 #'model:' #label |
178 ) |
178 ) |
179 #(#CheckBoxSpec |
179 #(#CheckBoxSpec |
180 #'name:' 'TranslateLabel' |
180 #'name:' 'TranslateLabel' |
181 #'layout:' #(#LayoutOrigin 63 0 49 0) |
181 #'layout:' #(#LayoutOrigin 71 0 49 0) |
182 #'activeHelpKey:' #translateLabel |
182 #'activeHelpKey:' #translateLabel |
183 #'model:' #translateLabel |
183 #'model:' #translateLabel |
184 #'label:' 'Label derives from Application' |
184 #'label:' 'Label derives from Application' |
185 ) |
185 ) |
186 #(#ColorMenuSpec |
186 #(#ColorMenuSpec |
187 #'name:' 'ForegroundColorMenu' |
187 #'name:' 'ForegroundColorMenu' |
188 #'layout:' #(#LayoutFrame 94 0 104 0 -4 1.0 126 0) |
188 #'layout:' #(#LayoutFrame 75 0 104 0 -4 1.0 126 0) |
189 #'activeHelpKey:' #foregroundColor |
189 #'activeHelpKey:' #foregroundColor |
190 #'model:' #labelForegroundColor |
190 #'model:' #labelForegroundColor |
191 #'labelsAreColored:' false |
191 #'labelsAreColored:' false |
192 ) |
192 ) |
193 #(#LabelSpec |
193 #(#LabelSpec |
194 #'name:' 'ForegroundLabel' |
194 #'name:' 'ForegroundLabel' |
195 #'layout:' #(#AlignmentOrigin 92 0 116 0 1 0.5) |
195 #'layout:' #(#AlignmentOrigin 73 0 116 0 1 0.5) |
196 #'label:' 'Foreground:' |
196 #'label:' 'Color:' |
197 #'adjust:' #right |
197 #'adjust:' #right |
198 #'resizeForLabel:' true |
198 #'resizeForLabel:' true |
199 ) |
199 ) |
200 #(#CheckBoxSpec |
200 #(#CheckBoxSpec |
201 #'name:' 'CanSelect' |
201 #'name:' 'CanSelect' |
202 #'layout:' #(#LayoutFrame 15 0 171 0 134 0 193 0) |
202 #'layout:' #(#LayoutFrame 34 0 157 0 153 0 179 0) |
203 #'model:' #enabled |
203 #'model:' #enabled |
204 #'label:' 'Can Select' |
204 #'label:' 'Can Select' |
205 ) |
205 ) |
206 ) |
206 ) |
207 ) |
207 ) |
378 #'label:' 'Create Aspect Method' |
405 #'label:' 'Create Aspect Method' |
379 #'value:' #doInstallAspect |
406 #'value:' #doInstallAspect |
380 #'enabled:' #hasClassAndSelector |
407 #'enabled:' #hasClassAndSelector |
381 ) |
408 ) |
382 #(#MenuItem |
409 #(#MenuItem |
383 #'label:' '-' |
410 #'label:' '=' |
384 ) |
411 ) |
385 #(#MenuItem |
412 #(#MenuItem |
386 #'label:' 'Exit' |
413 #'label:' 'Exit' |
387 #'value:' #closeRequest |
414 #'value:' #closeRequest |
388 #'enabled:' #isNotModified |
415 #'enabled:' #isNotModified |
389 ) |
416 ) |
390 ) nil |
417 ) nil |
391 nil |
418 nil |
392 ) |
419 ) |
393 ) |
420 ) |
|
421 #(#MenuItem |
|
422 #'label:' 'Edit' |
|
423 #'submenuChannel:' #menuEdit |
|
424 ) |
|
425 #(#MenuItem |
|
426 #'label:' 'History' |
|
427 #'submenuChannel:' #menuHistory |
|
428 ) |
|
429 #(#MenuItem |
|
430 #'label:' 'Help' |
|
431 #'submenuChannel:' #menuHelp |
|
432 ) |
394 ) nil |
433 ) nil |
395 nil |
434 nil |
396 ) |
435 ) |
397 ! |
436 ! |
398 |
437 |
401 |
440 |
402 "do not manually edit this - the builder may not be able to |
441 "do not manually edit this - the builder may not be able to |
403 handle the specification if its corrupted." |
442 handle the specification if its corrupted." |
404 |
443 |
405 " |
444 " |
406 MenuEditor new openOnClass:self andSelector:#menuEdit |
445 MenuEditor new openOnClass:TabItemEditor andSelector:#menuEdit |
407 (Menu new fromLiteralArrayEncoding:(self menuEdit)) startUp |
446 (Menu new fromLiteralArrayEncoding:(TabItemEditor menuEdit)) startUp |
408 " |
|
409 |
|
410 <resource: #menu> |
|
411 |
|
412 ^ |
|
413 |
|
414 #(#Menu |
|
415 |
|
416 #( |
|
417 #(#MenuItem |
|
418 #'label:' 'Cut' |
|
419 #'value:' #doCutTab |
|
420 #'enabled:' #isColumnSelected |
|
421 #'shortcutKeyCharacter:' #Cut |
|
422 ) |
|
423 #(#MenuItem |
|
424 #'label:' 'Copy' |
|
425 #'value:' #doCopyTab |
|
426 #'enabled:' #isColumnSelected |
|
427 #'shortcutKeyCharacter:' #Copy |
|
428 ) |
|
429 #(#MenuItem |
|
430 #'label:' 'Paste' |
|
431 #'value:' #doPasteTab |
|
432 #'enabled:' #valueOfHavingClipboard |
|
433 #'shortcutKeyCharacter:' #Paste |
|
434 ) |
|
435 ) nil |
|
436 nil |
|
437 ) |
|
438 |
|
439 ! |
|
440 |
|
441 menuToolbar |
|
442 "this window spec was automatically generated by the ST/X MenuEditor" |
|
443 |
|
444 "do not manually edit this - the builder may not be able to |
|
445 handle the specification if its corrupted." |
|
446 |
|
447 " |
|
448 MenuEditor new openOnClass:TabItemEditor andSelector:#menuToolbar |
|
449 (Menu new fromLiteralArrayEncoding:(TabItemEditor menuToolbar)) startUp |
|
450 " |
447 " |
451 |
448 |
452 <resource: #menu> |
449 <resource: #menu> |
453 |
450 |
454 ^ |
451 ^ |
455 |
452 |
456 #(#Menu |
453 #(#Menu |
457 |
454 |
458 #( |
455 #( |
459 #(#MenuItem |
456 #(#MenuItem |
|
457 #'label:' 'Cut' |
|
458 #'value:' #doCutTab |
|
459 #'enabled:' #isColumnSelected |
|
460 ) |
|
461 #(#MenuItem |
|
462 #'label:' 'Copy' |
|
463 #'value:' #doCopyTab |
|
464 #'enabled:' #isColumnSelected |
|
465 ) |
|
466 #(#MenuItem |
|
467 #'label:' 'Paste' |
|
468 #'value:' #doPasteTab |
|
469 #'enabled:' #valueOfHavingClipboard |
|
470 ) |
|
471 #(#MenuItem |
|
472 #'label:' '-' |
|
473 ) |
|
474 #(#MenuItem |
|
475 #'label:' 'Create Tab' |
|
476 #'value:' #doCreateTab |
|
477 #'enabled:' #isNotModified |
|
478 #'labelImage:' #(#ResourceRetriever #MenuEditor #menuItemImage 'Create Tab') |
|
479 ) |
|
480 ) nil |
|
481 nil |
|
482 ) |
|
483 ! |
|
484 |
|
485 menuToolbar |
|
486 "this window spec was automatically generated by the ST/X MenuEditor" |
|
487 |
|
488 "do not manually edit this - the builder may not be able to |
|
489 handle the specification if its corrupted." |
|
490 |
|
491 " |
|
492 MenuEditor new openOnClass:TabItemEditor andSelector:#menuToolbar |
|
493 (Menu new fromLiteralArrayEncoding:(TabItemEditor menuToolbar)) startUp |
|
494 " |
|
495 |
|
496 <resource: #menu> |
|
497 |
|
498 ^ |
|
499 |
|
500 #(#Menu |
|
501 |
|
502 #( |
|
503 #(#MenuItem |
|
504 #'label:' 'Test' |
|
505 #'isButton:' true |
|
506 #'value:' #doTest |
|
507 #'labelImage:' #(#ResourceRetriever #UIPainter #startIcon) |
|
508 ) |
|
509 #(#MenuItem |
|
510 #'label:' '' |
|
511 ) |
|
512 #(#MenuItem |
|
513 #'label:' 'New' |
|
514 #'isButton:' true |
|
515 #'value:' #doNew |
|
516 #'labelImage:' #(#ResourceRetriever nil #newIcon) |
|
517 ) |
|
518 #(#MenuItem |
460 #'label:' 'Save' |
519 #'label:' 'Save' |
461 #'isButton:' true |
520 #'isButton:' true |
462 #'value:' #doInstallSpec |
521 #'value:' #doInstallSpec |
463 #'enabled:' #isNotModified |
522 #'enabled:' #isNotModified |
464 #'labelImage:' #(#ResourceRetriever nil #saveIcon) |
523 #'labelImage:' #(#ResourceRetriever nil #saveIcon) |
465 ) |
524 ) |
466 #(#MenuItem |
525 #(#MenuItem |
467 #'label:' '' |
526 #'label:' '' |
468 ) |
527 ) |
469 #(#MenuItem |
528 #(#MenuItem |
470 #'label:' 'createLabel' |
529 #'label:' 'Create Label' |
471 #'isButton:' true |
530 #'isButton:' true |
472 #'value:' #doCreateTab |
531 #'value:' #doCreateTab |
473 #'enabled:' #isNotModified |
532 #'enabled:' #isNotModified |
474 #'labelImage:' #(#ResourceRetriever #MenuEditor #menuItemImage) |
533 #'labelImage:' #(#ResourceRetriever #MenuEditor #menuItemImage) |
475 ) |
534 ) |
667 |
730 |
668 (holder := builder bindingAt:#specChannel) isNil ifTrue:[ |
731 (holder := builder bindingAt:#specChannel) isNil ifTrue:[ |
669 builder aspectAt:#specChannel put:(holder := ValueHolder new). |
732 builder aspectAt:#specChannel put:(holder := ValueHolder new). |
670 ]. |
733 ]. |
671 ^ holder |
734 ^ holder |
|
735 ! ! |
|
736 |
|
737 !TabItemEditor methodsFor:'building'! |
|
738 |
|
739 buildFrom:aClass andSelector:aSelector |
|
740 "build from class and selector |
|
741 " |
|
742 |spec list validClSl| |
|
743 |
|
744 self doNew. |
|
745 |
|
746 selector := nil. |
|
747 className := self resolveName:aClass. |
|
748 validClSl := false. |
|
749 |
|
750 className notNil ifTrue:[ |
|
751 aSelector notNil ifTrue:[ |
|
752 validClSl := true. |
|
753 selector := aSelector asSymbol. |
|
754 |
|
755 (className respondsTo:selector) ifTrue:[ |
|
756 spec := className perform:selector. |
|
757 list := self listOfLabels. |
|
758 |
|
759 spec size ~~ 0 ifTrue:[ |
|
760 |
|
761 rebuildMode := true. |
|
762 |
|
763 spec do:[:aTab| |
|
764 list add:aTab label. |
|
765 listOfTabs add:aTab. |
|
766 ]. |
|
767 rebuildMode := false. |
|
768 self addToHistory:(className name, ' ', selector) -> #loadFromMessage: |
|
769 ] |
|
770 ] |
|
771 ] |
|
772 ]. |
|
773 |
|
774 self hasClassAndSelector value:validClSl. |
|
775 self modified:false. |
|
776 hasChanged := false. |
|
777 |
|
778 listOfTabs notEmpty ifTrue:[ |
|
779 self selectionHolder value:1 |
|
780 ]. |
|
781 ! |
|
782 |
|
783 loadFromMessage:aMessage |
|
784 "load tabs from class and selector derived from history |
|
785 " |
|
786 |msg cls| |
|
787 |
|
788 aMessage notNil ifTrue:[ |
|
789 msg := aMessage asCollectionOfWords. |
|
790 |
|
791 (msg size == 2 and:[(cls := self resolveName:(msg at:1)) notNil]) ifTrue:[ |
|
792 self buildFrom:cls andSelector:((msg at:2) asSymbol) |
|
793 ] |
|
794 ] |
672 ! ! |
795 ! ! |
673 |
796 |
674 !TabItemEditor methodsFor:'change & update'! |
797 !TabItemEditor methodsFor:'change & update'! |
675 |
798 |
676 update:something with:aParameter from:someObject |
799 update:something with:aParameter from:someObject |
701 selectedIndex == 0 ifTrue:[ |
824 selectedIndex == 0 ifTrue:[ |
702 self specChannel value:nil |
825 self specChannel value:nil |
703 ] |
826 ] |
704 ]. |
827 ]. |
705 self cancel. |
828 self cancel. |
|
829 |
|
830 testView notNil ifTrue:[ |
|
831 testView lower |
|
832 ] |
706 ! ! |
833 ! ! |
707 |
834 |
708 !TabItemEditor methodsFor:'startup / release'! |
835 !TabItemEditor methodsFor:'startup / release'! |
709 |
|
710 buildFrom:aClass andSelector:aSelector |
|
711 "build from class and selector |
|
712 " |
|
713 |spec list validClSl| |
|
714 |
|
715 self doNew. |
|
716 |
|
717 selector := nil. |
|
718 className := self resolveName:aClass. |
|
719 validClSl := false. |
|
720 |
|
721 className notNil ifTrue:[ |
|
722 aSelector notNil ifTrue:[ |
|
723 validClSl := true. |
|
724 selector := aSelector asSymbol. |
|
725 |
|
726 (className respondsTo:selector) ifTrue:[ |
|
727 spec := className perform:selector. |
|
728 list := self listOfLabels. |
|
729 |
|
730 spec size ~~ 0 ifTrue:[ |
|
731 |
|
732 rebuildMode := true. |
|
733 |
|
734 spec do:[:aTab| |
|
735 list add:aTab label. |
|
736 listOfTabs add:aTab. |
|
737 ]. |
|
738 rebuildMode := false. |
|
739 ] |
|
740 ] |
|
741 ] |
|
742 ]. |
|
743 |
|
744 self hasClassAndSelector value:validClSl. |
|
745 self modified:false. |
|
746 hasChanged := false. |
|
747 |
|
748 listOfTabs notEmpty ifTrue:[ |
|
749 self selectionHolder value:1 |
|
750 ]. |
|
751 ! |
|
752 |
836 |
753 closeRequest |
837 closeRequest |
754 |
838 |
755 hasChanged ifTrue:[ |
839 hasChanged ifTrue:[ |
756 ( YesNoBox title:'tab description was modified!!' |
840 ( YesNoBox title:'tab description was modified!!' |
1057 |
1151 |
1058 doReload |
1152 doReload |
1059 "reload from class and selector |
1153 "reload from class and selector |
1060 " |
1154 " |
1061 self buildFrom:className andSelector:selector |
1155 self buildFrom:className andSelector:selector |
|
1156 ! |
|
1157 |
|
1158 doTest |
|
1159 "run a test |
|
1160 " |
|
1161 |tabView list| |
|
1162 |
|
1163 self selectionHolder value:nil. |
|
1164 |
|
1165 listOfTabs size ~~ 0 ifTrue:[ |
|
1166 list := listOfTabs collect:[:aTab||t| |
|
1167 t := aTab copy. |
|
1168 t setAttributesFromClass:className. |
|
1169 t |
|
1170 ] |
|
1171 ] ifFalse:[ |
|
1172 list := nil |
|
1173 ]. |
|
1174 tabView := builder componentAt:#TestTabsView. |
|
1175 tabView list:list. |
|
1176 testView raise. |
|
1177 |
|
1178 |
1062 ! ! |
1179 ! ! |
1063 |
1180 |
1064 !TabItemEditor class methodsFor:'documentation'! |
1181 !TabItemEditor class methodsFor:'documentation'! |
1065 |
1182 |
1066 version |
1183 version |