ResourceSpecEditor.st
author tz
Mon, 30 Mar 1998 14:10:59 +0200
changeset 876 585929b1fec2
parent 868 f35e6c622a98
child 877 a5461433de58
permissions -rw-r--r--
some cleans
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
867
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
     1
"
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
     2
 COPYRIGHT (c) 1997 by eXept Software AG
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
     3
              All Rights Reserved
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
     4
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
     5
 This software is furnished under a license and may be used
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
     7
 inclusion of the above copyright notice. This software may not
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    10
 hereby transferred.
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    11
"
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    12
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    13
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    14
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    15
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    16
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    17
ToolApplicationModel subclass:#ResourceSpecEditor
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    18
	instanceVariableNames:'modified aspects specClass specSelector tabSelection hasSaved'
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    19
	classVariableNames:''
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    20
	poolDictionaries:''
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    21
	category:'Interface-Framework'
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    22
!
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    23
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    24
!ResourceSpecEditor class methodsFor:'documentation'!
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    25
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    26
copyright
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    27
"
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    28
 COPYRIGHT (c) 1997 by eXept Software AG
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    29
              All Rights Reserved
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    30
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    31
 This software is furnished under a license and may be used
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    32
 only in accordance with the terms of that license and with the
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    33
 inclusion of the above copyright notice. This software may not
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    34
 be provided or otherwise made available to, or used by, any
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    35
 other person.  No title to or ownership of the software is
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    36
 hereby transferred.
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    37
"
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    38
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    39
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    40
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    41
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    42
!
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    43
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    44
documentation
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    45
"
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    46
    Abstract super class for the MenuEditor, DataSetBuilder, 
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    47
    HierarchicalListEditor, and the TabListEditor.
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    48
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    49
    [author:]
876
585929b1fec2 some cleans
tz
parents: 868
diff changeset
    50
         Thomas Zwick, eXept Software AG
867
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    51
"
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    52
! !
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    53
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    54
!ResourceSpecEditor class methodsFor:'instance creation'!
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    55
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    56
openModalOnClass:aClass andSelector:aSelector
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    57
    "Open modal a ListSpecEditor on aClass and aSelector"
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    58
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    59
    ^self new openModalOnClass:aClass andSelector:aSelector
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    60
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    61
!
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    62
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    63
openOnClass:aClass andSelector:aSelector
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    64
    "Open a ListSpecEditor on aClass and aSelector"
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    65
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    66
    ^self new openOnClass:aClass andSelector:aSelector
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    67
! !
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    68
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    69
!ResourceSpecEditor class methodsFor:'accessing'!
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    70
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    71
codeGenerationComment
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    72
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    73
    ^self codeGenerationCommentForClass: self
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    74
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    75
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    76
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    77
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    78
!
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    79
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    80
codeGenerationCommentForClass: aClass
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    81
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    82
    ^'    "This resource specification was automatically generated\',
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    83
     '     by the ', aClass name, ' of ST/X."\\',
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    84
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    85
     '    "Do not manually edit this!! If it is corrupted,\',
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    86
     '     the ', aClass name, ' may not be able to read the specification."'
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    87
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    88
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    89
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    90
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    91
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    92
!
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    93
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    94
resourceType
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    95
868
f35e6c622a98 subclassResponsibility
tz
parents: 867
diff changeset
    96
    ^self subclassResponsibility
867
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    97
! !
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    98
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
    99
!ResourceSpecEditor class methodsFor:'aspects'!
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   100
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   101
aspects
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   102
    "get the aspects for the attributes of the list spec components"
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   103
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   104
    ^#()
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   105
! !
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   106
876
585929b1fec2 some cleans
tz
parents: 868
diff changeset
   107
!ResourceSpecEditor class methodsFor:'startup / release'!
585929b1fec2 some cleans
tz
parents: 868
diff changeset
   108
585929b1fec2 some cleans
tz
parents: 868
diff changeset
   109
preSnapshot
585929b1fec2 some cleans
tz
parents: 868
diff changeset
   110
585929b1fec2 some cleans
tz
parents: 868
diff changeset
   111
    super preSnapshot.
585929b1fec2 some cleans
tz
parents: 868
diff changeset
   112
585929b1fec2 some cleans
tz
parents: 868
diff changeset
   113
    (self settings at: #Instances ifAbsent: [^nil]) do: 
585929b1fec2 some cleans
tz
parents: 868
diff changeset
   114
    [:inst| 
585929b1fec2 some cleans
tz
parents: 868
diff changeset
   115
        inst updateChannels. 
585929b1fec2 some cleans
tz
parents: 868
diff changeset
   116
        inst valueOfEnablingCommitButtons value: false
585929b1fec2 some cleans
tz
parents: 868
diff changeset
   117
    ]
585929b1fec2 some cleans
tz
parents: 868
diff changeset
   118
585929b1fec2 some cleans
tz
parents: 868
diff changeset
   119
585929b1fec2 some cleans
tz
parents: 868
diff changeset
   120
585929b1fec2 some cleans
tz
parents: 868
diff changeset
   121
585929b1fec2 some cleans
tz
parents: 868
diff changeset
   122
! !
585929b1fec2 some cleans
tz
parents: 868
diff changeset
   123
867
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   124
!ResourceSpecEditor methodsFor:'accessing'!
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   125
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   126
modified       
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   127
    "return true, if the resource spec was modified"
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   128
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   129
    ^modified
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   130
!
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   131
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   132
modified: aBoolean         
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   133
    "set the resource spec modified as aBoolean"
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   134
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   135
    modified := aBoolean
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   136
!
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   137
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   138
specClass
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   139
    "get the class where the resource spec is implemented"
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   140
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   141
    ^specClass
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   142
!
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   143
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   144
specClass:aClass
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   145
    "set the class (or name) where the resource spec is (or should be) implemented"
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   146
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   147
    aClass isBehavior ifTrue:[specClass := aClass name]
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   148
                     ifFalse:[specClass := aClass]
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   149
!
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   150
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   151
specSelector
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   152
    "get the method selector of the resource spec"
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   153
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   154
    ^specSelector
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   155
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   156
!
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   157
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   158
specSelector:aSelector
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   159
    "set the method selector of the resource spec"
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   160
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   161
    specSelector := aSelector
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   162
! !
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   163
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   164
!ResourceSpecEditor methodsFor:'aspects'!
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   165
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   166
aspectFor:aKey
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   167
    "get the aspect for a aKey or nil"
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   168
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   169
    ^aspects at: aKey ifAbsent: [super aspectFor:aKey]
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   170
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   171
!
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   172
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   173
tabModel
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   174
    "get the value holder for the tab selection"
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   175
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   176
    |holder|
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   177
    (holder := builder bindingAt:#tabModel) isNil ifTrue:[
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   178
        holder := AspectAdaptor new subject:self; forAspect:#tabSelection.
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   179
        builder aspectAt:#tabModel put:holder.
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   180
    ].
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   181
    ^ holder
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   182
!
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   183
876
585929b1fec2 some cleans
tz
parents: 868
diff changeset
   184
valueOfCanPaste
585929b1fec2 some cleans
tz
parents: 868
diff changeset
   185
585929b1fec2 some cleans
tz
parents: 868
diff changeset
   186
    |holder|
585929b1fec2 some cleans
tz
parents: 868
diff changeset
   187
    holder := super valueOfCanPaste.
585929b1fec2 some cleans
tz
parents: 868
diff changeset
   188
    holder value: self class clipboard notNil.
585929b1fec2 some cleans
tz
parents: 868
diff changeset
   189
    ^ holder
585929b1fec2 some cleans
tz
parents: 868
diff changeset
   190
585929b1fec2 some cleans
tz
parents: 868
diff changeset
   191
585929b1fec2 some cleans
tz
parents: 868
diff changeset
   192
!
585929b1fec2 some cleans
tz
parents: 868
diff changeset
   193
867
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   194
valueOfEnableMovingIn
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   195
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   196
    ^builder booleanValueAspectFor: #valueOfEnableMovingIn
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   197
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   198
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   199
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   200
!
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   201
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   202
valueOfEnableMovingOut
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   203
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   204
    ^builder booleanValueAspectFor: #valueOfEnableMovingOut
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   205
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   206
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   207
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   208
!
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   209
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   210
valueOfEnableMovingUpOrDown
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   211
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   212
    ^builder booleanValueAspectFor: #valueOfEnableMovingUpOrDown
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   213
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   214
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   215
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   216
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   217
! !
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   218
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   219
!ResourceSpecEditor methodsFor:'building'!
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   220
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   221
buildFromResourceSpec: aResourceSpec
868
f35e6c622a98 subclassResponsibility
tz
parents: 867
diff changeset
   222
    "concrete subclass has to reimplement this method
867
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   223
     in order to build its resource spec from aResourceSpec"
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   224
868
f35e6c622a98 subclassResponsibility
tz
parents: 867
diff changeset
   225
    ^self subclassResponsibility
867
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   226
! !
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   227
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   228
!ResourceSpecEditor methodsFor:'change & update'!
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   229
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   230
update:something with:aParameter from:someObject
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   231
    "one of my aspects has changed; update modified channel for the commit buttons"
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   232
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   233
    self valueOfEnablingCommitButtons value: true 
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   234
876
585929b1fec2 some cleans
tz
parents: 868
diff changeset
   235
!
585929b1fec2 some cleans
tz
parents: 868
diff changeset
   236
585929b1fec2 some cleans
tz
parents: 868
diff changeset
   237
updateAllToolInstances
585929b1fec2 some cleans
tz
parents: 868
diff changeset
   238
585929b1fec2 some cleans
tz
parents: 868
diff changeset
   239
    self allToolInstances do: [:inst| inst updateChannels]
585929b1fec2 some cleans
tz
parents: 868
diff changeset
   240
585929b1fec2 some cleans
tz
parents: 868
diff changeset
   241
!
585929b1fec2 some cleans
tz
parents: 868
diff changeset
   242
585929b1fec2 some cleans
tz
parents: 868
diff changeset
   243
updateChannels
585929b1fec2 some cleans
tz
parents: 868
diff changeset
   244
585929b1fec2 some cleans
tz
parents: 868
diff changeset
   245
    self valueOfCanPaste
585929b1fec2 some cleans
tz
parents: 868
diff changeset
   246
585929b1fec2 some cleans
tz
parents: 868
diff changeset
   247
867
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   248
! !
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   249
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   250
!ResourceSpecEditor methodsFor:'help'!
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   251
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   252
defaultInfoLabel
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   253
    "get default label for the info bar"
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   254
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   255
    |cls|
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   256
    (specClass isSymbol and: [(cls := Smalltalk at: specClass) isClass])
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   257
    ifTrue:
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   258
    [
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   259
        (cls class implements: specSelector)
876
585929b1fec2 some cleans
tz
parents: 868
diff changeset
   260
        ifFalse: 
585929b1fec2 some cleans
tz
parents: 868
diff changeset
   261
        [
585929b1fec2 some cleans
tz
parents: 868
diff changeset
   262
            ^specSelector isNil 
585929b1fec2 some cleans
tz
parents: 868
diff changeset
   263
                ifTrue:  [specClass, ' >> ? (no selector defined)']
585929b1fec2 some cleans
tz
parents: 868
diff changeset
   264
                ifFalse: [specClass, ' >> ', specSelector, ' (not implemented)']
585929b1fec2 some cleans
tz
parents: 868
diff changeset
   265
        ].
867
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   266
        ^specClass, ' >> ', specSelector
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   267
    ].
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   268
    ^'No class and selector defined.'
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   269
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   270
! !
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   271
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   272
!ResourceSpecEditor methodsFor:'initialization'!
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   273
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   274
initialize
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   275
    "initialize the flags and the aspects"
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   276
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   277
    super initialize.
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   278
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   279
    hasSaved := modified := false.
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   280
    aspects  := IdentityDictionary new.
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   281
    tabSelection := 0.
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   282
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   283
    self class aspects do:
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   284
    [:aKey|
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   285
        |holder|
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   286
        aspects at:aKey put: (holder := ValueHolder new).
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   287
        holder addDependent: self
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   288
    ].
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   289
! !
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   290
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   291
!ResourceSpecEditor methodsFor:'private'!
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   292
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   293
askForItemModification
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   294
    "ask for resource item modification"
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   295
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   296
    self valueOfEnablingCommitButtons value
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   297
    ifTrue:
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   298
    [          
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   299
        ((YesNoBox title:'Resource item was modified!!\Save it?\' withCRs)        
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   300
            noText:'No';
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   301
            yesText:'Yes';
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   302
            showAtPointer;
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   303
            accepted) 
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   304
        ifFalse: 
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   305
        [
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   306
            self valueOfEnablingCommitButtons value: false. 
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   307
            modified := false.
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   308
            ^true
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   309
        ].
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   310
        self accept
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   311
    ].
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   312
    ^true
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   313
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   314
!
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   315
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   316
askForListModification
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   317
    "ask for resource modification"
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   318
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   319
    modified
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   320
    ifTrue:
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   321
    [
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   322
        ((YesNoBox title: 'List was modified!!')        
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   323
            noText:'Cancel';
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   324
            yesText:'Waste it and proceed';
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   325
            showAtPointer;
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   326
            accepted) ifFalse: [^false].
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   327
        modified := false
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   328
    ].
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   329
    ^true
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   330
!
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   331
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   332
askForModification
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   333
    "ask first for item and then for resource modification"
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   334
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   335
    ^self askForItemModification and: [self askForListModification]
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   336
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   337
!
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   338
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   339
resolveClassNamed
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   340
    "get current class or nil"
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   341
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   342
    ^Smalltalk resolveName:specClass inClass:self class
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   343
!
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   344
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   345
resourceMessage: aString
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   346
    "extract from aString the specClass and the specSelector"
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   347
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   348
    (aString notNil and: [self askForModification]) 
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   349
    ifTrue:
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   350
    [            
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   351
        |msg cls sel|
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   352
        msg := aString asCollectionOfWords.
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   353
        (msg size == 2 and:
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   354
        [(cls := self resolveName:(msg at:1)) notNil])
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   355
        ifTrue:
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   356
        [
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   357
            specClass := cls name.
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   358
            specSelector := (msg at: 2) asSymbol.
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   359
            ^true
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   360
        ]
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   361
    ].
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   362
    ^false
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   363
!
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   364
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   365
updateHistory
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   366
    "if there was loaded a resource spec, update the history"
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   367
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   368
    |cls|             
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   369
    ((cls := self resolveClassNamed) notNil and: [cls class implements: specSelector])
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   370
    ifTrue:
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   371
    [
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   372
        |className message|
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   373
        specClass isClass  ifTrue: [className := specClass name].
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   374
        specClass isString ifTrue: [className := specClass].
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   375
        message := className, ' ', specSelector.
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   376
        self addToHistory: message -> #loadFromMessage:
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   377
    ]
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   378
! !
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   379
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   380
!ResourceSpecEditor methodsFor:'queries'!
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   381
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   382
hasSaved
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   383
    "return true if resource spec has saved"
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   384
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   385
    ^hasSaved
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   386
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   387
!
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   388
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   389
isStandAlone
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   390
    "return true if the editor was not started from another tool"
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   391
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   392
    ^self masterApplication isNil
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   393
! !
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   394
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   395
!ResourceSpecEditor methodsFor:'selection'!
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   396
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   397
tabSelection
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   398
    "returns selected tab index or 0"
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   399
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   400
    ^tabSelection
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   401
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   402
! !
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   403
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   404
!ResourceSpecEditor methodsFor:'startup / release'!
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   405
876
585929b1fec2 some cleans
tz
parents: 868
diff changeset
   406
allButOpenInterface:aSymbol
585929b1fec2 some cleans
tz
parents: 868
diff changeset
   407
585929b1fec2 some cleans
tz
parents: 868
diff changeset
   408
    super allButOpenInterface:aSymbol.
585929b1fec2 some cleans
tz
parents: 868
diff changeset
   409
585929b1fec2 some cleans
tz
parents: 868
diff changeset
   410
    self class settings 
585929b1fec2 some cleans
tz
parents: 868
diff changeset
   411
        at: #Instances 
585929b1fec2 some cleans
tz
parents: 868
diff changeset
   412
        put: ((self class settings at: #Instances ifAbsent: [OrderedCollection new]) add: self; yourself).
585929b1fec2 some cleans
tz
parents: 868
diff changeset
   413
585929b1fec2 some cleans
tz
parents: 868
diff changeset
   414
    ^builder
585929b1fec2 some cleans
tz
parents: 868
diff changeset
   415
585929b1fec2 some cleans
tz
parents: 868
diff changeset
   416
!
585929b1fec2 some cleans
tz
parents: 868
diff changeset
   417
867
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   418
closeRequest
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   419
    "first ask for modification then send close request to super"
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   420
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   421
    self askForModification ifTrue: [super closeRequest]
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   422
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   423
!
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   424
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   425
loadFromMessage:aString
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   426
    "load a spec from class and selector"
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   427
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   428
    (aString notNil and: [self askForModification]) 
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   429
    ifTrue:
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   430
    [            
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   431
        |msg cls sel|
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   432
        msg := aString asCollectionOfWords.
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   433
        (msg size == 2 and:
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   434
        [(cls := self resolveName:(msg at:1)) notNil and:
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   435
        [cls class implements: (sel := (msg at: 2) asSymbol)]])
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   436
        ifTrue:
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   437
        [               
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   438
            self isStandAlone 
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   439
                ifFalse: [self buildFromResourceSpec: (cls perform: sel)]
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   440
                ifTrue:  [self buildFromClass: (specClass := cls name) andSelector: (specSelector := sel)].
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   441
            ^true
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   442
        ]
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   443
    ].
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   444
    ^false
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   445
!
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   446
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   447
openModalOnClass:aClass andSelector:aSelector
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   448
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   449
    specClass    := aClass isClass ifTrue: [aClass name] ifFalse: [aClass].
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   450
    specSelector := aSelector.
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   451
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   452
    super openInterfaceModal.
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   453
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   454
!
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   455
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   456
openModalOnResourceSpec: aListSpec
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   457
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   458
    self buildFromResourceSpec: aListSpec.
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   459
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   460
    super openInterfaceModal.
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   461
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   462
!
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   463
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   464
openOnClass:aClass andSelector:aSelector
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   465
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   466
    specClass    := aClass isClass ifTrue: [aClass name] ifFalse: [aClass].
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   467
    specSelector := aSelector.
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   468
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   469
    super openInterface.
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   470
!
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   471
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   472
postOpenWith:aBuilder
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   473
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   474
    super postOpenWith:aBuilder.
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   475
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   476
    self buildFromClass: specClass andSelector: specSelector. 
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   477
876
585929b1fec2 some cleans
tz
parents: 868
diff changeset
   478
!
585929b1fec2 some cleans
tz
parents: 868
diff changeset
   479
585929b1fec2 some cleans
tz
parents: 868
diff changeset
   480
uninitialize
585929b1fec2 some cleans
tz
parents: 868
diff changeset
   481
585929b1fec2 some cleans
tz
parents: 868
diff changeset
   482
    super uninitialize.
585929b1fec2 some cleans
tz
parents: 868
diff changeset
   483
585929b1fec2 some cleans
tz
parents: 868
diff changeset
   484
    (self class settings at: #Instances ifAbsent: [^nil]) remove: self ifAbsent: nil 
585929b1fec2 some cleans
tz
parents: 868
diff changeset
   485
867
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   486
! !
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   487
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   488
!ResourceSpecEditor methodsFor:'user actions'!
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   489
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   490
accept
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   491
    "invoked by the OK button; disable the commit buttons and set modified"
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   492
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   493
    self valueOfEnablingCommitButtons value: false.
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   494
    modified := true
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   495
!
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   496
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   497
doBrowseClass
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   498
    "open a System Browser on the specClass and specSelector"
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   499
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   500
    |cls|
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   501
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   502
    (cls := self resolveClassNamed) notNil 
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   503
        ifTrue: [SystemBrowser openInClass:cls class selector: specSelector] 
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   504
        ifFalse:[self information:'No class defined!!']
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   505
!
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   506
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   507
doEditImage
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   508
    "open the Image Editor on a resource retriever and icon selector"
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   509
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   510
    |cls resourceClass resourceSelector imageResourceMessage readStream|
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   511
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   512
    cls := self resolveName: specClass.
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   513
    cls isNil ifTrue:[
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   514
        ^ self information:'No valid class defined!!'.
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   515
    ].
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   516
    (aspects at:#icon) value size > 0
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   517
        ifTrue:  [resourceSelector := (aspects at:#icon) value]
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   518
        ifFalse: [resourceSelector := #icon].
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   519
    (aspects at:#retriever) value size > 0
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   520
        ifTrue:  [resourceClass := (aspects at:#retriever) value]
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   521
        ifFalse: [resourceClass := cls withAllSuperclasses detect: [:cls| cls class implements: resourceSelector] ifNone: [cls]].
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   522
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   523
    (imageResourceMessage := ImageEditor openModalOnClass: resourceClass andSelector: resourceSelector) notNil
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   524
    ifTrue:
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   525
    [
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   526
        readStream := imageResourceMessage readStream.
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   527
        resourceClass := (readStream upTo: $ ) asSymbol.
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   528
        resourceSelector := readStream upToEnd asSymbol.
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   529
        resourceClass size > 0 ifTrue: [(aspects at:#retriever) value: resourceClass].
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   530
        resourceSelector size > 0 ifTrue: [(aspects at:#icon) value: resourceSelector. self valueOfEnablingCommitButtons value: true]
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   531
    ]
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   532
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   533
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   534
!
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   535
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   536
doLoad
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   537
    "open a Resource Selection Browser in order to get a resource message"
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   538
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   539
    self loadFromMessage: 
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   540
        (ResourceSelectionBrowser
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   541
            request: 'Load ', self class resourceType asUppercaseFirst, ' Spec From Class'
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   542
            onSuperclass: nil
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   543
            andClass: specClass
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   544
            andSelector: specSelector ? self class resourceType
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   545
            withResourceTypes: (Array with: self class resourceType))
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   546
!
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   547
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   548
doNew
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   549
    "first ask for modification; then clean specClass and specSelector,
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   550
     but only, if the editor is opened as stand alone;
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   551
     finally make a build of a resource spec containing no items"
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   552
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   553
    self askForModification
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   554
    ifTrue: 
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   555
    [
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   556
        self isStandAlone ifTrue: [specClass := specSelector := nil].
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   557
        self buildFromClass: nil andSelector: self class resourceType.
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   558
        ^true
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   559
    ].
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   560
    ^false
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   561
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   562
!
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   563
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   564
doSave
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   565
    "before saving ask for modification; if no specClass and specSelector
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   566
     is defined, do save as"
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   567
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   568
    self askForItemModification.
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   569
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   570
    (specClass isNil or:[specSelector isNil]) ifTrue:[
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   571
        self doSaveAs.
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   572
        ^false
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   573
    ].
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   574
    ^true
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   575
!
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   576
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   577
doSaveAs
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   578
    "first ask for modification; 
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   579
     then open a ResourceSelectionBrowser; 
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   580
     after that extract the resource message;
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   581
     finally do save and make a new build"
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   582
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   583
    |resourceMessage|  
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   584
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   585
    self askForItemModification.
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   586
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   587
    (resourceMessage := ResourceSelectionBrowser
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   588
            request: 'Save ', self class resourceType asUppercaseFirst, ' Spec In Class'
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   589
            onSuperclass: #Object
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   590
            andClass: specClass
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   591
            andSelector: specSelector ? self class resourceType
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   592
            withResourceTypes: (Array with: self class resourceType)) notNil
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   593
    ifTrue:
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   594
    [  
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   595
        modified := false.
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   596
        (self resourceMessage: resourceMessage)
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   597
        ifTrue:
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   598
        [
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   599
            self doSave.
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   600
            self buildFromClass: specClass andSelector: specSelector.
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   601
            ^true
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   602
        ]
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   603
    ].
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   604
    ^false
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   605
! !
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   606
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   607
!ResourceSpecEditor class methodsFor:'documentation'!
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   608
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   609
version
876
585929b1fec2 some cleans
tz
parents: 868
diff changeset
   610
    ^ '$Header: /cvs/stx/stx/libview2/ResourceSpecEditor.st,v 1.3 1998-03-30 12:10:21 tz Exp $'
867
9da1ff2ac50d initial checkin
tz
parents:
diff changeset
   611
! !