Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Path: utzoo!mnetor!seismo!rutgers!mit-eddie!uw-beaver!bnfb From: bnfb@uw-beaver.UUCP (Bjorn Freeman-Benson) Newsgroups: comp.lang.smalltalk Subject: Free Code: a SetInspector Message-ID: <2137@uw-beaver.UUCP> Date: Thu, 11-Jun-87 12:23:31 EDT Article-I.D.: uw-beave.2137 Posted: Thu Jun 11 12:23:31 1987 Date-Received: Sat, 20-Jun-87 09:43:51 EDT Organization: U of Washington, CSCI, Seattle Lines: 140 This is a small (subclassed) modification of the Inspector, with three new menu items for inspecting Sets. Enjoy, Bjorn N Freeman-Benson --cut here----cut here----cut here----cut here----cut here----cut here-- Inspector subclass: #SetInspector instanceVariableNames: 'topView listView ' classVariableNames: 'NoSelectionMenu YesSelectionMenu ' poolDictionaries: '' category: 'Interface-SetInspector'! !SetInspector methodsFor: 'initialization'! listView: aView ^listView _ aView! topView: aView ^topView _ aView! ! !SetInspector methodsFor: 'field list'! fieldMenu field == nil ifTrue: [ NoSelectionMenu == nil ifTrue: [ NoSelectionMenu _ ActionMenu labels: 'first non-empty' selectors: #(firstNonEmpty) ]. ^NoSelectionMenu ] ifFalse: [ YesSelectionMenu == nil ifTrue: [ YesSelectionMenu _ ActionMenu labels: 'inspect\prev non-empty\next non-empty' withCRs lines: #(1) selectors: #(inspectField prevNonEmpty nextNonEmpty) ]. ^YesSelectionMenu ]! ! !SetInspector methodsFor: 'menu commands'! firstNonEmpty 1 to: (object basicSize) do: [ :i | (object basicAt: i) ~= nil ifTrue: [ listView moveSelectionBox: (i + 2). listView changeModelSelection: (i + 2). ^self ] ]. topView flash.! nextNonEmpty | idx | field first isDigit ifFalse: [ ^self firstNonEmpty ]. idx _ Integer readFromString: field. (idx+1) to: (object basicSize) do: [ :i | (object basicAt: i) ~= nil ifTrue: [ listView moveSelectionBox: (i + 2). listView changeModelSelection: (i + 2). ^self ] ]. topView flash.! prevNonEmpty | idx | field first isDigit ifFalse: [ ^self firstNonEmpty ]. idx _ Integer readFromString: field. (idx-1) to: 1 by: -1 do: [ :i | (object basicAt: i) ~= nil ifTrue: [ listView moveSelectionBox: (i + 2). listView changeModelSelection: (i + 2). ^self ] ]. topView flash.! ! "-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "! SetInspector class instanceVariableNames: ''! !SetInspector class methodsFor: 'initialization'! flushMenus YesSelectionMenu _ NoSelectionMenu _ nil! ! InspectorView subclass: #SetInspectorView instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Interface-SetInspector'! "-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "! SetInspectorView class instanceVariableNames: ''! !SetInspectorView class methodsFor: 'instance creation'! view: anInspector in: area of: superView "Create proportioned List and Code views on anInspector in area of superView" | mid | mid _ area left + (area width * 0.3). anInspector topView: superView. superView addSubView: (anInspector listView: (SelectionInListView on: anInspector printItems: anInspector printItems oneItem: false aspect: #field change: #field: list: #fieldList menu: #fieldMenu initialSelection: #field)) in: (area copy right: mid) borderWidth: 1. superView addSubView: (CodeView on: anInspector aspect: #text change: #acceptText:from: menu: #textMenu initialSelection: nil) in: (area copy left: mid) borderWidth: 1! ! !Set methodsFor: 'user interface'! inspect SetInspectorView open: (SetInspector inspect: self)! !