cg@1227: " cg@1227: COPYRIGHT (c) 1999 by eXept Software AG cg@1371: All Rights Reserved cg@1227: cg@1227: This software is furnished under a license and may be used cg@1227: only in accordance with the terms of that license and with the cg@1227: inclusion of the above copyright notice. This software may not cg@1227: be provided or otherwise made available to, or used by, any cg@1227: other person. No title to or ownership of the software is cg@1227: hereby transferred. cg@1227: " cg@1227: cg@1227: cg@1227: cg@1227: cg@2076: "{ Package: 'stx:libtool2' }" cg@2076: cg@1037: ToolApplicationModel subclass:#ProjectBrowser cg@1251: instanceVariableNames:'projectTree modifiedChannel selectedTreeNodeHolder cg@1251: lastMoveToProject' cg@1147: classVariableNames:'AlreadCheckedExistingModulesAndPackages' cg@1025: poolDictionaries:'' cg@2076: category:'Interface-Tools' cg@1025: ! cg@1025: cg@1079: TreeItemWithImage subclass:#ProjectTreeItem cg@1109: instanceVariableNames:'action spec info' cg@1025: classVariableNames:'' cg@1025: poolDictionaries:'' cg@1025: privateIn:ProjectBrowser cg@1025: ! cg@1025: cg@1026: ProjectBrowser::ProjectTreeItem subclass:#ProjectNode cg@1026: instanceVariableNames:'' cg@1026: classVariableNames:'' cg@1026: poolDictionaries:'' cg@1026: privateIn:ProjectBrowser cg@1026: ! cg@1026: cg@1227: !ProjectBrowser class methodsFor:'documentation'! cg@1227: cg@1227: copyright cg@1227: " cg@1227: COPYRIGHT (c) 1999 by eXept Software AG cg@1371: All Rights Reserved cg@1227: cg@1227: This software is furnished under a license and may be used cg@1227: only in accordance with the terms of that license and with the cg@1227: inclusion of the above copyright notice. This software may not cg@1227: be provided or otherwise made available to, or used by, any cg@1227: other person. No title to or ownership of the software is cg@1227: hereby transferred. cg@1227: " cg@1227: cg@1227: cg@1227: cg@1227: ! cg@1227: cg@1227: documentation cg@1227: " cg@1227: The new project browser & builder. cg@1227: This one will (eventually) make packaging of classLibraries and cg@1227: applications easier. cg@1227: cg@1227: EXPERIMENTAL: not finished. cg@1227: cg@1227: [start with:] cg@1371: ProjectBrowser open cg@1227: cg@1227: [see also:] cg@1371: Project cg@1227: cg@1227: [author:] cg@1371: Claus Gittinger, eXept Software AG cg@1227: " cg@1227: cg@1227: cg@1227: ! ! cg@1025: cg@1236: !ProjectBrowser class methodsFor:'class initialization'! cg@1236: cg@1236: initialize cg@1236: "add myself to the launchers tool menu" cg@1236: cg@1236: NewLauncher allInstancesDo:[:l | cg@1371: l addUserTool:'Project Builder' cg@1371: action:[ProjectBrowser open] cg@1371: in:#menu cg@1371: after:'Changes Browser' cg@1371: icon:self projectBrowserIcon cg@1371: space:false cg@1236: ]. cg@1236: cg@1236: " cg@1236: self initialize cg@1236: " cg@1237: " cg@1237: NewLauncher allInstancesDo:[:l | cg@1371: l removeUserTool:'Project Builder' cg@1237: ] cg@1237: " cg@1236: ! ! cg@1236: cg@1147: !ProjectBrowser class methodsFor:'help specs'! cg@1147: cg@1147: helpSpec cg@1147: "This resource specification was automatically generated cg@1147: by the UIHelpTool of ST/X." cg@1147: cg@1147: "Do not manually edit this!! If it is corrupted, cg@1147: the UIHelpTool may not be able to read the specification." cg@1147: cg@1147: " cg@1147: UIHelpTool openOnClass:ProjectBrowser cg@1147: " cg@1147: cg@1147: cg@1147: cg@1147: ^super helpSpec addPairsFrom:#( cg@1147: cg@1147: #accept cg@1147: 'Accept modifications made here.' cg@1147: cg@1147: #appType cg@1147: 'An application - ie an executable program (and support files if any).' cg@1147: cg@1147: #cancel cg@1147: 'Undo modifications made here.' cg@1147: cg@1147: #defaultNamespace cg@1147: 'Namespace for new classes when created in the Browser.' cg@1147: cg@1231: #deliverGZipArchive cg@1147: 'Package delivery into a gzip archive (for unix)' cg@1147: cg@1231: #deliverTarArchive cg@1147: 'Package delivery into a tar archive (for unix)' cg@1147: cg@1231: #deliverZipArchive cg@1147: 'Package delivery into a zip archive (for win32)' cg@1147: cg@1231: #deliverCompiledBinary cg@1229: 'Create and deliver as compiled binary (classLibrary) - will only execute on the running systems architecture.' cg@1229: cg@1229: #deliverByteCode cg@1229: 'Create and deliver as bytecode - portable across architectures.' cg@1147: cg@1147: #deliverLoadAll cg@1147: 'Deliver a loadAll script file, which files-In the other files.' cg@1147: cg@1231: #deliverSources cg@1147: 'Include smalltalk sourceCode in the delivery.' cg@1147: cg@1231: #deliverMakefiles cg@1231: 'Include makefiles in the delivery.' cg@1231: cg@1147: #includeSource cg@1147: 'Include smalltalk sourceCode in the delivery.' cg@1147: cg@1147: #installDirMacOS cg@1147: 'The final install directory for MacOS deliveries.' cg@1147: cg@1147: #installDirUnix cg@1147: 'The final install directory for UNIX deliveries.' cg@1147: cg@1147: #installDirVMS cg@1147: 'The final install directory for VMS deliveries.' cg@1147: cg@1147: #installDirWin32 cg@1147: 'The final install directory for Win32 deliveries.' cg@1147: cg@1147: #libType cg@1147: 'A classLibrary addOn (and support files if any)' cg@1147: cg@1303: loadProjectCode cg@1303: 'Load projects classes from the project directory' cg@1303: cg@1223: #methodsFile cg@1223: 'Patches & Extensions are stored in this file.' cg@1223: cg@1147: #packageID cg@1147: 'Package ID used to associate classes & methods to this project.' cg@1147: cg@1147: #projectDir cg@1147: 'The projects directory.' cg@1147: cg@1147: #repositoryDirectory cg@1147: 'The directory path below the module in the source-repository.' cg@1147: cg@1147: #repositoryModule cg@1147: 'The module (top directory) in the source-repository.' cg@1147: cg@1303: #saveProjectFile cg@1303: 'Write a new .prj file.' cg@1303: cg@1147: ) cg@1147: ! ! cg@1147: cg@1079: !ProjectBrowser class methodsFor:'image specs'! cg@1079: cg@1239: bigProjectBrowserIcon cg@1239: "This resource specification was automatically generated cg@1239: by the ImageEditor of ST/X." cg@1239: cg@1239: "Do not manually edit this!! If it is corrupted, cg@1239: the ImageEditor may not be able to read the specification." cg@1239: cg@1239: " cg@1239: self bigProjectBrowserIcon inspect cg@1239: ImageEditor openOnClass:self andSelector:#bigProjectBrowserIcon cg@1239: " cg@1239: cg@1239: cg@1239: cg@1239: ^Icon cg@1371: constantNamed:#'ProjectBrowser bigProjectBrowserIcon' cg@1371: ifAbsentPut:[(Depth2Image new) width: 48; height: 48; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:' cg@1287: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@U@@EUP@@@@@@@@@@U@@EUP@@@@@@@@@UUP cg@1287: @UUU@@@@@@@@EUEPEP@U@@@@@@@@EUEPEP@U@@@@@@@@U@EPEP@U@@@@@@@@U@EPEP@U@@@@@@@@U@EPEP@U@@@@@@@@U@EPEPUU@@@@@@@@EU%Z%UU*(@@@ cg@1287: @@@@EU%Z%UU*"@@@@@@@EUUZUUZ*J@@@@@@@EUUUUUUU*@@@@@@@EUUUUUUU*@@@@@@@J**UU**E*@@@@@@@**%UZ*(%*@@@@@@B**%UZ*"%*@@@@@@@@@UU cg@1287: @@J%*@@@@@@J**UZ**J%*@@@@@@J**UZ**J%*@@@@@@J**UZ**J%*@@@@@@J**UZ**J%*@@@@@@J**UZ**J%*@@@@@@J**UZ**J%*@@@@@@J**UZ**J%*@@@ cg@1287: @@@J**UZ**J%*@@@@@@J**UZ**J%*@@@@@@J**UZ**J%(@@@@@@J**UZ**J% @@@@@@J**UZ**J%@@@@@@@J**UZ**J%@@@@@@@J**UZ**J%@@@@@@@J**UZ cg@1287: **J@@@@@@@@J**UZ**H@@@@@@@@J**UZ**@@@@@@@@@@@@UP@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ cg@1287: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[0 0 0 132 0 132 255 255 0]; mask:((Depth1Image new) width: 48; height: 48; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:' cg@1287: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@8C<@@@@@8C<@@@@G cg@1287: cg@1287: ^Icon cg@1371: constantNamed:#'ProjectBrowser bigProjectBrowserIcon2' cg@1371: ifAbsentPut:[(Depth2Image new) width: 48; height: 48; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:' cg@1287: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@U@@EUP@@@@@@@@@@U@@EUP@@@@@@@@@UUP cg@1287: @UUU@@@@@@@@EUEPEP@U@@@@@@@@EUEPEP@U@@@@@@@@U@EPEP@U@@@@@@@@U@EPEP@U@@@@@@@@U@EPEP@U@@@@@@@@U@EPEPUU@@@@@@@@EU%Z%UU*(@@@ cg@1287: @@@@EU%Z%UU*"@@@@@@@EUUZUUZ*J@@@@@@@EUUUUUUU*@@@@@@@EUUUUUUU*@@@@@@@J**UU**E*@@@@@@@**%UZ*(%*@@@@@@B**%UZ*"%*@@@@@@@@@UU cg@1287: @@J%*@@@@@@J**UZ**J%*@@@@@@J**UZ**J%*@@@@@@J**UZ**J%*@@@@@@J**UZ**J%*@@@@@@J**UZ**J%*@@@@@@J**UZ**J%*@@@@@@J**UZ**J%*@@@ cg@1287: @@@J**UZ**J%*@@@@@@J**UZ**J%*@@@@@@J**UZ**J%(@@@@@@J**UZ**J% @@@@@@J**UZ**J%@@@@@@@J**UZ**J%@@@@@@@J**UZ**J%@@@@@@@J**UZ cg@1287: **J@@@@@@@@J**UZ**H@@@@@@@@J**UZ**@@@@@@@@@@@@UP@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ cg@1287: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[0 0 0 132 0 132 255 255 0]; mask:((Depth1Image new) width: 48; height: 48; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:' cg@1287: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@8C<@@@@@8C<@@@@G cg@1234: cg@1234: ^Icon cg@1371: constantNamed:#'ProjectBrowser buildOptionsIcon' cg@2076: ifAbsentPut:[(Depth2Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@ATET@AUEE@APQAP@TDQT@AY%Z@@UUUX@J%*F@@E@I B)Z"X@*V(&@J%*I B)Z"X@*V($@J%*I@B)Z @@@T@@@@a') ; colorMapFromArray:#[0 0 0 132 0 132 255 255 0]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'A30O[A%LF? cg@1097: cg@1097: ^Icon cg@1371: constantNamed:#'ProjectBrowser classIcon' cg@2076: ifAbsentPut:[(Depth2Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'UUUUUEUUUUQP@@@TTV*%EE@@@AQQUUTTTZ*)@@@@@@@AUUT@@Z*)@@EUUQQQ**$TTUUUEE@@@@AQUUUUTUUUUP@a') ; colorMapFromArray:#[0 0 0 255 255 255 132 130 132]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@C?8O? ?>C?8O? ?>C?8O? ?>C?8O? ?>@@@@@@b') ; yourself); yourself] cg@2076: ! cg@1097: cg@1079: classesIcon cg@1079: "This resource specification was automatically generated cg@1079: by the ImageEditor of ST/X." cg@1079: cg@1079: "Do not manually edit this!! If it is corrupted, cg@1079: the ImageEditor may not be able to read the specification." cg@1079: cg@1079: " cg@1079: self classesIcon inspect cg@1079: ImageEditor openOnClass:self andSelector:#classesIcon cg@1079: " cg@1079: cg@1079: cg@1079: cg@1079: ^Icon cg@1371: constantNamed:#'ProjectBrowser classesIcon' cg@2076: ifAbsentPut:[(Depth2Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@B"B%U(( @@@@HJ**"BBUUX @***H @@@BHB**("@)UZH J**"HB**("@@@@H (***HJ@@@BB*J** * @@@@@a') ; colorMapFromArray:#[0 0 0 132 130 132 255 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'?>C?8O?8??#??/?>??;??/?>??;??/?>O?8?? ?>C?8b') ; yourself); yourself] cg@2076: ! cg@1079: cg@1079: commentIcon cg@1079: "This resource specification was automatically generated cg@1079: by the ImageEditor of ST/X." cg@1079: cg@1079: "Do not manually edit this!! If it is corrupted, cg@1079: the ImageEditor may not be able to read the specification." cg@1079: cg@1079: " cg@1079: self commentIcon inspect cg@1079: ImageEditor openOnClass:self andSelector:#commentIcon cg@1079: " cg@1079: cg@1079: cg@1079: cg@1079: ^Icon cg@1371: constantNamed:#'ProjectBrowser commentIcon' cg@1371: ifAbsentPut:[(Depth2Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'******************U****%Z***)V*********%Z***!!T***(UJ***ER***!!T***(UJ**(UT***(B****(** @a') ; colorMapFromArray:#[0 0 0 0 0 255 255 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:' cg@1287: @@@@@@@@@8@C @N@@@@C @N@@8@C @N@@8@G0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ cg@1287: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ cg@2076: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; yourself); yourself] cg@2076: ! cg@1079: cg@1079: deploymentIcon cg@1079: "This resource specification was automatically generated cg@1079: by the ImageEditor of ST/X." cg@1079: cg@1079: "Do not manually edit this!! If it is corrupted, cg@1079: the ImageEditor may not be able to read the specification." cg@1079: cg@1079: " cg@1079: self deploymentIcon inspect cg@1079: ImageEditor openOnClass:self andSelector:#deploymentIcon cg@1079: " cg@1079: cg@1079: cg@1079: cg@1079: ^Icon cg@1371: constantNamed:#'ProjectBrowser deploymentIcon' cg@2076: ifAbsentPut:[(Depth2Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@ATET@AUEE@APQAP@TDQT@AY%Z@@UUUX@J%*F@@E@I B)Z"X@*V(&@J%*I B)Z"X@*V($@J%*I@B)Z @@@T@@@@a') ; colorMapFromArray:#[0 0 0 132 0 132 255 255 0]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'A30O[A%LF? cg@1079: cg@1079: ^Icon cg@1371: constantNamed:#'ProjectBrowser filesIcon' cg@2076: ifAbsentPut:[(Depth1Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@G:@P@A_(E@@U>!!W;E_ U?9W?!!_>E?8G? _>@@@b') ; colorMapFromArray:#[0 0 0 255 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@C? O?@?>C? cg@1218: cg@1218: ^Icon cg@1371: constantNamed:#'ProjectBrowser methodIcon' cg@2076: ifAbsentPut:[(Depth4Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@DH@@@@@@@@4QA@@@@@@@TQDPP@@@@@@MDQDH@@@@@@PQDQA@@@@@@LTQA@@@@@@@@I@L@@@@@@@@QD@@@@@@@@@H@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 0 0 132 132 0 0 132 0 132 255 0 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@B@@\@C8@_0A? C?@G<@O @\@@ @@@@@@@@@b') ; yourself); yourself] cg@2076: ! cg@1218: cg@1079: methodsIcon cg@1079: "This resource specification was automatically generated cg@1079: by the ImageEditor of ST/X." cg@1079: cg@1079: "Do not manually edit this!! If it is corrupted, cg@1079: the ImageEditor may not be able to read the specification." cg@1079: cg@1079: " cg@1079: self multipleUnlockedMagentaIcon inspect cg@1079: ImageEditor openOnClass:self andSelector:#multipleUnlockedMagentaIcon cg@1079: " cg@1079: cg@1079: cg@1079: cg@1079: ^Icon cg@1371: constantNamed:#'ProjectBrowser methodsIcon' cg@1371: ifAbsentPut:[(Depth4Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@DH@@@@@@@@4QA@@@@@@@TQDPP@@@@@@MDQDH@@@@@@PQDQA@@@@@@LTQA@@@@@@M@I@L@@@@@EDPQD@@@@@@CQDIB@@@@@@DDQDPP@@@@@CEDPP@@@@@@@BPC@@@@@@@@DQ@@@@@@@@@B@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 0 0 132 132 0 0 132 0 132 255 0 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'B@@\@C8@_0A? C?@G<@? G<@_8@?0A?@C8@G@@H@@@@b') ; yourself); yourself] cg@1079: cg@1079: cg@1080: ! cg@1080: cg@1109: prerequisiteClassesIcon cg@1109: cg@1109: cg@1109: ^ self classesIcon cg@1109: ! cg@1109: cg@1291: prerequisitePackagesIcon cg@1109: cg@1109: cg@1109: ^ self projectsIcon cg@1109: ! cg@1109: cg@1080: prerequisitesIcon cg@1080: "This resource specification was automatically generated cg@1080: by the ImageEditor of ST/X." cg@1080: cg@1080: "Do not manually edit this!! If it is corrupted, cg@1080: the ImageEditor may not be able to read the specification." cg@1080: cg@1080: " cg@1080: self prerequisitesIcon inspect cg@1080: ImageEditor openOnClass:self andSelector:#prerequisitesIcon cg@1080: " cg@1080: cg@1080: cg@1080: cg@1080: ^Icon cg@1371: constantNamed:#'ProjectBrowser prerequisitesIcon' cg@2076: ifAbsentPut:[(Depth1Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@C@@L@@@@@@@@@@0A#@F@@X@@@@@L@@0@@@@@@@b') ; colorMapFromArray:#[0 0 0 127 127 127]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@A8@G(@^PA80@C@^@=8S7//^D<@C7#@^LA9@G(@@@@b') ; yourself); yourself] cg@2076: ! cg@1109: cg@1236: projectBrowserIcon cg@1236: "This resource specification was automatically generated cg@1236: by the ImageEditor of ST/X." cg@1236: cg@1236: "Do not manually edit this!! If it is corrupted, cg@1236: the ImageEditor may not be able to read the specification." cg@1236: cg@1236: " cg@1236: self projectBrowserIcon inspect cg@1236: ImageEditor openOnClass:self andSelector:#projectBrowserIcon cg@1236: " cg@1236: cg@1236: cg@1236: cg@1236: ^Icon cg@1371: constantNamed:#'ProjectBrowser projectBrowserIcon' cg@1371: ifAbsentPut:[(Depth2Image new) width: 32; height: 32; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:' cg@1287: @@@T@ET@@@@@@UTAUT@@@@@EQPTAP@@@@APEAPE@@@@@E@TE@T@@@@@TAPTUP@@@@@U%)UZ @@@@AUVUV( @@@@EUUUUZ@@@@@*)U*!!(@@@@B*UZ(& @@@@@ cg@1287: ET@JZ@@@@J*U*()(@@@@*)V*"& @@@B*%Z*JZ@@@@J*U*()(@@@@*)V*"& @@@B*%Z*JZ@@@@J*U*() @@@@*)V*"$@@@@B*%Z*JP@@@@J*U*( @@@@@*)V* cg@1287: @@@@@@@EP@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 132 0 132 255 255 0]; mask:((Depth1Image new) width: 32; height: 32; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:' cg@1287: @FC0@@G1>@@C,1 @A#LX@@X3F@@F_?<@@???@@O??0@C??<@A???@@_??0@_??<@G???@A???0@_??<@G???@A???0@_??<@G??>@A???@@_?? @G??0@A?? cg@2076: 8@@_?<@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; yourself); yourself] cg@2076: ! cg@1236: cg@1109: projectsIcon cg@1109: "This resource specification was automatically generated cg@1109: by the ImageEditor of ST/X." cg@1109: cg@1109: "Do not manually edit this!! If it is corrupted, cg@1109: the ImageEditor may not be able to read the specification." cg@1109: cg@1109: " cg@1109: self projectsIcon inspect cg@1109: ImageEditor openOnClass:self andSelector:#projectsIcon cg@1109: " cg@1109: cg@1109: cg@1109: cg@1109: ^Icon cg@1371: constantNamed:#'ProjectBrowser projectsIcon' cg@2076: ifAbsentPut:[(Depth1Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@_8C?P_;@@\O=0?7C?\O=0?6C?PO<@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 128 128]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@G? ?>G?8??''?>_?9??''?>_?9??G?8_?A?8@@@@@@b') ; yourself); yourself] cg@2076: ! ! cg@1079: cg@1025: !ProjectBrowser class methodsFor:'interface specs'! cg@1025: cg@1240: classValidationDialogSpec cg@1240: "This resource specification was automatically generated cg@1240: by the UIPainter of ST/X." cg@1240: cg@1240: "Do not manually edit this!! If it is corrupted, cg@1240: the UIPainter may not be able to read the specification." cg@1240: cg@1240: " cg@1240: UIPainter new openOnClass:ProjectBrowser andSelector:#classValidationDialogSpec cg@1240: ProjectBrowser new openInterface:#classValidationDialogSpec cg@1240: " cg@1240: cg@1240: cg@1240: cg@1240: ^ cg@1240: #(#FullSpec cg@1371: #name: #classValidationDialogSpec cg@1371: #window: cg@1240: #(#WindowSpec cg@1371: #label: 'ProjectBrowser' cg@1371: #name: 'ProjectBrowser' cg@1371: #min: #(#Point 10 10) cg@1371: #max: #(#Point 1024 768) cg@1371: #bounds: #(#Rectangle 24 554 457 1003) cg@1371: #menu: #mainMenu cg@1371: #icon: #bigProjectBrowserIcon cg@1371: ) cg@1371: #component: cg@1240: #(#SpecCollection cg@1371: #collection: #( cg@1371: #(#VariableVerticalPanelSpec cg@1371: #name: 'VariableVerticalPanel1' cg@1371: #layout: #(#LayoutFrame 0 0.0 0 0.0 0 1.0 -30 1.0) cg@1371: #handles: cg@1371: #(#OrderedCollection cg@1371: #Any 0.5 cg@1371: 1.0 cg@1371: ) cg@1371: #component: cg@1371: #(#SpecCollection cg@1371: #collection: #( cg@1371: #(#ViewSpec cg@1371: #name: 'Box1' cg@1371: #component: cg@1371: #(#SpecCollection cg@1371: #collection: #( cg@1371: #(#LabelSpec cg@1371: #label: 'Classes only in Image' cg@1371: #name: 'Label1' cg@1371: #layout: #(#LayoutFrame 0 0 0 0 0 1 30 0) cg@1371: #translateLabel: true cg@1371: #adjust: #left cg@1371: ) cg@1371: #(#SequenceViewSpec cg@1371: #name: 'List2' cg@1371: #layout: #(#LayoutFrame 0 0.0 30 0.0 0 1.0 0 1.0) cg@1371: #hasHorizontalScrollBar: true cg@1371: #hasVerticalScrollBar: true cg@1371: #useIndex: false cg@1371: #sequenceList: #classesInImageOnly cg@1371: ) cg@1371: ) cg@1240: cg@1371: ) cg@1371: ) cg@1371: #(#ViewSpec cg@1371: #name: 'Box2' cg@1371: #component: cg@1371: #(#SpecCollection cg@1371: #collection: #( cg@1371: #(#LabelSpec cg@1371: #label: 'Classes only in Project' cg@1371: #name: 'Label2' cg@1371: #layout: #(#LayoutFrame 0 0 0 0 0 1 30 0) cg@1371: #translateLabel: true cg@1371: #adjust: #left cg@1371: ) cg@1371: #(#SequenceViewSpec cg@1371: #name: 'List1' cg@1371: #layout: #(#LayoutFrame 0 0.0 30 0.0 0 1.0 0 1.0) cg@1371: #hasHorizontalScrollBar: true cg@1371: #hasVerticalScrollBar: true cg@1371: #useIndex: false cg@1371: #sequenceList: #classesInProjectOnly cg@1371: ) cg@1371: ) cg@1240: cg@1371: ) cg@1371: ) cg@1371: ) cg@1240: cg@1371: ) cg@1371: ) cg@1371: #(#HorizontalPanelViewSpec cg@1371: #name: 'HorizontalPanel1' cg@1371: #layout: #(#LayoutFrame 0 0 -30 1 0 1 0 1) cg@1371: #horizontalLayout: #center cg@1371: #verticalLayout: #center cg@1371: #horizontalSpace: 3 cg@1371: #verticalSpace: 3 cg@1371: #component: cg@1371: #(#SpecCollection cg@1371: #collection: #( cg@1371: #(#ActionButtonSpec cg@1371: #label: 'OK' cg@1371: #name: 'Button1' cg@1371: #translateLabel: true cg@1371: #model: #closeRequest cg@1371: #extent: #(#Point 125 22) cg@1371: ) cg@1371: ) cg@1240: cg@1371: ) cg@1371: ) cg@1371: ) cg@1240: cg@1371: ) cg@1240: ) cg@1240: ! cg@1240: cg@1025: emptyRightCanvasSpec cg@1025: "This resource specification was automatically generated cg@1025: by the UIPainter of ST/X." cg@1025: cg@1025: "Do not manually edit this!! If it is corrupted, cg@1025: the UIPainter may not be able to read the specification." cg@1025: cg@1025: " cg@1025: UIPainter new openOnClass:ProjectBrowser andSelector:#emptyRightCanvasSpec cg@1025: ProjectBrowser new openInterface:#emptyRightCanvasSpec cg@1025: " cg@1025: cg@1025: cg@1025: cg@1232: ^ cg@1232: #(#FullSpec cg@1371: #name: #emptyRightCanvasSpec cg@1371: #window: cg@1232: #(#WindowSpec cg@1371: #label: 'NewApplication' cg@1371: #name: 'NewApplication' cg@1371: #min: #(#Point 10 10) cg@1371: #max: #(#Point 1280 1024) cg@1371: #bounds: #(#Rectangle 10 20 310 320) cg@1371: ) cg@1371: #component: cg@1232: #(#SpecCollection cg@1371: #collection: #( cg@1371: #(#TextEditorSpec cg@1371: #name: 'TextEditor1' cg@1371: #layout: #(#LayoutFrame 0 0.0 0 0.0 0 1.0 0 1.0) cg@1371: #initiallyInvisible: true cg@1371: #model: #rightCanvasTextHolder cg@1371: #hasHorizontalScrollBar: true cg@1371: #hasVerticalScrollBar: true cg@1371: #miniScrollerHorizontal: true cg@1371: #isReadOnly: true cg@1371: ) cg@1371: ) cg@1232: cg@1371: ) cg@1025: ) cg@1025: ! cg@1025: cg@1255: methodValidationDialogSpec cg@1255: "This resource specification was automatically generated cg@1255: by the UIPainter of ST/X." cg@1255: cg@1255: "Do not manually edit this!! If it is corrupted, cg@1255: the UIPainter may not be able to read the specification." cg@1255: cg@1255: " cg@1255: UIPainter new openOnClass:ProjectBrowser andSelector:#classValidationDialogSpec cg@1255: ProjectBrowser new openInterface:#classValidationDialogSpec cg@1255: " cg@1255: cg@1255: cg@1255: cg@1255: ^ cg@1255: #(#FullSpec cg@1371: #name: #classValidationDialogSpec cg@1371: #window: cg@1255: #(#WindowSpec cg@1371: #label: 'ProjectBrowser' cg@1371: #name: 'ProjectBrowser' cg@1371: #min: #(#Point 10 10) cg@1371: #max: #(#Point 1024 768) cg@1371: #bounds: #(#Rectangle 24 554 457 1003) cg@1371: #menu: #mainMenu cg@1371: #icon: #bigProjectBrowserIcon cg@1371: ) cg@1371: #component: cg@1255: #(#SpecCollection cg@1371: #collection: #( cg@1371: #(#VariableVerticalPanelSpec cg@1371: #name: 'VariableVerticalPanel1' cg@1371: #layout: #(#LayoutFrame 0 0.0 0 0.0 0 1.0 -30 1.0) cg@1371: #handles: cg@1371: #(#OrderedCollection cg@1371: #Any 0.5 cg@1371: 1.0 cg@1371: ) cg@1371: #component: cg@1371: #(#SpecCollection cg@1371: #collection: #( cg@1371: #(#ViewSpec cg@1371: #name: 'Box1' cg@1371: #component: cg@1371: #(#SpecCollection cg@1371: #collection: #( cg@1371: #(#LabelSpec cg@1371: #label: 'Methods only in Image' cg@1371: #name: 'Label1' cg@1371: #layout: #(#LayoutFrame 0 0 0 0 0 1 30 0) cg@1371: #translateLabel: true cg@1371: #adjust: #left cg@1371: ) cg@1371: #(#SequenceViewSpec cg@1371: #name: 'List2' cg@1371: #layout: #(#LayoutFrame 0 0.0 30 0.0 0 1.0 0 1.0) cg@1371: #hasHorizontalScrollBar: true cg@1371: #hasVerticalScrollBar: true cg@1371: #useIndex: false cg@1371: #sequenceList: #methodsInImageOnly cg@1371: ) cg@1371: ) cg@1255: cg@1371: ) cg@1371: ) cg@1371: #(#ViewSpec cg@1371: #name: 'Box2' cg@1371: #component: cg@1371: #(#SpecCollection cg@1371: #collection: #( cg@1371: #(#LabelSpec cg@1371: #label: 'Methods only in Project' cg@1371: #name: 'Label2' cg@1371: #layout: #(#LayoutFrame 0 0 0 0 0 1 30 0) cg@1371: #translateLabel: true cg@1371: #adjust: #left cg@1371: ) cg@1371: #(#SequenceViewSpec cg@1371: #name: 'List1' cg@1371: #layout: #(#LayoutFrame 0 0.0 30 0.0 0 1.0 0 1.0) cg@1371: #hasHorizontalScrollBar: true cg@1371: #hasVerticalScrollBar: true cg@1371: #useIndex: false cg@1371: #sequenceList: #methodsInProjectOnly cg@1371: ) cg@1371: ) cg@1255: cg@1371: ) cg@1371: ) cg@1371: ) cg@1255: cg@1371: ) cg@1371: ) cg@1371: #(#HorizontalPanelViewSpec cg@1371: #name: 'HorizontalPanel1' cg@1371: #layout: #(#LayoutFrame 0 0 -30 1 0 1 0 1) cg@1371: #horizontalLayout: #center cg@1371: #verticalLayout: #center cg@1371: #horizontalSpace: 3 cg@1371: #verticalSpace: 3 cg@1371: #component: cg@1371: #(#SpecCollection cg@1371: #collection: #( cg@1371: #(#ActionButtonSpec cg@1371: #label: 'OK' cg@1371: #name: 'Button1' cg@1371: #translateLabel: true cg@1371: #model: #closeRequest cg@1371: #extent: #(#Point 125 22) cg@1371: ) cg@1371: ) cg@1255: cg@1371: ) cg@1371: ) cg@1371: ) cg@1255: cg@1371: ) cg@1255: ) cg@1255: ! cg@1255: cg@1234: rightCanvasSpecForBuildOptions cg@1234: "This resource specification was automatically generated cg@1234: by the UIPainter of ST/X." cg@1234: cg@1234: "Do not manually edit this!! If it is corrupted, cg@1234: the UIPainter may not be able to read the specification." cg@1234: cg@1234: " cg@1234: UIPainter new openOnClass:ProjectBrowser andSelector:#rightCanvasSpecForBuildOptions cg@1234: ProjectBrowser new openInterface:#rightCanvasSpecForBuildOptions cg@1234: " cg@1234: cg@1234: cg@1234: cg@1234: ^ cg@1234: #(#FullSpec cg@1371: #name: #rightCanvasSpecForBuildOptions cg@1371: #window: cg@1234: #(#WindowSpec cg@1371: #label: 'NewApplication' cg@1371: #name: 'NewApplication' cg@1371: #min: #(#Point 10 10) cg@1371: #max: #(#Point 1280 1024) cg@1371: #bounds: #(#Rectangle 216 173 577 536) cg@1371: ) cg@1371: #component: cg@1234: #(#SpecCollection cg@1371: #collection: #( cg@1371: #(#FramedBoxSpec cg@1371: #label: 'STC Compiler Warnings' cg@1371: #name: 'FramedBox2' cg@1371: #layout: #(#LayoutFrame 0 0.0 0 0.0 0 1.0 146 0) cg@1371: #labelPosition: #topLeft cg@1371: #translateLabel: true cg@1371: #component: cg@1371: #(#SpecCollection cg@1371: #collection: #( cg@1371: #(#CheckBoxSpec cg@1371: #label: 'Non Standard Language Features' cg@1371: #name: 'CheckBox1' cg@1371: #layout: #(#LayoutFrame 0 0.0 9 0 0 1.0 31 0) cg@1371: #tabable: true cg@1371: #model: #makeWarnNonStandard cg@1371: #translateLabel: true cg@1371: ) cg@1371: #(#CheckBoxSpec cg@1371: #label: 'End-of-line Comments' cg@1371: #name: 'CheckBox2' cg@1371: #layout: #(#LayoutFrame 0 0.0 36 0 0 1.0 58 0) cg@1371: #tabable: true cg@1371: #model: #makeWarnEOLComments cg@1371: #translateLabel: true cg@1371: ) cg@1371: #(#LabelSpec cg@1371: #label: 'other warning options:' cg@1371: #name: 'Label3' cg@1371: #layout: #(#LayoutFrame 0 0.0 69 0 0 1.0 91 0) cg@1371: #translateLabel: true cg@1371: #adjust: #left cg@1371: ) cg@1371: #(#InputFieldSpec cg@1371: #name: 'EntryField1' cg@1371: #layout: #(#LayoutFrame 0 0.0 93 0 0 1.0 115 0) cg@1371: #activeHelpKey: #projectDir cg@1371: #tabable: true cg@1371: #model: #makeOtherWarningOptions cg@1371: #acceptChannel: #acceptChannel cg@1371: #modifiedChannel: #modifiedChannel cg@1371: #acceptOnPointerLeave: false cg@1371: ) cg@1371: ) cg@1234: cg@1371: ) cg@1371: ) cg@1371: #(#FramedBoxSpec cg@1371: #label: 'STC Compiler Includes' cg@1371: #name: 'FramedBox3' cg@1371: #layout: #(#LayoutFrame 0 0.0 146 0.0 0 1.0 203 0) cg@1371: #labelPosition: #topLeft cg@1371: #translateLabel: true cg@1371: #component: cg@1371: #(#SpecCollection cg@1371: #collection: #( cg@1371: #(#InputFieldSpec cg@1371: #name: 'EntryField2' cg@1371: #layout: #(#LayoutFrame 0 0.0 4 0 0 1.0 26 0) cg@1371: #activeHelpKey: #repositoryModule cg@1371: #tabable: true cg@1371: #model: #makeIncludes cg@1371: #acceptChannel: #acceptChannel cg@1371: #modifiedChannel: #modifiedChannel cg@1371: #acceptOnPointerLeave: false cg@1371: ) cg@1371: ) cg@1234: cg@1371: ) cg@1371: ) cg@1371: #(#FramedBoxSpec cg@1371: #label: 'STC Compiler Defines' cg@1371: #name: 'FramedBox5' cg@1371: #layout: #(#LayoutFrame 0 0.0 210 0.0 0 1.0 267 0) cg@1371: #labelPosition: #topLeft cg@1371: #translateLabel: true cg@1371: #component: cg@1371: #(#SpecCollection cg@1371: #collection: #( cg@1371: #(#InputFieldSpec cg@1371: #name: 'EntryField5' cg@1371: #layout: #(#LayoutFrame 0 0.0 4 0 0 1.0 26 0) cg@1371: #activeHelpKey: #repositoryModule cg@1371: #tabable: true cg@1371: #model: #makeDefines cg@1371: #acceptChannel: #acceptChannel cg@1371: #modifiedChannel: #modifiedChannel cg@1371: #acceptOnPointerLeave: false cg@1371: ) cg@1371: ) cg@1234: cg@1371: ) cg@1371: ) cg@1371: #(#HorizontalPanelViewSpec cg@1371: #name: 'HorizontalPanel1' cg@1371: #layout: #(#LayoutFrame 0 0 -30 1 0 1 0 1) cg@1371: #horizontalLayout: #fitSpace cg@1371: #verticalLayout: #center cg@1371: #horizontalSpace: 3 cg@1371: #verticalSpace: 3 cg@1371: #component: cg@1371: #(#SpecCollection cg@1371: #collection: #( cg@1371: #(#ActionButtonSpec cg@1371: #label: 'Cancel' cg@1371: #name: 'Button1' cg@1371: #activeHelpKey: #cancel cg@1371: #translateLabel: true cg@1371: #model: #cancel cg@1371: #enableChannel: #modifiedChannel cg@1371: #actionValue: '' cg@1371: #useDefaultExtent: true cg@1371: ) cg@1371: #(#ActionButtonSpec cg@1371: #label: 'OK' cg@1371: #name: 'Button2' cg@1371: #activeHelpKey: #accept cg@1371: #translateLabel: true cg@1371: #model: #accept cg@1371: #enableChannel: #modifiedChannel cg@1371: #useDefaultExtent: true cg@1371: ) cg@1371: ) cg@1234: cg@1371: ) cg@1371: ) cg@1371: ) cg@1234: cg@1371: ) cg@1234: ) cg@1234: ! cg@1234: cg@1037: rightCanvasSpecForClassList cg@1037: "This resource specification was automatically generated cg@1037: by the UIPainter of ST/X." cg@1037: cg@1037: "Do not manually edit this!! If it is corrupted, cg@1037: the UIPainter may not be able to read the specification." cg@1037: cg@1037: " cg@1037: UIPainter new openOnClass:ProjectBrowser andSelector:#rightCanvasSpecForClassList cg@1037: ProjectBrowser new openInterface:#rightCanvasSpecForClassList cg@1037: " cg@1037: cg@1037: cg@1037: cg@1218: ^ cg@1218: #(#FullSpec cg@1371: #name: #rightCanvasSpecForClassList cg@1371: #window: cg@1218: #(#WindowSpec cg@1371: #label: 'NewApplication' cg@1371: #name: 'NewApplication' cg@1371: #min: #(#Point 10 10) cg@1371: #max: #(#Point 1280 1024) cg@1371: #bounds: #(#Rectangle 10 20 310 320) cg@1371: ) cg@1371: #component: cg@1218: #(#SpecCollection cg@1371: #collection: #( cg@1371: #(#DataSetSpec cg@1371: #name: 'classTable' cg@1371: #layout: #(#LayoutFrame 0 0.0 0 0.0 0 1.0 0 1.0) cg@1371: #hasHorizontalScrollBar: true cg@1371: #hasVerticalScrollBar: true cg@1371: #miniScrollerHorizontal: true cg@1371: #dataList: #classList cg@1371: #has3Dsepartors: false cg@1371: #columnHolder: #classTableColumns cg@1371: #verticalSpacing: 0 cg@1371: #columnAdaptor: #classTableAdaptor cg@1371: ) cg@1371: ) cg@1218: cg@1371: ) cg@1037: ) cg@1037: ! cg@1037: cg@1081: rightCanvasSpecForDeployment cg@1081: "This resource specification was automatically generated cg@1081: by the UIPainter of ST/X." cg@1081: cg@1081: "Do not manually edit this!! If it is corrupted, cg@1081: the UIPainter may not be able to read the specification." cg@1081: cg@1081: " cg@1081: UIPainter new openOnClass:ProjectBrowser andSelector:#rightCanvasSpecForDeployment cg@1081: ProjectBrowser new openInterface:#rightCanvasSpecForDeployment cg@1081: " cg@1081: cg@1081: cg@1081: cg@1088: ^ cg@1088: #(#FullSpec cg@1371: #name: #rightCanvasSpecForDeployment cg@1371: #window: cg@1088: #(#WindowSpec cg@1371: #label: 'NewApplication' cg@1371: #name: 'NewApplication' cg@1371: #min: #(#Point 10 10) cg@1371: #max: #(#Point 1280 1024) cg@1371: #bounds: #(#Rectangle 12 22 365 521) cg@1371: ) cg@1371: #component: cg@1088: #(#SpecCollection cg@1371: #collection: #( cg@1371: #(#FramedBoxSpec cg@1371: #label: 'Deliver' cg@1371: #name: 'DeliverBox' cg@1371: #layout: #(#LayoutFrame 0 0.0 0 0.0 0 1.0 172 0) cg@1371: #labelPosition: #topLeft cg@1371: #translateLabel: true cg@1371: #component: cg@1371: #(#SpecCollection cg@1371: #collection: #( cg@1371: #(#CheckBoxSpec cg@1371: #label: '''loadAll''-File' cg@1371: #name: 'CheckBox5' cg@1371: #layout: #(#LayoutFrame 0 0.0 67 0 0 1.0 89 0) cg@1371: #activeHelpKey: #deliverLoadAll cg@1371: #tabable: true cg@1371: #model: #deliverLoadAllFile cg@1371: #translateLabel: true cg@1371: ) cg@1371: #(#CheckBoxSpec cg@1371: #label: 'Compiled Binary (non-portable .dll / .so)' cg@1371: #name: 'CheckBox6' cg@1371: #layout: #(#LayoutFrame 0 0.0 32 0 0 1.0 54 0) cg@1371: #activeHelpKey: #deliverCompiledBinary cg@1371: #tabable: true cg@1371: #model: #deliverCompiledBinary cg@1371: #translateLabel: true cg@1371: ) cg@1371: #(#CheckBoxSpec cg@1371: #label: 'Bytecode Binary (portable)' cg@1371: #name: 'CheckBox1' cg@1371: #layout: #(#LayoutFrame 0 0.0 8 0 0 1.0 30 0) cg@1371: #activeHelpKey: #deliverByteCode cg@1371: #tabable: true cg@1371: #model: #deliverByteCode cg@1371: #translateLabel: true cg@1371: ) cg@1371: #(#CheckBoxSpec cg@1371: #label: 'Sources' cg@1371: #name: 'CheckBox4' cg@1371: #layout: #(#LayoutFrame 0 0.0 90 0 0 1.0 112 0) cg@1371: #activeHelpKey: #deliverSources cg@1371: #tabable: true cg@1371: #model: #deliverSources cg@1371: #translateLabel: true cg@1371: ) cg@1371: #(#CheckBoxSpec cg@1371: #label: 'Makefiles' cg@1371: #name: 'CheckBox8' cg@1371: #layout: #(#LayoutFrame 0 0.0 113 0 0 1.0 135 0) cg@1371: #activeHelpKey: #deliverMakefiles cg@1371: #tabable: true cg@1371: #model: #deliverMakefiles cg@1371: #translateLabel: true cg@1371: ) cg@1371: ) cg@1091: cg@1371: ) cg@1371: ) cg@1371: #(#FramedBoxSpec cg@1371: #label: 'Format' cg@1371: #name: 'DeliverAsBox' cg@1371: #layout: #(#LayoutFrame 0 0.0 172 0 0 1.0 290 0) cg@1371: #labelPosition: #topLeft cg@1371: #translateLabel: true cg@1371: #component: cg@1371: #(#SpecCollection cg@1371: #collection: #( cg@1371: #(#CheckBoxSpec cg@1371: #label: 'Tar Archive (.tar - for unix)' cg@1371: #name: 'CheckBox7' cg@1371: #layout: #(#LayoutFrame 0 0.0 34 0 0 1.0 56 0) cg@1371: #activeHelpKey: #deliverTarArchive cg@1371: #tabable: true cg@1371: #model: #deliverTarArchive cg@1371: #translateLabel: true cg@1371: ) cg@1371: #(#CheckBoxSpec cg@1371: #label: 'Zip Archive (.zip - for windows)' cg@1371: #name: 'CheckBox2' cg@1371: #layout: #(#LayoutFrame 0 0.0 10 0 0 1.0 32 0) cg@1371: #activeHelpKey: #deliverZipArchive cg@1371: #tabable: true cg@1371: #model: #deliverZipArchive cg@1371: #translateLabel: true cg@1371: ) cg@1371: #(#CheckBoxSpec cg@1371: #label: 'GZip Archive (self extracting for unix)' cg@1371: #name: 'CheckBox3' cg@1371: #layout: #(#LayoutFrame 0 0.0 58 0 0 1.0 80 0) cg@1371: #activeHelpKey: #deliverGZipArchive cg@1371: #tabable: true cg@1371: #model: #deliverGZipArchive cg@1371: #translateLabel: true cg@1371: ) cg@1371: ) cg@1231: cg@1371: ) cg@1371: ) cg@1371: #(#FramedBoxSpec cg@1371: #label: 'Target Install Directory' cg@1371: #name: 'DestinationBox' cg@1371: #layout: #(#LayoutFrame 0 0.0 295 0 0 1.0 448 0) cg@1371: #labelPosition: #topLeft cg@1371: #translateLabel: true cg@1371: #component: cg@1371: #(#SpecCollection cg@1371: #collection: #( cg@1371: #(#LabelSpec cg@1371: #label: 'Unix:' cg@1371: #name: 'Label1' cg@1371: #layout: #(#AlignmentOrigin 76 0.0 16 0 1 0.5) cg@1371: #translateLabel: true cg@1371: #resizeForLabel: true cg@1371: #adjust: #right cg@1371: ) cg@1371: #(#InputFieldSpec cg@1371: #name: 'EntryField1' cg@1371: #layout: #(#LayoutFrame 80 0.0 4 0 0 1.0 26 0) cg@1371: #activeHelpKey: #installDirUnix cg@1371: #enableChannel: #canDeliverForUnix cg@1371: #tabable: true cg@1371: #model: #installDirectoryUnix cg@1371: #acceptChannel: #acceptChannel cg@1371: #modifiedChannel: #modifiedChannel cg@1371: #acceptOnPointerLeave: false cg@1371: ) cg@1371: #(#LabelSpec cg@1371: #label: 'Win32:' cg@1371: #name: 'Label2' cg@1371: #layout: #(#AlignmentOrigin 76 0.0 47 0 1 0.5) cg@1371: #translateLabel: true cg@1371: #resizeForLabel: true cg@1371: #adjust: #right cg@1371: ) cg@1371: #(#InputFieldSpec cg@1371: #name: 'EntryField2' cg@1371: #layout: #(#LayoutFrame 80 0.0 34 0 0 1.0 56 0) cg@1371: #activeHelpKey: #installDirWin32 cg@1371: #enableChannel: #canDeliverForWin32 cg@1371: #tabable: true cg@1371: #model: #installDirectoryWin32 cg@1371: #acceptChannel: #acceptChannel cg@1371: #modifiedChannel: #modifiedChannel cg@1371: #acceptOnPointerLeave: false cg@1371: ) cg@1371: #(#LabelSpec cg@1371: #label: 'VMS:' cg@1371: #name: 'Label3' cg@1371: #layout: #(#AlignmentOrigin 76 0.0 76 0 1 0.5) cg@1371: #translateLabel: true cg@1371: #resizeForLabel: true cg@1371: #adjust: #right cg@1371: ) cg@1371: #(#InputFieldSpec cg@1371: #name: 'EntryField3' cg@1371: #layout: #(#LayoutFrame 80 0.0 63 0 0 1.0 85 0) cg@1371: #activeHelpKey: #installDirVMS cg@1371: #initiallyDisabled: true cg@1371: #enableChannel: #canDeliverForVMS cg@1371: #tabable: true cg@1371: #model: #installDirectoryVMS cg@1371: #acceptChannel: #acceptChannel cg@1371: #modifiedChannel: #modifiedChannel cg@1371: #acceptOnPointerLeave: false cg@1371: ) cg@1371: #(#LabelSpec cg@1371: #label: 'MacOS:' cg@1371: #name: 'Label4' cg@1371: #layout: #(#AlignmentOrigin 76 0.0 106 0 1 0.5) cg@1371: #translateLabel: true cg@1371: #resizeForLabel: true cg@1371: #adjust: #right cg@1371: ) cg@1371: #(#InputFieldSpec cg@1371: #name: 'EntryField4' cg@1371: #layout: #(#LayoutFrame 80 0.0 93 0 0 1.0 115 0) cg@1371: #activeHelpKey: #installDirMacOS cg@1371: #initiallyDisabled: true cg@1371: #enableChannel: #canDeliverForMacOS cg@1371: #tabable: true cg@1371: #model: #installDirectoryMac cg@1371: #acceptChannel: #acceptChannel cg@1371: #modifiedChannel: #modifiedChannel cg@1371: #acceptOnPointerLeave: false cg@1371: ) cg@1371: ) cg@1091: cg@1371: ) cg@1371: ) cg@1371: #(#HorizontalPanelViewSpec cg@1371: #name: 'HorizontalPanel1' cg@1371: #layout: #(#LayoutFrame 0 0 -30 1 0 1 0 1) cg@1371: #horizontalLayout: #fitSpace cg@1371: #verticalLayout: #center cg@1371: #horizontalSpace: 3 cg@1371: #verticalSpace: 3 cg@1371: #component: cg@1371: #(#SpecCollection cg@1371: #collection: #( cg@1371: #(#ActionButtonSpec cg@1371: #label: 'Cancel' cg@1371: #name: 'Button1' cg@1371: #translateLabel: true cg@1371: #tabable: true cg@1371: #model: #cancel cg@1371: #enableChannel: #modifiedChannel cg@1371: #actionValue: '' cg@1371: #useDefaultExtent: true cg@1371: ) cg@1371: #(#ActionButtonSpec cg@1371: #label: 'OK' cg@1371: #name: 'Button2' cg@1371: #translateLabel: true cg@1371: #tabable: true cg@1371: #model: #accept cg@1371: #enableChannel: #modifiedChannel cg@1371: #actionValue: '' cg@1371: #useDefaultExtent: true cg@1371: ) cg@1371: ) cg@1088: cg@1371: ) cg@1371: ) cg@1371: ) cg@1088: cg@1371: ) cg@1088: ) cg@1081: ! cg@1081: cg@1026: rightCanvasSpecForEditableText cg@1026: "This resource specification was automatically generated cg@1026: by the UIPainter of ST/X." cg@1026: cg@1026: "Do not manually edit this!! If it is corrupted, cg@1026: the UIPainter may not be able to read the specification." cg@1026: cg@1026: " cg@1232: UIPainter new openOnClass:ProjectBrowser andSelector:#rightCanvasSpecForEditableText cg@1232: ProjectBrowser new openInterface:#rightCanvasSpecForEditableText cg@1026: " cg@1026: cg@1026: cg@1026: cg@1232: ^ cg@1232: #(#FullSpec cg@1371: #name: #rightCanvasSpecForEditableText cg@1371: #window: cg@1232: #(#WindowSpec cg@1371: #label: 'NewApplication' cg@1371: #name: 'NewApplication' cg@1371: #min: #(#Point 10 10) cg@1371: #max: #(#Point 1280 1024) cg@1371: #bounds: #(#Rectangle 216 173 516 473) cg@1371: ) cg@1371: #component: cg@1232: #(#SpecCollection cg@1371: #collection: #( cg@1371: #(#TextEditorSpec cg@1371: #name: 'TextEditor1' cg@1371: #layout: #(#LayoutFrame 0 0.0 30 0.0 0 1.0 0 1.0) cg@1371: #model: #rightCanvasTextHolder cg@1371: #hasHorizontalScrollBar: true cg@1371: #hasVerticalScrollBar: true cg@1371: #miniScrollerHorizontal: true cg@1371: ) cg@1371: #(#LabelSpec cg@1371: #label: 'Label' cg@1371: #name: 'Label1' cg@1371: #layout: #(#LayoutFrame 0 0 0 0 0 1 30 0) cg@1371: #translateLabel: true cg@1371: #labelChannel: #textCanvasLabelHolder cg@1371: #adjust: #left cg@1371: ) cg@1371: ) cg@1232: cg@1371: ) cg@1026: ) cg@1026: ! cg@1026: cg@1218: rightCanvasSpecForFiles cg@1218: "This resource specification was automatically generated cg@1218: by the UIPainter of ST/X." cg@1218: cg@1218: "Do not manually edit this!! If it is corrupted, cg@1218: the UIPainter may not be able to read the specification." cg@1218: cg@1218: " cg@1218: UIPainter new openOnClass:ProjectBrowser andSelector:#rightCanvasSpecForFiles cg@1218: ProjectBrowser new openInterface:#rightCanvasSpecForFiles cg@1218: " cg@1218: cg@1218: cg@1218: cg@1218: ^ cg@1218: #(#FullSpec cg@1371: #name: #rightCanvasSpecForFiles cg@1371: #window: cg@1218: #(#WindowSpec cg@1371: #label: 'NewApplication' cg@1371: #name: 'NewApplication' cg@1371: #min: #(#Point 10 10) cg@1371: #max: #(#Point 1280 1024) cg@1371: #bounds: #(#Rectangle 216 173 577 536) cg@1371: ) cg@1371: #component: cg@1218: #(#SpecCollection cg@1371: #collection: #( cg@1371: #(#FramedBoxSpec cg@1371: #label: 'File for extensions & patches' cg@1371: #name: 'FramedBox2' cg@1371: #layout: #(#LayoutFrame 0 0.0 62 0.0 0 1.0 122 0) cg@1371: #labelPosition: #topLeft cg@1371: #translateLabel: true cg@1371: #component: cg@1371: #(#SpecCollection cg@1371: #collection: #( cg@1371: #(#InputFieldSpec cg@1371: #name: 'methodsFileEntryField' cg@1371: #layout: #(#LayoutFrame 0 0.0 1 0 0 1.0 23 0) cg@1371: #activeHelpKey: #methodsFile cg@1371: #model: #methodsFile cg@1371: #acceptChannel: #acceptChannel cg@1371: #modifiedChannel: #modifiedChannel cg@1371: #acceptOnPointerLeave: false cg@1371: ) cg@1371: ) cg@1218: cg@1371: ) cg@1371: ) cg@1371: #(#HorizontalPanelViewSpec cg@1371: #name: 'HorizontalPanel1' cg@1371: #layout: #(#LayoutFrame 0 0 -30 1 0 1 0 1) cg@1371: #horizontalLayout: #fitSpace cg@1371: #verticalLayout: #center cg@1371: #horizontalSpace: 3 cg@1371: #verticalSpace: 3 cg@1371: #component: cg@1371: #(#SpecCollection cg@1371: #collection: #( cg@1371: #(#ActionButtonSpec cg@1371: #label: 'Cancel' cg@1371: #name: 'Button1' cg@1371: #activeHelpKey: #cancel cg@1371: #translateLabel: true cg@1371: #model: #cancel cg@1371: #enableChannel: #modifiedChannel cg@1371: #actionValue: '' cg@1371: #useDefaultExtent: true cg@1371: ) cg@1371: #(#ActionButtonSpec cg@1371: #label: 'OK' cg@1371: #name: 'Button2' cg@1371: #activeHelpKey: #accept cg@1371: #translateLabel: true cg@1371: #model: #accept cg@1371: #enableChannel: #modifiedChannel cg@1371: #useDefaultExtent: true cg@1371: ) cg@1371: ) cg@1218: cg@1371: ) cg@1371: ) cg@1371: ) cg@1218: cg@1371: ) cg@1218: ) cg@1218: ! cg@1218: cg@1037: rightCanvasSpecForHTMLText cg@1037: "This resource specification was automatically generated cg@1037: by the UIPainter of ST/X." cg@1037: cg@1037: "Do not manually edit this!! If it is corrupted, cg@1037: the UIPainter may not be able to read the specification." cg@1037: cg@1037: " cg@1037: UIPainter new openOnClass:ProjectBrowser andSelector:#rightCanvasSpecForHTMLText cg@1037: ProjectBrowser new openInterface:#rightCanvasSpecForHTMLText cg@1037: " cg@1037: cg@1037: cg@1037: cg@1037: ^ cg@1037: cg@1037: #(#FullSpec cg@1371: #window: cg@1371: #(#WindowSpec cg@1371: #name: 'NewApplication' cg@1371: #layout: #(#LayoutFrame 216 0 173 0 515 0 472 0) cg@1371: #level: 0 cg@1371: #label: 'NewApplication' cg@1371: #min: #(#Point 10 10) cg@1371: #max: #(#Point 1280 1024) cg@1371: #bounds: #(#Rectangle 216 173 516 473) cg@1371: #usePreferredExtent: false cg@1371: ) cg@1371: #component: cg@1371: #(#SpecCollection cg@1371: #collection: cg@1371: #( cg@1371: #(#HTMLViewSpec cg@1371: #name: 'HTMLBrowser1' cg@1371: #layout: #(#LayoutFrame 0 0.0 0 0.0 0 1.0 0 1.0) cg@1371: #model: #htmlDocumentURLHolder cg@1371: #hasHorizontalScrollBar: true cg@1371: #hasVerticalScrollBar: true cg@1371: ) cg@1371: ) cg@1371: ) cg@1037: ) cg@1037: ! cg@1037: cg@1043: rightCanvasSpecForPatchesList cg@1043: "This resource specification was automatically generated cg@1043: by the UIPainter of ST/X." cg@1043: cg@1043: "Do not manually edit this!! If it is corrupted, cg@1043: the UIPainter may not be able to read the specification." cg@1043: cg@1043: " cg@1043: UIPainter new openOnClass:ProjectBrowser andSelector:#rightCanvasSpecForPatchesList cg@1043: ProjectBrowser new openInterface:#rightCanvasSpecForPatchesList cg@1043: " cg@1043: cg@1043: cg@1043: cg@1206: ^ cg@1206: #(#FullSpec cg@1371: #name: #rightCanvasSpecForPatchesList cg@1371: #window: cg@1206: #(#WindowSpec cg@1371: #label: 'NewApplication' cg@1371: #name: 'NewApplication' cg@1371: #min: #(#Point 10 10) cg@1371: #max: #(#Point 1280 1024) cg@1371: #bounds: #(#Rectangle 162 22 462 322) cg@1371: ) cg@1371: #component: cg@1206: #(#SpecCollection cg@1371: #collection: #( cg@1371: #(#DataSetSpec cg@1371: #name: 'patchesTable' cg@1371: #layout: #(#LayoutFrame 0 0.0 0 0.0 0 1.0 0 1.0) cg@1371: #menu: #methodMenu cg@1371: #hasHorizontalScrollBar: true cg@1371: #hasVerticalScrollBar: true cg@1371: #miniScrollerHorizontal: true cg@1371: #dataList: #patchesList cg@1371: #has3Dsepartors: false cg@1371: #columnHolder: #patchesTableColumns cg@1371: #columnAdaptor: #classTableAdaptor cg@1371: ) cg@1371: ) cg@1206: cg@1371: ) cg@1043: ) cg@1043: ! cg@1043: cg@1109: rightCanvasSpecForPrerequisiteClasses cg@1089: "This resource specification was automatically generated cg@1089: by the UIPainter of ST/X." cg@1089: cg@1089: "Do not manually edit this!! If it is corrupted, cg@1089: the UIPainter may not be able to read the specification." cg@1089: cg@1089: " cg@1109: UIPainter new openOnClass:ProjectBrowser andSelector:#rightCanvasSpecForPrerequisiteClasses cg@1109: ProjectBrowser new openInterface:#rightCanvasSpecForPrerequisiteClasses cg@1089: " cg@1089: cg@1089: cg@1089: cg@1089: ^ cg@1089: #(#FullSpec cg@1371: #name: #rightCanvasSpecForPrerequisiteClasses cg@1371: #window: cg@1089: #(#WindowSpec cg@1371: #label: 'NewApplication' cg@1371: #name: 'NewApplication' cg@1371: #layout: #(#LayoutFrame 220 0 200 0 519 0 499 0) cg@1371: #level: 0 cg@1371: #min: #(#Point 10 10) cg@1371: #max: #(#Point 1280 1024) cg@1371: #bounds: #(#Rectangle 220 200 520 500) cg@1371: #usePreferredExtent: false cg@1371: #returnIsOKInDialog: true cg@1371: #escapeIsCancelInDialog: true cg@1371: ) cg@1371: #component: cg@1109: #(#SpecCollection cg@1371: #collection: #( cg@1371: #(#LabelSpec cg@1371: #label: 'Known Classes' cg@1371: #name: 'Label1' cg@1371: #layout: #(#LayoutFrame 0 0 0 0 0 0.5 30 0) cg@1371: #translateLabel: true cg@1371: ) cg@1371: #(#SequenceViewSpec cg@1371: #name: 'List1' cg@1371: #layout: #(#LayoutFrame 0 0 30 0 0 0.5 -62 1) cg@1371: #tabable: true cg@1371: #model: #selectedClassInPrerequisites cg@1371: #hasHorizontalScrollBar: true cg@1371: #hasVerticalScrollBar: true cg@1371: #miniScrollerHorizontal: true cg@1371: #miniScrollerVertical: true cg@1371: #doubleClickSelector: #addClassToPrerequisites cg@1371: #valueChangeSelector: #showInfoForRequiredClass: cg@1371: #useIndex: false cg@1371: #sequenceList: #listOfAllClassesInPrerequisites cg@1371: ) cg@1371: #(#LabelSpec cg@1371: #label: 'Required Classes' cg@1371: #name: 'Label2' cg@1371: #layout: #(#LayoutFrame 0 0.5 0 0 0 1 30 0) cg@1371: #translateLabel: true cg@1371: ) cg@1371: #(#SequenceViewSpec cg@1371: #name: 'List2' cg@1371: #layout: #(#LayoutFrame 0 0.5 30 0 0 1 -62 1) cg@1371: #tabable: true cg@1371: #model: #selectedRequiredClassInPrerequisites cg@1371: #hasHorizontalScrollBar: true cg@1371: #hasVerticalScrollBar: true cg@1371: #miniScrollerHorizontal: true cg@1371: #miniScrollerVertical: true cg@1371: #doubleClickSelector: #removeClassFromPrerequisites cg@1371: #valueChangeSelector: #showInfoForRequiredClass: cg@1371: #useIndex: false cg@1371: #sequenceList: #listOfRequiredClassesInPrerequisites cg@1371: ) cg@1371: #(#HorizontalPanelViewSpec cg@1371: #name: 'HorizontalPanel2' cg@1371: #layout: #(#LayoutFrame 0 0 -62 1 0 1 -32 1) cg@1371: #horizontalLayout: #fitSpace cg@1371: #verticalLayout: #center cg@1371: #horizontalSpace: 3 cg@1371: #verticalSpace: 3 cg@1371: #component: cg@1371: #(#SpecCollection cg@1371: #collection: #( cg@1371: #(#ActionButtonSpec cg@1371: #label: 'Add' cg@1371: #name: 'addButton' cg@1371: #translateLabel: true cg@1371: #resizeForLabel: false cg@1371: #tabable: true cg@1371: #model: #addClassToPrerequisites cg@1371: #enableChannel: #canAddSelectedClassToPrerequisites cg@1371: #actionValue: '' cg@1371: #useDefaultExtent: true cg@1371: ) cg@1371: #(#ActionButtonSpec cg@1371: #label: 'Remove' cg@1371: #name: 'removeButton' cg@1371: #translateLabel: true cg@1371: #resizeForLabel: false cg@1371: #tabable: true cg@1371: #model: #removeClassFromPrerequisites cg@1371: #enableChannel: #canRemoveSelectedClassFromPrerequisites cg@1371: #actionValue: '' cg@1371: #useDefaultExtent: true cg@1371: ) cg@1371: ) cg@1109: cg@1371: ) cg@1371: ) cg@1371: #(#HorizontalPanelViewSpec cg@1371: #name: 'HorizontalPanel1' cg@1371: #layout: #(#LayoutFrame 0 0.0 -30 1 0 1.0 0 1.0) cg@1371: #horizontalLayout: #fitSpace cg@1371: #verticalLayout: #center cg@1371: #horizontalSpace: 3 cg@1371: #verticalSpace: 3 cg@1371: #component: cg@1371: #(#SpecCollection cg@1371: #collection: #( cg@1371: #(#ActionButtonSpec cg@1371: #label: 'Cancel' cg@1371: #name: 'Button1' cg@1371: #translateLabel: true cg@1371: #tabable: true cg@1371: #model: #cancel cg@1371: #useDefaultExtent: true cg@1371: ) cg@1371: #(#ActionButtonSpec cg@1371: #label: 'OK' cg@1371: #name: 'Button2' cg@1371: #translateLabel: true cg@1371: #tabable: true cg@1371: #model: #accept cg@1371: #useDefaultExtent: true cg@1371: ) cg@1371: ) cg@1109: cg@1371: ) cg@1371: ) cg@1371: ) cg@1109: cg@1371: ) cg@1109: ) cg@1109: ! cg@1109: cg@1291: rightCanvasSpecForPrerequisitePackages cg@1109: "This resource specification was automatically generated cg@1109: by the UIPainter of ST/X." cg@1109: cg@1109: "Do not manually edit this!! If it is corrupted, cg@1109: the UIPainter may not be able to read the specification." cg@1109: cg@1109: " cg@1291: UIPainter new openOnClass:ProjectBrowser andSelector:#rightCanvasSpecForPrerequisitePackages cg@1291: ProjectBrowser new openInterface:#rightCanvasSpecForPrerequisitePackages cg@1109: " cg@1109: cg@1109: cg@1109: cg@1109: ^ cg@1109: #(#FullSpec cg@1371: #name: #rightCanvasSpecForPrerequisitePackages cg@1371: #window: cg@1109: #(#WindowSpec cg@1371: #label: 'NewApplication' cg@1371: #name: 'NewApplication' cg@1371: #layout: #(#LayoutFrame 220 0 200 0 519 0 499 0) cg@1371: #level: 0 cg@1371: #min: #(#Point 10 10) cg@1371: #max: #(#Point 1280 1024) cg@1371: #bounds: #(#Rectangle 220 200 520 500) cg@1371: #usePreferredExtent: false cg@1371: #returnIsOKInDialog: true cg@1371: #escapeIsCancelInDialog: true cg@1371: ) cg@1371: #component: cg@1089: #(#SpecCollection cg@1371: #collection: #( cg@1371: #(#LabelSpec cg@1371: #label: 'Known Packages' cg@1371: #name: 'Label1' cg@1371: #layout: #(#LayoutFrame 0 0 0 0 0 0.5 30 0) cg@1371: #translateLabel: true cg@1371: ) cg@1371: #(#SequenceViewSpec cg@1371: #name: 'List1' cg@1371: #layout: #(#LayoutFrame 0 0 30 0 0 0.5 -62 1) cg@1371: #tabable: true cg@1371: #model: #selectedProjectInPrerequisites cg@1371: #hasHorizontalScrollBar: true cg@1371: #hasVerticalScrollBar: true cg@1371: #miniScrollerHorizontal: true cg@1371: #miniScrollerVertical: true cg@1371: #doubleClickSelector: #addProjectToPrerequisites cg@1371: #useIndex: false cg@1371: #sequenceList: #listOfAllProjectsInPrerequisites cg@1371: ) cg@1371: #(#LabelSpec cg@1371: #label: 'Prerequisites' cg@1371: #name: 'Label2' cg@1371: #layout: #(#LayoutFrame 0 0.5 0 0 0 1 30 0) cg@1371: #translateLabel: true cg@1371: ) cg@1371: #(#SequenceViewSpec cg@1371: #name: 'List2' cg@1371: #layout: #(#LayoutFrame 0 0.5 30 0 0 1 -62 1) cg@1371: #tabable: true cg@1371: #model: #selectedRequiredProjectInPrerequisites cg@1371: #hasHorizontalScrollBar: true cg@1371: #hasVerticalScrollBar: true cg@1371: #miniScrollerHorizontal: true cg@1371: #miniScrollerVertical: true cg@1371: #doubleClickSelector: #removeProjectFromPrerequisites cg@1371: #useIndex: false cg@1371: #sequenceList: #listOfRequiredProjectsInPrerequisites cg@1371: ) cg@1371: #(#HorizontalPanelViewSpec cg@1371: #name: 'HorizontalPanel2' cg@1371: #layout: #(#LayoutFrame 0 0 -62 1 0 1 -32 1) cg@1371: #horizontalLayout: #fitSpace cg@1371: #verticalLayout: #center cg@1371: #horizontalSpace: 3 cg@1371: #verticalSpace: 3 cg@1371: #component: cg@1371: #(#SpecCollection cg@1371: #collection: #( cg@1371: #(#ActionButtonSpec cg@1371: #label: 'Add' cg@1371: #name: 'addButton' cg@1371: #translateLabel: true cg@1371: #resizeForLabel: false cg@1371: #tabable: true cg@1371: #model: #addProjectToPrerequisites cg@1371: #enableChannel: #canAddSelectedProjectToPrerequisites cg@1371: #actionValue: '' cg@1371: #useDefaultExtent: true cg@1371: ) cg@1371: #(#ActionButtonSpec cg@1371: #label: 'Remove' cg@1371: #name: 'removeButton' cg@1371: #translateLabel: true cg@1371: #resizeForLabel: false cg@1371: #tabable: true cg@1371: #model: #removeProjectFromPrerequisites cg@1371: #enableChannel: #canRemoveSelectedProjectFromPrerequisites cg@1371: #actionValue: '' cg@1371: #useDefaultExtent: true cg@1371: ) cg@1371: ) cg@1089: cg@1371: ) cg@1371: ) cg@1371: #(#HorizontalPanelViewSpec cg@1371: #name: 'HorizontalPanel1' cg@1371: #layout: #(#LayoutFrame 0 0.0 -30 1 0 1.0 0 1.0) cg@1371: #horizontalLayout: #fitSpace cg@1371: #verticalLayout: #center cg@1371: #horizontalSpace: 3 cg@1371: #verticalSpace: 3 cg@1371: #component: cg@1371: #(#SpecCollection cg@1371: #collection: #( cg@1371: #(#ActionButtonSpec cg@1371: #label: 'Cancel' cg@1371: #name: 'Button1' cg@1371: #translateLabel: true cg@1371: #tabable: true cg@1371: #model: #cancel cg@1371: #useDefaultExtent: true cg@1371: ) cg@1371: #(#ActionButtonSpec cg@1371: #label: 'OK' cg@1371: #name: 'Button2' cg@1371: #translateLabel: true cg@1371: #tabable: true cg@1371: #model: #accept cg@1371: #useDefaultExtent: true cg@1371: ) cg@1371: ) cg@1089: cg@1371: ) cg@1371: ) cg@1371: ) cg@1089: cg@1371: ) cg@1089: ) cg@1089: ! cg@1089: cg@1079: rightCanvasSpecForProperties cg@1079: "This resource specification was automatically generated cg@1079: by the UIPainter of ST/X." cg@1079: cg@1079: "Do not manually edit this!! If it is corrupted, cg@1079: the UIPainter may not be able to read the specification." cg@1079: cg@1079: " cg@1079: UIPainter new openOnClass:ProjectBrowser andSelector:#rightCanvasSpecForProperties cg@1079: ProjectBrowser new openInterface:#rightCanvasSpecForProperties cg@1079: " cg@1079: cg@1079: cg@1079: cg@1088: ^ cg@1088: #(#FullSpec cg@1371: #name: #rightCanvasSpecForProperties cg@1371: #window: cg@1088: #(#WindowSpec cg@1371: #label: 'NewApplication' cg@1371: #name: 'NewApplication' cg@1371: #min: #(#Point 10 10) cg@1371: #max: #(#Point 1280 1024) cg@1371: #bounds: #(#Rectangle 12 22 373 346) cg@1371: ) cg@1371: #component: cg@1088: #(#SpecCollection cg@1371: #collection: #( cg@1371: #(#FramedBoxSpec cg@1371: #label: 'Project Type' cg@1371: #name: 'FramedBox1' cg@1371: #layout: #(#LayoutFrame 0 0.0 0 0.0 0 1.0 61 0) cg@1371: #labelPosition: #topLeft cg@1371: #translateLabel: true cg@1371: #component: cg@1371: #(#SpecCollection cg@1371: #collection: #( cg@1371: #(#RadioButtonSpec cg@1371: #label: 'Application' cg@1371: #name: 'RadioButton1' cg@1371: #layout: #(#LayoutFrame -1 0.0 5 0 0 0.5 27 0) cg@1371: #activeHelpKey: #appType cg@1371: #translateLabel: true cg@1371: #model: #projectType cg@1371: #isTriggerOnDown: true cg@1371: #select: #application cg@1371: ) cg@1371: #(#RadioButtonSpec cg@1371: #label: 'Class Library' cg@1371: #name: 'RadioButton2' cg@1371: #layout: #(#LayoutFrame 0 0.5 5 0 0 1.0 27 0) cg@1371: #activeHelpKey: #libType cg@1371: #translateLabel: true cg@1371: #model: #projectType cg@1371: #isTriggerOnDown: true cg@1371: #select: #library cg@1371: ) cg@1371: ) cg@1147: cg@1371: ) cg@1371: ) cg@1371: #(#FramedBoxSpec cg@1371: #label: 'Project Working Directory' cg@1371: #name: 'FramedBox2' cg@1371: #layout: #(#LayoutFrame 0 0.0 67 0.0 0 1.0 127 0) cg@1371: #labelPosition: #topLeft cg@1371: #translateLabel: true cg@1371: #component: cg@1371: #(#SpecCollection cg@1371: #collection: #( cg@1371: #(#InputFieldSpec cg@1371: #name: 'EntryField1' cg@1371: #layout: #(#LayoutFrame 0 0.0 1 0 0 1.0 23 0) cg@1371: #activeHelpKey: #projectDir cg@1371: #enableChannel: #currentProjectWasNotLoadedFromFile cg@1371: #model: #projectDirectory cg@1371: #acceptChannel: #acceptChannel cg@1371: #modifiedChannel: #modifiedChannel cg@1371: #acceptOnPointerLeave: false cg@1371: ) cg@1371: ) cg@1147: cg@1371: ) cg@1371: ) cg@1371: #(#FramedBoxSpec cg@1371: #label: 'Repository' cg@1371: #name: 'FramedBox3' cg@1371: #layout: #(#LayoutFrame 0 0.0 137 0.0 0 1.0 220 0) cg@1371: #labelPosition: #topLeft cg@1371: #translateLabel: true cg@1371: #component: cg@1371: #(#SpecCollection cg@1371: #collection: #( cg@1371: #(#LabelSpec cg@1371: #label: 'Module:' cg@1371: #name: 'Label1' cg@1371: #layout: #(#AlignmentOrigin 106 0 11 0 1 0.5) cg@1371: #translateLabel: true cg@1371: #resizeForLabel: true cg@1371: #adjust: #right cg@1371: ) cg@1371: #(#InputFieldSpec cg@1371: #name: 'EntryField2' cg@1371: #layout: #(#LayoutFrame 110 0.0 0 0 0 1.0 22 0) cg@1371: #activeHelpKey: #repositoryModule cg@1371: #model: #repositoryModule cg@1371: #acceptChannel: #acceptChannel cg@1371: #modifiedChannel: #modifiedChannel cg@1371: #acceptOnPointerLeave: false cg@1371: ) cg@1371: #(#LabelSpec cg@1371: #label: 'Directory:' cg@1371: #name: 'Label2' cg@1371: #layout: #(#AlignmentOrigin 106 0 36 0 1 0.5) cg@1371: #translateLabel: true cg@1371: #resizeForLabel: true cg@1371: #adjust: #right cg@1371: ) cg@1371: #(#InputFieldSpec cg@1371: #name: 'EntryField3' cg@1371: #layout: #(#LayoutFrame 110 0.0 25 0 0 1.0 47 0) cg@1371: #activeHelpKey: #repositoryDirectory cg@1371: #model: #repositoryDirectory cg@1371: #acceptChannel: #acceptChannel cg@1371: #modifiedChannel: #modifiedChannel cg@1371: #acceptOnPointerLeave: false cg@1371: ) cg@1371: ) cg@1147: cg@1371: ) cg@1371: ) cg@1371: #(#FramedBoxSpec cg@1371: #label: 'Default Namespace' cg@1371: #name: 'FramedBox4' cg@1371: #layout: #(#LayoutFrame 0 0.0 226 0 0 1.0 284 0) cg@1371: #activeHelpKey: #defaultNamespace cg@1371: #labelPosition: #topLeft cg@1371: #translateLabel: true cg@1371: #component: cg@1371: #(#SpecCollection cg@1371: #collection: #( cg@1371: #(#InputFieldSpec cg@1371: #name: 'EntryField4' cg@1371: #layout: #(#LayoutFrame 0 0.0 0 0 0 1.0 22 0) cg@1371: #model: #projectNamespace cg@1371: #acceptChannel: #acceptChannel cg@1371: #modifiedChannel: #modifiedChannel cg@1371: #acceptOnPointerLeave: false cg@1371: ) cg@1371: ) cg@1147: cg@1371: ) cg@1371: ) cg@1371: #(#HorizontalPanelViewSpec cg@1371: #name: 'HorizontalPanel1' cg@1371: #layout: #(#LayoutFrame 0 0 -30 1 0 1 0 1) cg@1371: #horizontalLayout: #fitSpace cg@1371: #verticalLayout: #center cg@1371: #horizontalSpace: 3 cg@1371: #verticalSpace: 3 cg@1371: #component: cg@1371: #(#SpecCollection cg@1371: #collection: #( cg@1371: #(#ActionButtonSpec cg@1371: #label: 'Cancel' cg@1371: #name: 'Button1' cg@1371: #activeHelpKey: #cancel cg@1371: #translateLabel: true cg@1371: #model: #cancel cg@1371: #enableChannel: #modifiedChannel cg@1371: #actionValue: '' cg@1371: #useDefaultExtent: true cg@1371: ) cg@1371: #(#ActionButtonSpec cg@1371: #label: 'OK' cg@1371: #name: 'Button2' cg@1371: #activeHelpKey: #accept cg@1371: #translateLabel: true cg@1371: #model: #accept cg@1371: #enableChannel: #modifiedChannel cg@1371: #useDefaultExtent: true cg@1371: ) cg@1371: ) cg@1088: cg@1371: ) cg@1371: ) cg@1371: ) cg@1088: cg@1371: ) cg@1079: ) cg@1079: ! cg@1079: cg@1026: rightCanvasSpecForReadOnlyText cg@1026: "This resource specification was automatically generated cg@1026: by the UIPainter of ST/X." cg@1026: cg@1026: "Do not manually edit this!! If it is corrupted, cg@1026: the UIPainter may not be able to read the specification." cg@1026: cg@1026: " cg@1232: UIPainter new openOnClass:ProjectBrowser andSelector:#rightCanvasSpecForReadOnlyText cg@1232: ProjectBrowser new openInterface:#rightCanvasSpecForReadOnlyText cg@1026: " cg@1026: cg@1026: cg@1026: cg@1232: ^ cg@1232: #(#FullSpec cg@1371: #name: #rightCanvasSpecForReadOnlyText cg@1371: #window: cg@1232: #(#WindowSpec cg@1371: #label: 'NewApplication' cg@1371: #name: 'NewApplication' cg@1371: #min: #(#Point 10 10) cg@1371: #max: #(#Point 1280 1024) cg@1371: #bounds: #(#Rectangle 216 173 516 473) cg@1371: ) cg@1371: #component: cg@1232: #(#SpecCollection cg@1371: #collection: #( cg@1371: #(#TextEditorSpec cg@1371: #name: 'TextEditor1' cg@1371: #layout: #(#LayoutFrame 0 0.0 30 0.0 0 1.0 0 1.0) cg@1371: #model: #rightCanvasTextHolder cg@1371: #hasHorizontalScrollBar: true cg@1371: #hasVerticalScrollBar: true cg@1371: #miniScrollerHorizontal: true cg@1371: #isReadOnly: true cg@1371: ) cg@1371: #(#LabelSpec cg@1371: #label: 'Label' cg@1371: #name: 'Label1' cg@1371: #layout: #(#LayoutFrame 0 0 0 0 0 1 30 0) cg@1371: #translateLabel: true cg@1371: #labelChannel: #textCanvasLabelHolder cg@1371: #adjust: #left cg@1371: ) cg@1371: ) cg@1232: cg@1371: ) cg@1026: ) cg@1026: ! cg@1026: cg@1025: windowSpec cg@1025: "This resource specification was automatically generated cg@1025: by the UIPainter of ST/X." cg@1025: cg@1025: "Do not manually edit this!! If it is corrupted, cg@1025: the UIPainter may not be able to read the specification." cg@1025: cg@1025: " cg@1025: UIPainter new openOnClass:ProjectBrowser andSelector:#windowSpec cg@1025: ProjectBrowser new openInterface:#windowSpec cg@1025: ProjectBrowser open cg@1025: " cg@1025: cg@1025: cg@1025: cg@1088: ^ cg@1088: #(#FullSpec cg@1371: #name: #windowSpec cg@1371: #window: cg@1088: #(#WindowSpec cg@1371: #label: 'ProjectBrowser' cg@1371: #name: 'ProjectBrowser' cg@1371: #min: #(#Point 10 10) cg@1371: #max: #(#Point 1024 768) cg@1371: #bounds: #(#Rectangle 20 94 623 645) cg@1371: #menu: #mainMenu cg@1371: #icon: #bigProjectBrowserIcon cg@1371: ) cg@1371: #component: cg@1088: #(#SpecCollection cg@1371: #collection: #( cg@1371: #(#MenuPanelSpec cg@1371: #name: 'ToolBar1' cg@1371: #layout: #(#LayoutFrame 0 0.0 0 0 0 1.0 32 0) cg@1371: #menu: #menu cg@1371: #textDefault: true cg@1371: ) cg@1371: #(#VariableVerticalPanelSpec cg@1371: #name: 'VariableVerticalPanel1' cg@1371: #layout: #(#LayoutFrame 0 0.0 32 0.0 0 1.0 -24 1.0) cg@1371: #level: 1 cg@1371: #component: cg@1371: #(#SpecCollection cg@1371: #collection: #( cg@1371: #(#VariableHorizontalPanelSpec cg@1371: #name: 'VariableHorizontalPanel1' cg@1371: #component: cg@1371: #(#SpecCollection cg@1371: #collection: #( cg@1371: #(#SelectionInTreeViewSpec cg@1371: #name: 'TreeList1' cg@1371: #model: #selectedTreeNodeHolder cg@1371: #menu: #itemMenuHolder cg@1371: #performer: #itemMenuPerformer cg@1371: #hasHorizontalScrollBar: true cg@1371: #hasVerticalScrollBar: true cg@1371: #miniScrollerHorizontal: true cg@1371: #showRoot: false cg@1371: #showDirectoryIndicatorForRoot: false cg@1371: #showDirectoryIndicator: true cg@1371: #valueChangeSelector: #itemSelected: cg@1371: #doubleClickSelector: #itemDoubleClicked: cg@1371: #hierarchicalList: #projectTreeHolder cg@1371: #selectConditionSelector: #selectionChangeAllowed: cg@1371: #highlightMode: #label cg@1371: ) cg@1371: #(#SubCanvasSpec cg@1371: #name: 'SubCanvas1' cg@1371: #hasHorizontalScrollBar: false cg@1371: #hasVerticalScrollBar: false cg@1371: #specHolder: #currentCanvasHolder cg@1371: ) cg@1371: ) cg@1248: cg@1371: ) cg@1371: #handles: #(#Any 0.389718 1.0) cg@1371: ) cg@1371: #(#ArbitraryComponentSpec cg@1371: #name: 'commandOutputView' cg@1371: #hasHorizontalScrollBar: true cg@1371: #hasVerticalScrollBar: true cg@1371: #miniScrollerHorizontal: true cg@1371: #hasBorder: false cg@1371: #component: #TextCollector cg@1371: ) cg@1371: ) cg@1088: cg@1371: ) cg@1371: #handles: #(#Any 0.987879 1.0) cg@1371: ) cg@1371: #(#UISubSpecification cg@1371: #name: 'infoBarSubSpec' cg@1371: #layout: #(#LayoutFrame 0 0.0 -24 1 0 1.0 0 1.0) cg@1371: #level: 1 cg@1371: #majorKey: #ToolApplicationModel cg@1371: #minorKey: #windowSpecForInfoBar cg@1371: ) cg@1371: ) cg@1088: cg@1371: ) cg@1088: ) cg@1025: ! ! cg@1025: cg@1025: !ProjectBrowser class methodsFor:'menu specs'! cg@1025: cg@1094: classItemMenu cg@1094: "This resource specification was automatically generated cg@1094: by the MenuEditor of ST/X." cg@1094: cg@1094: "Do not manually edit this!! If it is corrupted, cg@1094: the MenuEditor may not be able to read the specification." cg@1094: cg@1094: " cg@1094: MenuEditor new openOnClass:ProjectBrowser andSelector:#classItemMenu cg@1094: (Menu new fromLiteralArrayEncoding:(ProjectBrowser classItemMenu)) startUp cg@1094: " cg@1094: cg@1094: cg@1094: cg@1094: ^ cg@1094: #(#Menu cg@1371: #( cg@1371: #(#MenuItem cg@1371: #label: 'Remove from Project...' cg@1371: #translateLabel: true cg@1371: #value: #removeClassFromProject cg@1371: #enabled: #hasClassesSelectedHolder cg@1371: ) cg@1371: #(#MenuItem cg@1371: #label: '-' cg@1371: ) cg@1371: #(#MenuItem cg@1371: #label: 'Browse...' cg@1371: #translateLabel: true cg@1371: #value: #browseClass cg@1371: #enabled: #hasClassesSelectedHolder cg@1371: ) cg@1371: ) cg@1371: nil cg@1371: nil cg@1094: ) cg@1094: ! cg@1094: cg@1052: classesItemMenu cg@1052: "This resource specification was automatically generated cg@1052: by the MenuEditor of ST/X." cg@1052: cg@1052: "Do not manually edit this!! If it is corrupted, cg@1052: the MenuEditor may not be able to read the specification." cg@1052: cg@1052: " cg@1052: MenuEditor new openOnClass:ProjectBrowser andSelector:#classesItemMenu cg@1052: (Menu new fromLiteralArrayEncoding:(ProjectBrowser classesItemMenu)) startUp cg@1052: " cg@1052: cg@1052: cg@1052: cg@1052: ^ cg@1052: cg@1052: #(#Menu cg@1052: cg@1371: #( cg@1371: #(#MenuItem cg@1371: #label: 'Add Class...' cg@1371: #translateLabel: true cg@1371: #value: #addClass cg@1371: #enabled: #hasClassesSelectedHolder cg@1371: ) cg@1371: #(#MenuItem cg@1371: #label: 'Add Classes found in image' cg@1371: #translateLabel: true cg@1371: #value: #addClassesFromImage cg@1371: #enabled: #hasClassesSelectedHolder cg@1371: ) cg@1371: #(#MenuItem cg@1371: #label: 'Add Classes from files found in directory' cg@1371: #translateLabel: true cg@1371: #value: #addClassesFromFilesInDirectory cg@1371: #enabled: #hasClassesSelectedHolder cg@1371: ) cg@1371: #(#MenuItem cg@1371: #label: 'Add Classes from files found in directory if present in image' cg@1371: #translateLabel: true cg@1371: #value: #addClassesFromFilesInDirectoryIfPresentInImage cg@1371: #enabled: #hasClassesSelectedHolder cg@1371: ) cg@1371: #(#MenuItem cg@1371: #label: '-' cg@1371: ) cg@1371: #(#MenuItem cg@1371: #label: 'Load Classes from Directory' cg@1371: #translateLabel: true cg@1371: #value: #loadClassesFromDirectory cg@1371: #enabled: #canLoadClassesFromDirectory cg@1371: ) cg@1371: #(#MenuItem cg@1371: #label: 'Load Classes from Repository' cg@1371: #translateLabel: true cg@1371: #value: #loadClassesFromRepository cg@1371: #enabled: #canLoadClassesFromRepository cg@1371: ) cg@1371: #(#MenuItem cg@1371: #label: '-' cg@1371: ) cg@1371: #(#MenuItem cg@1371: #label: 'Validate...' cg@1371: #translateLabel: true cg@1371: #value: #validateAgainstClassesInImage cg@1371: #enabled: #hasClassesSelectedHolder cg@1371: ) cg@1371: cg@1371: #(#MenuItem cg@1371: #label: '-' cg@1371: ) cg@1371: #(#MenuItem cg@1371: #label: 'Browse...' cg@1371: #translateLabel: true cg@1371: #value: #browseClasses cg@1371: #enabled: #hasClassesSelectedHolder cg@1371: ) cg@1371: ) nil cg@1371: nil cg@1052: ) cg@1052: ! cg@1052: cg@1025: mainMenu cg@1025: "This resource specification was automatically generated cg@1025: by the MenuEditor of ST/X." cg@1025: cg@1025: "Do not manually edit this!! If it is corrupted, cg@1025: the MenuEditor may not be able to read the specification." cg@1025: cg@1025: " cg@1025: MenuEditor new openOnClass:ProjectBrowser andSelector:#mainMenu cg@1025: (Menu new fromLiteralArrayEncoding:(ProjectBrowser mainMenu)) startUp cg@1025: " cg@1025: cg@1025: cg@1025: cg@1085: ^ cg@1085: #(#Menu cg@1371: #( cg@1371: #(#MenuItem cg@1371: #label: 'File' cg@1371: #translateLabel: true cg@1371: #submenu: cg@1371: #(#Menu cg@1371: #( cg@1371: #(#MenuItem cg@1371: #label: 'New' cg@1371: #translateLabel: true cg@1371: #value: #newProject cg@1371: ) cg@1371: #(#MenuItem cg@1371: #label: '-' cg@1371: ) cg@1371: #(#MenuItem cg@1371: #label: 'Load From...' cg@1371: #translateLabel: true cg@1371: #value: #openProject cg@1371: #activeHelpKey: #openProject cg@1371: ) cg@1371: #(#MenuItem cg@1371: #label: 'Load Project Code' cg@1371: #translateLabel: true cg@1371: #value: #loadProjectCode cg@1371: #enabled: #hasProjectSelectedAndProjectFilenameHolder cg@1371: #activeHelpKey: #loadProjectCode cg@1371: ) cg@1371: #(#MenuItem cg@1371: #label: '-' cg@1371: ) cg@1371: #(#MenuItem cg@1371: #label: 'Save Project File' cg@1371: #translateLabel: true cg@1371: #value: #saveProjectFile cg@1371: #enabled: #hasProjectSelectedAndProjectFilenameHolder cg@1371: #activeHelpKey: #saveProjectFile cg@1371: ) cg@1371: #(#MenuItem cg@1371: #label: 'Save Project Code' cg@1371: #translateLabel: true cg@1371: #value: #saveProjectCode cg@1371: #enabled: #hasProjectSelectedAndProjectFilenameHolderAndProjectCodeIsLoaded cg@1371: ) cg@1371: #(#MenuItem cg@1371: #label: 'Save All' cg@1371: #translateLabel: true cg@1371: #value: #saveAll cg@1371: #enabled: #hasProjectSelectedAndProjectFilenameHolderAndProjectCodeIsLoaded cg@1371: ) cg@1371: #(#MenuItem cg@1371: #label: '-' cg@1371: ) cg@1371: #(#MenuItem cg@1371: #label: 'Exit' cg@1371: #translateLabel: true cg@1371: #value: #closeRequest cg@1371: ) cg@1371: ) cg@1371: nil cg@1371: nil cg@1371: ) cg@1371: ) cg@1371: #(#MenuItem cg@1371: #label: 'Repository' cg@1371: #translateLabel: true cg@1371: #submenu: cg@1371: #(#Menu cg@1371: #( cg@1371: #(#MenuItem cg@1371: #label: 'CheckIn All' cg@1371: #translateLabel: true cg@1371: #value: #checkInProject cg@1371: #enabled: #hasProjectSelectedAndProjectFilenameHolderAndProjectCodeIsLoaded cg@1371: ) cg@1371: #(#MenuItem cg@1371: #label: '-' cg@1371: ) cg@1371: #(#MenuItem cg@1371: #label: 'CheckIn Classes' cg@1371: #translateLabel: true cg@1371: #value: #checkInAllClasses cg@1371: #enabled: #hasProjectSelectedAndProjectFilenameHolderAndProjectCodeIsLoaded cg@1371: ) cg@1371: #(#MenuItem cg@1371: #label: 'CheckIn Extensions' cg@1371: #translateLabel: true cg@1371: #value: #checkInMethods cg@1371: #enabled: #hasProjectSelectedAndProjectFilenameHolderAndProjectCodeIsLoaded cg@1371: ) cg@1371: #(#MenuItem cg@1371: #label: 'CheckIn Project File' cg@1371: #translateLabel: true cg@1371: #value: #checkInProjectFile cg@1371: #enabled: #hasProjectSelectedAndProjectFilenameHolderAndProjectCodeIsLoaded cg@1371: ) cg@1371: #(#MenuItem cg@1371: #label: 'CheckIn Makefiles' cg@1371: #translateLabel: true cg@1371: #value: #checkInMakefiles cg@1371: #enabled: #hasProjectSelectedAndProjectFilenameHolderAndProjectCodeIsLoaded cg@1371: ) cg@1371: ) cg@1371: nil cg@1371: nil cg@1371: ) cg@1371: ) cg@1371: #(#MenuItem cg@1371: #label: 'View' cg@1371: #translateLabel: true cg@1371: #submenu: cg@1371: #(#Menu cg@1371: #( cg@1371: #(#MenuItem cg@1371: #label: 'Current Project' cg@1371: #translateLabel: true cg@1371: #choice: #showWhat cg@1371: #choiceValue: #current cg@1371: ) cg@1371: #(#MenuItem cg@1371: #label: 'Non BaseSystem Projects' cg@1371: #translateLabel: true cg@1371: #choice: #showWhat cg@1371: #choiceValue: #userProjects cg@1371: ) cg@1371: #(#MenuItem cg@1371: #label: 'All Projects' cg@1371: #translateLabel: true cg@1371: #choice: #showWhat cg@1371: #choiceValue: #all cg@1371: ) cg@1371: #(#MenuItem cg@1371: #label: '-' cg@1371: ) cg@1371: #(#MenuItem cg@1371: #label: 'Update' cg@1371: #translateLabel: true cg@1371: #value: #updateListOfProjects cg@1371: ) cg@1371: ) cg@1371: nil cg@1371: nil cg@1371: ) cg@1371: ) cg@1371: #(#MenuItem cg@1371: #label: 'Project' cg@1371: #translateLabel: true cg@1371: #submenuChannel: #projectItemMenu cg@1371: ) cg@1371: #(#MenuItem cg@1371: #label: 'Build' cg@1371: #translateLabel: true cg@1371: #submenu: cg@1371: #(#Menu cg@1371: #( cg@1371: #(#MenuItem cg@1371: #label: 'All' cg@1371: #translateLabel: true cg@1371: #value: #buildAll cg@1371: #enabled: #hasProjectSelectedAndProjectFilenameHolderAndProjectCodeIsLoaded cg@1371: ) cg@1371: #(#MenuItem cg@1371: #label: '-' cg@1371: ) cg@1371: #(#MenuItem cg@1371: #label: 'Make.proto && Makefile' cg@1371: #translateLabel: true cg@1371: #value: #buildMakefiles cg@1371: #enabled: #hasProjectSelectedAndProjectFilenameHolderAndProjectCodeIsLoaded cg@1371: ) cg@1371: #(#MenuItem cg@1371: #label: 'Makefile' cg@1371: #translateLabel: true cg@1371: #value: #buildMakefile cg@1371: #isVisible: #osIsUnix cg@1371: #enabled: #hasProjectSelectedAndProjectFilenameHolderAndProjectCodeIsLoaded cg@1371: ) cg@1371: #(#MenuItem cg@1371: #label: 'Makefile for windows (nt.mak)' cg@1371: #translateLabel: true cg@1371: #value: #buildNTMakefile cg@1371: #isVisible: #osIsWindows cg@1371: #enabled: #hasProjectSelectedAndProjectFilenameHolderAndProjectCodeIsLoaded cg@1371: ) cg@1371: #(#MenuItem cg@1371: #label: 'LoadAll file' cg@1371: #translateLabel: true cg@1371: #value: #buildLoadAllFile cg@1371: #enabled: #hasProjectSelectedAndProjectFilenameHolderAndProjectCodeIsLoaded cg@1371: ) cg@1371: #(#MenuItem cg@1371: #label: 'abbrev file (for autoload)' cg@1371: #translateLabel: true cg@1371: #value: #buildAbbrevFile cg@1371: #enabled: #hasProjectSelectedAndProjectFilenameHolderAndProjectCodeIsLoaded cg@1371: ) cg@1371: #(#MenuItem cg@1371: #label: 'Binary class library (non portable)' cg@1371: #translateLabel: true cg@1371: #value: #buildCompiledClassLibrary cg@1371: #enabled: #hasProjectSelectedAndProjectFilenameHolderAndProjectCodeIsLoaded cg@1371: ) cg@1371: #(#MenuItem cg@1371: #label: 'Bytecode class library (portable)' cg@1371: #translateLabel: true cg@1371: #value: #buildByteCodeClassLibrary cg@1371: #enabled: #hasProjectSelectedAndProjectFilenameHolderAndProjectCodeIsLoaded cg@1371: ) cg@1371: #(#MenuItem cg@1371: #label: 'Zip archive' cg@1371: #translateLabel: true cg@1371: #value: #buildZipArchive cg@1371: #enabled: #hasProjectSelectedAndProjectFilenameHolderAndProjectCodeIsLoaded cg@1371: ) cg@1371: ) cg@1371: nil cg@1371: nil cg@1371: ) cg@1371: ) cg@1371: #(#MenuItem cg@1371: #label: 'Help' cg@1371: #translateLabel: true cg@1371: #startGroup: #right cg@1371: #submenu: cg@1371: #(#Menu cg@1371: #( cg@1371: #(#MenuItem cg@1371: #label: 'Documentation' cg@1371: #translateLabel: true cg@1371: #value: #openDocumentation cg@1371: ) cg@1371: #(#MenuItem cg@1371: #label: '-' cg@1371: ) cg@1371: #(#MenuItem cg@1371: #label: 'About this Application' cg@1371: #translateLabel: true cg@1371: #value: #openAboutThisApplication cg@1371: ) cg@1371: ) cg@1371: nil cg@1371: nil cg@1371: ) cg@1371: ) cg@1371: ) cg@1371: nil cg@1371: nil cg@1025: ) cg@1278: cg@1298: "Modified: / 19.1.2000 / 16:52:31 / cg" cg@1025: ! cg@1025: cg@1218: methodItemMenu cg@1025: "This resource specification was automatically generated cg@1025: by the MenuEditor of ST/X." cg@1025: cg@1025: "Do not manually edit this!! If it is corrupted, cg@1025: the MenuEditor may not be able to read the specification." cg@1025: cg@1025: " cg@1025: MenuEditor new openOnClass:ProjectBrowser andSelector:#menu cg@1025: (Menu new fromLiteralArrayEncoding:(ProjectBrowser menu)) startUp cg@1025: " cg@1025: cg@1025: cg@1025: cg@1116: ^ cg@1116: #(#Menu cg@1371: #( cg@1371: #(#MenuItem cg@1371: #label: 'Browse' cg@1371: #translateLabel: true cg@1371: #value: #browseMethod cg@1371: ) cg@1371: #(#MenuItem cg@1371: #label: 'Browse Full' cg@1371: #translateLabel: true cg@1371: #value: #browseMethodFull cg@1371: ) cg@1371: #(#MenuItem cg@1371: #label: '-' cg@1371: ) cg@1371: #(#MenuItem cg@1371: #label: 'Remove...' cg@1371: #translateLabel: true cg@1371: #value: #removeMethod cg@1371: ) cg@1371: #(#MenuItem cg@1371: #label: 'Remove from Project...' cg@1371: #translateLabel: true cg@1371: #value: #removeMethodFromProject cg@1371: ) cg@1371: #(#MenuItem cg@1371: #label: 'Move to Project...' cg@1371: #translateLabel: true cg@1371: #value: #moveMethodToProject cg@1371: ) cg@1371: ) cg@1371: nil cg@1371: nil cg@1025: ) cg@1026: ! cg@1026: cg@1255: methodsItemMenu cg@1255: "This resource specification was automatically generated cg@1255: by the MenuEditor of ST/X." cg@1255: cg@1255: "Do not manually edit this!! If it is corrupted, cg@1255: the MenuEditor may not be able to read the specification." cg@1255: cg@1255: " cg@1255: MenuEditor new openOnClass:ProjectBrowser andSelector:#menu cg@1255: (Menu new fromLiteralArrayEncoding:(ProjectBrowser menu)) startUp cg@1255: " cg@1255: cg@1255: cg@1255: cg@1255: ^ cg@1255: #(#Menu cg@1371: #( cg@1371: #(#MenuItem cg@1371: #label: 'Validate...' cg@1371: #translateLabel: true cg@1371: #value: #validateAgainstMethodsInImage cg@1371: #enabled: #hasMethodsSelectedHolder cg@1371: ) cg@1371: ) cg@1371: nil cg@1371: nil cg@1255: ) cg@1255: ! cg@1255: cg@1079: noItemMenu cg@1079: "This resource specification was automatically generated cg@1079: by the MenuEditor of ST/X." cg@1079: cg@1079: "Do not manually edit this!! If it is corrupted, cg@1079: the MenuEditor may not be able to read the specification." cg@1079: cg@1079: " cg@1079: MenuEditor new openOnClass:ProjectBrowser andSelector:#projectItemMenu cg@1079: (Menu new fromLiteralArrayEncoding:(ProjectBrowser projectItemMenu)) startUp cg@1079: " cg@1079: cg@1079: cg@1079: cg@1079: ^ cg@1079: cg@1079: #(#Menu cg@1079: cg@1371: #( cg@1371: #(#MenuItem cg@1371: #label: 'New Project' cg@1371: #translateLabel: true cg@1371: #value: #newProject cg@1371: ) cg@1371: ) nil cg@1371: nil cg@1079: ) cg@1079: ! cg@1079: cg@1109: prerequisiteClassesItemMenu cg@1109: "This resource specification was automatically generated cg@1109: by the MenuEditor of ST/X." cg@1109: cg@1109: "Do not manually edit this!! If it is corrupted, cg@1109: the MenuEditor may not be able to read the specification." cg@1109: cg@1109: " cg@1109: MenuEditor new openOnClass:ProjectBrowser andSelector:#prerequisiteClassesItemMenu cg@1109: (Menu new fromLiteralArrayEncoding:(ProjectBrowser prerequisiteClassesItemMenu)) startUp cg@1109: " cg@1109: cg@1109: cg@1109: cg@1109: ^ cg@1109: #(#Menu cg@1371: #( cg@1371: #(#MenuItem cg@1371: #label: 'Update' cg@1371: #translateLabel: true cg@1371: #value: #updateListOfRequiredPrerequisiteClasses cg@1371: #enabled: #hasClassesSelectedHolder cg@1371: ) cg@1371: ) cg@1371: nil cg@1371: nil cg@1109: ) cg@1109: ! cg@1109: cg@1291: prerequisitePackagesItemMenu cg@1291: "This resource specification was automatically generated cg@1291: by the MenuEditor of ST/X." cg@1291: cg@1291: "Do not manually edit this!! If it is corrupted, cg@1291: the MenuEditor may not be able to read the specification." cg@1291: cg@1291: " cg@1291: MenuEditor new openOnClass:ProjectBrowser andSelector:#prerequisiteClassesItemMenu cg@1291: (Menu new fromLiteralArrayEncoding:(ProjectBrowser prerequisiteClassesItemMenu)) startUp cg@1291: " cg@1291: cg@1291: cg@1291: cg@1291: ^ cg@1291: #(#Menu cg@1371: #( cg@1371: #(#MenuItem cg@1371: #label: 'Add package...' cg@1371: #translateLabel: true cg@1371: #value: #addPrerequisitePackage cg@1371: ) cg@1371: ) cg@1371: nil cg@1371: nil cg@1291: ) cg@1291: ! cg@1291: cg@1026: projectItemMenu cg@1026: "This resource specification was automatically generated cg@1026: by the MenuEditor of ST/X." cg@1026: cg@1026: "Do not manually edit this!! If it is corrupted, cg@1026: the MenuEditor may not be able to read the specification." cg@1026: cg@1026: " cg@1026: MenuEditor new openOnClass:ProjectBrowser andSelector:#projectItemMenu cg@1026: (Menu new fromLiteralArrayEncoding:(ProjectBrowser projectItemMenu)) startUp cg@1026: " cg@1026: cg@1026: cg@1026: cg@1026: ^ cg@1026: cg@1026: #(#Menu cg@1026: cg@1371: #( cg@1371: #(#MenuItem cg@1371: #label: 'Load Project' cg@1371: #translateLabel: true cg@1371: #value: #loadProject cg@1371: #enabled: #canLoadCurrentProjectHolder cg@1371: ) cg@1371: #(#MenuItem cg@1371: #label: 'Unload Project' cg@1371: #translateLabel: true cg@1371: #value: #unloadProject cg@1371: #enabled: #canUnloadCurrentProjectHolder cg@1371: ) cg@1371: #(#MenuItem cg@1371: #label: '-' cg@1371: ) cg@1371: #(#MenuItem cg@1371: #label: 'Make Current' cg@1371: #translateLabel: true cg@1371: #value: #makeCurrentProject cg@1371: #enabled: #hasProjectSelectedHolder cg@1371: ) cg@1371: #(#MenuItem cg@1371: #label: 'Inspect' cg@1371: #translateLabel: true cg@1371: #value: #inspectCurrentProject cg@1371: #enabled: #hasProjectSelectedHolder cg@1371: ) cg@1371: #(#MenuItem cg@1371: #label: '-' cg@1371: ) cg@1267: "/ #(#MenuItem cg@1267: "/ #label: 'New SubProject' cg@1267: "/ #translateLabel: true cg@1267: "/ #value: #newSubProject cg@1267: "/ #enabled: #hasProjectSelectedHolder cg@1267: "/ ) cg@1267: "/ #(#MenuItem cg@1267: "/ #label: '-' cg@1267: "/ ) cg@1371: #(#MenuItem cg@1371: #label: 'Rename...' cg@1371: #translateLabel: true cg@1371: #value: #renameProject cg@1371: #enabled: #hasProjectSelectedHolder cg@1371: ) cg@1371: #(#MenuItem cg@1371: #label: '-' cg@1371: ) cg@1371: #(#MenuItem cg@1371: #label: 'Remove...' cg@1371: #translateLabel: true cg@1371: #value: #removeProject cg@1371: #enabled: #hasProjectSelectedHolder cg@1371: ) cg@1371: ) nil cg@1371: nil cg@1026: ) cg@1037: ! cg@1037: cg@1037: subProjectsItemMenu cg@1037: "This resource specification was automatically generated cg@1037: by the MenuEditor of ST/X." cg@1037: cg@1037: "Do not manually edit this!! If it is corrupted, cg@1037: the MenuEditor may not be able to read the specification." cg@1037: cg@1037: " cg@1037: MenuEditor new openOnClass:ProjectBrowser andSelector:#subProjectsItemMenu cg@1037: (Menu new fromLiteralArrayEncoding:(ProjectBrowser subProjectsItemMenu)) startUp cg@1037: " cg@1037: cg@1037: cg@1037: cg@1037: ^ cg@1037: cg@1037: #(#Menu cg@1037: cg@1371: #( cg@1371: #(#MenuItem cg@1371: #label: 'New SubProject' cg@1371: #translateLabel: true cg@1371: #value: #newSubProject cg@1371: #enabled: #hasSubProjectsSelectedHolder cg@1371: ) cg@1371: ) nil cg@1371: nil cg@1037: ) cg@1037: ! ! cg@1037: cg@1095: !ProjectBrowser class methodsFor:'startup'! cg@1095: cg@1095: openOnFile:aFilename cg@1224: |project browser nodes theNode| cg@1095: cg@1095: browser := self new. cg@1095: browser allButOpen. cg@1224: project := browser loadFromProjectFile:aFilename. cg@1239: browser expandPathToNodeFor:project. cg@1095: browser openWindow cg@1095: ! ! cg@1095: cg@1037: !ProjectBrowser class methodsFor:'tableColumns specs'! cg@1037: cg@1037: classTableColumns cg@1037: "This resource specification was automatically generated cg@1037: by the DataSetBuilder of ST/X." cg@1037: cg@1037: "Do not manually edit this!! If it is corrupted, cg@1037: the DataSetBuilder may not be able to read the specification." cg@1037: cg@1037: " cg@1037: DataSetBuilder new openOnClass:ProjectBrowser andSelector:#classTableColumns cg@1037: " cg@1037: cg@1037: cg@1037: cg@1235: ^#( cg@1235: #(#DataSetColumnSpec cg@1371: #label: 'Class' cg@1371: #id: 'classColumn' cg@1371: #labelAlignment: #left cg@1371: #model: #classNameFromClassInfo: cg@1037: ) cg@1235: #(#DataSetColumnSpec cg@1371: #label: 'Included' cg@1371: #id: 'inclusion' cg@1371: #width: 150 cg@1371: #editorType: #ComboList cg@1371: #choices: #listOfPossibleConditions: cg@1371: #model: #classIncludeConditionFromClassInfo: cg@1371: #writeSelector: #classIncludeConditionFromClassInfo:put: cg@1037: ) cg@1235: #(#DataSetColumnSpec cg@1371: #label: 'Filename' cg@1371: #labelAlignment: #left cg@1371: #minWidth: 200 cg@1371: #model: #classFilenameFromClassInfo: cg@1037: ) cg@1235: ) cg@1235: cg@1043: ! cg@1043: cg@1043: patchesTableColumns cg@1043: "This resource specification was automatically generated cg@1043: by the DataSetBuilder of ST/X." cg@1043: cg@1043: "Do not manually edit this!! If it is corrupted, cg@1043: the DataSetBuilder may not be able to read the specification." cg@1043: cg@1043: " cg@1043: DataSetBuilder new openOnClass:ProjectBrowser andSelector:#patchesTableColumns cg@1043: " cg@1043: cg@1043: cg@1043: cg@1206: ^#( cg@1206: #(#DataSetColumnSpec cg@1371: #label: 'Class' cg@1371: #id: 'classColumn' cg@1371: #labelAlignment: #left cg@1371: #menu: #patchesMethodMenu cg@1371: #model: #classNameFromMethodInfo: cg@1371: #doubleClickedSelector: #methodPatchDoubleClick: cg@1371: #canSelect: false cg@1043: ) cg@1206: #(#DataSetColumnSpec cg@1371: #label: 'Selector' cg@1371: #id: 'selectorColumn' cg@1371: #labelAlignment: #left cg@1371: #model: #selectorFromMethodInfo: cg@1371: #canSelect: false cg@1043: ) cg@1206: ) cg@1206: cg@1025: ! ! cg@1025: cg@1099: !ProjectBrowser methodsFor:'accessing'! cg@1099: cg@1099: selectedTreeNode cg@1099: "automatically generated by UIPainter ..." cg@1099: cg@1099: ^ self selectedTreeNodeHolder value cg@1099: ! ! cg@1099: cg@1025: !ProjectBrowser methodsFor:'aspects'! cg@1025: cg@1108: acceptChannel cg@1108: |holder| cg@1108: cg@1108: (holder := builder bindingAt:#acceptChannel) isNil ifTrue:[ cg@1371: holder := false asValue. cg@1371: builder aspectAt:#acceptChannel put:holder. cg@1108: ]. cg@1108: ^ holder. cg@1108: cg@1108: "Created: / 23.3.1999 / 14:18:05 / cg" cg@1108: ! cg@1108: cg@1094: browseClass cg@1206: |node classOrClassName cls| cg@1094: cg@1094: self hasClassNodeSelected ifFalse:[^ self]. cg@1094: cg@1099: node := self selectedTreeNode. cg@1206: classOrClassName := node contents value. cg@1206: classOrClassName isBehavior ifTrue:[ cg@1371: cls := classOrClassName. cg@1206: ] ifFalse:[ cg@1371: cls := Smalltalk at:classOrClassName. cg@1206: ]. cg@1094: cls isNil ifTrue:[ cg@1371: self information:'The class is not (yet) loaded'. cg@1371: ^ self. cg@1094: ]. cg@1206: cls isLoaded ifFalse:[ cg@1371: self information:'The class is an autoloaded class.'. cg@1206: ]. cg@1094: SystemBrowser openInClass:cls selector:nil. cg@1094: cg@1094: ! cg@1094: cg@1109: canAddSelectedClassToPrerequisites cg@1109: |holder| cg@1109: cg@1109: (holder := builder bindingAt:#canAddSelectedClassToPrerequisites) isNil ifTrue:[ cg@1371: holder := BlockValue cg@1371: with:[:m | self canAddClassToPrerequisites:m] cg@1371: argument:(self selectedClassInPrerequisites). cg@1371: builder aspectAt:#canAddSelectedClassToPrerequisites put:holder. cg@1109: ]. cg@1109: ^ holder. cg@1109: cg@1109: "Created: / 23.3.1999 / 14:18:05 / cg" cg@1109: ! cg@1109: cg@1089: canAddSelectedProjectToPrerequisites cg@1089: |holder| cg@1089: cg@1089: (holder := builder bindingAt:#canAddSelectedProjectToPrerequisites) isNil ifTrue:[ cg@1371: holder := BlockValue cg@1371: with:[:m | self canAddProjectToPrerequisites:m] cg@1371: argument:(self selectedProjectInPrerequisites). cg@1371: builder aspectAt:#canAddSelectedProjectToPrerequisites put:holder. cg@1089: ]. cg@1089: ^ holder. cg@1089: cg@1089: "Created: / 23.3.1999 / 14:18:05 / cg" cg@1089: ! cg@1089: cg@1147: canDeliverBinaryForMacOS cg@1147: ^ OperatingSystem platformName == #macOS cg@1147: ! cg@1147: cg@1147: canDeliverBinaryForUnix cg@1147: ^ OperatingSystem platformName == #unix cg@1147: ! cg@1147: cg@1147: canDeliverBinaryForVMS cg@1147: ^ OperatingSystem platformName == #vms cg@1147: cg@1147: ! cg@1147: cg@1147: canDeliverBinaryForWin32 cg@1147: ^ OperatingSystem platformName == #win32 cg@1147: ! cg@1147: cg@1147: canDeliverForMacOS cg@1147: |holder| cg@1147: cg@1147: (holder := builder bindingAt:#canDeliverForMacOS) isNil ifTrue:[ cg@1371: holder := BlockValue cg@1371: with:[:a1 :a2 | a1 or:[a2 not]] cg@1371: arguments:(Array cg@1371: with:self canDeliverBinaryForMacOS cg@1371: with:self deliverCompiledBinary). cg@1371: builder aspectAt:#canDeliverForMacOS put:holder. cg@1147: ]. cg@1147: ^ holder. cg@1147: ! cg@1147: cg@1147: canDeliverForUnix cg@1147: |holder| cg@1147: cg@1147: (holder := builder bindingAt:#canDeliverForUnix) isNil ifTrue:[ cg@1371: holder := BlockValue cg@1371: with:[:a1 :a2 | a1 or:[a2 not]] cg@1371: arguments:(Array cg@1371: with:self canDeliverBinaryForUnix cg@1371: with:self deliverCompiledBinary). cg@1371: builder aspectAt:#canDeliverForUnix put:holder. cg@1147: ]. cg@1147: ^ holder. cg@1147: ! cg@1147: cg@1147: canDeliverForVMS cg@1147: |holder| cg@1147: cg@1147: (holder := builder bindingAt:#canDeliverForVMS) isNil ifTrue:[ cg@1371: holder := BlockValue cg@1371: with:[:a1 :a2 | a1 or:[a2 not]] cg@1371: arguments:(Array cg@1371: with:self canDeliverBinaryForVMS cg@1371: with:self deliverCompiledBinary). cg@1371: builder aspectAt:#canDeliverForVMS put:holder. cg@1147: ]. cg@1147: ^ holder. cg@1147: ! cg@1147: cg@1147: canDeliverForWin32 cg@1147: |holder| cg@1147: cg@1147: (holder := builder bindingAt:#canDeliverForWin32) isNil ifTrue:[ cg@1371: holder := BlockValue cg@1371: with:[:a1 :a2 | a1 or:[a2 not]] cg@1371: arguments:(Array cg@1371: with:self canDeliverBinaryForWin32 cg@1371: with:self deliverCompiledBinary). cg@1371: builder aspectAt:#canDeliverForWin32 put:holder. cg@1147: ]. cg@1147: ^ holder. cg@1147: ! cg@1147: cg@1291: canLoadCurrentProjectHolder cg@1291: |holder| cg@1291: cg@1291: (holder := builder bindingAt:#canLoadCurrentProjectHolder) isNil ifTrue:[ cg@1371: holder := false asValue. cg@1371: builder aspectAt:#canLoadCurrentProjectHolder put:holder. cg@1291: ]. cg@1291: ^ holder. cg@1291: cg@1291: "Modified: / 26.4.1999 / 22:47:33 / cg" cg@1291: ! cg@1291: cg@1109: canRemoveSelectedClassFromPrerequisites cg@1109: |holder| cg@1109: cg@1109: (holder := builder bindingAt:#canRemoveSelectedClassFromPrerequisites) isNil ifTrue:[ cg@1371: holder := BlockValue with:[:m | m notNil] argument:(self selectedRequiredClassInPrerequisites). cg@1371: builder aspectAt:#canRemoveSelectedClassFromPrerequisites put:holder. cg@1109: ]. cg@1109: ^ holder. cg@1109: cg@1109: "Created: / 23.3.1999 / 14:18:05 / cg" cg@1109: ! cg@1109: cg@1089: canRemoveSelectedProjectFromPrerequisites cg@1089: |holder| cg@1089: cg@1089: (holder := builder bindingAt:#canRemoveSelectedProjectFromPrerequisites) isNil ifTrue:[ cg@1371: holder := BlockValue with:[:m | m notNil] argument:(self selectedRequiredProjectInPrerequisites). cg@1371: builder aspectAt:#canRemoveSelectedProjectFromPrerequisites put:holder. cg@1089: ]. cg@1089: ^ holder. cg@1089: cg@1089: "Created: / 23.3.1999 / 14:18:05 / cg" cg@1089: ! cg@1089: cg@1291: canUnloadCurrentProjectHolder cg@1291: |holder| cg@1291: cg@1291: (holder := builder bindingAt:#canUnloadCurrentProjectHolder) isNil ifTrue:[ cg@1371: holder := false asValue. cg@1371: builder aspectAt:#canUnloadCurrentProjectHolder put:holder. cg@1291: ]. cg@1291: ^ holder. cg@1291: cg@1291: "Modified: / 26.4.1999 / 22:47:33 / cg" cg@1291: ! cg@1291: cg@1037: classList cg@1037: "automatically generated by UIPainter ..." cg@1037: cg@1037: |holder| cg@1037: cg@1037: (holder := builder bindingAt:#classList) isNil ifTrue:[ cg@1371: builder aspectAt:#classList put:(holder := List new). cg@1037: ]. cg@1037: ^ holder. cg@1037: ! cg@1037: cg@1037: classTableAdaptor cg@1037: ^ self cg@1037: ! cg@1037: cg@1037: classTableColumns cg@1038: ^ self class classTableColumns cg@1037: ! cg@1037: cg@1025: currentCanvasHolder cg@1025: "automatically generated by UIPainter ..." cg@1025: cg@1025: |holder| cg@1025: cg@1025: (holder := builder bindingAt:#currentCanvasHolder) isNil ifTrue:[ cg@1371: builder aspectAt:#currentCanvasHolder put:(holder := ValueHolder new). cg@1025: ]. cg@1025: ^ holder. cg@1025: ! cg@1025: cg@1080: currentProjectWasNotLoadedFromFile cg@1080: "automatically generated by UIPainter ..." cg@1080: cg@1080: |holder| cg@1080: cg@1080: (holder := builder bindingAt:#currentProjectWasNotLoadedFromFile) isNil ifTrue:[ cg@1371: builder aspectAt:#currentProjectWasNotLoadedFromFile put:(holder := ValueHolder new). cg@1080: ]. cg@1080: ^ holder. cg@1080: cg@1080: "Created: / 23.3.1999 / 14:01:09 / cg" cg@1080: ! cg@1080: cg@1229: deliverByteCode cg@1229: "automatically generated by UIPainter ..." cg@1229: cg@1229: |holder| cg@1229: cg@1229: (holder := builder bindingAt:#deliverByteCode) isNil ifTrue:[ cg@1371: builder aspectAt:#deliverByteCode put:(holder := ValueHolder new). cg@1371: holder onChangeEvaluate:[modifiedChannel value:true]. cg@1229: ]. cg@1229: ^ holder. cg@1229: cg@1229: "Created: / 23.3.1999 / 14:18:05 / cg" cg@1229: ! cg@1229: cg@1081: deliverCompiledBinary cg@1081: "automatically generated by UIPainter ..." cg@1081: cg@1081: |holder| cg@1081: cg@1081: (holder := builder bindingAt:#deliverCompiledBinary) isNil ifTrue:[ cg@1371: builder aspectAt:#deliverCompiledBinary put:(holder := ValueHolder new). cg@1371: holder onChangeEvaluate:[modifiedChannel value:true]. cg@1081: ]. cg@1081: ^ holder. cg@1081: cg@1081: "Created: / 23.3.1999 / 14:18:05 / cg" cg@1081: ! cg@1081: cg@1088: deliverGZipArchive cg@1088: "automatically generated by UIPainter ..." cg@1088: cg@1088: |holder| cg@1088: cg@1088: (holder := builder bindingAt:#deliverGZipArchive) isNil ifTrue:[ cg@1371: builder aspectAt:#deliverGZipArchive put:(holder := ValueHolder new). cg@1371: holder onChangeEvaluate:[modifiedChannel value:true]. cg@1088: ]. cg@1088: ^ holder. cg@1088: cg@1088: "Created: / 23.3.1999 / 14:18:05 / cg" cg@1088: ! cg@1088: cg@1091: deliverLoadAllFile cg@1091: "automatically generated by UIPainter ..." cg@1091: cg@1091: |holder| cg@1091: cg@1091: (holder := builder bindingAt:#deliverLoadAllFile) isNil ifTrue:[ cg@1371: builder aspectAt:#deliverLoadAllFile put:(holder := ValueHolder new). cg@1371: holder onChangeEvaluate:[modifiedChannel value:true]. cg@1091: ]. cg@1091: ^ holder. cg@1091: cg@1091: "Created: / 23.3.1999 / 14:18:05 / cg" cg@1091: ! cg@1091: cg@1231: deliverMakefiles cg@1231: "automatically generated by UIPainter ..." cg@1231: cg@1231: |holder| cg@1231: cg@1231: (holder := builder bindingAt:#deliverMakefiles) isNil ifTrue:[ cg@1371: builder aspectAt:#deliverMakefiles put:(holder := ValueHolder new). cg@1371: holder onChangeEvaluate:[modifiedChannel value:true]. cg@1231: ]. cg@1231: ^ holder. cg@1231: cg@1231: "Created: / 23.3.1999 / 14:18:05 / cg" cg@1231: ! cg@1231: cg@1081: deliverSources cg@1081: "automatically generated by UIPainter ..." cg@1081: cg@1081: |holder| cg@1081: cg@1081: (holder := builder bindingAt:#deliverSources) isNil ifTrue:[ cg@1371: builder aspectAt:#deliverSources put:(holder := ValueHolder new). cg@1371: holder onChangeEvaluate:[modifiedChannel value:true]. cg@1081: ]. cg@1081: ^ holder. cg@1081: cg@1081: "Created: / 23.3.1999 / 14:18:05 / cg" cg@1081: ! cg@1081: cg@1231: deliverTarArchive cg@1231: "automatically generated by UIPainter ..." cg@1231: cg@1231: |holder| cg@1231: cg@1231: (holder := builder bindingAt:#deliverTarArchive) isNil ifTrue:[ cg@1371: builder aspectAt:#deliverTarArchive put:(holder := ValueHolder new). cg@1371: holder onChangeEvaluate:[modifiedChannel value:true]. cg@1231: ]. cg@1231: ^ holder. cg@1231: cg@1231: "Created: / 23.3.1999 / 14:18:05 / cg" cg@1231: ! cg@1231: cg@1081: deliverZipArchive cg@1081: "automatically generated by UIPainter ..." cg@1081: cg@1081: |holder| cg@1081: cg@1081: (holder := builder bindingAt:#deliverZipArchive) isNil ifTrue:[ cg@1371: builder aspectAt:#deliverZipArchive put:(holder := ValueHolder new). cg@1371: holder onChangeEvaluate:[modifiedChannel value:true]. cg@1081: ]. cg@1081: ^ holder. cg@1081: cg@1081: "Created: / 23.3.1999 / 14:18:05 / cg" cg@1081: ! cg@1081: cg@1147: hasProjectSelectedAndProjectFilenameHolder cg@1147: ^ [ |dir| cg@1147: cg@1371: dir := self projectDirectory value asFilename. cg@1371: (dir exists and:[dir isDirectory]) ifTrue:[ cg@1371: self hasProjectSelectedHolder value cg@1371: ] ifFalse:[ cg@1371: false cg@1371: ] cg@1147: ]. cg@1147: ! cg@1147: cg@1218: hasProjectSelectedAndProjectFilenameHolderAndProjectCodeIsLoaded cg@1293: ^ true. cg@1218: ^ [ |dir| cg@1218: cg@1371: dir := self projectDirectory value asFilename. cg@1371: (dir exists and:[dir isDirectory]) ifTrue:[ cg@1371: (self hasProjectSelectedHolder value) ifTrue:[ cg@1371: self projectCodeIsLoadedHolder value cg@1371: ] ifFalse:[ cg@1371: false. cg@1371: ] cg@1371: ] ifFalse:[ cg@1371: false cg@1371: ] cg@1218: ]. cg@1218: ! cg@1218: cg@1026: hasProjectSelectedHolder cg@1116: |holder| cg@1116: cg@1116: (holder := builder bindingAt:#hasProjectSelectedHolder) isNil ifTrue:[ cg@1371: holder := false asValue. cg@1371: builder aspectAt:#hasProjectSelectedHolder put:holder. cg@1116: ]. cg@1116: ^ holder. cg@1116: cg@1116: "Modified: / 26.4.1999 / 22:47:33 / cg" cg@1026: ! cg@1026: cg@1037: hasSubProjectsSelectedHolder cg@1037: ^ [ cg@1371: self hasSubProjectsNodeSelected cg@1037: ] cg@1037: ! cg@1037: cg@1037: htmlDocumentURLHolder cg@1037: "automatically generated by UIPainter ..." cg@1037: cg@1037: |holder| cg@1037: cg@1037: (holder := builder bindingAt:#htmlDocumentURLHolder) isNil ifTrue:[ cg@1371: builder aspectAt:#htmlDocumentURLHolder put:(holder := ValueHolder new). cg@1037: ]. cg@1037: ^ holder. cg@1037: ! cg@1037: cg@1149: installDirectoryMacOS cg@1149: "automatically generated by UIPainter ..." cg@1149: cg@1149: |holder| cg@1149: cg@1149: (holder := builder bindingAt:#installDirectoryMacOS) isNil ifTrue:[ cg@1371: builder aspectAt:#installDirectoryMacOS put:(holder := '' asValue). cg@1371: holder onChangeSend:#value to:[modifiedChannel value:true]. cg@1149: ]. cg@1149: ^ holder. cg@1149: cg@1149: "Created: / 23.3.1999 / 14:18:05 / cg" cg@1149: ! cg@1149: cg@1147: installDirectoryUnix cg@1081: "automatically generated by UIPainter ..." cg@1081: cg@1081: |holder| cg@1081: cg@1147: (holder := builder bindingAt:#installDirectoryUnix) isNil ifTrue:[ cg@1371: builder aspectAt:#installDirectoryUnix put:(holder := '/opt/smalltalk' asValue). cg@1371: holder onChangeEvaluate:[modifiedChannel value:true]. cg@1147: ]. cg@1147: ^ holder. cg@1147: cg@1147: "Created: / 23.3.1999 / 14:18:05 / cg" cg@1147: ! cg@1147: cg@1149: installDirectoryVMS cg@1149: "automatically generated by UIPainter ..." cg@1149: cg@1149: |holder| cg@1149: cg@1149: (holder := builder bindingAt:#installDirectoryVMS) isNil ifTrue:[ cg@1371: builder aspectAt:#installDirectoryVMS put:(holder := '' asValue). cg@1371: holder onChangeEvaluate:[modifiedChannel value:true]. cg@1149: ]. cg@1149: ^ holder. cg@1149: cg@1149: "Created: / 23.3.1999 / 14:18:05 / cg" cg@1149: ! cg@1149: cg@1147: installDirectoryWin32 cg@1147: "automatically generated by UIPainter ..." cg@1147: cg@1147: |holder| cg@1147: cg@1147: (holder := builder bindingAt:#installDirectoryWin32) isNil ifTrue:[ cg@1371: builder aspectAt:#installDirectoryWin32 put:(holder := '\Programme\SmalltalkX' asValue). cg@1371: holder onChangeEvaluate:[modifiedChannel value:true]. cg@1081: ]. cg@1081: ^ holder. cg@1081: cg@1081: "Created: / 23.3.1999 / 14:18:05 / cg" cg@1081: ! cg@1081: cg@1109: listOfAllClassesInPrerequisites cg@1109: |holder classes| cg@1109: cg@1109: (holder := builder bindingAt:#listOfAllClassesInPrerequisites) isNil ifTrue:[ cg@1371: builder aspectAt:#listOfAllClassesInPrerequisites put:(holder := SortedCollection new asValue). cg@1371: cg@1371: "/ all unloaded classes and classes which where cg@1371: "/ loaded are candidates. cg@1371: cg@1371: classes := Smalltalk allClasses cg@1371: select:[:cls | cg@1371: cls isMeta not cg@1371: and:[ cg@1371: cls isLoaded not cg@1371: or:[cls wasAutoloaded]] cg@1371: ]. cg@1371: cg@1371: "/ mark currently loaded classes as bold; cg@1371: "/ LATER: those which are superclasses of any of my classes bold-red. cg@1371: cg@1371: classes := classes collect:[:cls | |nm| cg@1371: nm := cls name. cg@1371: cls isLoaded ifTrue:[ cg@1371: nm := nm asText allBold. cg@1371: ]. cg@1371: nm cg@1371: ]. cg@1371: holder value addAll:classes. cg@1371: self currentProject wasLoadedFromFile ifFalse:[ cg@1371: self updateListOfRequiredPrerequisiteClasses. cg@1371: ] cg@1109: ]. cg@1109: ^ holder. cg@1109: cg@1109: "Created: / 23.3.1999 / 14:18:05 / cg" cg@1109: ! cg@1109: cg@1089: listOfAllProjectsInPrerequisites cg@1089: "automatically generated by UIPainter ..." cg@1089: cg@1091: |holder projects currentProject| cg@1089: cg@1089: (holder := builder bindingAt:#listOfAllProjectsInPrerequisites) isNil ifTrue:[ cg@1371: builder aspectAt:#listOfAllProjectsInPrerequisites put:(holder := SortedCollection new asValue). cg@1371: cg@1371: currentProject := self currentProject. cg@1371: cg@1371: projects := Set new. cg@1371: Project allInstancesDo:[:p | cg@1371: (p ~~ currentProject cg@1371: and:[p ~~ Project defaultProject]) ifTrue:[ cg@1371: projects add:p name. cg@1371: ] cg@1371: ]. cg@1371: holder value addAll:projects. cg@1109: ]. cg@1109: ^ holder. cg@1109: cg@1109: "Created: / 23.3.1999 / 14:18:05 / cg" cg@1109: ! cg@1109: cg@1235: listOfPossibleConditions:aRow cg@1235: ^ #( always never autoload '-' unix win32 vms macos) cg@1235: cg@1235: cg@1235: ! cg@1235: cg@1109: listOfRequiredClassesInPrerequisites cg@1109: "automatically generated by UIPainter ..." cg@1109: cg@1109: |holder| cg@1109: cg@1109: (holder := builder bindingAt:#listOfRequiredClassesInPrerequisites) isNil ifTrue:[ cg@1371: builder aspectAt:#listOfRequiredClassesInPrerequisites put:(holder := SortedCollection new asValue). cg@1371: self currentProject wasLoadedFromFile ifFalse:[ cg@1371: self updateListOfRequiredPrerequisiteClasses. cg@1371: ] cg@1089: ]. cg@1089: ^ holder. cg@1089: cg@1089: "Created: / 23.3.1999 / 14:18:05 / cg" cg@1089: ! cg@1089: cg@1089: listOfRequiredProjectsInPrerequisites cg@1089: "automatically generated by UIPainter ..." cg@1089: cg@1089: |holder| cg@1089: cg@1089: (holder := builder bindingAt:#listOfRequiredProjectsInPrerequisites) isNil ifTrue:[ cg@1371: builder aspectAt:#listOfRequiredProjectsInPrerequisites put:(holder := SortedCollection new asValue). cg@1089: ]. cg@1089: ^ holder. cg@1089: cg@1089: "Created: / 23.3.1999 / 14:18:05 / cg" cg@1089: ! cg@1089: cg@1234: makeDefines cg@1234: "automatically generated by UIPainter ..." cg@1234: cg@1234: |holder| cg@1234: cg@1234: (holder := builder bindingAt:#makeDefines) isNil ifTrue:[ cg@1371: builder aspectAt:#makeDefines put:(holder := '' asValue). cg@1371: holder onChangeEvaluate:[modifiedChannel value:true]. cg@1234: ]. cg@1234: ^ holder. cg@1234: cg@1234: "Created: / 23.3.1999 / 14:18:05 / cg" cg@1234: ! cg@1234: cg@1234: makeIncludes cg@1234: "automatically generated by UIPainter ..." cg@1234: cg@1234: |holder| cg@1234: cg@1234: (holder := builder bindingAt:#makeIncludes) isNil ifTrue:[ cg@1371: builder aspectAt:#makeIncludes put:(holder := '' asValue). cg@1371: holder onChangeEvaluate:[modifiedChannel value:true]. cg@1234: ]. cg@1234: ^ holder. cg@1234: cg@1234: "Created: / 23.3.1999 / 14:18:05 / cg" cg@1234: ! cg@1234: cg@1234: makeOtherWarningOptions cg@1234: "automatically generated by UIPainter ..." cg@1234: cg@1234: |holder| cg@1234: cg@1234: (holder := builder bindingAt:#makeOtherWarningOptions) isNil ifTrue:[ cg@1371: builder aspectAt:#makeOtherWarningOptions put:(holder := '' asValue). cg@1371: holder onChangeEvaluate:[modifiedChannel value:true]. cg@1234: ]. cg@1234: ^ holder. cg@1234: cg@1234: "Created: / 23.3.1999 / 14:18:05 / cg" cg@1234: ! cg@1234: cg@1234: makeWarnEOLComments cg@1234: "automatically generated by UIPainter ..." cg@1234: cg@1234: |holder| cg@1234: cg@1234: (holder := builder bindingAt:#makeWarnEOLComments) isNil ifTrue:[ cg@1371: builder aspectAt:#makeWarnEOLComments put:(holder := false asValue). cg@1371: holder onChangeEvaluate:[modifiedChannel value:true]. cg@1234: ]. cg@1234: ^ holder. cg@1234: cg@1234: "Created: / 23.3.1999 / 14:18:05 / cg" cg@1234: ! cg@1234: cg@1234: makeWarnNonStandard cg@1234: "automatically generated by UIPainter ..." cg@1234: cg@1234: |holder| cg@1234: cg@1234: (holder := builder bindingAt:#makeWarnNonStandard) isNil ifTrue:[ cg@1371: builder aspectAt:#makeWarnNonStandard put:(holder := true asValue). cg@1371: holder onChangeEvaluate:[modifiedChannel value:true]. cg@1234: ]. cg@1234: ^ holder. cg@1234: cg@1234: "Created: / 23.3.1999 / 14:18:05 / cg" cg@1234: ! cg@1234: cg@1218: methodsFile cg@1218: "automatically generated by UIPainter ..." cg@1218: cg@1218: |holder| cg@1218: cg@1218: (holder := builder bindingAt:#methodsFile) isNil ifTrue:[ cg@1371: builder aspectAt:#methodsFile put:(holder := '' asValue). cg@1371: holder onChangeEvaluate:[modifiedChannel value:true]. cg@1218: ]. cg@1218: ^ holder. cg@1218: cg@1218: "Created: / 23.3.1999 / 14:18:05 / cg" cg@1218: ! cg@1218: cg@1081: modifiedChannel cg@1081: "automatically generated by UIPainter ..." cg@1081: cg@1081: modifiedChannel isNil ifTrue:[ cg@1371: modifiedChannel := false asValue. cg@1081: ]. cg@1081: ^ modifiedChannel. cg@1081: cg@1081: ! cg@1081: cg@1298: osIsUnix cg@1298: ^ OperatingSystem isUNIXlike cg@1298: cg@1298: "Created: / 19.1.2000 / 16:45:16 / cg" cg@1298: ! cg@1298: cg@1298: osIsWindows cg@1298: ^ OperatingSystem isMSWINDOWSlike cg@1298: cg@1298: "Created: / 19.1.2000 / 16:37:33 / cg" cg@1298: "Modified: / 19.1.2000 / 16:43:54 / cg" cg@1298: ! cg@1298: cg@1043: patchesList cg@1043: "automatically generated by UIPainter ..." cg@1043: cg@1043: |holder| cg@1043: cg@1043: (holder := builder bindingAt:#patchesList) isNil ifTrue:[ cg@1371: builder aspectAt:#patchesList put:(holder := List new). cg@1043: ]. cg@1043: ^ holder. cg@1043: ! cg@1043: cg@1292: projectCodeIsLoadedHolder cg@1218: "automatically generated by UIPainter ..." cg@1218: cg@1218: |holder| cg@1218: cg@1292: (holder := builder bindingAt:#projectCodeIsLoadedHolder) isNil ifTrue:[ cg@1371: builder aspectAt:#projectCodeIsLoadedHolder put:(holder := ValueHolder new). cg@1218: ]. cg@1218: ^ holder. cg@1218: cg@1218: "Created: / 23.3.1999 / 14:18:05 / cg" cg@1218: ! cg@1218: cg@1081: projectDirectory cg@1081: "automatically generated by UIPainter ..." cg@1081: cg@1081: |holder| cg@1081: cg@1081: (holder := builder bindingAt:#projectDirectory) isNil ifTrue:[ cg@1371: builder aspectAt:#projectDirectory put:(holder := '.' asValue). cg@1371: holder onChangeEvaluate:[modifiedChannel value:true]. cg@1081: ]. cg@1081: ^ holder. cg@1081: cg@1081: "Created: / 23.3.1999 / 14:18:05 / cg" cg@1081: ! cg@1081: cg@1091: projectNamespace cg@1091: "automatically generated by UIPainter ..." cg@1091: cg@1091: |holder| cg@1091: cg@1091: (holder := builder bindingAt:#projectNamespace) isNil ifTrue:[ cg@1371: builder aspectAt:#projectNamespace put:(holder := ValueHolder new). cg@1371: holder onChangeEvaluate:[modifiedChannel value:true]. cg@1091: ]. cg@1091: ^ holder. cg@1091: cg@1091: "Created: / 23.3.1999 / 14:18:05 / cg" cg@1091: ! cg@1091: cg@1147: projectPackage cg@1147: |holder dir module| cg@1147: cg@1147: (holder := builder bindingAt:#projectPackage) isNil ifTrue:[ cg@1371: builder aspectAt:#projectPackage put:(holder := '' asValue). cg@1147: ]. cg@1147: holder value size == 0 ifTrue:[ cg@1371: (module := self repositoryModule value) notNil ifTrue:[ cg@1371: (dir := self repositoryDirectory value) notNil ifTrue:[ cg@1371: holder value:(module , ':' , dir) cg@1371: ] cg@1371: ] cg@1147: ]. cg@1147: ^ holder. cg@1147: cg@1147: "Created: / 23.3.1999 / 14:18:05 / cg" cg@1147: ! cg@1147: cg@1025: projectTreeHolder cg@1025: "automatically generated by UIPainter ..." cg@1025: cg@1025: |holder| cg@1025: cg@1025: (holder := builder bindingAt:#projectTree) isNil ifTrue:[ cg@1371: builder aspectAt:#projectTree put:(holder := SelectionInTree new). cg@1371: holder root:self projectTree. cg@1025: ]. cg@1025: ^ holder. cg@1025: ! cg@1025: cg@1080: projectType cg@1080: "automatically generated by UIPainter ..." cg@1080: cg@1080: |holder| cg@1080: cg@1080: (holder := builder bindingAt:#projectType) isNil ifTrue:[ cg@1371: builder aspectAt:#projectType put:(holder := ValueHolder new). cg@1371: holder onChangeEvaluate:[modifiedChannel value:true]. cg@1080: ]. cg@1080: ^ holder. cg@1080: cg@1080: "Created: / 23.3.1999 / 14:18:05 / cg" cg@1080: ! cg@1080: cg@1088: repositoryDirectory cg@1088: "automatically generated by UIPainter ..." cg@1088: cg@1088: |holder| cg@1088: cg@1088: (holder := builder bindingAt:#repositoryDirectory) isNil ifTrue:[ cg@1371: builder aspectAt:#repositoryDirectory put:(holder := ValueHolder new). cg@1371: holder onChangeEvaluate:[modifiedChannel value:true]. cg@1088: ]. cg@1088: ^ holder. cg@1088: cg@1088: "Created: / 23.3.1999 / 14:18:05 / cg" cg@1088: ! cg@1088: cg@1088: repositoryModule cg@1088: "automatically generated by UIPainter ..." cg@1088: cg@1088: |holder| cg@1088: cg@1088: (holder := builder bindingAt:#repositoryModule) isNil ifTrue:[ cg@1371: builder aspectAt:#repositoryModule put:(holder := ValueHolder new). cg@1371: holder onChangeEvaluate:[modifiedChannel value:true]. cg@1088: ]. cg@1088: ^ holder. cg@1088: cg@1088: "Created: / 23.3.1999 / 14:18:05 / cg" cg@1088: ! cg@1088: cg@1025: rightCanvasTextHolder cg@1025: "automatically generated by UIPainter ..." cg@1025: cg@1025: |holder| cg@1025: cg@1025: (holder := builder bindingAt:#rightCanvasTextHolder) isNil ifTrue:[ cg@1371: builder aspectAt:#rightCanvasTextHolder put:(holder := ValueHolder new). cg@1025: ]. cg@1025: ^ holder. cg@1025: ! cg@1025: cg@1109: selectedClassInPrerequisites cg@1109: "automatically generated by UIPainter ..." cg@1109: cg@1109: |holder| cg@1109: cg@1109: (holder := builder bindingAt:#selectedClassInPrerequisites) isNil ifTrue:[ cg@1371: builder aspectAt:#selectedClassInPrerequisites put:(holder := ValueHolder new). cg@1109: ]. cg@1109: ^ holder. cg@1109: cg@1109: "Created: / 23.3.1999 / 14:18:05 / cg" cg@1109: ! cg@1109: cg@1218: selectedPatchInRightCanvas cg@1206: "automatically generated by UIPainter ..." cg@1206: cg@1206: |holder| cg@1206: cg@1218: (holder := builder bindingAt:#selectedPatchInRightCanvas) isNil ifTrue:[ cg@1371: builder aspectAt:#selectedPatchInRightCanvas put:(holder := ValueHolder new). cg@1206: ]. cg@1206: ^ holder. cg@1206: ! cg@1206: cg@1089: selectedProjectInPrerequisites cg@1089: "automatically generated by UIPainter ..." cg@1089: cg@1089: |holder| cg@1089: cg@1089: (holder := builder bindingAt:#selectedProjectInPrerequisites) isNil ifTrue:[ cg@1371: builder aspectAt:#selectedProjectInPrerequisites put:(holder := ValueHolder new). cg@1089: ]. cg@1089: ^ holder. cg@1089: cg@1089: "Created: / 23.3.1999 / 14:18:05 / cg" cg@1089: ! cg@1089: cg@1109: selectedRequiredClassInPrerequisites cg@1109: "automatically generated by UIPainter ..." cg@1109: cg@1109: |holder| cg@1109: cg@1109: (holder := builder bindingAt:#selectedRequiredClassInPrerequisites) isNil ifTrue:[ cg@1371: builder aspectAt:#selectedRequiredClassInPrerequisites put:(holder := ValueHolder new). cg@1109: ]. cg@1109: ^ holder. cg@1109: cg@1109: "Created: / 23.3.1999 / 14:18:05 / cg" cg@1109: ! cg@1109: cg@1089: selectedRequiredProjectInPrerequisites cg@1089: "automatically generated by UIPainter ..." cg@1089: cg@1089: |holder| cg@1089: cg@1089: (holder := builder bindingAt:#selectedRequiredProjectInPrerequisites) isNil ifTrue:[ cg@1371: builder aspectAt:#selectedRequiredProjectInPrerequisites put:(holder := ValueHolder new). cg@1089: ]. cg@1089: ^ holder. cg@1089: cg@1089: "Created: / 23.3.1999 / 14:18:05 / cg" cg@1089: ! cg@1089: cg@1099: selectedTreeNodeHolder cg@1025: "automatically generated by UIPainter ..." cg@1025: cg@1210: selectedTreeNodeHolder isNil ifTrue:[ cg@1371: selectedTreeNodeHolder := ValueHolder new. cg@1025: ]. cg@1210: ^ selectedTreeNodeHolder. cg@1206: ! cg@1206: cg@1206: showWhat cg@1206: |holder| cg@1206: cg@1206: (holder := builder bindingAt:#showWhat) isNil ifTrue:[ cg@1371: holder := ValueHolder new. cg@1371: builder aspectAt:#showWhat put:holder. cg@1371: holder onChangeSend:#projectFilterChanged to:self. cg@1206: ]. cg@1206: ^ holder. cg@1206: cg@1206: "Created: / 23.3.1999 / 14:18:05 / cg" cg@1232: ! cg@1232: cg@1232: textCanvasLabelHolder cg@1232: "automatically generated by UIPainter ..." cg@1232: cg@1232: |holder| cg@1232: cg@1232: (holder := builder bindingAt:#textCanvasLabelHolder) isNil ifTrue:[ cg@1371: builder aspectAt:#textCanvasLabelHolder put:(holder :='' asValue). cg@1232: ]. cg@1232: ^ holder. cg@1025: ! ! cg@1025: cg@1081: !ProjectBrowser methodsFor:'change & update'! cg@1081: cg@1081: update:something with:aParameter from:changedObject cg@1254: |cls sel oldMthd newMthd prj package| cg@1254: cg@1085: something == #name ifTrue:[ cg@1371: "/ a project was renamed - update my tree cg@1371: self projectTree children do:[:pNode | cg@1371: pNode contents == changedObject ifTrue:[ cg@1371: pNode name:changedObject name. cg@1371: pNode changed. cg@1371: ] cg@1371: ]. cg@1371: ^ self. cg@1085: ]. cg@1085: cg@1254: prj := self currentProject. cg@1254: prj isNil ifTrue:[^ self]. cg@1254: cg@1254: package := prj package. cg@1254: cg@1254: changedObject == prj ifTrue:[ cg@1371: self readAspectsFromProject. cg@1081: ]. cg@1116: cg@1254: changedObject == Smalltalk ifTrue:[ cg@1371: something == #newClass ifTrue:[ cg@1371: aParameter isBehavior ifTrue:[ cg@1371: aParameter wasAutoloaded ifTrue:[ cg@1371: self listOfAllClassesInPrerequisites add:something name. cg@1371: ^ self. cg@1371: ]. cg@1371: aParameter package = package ifTrue:[ cg@1371: "/ a new class was added to the package; cg@1371: "/ must look if already there, and possibly update my cg@1371: "/ tree and classList cg@1371: (self currentProject includesClass:aParameter) ifFalse:[ cg@1371: self halt. cg@1371: ]. cg@1371: ^ self. cg@1371: ] cg@1371: ] cg@1371: ]. cg@1371: cg@1371: something == #methodInClass ifTrue:[ cg@1371: cls := aParameter first. cg@1371: sel := aParameter second. cg@1371: oldMthd := aParameter third. cg@1371: newMthd := cls compiledMethodAt:sel. cg@1371: cg@1371: cls package ~= package ifTrue:[ cg@1371: "/ method removed from project ? cg@1371: (oldMthd notNil and:[oldMthd package = package]) ifTrue:[ cg@1371: (newMthd notNil and:[newMthd package ~= package]) ifTrue:[ cg@1371: "/ remove from methodList cg@1371: ] cg@1371: ]. cg@1371: cg@1371: "/ method added to project ? cg@1371: (oldMthd isNil or:[oldMthd package ~= package]) ifTrue:[ cg@1371: (newMthd notNil and:[newMthd package = package]) ifTrue:[ cg@1371: "/ add to methodList cg@1371: ] cg@1371: ] cg@1371: ] cg@1371: ]. cg@1254: ]. cg@1254: cg@1116: "Modified: / 26.4.1999 / 23:39:04 / cg" cg@1081: ! ! cg@1081: cg@1025: !ProjectBrowser methodsFor:'initialization'! cg@1025: cg@1254: closeDownViews cg@1254: Smalltalk removeDependent:self. cg@1254: super closeDownViews. cg@1254: ! cg@1254: cg@1025: postBuildWith:aBuiler cg@1254: Smalltalk addDependent:self. cg@1081: self modifiedChannel value:false. cg@1081: cg@1095: self updateRightCanvas. cg@1026: ^ super postBuildWith:aBuiler cg@1025: ! cg@1025: cg@1025: setupCanvasForNoSelection cg@1079: self cg@1371: showReadOnlyText:'Please select an existing project, cg@1079: load one from a (''.prj'')-file, cg@1025: or create a new project.'. cg@1025: ! ! cg@1025: cg@1026: !ProjectBrowser methodsFor:'menus'! cg@1026: cg@1026: itemMenu cg@1052: |m| cg@1052: cg@1088: self hasNodeSelected ifFalse:[ cg@1371: ^ self class noItemMenu cg@1088: ]. cg@1026: self hasProjectNodeSelected ifTrue:[ cg@1371: ^ self class projectItemMenu cg@1026: ]. cg@1037: self hasSubProjectsNodeSelected ifTrue:[ cg@1371: ^ self class subProjectsItemMenu cg@1037: ]. cg@1052: self hasClassesNodeSelected ifTrue:[ cg@1371: ^ self class classesItemMenu cg@1052: ]. cg@1094: self hasClassNodeSelected ifTrue:[ cg@1371: ^ self class classItemMenu cg@1094: ]. cg@1218: self hasMethodNodeSelected ifTrue:[ cg@1371: ^ self class methodItemMenu cg@1218: ]. cg@1255: self hasPatchesNodeSelected ifTrue:[ cg@1371: ^ self class methodsItemMenu cg@1255: ]. cg@1109: self hasPrerequisiteClassesNodeSelected ifTrue:[ cg@1371: ^ self class prerequisiteClassesItemMenu cg@1109: ]. cg@1291: self hasPrerequisitePackagesNodeSelected ifTrue:[ cg@1371: ^ self class prerequisitePackagesItemMenu cg@1291: ]. cg@1088: ^ nil cg@1026: ! cg@1026: cg@1026: itemMenuHolder cg@1026: ^ [ self itemMenu] cg@1037: ! cg@1037: cg@1037: itemMenuPerformer cg@1037: ^ self cg@1026: ! ! cg@1026: cg@1025: !ProjectBrowser methodsFor:'private'! cg@1025: cg@1218: addProjectNodeToTree:newNode cg@1218: |aProject nodeToAdd path childNode| cg@1218: cg@1218: "/ projectTree add:newNode. cg@1218: cg@1218: "/ insert into tree ... cg@1218: nodeToAdd := projectTree. cg@1218: cg@1218: path := newNode contents package asCollectionOfSubstringsSeparatedByAny:'/\:'. cg@1218: path from:1 to:path size-1 do:[:part | cg@1371: childNode := nodeToAdd children detect:[:child | child name = part] ifNone:nil. cg@1371: childNode isNil ifTrue:[ cg@1371: nodeToAdd add:(childNode := ProjectTreeItem new name:part). cg@1371: ]. cg@1371: nodeToAdd := childNode. cg@1218: ]. cg@1218: newNode name:(path last). cg@1218: nodeToAdd add:newNode. cg@1218: cg@1218: ! cg@1218: cg@1109: canAddClassToPrerequisites:aClassName cg@1109: ^ aClassName notNil cg@1109: ! cg@1109: cg@1109: canAddProjectToPrerequisites:aProjectName cg@1091: ^ aProjectName notNil cg@1091: and:[aProjectName ~= self currentProject name] cg@1091: ! cg@1091: cg@1094: canLoadClassesFromDirectory cg@1094: |p projectDir| cg@1094: cg@1094: self hasClassesNodeSelected ifFalse:[^ false]. cg@1094: cg@1094: (p := self currentProject) isNil ifTrue:[^ false]. cg@1094: (projectDir := p directory) size == 0 ifTrue:[^ false]. cg@1094: projectDir asFilename exists ifFalse:[^ false]. cg@1094: cg@1094: ^ true cg@1094: ! cg@1094: cg@1094: canLoadClassesFromRepository cg@1094: |manager p moduleDir packageDir| cg@1094: cg@1094: self hasClassesNodeSelected ifFalse:[^ false]. cg@1094: cg@1094: (p := self currentProject) isNil ifTrue:[^ false]. cg@1094: (moduleDir := p repositoryModule) size == 0 ifTrue:[^ false]. cg@1094: (packageDir := p repositoryDirectory) size == 0 ifTrue:[^ false]. cg@1094: cg@1094: "/ SourceCodeManager available ? cg@1094: cg@1094: (AbstractSourceCodeManager notNil cg@1094: and:[AbstractSourceCodeManager isLoaded not]) ifTrue:[ cg@1371: AbstractSourceCodeManager autoload. cg@1094: ]. cg@1094: cg@1094: AbstractSourceCodeManager isNil ifTrue:[^ false]. cg@1094: AbstractSourceCodeManager isLoaded ifFalse:[^ false]. cg@1094: (manager := Smalltalk at:#SourceCodeManager) isNil ifTrue:[^ false]. cg@1094: cg@1094: "/ does the repository contain the module/package ? cg@1147: "/ since this is a slow operation (involving the CVS manager, cg@1147: "/ remember checked modules here in a classVar cg@1147: AlreadCheckedExistingModulesAndPackages isNil ifTrue:[ cg@1371: AlreadCheckedExistingModulesAndPackages := OrderedCollection new cg@1147: ]. cg@1147: AlreadCheckedExistingModulesAndPackages do:[:entry | cg@1371: (entry at:1) = moduleDir ifTrue:[ cg@1371: (entry at:2) = packageDir ifTrue:[ cg@1371: ^ true cg@1371: ] cg@1371: ] cg@1147: ]. cg@1094: cg@1094: (manager checkForExistingModule:moduleDir package:packageDir) ifFalse:[^ false]. cg@1094: cg@1147: AlreadCheckedExistingModulesAndPackages add:(Array with:moduleDir with:packageDir). cg@1094: ^ true cg@1094: ! cg@1094: cg@1291: canLoadCurrentProject cg@1291: |prj| cg@1291: cg@1291: self hasProjectSelected ifFalse:[^ false]. cg@1291: (prj := self currentProject) isNil ifTrue:[^ self]. cg@1291: ^ prj isLoaded not cg@1291: cg@1291: ! cg@1291: cg@1291: canUnloadCurrentProject cg@1291: |prj| cg@1291: cg@1291: self hasProjectSelected ifFalse:[^ false]. cg@1291: (prj := self currentProject) isNil ifTrue:[^ self]. cg@1291: ^ prj isLoaded cg@1291: cg@1291: ! cg@1291: cg@1289: checkInClasses:aCollectionOfClasses cg@1289: |logMessage| cg@1289: cg@1289: logMessage := SourceCodeManagerUtilities getLogMessageFor:'classes in project'. cg@1289: SourceCodeManagerUtilities checkinClasses:aCollectionOfClasses withLog:logMessage. cg@1289: ! cg@1289: cg@1081: currentProject cg@1081: |node| cg@1081: cg@1218: node := self currentProjectNode. cg@1218: node isNil ifTrue:[^ nil]. cg@1218: ^ node contents cg@1218: cg@1218: ! cg@1218: cg@1218: currentProjectNode cg@1218: |node| cg@1218: cg@1099: node := self selectedTreeNode. cg@1081: node isNil ifTrue:[^ nil]. cg@1081: cg@1081: [node notNil and:[node isProjectNode not]] whileTrue:[ cg@1371: node := node parent. cg@1081: ]. cg@1081: node notNil ifTrue:[ cg@1371: ^ node cg@1081: ]. cg@1081: ^ nil cg@1081: cg@1081: ! cg@1081: cg@1109: currentProjectsClassNames cg@1109: |p| cg@1109: cg@1109: p := self currentProject. cg@1253: ^ p classes cg@1371: collect:[:classOrSymbol | cg@1371: classOrSymbol isBehavior ifTrue:[ cg@1371: classOrSymbol name cg@1371: ] ifFalse:[ cg@1371: classOrSymbol cg@1371: ] cg@1371: ] cg@1109: cg@1109: ! cg@1109: cg@1239: expandPathToNodeFor:someContents cg@1239: |theNode| cg@1239: cg@1239: theNode := self projectTreeHolder cg@1371: detectFirstItem:[:item | item contents == someContents]. cg@1239: cg@1239: [theNode notNil] whileTrue:[ cg@1371: self projectTreeHolder expand:theNode. cg@1371: theNode := theNode parent. cg@1239: ]. cg@1239: cg@1239: cg@1239: cg@1239: ! cg@1239: cg@1094: hasClassNodeSelected cg@1094: |selectedNode| cg@1094: cg@1099: selectedNode := self selectedTreeNode. cg@1094: selectedNode isNil ifTrue:[^ false]. cg@1094: cg@1094: ^ selectedNode contents isAssociation cg@1094: and:[selectedNode contents key == #class] cg@1094: cg@1094: ! cg@1094: cg@1052: hasClassesNodeSelected cg@1255: ^ self hasNodeSelected:#classes. cg@1052: cg@1052: ! cg@1052: cg@1218: hasMethodNodeSelected cg@1218: |selectedNode| cg@1218: cg@1218: selectedNode := self selectedTreeNode. cg@1218: selectedNode isNil ifTrue:[^ false]. cg@1218: cg@1218: ^ selectedNode contents isAssociation cg@1218: and:[selectedNode contents key == #method] cg@1218: cg@1218: ! cg@1218: cg@1255: hasNodeSelected cg@1255: ^ self selectedTreeNode notNil cg@1255: cg@1255: ! cg@1255: cg@1255: hasNodeSelected:type cg@1218: |selectedNode| cg@1218: cg@1218: selectedNode := self selectedTreeNode. cg@1218: selectedNode isNil ifTrue:[^ false]. cg@1218: cg@1255: ^ selectedNode contents == type cg@1255: cg@1255: ! cg@1255: cg@1255: hasPatchesNodeSelected cg@1255: ^ self hasNodeSelected:#patches. cg@1088: cg@1088: ! cg@1088: cg@1109: hasPrerequisiteClassesNodeSelected cg@1255: ^ self hasNodeSelected:#prerequisiteClasses. cg@1109: ! cg@1109: cg@1291: hasPrerequisitePackagesNodeSelected cg@1291: ^ self hasNodeSelected:#prerequisitePackages. cg@1291: ! cg@1291: cg@1327: hasPrerequisitesNodeSelected cg@1327: ^ self hasNodeSelected:#prerequisites. cg@1327: cg@1327: ! cg@1327: cg@1026: hasProjectNodeSelected cg@1026: |selectedNode| cg@1026: cg@1099: selectedNode := self selectedTreeNode. cg@1026: selectedNode isNil ifTrue:[^ false]. cg@1026: cg@1026: ^ selectedNode isProjectNode cg@1026: cg@1026: ! cg@1026: cg@1218: hasProjectSelected cg@1218: |selectedNode node| cg@1218: cg@1218: selectedNode := self selectedTreeNode. cg@1218: selectedNode isNil ifTrue:[^ false]. cg@1218: cg@1218: node := selectedNode. cg@1218: [node notNil] whileTrue:[ cg@1371: node isProjectNode ifTrue:[^ true]. cg@1371: node := node parent. cg@1218: ]. cg@1218: ^ false. cg@1218: ! cg@1218: cg@1037: hasSubProjectsNodeSelected cg@1255: ^ self hasNodeSelected:#subprojects. cg@1037: cg@1037: ! cg@1037: cg@1251: makeTranscriptVisible cg@1251: |transcript| cg@1251: cg@1251: transcript := self transcript. cg@1251: cg@1251: (transcript relativeCorner y - transcript relativeOrigin y) < 0.1 ifTrue:[ cg@1371: (self builder componentAt:#VariableVerticalPanel1) cg@1371: resizeSubViewsTo:#(0.7 0.3) cg@1251: ]. cg@1251: cg@1251: cg@1251: cg@1251: ! cg@1251: cg@1025: nodeFor:aProject cg@1026: "generate and return a treeNode for some project" cg@1026: cg@1025: |projectName pNode cg@1043: propertiesNode docNode classesNode patchesNode subprojectsNode filesNode cg@1043: commentNode prerequisitesNode analysisNode designNode codeNode cg@1079: userDocNode userOverViewNode userGuideNode userRefManNode cg@1234: deploymentNode classIcon methodIcon buildOptionsNode cg@1291: prerequisitePackagesNode prerequisiteClassesNode| cg@1025: cg@1025: projectName := aProject name. cg@1026: pNode := ProjectNode name:projectName. cg@1025: pNode contents:aProject. cg@1025: cg@1025: pNode add:(commentNode := ProjectTreeItem name:'Comment'). cg@1079: "/ pNode add:(docNode := ProjectTreeItem name:'Documentation'). cg@1025: pNode add:(propertiesNode := ProjectTreeItem name:'Properties'). cg@1026: pNode add:(prerequisitesNode := ProjectTreeItem name:'Prerequisites'). cg@1079: "/ pNode add:(subprojectsNode := ProjectTreeItem name:'SubProjects'). cg@1043: pNode add:(classesNode := ProjectTreeItem name:'Classes'). cg@1327: pNode add:(patchesNode := ProjectTreeItem name:'Patches & Extensions'). cg@1025: pNode add:(filesNode := ProjectTreeItem name:'Files'). cg@1234: pNode add:(buildOptionsNode := ProjectTreeItem name:'Build Options'). cg@1079: pNode add:(deploymentNode := ProjectTreeItem name:'Deployment'). cg@1025: cg@1079: subprojectsNode notNil ifTrue:[ cg@1371: subprojectsNode contents:#subprojects. cg@1371: aProject subProjects do:[:aSubProject | cg@1371: subprojectsNode add:(self nodeFor:aSubProject) cg@1371: ]. cg@1025: ]. cg@1025: cg@1079: commentNode icon:(self class commentIcon). cg@1025: commentNode action:[:item | self showCommentOf:item]. cg@1109: commentNode info:'Some comment describing the project'. cg@1026: commentNode contents:#comment. cg@1026: cg@1079: docNode notNil ifTrue:[ cg@1371: docNode contents:#documentation. cg@1371: docNode action:[:item | self showDocumentationFor:item]. cg@1371: cg@1371: docNode add:(analysisNode := ProjectTreeItem name:'Analysis'). cg@1371: docNode add:(designNode := ProjectTreeItem name:'Design'). cg@1371: docNode add:(codeNode := ProjectTreeItem name:'Code'). cg@1371: docNode add:(userDocNode := ProjectTreeItem name:'User Documentation'). cg@1371: userDocNode add:(userOverViewNode := ProjectTreeItem name:'Overview'). cg@1371: userDocNode add:(userGuideNode := ProjectTreeItem name:'Guide'). cg@1371: userDocNode add:(userRefManNode := ProjectTreeItem name:'Reference'). cg@1371: docNode add:(userDocNode := ProjectTreeItem name:'Error Reports'). cg@1371: docNode add:(userDocNode := ProjectTreeItem name:'Other'). cg@1079: ]. cg@1043: cg@1327: prerequisitesNode contents:#prerequisites. cg@1080: prerequisitesNode icon:(self class prerequisitesIcon). cg@1291: prerequisitesNode add:(prerequisitePackagesNode := ProjectTreeItem name:'Packages'). cg@1109: prerequisitesNode add:(prerequisiteClassesNode := ProjectTreeItem name:'Classes'). cg@1109: prerequisitesNode info:'Other projects and classes required by the project'. cg@1109: cg@1291: prerequisitePackagesNode contents:#prerequisitePackages. cg@1291: prerequisitePackagesNode icon:(self class prerequisitePackagesIcon). cg@1291: prerequisitePackagesNode spec:[self class rightCanvasSpecForPrerequisitePackages]. cg@1291: prerequisitePackagesNode info:'Other projects required by the project'. cg@1109: cg@1109: prerequisiteClassesNode contents:#prerequisiteClasses. cg@1109: prerequisiteClassesNode icon:(self class prerequisiteClassesIcon). cg@1109: prerequisiteClassesNode spec:[self class rightCanvasSpecForPrerequisiteClasses]. cg@1109: prerequisiteClassesNode info:'Other (autoloaded-) classes required by the project'. cg@1043: cg@1097: classIcon := self class classIcon. cg@1097: cg@1037: classesNode contents:#classes. cg@1079: classesNode icon:(self class classesIcon). cg@1109: classesNode info:'Classes contained in the project'. cg@1253: (aProject classes copy cg@1371: sort:[:a :b | cg@1371: |nmA nmB| cg@1371: cg@1371: nmA := a isBehavior ifTrue:[a name] ifFalse:[a]. cg@1371: nmB := b isBehavior ifTrue:[b name] ifFalse:[b]. cg@1371: nmA < nmB cg@1371: ] cg@1253: ) do:[:aClass | cg@1371: |cNode cName| cg@1371: cg@1371: cName := aClass isBehavior ifTrue:[aClass name] ifFalse:[aClass]. cg@1371: cNode := ProjectTreeItem name:cName. cg@1371: cNode contents:(#class -> aClass). cg@1371: cNode icon:classIcon. cg@1371: classesNode add:cNode. cg@1043: ]. cg@1026: cg@1109: cg@1026: propertiesNode contents:#properties. cg@1091: propertiesNode spec:[self class rightCanvasSpecForProperties]. cg@1109: propertiesNode info:'Project propreties'. cg@1026: cg@1026: filesNode contents:#files. cg@1079: filesNode icon:(self class filesIcon). cg@1223: filesNode info:'Files (extensions, bitmaps, data) contained in the project'. cg@1218: filesNode spec:[self class rightCanvasSpecForFiles]. cg@1218: cg@1218: methodIcon := self class methodIcon. cg@1025: cg@1043: patchesNode contents:#patches. cg@1079: patchesNode icon:(self class methodsIcon). cg@1223: patchesNode info:'Patches & Extensions (system-changes) contained in the project'. cg@1255: (aProject methodInfo copy cg@1371: sort:[:a :b | cg@1371: a displayString < b displayString. cg@1371: ] cg@1253: ) do:[:aMethodInfo | cg@1371: |cNode cName| cg@1371: cg@1371: cNode := ProjectTreeItem name:(aMethodInfo className , ' ' , aMethodInfo methodName). cg@1371: cNode contents:(#method -> aMethodInfo). cg@1371: cNode icon:methodIcon. cg@1371: patchesNode add:cNode. cg@1218: ]. cg@1079: cg@1079: deploymentNode icon:(self class deploymentIcon). cg@1091: deploymentNode spec:[self class rightCanvasSpecForDeployment]. cg@1109: deploymentNode info:'Deployment & packaging specification.'. cg@1231: deploymentNode contents:#deployment. cg@1043: cg@1234: buildOptionsNode icon:(self class buildOptionsIcon). cg@1234: buildOptionsNode spec:[self class rightCanvasSpecForBuildOptions]. cg@1234: buildOptionsNode info:'Compilation & include options.'. cg@1234: buildOptionsNode contents:#buildOptions. cg@1234: cg@1025: ^ pNode cg@1026: cg@1080: "Modified: / 23.3.1999 / 14:27:30 / cg" cg@1025: ! cg@1025: cg@1025: projectTree cg@1026: projectTree isNil ifTrue:[ cg@1371: self updateProjectTree cg@1025: ]. cg@1025: cg@1026: ^ projectTree cg@1025: ! cg@1025: cg@1081: readAspectsFromProject cg@1291: |p type l ns mMod mDir mPkg pkg| cg@1080: cg@1081: p := self currentProject. cg@1081: p notNil ifTrue:[ cg@1371: self selectedTreeNode contents == #comment ifTrue:[ cg@1371: self rightCanvasTextHolder value:p comment. cg@1371: ]. cg@1371: cg@1371: self methodsFile value:(p propertyAt:#methodsFile). cg@1371: self projectCodeIsLoadedHolder value:(p isLoaded == true). cg@1371: p isLoaded == true ifFalse:[ cg@1371: self valueOfInfoLabel value:'Projects code is not loaded.' cg@1371: ]. cg@1371: cg@1371: self currentProjectWasNotLoadedFromFile value:p wasLoadedFromFile not. cg@1371: (type := p type) == #classLibrary ifTrue:[ cg@1371: type := #library cg@1371: ]. cg@1371: self projectType value:type. cg@1371: self projectDirectory value:(p directory). cg@1371: ns := p defaultNameSpace ? Smalltalk. cg@1371: ns isSymbol ifFalse:[ cg@1371: ns := ns name cg@1371: ]. cg@1371: self projectNamespace value:ns. cg@1371: cg@1371: pkg := p package ? Project current package. cg@1371: mMod := p repositoryModule ? '?'. cg@1371: mDir := p repositoryDirectory ? '?'. cg@1371: mPkg := mMod , ':' , mDir. cg@1371: cg@1371: mPkg ~= pkg ifTrue:[ cg@1371: (pkg includes:$:) ifTrue:[ cg@1371: mMod := pkg upTo:$:. cg@1371: mDir := pkg copyFrom:mMod size + 2. cg@1292: "/ self warn:('package id: ''' , pkg , ''' different from moduleId: ''' , mPkg , cg@1292: "/ '\\Assume module:''' , mMod , ''' directory:''' , mDir , '''') withCRs. cg@1371: ] ifFalse:[ cg@1371: ((mMod ~= '?') and:[mDir ~= '?']) ifTrue:[ cg@1292: "/ self warn:('package id: ''' , pkg , ''' different from moduleId: ''' , mPkg , cg@1292: "/ '\\Assume package:''' , mMod , ':' , mDir , '''') withCRs. cg@1371: pkg := mMod , ':' , mDir cg@1371: ] ifFalse:[ cg@1292: "/ self warn:('package id: ''' , pkg , ''' different from moduleId: ''' , mPkg , cg@1292: "/ '\\Please care for the module and directory settings.') withCRs. cg@1371: ] cg@1371: ] cg@1371: ]. cg@1371: self projectPackage value:pkg. cg@1371: self repositoryModule value:mMod. cg@1371: self repositoryDirectory value:mDir. cg@1371: cg@1371: self deliverCompiledBinary value:(p propertyAt:#deliverCompiledBinary) ? false. cg@1371: self deliverByteCode value:(p propertyAt:#deliverByteCode) ? false. cg@1371: self deliverGZipArchive value:(p propertyAt:#deliverGZipArchive) ? false. cg@1371: self deliverZipArchive value:(p propertyAt:#deliverZipArchive) ? false. cg@1371: self deliverTarArchive value:(p propertyAt:#deliverTarArchive) ? false. cg@1371: self deliverLoadAllFile value:(p propertyAt:#deliverLoadAllFile) ? false. cg@1371: self deliverSources value:(p propertyAt:#deliverSources) ? false. cg@1371: self deliverMakefiles value:(p propertyAt:#deliverMakefiles) ? false. cg@1371: cg@1371: self makeDefines value:(p propertyAt:#'make.stc.LOCALDEFINES') ? ''. cg@1371: self makeIncludes value:(p propertyAt:#'make.stc.LOCALINCLUDES') ? ''. cg@1371: self makeOtherWarningOptions value:(p propertyAt:#'make.stc.WARNINGOPTIONS') ? ''. cg@1371: self makeWarnEOLComments value:(p propertyAt:#'make.stc.warnEOLComments') ? false. cg@1371: self makeWarnNonStandard value:(p propertyAt:#'make.stc.warnNonStandard') ? true. cg@1234: cg@1234: "/ self makeLocalLibs value:(p propertyAt:#'make.LD_OBJ_LIBS') ? ''. cg@1234: "/ self makeExtraTargets value:(p propertyAt:#'make.LOCAL_EXTRA_TARGETS') ? ''. cg@1234: cg@1371: self installDirectoryUnix cg@1371: value:(p propertyAt:#installDirectoryUnix) ? cg@1371: ((p propertyAt:#installDirectory) ? '/opt/smalltalk/packages'). cg@1371: self installDirectoryWin32 cg@1371: value:(p propertyAt:#installDirectoryWin32) ? cg@1371: ((p propertyAt:#installDirectory) ? '\Programme\SmalltalkX\packages'). cg@1371: self installDirectoryVMS cg@1371: value:(p propertyAt:#installDirectoryVMS) ? cg@1371: ((p propertyAt:#installDirectory) ? 'SYS$SMALLTALKX:[PACKAGES]'). cg@1149: "/ self installDirectoryMacOS cg@1149: "/ value:(p propertyAt:#installDirectoryMacOS) ? cg@1149: "/ ((p propertyAt:#installDirectory) ? '\Programme\SmalltalkX'). cg@1094: cg@1371: l := p prerequisitePackages collect:[:entry | cg@1371: |pName| cg@1371: cg@1371: entry isString ifTrue:[ cg@1371: pName := entry cg@1371: ] ifFalse:[ cg@1371: entry isArray ifTrue:[ cg@1371: pName := entry at:1 cg@1371: ] ifFalse:[ cg@1371: pName := entry name cg@1371: ] cg@1371: ] cg@1371: ]. cg@1371: self listOfRequiredProjectsInPrerequisites value:(l sort). cg@1371: self listOfRequiredClassesInPrerequisites value:(p prerequisiteClasses copy sort). cg@1371: cg@1371: modifiedChannel value:false. cg@1371: p addDependent:self. cg@1081: ]. cg@1081: cg@1081: "Created: / 23.3.1999 / 14:16:12 / cg" cg@1116: "Modified: / 26.4.1999 / 23:38:14 / cg" cg@1081: ! cg@1081: cg@1231: reallyModified cg@1231: |p l selectedNodeType| cg@1231: cg@1231: p := self currentProject. cg@1231: selectedNodeType := self selectedTreeNode contents. cg@1231: cg@1231: selectedNodeType == #comment ifTrue:[ cg@1232: self halt. cg@1371: ^ self rightCanvasTextHolder value ~= p comment cg@1231: ]. cg@1231: selectedNodeType == #deployment ifTrue:[ cg@1371: (self deliverByteCode value ~= (p propertyAt:#deliverByteCode)) ifTrue:[^ true]. cg@1371: (self deliverCompiledBinary value ~= (p propertyAt:#deliverCompiledBinary)) ifTrue:[^ true]. cg@1371: (self deliverLoadAllFile value ~= (p propertyAt:#deliverLoadAllFile)) ifTrue:[^ true]. cg@1371: (self deliverSources value ~= (p propertyAt:#deliverSources)) ifTrue:[^ true]. cg@1371: (self deliverMakefiles value ~= (p propertyAt:#deliverMakefiles)) ifTrue:[^ true]. cg@1371: cg@1371: (self deliverZipArchive value ~= (p propertyAt:#deliverZipArchive)) ifTrue:[^ true]. cg@1371: (self deliverTarArchive value ~= (p propertyAt:#deliverTarArchive)) ifTrue:[^ true]. cg@1371: (self deliverGZipArchive value ~= (p propertyAt:#deliverGZipArchive)) ifTrue:[^ true]. cg@1371: cg@1371: self installDirectoryUnix value ~= cg@1371: ((p propertyAt:#installDirectoryUnix) ? cg@1371: ((p propertyAt:#installDirectory) ? cg@1371: '/opt/smalltalk/packages')) ifTrue:[^ true]. cg@1371: cg@1371: self installDirectoryWin32 value ~= cg@1371: ((p propertyAt:#installDirectoryWin32) ? cg@1371: ((p propertyAt:#installDirectory) ? cg@1371: '\Programme\SmalltalkX\packages')) ifTrue:[^ true]. cg@1371: cg@1371: self installDirectoryVMS value ~= cg@1371: ((p propertyAt:#installDirectoryVMS) ? cg@1371: ((p propertyAt:#installDirectory) ? cg@1371: 'SYS$SMALLTALKX:[PACKAGES]')) ifTrue:[^ true]. cg@1371: cg@1371: ^ false cg@1231: ]. cg@1232: selectedNodeType == #files ifTrue:[ cg@1232: ^ true. cg@1371: (self methodsFile value ~= (p propertyAt:#methodsFile)) ifTrue:[^ true]. cg@1371: ^ false cg@1232: ]. cg@1231: self halt. cg@1232: cg@1231: (self projectType value ~~ p type) ifTrue:[^ true]. cg@1231: (self projectDirectory value ~= p directory) ifTrue:[^ true]. cg@1231: (self projectPackage value ~= p package) ifTrue:[^ true]. cg@1231: (self projectNamespace value ~= (p defaultNameSpace ? Smalltalk) name) ifTrue:[^ true]. cg@1231: cg@1231: (self repositoryModule value ~= p repositoryModule) ifTrue:[^ true]. cg@1231: (self repositoryDirectory value ~= p repositoryDirectory) ifTrue:[^ true]. cg@1231: cg@1231: "/ self installDirectoryMacOS value ~= cg@1231: "/ ((p propertyAt:#installDirectoryMacOS) ? cg@1231: "/ ((p propertyAt:#installDirectory) ? cg@1231: "/ '\Programme\SmalltalkX')) ifTrue:[^ true]. cg@1231: cg@1231: l := p prerequisitePackages collect:[:entry | cg@1371: |pName| cg@1371: cg@1371: entry isString ifTrue:[ cg@1371: pName := entry cg@1371: ] ifFalse:[ cg@1371: entry isArray ifTrue:[ cg@1371: pName := entry at:1 cg@1371: ] ifFalse:[ cg@1371: pName := entry name cg@1371: ] cg@1371: ] cg@1371: ]. cg@1231: self listOfRequiredProjectsInPrerequisites value ~= (l sort) ifTrue:[^ true]. cg@1231: self listOfRequiredClassesInPrerequisites value ~= (p prerequisiteClasses copy sort) ifTrue:[^ true]. cg@1231: self halt. cg@1231: cg@1231: ! cg@1231: cg@1081: saveAspectsIntoProject cg@1291: |p s ns dir pkg| cg@1081: cg@1081: p := self currentProject. cg@1081: p notNil ifTrue:[ cg@1371: p removeDependent:self. cg@1371: cg@1371: self acceptChannel value:true; value:false. cg@1108: cg@1081: "/ self currentProjectWasNotLoadedFromFile value:p wasLoadedFromFile not. cg@1371: p type:self projectType value. cg@1371: cg@1371: dir := self projectDirectory value. cg@1371: dir := (dir ? '') asFilename. cg@1371: (dir exists and:[dir isDirectory]) ifFalse:[ cg@1371: self warn:'Invalid project directory: ' , dir pathName cg@1371: ]. cg@1371: cg@1371: p directory:self projectDirectory value. cg@1371: pkg := self repositoryModule value , ':' , self repositoryDirectory value. cg@1371: p packageName:pkg asSymbol. cg@1371: cg@1371: p repositoryModule:self repositoryModule value. cg@1371: p repositoryDirectory:self repositoryDirectory value. cg@1371: cg@1371: s := self projectNamespace value. cg@1371: (s size == 0) ifTrue:[ cg@1371: ns := Smalltalk cg@1371: ] ifFalse:[ cg@1371: ns := NameSpace name:s cg@1371: ]. cg@1371: p defaultNameSpace:ns. cg@1371: cg@1371: p propertyAt:#methodsFile put:self methodsFile value. cg@1371: cg@1371: p propertyAt:#deliverCompiledBinary put:self deliverCompiledBinary value. cg@1371: p propertyAt:#deliverByteCode put:self deliverByteCode value. cg@1371: p propertyAt:#deliverTarArchive put:self deliverTarArchive value. cg@1371: p propertyAt:#deliverZipArchive put:self deliverZipArchive value. cg@1371: p propertyAt:#deliverGZipArchive put:self deliverGZipArchive value. cg@1371: p propertyAt:#deliverLoadAllFile put:self deliverLoadAllFile value. cg@1371: p propertyAt:#deliverSources put:self deliverSources value. cg@1371: p propertyAt:#deliverMakefiles put:self deliverMakefiles value. cg@1371: cg@1371: p propertyAt:#'make.stc.LOCALDEFINES' put:self makeDefines value. cg@1371: p propertyAt:#'make.stc.LOCALINCLUDES' put:self makeIncludes value. cg@1371: p propertyAt:#'make.stc.WARNINGOPTIONS' put:self makeOtherWarningOptions value. cg@1371: p propertyAt:#'make.stc.warnEOLComments' put:self makeWarnEOLComments value. cg@1371: p propertyAt:#'make.stc.warnNonStandard' put:self makeWarnNonStandard value. cg@1234: cg@1234: "/ p propertyAt:#'make.LD_OBJ_LIBS' put:self makeLocalLibs value. cg@1234: "/ p propertyAt:#'make.LOCAL_EXTRA_TARGETS' put:self makeExtraTargets value. cg@1234: cg@1371: p propertyAt:#installDirectoryUnix put:self installDirectoryUnix value. cg@1371: p propertyAt:#installDirectoryWin32 put:self installDirectoryWin32 value. cg@1371: p propertyAt:#installDirectoryVMS put:self installDirectoryVMS value. cg@1371: p propertyAt:#installDirectoryMacOS put:self installDirectoryMacOS value. cg@1371: cg@1371: p prerequisiteClasses:(self listOfRequiredClassesInPrerequisites value cg@1371: collect:[:entry | entry string asSymbol]). cg@1371: cg@1371: p prerequisitePackages:(self listOfRequiredProjectsInPrerequisites value cg@1371: collect:[:entry | entry string asSymbol]). cg@1371: cg@1371: p addDependent:self. cg@1080: ]. cg@1080: cg@1080: "Created: / 23.3.1999 / 14:16:12 / cg" cg@1080: "Modified: / 23.3.1999 / 14:18:38 / cg" cg@1080: ! cg@1080: cg@1248: selectedMethod cg@1248: |node methodInfo classOrClassName cls mthd text| cg@1248: cg@1248: self hasMethodNodeSelected ifFalse:[^ nil]. cg@1248: cg@1248: node := self selectedTreeNode. cg@1248: methodInfo := node contents value. cg@1248: mthd := methodInfo method. cg@1248: mthd isNil ifTrue:[ cg@1371: self valueOfInfoLabel value:'The method is not (yet) loaded.'. cg@1248: ]. cg@1248: ^ mthd cg@1248: ! cg@1248: cg@1251: transcript cg@1251: ^ self builder componentAt:#commandOutputView cg@1251: ! cg@1251: cg@1291: updateFlagValueHolders cg@1291: self hasProjectSelectedHolder value:(self hasProjectSelected). cg@1291: self canLoadCurrentProjectHolder value:(self canLoadCurrentProject). cg@1291: self canUnloadCurrentProjectHolder value:(self canUnloadCurrentProject). cg@1291: cg@1291: ! cg@1291: cg@1206: updateProjectTree cg@1210: |tree moduleRoots root showWhat| cg@1206: cg@1231: self withCursor:Cursor execute do:[ cg@1371: showWhat := self showWhat value. cg@1371: cg@1371: moduleRoots := Dictionary new. cg@1371: cg@1371: tree := SelectionInTree new. cg@1371: tree root:(root := ProjectTreeItem name:'invisibleRoot'). cg@1371: root hide:false. cg@1371: cg@1371: showWhat notNil ifTrue:[ cg@1371: showWhat == #current ifTrue:[ cg@1371: root add:(self nodeFor:Project current). cg@1371: ] ifFalse:[ cg@1371: (Project knownProjects asOrderedCollection cg@1371: sort:[:a :b | a package < b package]) cg@1371: do:[:aProject | cg@1371: |newNode nodeToAdd doShow childNode path| cg@1371: cg@1371: (doShow := showWhat == #all) ifFalse:[ cg@1371: doShow := (aProject package startsWith:'stx:') not cg@1371: ]. cg@1371: cg@1371: doShow ifTrue:[ cg@1371: newNode := self nodeFor:aProject. cg@1371: cg@1371: "/ insert into tree ... cg@1371: nodeToAdd := root. cg@1371: cg@1371: path := aProject package asCollectionOfSubstringsSeparatedByAny:'/\:'. cg@1371: path from:1 to:path size-1 do:[:part | cg@1371: childNode := nodeToAdd children detect:[:child | child name = part] ifNone:nil. cg@1371: childNode isNil ifTrue:[ cg@1371: nodeToAdd add:(childNode := ProjectTreeItem new name:part). cg@1371: ]. cg@1371: nodeToAdd := childNode. cg@1371: ]. cg@1371: newNode name:(path last). cg@1371: nodeToAdd add:newNode. cg@1371: ] cg@1371: ]. cg@1371: ]. cg@1371: ]. cg@1371: projectTree := root. cg@1371: cg@1371: self projectTreeHolder root:projectTree. cg@1206: ]. cg@1206: ^ projectTree cg@1206: ! cg@1206: cg@1025: updateRightCanvas cg@1079: |selectedNode nodeContents spec| cg@1025: cg@1149: self builder bindings removeKey:#listOfAllClassesInPrerequisites ifAbsent:nil. "/ force recompute cg@1149: self builder bindings removeKey:#listOfAllProjectsInPrerequisites ifAbsent:nil. "/ force recompute cg@1149: cg@1091: self selectedProjectInPrerequisites value:nil. cg@1091: self selectedRequiredProjectInPrerequisites value:nil. cg@1091: cg@1099: selectedNode := self selectedTreeNode. cg@1025: selectedNode isNil ifTrue:[ cg@1371: self setupCanvasForNoSelection. cg@1371: ^ self cg@1025: ]. cg@1026: cg@1079: (spec := selectedNode spec) notNil ifTrue:[ cg@1371: self currentCanvasHolder value:spec value. cg@1371: ^ self cg@1079: ]. cg@1079: cg@1026: selectedNode isProjectNode ifTrue:[ cg@1371: self showCommentOf:selectedNode. cg@1371: ^ self. cg@1025: ]. cg@1025: cg@1037: selectedNode contents == #classes ifTrue:[ cg@1371: self showClassListOf:selectedNode. cg@1371: ^ self. cg@1037: ]. cg@1043: selectedNode contents == #patches ifTrue:[ cg@1371: self showPatchesListOf:selectedNode. cg@1371: ^ self. cg@1043: ]. cg@1097: self hasClassNodeSelected ifTrue:[ cg@1371: self showClassDefinitionOf:selectedNode. cg@1371: ^ self. cg@1097: ]. cg@1218: self hasMethodNodeSelected ifTrue:[ cg@1371: self showMethodSourceOf:selectedNode. cg@1371: ^ self. cg@1218: ]. cg@1327: self hasPrerequisitesNodeSelected ifTrue:[ cg@1371: self showPrerequisitesInfo. cg@1371: ^ self. cg@1327: ]. cg@1043: cg@1025: self currentCanvasHolder value:(self class emptyRightCanvasSpec). cg@1025: self rightCanvasTextHolder value:''. cg@1025: cg@1080: "Modified: / 23.3.1999 / 14:16:02 / cg" cg@1327: cg@1025: ! ! cg@1025: cg@1232: !ProjectBrowser methodsFor:'private - building'! cg@1232: cg@1232: checkForMakeProtoFor:aProject cg@1232: |f| cg@1232: cg@1232: "/ check for project directory ... cg@1232: (self checkForProjectDirectoryFor:aProject) ifFalse:[ cg@1371: ^ false cg@1232: ]. cg@1232: cg@1232: "/ check for Make.proto ... cg@1232: f := aProject directory asFilename construct:'Make.proto'. cg@1232: f exists ifFalse:[ cg@1371: (self confirm:'''Make.proto'' does not exist in project directory\\Create ?' withCRs) ifFalse:[ cg@1371: ^ false cg@1371: ]. cg@1371: self buildMakefiles. cg@1232: ]. cg@1232: ^ true cg@1232: ! cg@1232: cg@1232: checkForMakefileFor:aProject cg@1232: |f| cg@1232: cg@1232: "/ check for project directory ... cg@1232: (self checkForProjectDirectoryFor:aProject) ifFalse:[ cg@1371: ^ false cg@1232: ]. cg@1232: cg@1232: "/ check for Makefile ... cg@1232: f := aProject directory asFilename construct:'Makefile'. cg@1232: f exists ifFalse:[ cg@1371: (self confirm:'''Makefile'' does not exist in project directory\\Create ?' withCRs) ifFalse:[ cg@1371: ^ false cg@1371: ]. cg@1371: (self checkForMakeProtoFor:aProject) ifFalse:[ cg@1371: ^ false cg@1371: ]. cg@1371: self buildMakefiles. cg@1232: ]. cg@1232: ^ true cg@1232: ! cg@1232: cg@1232: checkForProjectDirectoryFor:aProject cg@1232: |dir| cg@1232: cg@1232: "/ check for project directory ... cg@1232: dir := aProject directory asFilename. cg@1232: dir exists ifFalse:[ cg@1371: (self confirm:'Project directory does not exist\\Create ?' withCRs) ifFalse:[ cg@1371: ^ false cg@1371: ]. cg@1371: dir recursiveMakeDirectory. cg@1232: ]. cg@1232: ^ true cg@1232: cg@1232: cg@1232: ! ! cg@1232: cg@1327: !ProjectBrowser methodsFor:'private - info'! cg@1327: cg@1327: showPrerequisitesInfo cg@1371: self showReadOnlyText: cg@1327: 'When loading this package, cg@1327: these other packages/classes cg@1327: will be loaded before. cg@1327: Also, the prerequisite packages'' cg@1327: directory pathes will be added cg@1327: to the include path for cg@1327: stc-compilation.'. cg@1327: cg@1371: ^ self. cg@1327: cg@1327: cg@1327: ! ! cg@1327: cg@1037: !ProjectBrowser methodsFor:'private - table col access'! cg@1037: cg@1038: classFilenameFromClassInfo:cInfo cg@1038: ^ cInfo classFileName cg@1038: ! cg@1038: cg@1038: classIncludeConditionFromClassInfo:cInfo cg@1038: ^ cInfo conditionForInclusion cg@1038: ! cg@1038: cg@1235: classIncludeConditionFromClassInfo:cInfo put:aSymbol cg@1238: cInfo conditionForInclusion:aSymbol. cg@1238: ^ cInfo cg@1235: ! cg@1235: cg@1037: classNameFromClassInfo:cInfo cg@1241: |cls nm| cg@1241: cg@1241: nm := cInfo className. cg@1241: cg@1241: cls := cInfo theClass. cg@1241: (cls isNil or:[cls isLoaded not]) ifTrue:[ cg@1371: ^ nm asText allItalic cg@1241: ]. cg@1241: ^ nm cg@1241: cg@1241: "Modified: / 26.9.1999 / 13:49:51 / cg" cg@1043: ! cg@1043: cg@1218: classNameFromMethodInfo:pInfo cg@1218: ^ pInfo className cg@1218: ! cg@1218: cg@1043: classNameFromPatchesInfo:pInfo cg@1043: ^ pInfo methodClass name cg@1043: ! cg@1043: cg@1218: selectorFromMethodInfo:pInfo cg@1218: ^ pInfo methodName cg@1218: ! cg@1218: cg@1043: selectorFromPatchesInfo:pInfo cg@1043: ^ pInfo methodSelector cg@1037: ! ! cg@1037: cg@1025: !ProjectBrowser methodsFor:'user actions'! cg@1025: cg@1232: addClasses cg@1248: "ask for, and add a single class" cg@1232: cg@1232: |p className cls oldPackage| cg@1232: cg@1232: p := self currentProject. cg@1232: cg@1232: className := Dialog request:'Class to add:'. cg@1232: className size == 0 ifTrue:[^ self]. cg@1232: cls := Smalltalk classNamed:className. cg@1232: cls isNil ifTrue:[ cg@1371: "/ a new one cg@1371: (self confirm:'This is a new class. Add ?') ifFalse:[ cg@1371: ^ self cg@1371: ]. cg@1371: p cg@1371: addClass:className cg@1371: classFileName:((Smalltalk fileNameForClass:className) , '.st'). cg@1232: ] ifFalse:[ cg@1371: (oldPackage := cls package) ~= p package ifTrue:[ cg@1371: "/ a new one cg@1371: (self confirm:'Change the classes package from ' , oldPackage , ' to ' , p package , ' ?') ifFalse:[ cg@1371: ^ self cg@1371: ]. cg@1371: cls package:p package. cg@1371: ]. cg@1371: "/ find the other package .. cg@1371: oldPackage := Project projectWithId:oldPackage. cg@1371: oldPackage notNil ifTrue:[ cg@1371: oldPackage removeClass:cls cg@1371: ]. cg@1371: cg@1371: p cg@1371: addClass:cls name cg@1371: classFileName:(cls classFilename cg@1371: ? ((Smalltalk fileNameForClass:cls) , '.st')). cg@1232: ]. cg@1232: cg@1232: self updateClassListForProject:p cg@1232: cg@1232: ! cg@1232: cg@1099: itemDoubleClicked:index cg@1206: |node classOrClassName cls| cg@1099: cg@1099: self hasClassNodeSelected ifTrue:[ cg@1371: node := self selectedTreeNode. cg@1371: classOrClassName := node contents value. cg@1371: classOrClassName isBehavior ifTrue:[ cg@1371: cls := classOrClassName. cg@1371: ] ifFalse:[ cg@1371: cls := Smalltalk at:classOrClassName. cg@1371: ]. cg@1371: cls isNil ifTrue:[ cg@1371: self information:'The class is not (yet) loaded'. cg@1371: ^ self cg@1371: ]. cg@1371: SystemBrowser browseClass:cls. cg@1099: ]. cg@1099: ! cg@1099: cg@1025: itemSelected:index cg@1218: |item action info p| cg@1025: cg@1206: self withWaitCursorDo:[ cg@1371: self updateRightCanvas. cg@1206: ]. cg@1232: index isNil ifTrue:[ cg@1371: modifiedChannel value:false. cg@1371: ^ self cg@1232: ]. cg@1232: cg@1081: self readAspectsFromProject. cg@1081: cg@1025: item := self projectTreeHolder value at:index. cg@1025: action := item action. cg@1025: action notNil ifTrue:[ cg@1371: action value:item. cg@1025: ]. cg@1109: cg@1218: info := item info. cg@1218: info size == 0 ifTrue:[ cg@1371: ((p := self currentProject) notNil cg@1371: and:[p isLoaded ~~ true]) ifTrue:[ cg@1371: info := 'Projects code is not loaded.' cg@1371: ]. cg@1218: ]. cg@1218: self valueOfInfoLabel value:info. cg@1218: cg@1291: self updateFlagValueHolders. cg@1232: modifiedChannel value:false. cg@1116: cg@1116: "Modified: / 26.4.1999 / 22:49:20 / cg" cg@1025: ! cg@1025: cg@1095: loadFromProjectFile:aFilenameString cg@1239: |oldNode newProject| cg@1095: cg@1096: self withReadCursorDo:[ cg@1371: newProject := Project new loadFromProjectFile:aFilenameString. cg@1371: cg@1371: oldNode := self projectTreeHolder cg@1371: detectFirstItem:[:item | item contents class == Project cg@1371: and:[item contents package = newProject package]]. cg@1371: oldNode notNil ifTrue:[ cg@1371: (self confirm:'Overload packages definitions from file ?') ifFalse:[ cg@1371: ^ self cg@1371: ]. cg@1371: self projectTreeHolder remove:oldNode. cg@1371: ]. cg@1371: cg@1371: newProject notNil ifTrue:[ cg@1371: self newProject:newProject cg@1371: ]. cg@1371: self expandPathToNodeFor:newProject. cg@1239: cg@1224: ]. cg@1224: ^ newProject cg@1095: ! cg@1095: cg@1291: loadProject cg@1291: |project| cg@1291: cg@1291: project := self currentProject. cg@1291: self halt. cg@1291: Smalltalk loadPackage:(project name) cg@1291: ! cg@1291: cg@1218: loadProjectCode cg@1219: |project filesToLoad methodsFile ns anyPatchClassMissing anyPatches cg@1219: nMissingSuper prevNMissingSuper| cg@1218: cg@1218: project := self currentProject. cg@1218: ns := project defaultNameSpace. cg@1218: ns isSymbol ifTrue:[ cg@1371: ns := NameSpace name:ns cg@1218: ]. cg@1218: self withReadCursorDo:[ cg@1371: filesToLoad := OrderedCollection new. cg@1371: cg@1371: "/ load all classes ... cg@1371: project classInfo do:[:aClassInfo | cg@1371: |className fileToLoad cls| cg@1371: cg@1371: className := aClassInfo className. cg@1371: fileToLoad := aClassInfo classFileName. cg@1371: cls := ns at:className asSymbol. cg@1371: cls notNil ifTrue:[ cg@1371: cls isBehavior ifFalse:[ cg@1371: (self confirm:('Attention: a global named ' , className , ' exists, but is not a class.\\Load anyway ?') withCRs) cg@1371: ifFalse:[ cg@1371: fileToLoad := nil cg@1371: ] cg@1371: ] ifTrue:[ cg@1371: cls isLoaded ifTrue:[ cg@1371: fileToLoad := nil cg@1371: ] cg@1371: ] cg@1371: ]. cg@1371: fileToLoad notNil ifTrue:[ cg@1371: filesToLoad add:fileToLoad cg@1371: ]. cg@1371: ]. cg@1371: cg@1371: anyPatchClassMissing := false. cg@1371: anyPatches := false. cg@1371: project methodInfo do:[:aMethodInfo | cg@1371: |className methodName mthd cls| cg@1371: cg@1371: className := aMethodInfo className. cg@1371: methodName := aMethodInfo methodName. cg@1371: cls := Smalltalk at:className asSymbol. cg@1371: (cls isNil or:[cls isBehavior not or:[cls isLoaded not]]) ifTrue:[ cg@1371: self warn:('Missing class: ' , className , ' (required for patches)'). cg@1371: anyPatchClassMissing := anyPatches := true. cg@1371: ] ifFalse:[ cg@1371: "/ already present ? cg@1371: (cls compiledMethodAt:methodName asSymbol) isNil ifTrue:[ cg@1371: anyPatches := true. cg@1371: ] cg@1371: ] cg@1371: ]. cg@1371: cg@1371: (methodsFile := project propertyAt:#methodsFile) notNil ifTrue:[ cg@1371: anyPatches ifTrue:[ cg@1371: anyPatchClassMissing ifTrue:[ cg@1371: self warn:('Cannot load patches & extensions, due to missing class(es)') cg@1371: ] ifFalse:[ cg@1371: filesToLoad add:methodsFile cg@1371: ] cg@1371: ] cg@1371: ] ifFalse:[ cg@1371: anyPatches ifTrue:[ cg@1371: self warn:('No file for methods (patches & extensions) is defined in project') cg@1371: ]. cg@1371: ]. cg@1371: cg@1371: filesToLoad size == 0 ifTrue:[ cg@1371: self information:'Projects code is already loaded.' cg@1371: ] ifFalse:[ cg@1371: "/ load as long as superclasses are missing cg@1371: "/ (since the load order could be incorrect) cg@1371: prevNMissingSuper := nil. cg@1371: nMissingSuper := 1. cg@1371: [nMissingSuper > 0 and:[nMissingSuper ~~ prevNMissingSuper]] cg@1371: whileTrue:[ cg@1371: nMissingSuper := 0. cg@1371: Parser::UndefinedSuperclassError handle:[:ex | cg@1371: nMissingSuper := nMissingSuper + 1. cg@1371: ex proceed cg@1371: ] do:[ cg@1371: Class packageQuerySignal answer:project package asSymbol cg@1371: do:[ cg@1371: filesToLoad do:[:fileToLoad | cg@1371: Smalltalk fileIn:(project directory asFilename construct:fileToLoad) pathName cg@1371: ] cg@1371: ] cg@1371: ]. cg@1371: prevNMissingSuper := nMissingSuper. cg@1371: ]. cg@1371: ]. cg@1371: project isLoaded:true. cg@1371: self readAspectsFromProject cg@1218: ] cg@1218: ! cg@1218: cg@1206: methodPatchDoubleClick:arg cg@1206: self halt. cg@1206: ! cg@1206: cg@1231: projectFilterChanged cg@1231: |theNode| cg@1231: cg@1231: self updateProjectTree. cg@1231: self updateRightCanvas. cg@1231: self showWhat value == #current ifTrue:[ cg@1371: theNode := self projectTreeHolder cg@1371: detectFirstItem:[:item | item contents == Project current]. cg@1371: cg@1371: [theNode notNil] whileTrue:[ cg@1371: self projectTreeHolder expand:theNode. cg@1371: theNode := theNode parent. cg@1371: ]. cg@1231: cg@1231: ]. cg@1231: ! cg@1231: cg@1107: selectionChangeAllowed:newNode cg@1081: |answer| cg@1081: cg@1107: newNode == self selectedTreeNode ifTrue:[ cg@1371: ^ true cg@1107: ]. cg@1231: (modifiedChannel value cg@1232: and:[true "self reallyModified"]) ifTrue:[ cg@1371: answer := Dialog confirmWithCancel:'Accept changes ?'. cg@1371: answer isNil ifTrue:[ cg@1371: ^ false cg@1371: ]. cg@1371: answer == true ifTrue:[ cg@1371: self accept. cg@1371: ]. cg@1081: ]. cg@1081: ^ true cg@1081: cg@1081: ! cg@1081: cg@1097: showClassDefinitionOf:anItem cg@1206: |node classOrClassName cls text| cg@1097: cg@1097: self hasClassNodeSelected ifFalse:[^ self]. cg@1097: cg@1097: self currentCanvasHolder value:(self class rightCanvasSpecForEditableText). cg@1097: cg@1099: node := self selectedTreeNode. cg@1206: classOrClassName := node contents value. cg@1206: classOrClassName isBehavior ifTrue:[ cg@1371: cls := classOrClassName. cg@1206: ] ifFalse:[ cg@1371: cls := Smalltalk at:classOrClassName. cg@1206: ]. cg@1097: cls isNil ifTrue:[ cg@1371: text := 'The class is not (yet) loaded'. cg@1097: ] ifFalse:[ cg@1371: text := cls definition cg@1097: ]. cg@1097: self rightCanvasTextHolder value:text. cg@1097: cg@1097: ! cg@1097: cg@1037: showClassListOf:anItem cg@1107: |projectItem project| cg@1037: cg@1037: projectItem := anItem parent. cg@1037: project := projectItem contents. cg@1037: cg@1107: self updateClassListForProject:project. cg@1037: cg@1037: self currentCanvasHolder value:(self class rightCanvasSpecForClassList). cg@1037: ! cg@1037: cg@1026: showCommentOf:anItem cg@1026: |projectItem project| cg@1025: cg@1026: anItem contents == #comment ifTrue:[ cg@1371: projectItem := anItem parent cg@1026: ] ifFalse:[ cg@1371: projectItem := anItem cg@1026: ]. cg@1026: project := projectItem contents. cg@1026: cg@1232: self textCanvasLabelHolder value:'Projects comment'. cg@1026: self currentCanvasHolder value:(self class rightCanvasSpecForEditableText). cg@1025: self rightCanvasTextHolder value:project comment. cg@1025: cg@1025: ! cg@1025: cg@1037: showDocumentationFor:anItem cg@1037: |projectItem project| cg@1037: cg@1037: anItem contents == #documentation ifTrue:[ cg@1371: projectItem := anItem parent cg@1037: ] ifFalse:[ cg@1371: projectItem := anItem cg@1037: ]. cg@1037: project := projectItem contents. cg@1037: cg@1037: self currentCanvasHolder value:(self class rightCanvasSpecForHTMLText). cg@1037: self htmlDocumentURLHolder value:project documentationURL. cg@1037: ! cg@1037: cg@1218: showMethodSourceOf:anItem cg@1218: |node methodInfo classOrClassName cls mthd text| cg@1218: cg@1218: self hasMethodNodeSelected ifFalse:[^ self]. cg@1218: cg@1218: self currentCanvasHolder value:(self class rightCanvasSpecForEditableText). cg@1218: cg@1218: node := self selectedTreeNode. cg@1218: methodInfo := node contents value. cg@1218: cls := Smalltalk at:methodInfo className asSymbol. cg@1218: cls isNil ifTrue:[ cg@1371: text := 'The class is not (yet) loaded'. cg@1218: ] ifFalse:[ cg@1371: mthd := cls compiledMethodAt:(methodInfo methodName asSymbol). cg@1371: mthd isNil ifTrue:[ cg@1371: text := 'The method is not (yet) loaded'. cg@1371: ] ifFalse:[ cg@1371: text := mthd source cg@1371: ] cg@1218: ]. cg@1218: self rightCanvasTextHolder value:text. cg@1218: cg@1218: ! cg@1218: cg@1043: showPatchesListOf:anItem cg@1043: |projectItem project patches l| cg@1043: cg@1043: projectItem := anItem parent. cg@1043: project := projectItem contents. cg@1043: cg@1218: self updatePatchesListForProject:project. cg@1218: cg@1218: "/ patches := project methods. cg@1218: "/ patches := patches collect:[:m | m who]. cg@1218: "/ patches := patches sort:[:w1 :w2 | cg@1218: "/ |w1Nm w2Nm| cg@1218: "/ cg@1218: "/ w1Nm := w1 methodClass name. cg@1218: "/ w2Nm := w2 methodClass name. cg@1218: "/ w1Nm < w2Nm ifTrue:[ cg@1218: "/ true cg@1218: "/ ] ifFalse:[ cg@1218: "/ w1Nm = w2Nm ifFalse:[ cg@1218: "/ false cg@1218: "/ ] ifTrue:[ cg@1218: "/ w1 methodSelector < w2 methodSelector cg@1218: "/ ] cg@1218: "/ ] cg@1218: "/ ]. cg@1218: "/ cg@1218: "/ l := self patchesList. cg@1218: "/ l removeAll. cg@1218: "/ l addAll:patches. cg@1043: cg@1043: self currentCanvasHolder value:(self class rightCanvasSpecForPatchesList). cg@1043: ! cg@1043: cg@1026: showReadOnlyText:someText cg@1026: self currentCanvasHolder value:(self class rightCanvasSpecForReadOnlyText). cg@1026: self rightCanvasTextHolder value:someText. cg@1026: cg@1107: ! cg@1107: cg@1291: unloadProject cg@1291: |project filesToLoad methodsFile ns anyPatchClassMissing anyPatches cg@1291: nMissingSuper prevNMissingSuper| cg@1291: cg@1291: project := self currentProject. cg@1291: self halt. cg@1291: ! cg@1291: cg@1107: updateClassListForProject:aProject cg@1107: |classInfo l| cg@1107: cg@1107: classInfo := aProject classInfo copy asOrderedCollection. cg@1107: classInfo sort:[:a :b | a className < b className]. cg@1107: cg@1107: l := self classList. cg@1107: l removeAll. cg@1107: l addAll:classInfo. cg@1107: cg@1109: cg@1109: ! cg@1109: cg@1206: updateListOfProjects cg@1206: "scan all classes/methods for new projects" cg@1206: cg@1206: self withWaitCursorDo:[ cg@1371: Project initKnownProjects. cg@1371: self updateProjectTree cg@1206: ]. cg@1206: ! cg@1206: cg@1109: updateListOfRequiredPrerequisiteClasses cg@1109: "all autoloaded superclasses of my classes are definitely required" cg@1109: cg@1206: |p anyChange allInPre requiredInPre nTotal nMissing msg| cg@1109: cg@1109: p := self currentProject. cg@1109: p isNil ifTrue:[^ self]. cg@1109: anyChange := false. cg@1206: nTotal := 0. cg@1109: nMissing := 0. cg@1109: allInPre := self listOfAllClassesInPrerequisites value. cg@1109: requiredInPre := self listOfRequiredClassesInPrerequisites value. cg@1109: cg@1109: self currentProjectsClassNames do:[:aClassName | cg@1371: |cls| cg@1371: cg@1371: cls := Smalltalk at:aClassName asSymbol. cg@1371: (cls notNil and:[cls isLoaded]) ifTrue:[ cg@1371: cls allSuperclasses do:[:superClass | cg@1371: |sName idx| cg@1371: cg@1371: (superClass notNil cg@1371: and:[superClass isLoaded cg@1371: and:[superClass wasAutoloaded]]) ifTrue:[ cg@1371: |sName entry| cg@1371: cg@1371: sName := superClass name. cg@1371: idx := allInPre findFirst:[:item | item string = sName]. cg@1371: idx ~~ 0 ifTrue:[ cg@1371: allInPre removeIndex:idx. cg@1371: requiredInPre add:sName asText allBold. cg@1371: anyChange := true. cg@1371: ] cg@1371: ] cg@1371: ] cg@1371: ] ifFalse:[ cg@1371: nMissing := nMissing + 1. cg@1371: ]. cg@1371: nTotal := nTotal + 1. cg@1109: ]. cg@1109: cg@1109: anyChange ifTrue:[ cg@1371: self listOfRequiredClassesInPrerequisites changed. cg@1371: self listOfAllClassesInPrerequisites changed. cg@1109: ]. cg@1109: nMissing ~~ 0 ifTrue:[ cg@1371: nMissing == nTotal ifTrue:[ cg@1371: msg := 'Project is not loaded (' , nMissing printString cg@1371: , ' unloaded classes)'. cg@1371: ] ifFalse:[ cg@1371: msg := 'Project is not loaded completely - ' , nMissing printString cg@1371: , ' of the projects ' , nTotal printString , ' classes are not loaded'. cg@1371: ]. cg@1207: "/ self notify:msg. cg@1109: ]. cg@1206: modifiedChannel value:false. cg@1218: ! cg@1218: cg@1218: updatePatchesListForProject:aProject cg@1218: |methodInfo l| cg@1218: cg@1218: methodInfo := aProject methodInfo copy asOrderedCollection. cg@1218: methodInfo sort:[:a :b | a displayString < b displayString]. cg@1218: cg@1218: l := self patchesList. cg@1218: l removeAll. cg@1218: l addAll:methodInfo. cg@1218: cg@1218: cg@1109: ! ! cg@1109: cg@1109: !ProjectBrowser methodsFor:'user actions - canvas'! cg@1109: cg@1109: accept cg@1109: "save values from aspects into the project" cg@1109: cg@1109: self saveAspectsIntoProject. cg@1109: modifiedChannel value:false. cg@1109: cg@1109: ! cg@1109: cg@1109: addClassToPrerequisites cg@1109: |sel cls| cg@1109: cg@1109: sel := self selectedClassInPrerequisites value. cg@1109: self listOfRequiredClassesInPrerequisites value add:sel. cg@1109: self listOfAllClassesInPrerequisites value remove:sel. cg@1109: self selectedClassInPrerequisites value:nil. cg@1109: cg@1109: "/ also add any autoloaded superclass(es) cg@1109: cg@1109: cls := Smalltalk at:sel asSymbol. cg@1109: (cls notNil and:[cls isLoaded]) ifTrue:[ cg@1371: cls allSuperclasses do:[:superClass | cg@1371: |sName| cg@1371: cg@1371: (superClass notNil cg@1371: and:[superClass isLoaded cg@1371: and:[superClass wasAutoloaded]]) ifTrue:[ cg@1371: |sName idx| cg@1371: sName := superClass name. cg@1371: idx := self listOfAllClassesInPrerequisites value findFirst:[:s | s string = sName]. cg@1371: idx ~~ 0 ifTrue:[ cg@1371: self listOfAllClassesInPrerequisites value removeIndex:idx. cg@1371: self listOfRequiredClassesInPrerequisites value add:sName asString allBold. cg@1371: ]. cg@1371: ] cg@1371: ] cg@1109: ]. cg@1109: self listOfRequiredClassesInPrerequisites changed. cg@1109: self listOfAllClassesInPrerequisites changed. cg@1109: self accept cg@1109: ! cg@1109: cg@1109: addProjectToPrerequisites cg@1109: |sel| cg@1109: cg@1109: sel := self selectedProjectInPrerequisites value. cg@1109: self listOfRequiredProjectsInPrerequisites value add:sel. cg@1109: self listOfAllProjectsInPrerequisites value remove:sel. cg@1109: self selectedProjectInPrerequisites value:nil. cg@1109: cg@1109: self listOfRequiredProjectsInPrerequisites changed. cg@1109: self listOfAllProjectsInPrerequisites changed. cg@1109: self accept cg@1109: cg@1109: ! cg@1109: cg@1206: browseMethod cg@1218: "browse the selected method (from tree)" cg@1218: cg@1218: |patchWho mthdInfo cls mthd| cg@1218: cg@1218: mthdInfo := self selectedTreeNode value value. cg@1218: cls := Smalltalk at: mthdInfo className asSymbol. cg@1218: cls notNil ifTrue:[ cg@1371: mthd := cls compiledMethodAt:(mthdInfo methodName asSymbol). cg@1371: mthd notNil ifTrue:[ cg@1371: SystemBrowser browseClass:cls selector:mthdInfo methodName. cg@1371: ^ self cg@1371: ] cg@1218: ]. cg@1218: self information:'Method not (yet) loaded.' cg@1218: ! cg@1218: cg@1218: browseMethodFromCanvas cg@1206: "browse the selected table-rows method (from patches canvas)" cg@1206: cg@1206: |patchWho patchIndex| cg@1206: cg@1218: patchIndex := self selectedPatchInRightCanvas value. cg@1206: patchWho := self patchesList at:patchIndex. cg@1206: SystemBrowser browseClass:patchWho methodClass selector:patchWho methodSelector. cg@1206: cg@1206: ! cg@1206: cg@1206: browseMethodFull cg@1218: "browse the selected method (from tree)" cg@1218: cg@1218: |patchWho mthdInfo cls mthd| cg@1218: cg@1218: mthdInfo := self selectedTreeNode value value. cg@1218: cls := Smalltalk at: mthdInfo className asSymbol. cg@1218: cls notNil ifTrue:[ cg@1371: mthd := cls compiledMethodAt:(mthdInfo methodName asSymbol). cg@1371: mthd notNil ifTrue:[ cg@1371: SystemBrowser openInClass:cls selector:mthdInfo methodName. cg@1371: ^ self cg@1371: ] cg@1218: ]. cg@1218: self information:'Method not (yet) loaded.' cg@1218: cg@1218: ! cg@1218: cg@1218: browseMethodFullFromCanvas cg@1206: "browse the selected table-rows method (from patches canvas)" cg@1206: cg@1206: |patchWho patchIndex| cg@1206: cg@1218: patchIndex := self selectedPatchInRightCanvas value. cg@1206: patchWho := self patchesList at:patchIndex. cg@1206: SystemBrowser openInClass:patchWho methodClass selector:patchWho methodSelector. cg@1206: cg@1206: ! cg@1206: cg@1109: cancel cg@1109: "reload aspects from the project" cg@1109: cg@1109: self readAspectsFromProject cg@1109: ! cg@1109: cg@1109: removeClassFromPrerequisites cg@1109: |sel cls myClasses| cg@1109: cg@1109: sel := self selectedRequiredClassInPrerequisites value. cg@1109: cls := Smalltalk at:sel asSymbol. cg@1109: cg@1109: "/ check if this affects my classes cg@1109: (cls notNil and:[cls isLoaded and:[cls wasAutoloaded]]) ifTrue:[ cg@1371: myClasses := self currentProjectsClassNames. cg@1371: cls allSubclassesDo:[:cls | cg@1371: (myClasses includes:cls name) ifTrue:[ cg@1371: self valueOfInfoLabel value:'Attention - this class is required by ' , cls name. cg@1371: (self confirm:'Attention - this class is required by ' , cls name asText allBold, '.\(The project could later fail to load correctly)\\Really remove ?' withCRs) ifFalse:[ cg@1371: ^ self cg@1371: ]. cg@1371: ]. cg@1371: ] cg@1109: ]. cg@1109: cg@1109: self listOfAllClassesInPrerequisites value add:sel. cg@1109: self listOfRequiredClassesInPrerequisites value remove:sel. cg@1109: self selectedRequiredClassInPrerequisites value:nil. cg@1109: cg@1109: "/ also remove any autoloaded subclass(es) cg@1109: cg@1109: (cls notNil and:[cls isLoaded and:[cls wasAutoloaded]]) ifTrue:[ cg@1371: cls allSubclassesDo:[:cls | cg@1371: |entry| cg@1371: cg@1371: entry := self listOfRequiredClassesInPrerequisites value remove:cls name ifAbsent:nil. cg@1371: entry notNil ifTrue:[ cg@1371: self listOfAllClassesInPrerequisites value add:cls name. cg@1371: ] cg@1371: ] cg@1109: ]. cg@1109: cg@1109: self listOfRequiredClassesInPrerequisites changed. cg@1109: self listOfAllClassesInPrerequisites changed. cg@1109: self accept cg@1109: cg@1109: ! cg@1109: cg@1109: removeProjectFromPrerequisites cg@1109: |sel| cg@1109: cg@1109: sel := self selectedRequiredProjectInPrerequisites value. cg@1109: self listOfAllProjectsInPrerequisites value add:sel. cg@1109: self listOfRequiredProjectsInPrerequisites value remove:sel. cg@1109: self selectedRequiredProjectInPrerequisites value:nil. cg@1109: cg@1109: self listOfRequiredProjectsInPrerequisites changed. cg@1109: self listOfAllProjectsInPrerequisites changed. cg@1109: self accept cg@1109: cg@1109: ! cg@1109: cg@1109: showInfoForRequiredClass:entry cg@1109: "show why a class is required" cg@1109: cg@1109: |cls myClasses| cg@1109: cg@1109: entry notNil ifTrue:[ cg@1371: myClasses := self currentProjectsClassNames asSet. cg@1371: cg@1371: cls := Smalltalk at:entry string asSymbol. cg@1371: cls allSubclasses do:[:subClass | cg@1371: (myClasses includes:subClass name) ifTrue:[ cg@1371: self valueOfInfoLabel value:('Required by ' , subClass name). cg@1371: ^ self. cg@1371: ] cg@1371: ]. cg@1109: ]. cg@1109: self valueOfInfoLabel value:nil cg@1025: ! ! cg@1025: cg@1248: !ProjectBrowser methodsFor:'user actions - menu'! cg@1248: cg@1248: addClass cg@1248: "ask for, and add a single class" cg@1248: cg@1248: |p className cls| cg@1248: cg@1248: p := self currentProject. cg@1248: cg@1248: className := Dialog request:'Class to add:'. cg@1248: className size == 0 ifTrue:[^ self]. cg@1248: cls := Smalltalk classNamed:className. cg@1248: cls isNil ifTrue:[ cg@1371: "/ a new one cg@1371: (self confirm:'This is a new class. Add ?') ifFalse:[ cg@1371: ^ self cg@1371: ]. cg@1371: p cg@1371: addClass:className cg@1371: classFileName:((Smalltalk fileNameForClass:className) , '.st'). cg@1248: ] ifFalse:[ cg@1371: cls package ~= p package ifTrue:[ cg@1371: "/ a new one cg@1371: (self confirm:'Change the classes package from ' , cls package , ' to ' , p package , ' ?') ifFalse:[ cg@1371: ^ self cg@1371: ]. cg@1371: cls package:p package. cg@1371: ]. cg@1371: p cg@1371: addClass:cls name cg@1371: classFileName:(cls classFilename cg@1371: ? ((Smalltalk fileNameForClass:cls) , '.st')). cg@1248: ]. cg@1248: cg@1248: self updateClassListForProject:p cg@1248: cg@1248: ! cg@1248: cg@1248: addClassesFromFilesInDirectory cg@1248: "add all classes found from files in the project directory" cg@1248: cg@1248: self addClassesFromFilesInDirectoryWithFilter:nil cg@1248: ! cg@1248: cg@1248: addClassesFromFilesInDirectoryIfPresentInImage cg@1248: "add all classes found from files in the project directory, cg@1248: but only if class is currently present in the image." cg@1248: cg@1248: self addClassesFromFilesInDirectoryWithFilter:[:classOrName | classOrName isBehavior] cg@1248: cg@1248: ! cg@1248: cg@1248: addClassesFromFilesInDirectoryWithFilter:aFilterBlockOrNil cg@1248: "helper to add all classes found from files in the project directory" cg@1248: cg@1248: |project existingClasses prjDirectory anyChange numSTFilesFound| cg@1248: cg@1248: project := self currentProject. cg@1248: cg@1248: existingClasses := project classInfo. cg@1248: anyChange := false. cg@1248: numSTFilesFound := 0. cg@1248: cg@1248: prjDirectory := project directory asFilename. cg@1248: (prjDirectory exists and:[prjDirectory isDirectory]) ifFalse:[ cg@1371: self warn:'Invalid project directory: ' , prjDirectory pathName. cg@1371: ^ self cg@1248: ]. cg@1248: cg@1248: prjDirectory directoryContents do:[:fn | cg@1371: |f oldInfo cls| cg@1371: cg@1371: f := prjDirectory construct:fn. cg@1371: (f hasSuffix:'st') ifTrue:[ cg@1371: numSTFilesFound := numSTFilesFound + 1. cg@1371: cg@1371: oldInfo := existingClasses cg@1371: detect:[:clsInfo | cg@1371: clsInfo classFileName = fn cg@1371: ] cg@1371: ifNone:nil. cg@1371: oldInfo isNil ifTrue:[ cg@1371: "/ extract className from fileName ... cg@1371: cls := Smalltalk filenameAbbreviations keyAtValue:(f withoutSuffix baseName ). cg@1371: cls isNil ifTrue:[ cg@1371: cls := f withoutSuffix baseName asSymbol. cg@1371: project defaultNameSpace notNil ifTrue:[ cg@1371: cls := (project defaultNameSpace name , '::' , cls) asSymbol cg@1371: ] cg@1371: ]. cg@1371: (aFilterBlockOrNil isNil cg@1371: or:[aFilterBlockOrNil value:cls]) ifTrue:[ cg@1371: project addClass:cls classFileName:fn. cg@1371: anyChange := true. cg@1248: Transcript showCR:'added ' , fn , ' as class: ' , cls printString. cg@1371: ] ifFalse:[ cg@1248: Transcript showCR:'skipped ' , fn , ' as class: ' , cls printString. cg@1371: ] cg@1371: cg@1371: ] cg@1371: ] cg@1248: ]. cg@1248: cg@1248: anyChange ifTrue:[ cg@1371: self updateClassListForProject:project cg@1248: ] ifFalse:[ cg@1371: numSTFilesFound == 0 ifTrue:[ cg@1371: self information:'No st-sourcefiles found in ' , prjDirectory pathName. cg@1371: ] cg@1248: ] cg@1248: ! cg@1248: cg@1248: addClassesFromImage cg@1248: "add classes with this packageId found in the image" cg@1248: cg@1248: |project| cg@1248: cg@1248: project := self currentProject. cg@1248: Smalltalk allClassesDo:[:aClass | cg@1371: aClass isMeta ifFalse:[ cg@1371: (aClass isNameSpace not or:[aClass == Smalltalk]) ifTrue:[ cg@1371: aClass package = project package ifTrue:[ cg@1371: (project classInfoFor:aClass) isNil ifTrue:[ cg@1371: project cg@1371: addClass:aClass name cg@1371: classFileName:(aClass classFilename cg@1371: ? ((Smalltalk fileNameForClass:aClass) , '.st')). cg@1371: ] cg@1371: ] cg@1371: ] cg@1371: ] cg@1248: ]. cg@1248: cg@1248: self updateClassListForProject:project cg@1248: cg@1248: ! cg@1248: cg@1291: addPrerequisitePackage cg@1291: "ask for, and add a single class" cg@1291: cg@1291: |p packageName cls| cg@1291: cg@1291: p := self currentProject. cg@1291: cg@1291: packageName := Dialog request:'Package to add:'. cg@1291: packageName size == 0 ifTrue:[^ self]. cg@1291: cg@1291: p addPrerequisitePackage:packageName. cg@1292: "/ self updatePrerequisitePackageListForProject:p. cg@1291: cg@1291: self listOfRequiredProjectsInPrerequisites value add:packageName. cg@1291: self listOfAllProjectsInPrerequisites value remove:packageName ifAbsent:nil. cg@1291: self selectedProjectInPrerequisites value:nil. cg@1291: cg@1291: self listOfRequiredProjectsInPrerequisites changed. cg@1291: self listOfAllProjectsInPrerequisites changed. cg@1291: self accept cg@1291: cg@1291: ! cg@1291: cg@1248: browseClasses cg@1248: "browse the projects classes" cg@1248: cg@1248: |ns p classes nBad uniqueClasses| cg@1248: cg@1248: p := self currentProject. cg@1248: classes := p classes cg@1371: collect:[:clsOrName | cg@1371: |cls realName| cg@1371: cg@1371: clsOrName isSymbol ifTrue:[ cg@1371: realName := clsOrName. cg@1371: (realName includes:$:) ifTrue:[ cg@1371: (realName startsWith:'Smalltalk::') ifTrue:[ cg@1371: realName := (realName copyFrom:'Smalltalk::' size + 1) asSymbol cg@1371: ] cg@1371: ]. cg@1371: cls := Smalltalk at:realName cg@1371: ] ifFalse:[ cg@1371: cls := clsOrName cg@1371: ]. cg@1371: cls cg@1371: ]. cg@1248: cg@1248: "/ remove duplicates - but want to preserve order cg@1248: "/ thats why we do not use asIdentitySet asOrderedCollection cg@1248: uniqueClasses := OrderedCollection new. cg@1248: classes do:[:cls | (uniqueClasses includesIdentical:cls) ifFalse:[uniqueClasses add:cls]]. cg@1248: cg@1248: nBad := classes inject:0 into:[:sum :el | el isNil ifTrue:[sum+1] ifFalse:[sum]]. cg@1248: nBad ~~ 0 ifTrue:[ cg@1371: classes := classes select:[:cls | cls notNil]. cg@1371: self warn:('Oops - %1 classes could not be found.\\You should probably load them first.' bindWith:nBad) withCRs. cg@1248: ]. cg@1248: cg@1248: cg@1248: SystemBrowser cg@1371: browseClasses:classes title:('Classes in ' , p name) sort:true. cg@1248: cg@1248: cg@1248: cg@1248: ! cg@1248: cg@1370: buildAbbrevFile cg@1370: "generate an abbrev.stc file in the projects directory" cg@1370: cg@1370: |p | cg@1370: cg@1370: p := self currentProject. cg@1370: p isNil ifTrue:[ cg@1371: self information:'No project selected'. cg@1371: ^ self cg@1370: ]. cg@1370: cg@1370: self withCursor:Cursor wait do:[ cg@1371: self makeTranscriptVisible. cg@1371: TextCollector transcriptQuerySignal answer:self transcript cg@1371: do:[ cg@1371: p createAbbrevFile. cg@1371: ] cg@1370: ] cg@1370: ! cg@1370: cg@1248: buildAll cg@1248: "build all as specified in the deployment section" cg@1248: cg@1248: |p| cg@1248: cg@1248: p := self currentProject. cg@1248: p isNil ifTrue:[ cg@1371: self information:'No project selected'. cg@1371: ^ self cg@1248: ]. cg@1248: cg@1251: self makeTranscriptVisible. cg@1251: cg@1248: self withCursor:Cursor wait do:[ cg@1371: "/ prepare the building ... cg@1371: cg@1371: TextCollector transcriptQuerySignal answer:self transcript cg@1371: do:[ cg@1371: (p propertyAt:#deliverLoadAllFile) == true ifTrue:[ cg@1371: p createLoadAllFile cg@1371: ]. cg@1371: cg@1371: (p propertyAt:#deliverSources) == true ifTrue:[ cg@1371: p createSourceFiles cg@1371: ]. cg@1371: cg@1371: (p propertyAt:#deliverMakefiles) == true ifTrue:[ cg@1371: self buildMakefiles cg@1371: ]. cg@1371: cg@1371: (p propertyAt:#deliverCompiledBinary) == true ifTrue:[ cg@1371: self buildCompiledClassLibrary cg@1371: ]. cg@1371: cg@1371: (p propertyAt:#deliverByteCode) == true ifTrue:[ cg@1371: self buildByteCodeClassLibrary cg@1371: ]. cg@1371: cg@1371: "/ now, deploy ... cg@1371: cg@1371: (p propertyAt:#deliverZipArchive) == true ifTrue:[ cg@1371: p buildZipArchive cg@1371: ]. cg@1371: cg@1371: (p propertyAt:#deliverTarArchive) == true ifTrue:[ cg@1371: p buildTarArchive cg@1371: ]. cg@1371: cg@1371: (p propertyAt:#deliverGZipArchive) == true ifTrue:[ cg@1371: p buildGZipArchive cg@1371: ]. cg@1371: ]. cg@1248: ]. cg@1248: cg@1248: cg@1248: ! cg@1248: cg@1248: buildCompiledClassLibrary cg@1248: "compile a binary class library in the projects directory" cg@1248: cg@1251: |p diagnostic error textBox| cg@1248: cg@1248: p := self currentProject. cg@1248: p isNil ifTrue:[ cg@1371: self information:'No project selected'. cg@1371: ^ self cg@1248: ]. cg@1248: cg@1248: "/ check for directory ... cg@1248: (self checkForProjectDirectoryFor:p) ifFalse:[ cg@1371: ^ self cg@1248: ]. cg@1248: cg@1248: "/ check for Make.proto ... cg@1248: (self checkForMakeProtoFor:p) ifFalse:[ cg@1371: ^ self cg@1248: ]. cg@1248: cg@1248: "/ check for Makefile ... cg@1248: (self checkForMakefileFor:p) ifFalse:[ cg@1371: ^ self cg@1248: ]. cg@1248: cg@1251: self makeTranscriptVisible. cg@1251: cg@1248: "/ now, execute the makefile found there ... cg@1251: diagnostic := self transcript. cg@1251: cg@1248: error := false. cg@1251: diagnostic nextPutLine:('Building compiled class library...' asText emphasizeAllWith:#color->Color blue). cg@1251: cg@1251: self withCursor:Cursor wait do:[ cg@1371: OperatingSystem cg@1371: executeCommand:'make' cg@1371: inputFrom:nil cg@1371: outputTo:diagnostic cg@1371: errorTo:diagnostic cg@1371: inDirectory:(p directory asFilename pathName) cg@1371: onError:[:status | error := true]. cg@1248: ]. cg@1248: cg@1248: cg@1251: cg@1248: ! cg@1248: cg@1248: buildLoadAllFile cg@1248: "generate a loadAll file in the projects directory" cg@1248: cg@1248: |p | cg@1248: cg@1248: p := self currentProject. cg@1248: p isNil ifTrue:[ cg@1371: self information:'No project selected'. cg@1371: ^ self cg@1248: ]. cg@1248: cg@1248: self withCursor:Cursor wait do:[ cg@1371: self makeTranscriptVisible. cg@1371: TextCollector transcriptQuerySignal answer:self transcript cg@1371: do:[ cg@1371: p createLoadAllFile. cg@1371: ] cg@1248: ] cg@1248: ! cg@1248: cg@1278: buildMakefile cg@1278: "generate a Makefile/nt.mak/vms.mak in the projects directory" cg@1278: cg@1278: |p | cg@1278: cg@1278: p := self currentProject. cg@1278: p isNil ifTrue:[ cg@1371: self information:'No project selected'. cg@1371: ^ self cg@1278: ]. cg@1278: cg@1278: self withCursor:Cursor wait do:[ cg@1371: self makeTranscriptVisible. cg@1371: TextCollector transcriptQuerySignal answer:self transcript cg@1371: do:[ cg@1371: p createMakefile cg@1371: ] cg@1278: ]. cg@1278: cg@1278: "Created: / 16.12.1999 / 01:29:30 / cg" cg@1278: ! cg@1278: cg@1248: buildMakefiles cg@1248: "generate a Make.proto and Makefile in the projects directory" cg@1248: cg@1248: |p | cg@1248: cg@1248: p := self currentProject. cg@1248: p isNil ifTrue:[ cg@1371: self information:'No project selected'. cg@1371: ^ self cg@1248: ]. cg@1248: cg@1248: self withCursor:Cursor wait do:[ cg@1371: self makeTranscriptVisible. cg@1371: TextCollector transcriptQuerySignal answer:self transcript cg@1371: do:[ cg@1371: p createProtoMakefile. cg@1371: p createMakefile cg@1371: ] cg@1248: ]. cg@1248: ! cg@1248: cg@1298: buildNTMakefile cg@1298: "generate an nt.mak in the projects directory" cg@1298: cg@1298: |p | cg@1298: cg@1298: p := self currentProject. cg@1298: p isNil ifTrue:[ cg@1371: self information:'No project selected'. cg@1371: ^ self cg@1298: ]. cg@1298: cg@1298: self withCursor:Cursor wait do:[ cg@1371: self makeTranscriptVisible. cg@1371: TextCollector transcriptQuerySignal answer:self transcript cg@1371: do:[ cg@1371: p createNTMakefile cg@1371: ] cg@1298: ]. cg@1298: cg@1298: "Created: / 19.1.2000 / 15:55:17 / cg" cg@1298: ! cg@1298: cg@1248: checkInAllClasses cg@1248: "check in all classes" cg@1248: cg@1289: |p classes classesToCheckIn anyBad| cg@1248: cg@1248: p := self currentProject. cg@1248: p isNil ifTrue:[ cg@1371: self information:'No project selected'. cg@1371: ^ self cg@1248: ]. cg@1248: cg@1289: classesToCheckIn := OrderedCollection new. cg@1289: anyBad := false. cg@1289: cg@1289: "/ collect in classes ... cg@1248: cg@1248: classes := p classes. cg@1289: classes do:[:aClassOrClassName | cg@1371: |cls clsName| cg@1371: cg@1371: cls := aClassOrClassName. cg@1371: cls isString ifTrue:[ cg@1371: cls := Smalltalk at:cls asSymbol. cg@1371: clsName := aClassOrClassName cg@1371: ] ifFalse:[ cg@1371: clsName := aClassOrClassName name cg@1371: ]. cg@1371: cg@1371: cls isBehavior ifFalse:[ cg@1371: Transcript showCR:('ProjectBrowser: cannot checkIn unloaded class: ' , clsName). cg@1371: anyBad := true. cg@1371: ] ifTrue:[ cg@1371: cls isLoaded ifFalse:[ cg@1371: Transcript showCR:('ProjectBrowser: cannot checkIn unloaded class: ' , clsName). cg@1371: anyBad := true. cg@1371: ] ifTrue:[ cg@1371: cls owningClass isNil ifTrue:[ "/ skip private classes cg@1371: Transcript showCR:('ProjectBrowser: checking in class: ' , clsName). cg@1371: classesToCheckIn add:cls. cg@1371: ] cg@1371: ] cg@1371: ] cg@1248: ]. cg@1289: anyBad ifTrue:[^ self]. cg@1289: cg@1289: self checkInClasses:classesToCheckIn. cg@1248: cg@1248: ! cg@1248: cg@1267: checkInMakefiles cg@1267: "check in the Make.proto, Makefile, nt.mak and vms.mak files" cg@1267: cg@1267: |p| cg@1267: cg@1267: p := self currentProject. cg@1267: p isNil ifTrue:[ cg@1371: self information:'No project selected'. cg@1371: ^ self cg@1267: ]. cg@1267: cg@1290: self warn:'CheckIn of Makefiles not yet implemented.'. cg@1267: ^ self. cg@1267: cg@1267: "/ check it in ... cg@1267: cg@1267: cg@1267: cg@1267: ! cg@1267: cg@1248: checkInMethods cg@1248: "check in all extensions (patches)" cg@1248: cg@1248: |p methods anyMethodMissing| cg@1248: cg@1248: p := self currentProject. cg@1248: p isNil ifTrue:[ cg@1371: self information:'No project selected'. cg@1371: ^ self cg@1248: ]. cg@1248: cg@1290: self warn:'CheckIn of extensions not yet implemented.'. cg@1267: ^ self. cg@1267: cg@1248: "/ check methods ... cg@1248: cg@1248: anyMethodMissing := false. cg@1248: methods := p methods. cg@1248: methods size > 0 ifTrue:[ cg@1371: methods do:[:aMethod | cg@1371: aMethod isMethod ifFalse:[ cg@1371: Transcript showCR:('ProjectBrowser: cannot checkIn unloaded method: ' , aMethod className , ' ' , aMethod methodName). cg@1371: anyMethodMissing := true. cg@1371: ] cg@1371: ]. cg@1371: anyMethodMissing ifTrue:[ cg@1371: Transcript showCR:'ProjectBrowser: cannot save method patches & extensions due to missing method(s)'. cg@1371: ] ifFalse:[ cg@1371: Transcript showCR:('ProjectBrowser: checking in patches & extensions'). cg@1371: self checkInMethods:methods cg@1371: ]. cg@1248: ]. cg@1248: cg@1248: ! cg@1248: cg@1248: checkInProject cg@1248: "check in all classes and extensions" cg@1248: cg@1248: |p| cg@1248: cg@1248: p := self currentProject. cg@1248: p isNil ifTrue:[ cg@1371: self information:'No project selected'. cg@1371: ^ self cg@1248: ]. cg@1248: cg@1248: "/ check in classes ... cg@1248: self checkInAllClasses. cg@1248: cg@1248: "/ check methods ... cg@1248: self checkInMethods. cg@1248: cg@1290: "/ build & check in makefiles cg@1290: "/ self buildMakefiles. cg@1290: self checkInMakefiles. cg@1290: cg@1248: "/ check in the project file itself cg@1248: self checkInProjectFile. cg@1248: cg@1248: ! cg@1248: cg@1267: checkInProjectFile cg@1267: "check in the prj-file" cg@1267: cg@1267: |p| cg@1267: cg@1267: p := self currentProject. cg@1267: p isNil ifTrue:[ cg@1371: self information:'No project selected'. cg@1371: ^ self cg@1267: ]. cg@1267: cg@1290: self warn:'CheckIn of ProjectFile not yet implemented.'. cg@1267: ^ self. cg@1267: cg@1267: "/ check it in ... cg@1267: cg@1267: cg@1267: cg@1267: ! cg@1267: cg@1248: inspectCurrentProject cg@1248: "inspect the current project" cg@1248: cg@1248: self hasProjectSelected ifTrue:[ cg@1371: self currentProject inspect. cg@1248: ] cg@1248: ! cg@1248: cg@1248: loadClassesFromDirectory cg@1248: "load all classes as contained in the project into the system" cg@1248: cg@1248: self withReadCursorDo:[ cg@1371: self currentProject loadClassesFromProjectDirectory. cg@1248: ]. cg@1248: cg@1248: ! cg@1248: cg@1289: loadClassesFromRepository cg@1289: "load all classes as contained in the project from the source code cg@1289: repository into the system" cg@1289: cg@1289: self warn:'not yet implemented - please load from directory' cg@1289: cg@1289: ! cg@1289: cg@1248: makeCurrentProject cg@1248: "make the selected Project the current project" cg@1248: cg@1248: |project| cg@1248: cg@1248: self hasProjectSelected ifTrue:[ cg@1371: project := self currentProject. cg@1371: cg@1371: Project current:project. cg@1371: self showWhat value == #current ifTrue:[ cg@1371: self updateProjectTree cg@1371: ] cg@1248: ] cg@1248: ! cg@1248: cg@1248: moveMethodToProject cg@1248: |p mthd newPackage| cg@1248: cg@1248: p := self currentProject. cg@1248: cg@1248: mthd := self selectedMethod. cg@1248: mthd notNil ifTrue:[ cg@1371: newPackage := Dialog request:'Move to project:' initialAnswer:lastMoveToProject. cg@1371: newPackage size > 0 ifTrue:[ cg@1371: lastMoveToProject := newPackage. cg@1371: newPackage ~= p package ifTrue:[ cg@1371: mthd package:newPackage asSymbol. cg@1371: p removeMethod:mthd. cg@1371: self updatePatchesListForProject:p. cg@1371: self projectTree remove:self selectedTreeNode. cg@1371: ] cg@1371: ] cg@1248: ]. cg@1248: ! cg@1248: cg@1248: newProject cg@1248: self newProject:Project new. cg@1248: cg@1248: ! cg@1248: cg@1248: newProject:newProject cg@1248: |newNode| cg@1248: cg@1248: newNode := self nodeFor:newProject. cg@1248: self addProjectNodeToTree:newNode. cg@1248: self projectTreeHolder root:projectTree. cg@1248: "/ self projectTreeHolder selectNode:newNode. cg@1248: "/ self projectTreeHolder expand:newNode. cg@1248: cg@1248: self readAspectsFromProject. cg@1248: newProject wasLoadedFromFile ifFalse:[ cg@1371: self updateListOfRequiredPrerequisiteClasses. cg@1248: ] cg@1248: ! cg@1248: cg@1248: newSubProject cg@1248: |projectNode subProjectsNode newNode parentProject newProject| cg@1248: cg@1248: projectNode := self currentProjectNode. cg@1248: cg@1248: projectNode notNil ifTrue:[ cg@1371: parentProject := projectNode contents. cg@1371: subProjectsNode := projectNode children detect:[:child | child contents == #subprojects]. cg@1248: self halt. cg@1371: parentProject notNil ifTrue:[ cg@1371: newProject := Project new. cg@1371: newNode := self nodeFor:newProject. cg@1371: cg@1371: parentProject addSubProject:newProject. cg@1371: subProjectsNode add:newNode. cg@1371: self projectTreeHolder root:projectTree. cg@1371: self projectTreeHolder selectNode:newNode. cg@1371: ] cg@1248: ] cg@1248: cg@1248: ! cg@1248: cg@1248: openDocumentation cg@1248: self openHTMLDocument: 'tools/pbrowser/TOP.html' cg@1248: cg@1248: ! cg@1248: cg@1248: openProject cg@1248: |fn| cg@1248: cg@1248: fn := Dialog cg@1371: requestFileName:'filename:' cg@1371: default:nil cg@1371: ifFail:nil cg@1371: pattern:'*.prj' cg@1371: fromDirectory:(FileSelectionBox lastFileSelectionDirectory). cg@1248: cg@1248: fn notNil ifTrue:[ cg@1371: self loadFromProjectFile:fn. cg@1248: ] cg@1248: ! cg@1248: cg@1248: removeMethod cg@1248: |p mthd| cg@1248: cg@1248: p := self currentProject. cg@1248: cg@1248: mthd := self selectedMethod. cg@1248: mthd notNil ifTrue:[ cg@1371: (self confirm:'Really remove the method (from both project and image) ?') ifTrue:[ cg@1371: p removeMethod:mthd. cg@1371: mthd who methodClass removeSelector:mthd who methodSelector. cg@1371: self updatePatchesListForProject:p. cg@1371: self projectTree remove:self selectedTreeNode. cg@1371: ] cg@1327: ] ifFalse:[ cg@1371: self information:'No such method in the image (yet)'. cg@1327: ] cg@1248: ! cg@1248: cg@1248: removeMethodFromProject cg@1248: |p mthd| cg@1248: cg@1248: p := self currentProject. cg@1248: cg@1248: mthd := self selectedMethod. cg@1248: mthd notNil ifTrue:[ cg@1371: (self confirm:'Really remove the method (from the project) ?') ifTrue:[ cg@1371: mthd package:#unknown. cg@1371: p removeMethod:mthd. cg@1371: self updatePatchesListForProject:p. cg@1371: self projectTree remove:self selectedTreeNode. cg@1371: ] cg@1248: ]. cg@1248: ! cg@1248: cg@1248: removeProject cg@1248: |projectToRemove selectedNode subNode newNode parentNode parentProject newProject| cg@1248: cg@1248: self hasProjectNodeSelected ifTrue:[ cg@1371: selectedNode := self selectedTreeNode. cg@1371: projectToRemove := selectedNode contents. cg@1371: cg@1371: (self confirm:'Really remove the project ?') ifTrue:[ cg@1371: self withExecuteCursorDo:[ cg@1371: self projectTreeHolder removeSelection. cg@1371: projectToRemove removeFromSystem. cg@1371: ] cg@1371: ] cg@1248: ] cg@1248: ! cg@1248: cg@1248: renameProject cg@1248: |nm projectNode selectedProject| cg@1248: cg@1248: projectNode := self currentProjectNode. cg@1248: projectNode notNil ifTrue:[ cg@1371: selectedProject := projectNode contents. cg@1371: cg@1371: nm := Dialog cg@1371: request:'Rename to:' cg@1371: initialAnswer:selectedProject name. cg@1371: cg@1371: nm size > 0 ifTrue:[ cg@1371: selectedProject name:nm. cg@1248: "/ selectedNode name:nm. cg@1248: "/ selectedNode changed. cg@1371: ] cg@1248: ] cg@1248: ! cg@1248: cg@1248: saveProjectFile cg@1248: "save the project file in the project directory" cg@1248: cg@1248: |d p| cg@1248: cg@1248: self modifiedChannel value ifTrue:[ cg@1371: (self confirm:'Changes not confirmed; save anyway ?') ifFalse:[^ self] cg@1248: ]. cg@1248: cg@1248: p := self currentProject. cg@1248: p isNil ifTrue:[ cg@1371: self information:'Select a project first.'. cg@1371: ^self cg@1248: ]. cg@1248: p directory isNil ifTrue:[ cg@1371: d := (Dialog request:'Project Directory:'). cg@1371: d size == 0 ifTrue:[ cg@1371: ^ self cg@1371: ]. cg@1371: p directory:d cg@1248: ]. cg@1248: cg@1248: self withCursor:Cursor write do:[ cg@1371: p saveAsProjectFile. cg@1248: ] cg@1248: cg@1248: "Modified: / 26.4.1999 / 22:43:57 / cg" cg@1248: ! cg@1248: cg@1248: validateAgainstClassesInImage cg@1248: "validate classes in project against classes found in the image" cg@1248: cg@1248: |project classesInProjectOnly classesInImageOnly bindings| cg@1248: cg@1248: project := self currentProject. cg@1248: classesInImageOnly := IdentitySet new. cg@1248: classesInProjectOnly := IdentitySet new. cg@1248: cg@1248: Smalltalk allClassesDo:[:aClass | cg@1371: aClass isMeta ifFalse:[ cg@1371: (aClass isNameSpace not or:[aClass == Smalltalk]) ifTrue:[ cg@1371: aClass package = project package ifTrue:[ cg@1371: (project classInfoFor:aClass) isNil ifTrue:[ cg@1371: classesInImageOnly add:aClass name. cg@1371: ] cg@1371: ] cg@1371: ] cg@1371: ] cg@1248: ]. cg@1248: project classInfo do:[:clsInfo | cg@1371: |clsName cls| cg@1371: cg@1371: clsName := clsInfo className. cg@1371: cls := Smalltalk at:clsName asSymbol. cg@1371: (cls isBehavior not) ifTrue:[ cg@1371: classesInProjectOnly add:clsName cg@1371: ]. cg@1248: ]. cg@1248: cg@1248: (classesInImageOnly isEmpty and:[classesInProjectOnly isEmpty]) ifTrue:[ cg@1371: self information:'Set of classes in project and image are equal.'. cg@1371: ^ self. cg@1248: ]. cg@1248: cg@1248: classesInImageOnly := classesInImageOnly asOrderedCollection sort. cg@1248: classesInProjectOnly := classesInProjectOnly asOrderedCollection sort. cg@1248: cg@1248: bindings := IdentityDictionary new. cg@1248: bindings at:#classesInImageOnly put:classesInImageOnly. cg@1248: bindings at:#classesInProjectOnly put:classesInProjectOnly. cg@1248: cg@1248: SimpleDialog cg@1371: openDialogInterfaceSpec:(self class classValidationDialogSpec) cg@1371: withBindings:bindings cg@1248: cg@1248: "Modified: / 26.9.1999 / 16:03:50 / cg" cg@1255: ! cg@1255: cg@1255: validateAgainstMethodsInImage cg@1255: "validate methods in project against methods found in the image" cg@1255: cg@1255: |project package methodsInProjectOnly methodsInImageOnly bindings who| cg@1255: cg@1255: project := self currentProject. cg@1255: package := project package. cg@1255: cg@1255: methodsInImageOnly := IdentitySet new. cg@1255: methodsInProjectOnly := IdentitySet new. cg@1255: cg@1255: Method allSubInstancesDo:[:aMethod | cg@1371: aMethod package = package ifTrue:[ cg@1371: who := aMethod who. cg@1371: who notNil ifTrue:[ cg@1371: (project classInfoFor:who methodClass) isNil ifTrue:[ cg@1371: "/ is it in the projects methodList ? cg@1371: (project includesMethod:aMethod) ifFalse:[ cg@1371: methodsInImageOnly add:(who methodClass name , ' ' , who methodSelector). cg@1371: ] cg@1371: ] cg@1371: ] cg@1371: ] cg@1255: ]. cg@1255: cg@1255: project methodInfo do:[:mthdInfo | cg@1371: |clsName sel cls m| cg@1371: cg@1371: clsName := mthdInfo className. cg@1371: sel := mthdInfo methodName. cg@1371: cls := Smalltalk at:clsName asSymbol. cg@1371: (project includesClass:clsName) ifFalse:[ cg@1371: (cls isBehavior not cg@1371: or:[(m := cls compiledMethodAt:sel) isNil cg@1371: or:[m package ~= package]]) ifTrue:[ cg@1371: methodsInProjectOnly add:(clsName , ' ' , sel) cg@1371: ]. cg@1371: ]. cg@1255: ]. cg@1255: cg@1255: (methodsInImageOnly isEmpty and:[methodsInProjectOnly isEmpty]) ifTrue:[ cg@1371: self information:'Set of methods in project and image are equal.'. cg@1371: ^ self. cg@1255: ]. cg@1255: cg@1255: methodsInImageOnly := methodsInImageOnly asOrderedCollection sort:[:a :b | a printString < b printString]. cg@1255: methodsInProjectOnly := methodsInProjectOnly asOrderedCollection sort:[:a :b | a printString < b printString]. cg@1255: cg@1255: bindings := IdentityDictionary new. cg@1255: bindings at:#methodsInImageOnly put:methodsInImageOnly. cg@1255: bindings at:#methodsInProjectOnly put:methodsInProjectOnly. cg@1255: cg@1255: SimpleDialog cg@1371: openDialogInterfaceSpec:(self class methodValidationDialogSpec) cg@1371: withBindings:bindings cg@1255: cg@1255: "Modified: / 26.9.1999 / 16:03:50 / cg" cg@1248: ! ! cg@1248: cg@1025: !ProjectBrowser::ProjectTreeItem methodsFor:'accessing'! cg@1025: cg@1025: action cg@1025: "return the value of the instance variable 'action' (automatically generated)" cg@1025: cg@2076: ^ action cg@2076: ! cg@1025: cg@1025: action:something cg@1025: "set the value of the instance variable 'action' (automatically generated)" cg@1025: cg@2076: action := something. cg@2076: ! cg@1079: cg@1109: info cg@1109: "return the value of the instance variable 'info' (automatically generated)" cg@1109: cg@2076: ^ info cg@2076: ! cg@1109: cg@1109: info:something cg@1109: "set the value of the instance variable 'info' (automatically generated)" cg@1109: cg@2076: info := something. cg@2076: ! cg@1109: cg@1079: spec cg@1079: "return the value of the instance variable 'spec' (automatically generated)" cg@1079: cg@2076: ^ spec cg@2076: ! cg@1079: cg@1079: spec:something cg@1079: "set the value of the instance variable 'spec' (automatically generated)" cg@1079: cg@2076: spec := something. cg@2076: ! ! cg@1025: cg@1026: !ProjectBrowser::ProjectTreeItem methodsFor:'queries'! cg@1026: cg@1026: isProjectNode cg@1026: ^ false cg@1026: ! ! cg@1026: cg@1026: !ProjectBrowser::ProjectNode methodsFor:'queries'! cg@1026: cg@1026: isProjectNode cg@1026: ^ true cg@1026: cg@1026: cg@1026: ! ! cg@1026: cg@1025: !ProjectBrowser class methodsFor:'documentation'! cg@1025: cg@1025: version cg@1025: ^ '$Header$' cg@1025: ! ! cg@2076: cg@1236: ProjectBrowser initialize!