cg@2181: "{ Package: 'stx:libtool2' }" cg@2181: cg@2181: "{ NameSpace: Tools }" cg@2181: cg@2184: ToolApplicationModel subclass:#ObjectModuleInformation cg@2184: instanceVariableNames:'readOnly listOfModuleNames selectedModuleIndexHolder allModules cg@2183: objectHandles showOthers showCObjects showBuiltIn showMethods cg@2253: showClassLibs table1VisibleHolder table2VisibleHolder cg@2253: selectedInfoIndexHolder canBrowseSelectedModule cg@2253: canUnloadSelectedModule classNamesShown classInfoShown cg@2618: vmInfoShown canUnloadSelectedModulesPackage cg@2619: canBrowseSelectedModulesExtensions canUnloadSelectedDLL' cg@2181: classVariableNames:'' cg@2181: poolDictionaries:'' cg@2181: category:'Monitors-ST/X' cg@2181: ! cg@2181: cg@2181: Object subclass:#InfoRow cg@2183: instanceVariableNames:'name version date value' cg@2181: classVariableNames:'' cg@2181: poolDictionaries:'' cg@2181: privateIn:ObjectModuleInformation cg@2181: ! cg@2181: cg@2181: !ObjectModuleInformation class methodsFor:'documentation'! cg@2181: cg@2181: documentation cg@2181: " cg@2181: Shows the modules (dll's) of ST/X. cg@2181: Both builtIn modules, and dynamically loaded modules are listed. cg@2181: cg@2181: [author:] cg@2253: Claus Gittinger cg@2181: " cg@2181: ! cg@2181: cg@2181: examples cg@2181: " cg@2181: Starting the application: cg@2181: [exBegin] cg@2181: ObjectModuleInformation open cg@2181: cg@2181: [exEnd] cg@2181: " cg@2181: ! ! cg@2181: cg@2181: !ObjectModuleInformation class methodsFor:'info'! cg@2181: cg@2181: defaultLabel cg@2183: ^ 'Object Module Info' cg@2181: cg@2181: "Created: / 05-10-2007 / 11:56:59 / cg" cg@2181: ! ! cg@2181: cg@2181: !ObjectModuleInformation class methodsFor:'interface specs'! cg@2181: cg@2181: windowSpec cg@2181: "This resource specification was automatically generated cg@2181: by the UIPainter of ST/X." cg@2181: cg@2181: "Do not manually edit this!! If it is corrupted, cg@2181: the UIPainter may not be able to read the specification." cg@2181: cg@2181: " cg@2183: UIPainter new openOnClass:Tools::ObjectModuleInformation andSelector:#windowSpec cg@2183: Tools::ObjectModuleInformation new openInterface:#windowSpec cg@2183: Tools::ObjectModuleInformation open cg@2181: " cg@2181: cg@2181: cg@2181: cg@2181: ^ cg@2181: #(FullSpec cg@2181: name: windowSpec cg@2181: window: cg@2181: (WindowSpec cg@2181: label: 'ST/X Module & Version Information' cg@2181: name: 'ST/X Module & Version Information' cg@2181: min: (Point 0 0) cg@2181: bounds: (Rectangle 0 0 505 567) cg@2181: menu: mainMenu cg@2181: ) cg@2181: component: cg@2181: (SpecCollection cg@2181: collection: ( cg@2181: (MenuPanelSpec cg@2181: name: 'ToolBar1' cg@2616: layout: (LayoutFrame 0 0 0 0 0 1 40 0) cg@2181: menu: toolbarMenu cg@2181: textDefault: true cg@2181: ) cg@2181: (VariableVerticalPanelSpec cg@2181: name: 'VariableVerticalPanel1' cg@2616: layout: (LayoutFrame 0 0 40 0 0 1 0 1) cg@2181: component: cg@2181: (SpecCollection cg@2181: collection: ( cg@2181: (SequenceViewSpec cg@2181: name: 'List1' cg@2181: model: selectedModuleIndexHolder cg@2253: menu: moduleMenu cg@2181: hasHorizontalScrollBar: true cg@2181: hasVerticalScrollBar: true cg@2181: useIndex: true cg@2181: sequenceList: listOfModuleNames cg@2181: ) cg@2181: (ViewSpec cg@2181: name: 'Box1' cg@2181: component: cg@2181: (SpecCollection cg@2181: collection: ( cg@2181: (LabelSpec cg@2181: name: 'Label1' cg@2181: layout: (LayoutFrame 0 0 0 0 0 1 30 0) cg@2181: translateLabel: true cg@2181: labelChannel: middleLabelHolder cg@2181: adjust: left cg@2181: ) cg@2181: (DataSetSpec cg@2181: name: 'Table1' cg@2181: layout: (LayoutFrame 0 0 30 0 0 1 0 1) cg@2183: visibilityChannel: table1VisibleHolder cg@2181: model: selectedInfoIndexHolder cg@2253: menu: moduleItemMenu cg@2181: hasHorizontalScrollBar: true cg@2181: hasVerticalScrollBar: true cg@2183: dataList: infoTable1ListHolder cg@2181: columnHolder: tableColumns cg@2181: separatorOneDColor: (Color 66.999313344015 66.999313344015 66.999313344015) cg@2181: ) cg@2183: (DataSetSpec cg@2183: name: 'Table2' cg@2183: layout: (LayoutFrame 0 0 30 0 0 1 0 1) cg@2183: initiallyInvisible: true cg@2183: visibilityChannel: table2VisibleHolder cg@2183: model: selectedInfoIndexHolder cg@2183: hasHorizontalScrollBar: true cg@2183: hasVerticalScrollBar: true cg@2183: dataList: infoTable2ListHolder cg@2183: columnHolder: tableColumnsForSingleInfo cg@2183: separatorOneDColor: (Color 66.999313344015 66.999313344015 66.999313344015) cg@2183: ) cg@2181: ) cg@2181: cg@2181: ) cg@2181: ) cg@2181: ) cg@2181: cg@2181: ) cg@2181: handles: (Any 0.35195530726257 1.0) cg@2181: ) cg@2181: ) cg@2181: cg@2181: ) cg@2181: ) cg@2181: ! ! cg@2181: cg@2181: !ObjectModuleInformation class methodsFor:'menu specs'! cg@2181: cg@2181: mainMenu cg@2181: "This resource specification was automatically generated cg@2181: by the MenuEditor of ST/X." cg@2181: cg@2181: "Do not manually edit this!! If it is corrupted, cg@2181: the MenuEditor may not be able to read the specification." cg@2181: cg@2181: " cg@2183: MenuEditor new openOnClass:Tools::ObjectModuleInformation andSelector:#mainMenu cg@2183: (Menu new fromLiteralArrayEncoding:(Tools::ObjectModuleInformation mainMenu)) startUp cg@2181: " cg@2181: cg@2181: cg@2181: cg@2181: ^ cg@2181: #(Menu cg@2181: ( cg@2181: (MenuItem cg@2181: label: 'File' cg@2181: translateLabel: true cg@2181: submenu: cg@2181: (Menu cg@2181: ( cg@2181: (MenuItem cg@2181: label: 'Exit' cg@2181: itemValue: closeRequest cg@2181: translateLabel: true cg@2181: ) cg@2181: ) cg@2181: nil cg@2181: nil cg@2181: ) cg@2181: ) cg@2181: (MenuItem cg@2181: label: 'View' cg@2181: translateLabel: true cg@2181: submenu: cg@2181: (Menu cg@2181: ( cg@2181: (MenuItem cg@2619: label: 'Dynamically Loaded ClassLibraries Only' sv@2842: itemValue: showOnlyDynamicallyLoadedClassLibraries cg@2619: translateLabel: true cg@2619: hideMenuOnActivated: false cg@2619: ) cg@2619: (MenuItem cg@2619: label: '-' cg@2619: ) cg@2619: (MenuItem cg@2181: label: 'Builtin' cg@2181: translateLabel: true cg@2183: hideMenuOnActivated: false cg@2181: indication: showBuiltIn cg@2181: ) cg@2181: (MenuItem cg@2181: label: 'Class Libraries' cg@2181: translateLabel: true cg@2183: hideMenuOnActivated: false cg@2181: indication: showClassLibs cg@2181: ) cg@2181: (MenuItem cg@2181: label: 'Methods' cg@2181: translateLabel: true cg@2183: hideMenuOnActivated: false cg@2181: indication: showMethods cg@2181: ) cg@2181: (MenuItem cg@2181: label: 'C-Objects' cg@2181: translateLabel: true cg@2183: hideMenuOnActivated: false cg@2181: indication: showCObjects cg@2181: ) cg@2181: (MenuItem cg@2181: label: 'Others' cg@2181: translateLabel: true cg@2183: hideMenuOnActivated: false cg@2181: indication: showOthers cg@2181: ) cg@2403: (MenuItem cg@2403: label: '-' cg@2403: ) cg@2403: (MenuItem cg@2403: label: 'Update' cg@2403: itemValue: menuUpdateModuleList cg@2403: translateLabel: true cg@2403: ) cg@2181: ) cg@2181: nil cg@2181: nil cg@2181: ) cg@2181: ) cg@2181: (MenuItem cg@2181: label: 'Module' cg@2181: translateLabel: true cg@2181: submenu: cg@2181: (Menu cg@2181: ( cg@2403: (MenuItem cg@2403: enabled: canBrowseSelectedModule cg@2403: label: 'Browse' cg@2403: itemValue: browseModule cg@2403: translateLabel: true cg@2403: ) cg@2403: (MenuItem cg@2619: enabled: canBrowseSelectedModulesExtensions cg@2619: label: 'Browse Extensions' cg@2619: itemValue: browseModuleExtensions cg@2619: translateLabel: true cg@2619: ) sv@2842: (MenuItem sv@2842: enabled: canBrowseSelectedModulesProjectDefinition sv@2842: label: 'Browse ProjectDefinition' sv@2842: itemValue: browseModulesProjectDefinition sv@2842: translateLabel: true sv@2842: ) sv@2842: (MenuItem sv@2842: label: 'Find a Class...' sv@2842: itemValue: findClass sv@2842: translateLabel: true sv@2842: ) cg@2619: (MenuItem cg@2619: label: '-' cg@2619: ) cg@2619: (MenuItem cg@2253: enabled: canCopyClassNameList cg@2253: label: 'Copy Version Info to Clipboard' cg@2253: itemValue: copyClassOrVMNameList cg@2253: translateLabel: true cg@2253: ) cg@2181: (MenuItem cg@2253: label: '-' cg@2253: ) cg@2253: (MenuItem cg@2619: label: 'Load Package...' cg@2619: itemValue: loadPackage cg@2619: translateLabel: true cg@2619: ) cg@2619: (MenuItem cg@2619: label: '-' cg@2619: ) cg@2619: (MenuItem cg@2616: enabled: canUnloadSelectedModulesPackage cg@2619: label: 'Unload Package...' cg@2616: itemValue: unloadSelectedModulesPackage cg@2181: translateLabel: true cg@2181: ) cg@2403: (MenuItem cg@2619: enabled: canUnloadSelectedDLL cg@2619: label: 'Remove Classes && Unload DLL...' cg@2403: itemValue: unloadSelectedModuleAndRemoveClasses cg@2403: translateLabel: true cg@2403: ) cg@2616: (MenuItem cg@2616: enabled: canUnloadSelectedModule cg@2619: label: 'Unload DLL...' cg@2616: itemValue: unloadSelectedModule cg@2616: translateLabel: true cg@2616: ) sv@2842: (MenuItem sv@2842: label: 'Inspect' sv@2842: itemValue: inspectSelectedObject sv@2842: translateLabel: true sv@2842: ) sv@2842: (MenuItem sv@2842: label: '-' sv@2842: ) sv@2842: (MenuItem sv@2842: label: 'Update' sv@2842: itemValue: menuUpdateModuleList sv@2842: translateLabel: true sv@2842: ) cg@2181: ) cg@2181: nil cg@2181: nil cg@2181: ) cg@2181: ) cg@2181: (MenuItem cg@2181: label: 'Help' cg@2181: translateLabel: true cg@2181: startGroup: conditionalRight cg@2181: submenu: cg@2181: (Menu cg@2181: ( cg@2181: (MenuItem cg@2181: label: 'Documentation' cg@2181: itemValue: openDocumentation cg@2181: translateLabel: true cg@2181: ) cg@2181: (MenuItem cg@2181: label: '-' cg@2181: ) cg@2181: (MenuItem cg@2181: label: 'About this Application...' cg@2181: itemValue: openAboutThisApplication cg@2181: translateLabel: true cg@2181: ) cg@2181: ) cg@2181: nil cg@2181: nil cg@2181: ) cg@2181: ) cg@2181: ) cg@2181: nil cg@2181: nil cg@2181: ) cg@2253: ! cg@2253: cg@2253: moduleItemMenu cg@2253: "This resource specification was automatically generated cg@2253: by the MenuEditor of ST/X." cg@2253: cg@2253: "Do not manually edit this!! If it is corrupted, cg@2253: the MenuEditor may not be able to read the specification." cg@2253: cg@2253: " cg@2253: MenuEditor new openOnClass:Tools::ObjectModuleInformation andSelector:#moduleItemMenu cg@2253: (Menu new fromLiteralArrayEncoding:(Tools::ObjectModuleInformation moduleItemMenu)) startUp cg@2253: " cg@2253: cg@2253: cg@2253: cg@2253: ^ cg@2253: #(Menu cg@2253: ( sv@2842: (MenuItem cg@2253: enabled: canBrowseSelectedClass cg@2253: label: 'Browse' cg@2253: itemValue: browseClass cg@2253: translateLabel: true cg@2253: ) sv@2842: (MenuItem cg@2253: label: '-' cg@2253: ) sv@2842: (MenuItem cg@2253: enabled: canCopyClassNameList cg@2253: label: 'Copy Version Info to Clipboard' cg@2253: itemValue: copyClassOrVMNameList cg@2253: translateLabel: true cg@2253: ) cg@2253: ) cg@2253: nil cg@2253: nil cg@2253: ) cg@2253: ! cg@2253: cg@2253: moduleMenu cg@2253: "This resource specification was automatically generated cg@2253: by the MenuEditor of ST/X." cg@2253: cg@2253: "Do not manually edit this!! If it is corrupted, cg@2253: the MenuEditor may not be able to read the specification." cg@2253: cg@2253: " cg@2253: MenuEditor new openOnClass:Tools::ObjectModuleInformation andSelector:#moduleMenu cg@2253: (Menu new fromLiteralArrayEncoding:(Tools::ObjectModuleInformation moduleMenu)) startUp cg@2253: " cg@2253: cg@2253: cg@2253: cg@2253: ^ cg@2253: #(Menu cg@2253: ( cg@2253: (MenuItem cg@2253: enabled: canBrowseSelectedModule cg@2253: label: 'Browse' cg@2253: itemValue: browseModule cg@2253: translateLabel: true cg@2253: ) cg@2618: (MenuItem cg@2618: enabled: canBrowseSelectedModulesExtensions cg@2618: label: 'Browse Extensions' cg@2618: itemValue: browseModuleExtensions cg@2618: translateLabel: true cg@2618: ) cg@2619: (MenuItem cg@2763: enabled: canBrowseSelectedModulesProjectDefinition cg@2763: label: 'Browse ProjectDefinition' cg@2763: itemValue: browseModulesProjectDefinition cg@2763: translateLabel: true cg@2763: ) cg@2763: (MenuItem cg@2623: label: 'Find a Class...' cg@2623: itemValue: findClass cg@2623: translateLabel: true cg@2623: ) cg@2623: (MenuItem cg@2619: label: '-' cg@2619: ) cg@2619: (MenuItem cg@2253: enabled: canCopyClassNameList cg@2253: label: 'Copy Version Info to Clipboard' cg@2253: itemValue: copyClassOrVMNameList cg@2253: translateLabel: true cg@2253: ) cg@2253: (MenuItem cg@2253: label: '-' cg@2253: ) cg@2253: (MenuItem cg@2616: enabled: canUnloadSelectedModulesPackage cg@2619: label: 'Unload Package...' cg@2616: itemValue: unloadSelectedModulesPackage cg@2616: translateLabel: true cg@2616: ) cg@2616: (MenuItem cg@2253: enabled: canUnloadSelectedModule cg@2619: label: 'Remove Classes && Unload DLL...' cg@2253: itemValue: unloadSelectedModuleAndRemoveClasses cg@2253: translateLabel: true cg@2253: ) cg@2253: (MenuItem cg@2619: enabled: canUnloadSelectedDLL cg@2619: label: 'Unload DLL...' cg@2253: itemValue: unloadSelectedModule cg@2253: translateLabel: true cg@2253: ) cg@2619: (MenuItem sv@2842: label: 'Inspect' sv@2842: itemValue: inspectSelectedObject sv@2842: translateLabel: true sv@2842: ) sv@2842: (MenuItem cg@2619: label: '-' cg@2619: ) cg@2619: (MenuItem cg@2619: label: 'Update' cg@2619: itemValue: menuUpdateModuleList cg@2619: translateLabel: true cg@2619: ) cg@2253: ) cg@2253: nil cg@2253: nil cg@2253: ) cg@2616: ! cg@2616: cg@2616: toolbarMenu cg@2616: "This resource specification was automatically generated cg@2616: by the MenuEditor of ST/X." cg@2616: cg@2616: "Do not manually edit this!! If it is corrupted, cg@2616: the MenuEditor may not be able to read the specification." cg@2616: cg@2616: " cg@2616: MenuEditor new openOnClass:Tools::ObjectModuleInformation andSelector:#toolbarMenu cg@2616: (Menu new fromLiteralArrayEncoding:(Tools::ObjectModuleInformation toolbarMenu)) startUp cg@2616: " cg@2616: cg@2616: cg@2616: cg@2616: ^ cg@2616: #(Menu cg@2616: ( cg@2616: (MenuItem cg@2620: label: 'Update' cg@2620: itemValue: menuUpdateModuleList cg@2620: translateLabel: true cg@2620: isButton: true cg@2620: labelImage: (ResourceRetriever ToolbarIconLibrary reloadIcon) cg@2620: ) cg@2620: (MenuItem cg@2620: label: '-' cg@2620: ) cg@2620: (MenuItem cg@2616: enabled: canBrowseSelectedModule cg@2617: label: 'Browse the Selected Module''s Classes' cg@2616: itemValue: browseModule cg@2616: translateLabel: true cg@2616: isButton: true cg@2618: labelImage: (ResourceRetriever ToolbarIconLibrary startSystemBrowserIcon) cg@2618: ) cg@2618: (MenuItem cg@2618: enabled: canBrowseSelectedModulesExtensions cg@2618: label: 'Browse the Selected Module''s Extensions' cg@2618: itemValue: browseModuleExtensions cg@2618: translateLabel: true cg@2618: isButton: true cg@2618: labelImage: (ResourceRetriever ToolbarIconLibrary browseClassExtensionsIcon) cg@2616: ) cg@2616: ) cg@2616: nil cg@2616: nil cg@2616: ) cg@2181: ! ! cg@2181: cg@2181: !ObjectModuleInformation class methodsFor:'tableColumns specs'! cg@2181: cg@2181: tableColumns cg@2181: "This resource specification was automatically generated cg@2181: by the DataSetBuilder of ST/X." cg@2181: cg@2181: "Do not manually edit this!! If it is corrupted, cg@2181: the DataSetBuilder may not be able to read the specification." cg@2181: cg@2181: " cg@2181: DataSetBuilder new openOnClass:ObjectModuleInformation andSelector:#tableColumns cg@2181: " cg@2181: cg@2181: cg@2181: cg@2181: ^#( cg@2181: (DataSetColumnSpec cg@2181: label: 'Name' cg@2181: activeHelpKey: '' cg@2181: labelButtonType: Button cg@2181: width: 0.5 cg@2181: model: name cg@2181: canSelect: false cg@2181: ) cg@2181: (DataSetColumnSpec cg@2181: label: 'Version' cg@2181: activeHelpKey: '' cg@2181: labelButtonType: Button cg@2181: model: version cg@2181: canSelect: false cg@2181: ) cg@2181: (DataSetColumnSpec cg@2181: label: 'Date' cg@2181: activeHelpKey: '' cg@2181: labelButtonType: Button cg@2181: model: date cg@2181: canSelect: false cg@2181: ) cg@2181: ) cg@2181: cg@2183: ! cg@2183: cg@2183: tableColumnsForSingleInfo cg@2183: "This resource specification was automatically generated cg@2183: by the DataSetBuilder of ST/X." cg@2183: cg@2183: "Do not manually edit this!! If it is corrupted, cg@2183: the DataSetBuilder may not be able to read the specification." cg@2183: cg@2183: " cg@2183: DataSetBuilder new openOnClass:Tools::ObjectModuleInformation andSelector:#tableColumnsForSingleInfo cg@2183: " cg@2183: cg@2183: cg@2183: cg@2183: ^#( cg@2183: (DataSetColumnSpec cg@2183: label: '' cg@2183: activeHelpKey: '' cg@2183: labelButtonType: None cg@2183: width: 0.3 cg@2183: model: name cg@2183: canSelect: false cg@2183: ) cg@2183: (DataSetColumnSpec cg@2183: label: '' cg@2183: activeHelpKey: '' cg@2183: labelButtonType: None cg@2183: model: value cg@2183: canSelect: false cg@2183: ) cg@2183: ) cg@2183: cg@2181: ! ! cg@2181: cg@2181: !ObjectModuleInformation methodsFor:'aspects'! cg@2181: cg@2253: canBrowseSelectedClass cg@2253: ^ [classNamesShown notEmptyOrNil cg@2253: and:[ self selectedInfoIndex notNil cg@2253: and:[ self selectedInfoIndex ~~ 0 ]]] cg@2253: cg@2253: "Modified: / 05-10-2007 / 10:51:39 / cg" cg@2253: ! cg@2253: cg@2253: canBrowseSelectedModule cg@2253: canBrowseSelectedModule isNil ifTrue:[ cg@2253: canBrowseSelectedModule := false asValue cg@2253: ]. cg@2253: ^ canBrowseSelectedModule. cg@2253: cg@2253: "Modified: / 05-10-2007 / 10:51:39 / cg" cg@2253: ! cg@2253: cg@2618: canBrowseSelectedModulesExtensions cg@2618: canBrowseSelectedModulesExtensions isNil ifTrue:[ cg@2618: canBrowseSelectedModulesExtensions := false asValue cg@2618: ]. cg@2618: ^ canBrowseSelectedModulesExtensions. cg@2618: cg@2618: "Modified: / 05-10-2007 / 10:51:39 / cg" cg@2618: ! cg@2618: cg@2763: canBrowseSelectedModulesProjectDefinition cg@2763: ^ [ self projectDefinitionClassOfSelectedModule notNil ] cg@2763: ! cg@2763: cg@2253: canCopyClassNameList cg@2253: ^ [table1VisibleHolder value cg@2253: and:[classInfoShown notEmptyOrNil or:[vmInfoShown notEmptyOrNil] ]] cg@2253: cg@2253: "Modified: / 05-10-2007 / 10:51:39 / cg" cg@2253: ! cg@2253: cg@2619: canUnloadSelectedDLL cg@2619: canUnloadSelectedDLL isNil ifTrue:[ cg@2619: canUnloadSelectedDLL := false asValue cg@2619: ]. cg@2619: ^ canUnloadSelectedDLL. cg@2619: cg@2619: "Modified: / 05-10-2007 / 10:51:39 / cg" cg@2619: ! cg@2619: cg@2253: canUnloadSelectedModule cg@2253: canUnloadSelectedModule isNil ifTrue:[ cg@2253: canUnloadSelectedModule := false asValue cg@2253: ]. cg@2253: ^ canUnloadSelectedModule. cg@2253: cg@2253: "Modified: / 05-10-2007 / 10:51:39 / cg" cg@2253: ! cg@2253: cg@2616: canUnloadSelectedModulesPackage cg@2616: canUnloadSelectedModulesPackage isNil ifTrue:[ cg@2616: canUnloadSelectedModulesPackage := false asValue cg@2616: ]. cg@2616: ^ canUnloadSelectedModulesPackage. cg@2616: ! cg@2616: cg@2183: infoTable1ListHolder cg@2183: ^ builder valueAspectFor:#'infoTable1ListHolder' initialValue:#() cg@2181: cg@2183: "Created: / 05-10-2007 / 12:48:06 / cg" cg@2183: ! cg@2183: cg@2183: infoTable2ListHolder cg@2183: ^ builder valueAspectFor:#'infoTable2ListHolder' initialValue:#() cg@2183: cg@2183: "Created: / 05-10-2007 / 12:48:10 / cg" cg@2181: ! cg@2181: cg@2181: listOfModuleNames cg@2181: listOfModuleNames isNil ifTrue:[ cg@2181: listOfModuleNames := List new. cg@2181: ]. cg@2181: ^ listOfModuleNames. cg@2181: cg@2181: "Modified: / 05-10-2007 / 10:49:19 / cg" cg@2181: ! cg@2181: cg@2181: middleLabelHolder cg@2181: ^ builder valueAspectFor:#'middleLabelHolder' initialValue:'' cg@2181: cg@2181: "Created: / 05-10-2007 / 11:05:08 / cg" cg@2181: ! cg@2181: cg@2184: notReadOnly cg@2184: ^ self readOnly not cg@2184: cg@2184: "Created: / 05-10-2007 / 13:06:00 / cg" cg@2184: ! cg@2184: cg@2184: readOnly cg@2184: ^ readOnly ? false cg@2184: cg@2184: "Created: / 05-10-2007 / 13:05:51 / cg" cg@2184: ! cg@2184: cg@2253: readOnly:aBoolean cg@2253: readOnly := aBoolean cg@2253: cg@2253: "Created: / 05-10-2007 / 13:05:51 / cg" cg@2253: ! cg@2253: cg@2253: selectedInfoIndex cg@2253: |sel| cg@2253: cg@2253: sel := self selectedInfoIndexHolder value. cg@2253: ^ sel cg@2253: ! cg@2253: cg@2253: selectedInfoIndexHolder cg@2253: selectedInfoIndexHolder isNil ifTrue:[ cg@2253: selectedInfoIndexHolder := ValueHolder new. cg@2253: selectedInfoIndexHolder onChangeSend:#selectedInfoIndexChanged to:self. cg@2253: ]. cg@2253: ^ selectedInfoIndexHolder. cg@2253: cg@2253: "Modified: / 05-10-2007 / 10:51:39 / cg" cg@2253: ! cg@2253: cg@2253: selectedModuleIndex cg@2253: |sel| cg@2253: cg@2253: sel := self selectedModuleIndexHolder value. cg@2253: ^ sel cg@2253: ! cg@2253: cg@2181: selectedModuleIndexHolder cg@2181: selectedModuleIndexHolder isNil ifTrue:[ cg@2181: selectedModuleIndexHolder := ValueHolder new. cg@2181: selectedModuleIndexHolder onChangeSend:#selectedModuleIndexChanged to:self. cg@2181: ]. cg@2181: ^ selectedModuleIndexHolder. cg@2181: cg@2181: "Modified: / 05-10-2007 / 10:51:39 / cg" cg@2181: ! cg@2181: cg@2181: showBuiltIn cg@2183: showBuiltIn isNil ifTrue:[ cg@2183: showBuiltIn := true asValue. cg@2183: showBuiltIn onChangeSend:#filterChanged to:self. cg@2183: ]. cg@2183: ^ showBuiltIn cg@2181: cg@2183: "Modified: / 05-10-2007 / 12:43:23 / cg" cg@2181: ! cg@2181: cg@2181: showCObjects cg@2183: showCObjects isNil ifTrue:[ cg@2183: showCObjects := true asValue. cg@2183: showCObjects onChangeSend:#filterChanged to:self. cg@2183: ]. cg@2183: ^ showCObjects cg@2181: cg@2183: "Modified: / 05-10-2007 / 12:43:16 / cg" cg@2181: ! cg@2181: cg@2181: showClassLibs cg@2183: showClassLibs isNil ifTrue:[ cg@2183: showClassLibs := true asValue. cg@2183: showClassLibs onChangeSend:#filterChanged to:self. cg@2183: ]. cg@2183: ^ showClassLibs cg@2181: cg@2183: "Modified: / 05-10-2007 / 12:43:10 / cg" cg@2181: ! cg@2181: cg@2181: showMethods cg@2183: showMethods isNil ifTrue:[ cg@2183: showMethods := true asValue. cg@2183: showMethods onChangeSend:#filterChanged to:self. cg@2183: ]. cg@2183: ^ showMethods cg@2181: cg@2183: "Modified: / 05-10-2007 / 12:43:02 / cg" cg@2181: ! cg@2181: cg@2619: showOnlyDynamicallyLoadedClassLibraries cg@2619: self showBuiltIn value:false withoutNotifying:self. cg@2619: self showCObjects value:false withoutNotifying:self. cg@2619: self showMethods value:false withoutNotifying:self. cg@2619: self showOthers value:false withoutNotifying:self. cg@2619: self showClassLibs value:true withoutNotifying:self. cg@2619: self filterChanged. cg@2619: ! cg@2619: cg@2181: showOthers cg@2183: showOthers isNil ifTrue:[ cg@2183: showOthers := true asValue. cg@2183: showOthers onChangeSend:#filterChanged to:self. cg@2183: ]. cg@2183: ^ showOthers cg@2183: cg@2183: "Modified: / 05-10-2007 / 12:42:54 / cg" cg@2183: ! cg@2181: cg@2183: table1VisibleHolder cg@2183: table1VisibleHolder isNil ifTrue:[ cg@2183: table1VisibleHolder := true asValue. cg@2183: ]. cg@2183: ^ table1VisibleHolder. cg@2183: cg@2183: "Modified: / 05-10-2007 / 12:53:05 / cg" cg@2183: ! cg@2183: cg@2183: table2VisibleHolder cg@2183: table2VisibleHolder isNil ifTrue:[ cg@2183: table2VisibleHolder := false asValue. cg@2183: ]. cg@2183: ^ table2VisibleHolder. cg@2183: cg@2183: "Modified: / 05-10-2007 / 12:53:14 / cg" cg@2181: ! ! cg@2181: cg@2181: !ObjectModuleInformation methodsFor:'change & update'! cg@2181: cg@2618: isExtensionName:nm cg@2618: ^ (nm endsWith:'_extensions') cg@2618: ! cg@2618: cg@2253: selectedInfoIndexChanged cg@2253: ! cg@2253: cg@2253: selectedModule cg@2253: |sel| cg@2253: cg@2253: sel := self selectedModuleIndex. cg@2253: sel isNil ifTrue:[^ nil]. cg@2253: ^ objectHandles at:sel. cg@2253: ! cg@2181: cg@2253: selectedModuleIndexChanged cg@2620: | info | cg@2253: cg@2253: info := self selectedModuleInfo. cg@2253: cg@2619: self canBrowseSelectedModule value:false. cg@2619: self canBrowseSelectedModulesExtensions value:false. cg@2619: self canUnloadSelectedDLL value:false. cg@2619: self canUnloadSelectedModule value:false. cg@2619: self canUnloadSelectedModulesPackage value:false. cg@2253: cg@2253: classNamesShown := nil. cg@2253: classInfoShown := nil. cg@2253: vmInfoShown := nil. cg@2181: cg@2181: info isNil ifTrue:[ cg@2620: "/ selected a cObject or unknown cg@2253: self showInfoForNonClassLib:(self selectedModuleIndex). cg@2181: ^ self. cg@2181: ]. cg@2181: info == #VM ifTrue:[ cg@2181: "/ selected the pseudo entry for the VM itself cg@2181: self showInfoForVM. cg@2181: ^ self. cg@2181: ]. cg@2618: cg@2181: "/ selected a class-library package cg@2181: self showInfoForClassLib:info. cg@2181: cg@2183: "Modified: / 05-10-2007 / 12:56:13 / cg" cg@2181: ! cg@2181: cg@2253: selectedModuleInfo cg@2620: |sel| cg@2253: cg@2253: sel := self selectedModuleIndex. cg@2253: sel notNil ifTrue:[ cg@2253: (self showClassLibs value or:[self showBuiltIn value]) ifTrue:[ cg@2620: ^ allModules at:sel ifAbsent:nil. cg@2253: ]. cg@2253: ]. cg@2620: ^ nil cg@2620: ! cg@2620: cg@2620: selectedObjectHandle cg@2620: |sel| cg@2620: cg@2620: sel := self selectedModuleIndex. cg@2620: sel isNil ifTrue:[^ nil]. cg@2620: ^ objectHandles at:sel. cg@2253: ! cg@2253: cg@2181: showInfoForClassLib:info sv@2788: "selected a lib-package; fill bottom list with class-info" sv@2788: sv@2788: |rows projectDefinitionClass mgr canUnload canUnloadPackage| cg@2616: sv@2788: self middleLabelHolder value:'Components:'. sv@2788: sv@2788: projectDefinitionClass := self selectedModulesProjectDefinitionClass. cg@2619: cg@2619: self canBrowseSelectedModule value:true. cg@2619: cg@2619: self canBrowseSelectedModulesExtensions cg@2619: value:(info classNames contains:[:nm | self isExtensionName:nm]). cg@2619: cg@2619: canUnload := info dynamic and:[self readOnly not]. cg@2619: self canUnloadSelectedModule value:canUnload. sv@2788: canUnloadPackage := canUnload sv@2788: and:[projectDefinitionClass notNil sv@2788: and:[projectDefinitionClass projectIsLoaded]]. cg@2619: self canUnloadSelectedModulesPackage value:canUnloadPackage. cg@2616: cg@2181: cg@2402: classNamesShown := self shownClassNamesFor:info. sv@2788: rows := classNamesShown collect:[:eachClassName | cg@2860: |cls entry rev binRev listEntry revisionInfo versionString dateString| cg@2181: cg@2181: listEntry := InfoRow new. sv@2788: listEntry name:eachClassName. cg@2181: sv@2788: cls := Smalltalk classNamed:eachClassName. cg@2181: cls isNil ifTrue:[ sv@2788: (self isExtensionName:eachClassName) ifTrue:[ sv@2788: projectDefinitionClass notNil ifTrue:[ sv@2788: mgr := projectDefinitionClass sourceCodeManager. sv@2788: versionString := projectDefinitionClass perform:(mgr nameOfVersionMethodForExtensions) ifNotUnderstood:nil. cg@2616: versionString notNil ifTrue:[ cg@2616: versionString := '(bin: ',(mgr revisionInfoFromString:versionString) revision,')'. cg@2616: ] cg@2616: ]. sv@2788: ] ifFalse:[ sv@2788: versionString := '(class removed)'. cg@2616: ]. cg@2181: ] ifFalse:[ cg@2860: binRev := cls binaryRevision. cg@2860: binRev notNil ifTrue:[ sv@2788: cls isLoaded ifTrue:[ cg@2860: entry :='(bin: ' , binRev. sv@2788: ] ifFalse:[ cg@2860: entry := '(stub for: ' , binRev. cg@2181: ]. cg@2860: (rev := cls revision) ~= binRev ifTrue:[ cg@2860: entry := entry , ' / src: ' , (rev printString) cg@2181: ]. cg@2181: entry := entry , ')'. cg@2616: versionString := entry cg@2181: ] ifFalse:[ cg@2616: cls revision notNil ifTrue:[ cg@2616: versionString := '(overloaded by: ' , cls revision , ')' cg@2616: ] cg@2181: ]. cg@2181: revisionInfo := cls revisionInfo. cg@2181: revisionInfo notNil ifTrue:[ sv@2788: dateString := revisionInfo at:#date. cg@2181: ]. cg@2181: ]. cg@2616: listEntry version:versionString. sv@2788: listEntry date:dateString. cg@2181: ]. cg@2181: cg@2253: classInfoShown := rows. cg@2253: cg@2183: self infoTable1ListHolder value:rows. cg@2183: self table1VisibleHolder value:true. cg@2183: self table2VisibleHolder value:false. cg@2181: cg@2860: "Modified: / 29-09-2011 / 15:40:42 / cg" cg@2181: ! cg@2181: cg@2181: showInfoForNonClassLib:sel sv@2773: "selected a method, cObject or unknown" cg@2181: sv@2787: |module fileName list newEntry| cg@2181: cg@2253: sel isNil ifTrue:[ cg@2253: self table1VisibleHolder value:false. cg@2253: self table2VisibleHolder value:false. cg@2253: ^ self. cg@2253: ]. cg@2253: cg@2181: module := objectHandles at:sel. cg@2181: fileName := module pathName. cg@2181: cg@2739: self canUnloadSelectedDLL value:true. cg@2739: cg@2181: module isMethodHandle ifTrue:[ sv@2787: |method nm entries| sv@2773: sv@2773: self canUnloadSelectedModule value:self readOnly not. cg@2181: cg@2183: self middleLabelHolder value:'Compiled Method:'. cg@2181: cg@2181: (method := module method) isNil ifTrue:[ cg@2181: nm := '** removed **'. cg@2181: ] ifFalse:[ cg@2619: self canBrowseSelectedModule value:true. cg@2181: "/ menu := PopUpMenu cg@2181: "/ labels:#('Inspect' 'Browse') cg@2181: "/ selectors:#(inspect browse). cg@2181: "/ menu actionAt:#inspect put:[ method inspect ]. cg@2181: "/ menu actionAt:#browse put:[ |who| cg@2181: "/ who := method who. cg@2181: "/ UserPreferences systemBrowserClass cg@2181: "/ openInClass:(who methodClass) cg@2181: "/ selector:(who methodSelector) cg@2181: "/ ]. cg@2181: "/ listView1 middleButtonMenu:menu. cg@2181: cg@2658: nm := (method whoString) colorizeAllWith:Color blue. cg@2181: ]. sv@2773: entries := OrderedCollection new. sv@2787: newEntry := InfoRow new. sv@2787: newEntry name:'Compiled method'; value:nm. sv@2787: entries add:newEntry. cg@2181: sv@2787: newEntry := InfoRow new. sv@2787: newEntry name:'Path'; value:fileName. sv@2787: entries add:newEntry. cg@2181: sv@2773: (method notNil and:[method code notNil]) ifTrue:[ sv@2787: newEntry := InfoRow new. sv@2787: newEntry name:'Address'; value:('(16r) ' , (method code address hexPrintString leftPaddedTo:8 with:$0)). sv@2787: entries add:newEntry. sv@2773: ]. cg@2181: sv@2773: self infoTable2ListHolder value:entries. cg@2183: self table1VisibleHolder value:false. cg@2183: self table2VisibleHolder value:true. cg@2181: ^ self. cg@2181: ]. cg@2181: cg@2181: (module isFunctionObjectHandle cg@2181: and:[module functions notEmpty]) ifTrue:[ cg@2183: self middleLabelHolder value:'Functions:'. cg@2181: cg@2181: "/ menu := PopUpMenu cg@2181: "/ labels:#('Inspect') cg@2181: "/ selectors:#(inspect). cg@2181: "/ menu actionAt:#inspect put:[ module functions inspect ]. cg@2181: "/ listView1 middleButtonMenu:menu. cg@2181: "/ cg@2181: list := (module functions select:[:f | f notNil]) cg@2181: collect:[:f | |entry| cg@2181: entry := InfoRow new. cg@2658: entry name:(f name colorizeAllWith:Color blue). cg@2183: entry value:('address: (16r) ' , (f code address hexPrintString leftPaddedTo:8 with:$0)). cg@2181: entry cg@2181: ]. cg@2183: self infoTable2ListHolder value:list. cg@2183: self table1VisibleHolder value:false. cg@2183: self table2VisibleHolder value:true. cg@2181: ^ self. cg@2181: ]. cg@2181: sv@2787: newEntry := InfoRow new. sv@2787: newEntry name:'Unknown'. sv@2787: self infoTable2ListHolder value:(Array with:newEntry). cg@2183: self table1VisibleHolder value:false. cg@2183: self table2VisibleHolder value:true. cg@2181: cg@2183: "Modified: / 05-10-2007 / 13:01:33 / cg" cg@2181: ! cg@2181: cg@2181: showInfoForVM sv@2788: "show file versions of vm info in lower view." cg@2181: cg@2181: |l| cg@2181: cg@2619: self canBrowseSelectedModule value:false. sv@2788: self middleLabelHolder value:'VM Components:'. cg@2181: sv@2788: l := ObjectMemory getVMIdentificationStrings sv@2788: select:[:entry | (entry includesString:'$Header') sv@2788: and:[entry includesString:',v']] sv@2788: thenCollect:[:entry | sv@2788: |i1 i2 file revision date listEntry| cg@2181: sv@2788: listEntry := InfoRow new. cg@2181: sv@2788: i1 := entry indexOfSubCollection:'librun'. sv@2788: i1 ~~ 0 ifTrue:[ sv@2788: i2 := entry indexOfSubCollection:',v' startingAt:i1. sv@2788: i2 ~~ 0 ifTrue:[ sv@2788: file := entry copyFrom:i1+7 to:(i2-1). sv@2788: listEntry name:file. cg@2181: sv@2788: i1 := i2+3. sv@2788: i2 := entry indexOfSeparatorStartingAt:i1. sv@2788: revision := entry copyFrom:i1 to:(i2-1). sv@2788: listEntry version:revision. cg@2181: sv@2788: i1 := i2+1. sv@2788: i2 := entry indexOfSeparatorStartingAt:i1. sv@2788: date := entry copyFrom:i1 to:(i2-1). sv@2788: listEntry date:date. sv@2788: ]. sv@2788: ]. sv@2788: listEntry. cg@2181: ]. cg@2253: cg@2253: vmInfoShown := l. cg@2183: self infoTable1ListHolder value:l. cg@2183: self table1VisibleHolder value:true. cg@2183: self table2VisibleHolder value:false. cg@2181: cg@2181: "/ readOnly ifFalse:[ cg@2181: "/ unloadButton disable. cg@2181: "/ unloadAndRemoveButton disable. cg@2181: "/ ] cg@2181: cg@2183: "Modified: / 05-10-2007 / 12:53:44 / cg" cg@2402: ! cg@2402: cg@2402: shownClassNamesFor:info cg@2402: "/ selected a package; fill bottom list with class-info cg@2402: cg@2402: |classNames| cg@2402: cg@2402: classNames := info classNames asSortedCollection. cg@2402: ^ classNames cg@2402: select:[:cName | cg@2402: |cls| cg@2402: cg@2402: cls := Smalltalk classNamed:cName. cg@2402: cls isNil ifTrue:[ cg@2402: true "a removed class" cg@2402: ] ifFalse:[ cg@2402: cls isPrivate not cg@2402: ]. cg@2402: ]. cg@2181: ! ! cg@2181: cg@2181: !ObjectModuleInformation methodsFor:'initialization'! cg@2181: cg@2181: postBuildWith:aBuilder cg@2181: |canDoIt| cg@2181: cg@2181: super postBuildWith:aBuilder. cg@2181: cg@2181: canDoIt := ObjectFileLoader notNil and:[ObjectFileLoader canLoadObjectFiles]. cg@2181: self showBuiltIn value:canDoIt. cg@2181: self showCObjects value:canDoIt. cg@2181: self showClassLibs value:canDoIt. cg@2181: self showMethods value:canDoIt. cg@2181: self showOthers value:canDoIt. cg@2181: cg@2181: self updateModuleList cg@2181: cg@2181: "Created: / 05-10-2007 / 10:50:27 / cg" cg@2181: ! ! cg@2181: cg@2181: !ObjectModuleInformation methodsFor:'menu actions'! cg@2181: cg@2253: browseClass cg@2620: |info classNames selectedClassName selectedClass| cg@2253: cg@2253: info := self selectedModuleInfo. cg@2402: classNames := (self shownClassNamesFor:info) asSortedCollection. cg@2253: selectedClassName := classNames at:(self selectedInfoIndex). cg@2253: selectedClass := Smalltalk classNamed:selectedClassName. cg@2253: cg@2402: selectedClass notNil ifTrue:[ cg@2402: Smalltalk browseInClass:selectedClass. cg@2402: ^ self. cg@2402: ]. cg@2402: cg@2402: "/ clicked on an extensions-module ? cg@2618: (self isExtensionName:selectedClassName) ifTrue:[ cg@2618: self browseModuleExtensions. cg@2616: ^ self. cg@2402: ]. cg@2618: cg@2618: self breakPoint:#cg. cg@2253: ! cg@2253: cg@2253: browseModule cg@2620: |moduleInfoOrHandle classes method| cg@2253: cg@2620: moduleInfoOrHandle := self selectedObjectHandle. cg@2620: "/ what a hack cg@2620: (moduleInfoOrHandle isKindOf: ObjectMemory::BinaryModuleDescriptor) ifTrue:[ cg@2620: classes := moduleInfoOrHandle classNames collect:[:nm | Smalltalk classNamed:nm]. cg@2619: UserPreferences systemBrowserClass cg@2619: browseClasses:classes cg@2620: label:(resources string:'Classes in %1' with:moduleInfoOrHandle libraryName) cg@2620: ] ifFalse:[ cg@2620: moduleInfoOrHandle isMethodHandle ifTrue:[ cg@2620: method := moduleInfoOrHandle method. cg@2620: (method notNil and:[method mclass notNil]) ifFalse:[ cg@2620: Dialog information:'The method has been redefined/removed'. cg@2620: ^ self. cg@2620: ]. cg@2620: UserPreferences systemBrowserClass cg@2620: openInMethod:method cg@2620: ] cg@2620: ]. cg@2253: ! cg@2253: cg@2618: browseModuleExtensions cg@2620: |info name packageID methods| cg@2618: cg@2620: info := self selectedModuleInfo. cg@2618: cg@2620: name := info classNames detect:[:nm | self isExtensionName:nm]. cg@2618: packageID := (name copyWithoutLast:('_extensions' size)) asSymbol. cg@2618: methods := Smalltalk allExtensionsForPackage:packageID. cg@2618: (UserPreferences browserClass) browseMethods:methods title:('Extensions for ',packageID). cg@2618: ! cg@2618: cg@2763: browseModulesProjectDefinition cg@2763: |projectDefinitionClass| cg@2763: cg@2763: projectDefinitionClass := self projectDefinitionClassOfSelectedModule. cg@2763: projectDefinitionClass notNil ifTrue:[ cg@2763: (UserPreferences browserClass) openInClass:projectDefinitionClass class cg@2763: ]. cg@2763: ! cg@2763: cg@2253: copyClassOrVMNameList cg@2253: |text| cg@2253: cg@2253: text := ((classInfoShown ? vmInfoShown)collect:[:eachRow | eachRow infoString]) asStringCollection asString. cg@2253: self window setClipboardText:text. cg@2253: ! cg@2253: cg@2623: findClass cg@2623: |class moduleIndex classNamesShown classIndex| cg@2623: cg@2623: class := Dialog requestClass:'Classname (Tab for completion):'. cg@2623: class isEmptyOrNil ifTrue:[^ self]. cg@2623: cg@2623: moduleIndex := allModules findFirst:[:module | module isSymbol not and:[module classNames includes:class name]]. cg@2623: moduleIndex == 0 ifTrue:[ cg@2623: Dialog information:'Class is not contained in a loaded or builtIn package.'. cg@2623: ^ self cg@2623: ]. cg@2623: self selectedModuleIndexHolder value:moduleIndex. cg@2623: cg@2623: classNamesShown := self shownClassNamesFor:(self selectedModuleInfo). cg@2623: classIndex := classNamesShown indexOf:class name. cg@2623: self selectedInfoIndexHolder value:classIndex. cg@2623: cg@2623: "/ module := allModules at:moduleIndex. cg@2623: "/ info := self selectedModuleInfo. cg@2623: "/ classNames := (self shownClassNamesFor:info) asSortedCollection. cg@2623: "/ selectedClassName := classNames at:(self selectedInfoIndex). cg@2623: "/ selectedClass := Smalltalk classNamed:selectedClassName. cg@2623: "/ cg@2623: "/ selectedClass notNil ifTrue:[ cg@2623: "/ Smalltalk browseInClass:selectedClass. cg@2623: "/ ^ self. cg@2623: "/ ]. cg@2623: "/ cg@2623: "/ "/ clicked on an extensions-module ? cg@2623: "/ (self isExtensionName:selectedClassName) ifTrue:[ cg@2623: "/ self browseModuleExtensions. cg@2623: "/ ^ self. cg@2623: "/ ]. cg@2623: "/ cg@2623: "/ self breakPoint:#cg. cg@2623: ! cg@2623: sv@2842: inspectSelectedObject sv@2842: self selectedObjectHandle inspect. sv@2842: ! sv@2842: cg@2619: loadPackage cg@2619: |package ok| cg@2619: cg@2619: package := Dialog request:'Name of Package (module:directory)'. cg@2619: package isEmptyOrNil ifTrue:[^ self]. cg@2619: self withWaitCursorDo:[ cg@2619: ok := Smalltalk loadPackage:package. cg@2619: ]. cg@2619: ok ifFalse:[ cg@2619: Dialog information:'Package not loaded' cg@2619: ]. cg@2619: self updateModuleList cg@2619: ! cg@2619: cg@2403: menuUpdateModuleList cg@2403: self updateModuleList cg@2403: cg@2403: "Modified: / 05-10-2007 / 13:11:45 / cg" cg@2403: ! cg@2403: cg@2181: openDocumentation cg@2184: self openHTMLDocument: 'tools/misc/TOP.html#MODULEINFO' cg@2181: cg@2184: "Modified: / 05-10-2007 / 13:11:45 / cg" cg@2253: ! cg@2253: cg@2619: selectedModulesProjectDefinitionClass sv@2788: "try to figure out, what the definitionClass is inside that module. sv@2788: in the future, we should always find one there, however, old libs or sv@2788: special libraries (hand built) might be without a projectDefinition." sv@2788: sv@2788: |info classNames definitionClasses libraryName| cg@2619: cg@2619: info := self selectedModuleInfo. cg@2619: classNames := (self shownClassNamesFor:info) asSortedCollection. sv@2788: definitionClasses := classNames ? #() sv@2788: collect:[:nm | Smalltalk classNamed:nm] sv@2788: thenSelect:[:cls | cls isProjectDefinition]. sv@2788: cg@2619: definitionClasses size == 1 ifTrue:[ cg@2619: ^ definitionClasses first sv@2788: ] ifFalse:[ sv@2788: "/ 0 or more definition classes - fall back - some heuristics... sv@2788: libraryName := info libraryName. "maybe something like 'libstx_libbasic'" sv@2788: (libraryName notNil and:[ libraryName startsWith:'lib' ]) ifTrue:[ sv@2788: ^ Smalltalk classNamed:(libraryName copyFrom:4). sv@2788: ]. cg@2619: ]. sv@2788: cg@2619: ^ nil cg@2619: ! cg@2619: cg@2254: unloadSelectedModule sv@2773: self unloadSelectedModuleRemoveConnectedObjects:false cg@2253: ! cg@2253: cg@2254: unloadSelectedModuleAndRemoveClasses sv@2773: self unloadSelectedModuleRemoveConnectedObjects:true cg@2253: ! cg@2253: sv@2773: unloadSelectedModuleRemoveConnectedObjects:doRemoveClasses sv@2773: |module handle| cg@2739: cg@2739: module := allModules at:self selectedModuleIndex ifAbsent:nil. cg@2739: module notNil ifTrue:[ cg@2739: (Dialog cg@2739: confirm:'This is a possibly dangerous operation, as the DLL is unloaded without caring for cg@2619: proper package-deinstallation procedures. Please use this only in repair situations and when the cg@2616: regular unloadPackage operation fails. cg@2616: sv@2773: Continue ?') sv@2773: ifFalse:[ ^ self ]. cg@2616: ]. sv@2778: handle := module handle. sv@2773: handle notNil ifTrue:[ sv@2773: self sv@2773: withWaitCursorDo:[ sv@2773: self selectedModuleIndexHolder value:nil. sv@2773: doRemoveClasses ifTrue:[ sv@2773: handle removeConnectedObjects. sv@2773: ]. sv@2773: handle unload. sv@2773: self updateModuleList. sv@2773: ]. cg@2253: ] cg@2619: ! cg@2619: cg@2619: unloadSelectedModulesPackage cg@2619: |definitionClass| cg@2619: cg@2619: definitionClass := self selectedModulesProjectDefinitionClass. cg@2619: definitionClass isNil ifTrue:[^ self]. cg@2619: cg@2619: (Dialog cg@2619: confirm:(resources stringWithCRs:'About to unload the package\\ %1\\Continue' with:definitionClass package allBold)) cg@2619: ifFalse:[ cg@2619: ^ self cg@2619: ]. cg@2619: Smalltalk unloadPackage:definitionClass package. cg@2181: ! ! cg@2181: cg@2181: !ObjectModuleInformation methodsFor:'private'! cg@2181: cg@2183: filterChanged cg@2183: self updateModuleList cg@2183: cg@2183: "Created: / 05-10-2007 / 12:43:36 / cg" cg@2183: ! cg@2183: cg@2763: projectDefinitionClassOfSelectedModule cg@2763: |info packageID projectDefinitionClass| cg@2763: cg@2763: info := self selectedModuleInfo. cg@2763: info isNil ifTrue:[^ nil]. cg@2763: cg@2763: info classNames cg@2763: detect:[:nm | cg@2763: |cls| cg@2763: cg@2763: cls := Smalltalk at:nm. cg@2763: cls notNil ifTrue:[ cg@2763: packageID := cls package. cg@2763: true cg@2763: ] ifFalse:[ cg@2763: false cg@2763: ] cg@2763: ] cg@2763: ifNone:[^ nil]. cg@2763: cg@2763: projectDefinitionClass := packageID asPackageId projectDefinitionClass. cg@2763: ^ projectDefinitionClass cg@2763: ! cg@2763: cg@2181: updateModuleList cg@2181: |showClassLibs showBuiltIn showMethods showCObjects showOthers cg@2620: listOfModuleNames allObjects handles methodObjects | cg@2181: cg@2181: showClassLibs := self showClassLibs value. cg@2181: showBuiltIn := self showBuiltIn value. cg@2181: showMethods := self showMethods value. cg@2181: showCObjects := self showCObjects value. cg@2181: showOthers := self showOthers value. cg@2181: cg@2181: listOfModuleNames := OrderedCollection new. cg@2181: handles := OrderedCollection new. cg@2181: cg@2181: allObjects := ObjectFileLoader loadedObjectHandles. cg@2620: methodObjects := (allObjects select:[:h | h isMethodHandle]) asArray. cg@2181: cg@2181: (showClassLibs or:[showBuiltIn]) ifTrue:[ cg@2181: |moduleNames| cg@2181: cg@2181: allModules := ObjectMemory binaryModuleInfo asOrderedCollection. cg@2620: allModules := allModules select: cg@2620: [:i | cg@2620: |wantToSee| cg@2181: cg@2620: wantToSee := false. cg@2620: i dynamic ifTrue:[ cg@2620: showClassLibs ifTrue:[ cg@2620: i isSingleMethod ifFalse:[ cg@2620: wantToSee := true cg@2620: ]. cg@2181: ]. cg@2620: ] ifFalse:[ cg@2620: showBuiltIn ifTrue:[ cg@2620: wantToSee := true cg@2620: ]. cg@2620: ]. cg@2620: wantToSee cg@2620: ]. cg@2181: cg@2181: "/ sorting by reverse id brings newest ones to the top (a side effect) cg@2623: allModules sort:[:a :b | (a name) < (b name)]. cg@2181: moduleNames := allModules collect:[:entry | entry name]. cg@2181: listOfModuleNames addAll:moduleNames. cg@2181: handles addAll:allModules. cg@2181: ]. cg@2181: cg@2181: showMethods ifTrue:[ cg@2620: |methodNames| cg@2181: cg@2181: methodNames := methodObjects collect:[:mH | mH method isNil ifTrue:[ cg@2181: 'compiled method - removed' " , ' (in ' , mH pathName , ')' " cg@2181: ] ifFalse:[ cg@2181: 'compiled method ' , mH method whoString " , ' (in ' , mH pathName , ')' " cg@2181: ]. cg@2181: ]. cg@2181: listOfModuleNames addAll:methodNames. cg@2181: handles addAll:methodObjects. cg@2181: ]. cg@2181: cg@2181: showCObjects ifTrue:[ cg@2181: |cObjects cObjectNames| cg@2181: cg@2181: cObjects := (allObjects select:[:h | h isFunctionObjectHandle]) asArray. cg@2181: cObjectNames := cObjects collect:[:entry | entry pathName]. cg@2181: listOfModuleNames addAll:cObjectNames. cg@2181: handles addAll:cObjects. cg@2181: ]. cg@2181: cg@2181: showOthers ifTrue:[ cg@2181: |otherObjects otherObjectNames| cg@2181: cg@2181: otherObjects := (allObjects select:[:h | (h isFunctionObjectHandle cg@2181: or:[h isMethodHandle cg@2181: or:[h isClassLibHandle]]) not]) asArray. cg@2181: otherObjectNames := otherObjects collect:[:entry | entry pathName]. cg@2181: listOfModuleNames addAll:otherObjectNames. cg@2181: handles addAll:otherObjects. cg@2181: ]. cg@2181: cg@2181: showBuiltIn ifTrue:[ cg@2181: listOfModuleNames addFirst:'VM'. cg@2181: handles addFirst:#VM. cg@2181: allModules addFirst:#VM. cg@2181: ]. cg@2181: cg@2181: self listOfModuleNames contents:listOfModuleNames. cg@2183: objectHandles := handles. cg@2619: self selectedModuleIndexChanged. cg@2181: cg@2183: "Modified: / 05-10-2007 / 12:45:37 / cg" cg@2181: ! ! cg@2181: cg@2181: !ObjectModuleInformation::InfoRow methodsFor:'accessing'! cg@2181: cg@2181: date cg@2181: ^ date cg@2181: ! cg@2181: cg@2181: date:something cg@2181: date := something. cg@2181: ! cg@2181: cg@2181: name cg@2181: ^ name cg@2181: ! cg@2181: cg@2181: name:something cg@2181: name := something. cg@2181: ! cg@2181: cg@2181: name:nameArg version:versionArg date:dateArg cg@2181: name := nameArg. cg@2181: version := versionArg. cg@2181: date := dateArg. cg@2181: ! cg@2181: cg@2183: value cg@2183: ^ value cg@2183: ! cg@2183: cg@2183: value:something cg@2183: value := something. cg@2183: ! cg@2183: cg@2181: version cg@2181: ^ version cg@2181: ! cg@2181: cg@2181: version:something cg@2181: version := something. cg@2181: ! ! cg@2181: cg@2253: !ObjectModuleInformation::InfoRow methodsFor:'info'! cg@2253: cg@2253: infoString cg@2253: ^ name , ' ', (version ? '-') , ' ', (date ? '-') printString cg@2253: ! ! cg@2253: cg@2181: !ObjectModuleInformation class methodsFor:'documentation'! cg@2181: cg@2181: version cg@2181: ^ '$Header$' cg@2616: ! cg@2616: cg@2616: version_CVS cg@2616: ^ '$Header$' cg@2181: ! !