'VisualWorks(R), リリース 2.5.1J 1996年2月24日, 1997年5月1日 午後11時50分9秒'! ApplicationModel subclass: #ExtendedCodingAssistant instanceVariableNames: 'clsList varList dependencyOn varMode catName readOn writeOn clsName selectionClass ' classVariableNames: '' poolDictionaries: '' category: 'Ume-CodingGoodies'! ExtendedCodingAssistant comment: 'Copyright(C) 1996 Masashi Umezawa All Rights Reserved All Rights Reserved" accessor と mutator を自動生成する、コーディングアシスタントを拡張したものです ドラッグ&ドロップのインターフェースで使いやすくなっています '! !ExtendedCodingAssistant methodsFor: 'initialize-release'! initialize "Copyright(C) 1996 Masashi Umezawa All Rights Reserved" self readOn value: true. self writeOn value: true. self varMode value: #instVar! ! !ExtendedCodingAssistant methodsFor: 'accessing'! selectionClass "Copyright(C) 1996 Masashi Umezawa All Rights Reserved" ^selectionClass! selectionClass: aClass "Copyright(C) 1996 Masashi Umezawa All Rights Reserved" selectionClass := aClass! ! !ExtendedCodingAssistant methodsFor: 'actions'! acceptCat "Copyright(C) 1996 Masashi Umezawa All Rights Reserved" | cat | cat := self catName value. self clsList list: (Smalltalk organization listAtCategoryNamed: cat asSymbol) asList! acceptCls "Copyright(C) 1996 Masashi Umezawa All Rights Reserved" | cls | cls := self clsName value. self selectionClass: (Smalltalk at: cls ifAbsent: [nil]). self varModeChanged! close "Copyright(C) 1996 Masashi Umezawa All Rights Reserved" self closeRequest! delete "Copyright(C) 1996 Masashi Umezawa All Rights Reserved" | seleCls | seleCls := self selectionClass. seleCls notNil ifTrue: [(Dialog confirm: #Are_You_Sure << #goodies >> 'Are you sure??') ifTrue: [self privateDelete: self varList selections mode: self varMode value]]! deleteAll "Copyright(C) 1996 Masashi Umezawa All Rights Reserved" (Dialog confirm: #Are_You_Sure << #goodies >> 'Are you sure??') ifTrue: [self clsList list do: [:cls | self selectionClass: (Smalltalk at: cls). self privateDelete: self selectionClass instVarNames mode: #instVar. self privateDelete: self selectionClass classVarNames mode: #classVar. self privateDelete: self selectionClass class instVarNames mode: #classInstVar]]! generate "Copyright(C) 1996 Masashi Umezawa All Rights Reserved" self selectionClass notNil ifTrue: [self privateGenerate: self varList selections mode: self varMode value]! generateAll "Copyright(C) 1996 Masashi Umezawa All Rights Reserved" self clsList list do: [:cls | self selectionClass: (Smalltalk at: cls). self privateGenerate: self selectionClass instVarNames mode: #instVar. self privateGenerate: self selectionClass classVarNames mode: #classVar. self privateGenerate: self selectionClass class instVarNames mode: #classInstVar]! ! !ExtendedCodingAssistant methodsFor: 'aspects'! catName "Copyright(C) 1996 Masashi Umezawa All Rights Reserved" ^catName isNil ifTrue: [catName := nil asValue] ifFalse: [catName]! clsList "Copyright(C) 1996 Masashi Umezawa All Rights Reserved" ^clsList isNil ifTrue: [clsList := SelectionInList new] ifFalse: [clsList]! clsName "Copyright(C) 1996 Masashi Umezawa All Rights Reserved" ^clsName isNil ifTrue: [clsName := nil asValue] ifFalse: [clsName]! dependencyOn "Copyright(C) 1996 Masashi Umezawa All Rights Reserved" ^dependencyOn isNil ifTrue: [dependencyOn := false asValue] ifFalse: [dependencyOn]! readOn "Copyright(C) 1996 Masashi Umezawa All Rights Reserved" ^readOn isNil ifTrue: [readOn := false asValue] ifFalse: [readOn]! varList "Copyright(C) 1996 Masashi Umezawa All Rights Reserved" ^varList isNil ifTrue: [varList := MultiSelectionInList new] ifFalse: [varList]! varMode "Copyright(C) 1996 Masashi Umezawa All Rights Reserved" ^varMode isNil ifTrue: [varMode := nil asValue] ifFalse: [varMode]! writeOn "Copyright(C) 1996 Masashi Umezawa All Rights Reserved" ^writeOn isNil ifTrue: [writeOn := false asValue] ifFalse: [writeOn]! ! !ExtendedCodingAssistant methodsFor: 'notification'! catNameChanged "Copyright(C) 1996 Masashi Umezawa All Rights Reserved" self acceptCat! clsListChanged "Copyright(C) 1996 Masashi Umezawa All Rights Reserved" self clsList selection notNil ifTrue: [self clsName value: self clsList selection. self clsNameChanged]! clsNameChanged "Copyright(C) 1996 Masashi Umezawa All Rights Reserved" self acceptCls! varModeChanged "Copyright(C) 1996 Masashi Umezawa All Rights Reserved" self selectionClass notNil ifTrue: [self varMode value == #instVar ifTrue: [self varList list: self selectionClass instVarNames]. self varMode value == #classVar ifTrue: [self varList list: ((List new) addAll: self selectionClass classVarNames; yourself)]. self varMode value == #classInstVar ifTrue: [self varList list: self selectionClass class instVarNames]. self varList selectAll]! writeOnChanged "Copyright(C) 1996 Masashi Umezawa All Rights Reserved" self writeOn value ifTrue: [(self builder componentAt: #dependency) enable] ifFalse: [(self builder componentAt: #dependency) disable]! ! !ExtendedCodingAssistant methodsFor: 'drag and drop'! catDrop: aDragContext "Copyright(C) 1996 Masashi Umezawa All Rights Reserved" | categoryName | aDragContext key == #category ifTrue: [categoryName := aDragContext sourceData clientData at: #category. self catName value: categoryName. self acceptCat. ^#dropEffectMove]. ^#dropEffectNone! catEnter: aDragContext "Copyright(C) 1996 Masashi Umezawa All Rights Reserved" aDragContext key == #category ifTrue: [^#dropEffectMove]. ^#dropEffectNone! catLeave: aDragContext "Copyright(C) 1996 Masashi Umezawa All Rights Reserved" aDragContext key == #category ifTrue: [^#dropEffectMove]. ^#dropEffectNone! catOver: aDragContext "Copyright(C) 1996 Masashi Umezawa All Rights Reserved" aDragContext key == #category ifTrue: [^#dropEffectMove]. ^#dropEffectNone! clsDrop: aDragContext "Copyright(C) 1996 Masashi Umezawa All Rights Reserved" | className | aDragContext key == #class ifTrue: [className := aDragContext sourceData clientData at: #class. self clsName value: className. self acceptCls. ^#dropEffectMove]. ^#dropEffectNone! clsEnter: aDragContext "Copyright(C) 1996 Masashi Umezawa All Rights Reserved" aDragContext key == #class ifTrue: [^#dropEffectMove]. ^#dropEffectNone! clsLeave: aDragContext "Copyright(C) 1996 Masashi Umezawa All Rights Reserved" aDragContext key == #class ifTrue: [^#dropEffectMove]. ^#dropEffectNone! clsOver: aDragContext "Copyright(C) 1996 Masashi Umezawa All Rights Reserved" aDragContext key == #class ifTrue: [^#dropEffectMove]. ^#dropEffectNone! ! !ExtendedCodingAssistant methodsFor: 'private'! privateDelete: variableNames mode: genMode "Copyright(C) 1996 Masashi Umezawa All Rights Reserved" | targetCalss | Cursor hand showWhile: [genMode == #instVar ifTrue: [targetCalss := selectionClass] ifFalse: [targetCalss := selectionClass class]. variableNames do: [:each | self readOn value ifTrue: [targetCalss removeSelector: each asSymbol]. self writeOn value ifTrue: [targetCalss removeSelector: (each , ':') asSymbol]]]! privateGenerate: variableNames mode: genMode "Copyright(C) 1996 Masashi Umezawa All Rights Reserved" | vars mode assistant | Cursor execute showWhile: [vars := variableNames. mode := genMode. mode == #instVar ifTrue: [assistant := UIDefiner for: self selectionClass] ifFalse: [assistant := UIDefiner for: self selectionClass class]. self readOn value ifTrue: [assistant addReadingAccessFor: vars]. self writeOn value ifTrue: [self dependencyOn value ifTrue: [assistant addDependencyWritingAccessFor: vars] ifFalse: [assistant addWritingAccessFor: vars]]]! ! "-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "! ExtendedCodingAssistant class instanceVariableNames: ''! !ExtendedCodingAssistant class methodsFor: 'interface specs'! windowSpec "Copyright(C) 1996 Masashi Umezawa All Rights Reserved" "UIPainter new openOnClass: self andSelector: #windowSpec" ^#(#FullSpec #window: #(#WindowSpec #label: #(#UserMessage #key: #_Extended_CodingAssistant #defaultString: 'Extended CodingAssistant') #min: #(#Point 40 20) #bounds: #(#Rectangle 245 186 734 519)) #component: #(#SpecCollection #collection: #(#(#ActionButtonSpec #layout: #(#LayoutFrame 0 0.210634 0 0.87988 0 0.392638 0 0.963964) #model: #deleteAll #label: #(#UserMessage #key: #Delete_all #defaultString: 'Delete all') #isDefault: false #defaultable: true) #(#ActionButtonSpec #layout: #(#LayoutFrame 0 0.801636 0 0.87988 0 0.98364 0 0.963964) #model: #close #label: #(#UserMessage #key: #Close #defaultString: 'Close') #defaultable: true) #(#ActionButtonSpec #layout: #(#LayoutFrame 0 0.0143149 0 0.87988 0 0.196319 0 0.963964) #model: #generateAll #label: #(#UserMessage #key: #Generate_all #defaultString: 'Generate all') #isDefault: false #defaultable: true) #(#ActionButtonSpec #layout: #(#LayoutFrame 0 0.605317 0 0.87988 0 0.787321 0 0.963964) #model: #delete #label: #(#UserMessage #key: #Delete #defaultString: 'Delete') #isDefault: false #defaultable: true) #(#ActionButtonSpec #layout: #(#LayoutFrame 0 0.408998 0 0.87988 0 0.588957 0 0.963964) #model: #generate #label: #(#UserMessage #key: #Generate #defaultString: 'Generate') #isDefault: false #defaultable: true) #(#CheckBoxSpec #layout: #(#LayoutOrigin 0 0.0286299 0 0.705706) #model: #readOn #label: #(#UserMessage #key: #read #defaultString: 'read')) #(#CheckBoxSpec #layout: #(#LayoutOrigin 0 0.0286299 0 0.78979) #model: #writeOn #callbacksSpec: #(#UIEventCallbackSubSpec #valueChangeSelector: #writeOnChanged) #label: #(#UserMessage #key: #write #defaultString: 'write')) #(#CheckBoxSpec #layout: #(#LayoutOrigin 0 0.257669 0 0.78979) #name: #dependency #model: #dependencyOn #label: #(#UserMessage #key: #dependency #defaultString: 'dependency')) #(#InputFieldSpec #properties: #(#PropertyListDictionary #dragExitSelector #catLeave: #dragEnterSelector #catEnter: #dropSelector #catDrop: #dragOverSelector #catOver:) #layout: #(#LayoutFrame 0 0.0184049 0 0.102102 0 0.408998 0 0.186186) #model: #catName #callbacksSpec: #(#UIEventCallbackSubSpec #valueChangeSelector: #catNameChanged) #type: #symbol) #(#SequenceViewSpec #layout: #(#LayoutFrame 0 0.0204499 0 0.219219 0 0.413088 0 0.675676) #name: #clsList #flags: 15 #model: #clsList #callbacksSpec: #(#UIEventCallbackSubSpec #valueChangeSelector: #clsListChanged) #useModifierKeys: true #selectionType: #highlight) #(#LabelSpec #layout: #(#LayoutOrigin 0 0.0204499 0 0.012012) #label: #(#UserMessage #key: #category #defaultString: 'Category')) #(#SequenceViewSpec #layout: #(#LayoutFrame 0 0.441718 0 0.216216 0 0.97137 0 0.675676) #name: #varList #flags: 15 #model: #varList #multipleSelections: true #selectionType: #checkMark) #(#InputFieldSpec #properties: #(#PropertyListDictionary #dragExitSelector #clsLeave: #dragEnterSelector #clsEnter: #dropSelector #clsDrop: #dragOverSelector #clsOver:) #layout: #(#LayoutFrame 0 0.439673 0 0.102102 0 0.96728 0 0.186186) #model: #clsName #callbacksSpec: #(#UIEventCallbackSubSpec #valueChangeSelector: #clsNameChanged) #isReadOnly: false #type: #symbol) #(#RadioButtonSpec #layout: #(#LayoutFrame 0 0.447853 0 0.720721 0 0.591002 0 0.780781) #model: #varMode #callbacksSpec: #(#UIEventCallbackSubSpec #valueChangeSelector: #varModeChanged) #label: #(#UserMessage #key: #instance #defaultString: 'instance') #select: #instVar) #(#RadioButtonSpec #layout: #(#LayoutFrame 0 0.640082 0 0.720721 0 0.734151 0 0.780781) #model: #varMode #callbacksSpec: #(#UIEventCallbackSubSpec #valueChangeSelector: #varModeChanged) #label: #(#UserMessage #key: #class #defaultString: 'class') #select: #classVar) #(#RadioButtonSpec #layout: #(#LayoutFrame 0 0.791411 0 0.717718 0 0.985685 0 0.777778) #model: #varMode #callbacksSpec: #(#UIEventCallbackSubSpec #valueChangeSelector: #varModeChanged) #label: #(#UserMessage #key: #class_instance #defaultString: 'class instance') #select: #classInstVar) #(#LabelSpec #layout: #(#LayoutOrigin 0 0.441718 0 0.015015) #label: #(#UserMessage #key: #Class #defaultString: 'Class')))))! ! !ExtendedCodingAssistant class methodsFor: 'examples'! example1 "Copyright(C) 1996 Masashi Umezawa All Rights Reserved" "self example1" self open! ! !ExtendedCodingAssistant class methodsFor: 'message catalog'! catalogJ "Copyright(C) 1996 Masashi Umezawa All Rights Reserved" "Extended Coding Assistant" "メッセージカタログの作成にお使いください" " _Extended_CodingAssistant='コーディングアシスタント拡張版' Delete_all='全て削除' Generate_all='全て生成' Are_You_Sure='よろしいですか?' "! !