8 selectedProjectsComment newProjectsName hideSTXProjects |
8 selectedProjectsComment newProjectsName hideSTXProjects |
9 startMakeButtonEnabled stopMakeButtonVisible makeOutputHolder |
9 startMakeButtonEnabled stopMakeButtonVisible makeOutputHolder |
10 newApplicationsName selectedApplicationIndexHolder |
10 newApplicationsName selectedApplicationIndexHolder |
11 selectedApplication listOfApplicationsInProject |
11 selectedApplication listOfApplicationsInProject |
12 selectedApplicationsComment buildDirectoryHolder makeProcess |
12 selectedApplicationsComment buildDirectoryHolder makeProcess |
13 listOfClassesInProject' |
13 listOfClassesInProject makeOutputWindow projectBuilder' |
14 classVariableNames:'' |
14 classVariableNames:'' |
15 poolDictionaries:'' |
15 poolDictionaries:'' |
16 category:'System-Support-Projects' |
16 category:'System-Support-Projects' |
17 ! |
17 ! |
18 |
18 |
544 translateLabel: true |
544 translateLabel: true |
545 component: |
545 component: |
546 (SpecCollection |
546 (SpecCollection |
547 collection: ( |
547 collection: ( |
548 (TextEditorSpec |
548 (TextEditorSpec |
549 name: 'TextEditor3' |
549 name: 'MakeOutputWindow' |
550 layout: (LayoutFrame 0 0 0 0 0 1 0 1) |
550 layout: (LayoutFrame 0 0 0 0 0 1 0 1) |
551 model: makeOutputHolder |
551 model: makeOutputHolder |
552 hasHorizontalScrollBar: true |
552 hasHorizontalScrollBar: true |
553 hasVerticalScrollBar: true |
553 hasVerticalScrollBar: true |
554 hasKeyboardFocusInitially: false |
554 hasKeyboardFocusInitially: false |
555 viewClassName: 'TextCollector' |
555 viewClassName: 'TextCollector' |
|
556 postBuildCallback: postBuildMakeOutputWindow: |
556 ) |
557 ) |
557 ) |
558 ) |
558 |
559 |
559 ) |
560 ) |
560 ) |
561 ) |
606 ) |
607 ) |
607 component: |
608 component: |
608 (SpecCollection |
609 (SpecCollection |
609 collection: ( |
610 collection: ( |
610 (FramedBoxSpec |
611 (FramedBoxSpec |
611 label: 'New Project' |
612 label: 'Deploy Installation File' |
612 name: 'FramedBox3' |
613 name: 'FramedBox3' |
613 layout: (LayoutFrame 0 0.0 5 0 4 1.0 105 0) |
614 layout: (LayoutFrame 0 0.0 5 0 4 1.0 0 1) |
614 labelPosition: topLeft |
615 labelPosition: topLeft |
615 translateLabel: true |
616 translateLabel: true |
616 component: |
617 component: |
617 (SpecCollection |
618 (SpecCollection |
618 collection: ( |
619 collection: ( |
619 (InputFieldSpec |
620 (SubCanvasSpec |
620 name: 'EntryField1' |
621 name: 'SubCanvas1' |
621 layout: (LayoutFrame 1 0 6 0 210 0 28 0) |
622 layout: (LayoutFrame 0 0 0 0 0 1 0 1) |
622 model: newProjectsName |
623 hasHorizontalScrollBar: false |
623 acceptOnReturn: true |
624 hasVerticalScrollBar: false |
624 acceptOnTab: true |
625 clientHolder: fileBrowserInstance |
625 acceptOnPointerLeave: true |
626 createNewApplication: true |
626 emptyFieldReplacementText: 'module:directory' |
627 createNewBuilder: true |
627 ) |
|
628 (ActionButtonSpec |
|
629 label: 'Create' |
|
630 name: 'Button1' |
|
631 layout: (LayoutFrame 216 0 6 0 341 0 28 0) |
|
632 translateLabel: true |
|
633 model: createNewProject |
|
634 ) |
628 ) |
635 ) |
629 ) |
636 |
630 |
637 ) |
631 ) |
638 ) |
|
639 (FramedBoxSpec |
|
640 label: 'Existing Projects' |
|
641 name: 'FramedBox4' |
|
642 layout: (LayoutFrame 0 0.0 105 0 4 1.0 397 0) |
|
643 labelPosition: topLeft |
|
644 translateLabel: true |
|
645 component: |
|
646 (SpecCollection |
|
647 collection: ( |
|
648 (VariableHorizontalPanelSpec |
|
649 name: 'VariableHorizontalPanel2' |
|
650 layout: (LayoutFrame 0 0 4 0 0 1 -26 1) |
|
651 component: |
|
652 (SpecCollection |
|
653 collection: ( |
|
654 (SequenceViewSpec |
|
655 name: 'List2' |
|
656 model: selectedProjectIndexHolder |
|
657 hasHorizontalScrollBar: true |
|
658 hasVerticalScrollBar: true |
|
659 useIndex: true |
|
660 sequenceList: listOfMatchingProjects |
|
661 ) |
|
662 (TextEditorSpec |
|
663 name: 'TextEditor2' |
|
664 model: selectedProjectsComment |
|
665 hasHorizontalScrollBar: true |
|
666 hasVerticalScrollBar: true |
|
667 isReadOnly: true |
|
668 hasKeyboardFocusInitially: false |
|
669 ) |
|
670 ) |
|
671 |
|
672 ) |
|
673 handles: (Any 0.34560327198364 1.0) |
|
674 ) |
|
675 (CheckBoxSpec |
|
676 label: 'Hide ST/X Base Packages' |
|
677 name: 'CheckBox1' |
|
678 layout: (LayoutFrame -1 0 241 0 275 0 263 0) |
|
679 model: hideSTXProjects |
|
680 translateLabel: true |
|
681 ) |
|
682 ) |
|
683 |
|
684 ) |
|
685 ) |
|
686 (ActionButtonSpec |
|
687 label: 'Browse Selected Project' |
|
688 name: 'Button3' |
|
689 layout: (LayoutFrame 9 0 410 0 189 0 432 0) |
|
690 translateLabel: true |
|
691 model: doBrowseProject |
|
692 ) |
632 ) |
693 ) |
633 ) |
694 |
634 |
695 ) |
635 ) |
696 ) |
636 ) |
789 <resource: #uiCallback> |
729 <resource: #uiCallback> |
790 |
730 |
791 UserPreferences systemBrowserClass openOnPackage:selectedProjectDefinition package. |
731 UserPreferences systemBrowserClass openOnPackage:selectedProjectDefinition package. |
792 ! |
732 ! |
793 |
733 |
|
734 doGenerateProjectContentsDefinition |
|
735 self generatePackageContentsMethods |
|
736 ! |
|
737 |
794 doStartMake |
738 doStartMake |
795 <resource: #uiCallback> |
739 <resource: #uiCallback> |
796 |
740 |
797 self stopMakeButtonVisible value:true. |
741 self stopMakeButtonVisible value:true. |
798 self startMakeButtonEnabled value:false. |
742 self startMakeButtonEnabled value:false. |
|
743 |
|
744 makeOutputWindow clear. |
799 |
745 |
800 makeProcess := |
746 makeProcess := |
801 [ |
747 [ |
802 [ |
748 [ |
803 self runBuildProcess |
749 self runBuildProcess |
804 ] ensure:[ |
750 ] ensure:[ |
805 self stopMakeButtonVisible value:false. |
751 self stopMakeButtonVisible value:false. |
806 self startMakeButtonEnabled value:true. |
752 self startMakeButtonEnabled value:true. |
|
753 makeProcess := nil. |
807 ]. |
754 ]. |
808 ] newProcess. |
755 ] newProcess. |
809 |
756 |
810 makeProcess priority:4. |
757 makeProcess priority:4. |
811 makeProcess priorityRange:(4 to:8). |
758 makeProcess priorityRange:(4 to:8). |
812 makeProcess resume. |
759 makeProcess resume. |
813 ! |
760 ! |
814 |
761 |
815 doUpdateProjectContents |
762 doStopMake |
816 self updatePackageContentsMethods |
|
817 ! |
|
818 |
|
819 projectTypeChanged |
|
820 <resource: #uiCallback> |
763 <resource: #uiCallback> |
821 |
764 |
822 self updateListOfMatchingProjects |
765 |p| |
823 ! |
766 |
824 |
767 (p := makeProcess) notNil ifTrue:[ |
825 runBuildProcess |
768 makeProcess := nil. |
826 <resource: #uiCallback> |
769 p terminate. |
827 |
770 p waitUntilTerminated. |
828 Delay waitForSeconds:10 |
771 |
829 ! |
772 makeOutputWindow endEntry. |
830 |
773 makeOutputWindow cr. |
831 selectedApplicationChanged |
774 makeOutputWindow nextPutLine:('Make Cancelled' emphasizeAllWith:{#backgroundColor->Color red. #color->Color white.}). |
832 self selectedApplicationIndexHolder value isNil ifTrue:[ |
775 makeOutputWindow endEntry. |
833 selectedApplication := nil. |
776 ]. |
834 ] ifFalse:[ |
777 ! |
835 selectedApplication := self listOfApplicationsInProject value at:(self selectedApplicationIndexHolder value). |
778 |
836 ]. |
779 generatePackageContentsMethods |
837 self updateApplicationComment. |
|
838 self updateButtonEnableState. |
|
839 ! |
|
840 |
|
841 selectedProjectChanged |
|
842 self selectedProjectIndexHolder value isNil ifTrue:[ |
|
843 selectedProjectDefinition := nil. |
|
844 ] ifFalse:[ |
|
845 selectedProjectDefinition := self listOfMatchingProjects value at:(self selectedProjectIndexHolder value). |
|
846 ]. |
|
847 self updateComment. |
|
848 self updateListOfApplicationsInProject. |
|
849 self updateButtonEnableState. |
|
850 ! |
|
851 |
|
852 updatePackageContentsMethods |
|
853 <resource: #uiCallback> |
780 <resource: #uiCallback> |
854 |
781 |
855 Class packageQuerySignal answer:(selectedProjectDefinition package) |
782 Class packageQuerySignal answer:(selectedProjectDefinition package) |
856 do:[ |
783 do:[ |
857 selectedProjectDefinition |
784 selectedProjectDefinition |
861 forClass:selectedProjectDefinition theMetaclass |
788 forClass:selectedProjectDefinition theMetaclass |
862 inCategory:category. |
789 inCategory:category. |
863 ] |
790 ] |
864 ignoreOldDefinition:true |
791 ignoreOldDefinition:true |
865 ]. |
792 ]. |
|
793 self updateListOfClassesInProject |
|
794 ! |
|
795 |
|
796 projectTypeChanged |
|
797 <resource: #uiCallback> |
|
798 |
|
799 self updateListOfMatchingProjects |
|
800 ! |
|
801 |
|
802 runBuildProcess |
|
803 <resource: #uiCallback> |
|
804 |
|
805 self assert:makeOutputWindow notNil. |
|
806 self assert:makeOutputWindow model == self makeOutputHolder. |
|
807 |
|
808 ActivityNotification handle:[:ex | |
|
809 ex messageText notNil ifTrue:[ |
|
810 makeOutputWindow endEntry. |
|
811 makeOutputWindow cr. |
|
812 makeOutputWindow nextPutLine:(ex messageText emphasizeAllWith:{#backgroundColor->Color blue. #color->Color white.}). |
|
813 makeOutputWindow endEntry. |
|
814 ]. |
|
815 ex proceed. |
|
816 ] do:[ |
|
817 projectBuilder := ProjectBuilder new. |
|
818 projectBuilder package:(selectedProjectDefinition package). |
|
819 projectBuilder buildWithColorizedOutputTo:makeOutputWindow. |
|
820 ]. |
|
821 ! |
|
822 |
|
823 selectedApplicationChanged |
|
824 self selectedApplicationIndexHolder value isNil ifTrue:[ |
|
825 selectedApplication := nil. |
|
826 ] ifFalse:[ |
|
827 selectedApplication := self listOfApplicationsInProject value at:(self selectedApplicationIndexHolder value). |
|
828 ]. |
|
829 self updateApplicationComment. |
|
830 self updateButtonEnableState. |
|
831 ! |
|
832 |
|
833 selectedProjectChanged |
|
834 self selectedProjectIndexHolder value isNil ifTrue:[ |
|
835 selectedProjectDefinition := nil. |
|
836 ] ifFalse:[ |
|
837 selectedProjectDefinition := self listOfMatchingProjects value at:(self selectedProjectIndexHolder value). |
|
838 ]. |
|
839 self updateComment. |
|
840 self updateListOfApplicationsInProject. |
|
841 self updateButtonEnableState. |
866 ! ! |
842 ! ! |
867 |
843 |
868 !ProjectBuilderAssistantApplication methodsFor:'aspects'! |
844 !ProjectBuilderAssistantApplication methodsFor:'aspects'! |
869 |
845 |
870 buildDirectoryHolder |
846 buildDirectoryHolder |
887 buildDirectoryHolder value: buildDirectory. |
863 buildDirectoryHolder value: buildDirectory. |
888 ]. |
864 ]. |
889 ^ buildDirectoryHolder. |
865 ^ buildDirectoryHolder. |
890 ! |
866 ! |
891 |
867 |
|
868 fileBrowserInstance |
|
869 |targetDirectory browser| |
|
870 |
|
871 targetDirectory := projectBuilder packageBuildDirectory. |
|
872 |
|
873 browser := FileBrowserV2 new. |
|
874 browser onDirectory:targetDirectory. |
|
875 browser filter:'*setup*'. |
|
876 ^ browser. |
|
877 ! |
|
878 |
892 hasBuildDirectorySpecified |
879 hasBuildDirectorySpecified |
893 ^ self buildDirectoryHolder value notEmptyOrNil |
880 ^ self buildDirectoryHolder value notEmptyOrNil |
894 ! |
881 ! |
895 |
882 |
896 hasProjectSelected |
883 hasProjectSelected |
935 ! |
922 ! |
936 |
923 |
937 makeOutputHolder |
924 makeOutputHolder |
938 <resource: #uiAspect> |
925 <resource: #uiAspect> |
939 |
926 |
940 "automatically generated by UIPainter ..." |
|
941 |
|
942 "*** the code below creates a default model when invoked." |
|
943 "*** (which may not be the one you wanted)" |
|
944 "*** Please change as required and accept it in the browser." |
|
945 "*** (and replace this comment by something more useful ;-)" |
|
946 |
|
947 makeOutputHolder isNil ifTrue:[ |
927 makeOutputHolder isNil ifTrue:[ |
948 makeOutputHolder := '' asValue. |
928 makeOutputHolder := ValueHolder new. |
949 "/ if your app needs to be notified of changes, uncomment one of the lines below: |
|
950 "/ makeOutputHolder addDependent:self. |
|
951 "/ makeOutputHolder onChangeSend:#makeOutputHolderChanged to:self. |
|
952 ]. |
929 ]. |
953 ^ makeOutputHolder. |
930 ^ makeOutputHolder. |
954 ! |
931 ! |
955 |
932 |
956 newApplicationsName |
933 newApplicationsName |
1076 ]. |
1053 ]. |
1077 ^ stopMakeButtonVisible. |
1054 ^ stopMakeButtonVisible. |
1078 ! ! |
1055 ! ! |
1079 |
1056 |
1080 !ProjectBuilderAssistantApplication methodsFor:'initialization & release'! |
1057 !ProjectBuilderAssistantApplication methodsFor:'initialization & release'! |
|
1058 |
|
1059 postBuildMakeOutputWindow:aView |
|
1060 makeOutputWindow := aView |
|
1061 ! |
1081 |
1062 |
1082 postBuildWith:aBuilder |
1063 postBuildWith:aBuilder |
1083 super postBuildWith:aBuilder. |
1064 super postBuildWith:aBuilder. |
1084 self updateListOfMatchingProjects. |
1065 self updateListOfMatchingProjects. |
1085 |
1066 |
1120 assistantSpec |
1101 assistantSpec |
1121 ^ #(Array |
1102 ^ #(Array |
1122 ( AssistantPageSpec |
1103 ( AssistantPageSpec |
1123 pageTitle: 'Project Type Selection' |
1104 pageTitle: 'Project Type Selection' |
1124 windowSpecSelector: page1_projectTypeSelectionSpec |
1105 windowSpecSelector: page1_projectTypeSelectionSpec |
|
1106 enterCallbackSelector: updateListOfMatchingProjects |
1125 ) |
1107 ) |
1126 |
1108 |
1127 (AssistantPageSpec |
1109 (AssistantPageSpec |
1128 pageTitle: 'Project Selection' |
1110 pageTitle: 'Project Selection' |
1129 windowSpecSelector: page2_projectSelectionSpec |
1111 windowSpecSelector: page2_projectSelectionSpec |
|
1112 enterCallbackSelector: updateListOfMatchingProjects |
1130 ) |
1113 ) |
1131 |
1114 |
1132 (AssistantPageSpec |
1115 (AssistantPageSpec |
1133 pageTitle: 'Application Selection' |
1116 pageTitle: 'Application Selection' |
1134 windowSpecSelector: page3_applicationSelectionSpec |
1117 windowSpecSelector: page3_applicationSelectionSpec |
1135 isEnabledQuerySelector: #projectTypeIsNotLibrary |
1118 isEnabledQuerySelector: #projectTypeIsNotLibrary |
1136 canEnterQuerySelector: #hasProjectSelected |
1119 canEnterQuerySelector: #hasProjectSelected |
|
1120 enterCallbackSelector: updateListOfApplicationsInProject |
1137 ) |
1121 ) |
1138 |
1122 |
1139 (AssistantPageSpec |
1123 (AssistantPageSpec |
1140 pageTitle: 'Specify Contents' |
1124 pageTitle: 'Specify Contents' |
1141 windowSpecSelector: page4_specifyIncludedClasses |
1125 windowSpecSelector: page4_specifyIncludedClasses |
1149 |
1133 |
1150 (AssistantPageSpec |
1134 (AssistantPageSpec |
1151 pageTitle: 'Build' |
1135 pageTitle: 'Build' |
1152 windowSpecSelector: page6_buildSpec |
1136 windowSpecSelector: page6_buildSpec |
1153 canEnterQuerySelector: #hasBuildDirectorySpecified |
1137 canEnterQuerySelector: #hasBuildDirectorySpecified |
|
1138 enterCallbackSelector: #restoreMakeOutputsContents |
|
1139 leaveCallbackSelector: #rememberMakeOutputsContents |
1154 ) |
1140 ) |
1155 |
1141 |
1156 (AssistantPageSpec |
1142 (AssistantPageSpec |
1157 pageTitle: 'Deploy' |
1143 pageTitle: 'Deploy' |
1158 windowSpecSelector: page7_deploySpec |
1144 windowSpecSelector: page7_deploySpec |
1159 ) |
1145 ) |
1160 ) decodeAsLiteralArray. |
1146 ) decodeAsLiteralArray. |
1161 ! ! |
1147 ! ! |
1162 |
1148 |
1163 !ProjectBuilderAssistantApplication methodsFor:'update'! |
1149 !ProjectBuilderAssistantApplication methodsFor:'update'! |
|
1150 |
|
1151 rememberMakeOutputsContents |
|
1152 makeOutputHolder value:(makeOutputWindow contents) |
|
1153 ! |
|
1154 |
|
1155 restoreMakeOutputsContents |
|
1156 makeOutputWindow contents:makeOutputHolder value |
|
1157 ! |
1164 |
1158 |
1165 update:something with:anArgument from:changedObject |
1159 update:something with:anArgument from:changedObject |
1166 changedObject == Smalltalk ifTrue:[ |
1160 changedObject == Smalltalk ifTrue:[ |
1167 (something == #newClass |
1161 (something == #newClass |
1168 or:[something == #classRemove |
1162 or:[something == #classRemove |