From VisualWorks®, 7.6 of February 1, 2008 on February 1, 2008 at 12:33:41 pm (Dialog confirm: 'You are filing-in a Parcel source file!\\While this is possible it will not have\the same effect as loading the parcel.\None of the Parcel''s prerequisites will\be loaded and none of its load actions\will be performed.\\Are you sure you want to file-in?' withCRs) ifFalse: [self error: 'Parcel file-in abandoned. Choose terminate or close.'] <class> <name>NetRef</name> <environment>Net</environment> <super>Core.Object</super> <private>false</private> none <imports></imports> <category>Net-Clients</category> <attributes> <package>NetConfigTool</package> </attributes> </class> <comment> Net.NetRef
NetRef is used to save/restore objects from the Net Settings
</comment> <class> <name>DeliveryMonitor</name> <environment>Net</environment> <super>UI.ApplicationModel</super> <private>false</private> none progress letter deliveryClient resultsQueue deliveryProcess <imports></imports> <category>Net-Mail</category> <attributes> <package>NetConfigTool</package> </attributes> </class> <comment> Net.DeliveryMonitor
DeliveryMonitor creates separate process for the mail delivery and while sending messages shows the progress Instance Variables: progress <ValueHolder> number of messages to deliver letter <Letter> letter for delivery deliveryClient <NetClient> SMTP client resultsQueue <SharedQueue> delivery queue deliveryProcess <Process> delivery process Shared Variables: CollapseOnDelivery <Boolean> indicates if the window should be collapsed on delivery DeliveryPriority <Number> priority
</comment> <class> <name>HttpProxyExceptions</name> <environment>Net</environment> <super>UI.ApplicationModel</super> <private>false</private> none httpProxyExceptions parent <imports></imports> <category>Net-Clients</category> <attributes> <package>NetConfigTool</package> </attributes> </class> <comment> Net.HttpProxyExceptions
A HttpProxyException provides an user-interface for editing a http proxy exceptions. Instance Variables: httpProxyExceptions <String> proxy exceptions
</comment> <class> <name>NetSettingsPage</name> <environment>Net</environment> <super>Tools.SettingsManagerPage</super> <private>false</private> none userPreferences userListOwner <imports></imports> <category>Net-Clients</category> <attributes> <package>NetConfigTool</package> </attributes> </class> <comment> Net.NetSettingsPage
A NetSettingsPage provides an user-interface for editing a Settings properties. Instance Variables: identityListAspect <SelectionInList> identities list serverListAspect <SelectionInList> mail server list netUser <NetUser> selected instance of NetClient hostSpec <HostSpec> selected instance of HostSpec Shared Variables: UserPreferences <Dictionary> The user preference profile is a Dictionary with of value models against subject keys
</comment> <class> <name>AddNetUser</name> <environment>Net</environment> <super>UI.SimpleDialog</super> <private>false</private> none parent <imports></imports> <category>Net-Clients</category> <attributes> <package>NetConfigTool</package> </attributes> </class> <comment> Net.AddNetUser
A AddNetUser is an application model designed to add new user for UISettings. The only reason to have this class that TabbedDialog as supperclass for UISettings doesn't support two models. Instance Variables: parent <UISettings> an instance of UISettings
</comment> <class> <name>NetSettings</name> <environment>Net</environment> <super>Tools.GenericSettingDescriptor</super> <private>false</private> none passwordKey passwordEncoding <imports></imports> <category>Net-Clients</category> <attributes> <package>NetConfigTool</package> </attributes> </class> <comment> Net.NetSettings
Settings is a central repository for various preference items related to Internet Connectivity clients. The Setting class is the model for application model UISettings. Instance Variables: Shared Variables: Registry <IdentityDictionary> holds all settings
</comment> <class> <name>HttpProxyPage</name> <environment>Net</environment> <super>Net.NetSettingsPage</super> <private>false</private> none redirectRequest proxyExceptions <imports></imports> <category>Net-Clients</category> <attributes> <package>NetConfigTool</package> </attributes> </class> <comment> Net.HttpProxyPage
HttpPage creates Http UI Settings page Instance Variables: proxyExceptions <Collection of Strings> do not use proxy servers for domains in the proxyExceptions list redirectRequest <ValueModel of Boolean> describe wether or not redirect the request
</comment> <class> <name>MailServerPage</name> <environment>Net</environment> <super>Net.NetSettingsPage</super> <private>false</private> none serverListAspect hostSpec <imports></imports> <category>Net-Clients</category> <attributes> <package>NetConfigTool</package> </attributes> </class> <comment> Net.MailServerPage
MailPage creates the UI page for the mail server settings Instance Variables: hostSpec <HostSpec> name of the selected mail server serverListAspect <SelectionInList> mail server list
</comment> <class> <name>UserPage</name> <environment>Net</environment> <super>Net.NetSettingsPage</super> <private>false</private> none identityListAspect netUser <imports></imports> <category>Net-Clients</category> <attributes> <package>NetConfigTool</package> </attributes> </class> <comment> Net.UserPage
A UserPage provides an user-interface for editing a Settings properties. Instance Variables: identityListAspect <SelectionInList> identities list serverListAspect <SelectionInList> mail server list netUser <NetUser> selected instance of NetClient hostSpec <HostSpec> selected instance of HostSpec Shared Variables: UserPreferences <Dictionary> The user preference profile is a Dictionary with of value models against subject keys
</comment> <name>Registry</name> <environment>Net.NetSettings</environment> <private>false</private> <constant>false</constant> <category>registry</category> <attributes> <package>NetConfigTool</package> </attributes> <name>DeliveryPriority</name> <environment>Net.DeliveryMonitor</environment> <private>false</private> <constant>false</constant> <category>constants</category> <initializer>30</initializer> <attributes> <package>NetConfigTool</package> </attributes> <name>CollapseOnDelivery</name> <environment>Net.DeliveryMonitor</environment> <private>false</private> <constant>false</constant> <category>settings</category> <initializer>false</initializer> <attributes> <package>NetConfigTool</package> </attributes> <methods> Net.NetRef class <category>persistence</category>
restoreValueFrom: anXMLElement ^NetSettings restoreRefFrom: anXMLElement
</methods> <methods> Net.DeliveryMonitor <category>initialize-release</category>
letterForDelivery: let deliveryClient: mailClient self letterForDelivery: let deliveryClient: mailClient resultsTo: nil
letterForDelivery: let deliveryClient: mailClient resultsTo: sharedQueueOrNil letter := let. deliveryClient := mailClient. resultsQueue := sharedQueueOrNil
</methods> <methods> Net.DeliveryMonitor <category>actions</category>
deliver | estimatedSize increment window | estimatedSize := 1 max: letter size. increment := 1.0 / estimatedSize. self allButOpenInterface: #windowSpec. window := self builder window. window openAroundCursorWithExtent: builder window minimumSize andType: #normal. self setWindowLabel. CollapseOnDelivery ifTrue: [window collapse]. deliveryProcess := [[deliveryClient sendLetter: letter. [self closeRequest] uiEventFor: window. self noteSuccess] on: MailIncrementNotification do: [:not | [ [self progress value: progress value + (not ticks * increment)] uiEventFor: window] fork. not resume]] forkAt: DeliveryPriority
</methods> <methods> Net.DeliveryMonitor <category>private</category>
noteFailure resultsQueue isNil ifTrue: [^self]. resultsQueue nextPut: false
noteSuccess resultsQueue isNil ifTrue: [^self]. resultsQueue nextPut: true
sendLetter [deliveryClient sendLetter: letter] on: OsInaccessibleError do: [:ex | #{LetterWriter} ifDefinedDo: [:letterWriter| letterWriter delayDeliveryOf: letter] elseDo: [ex pass]]
setWindowLabel self builder window label: ((#DeliveringMailFor1s << #net >> 'Delivering mail for <1s>') expandMacrosWith: (letter subject ))
</methods> <methods> Net.DeliveryMonitor <category>aspects</category>
progress "This method was generated by UIDefiner. Any edits made here may be lost whenever methods are automatically defined. The initialization provided below may have been preempted by an initialize method." ^progress isNil ifTrue: [progress := 0.0 asValue] ifFalse: [progress]
</methods> <methods> Net.DeliveryMonitor class <category>instance creation</category>
deliver: letterForDelivery using: deliveryClient | app | app := self new. app letterForDelivery: letterForDelivery deliveryClient: deliveryClient. ^app
deliver: letterForDelivery using: deliveryClient resultsTo: sharedQueueOrNil | app | app := self new. app letterForDelivery: letterForDelivery deliveryClient: deliveryClient resultsTo: sharedQueueOrNil. ^app
</methods> <methods> Net.HttpProxyExceptions <category>aspects</category>
domainCollectionAsString | aStream col | col := parent proxyExceptions. ^col isEmpty ifTrue: [String new] ifFalse: [aStream := (String new: 64) writeStream. col do: [:element | aStream nextPutAll: element] separatedBy: [aStream nextPut: $;]. aStream contents]
httpProxyExceptions "This method was generated by UIDefiner. Any edits made here may be lost whenever methods are automatically defined. The initialization provided below may have been preempted by an initialize method." ^httpProxyExceptions isNil ifTrue: [httpProxyExceptions := self domainCollectionAsString asValue] ifFalse: [httpProxyExceptions]
parent: aHttpPage parent := aHttpPage
</methods> <methods> Net.HttpProxyExceptions <category>actions</category>
acceptHttpExceptions | proxyExceptions sc token | proxyExceptions := OrderedCollection new: 10. sc := self httpProxyExceptions value string readStream. [ sc atEnd ] whileFalse: [token := sc upTo: $;. token notEmpty ifTrue: [ proxyExceptions add: token trimBlanks]]. parent acceptProxyExceptions: proxyExceptions. self cancelHttpException.
cancelHttpException ^self closeRequest
</methods> <methods> Net.NetSettingsPage <category>accessing settings</category>
registry ^self class registry
resetUserPreferences userPreferences := Dictionary new. ^userPreferences
userPreferences ^userPreferences isNil ifTrue: [ self resetUserPreferences] ifFalse: [ userPreferences ]
userPreferencesAt: aSymbol ^self userPreferences at: aSymbol
userPreferencesAt: aSymbol ifAbsentPut: aBlock ^self userPreferences at: aSymbol ifAbsentPut: aBlock
userPreferencesAt: aSymbol put: anObject self userPreferences at: aSymbol put: anObject
</methods> <methods> Net.NetSettingsPage <category>accessing</category>
settings ^Array with: Net.NetSettings new
userListOwner ^userListOwner
</methods> <methods> Net.NetSettingsPage <category>notifications</category>
triggered manager triggerChannel value ifTrue: [self accept] ifFalse: [ self reset ]
</methods> <methods> Net.NetSettingsPage <category>actions</category>
accept
importSnapshots: aCollection NetSettings importSnapshots: aCollection first stateNodes. self reset
reset
</methods> <methods> Net.NetSettingsPage <category>initialize-release</category>
manager: aSettingsManager super manager: aSettingsManager. userListOwner := manager pageWithId: #(net userIdentities). manager triggerChannel onChangeSend: #triggered to: self
</methods> <methods> Net.NetSettingsPage class <category>accessing settings</category>
registry ^Settings
</methods> <methods> Net.NetSettingsPage class <category>class initialization</category>
initialize "UISettings initialize " ( NetSettings dependents includes: self ) ifFalse: [ NetSettings addDependent: self ].
obsolete "Break dependencies" [NetSettings dependents includes: self] whileTrue: [NetSettings removeDependent: self]. ^super obsolete
</methods> <methods> Net.AddNetUser <category>accessing</category>
parent ^parent isNil ifTrue: [ parent := UserPage new ] ifFalse: [ parent ]
parent: aUISettings parent := aUISettings
</methods> <methods> Net.AddNetUser <category>accessing settings</category>
userNet ^self parent userNet
userPreferencesAt: aSymbol ^self parent userPreferencesAt: aSymbol
userPreferencesAt: aSymbol ifAbsentPut: aBlock ^self parent userPreferencesAt: aSymbol ifAbsentPut: aBlock
userPreferencesAt: aSymbol put: anObject self parent userPreferencesAt: aSymbol put: anObject
</methods> <methods> Net.AddNetUser <category>aspects</category>
accountIdentity ^self userPreferencesAt: #accountIdentity ifAbsentPut: [ (self parent netUser isNil ifTrue: [ '' ] ifFalse: [ self parent netUser account ]) asValue ]
emailAddressIdentity ^self userPreferencesAt: #emailAddressIdentity ifAbsentPut: [ (self parent netUser isNil ifTrue: [ '' ] ifFalse: [ self parent netUser mailAddress ] ) asValue]
fullNameIdentity ^self userPreferencesAt: #fullNameIdentity ifAbsentPut: [ (self parent netUser isNil ifTrue: [ '' ] ifFalse: [ self parent netUser fullName ]) asValue]
passwordIdentity ^self userPreferencesAt: #passwordIdentity ifAbsentPut: [ (self parent netUser isNil ifTrue: [ '' ] ifFalse: [ self parent netUser password ]) asValue]
rememberPassword ^self userPreferencesAt: #rememberPassword ifAbsentPut: [ | pass | pass := self parent netUser notNil ifTrue: [ self parent netUser savePassword]. (pass isNil ifTrue: [false] ifFalse: [ pass ]) asValue]
userNameIdentity ^self userPreferencesAt: #userNameIdentity ifAbsentPut: [ (self parent netUser isNil ifTrue: [ ''] ifFalse: [ self parent netUser username ]) asValue]
verifyPasswordIdentity ^self userPreferencesAt: #verifyPasswordIdentity ifAbsentPut: [ nil asValue ].
</methods> <methods> Net.AddNetUser <category>actions</category>
okToAddIdentity self rememberPassword value ifTrue: [ (self passwordIdentity value = self verifyPasswordIdentity value) ifFalse: [ self passwordIdentity value: ''. self verifyPasswordIdentity value: ''. ^Dialog warn: (#NewPasswordWasNotCorrectlyConfirmed << #net >> 'The new password was not correctly confirmed')]]. ((self fullNameIdentity value isNil or: [self fullNameIdentity value isEmpty]) or: [ self userNameIdentity value isNil or: [self userNameIdentity value isEmpty]]) ifTrue: [ ^Dialog warn: (#UserNameIsEmpty << #net >> 'User name is empty') ]. self parent updateNetUser. self accept value: true
</methods> <methods> Net.AddNetUser class <category>instance creation</category>
openWithSpec: aSpec parent: uiSettings ^self openOn: (self new parent: uiSettings) withSpec: aSpec.
</methods> <methods> Net.NetSettings <category>persistence</category>
addStateXmlElementsTo: rootElement self class addStateXmlElementsTo: rootElement
restoreFrom: aSettingSnapshot self class importSnapshots: aSettingSnapshot stateNodes
</methods> <methods> Net.NetSettings <category>initialize-release</category>
initialize super initialize. id := #( net )
</methods> <methods> Net.NetSettings class <category>accessing settings</category>
passwordEncodingForPersistence ^passwordEncoding ifNil: [ Locale current defaultEncoding ]
passwordEncodingForPersistence: aSymbol passwordEncoding := aSymbol
registry ^Settings registry
</methods> <methods> Net.NetSettings class <category>private</category>
collection: aCollection asXmlNode: aString | node | node := self nodeForClass: 'OrderedCollection' tag: aString. aCollection do: [ :each | node addNode: (each asXmlNode: 'item' ) ]. ^node
createNetRefFor: aNetClient tag: aString | node attr | node := self nodeForClass: 'Net.NetRef' tag: aString. attr := node attributes. attr add: ( XML.Attribute name: 'fullName' value: aNetClient fullName ). ^node
createNetRefServerFor: aHostSpec tag: aString | node attr | node := self nodeForClass: 'Net.NetRef' tag: aString. attr := node attributes. attr add: ( XML.Attribute name: 'name' value: aHostSpec name ). ^node
createPasswordNode: passString tag: aString | pass node attr cipher bf output stream | cipher := Security.Blowfish key: self passwordKey. bf := Security.BlockPadding on: cipher. pass := bf encrypt: (ByteArray fromString: passString encoding: self passwordEncodingForPersistence). node := self nodeForClass: 'Net.NetRef' tag: aString. attr := node attributes. output := (ByteArray new: 64) writeStream. stream := EncodedStream on: output encodedBy: Base64StreamEncoder asEncoder. stream nextPutAll: (pass asStringEncoding: #'iso-8859-1'). stream close. attr add: ( XML.Attribute name: 'password' value: stream encodedContents asString ). ^node
dictionary: aDict asXmlNode: aString | node entry | node := self nodeForClass: 'Dictionary' tag: aString. aDict keysAndValuesDo: [ :key :value | entry := XML.Element tag: 'entry'. node addNode: entry. entry addNode: ( key asXmlNode: 'key' ). entry addNode: ( value asXmlNode: 'value' ) ]. ^node
netObject: aClass asXmlNode: aString | value root node | aString = #defaultIdentity ifTrue: [ ^self createNetRefFor: aClass tag: aString ]. (aString = #defaultIncomingServer or: [ aString = #defaultOutgoingServer ]) ifTrue: [ ^self createNetRefServerFor: aClass tag: aString ]. root := self nodeForClass: aClass class fullName tag: aString. aClass class instVarNames do: [:ins | (value := aClass instVarAt: (aClass class instVarIndexFor: ins)) notNil ifTrue: [ node := value class name = #NetUser ifTrue: [ self createNetRefFor: value tag: ins ] ifFalse: [ ins = 'password' ifTrue: [ self createPasswordNode: value tag: ins ] ifFalse: [ value asXmlNode: ins]]. root addNode: node]]. ^root
nodeForClass: aClassName tag: aString | node | node := XML.Element tag: aString. node attributes: (OrderedCollection with: ( XML.Attribute name: 'smalltalkClass' value: aClassName )). ^node
object: anObject asXmlNode: aString | node | node := self nodeForClass: anObject class fullName tag: aString. node addNode: (XML.Text text: anObject printString ). ^node
restoreClassFrom: anXMLElement ^(anXMLElement valueOfAttribute: 'smalltalkClass' ifAbsent: [^nil]) asSymbol asQualifiedReference value.
restoreNetObject: anObject from: anXMLElement | val xmlColl | xmlColl := anXMLElement realElements. xmlColl do: [ :el | val := el restoreValue. anObject perform: (el tag type, ':') asSymbol with: val]. ^anObject
restorePassword: decString | cipher bf stream output char input bArr | input := decString asByteArray readStream. stream := EncodedStream on: input encodedBy: Base64StreamEncoder asEncoder. output := (ByteArray new: 64) writeStream. [ (char := stream next) notNil ] whileTrue: [ output nextPut: char ]. bArr := ByteArray fromString: output contents asString encoding: #'iso-8859-1'. cipher := Security.Blowfish key: self passwordKey. bf := Security.BlockPadding on: cipher. ^( bf decrypt: bArr) asStringEncoding: self passwordEncodingForPersistence.
restoreRefFrom: anXMLElement | tag val | tag := anXMLElement tag type asSymbol. tag = #password ifTrue: [val := anXMLElement valueOfAttribute: 'password' ifAbsent: [ nil]. ^(self restorePassword: val) asString ]. (tag = #defaultIdentity or: [ tag = #netUser ]) ifTrue: [ val := anXMLElement valueOfAttribute: 'fullName' ifAbsent: [ nil]. ^Settings detectIdentityByName: val ]. (tag = #defaultIncomingServer or: [ tag = #defaultOutgoingServer ]) ifTrue: [ val := anXMLElement valueOfAttribute: 'name' ifAbsent: [ nil]. ^Settings detectMailHostByName: val ].
string: valString asXmlNode: aString | node | node := self nodeForClass: 'String' tag: aString. node addNode: (XML.Text text: valString ). ^node
</methods> <methods> Net.NetSettings class <category>password key</category>
defaultKey ^#[16r2b 16r7e 16r15 16r16 16r28 16rae 16rd2 16ra6 16rab 16rf7 16r15 16r88 16r09 16rcf 16r4f 16r3c].
passwordKey ^passwordKey isNil ifTrue: [ self defaultKey ] ifFalse: [ passwordKey ]
passwordKey: aByteArray passwordKey := aByteArray
</methods> <methods> Net.NetSettings class <category>persistence</category>
addStateXmlElementsTo: rootElement | coll | (coll := self registry at: #identities ifAbsent: [ nil]) notNil ifTrue: [ rootElement addNode: ( coll asXmlNode: #identities)]. (coll := self registry at: #mailServers ifAbsent: [ nil]) notNil ifTrue: [ rootElement addNode: ( coll asXmlNode: #mailServers)]. self registry keysAndValuesDo: [ :key :value | (key ~= #identities and: [ key ~= #mailServers]) ifTrue: [ rootElement addNode: ( value asXmlNode: key) ]].
importSnapshots: aCollectionElements aCollectionElements do: [ :el | self restoreSettingFrom: el ]
restoreSettingFrom: anXMLElement | key coll | key := anXMLElement tag type asSymbol. key = #identities ifTrue: [coll := self restoreValueFrom: anXMLElement. ^coll do: [ :each | Settings addIdentity: each] ]. key = #mailServers ifTrue: [coll := self restoreValueFrom: anXMLElement. ^coll do: [ :each | Settings updateMailHost: each] ]. self registry at: key put: (self restoreValueFrom: anXMLElement)
restoreValueFrom: anXMLElement ^(self restoreClassFrom: anXMLElement ) restoreValueFrom: anXMLElement
</methods> <methods> Net.HttpProxyPage <category>actions</category>
accept (self httpUseProxy value and: [self httpHost value isEmpty]) ifTrue: [ ^Dialog warn: (#ProxyHostIsEmpty << #net >> 'Proxy host is empty!')]. self registry httpUseProxy: self httpUseProxy value. (self httpUseProxy value and: [self httpHost value notNil and: [ self httpHost value notEmpty ]]) ifTrue: [ self registry httpProxyHost: (HostSpec new name: self httpHost value; port: self httpPort value; type: 'http'; netUser: self proxyUserMenuAspect value; yourself) ]. self registry httpProxyExceptions: self proxyExceptions.
acceptProxyExceptions: aCollection proxyExceptions := aCollection. manager tickle
addIdentity self userListOwner addIdentity
httpAdvanced ( HttpProxyExceptions new parent: self; yourself ) open
importSnapshots: aCollection super importSnapshots: aCollection. self userListOwner reset
reset self httpUseProxy value: self registry httpUseProxy. self resetProxyAspects.
resetProxyAspects self httpHost value: self defaultProxyHost. self proxyUserMenuAspect value: self defaultProxyUserMenuAspect. self httpPort value: self defaultPort.
resetUIStateToDefault self httpUseProxy value: self registry httpUseProxyDefault. self resetProxyAspects.
useProxyChanged | aBoolean | aBoolean := self httpUseProxy value. #(proxyAddress proxyPort addIdentityButton advancedButton proxyUserMenuAspect addressLabel portLabel proxyUserLabel ) do: [ :each | (self widgetAt: each ) isEnabled: aBoolean ].
</methods> <methods> Net.HttpProxyPage <category>accessing</category>
helpText ^(#HttpProxySettingsHelp << #net >> 'HTTP Settings allow specifying proxy server settings on a per-user basis. Proxies are used in some situations to access the web through a firewall, or for improved web access. - Use proxy must be checked to use the proxy information - Address: is the host IP or name of the proxy server - Port: is the port number for the proxy server - Proxy User: is an user ID authorized to access the proxy Proxy user must be defined as a user (see User Identities ) and then selected from the drop-down list. To define a new user, click Add User... . Complete the form as described in help for the User Identities page.') asString
httpHost ^self userPreferencesAt: #httpHost ifAbsentPut: [ self defaultProxyHost asValue]
httpPort ^self userPreferencesAt: #httpPort ifAbsentPut: [ self defaultPort asValue]
httpUseProxy ^self userPreferencesAt: #httpUseProxy ifAbsentPut: [ self registry httpUseProxy asValue ]
netUserMenu ^self userListOwner netUserMenu
proxyExceptions proxyExceptions isNil ifTrue: [ proxyExceptions := self registry httpProxyExceptions]. ^proxyExceptions
proxyUserMenuAspect ^self userPreferences at: #proxyUserMenuAspect ifAbsentPut: [ self defaultProxyUserMenuAspect asValue]
</methods> <methods> Net.HttpProxyPage <category>defaults</category>
defaultHttpUserMenuAspect | ids | ^(ids := self netUserMenu value menuItems) notEmpty ifTrue: [ ids first value asValue] ifFalse: [ nil asValue ]
defaultPort ^self registry httpProxyHost notNil ifTrue: [ self registry httpProxyHost port] ifFalse: [80]
defaultProxyHost ^self registry httpProxyHost notNil ifTrue: [ self registry httpProxyHost name] ifFalse: ['' ]
defaultProxyUserMenuAspect | uh usr | uh := self registry httpProxyHost notNil ifTrue: [( usr := self registry httpProxyHost netUser) notNil ifTrue: [ usr ]]. ^uh isNil ifTrue: [ self defaultHttpUserMenuAspect value] ifFalse: [ uh]
</methods> <methods> Net.HttpProxyPage <category>interface opening</category>
postBuildWith: aBuilder self httpHost onChangeSend: #tickle to: self. self httpPort onChangeSend: #tickle to: self. self httpUseProxy onChangeSend: #tickle to: self. self proxyUserMenuAspect onChangeSend: #tickle to: self. self httpUseProxy onChangeSend: #useProxyChanged to: self. self useProxyChanged.
</methods> <methods> Net.MailServerPage <category>accessing</category>
defaultIncomingServer ^self userPreferencesAt: #defaultIncomingServer ifAbsentPut: [ nil ]
defaultIncomingServer: aHostSpec ^self userPreferencesAt: #defaultIncomingServer put: aHostSpec
defaultMailServerName | serv | ^((serv := self serverList) notEmpty ifTrue: [ serv first ] ifFalse: [ '' ])
defaultMailServerTypeMenuAspect ^self mailServerMenu value menuItems notEmpty ifTrue: [ self mailServerMenu value menuItems first value type] ifFalse: [self registry supportedMailClients notEmpty ifTrue: [self registry supportedMailClients first serverType ] ifFalse: [(String new) ] ]
defaultMailUserMenuAspect ^self mailServerMenu value menuItems notEmpty ifTrue: [ self mailServerMenu value menuItems first value netUser ] ifFalse: [ nil ]
defaultOutgoingServer ^self userPreferencesAt: #defaultOutgoingServer ifAbsentPut: [ nil ]
defaultOutgoingServer: aHostSpec ^self userPreferencesAt: #defaultOutgoingServer put: aHostSpec
helpText ^(#ServerHelp << #net >> 'You can specify several mail servers. Typically you will have only a single outgoing mail server, but may have several incoming mail servers, if you receive mail from multiple mail services. To add a server, complete these fields and click Accept: - Name is the server''s fully qualified internet host name or IP address - Type is the server type, either POP3 (incoming), IMAP (incoming), or SMTP (outgoing) - User is a user ID already defined on the Identities page. To define a new user, click Add User... . Complete the form as described in help for the Identities page.') asString
hostSpec ^hostSpec
hostSpec: aHostSpec hostSpec := aHostSpec. self updateHostValuesFrom: aHostSpec
mailServerMenu ^self userPreferencesAt: #mailServerMenu ifAbsentPut: [self initializeFromRegistry asValue]
mailServerName ^self userPreferencesAt: #mailServerName ifAbsentPut: [ self defaultMailServerName asValue ]
mailServerTypeMenu | menu | menu := Menu new. self registry supportedMailClients do: [ :each | menu addItemLabel: ( each serverType, ' ', each description asString) value: each serverType ]. ^menu
mailServerTypeMenuAspect ^self userPreferencesAt: #mailServerTypeMenuAspect ifAbsentPut: [ self defaultMailServerTypeMenuAspect asValue ]
mailUserMenuAspect ^self userPreferencesAt: #mailUserMenuAspect ifAbsentPut: [ self defaultMailUserMenuAspect asValue ]
netUserMenu ^self userListOwner netUserMenu
selectedServer ^self hostSpec
selectedServer: aHostSpecString self enableButtons: aHostSpecString notNil. aHostSpecString notNil ifTrue: [ self hostSpec: (self detectServer: aHostSpecString) ]
serverList ^self mailServerMenu value menuItems collect: [ :it | it label ]
serverListAspect serverListAspect isNil ifTrue: [serverListAspect := SelectionInList adapt: self aspect: #selectedServer list: #serverList selection: #selectedServer:]. ^serverListAspect
</methods> <methods> Net.MailServerPage <category>interface opening</category>
enableButtons (self builder componentAt: #acceptButton) widget isEnabled: true.
enableButtons: aBoolean self builder isNil ifTrue: [^nil]. #( acceptButton removeButton setAsDefaultButton ) do: [ :each | (self widgetAt: each) isEnabled: aBoolean ].
postBuildWith: aBuilder self serverList notEmpty ifTrue: [self serverListAspect selectionIndex: 1 ]. self mailServerName onChangeSend: #enableButtons to: self. self mailServerTypeMenuAspect onChangeSend: #enableButtons to: self. self mailUserMenuAspect onChangeSend: #enableButtons to: self.
</methods> <methods> Net.MailServerPage <category>actions</category>
accept self registry resetServers. self mailServerMenu value menuItems do: [ :itemx | self registry updateMailHost: itemx value]. self defaultIncomingServer notNil ifTrue: [ self registry defaultIncomingHost: self defaultIncomingServer]. self defaultOutgoingServer notNil ifTrue: [ self registry defaultOutgoingHost: self defaultOutgoingServer].
addIdentity self userListOwner addIdentity
disturb
importSnapshots: aCollection super importSnapshots: aCollection. self userListOwner reset
mailServerTypeMenuString: aType ^aType first, ' (', (aType at:2), ')'
okToAddServer ( self mailServerName value isNil or: [self mailServerName value isEmpty]) ifTrue: [ ^Dialog warn: (#HostNameIsEmpty << #net >> 'Host name is empty') ]. ( self mailServerTypeMenuAspect value isNil or: [ self mailServerTypeMenuAspect value isEmpty]) ifTrue: [ ^Dialog warn: (#HostTypeIsEmpty << #net >> 'Host type is empty') ]. self removeMenuItemFor: self mailServerName value. hostSpec := HostSpec new name: self mailServerName value; type: self mailServerTypeMenuAspect value; netUser: self mailUserMenuAspect value; yourself. (hostSpec isIncomingTypeMail and: [self defaultIncomingServer isNil]) ifTrue: [self defaultIncomingServer: hostSpec]. (hostSpec isOutgoingTypeMail and: [self defaultOutgoingServer isNil]) ifTrue: [self defaultOutgoingServer: hostSpec]. self mailServerMenu value addItemLabel: ( self serverAsString: hostSpec ) value: hostSpec. self updateMenuAspects. manager tickle.
removeServer | it | self removeMenuItemFor: self hostSpec name. self hostSpec = self defaultIncomingServer ifTrue: [ (it := self mailServerMenu value menuItems detect: [ :itx | itx value isIncomingTypeMail ] ifNone: [nil]) notNil ifTrue: [self defaultIncomingServer: it value. it label: (self serverAsString: it value)] ifFalse: [self defaultIncomingServer: nil]]. self hostSpec = self defaultOutgoingServer ifTrue: [ (it := self mailServerMenu value menuItems detect: [ :itx | itx value isOutgoingTypeMail ] ifNone: [nil]) notNil ifTrue: [self defaultOutgoingServer: it value. it label: (self serverAsString: it value)] ifFalse: [ self defaultOutgoingServer: nil ]]. self hostSpec: HostSpec new. self serverListAspect listHolder changed:#value.
reset self resetUIStateToDefault
resetUIStateToDefault self mailServerMenu value: self initializeFromRegistry. self serverListAspect listHolder changed:#value. self mailServerName value: self defaultMailServerName. self mailServerTypeMenuAspect value: self defaultMailServerTypeMenuAspect. self mailUserMenuAspect value: self defaultMailUserMenuAspect.
setServerAsDefault self setAsDefaultServer: self hostSpec.
</methods> <methods> Net.MailServerPage <category>private</category>
detectServer: aString | item | ^(item := self mailServerMenu value menuItems detect: [ :it | (self serverAsString: it value ) = aString ] ifNone: [ nil]) isNil ifTrue: [ HostSpec new ] ifFalse: [ item value]
initializeFromRegistry | menu | menu := Menu new. self defaultIncomingServer: self registry defaultIncomingHost. self defaultOutgoingServer: self registry defaultOutgoingHost. self registry mailServers copy do: [ :each | menu addItemLabel: (self serverAsString: each) value: each ]. ^menu
removeMenuItemFor: aSpecHostName | item | (item := self mailServerMenu value menuItems detect: [ :itemx | itemx value name = aSpecHostName ] ifNone: [ nil ] ) notNil ifTrue: [self mailServerMenu value removeItem: item. self serverListAspect listHolder changed:#value. manager tickle].
serverAsString: aHostSpec | stream | stream := String new writeStream. stream nextPutAll: aHostSpec name. ((self defaultIncomingServer notNil and: [ aHostSpec name = self defaultIncomingServer name ]) or: [self defaultOutgoingServer notNil and: [aHostSpec name = self defaultOutgoingServer name]]) ifTrue: [ aHostSpec printDefaultDescriptionOn: stream ] ifFalse: [ aHostSpec printDescriptionOn: stream ]. ^stream contents
setAsDefaultServer: aHostSpec | host | host := (aHostSpec isNil ifTrue: [ self mailServerMenu value menuItems notEmpty ifTrue: [self mailServerMenu menuItems first value] ifFalse: [nil]] ifFalse: [ aHostSpec ]). host isNil ifTrue: [ ^nil ]. host isIncomingTypeMail ifTrue: [ self defaultIncomingServer: host] ifFalse: [ self defaultOutgoingServer: host]. self mailServerMenu value menuItems do: [ :itemx | itemx label: ( self serverAsString: itemx value ) ]. self updateMenuAspects. manager tickle.
updateHostValuesFrom: aHostSpec self mailServerName value: aHostSpec name. self mailUserMenuAspect value: aHostSpec netUser. self mailServerTypeMenuAspect value: aHostSpec type.
updateMenuAspects | selectIndex | selectIndex := self serverListAspect selectionIndex. self serverListAspect listHolder changed:#value. selectIndex notNil ifTrue: [ self serverListAspect selectionIndex: selectIndex ]
</methods> <methods> Net.UserPage <category>accessing</category>
accountIdentity ^self userPreferencesAt: #accountIdentity ifAbsentPut: [ self defaultAccountIdentity asValue]
defaultAccountIdentity ^self netUser isNil ifTrue: [ '' ] ifFalse: [ self netUser account ]
defaultFullNameIdentity ^self netUser isNil ifTrue: [ '' ] ifFalse: [ self netUser fullName ]
defaultMailAddressIdentity ^self netUser isNil ifTrue: [ '' ] ifFalse: [ self netUser mailAddress ]
defaultNetUserMenu | menu | menu := Menu new. self defaultUser: self registry defaultIdentity. self registry identities copy do: [ :each | menu addItemLabel: (self userAsString: each) value: each ]. ^menu
defaultPasswordIdentity ^self netUser isNil ifTrue: [ '' ] ifFalse: [ self netUser password ]
defaultRememberPassword | pass | pass := self netUser notNil ifTrue: [ self netUser savePassword]. ^pass isNil ifTrue: [false] ifFalse: [ pass ]
defaultUser ^self userPreferencesAt: #defaultUser ifAbsentPut: [ nil ]
defaultUser: aNetUser ^self userPreferencesAt: #defaultUser put: aNetUser
defaultUserNameIdentity ^self netUser isNil ifTrue: [ ''] ifFalse: [ self netUser username ]
emailAddressIdentity ^self userPreferencesAt: #emailAddressIdentity ifAbsentPut: [self defaultMailAddressIdentity asValue ]
fullNameIdentity ^self userPreferencesAt: #fullNameIdentity ifAbsentPut: [ self defaultFullNameIdentity asValue]
helpText ^(#IdentityHelp << #net >> 'Network Identities lists user identifications for this client. You may have only one, or several user identities. To add an ID, click Add and complete the Add Identity dialog. In the Add Identity dialog: - Full name: is your name as it will be displayed - User Name: is your account user ID - Email address: is your email address for this account - Account is the account ID used if an FTP host requires an account (does not accept anonymous FTP) To provide a password for this account: - check Remember password to store this information - enter your password identically twice (Enter: and Confirm:). The password is masked while you type.') asString
identityListAspect identityListAspect isNil ifTrue: [identityListAspect := SelectionInList adapt: self aspect: #selectedIdentity list: #userIdentities selection: #selectedIdentity:]. ^identityListAspect
netUser ^netUser
netUser: aNetUser netUser := aNetUser. self updateIdentityValuesFrom: netUser
netUserMenu ^self userPreferencesAt: #netUserMenu ifAbsentPut: [ self defaultNetUserMenu asValue ]
passwordIdentity ^self userPreferencesAt: #passwordIdentity ifAbsentPut: [ self defaultPasswordIdentity asValue]
proxyUserMenuAspect ^self userPreferences at: #proxyUserMenuAspect ifAbsent: [ nil asValue ]
rememberPassword ^self userPreferencesAt: #rememberPassword ifAbsentPut: [ self defaultRememberPassword asValue]
selectedIdentity ^self userAsString: self netUser
selectedIdentity: aNetUserString self enableButtons: aNetUserString notNil. aNetUserString notNil ifTrue: [ self netUser: (self detectUser: aNetUserString) ]
userIdentities ^self netUserMenu value menuItems collect: [ :it | it label ]
userNameIdentity ^self userPreferencesAt: #userNameIdentity ifAbsentPut: [ self defaultUserNameIdentity asValue]
verifyPasswordIdentity ^self userPreferencesAt: #verifyPasswordIdentity ifAbsentPut: [ nil asValue ].
</methods> <methods> Net.UserPage <category>actions</category>
accept self registry resetIdentities. self netUserMenu value menuItems do: [ :itemx | self registry addIdentity: itemx value]. self defaultUser notNil ifTrue: [ self registry defaultIdentity: self defaultUser]. self updateIdentityListAspects.
addIdentity self netUser: (NetUser new savePassword: false; yourself). AddNetUser openWithSpec: #addIdentitySpec parent: self
editIdentity AddNetUser openWithSpec: #addIdentitySpec parent: self
removeIdentity | resp | (self registry hasIdentityReference: self netUser) ifTrue: [ resp := Dialog confirm: ((#IdentityIsUsedInServerSettings << #net >> '<1s> identity is used in server settings. <n>Do you want to delete it?') expandMacrosWith: self netUser fullName). resp ifFalse: [^nil]]. self removeMenuItemFor: self netUser. (self defaultUser notNil and: [self defaultUser fullName = self netUser fullName]) ifTrue: [ self setAsDefaultIdentity: nil ]. (self proxyUserMenuAspect value notNil and: [ self proxyUserMenuAspect value fullName = self netUser fullName ]) ifTrue: [ self proxyUserMenuAspect value: nil ]. self identityListAspect listHolder changed: #value. manager tickle.
reset self resetUIStateToDefault.
resetUIStateToDefault self netUserMenu value: self defaultNetUserMenu. self identityListAspect listHolder changed: #value.
setAsDefaultIdentity self setAsDefaultIdentity: self netUser
</methods> <methods> Net.UserPage <category>interface opening</category>
enableButtons: aBoolean self builder isNil ifTrue: [ ^nil ]. (self builder componentAt: #editButton) widget isEnabled: aBoolean. (self builder componentAt: #removeButton) widget isEnabled: aBoolean. (self builder componentAt: #setAsDefaultButton) widget isEnabled: aBoolean.
postBuildWith: aBuilder self enableButtons: false
</methods> <methods> Net.UserPage <category>private</category>
detectUser: aString | item | ^(item := self netUserMenu value menuItems detect: [ :it | (self userAsString: it value ) = aString ] ifNone: [ nil]) isNil ifTrue: [ NetUser new ] ifFalse: [ item value]
removeMenuItemFor: aNetUser | item | (item := self netUserMenu value menuItems detect: [ :itemx | itemx value = aNetUser ] ifNone: [ nil ] ) notNil ifTrue: [ self netUserMenu value removeItem: item].
setAsDefaultIdentity: aNetUser self defaultUser: (aNetUser isNil ifTrue: [ self netUserMenu value menuItems notEmpty ifTrue: [self netUserMenu value menuItems first value] ifFalse: [nil]] ifFalse: [ aNetUser ]). self netUserMenu value menuItems do: [ :itemx | itemx label: ( self userAsString: itemx value ) ]. self identityListAspect listHolder changed: #value. manager tickle.
updateIdentityListAspects | selectIndex | selectIndex := self identityListAspect selectionIndex. self identityListAspect listHolder changed:#value. self identityListAspect selectionIndex: selectIndex.
updateIdentityValuesFrom: aNetUser self fullNameIdentity value: aNetUser fullName. self userNameIdentity value: aNetUser username. self passwordIdentity value: aNetUser password. self emailAddressIdentity value: aNetUser mailAddress. self accountIdentity value: aNetUser account. self verifyPasswordIdentity value: aNetUser password. self rememberPassword value: aNetUser savePassword.
updateNetUser self removeMenuItemFor: self netUser. netUser := (NetUser new fullName: self fullNameIdentity value; username: self userNameIdentity value; password: self passwordIdentity value; savePassword: self rememberPassword value; mailAddress: self emailAddressIdentity value; account: self accountIdentity value; yourself). self defaultUser isNil ifTrue: [ self defaultUser: netUser]. self netUserMenu value addItemLabel: ( self userAsString: netUser ) value: netUser. self identityListAspect listHolder changed:#value. manager tickle
userAsString: aNetUser | stream | stream := String new writeStream. aNetUser printNameOn: stream. (self defaultUser notNil and: [ aNetUser fullName = self defaultUser fullName]) ifTrue: [ aNetUser printDefaultOn: stream ]. aNetUser printMailAddressOn: stream. ^stream contents
</methods> <methods> Net.UserPage <category>initialize-release</category>
initialize | usr | super initialize. (usr :=self registry httpProxyHost) notNil ifTrue: [usr := self registry httpProxyHost netUser]. usr := (usr notNil ifTrue: [ usr ] ifFalse: [nil ]) asValue. self userPreferences at: #proxyUserMenuAspect put: usr
</methods> <methods> Net.HostSpec class <category>persistance</category>
restoreValueFrom: xmlColl ^NetSettings restoreNetObject: self new from: xmlColl
</methods> <methods> Net.HostSpec <category>persistence</category>
asXmlNode: aString ^NetSettings netObject: self asXmlNode: aString
</methods> <methods> Core.String class <category>net clients</category>
restoreValueFrom: anXMLElement | els | ^(els := anXMLElement elements) isEmpty ifTrue: [self new] ifFalse: [ els first text ]
</methods> <methods> Core.String <category>net clients</category>
asXmlNode: aString | node | node := XML.Element tag: aString. node attributes: (OrderedCollection with: ( XML.Attribute name: 'smalltalkClass' value: 'String' )). node addNode: (XML.Text text: self ). ^node
</methods> <methods> Core.Dictionary class <category>net clients</category>
restoreValueFrom: anXMLElement | xmlColl dict key value | xmlColl := anXMLElement realElements. dict := self new: xmlColl size. xmlColl do: [ :el | key := el realElements first restoreValue. value := el realElements last restoreValue. dict at: key put: value ]. ^dict
</methods> <methods> Core.Dictionary <category>net clients</category>
asXmlNode: aString ^Net.NetSettings dictionary: self asXmlNode: aString
</methods> <methods> XML.Text <category>net clients</category>
restoreValue
restoreValueFor: aClass ^aClass readFrom: self text
</methods> <methods> Core.Collection class <category>net clients</category>
restoreValueFrom: anXMLElement | coll xmlColl | xmlColl := anXMLElement realElements. coll := self new: xmlColl size. xmlColl do: [ :el | coll add: el restoreValue ]. ^coll
</methods> <methods> Core.Collection <category>net clients</category>
asXmlNode: aString ^Net.NetSettings collection: self asXmlNode: aString
</methods> <methods> Net.CookieAgent class <category>persistence</category>
restoreRegistryFrom: aDataSource | xml | xml := (XML.XMLParser on: aDataSource) validate: false; scanDocument. Registry := (Dictionary restoreValueFrom: xml root)
storeRegistryTo: aStream aStream nextPutAll: '<?xml version="1.0"?>'. (self registry asXmlNode: 'CookieRegistry' ) printOn: aStream.
</methods> <methods> XML.Element <category>net clients</category>
restoreValue ^Net.NetSettings restoreValueFrom: self
</methods> <methods> Net.NetClient class <category>persistance</category>
restoreValueFrom: xmlColl ^NetSettings restoreNetObject: self new from: xmlColl
</methods> <methods> Net.NetClient <category>persistence</category>
asXmlNode: aString ^NetSettings netObject: self asXmlNode: aString
</methods> <methods> Net.NetUser class <category>persistance</category>
restoreValueFrom: xmlColl ^NetSettings restoreNetObject: self new from: xmlColl
</methods> <methods> Net.NetUser <category>persistence</category>
asXmlNode: aString ^NetSettings netObject: self asXmlNode: aString
</methods> <methods> Core.Object class <category>net clients</category>
restoreValueFrom: anXMLElement ^self readFrom: anXMLElement elements first text readStream
</methods> <methods> Core.Object <category>net clients</category>
asXmlNode: aString ^Net.NetSettings object: self asXmlNode: aString
</methods> <methods> Core.Symbol class <category>net clients</category>
restoreValueFrom: anXMLElement ^self readFrom: anXMLElement elements first text readStream
</methods> <methods> Core.Symbol <category>net clients</category>
asXmlNode: aString | node | node := XML.Element tag: aString. node attributes: (OrderedCollection with: ( XML.Attribute name: 'smalltalkClass' value: 'Symbol' )). node addNode: (XML.Text text: '#''', self, '''' ). ^node
</methods> <methods> Net.DeliveryMonitor class <category>interface specs</category>
windowSpec "UIPainter new openOnClass: self andSelector: #windowSpec" <resource: #canvas> ^#(#{UI.FullSpec} #window: #(#{UI.WindowSpec} #label: #(#{Kernel.UserMessage} #key: #DeliveryMonitor #defaultString: 'Delivery Monitor' #catalogID: #net) #min: #(#{Core.Point} 256 45 ) #bounds: #(#{Graphics.Rectangle} 462 381 718 426 ) ) #component: #(#{UI.SpecCollection} #collection: #( #(#{UI.ProgressWidgetSpec} #layout: #(#{Graphics.LayoutFrame} 0 0 0 0 0 1 0 1 ) #name: #progress #isOpaque: true #model: #progress #direction: #horizontal #position: #topLeft #area: true #reverse: false ) ) ) )
</methods> <methods> Net.HttpProxyExceptions class <category>interface specs</category>
windowSpec "UIPainter new openOnClass: self andSelector: #windowSpec" <resource: #canvas> ^#(#{UI.FullSpec} #window: #(#{UI.WindowSpec} #label: #(#{Kernel.UserMessage} #key: #AdvancedProxyOptions #defaultString: 'Advanced Proxy Options' #catalogID: #net) #min: #(#{Core.Point} 412 202 ) #max: #(#{Core.Point} 412 202 ) #bounds: #(#{Graphics.Rectangle} 512 384 924 586 ) ) #component: #(#{UI.SpecCollection} #collection: #( #(#{UI.GroupBoxSpec} #layout: #(#{Graphics.Rectangle} 21 8 398 161 ) #name: 'GroupBox1' #label: #(#{Kernel.UserMessage} #key: #Exceptions #defaultString: 'Exceptions' #catalogID: #net) ) #(#{UI.ActionButtonSpec} #layout: #(#{Graphics.Rectangle} 317 168 398 191 ) #name: 'ActionButton1' #model: #cancelHttpException #label: #(#{Kernel.UserMessage} #key: #Cancel #defaultString: 'Cancel' #catalogID: #net) #defaultable: true ) #(#{UI.ActionButtonSpec} #layout: #(#{Graphics.Rectangle} 233 168 314 191 ) #name: 'ActionButton2' #model: #acceptHttpExceptions #label: #(#{Kernel.UserMessage} #key: #OK #defaultString: 'OK' #catalogID: #net) #defaultable: true ) #(#{UI.TextEditorSpec} #layout: #(#{Graphics.Rectangle} 31 45 387 136 ) #name: 'TextEditor1' #model: #httpProxyExceptions #tabRequiresControl: true ) #(#{UI.LabelSpec} #layout: #(#{UI.AlignmentOrigin} 283 0 45 0 1 1 ) #name: 'Label1' #label: #(#{Kernel.UserMessage} #key: #DoNotUseProxyServersForDomains #defaultString: 'Do not use proxy servers for domains beginning with:' #catalogID: #net) ) #(#{UI.LabelSpec} #layout: #(#{UI.AlignmentOrigin} 217 0 158 0 1 1 ) #name: 'Label2' #label: #(#{Kernel.UserMessage} #key: #UseSemicolonSeparateDomains #defaultString: 'Use semicolon (;) to separate domains.' #catalogID: #net) ) #(#{UI.ActionButtonSpec} #layout: #(#{Graphics.Rectangle} 233 168 314 191 ) #name: 'ActionButton3' #model: #acceptHttpExceptions #label: #(#{Kernel.UserMessage} #key: #OK #defaultString: 'OK' #catalogID: #net) #defaultable: true ) ) ) )
</methods> <methods> Net.AddNetUser class <category>interface specs</category>
addIdentitySpec "Tools.UIPainter new openOnClass: self andSelector: #addIdentitySpec" <resource: #canvas> ^#(#{UI.FullSpec} #window: #(#{UI.WindowSpec} #label: #(#{Kernel.UserMessage} #key: #AddIdentity #defaultString: 'Add Identity' #catalogID: #net ) #min: #(#{Core.Point} 371 290 ) #max: #(#{Core.Point} 371 290 ) #bounds: #(#{Graphics.Rectangle} 512 384 883 674 ) ) #component: #(#{UI.SpecCollection} #collection: #( #(#{UI.LabelSpec} #layout: #(#{UI.AlignmentOrigin} 98 0 64 0 1 1 ) #label: #(#{Kernel.UserMessage} #key: #UserNameC #defaultString: 'User Name:' #catalogID: #net ) ) #(#{UI.LabelSpec} #layout: #(#{UI.AlignmentOrigin} 110 0 91 0 1 1 ) #label: #(#{Kernel.UserMessage} #key: #EmailAddress #defaultString: 'Email address:' #catalogID: #net ) ) #(#{UI.LabelSpec} #layout: #(#{UI.AlignmentOrigin} 90 0 37 0 1 1 ) #label: #(#{Kernel.UserMessage} #key: #FullName #defaultString: 'Full name:' #catalogID: #net ) ) #(#{UI.LabelSpec} #layout: #(#{Core.Point} 38 204 ) #label: #(#{Kernel.UserMessage} #key: #Enter #defaultString: 'Enter:' #catalogID: #net ) ) #(#{UI.LabelSpec} #layout: #(#{UI.AlignmentOrigin} 85 0 118 0 1 1 ) #label: #(#{Kernel.UserMessage} #key: #Account #defaultString: 'Account:' #catalogID: #net ) ) #(#{UI.LabelSpec} #layout: #(#{Core.Point} 38 233 ) #label: #(#{Kernel.UserMessage} #key: #Confirm #defaultString: 'Confirm:' #catalogID: #net ) ) #(#{UI.GroupBoxSpec} #layout: #(#{Graphics.Rectangle} 22 154 281 269 ) #label: #(#{Kernel.UserMessage} #key: #Password #defaultString: 'Password' #catalogID: #net ) ) #(#{UI.InputFieldSpec} #layout: #(#{Graphics.Rectangle} 116 10 269 32 ) #model: #fullNameIdentity ) #(#{UI.InputFieldSpec} #layout: #(#{Graphics.LayoutFrame} 0 0.312668 39 0 0 0.725067 61 0 ) #model: #userNameIdentity #type: #string ) #(#{UI.InputFieldSpec} #layout: #(#{Graphics.Rectangle} 116 68 269 90 ) #model: #emailAddressIdentity #isReadOnly: false ) #(#{UI.InputFieldSpec} #layout: #(#{Graphics.Rectangle} 116 97 269 119 ) #model: #accountIdentity ) #(#{UI.CheckBoxSpec} #layout: #(#{Core.Point} 126 175 ) #model: #rememberPassword #label: #(#{Kernel.UserMessage} #key: #RememberPassword #defaultString: 'Remember password' #catalogID: #net ) ) #(#{UI.InputFieldSpec} #layout: #(#{Graphics.Rectangle} 131 204 269 227 ) #model: #passwordIdentity #type: #password ) #(#{UI.InputFieldSpec} #layout: #(#{Graphics.Rectangle} 131 234 269 255 ) #model: #verifyPasswordIdentity #type: #password ) #(#{UI.ActionButtonSpec} #layout: #(#{Graphics.Rectangle} 289 10 360 31 ) #model: #okToAddIdentity #label: #(#{Kernel.UserMessage} #key: #OK #defaultString: 'OK' #catalogID: #net ) #defaultable: true ) #(#{UI.ActionButtonSpec} #layout: #(#{Graphics.Rectangle} 289 34 360 55 ) #model: #cancel #label: #(#{Kernel.UserMessage} #key: #Cancel #defaultString: 'Cancel' #catalogID: #net ) #defaultable: true ) ) ) )
</methods> <methods> Net.HttpProxyPage class <category>interface specs</category>
windowSpec "Tools.UIPainter new openOnClass: self andSelector: #windowSpec" <resource: #canvas> ^#(#{UI.FullSpec} #window: #(#{UI.WindowSpec} #label: #(#{Kernel.UserMessage} #key: #HTTPSettings #defaultString: 'HTTP Settings' #catalogID: #net ) #min: #(#{Core.Point} 363 311 ) #max: #(#{Core.Point} 363 311 ) #bounds: #(#{Graphics.Rectangle} 720 450 1083 761 ) ) #component: #(#{UI.SpecCollection} #collection: #( #(#{UI.InputFieldSpec} #layout: #(#{Graphics.LayoutFrame} 135 0 65 0 -10 1 90 0 ) #name: #proxyAddress #model: #httpHost ) #(#{UI.InputFieldSpec} #layout: #(#{Graphics.LayoutFrame} 135 0 100 0 -10 1 125 0 ) #name: #proxyPort #model: #httpPort #type: #number ) #(#{UI.MenuButtonSpec} #layout: #(#{Graphics.LayoutFrame} 135 0 135 0 -10 1 160 0 ) #name: #proxyUserMenuAspect #model: #proxyUserMenuAspect #menu: #netUserMenu ) #(#{UI.ActionButtonSpec} #layout: #(#{Graphics.LayoutFrame} -175 1 180 0 -95 1 205 0 ) #name: #addIdentityButton #model: #addIdentity #label: #(#{Kernel.UserMessage} #key: #AddUser #defaultString: 'Add User...' #catalogID: #net ) #defaultable: true ) #(#{UI.ActionButtonSpec} #layout: #(#{Graphics.LayoutFrame} -90 1 180 0 -10 1 205 0 ) #name: #advancedButton #model: #httpAdvanced #label: #(#{Kernel.UserMessage} #key: #Advandec #defaultString: 'Advanced...' #catalogID: #webservices ) #defaultable: true ) #(#{UI.CheckBoxSpec} #layout: #(#{Graphics.Rectangle} 10 20 100 37 ) #model: #httpUseProxy #label: #(#{Kernel.UserMessage} #key: #UseProxy #defaultString: 'Use proxy' #catalogID: #net ) ) #(#{UI.LabelSpec} #layout: #(#{Graphics.Rectangle} 10 65 65 90 ) #name: #addressLabel #label: #(#{Kernel.UserMessage} #key: #Address #defaultString: 'Address:' #catalogID: #net ) ) #(#{UI.LabelSpec} #layout: #(#{Graphics.Rectangle} 10 100 60 125 ) #name: #portLabel #label: #(#{Kernel.UserMessage} #key: #Port #defaultString: 'Port:' #catalogID: #net ) ) #(#{UI.LabelSpec} #layout: #(#{Graphics.Rectangle} 10 135 90 160 ) #name: #proxyUserLabel #label: #(#{Kernel.UserMessage} #key: #ProxyUser #defaultString: 'Proxy user:' #catalogID: #net ) ) ) ) )
</methods> <methods> Net.MailServerPage class <category>interface specs</category>
windowSpec "Tools.UIPainter new openOnClass: self andSelector: #windowSpec" <resource: #canvas> ^#(#{UI.FullSpec} #window: #(#{UI.WindowSpec} #label: #(#{Kernel.UserMessage} #key: #MailServerList #defaultString: 'Mail Server List' #catalogID: #net ) #min: #(#{Core.Point} 383 350 ) #max: #(#{Core.Point} 383 350 ) #bounds: #(#{Graphics.Rectangle} 512 384 895 734 ) ) #component: #(#{UI.SpecCollection} #collection: #( #(#{UI.SequenceViewSpec} #layout: #(#{Graphics.LayoutFrame} 0 0 0 0 0 1 0 0.5 ) #model: #serverListAspect #useModifierKeys: true #selectionType: #highlight ) #(#{UI.GroupBoxSpec} #layout: #(#{Graphics.LayoutFrame} 0 0 5 0.5 -100 1 120 0.5 ) #label: #(#{Kernel.UserMessage} #key: #Host #defaultString: 'Host' #catalogID: #net ) ) #(#{UI.LabelSpec} #layout: #(#{UI.AlignmentOrigin} 10 0 50 0.5 0 1 ) #label: #(#{Kernel.UserMessage} #key: #Name #defaultString: 'Name:' #catalogID: #net ) ) #(#{UI.LabelSpec} #layout: #(#{UI.AlignmentOrigin} 10 0 110 0.5 0 1 ) #name: #user #label: #(#{Kernel.UserMessage} #key: #User #defaultString: 'User:' #catalogID: #net ) ) #(#{UI.LabelSpec} #layout: #(#{UI.AlignmentOrigin} 10 0 80 0.5 0 1 ) #name: #serverType #label: #(#{Kernel.UserMessage} #key: #Type #defaultString: 'Type:' #catalogID: #net ) ) #(#{UI.InputFieldSpec} #layout: #(#{Graphics.LayoutFrame} 100 0 25 0.5 -110 1 50 0.5 ) #name: #mailServerName #model: #mailServerName #callbacksSpec: #(#{UI.UIEventCallbackSubSpec} #valueChangeSelector: #disturb ) #type: #string ) #(#{UI.MenuButtonSpec} #layout: #(#{Graphics.LayoutFrame} 100 0 55 0.5 -110 1 80 0.5 ) #model: #mailServerTypeMenuAspect #menu: #mailServerTypeMenu ) #(#{UI.MenuButtonSpec} #layout: #(#{Graphics.LayoutFrame} 100 0 85 0.5 -110 1 110 0.5 ) #model: #mailUserMenuAspect #menu: #netUserMenu ) #(#{UI.ActionButtonSpec} #layout: #(#{Graphics.LayoutFrame} -92 1 15 0.5 0 0.994778 40 0.5 ) #name: #acceptButton #model: #okToAddServer #label: #(#{Kernel.UserMessage} #key: #AddNoDots #defaultString: 'Add' #catalogID: #net ) #defaultable: true ) #(#{UI.ActionButtonSpec} #layout: #(#{Graphics.LayoutFrame} -92 1 40 0.5 0 0.994778 65 0.5 ) #name: #removeButton #model: #removeServer #label: #(#{Kernel.UserMessage} #key: #Remove #defaultString: 'Remove' #catalogID: #net ) #defaultable: true ) #(#{UI.ActionButtonSpec} #layout: #(#{Graphics.LayoutFrame} -92 1 65 0.5 0 0.994778 90 0.5 ) #name: #setAsDefaultButton #model: #setServerAsDefault #label: #(#{Kernel.UserMessage} #key: #SetAsDefault #defaultString: 'Set As Default' #catalogID: #net ) #defaultable: true ) #(#{UI.ActionButtonSpec} #layout: #(#{Graphics.LayoutFrame} -92 1 90 0.5 0 0.994778 115 0.5 ) #model: #addIdentity #label: #(#{Kernel.UserMessage} #key: #AddUser #defaultString: 'Add User...' #catalogID: #net ) #defaultable: true ) ) ) )
</methods> <methods> Net.UserPage class <category>interface specs</category>
windowSpec "Tools.UIPainter new openOnClass: self andSelector: #windowSpec" <resource: #canvas> ^#(#{UI.FullSpec} #window: #(#{UI.WindowSpec} #label: #(#{Kernel.UserMessage} #key: #Identity #defaultString: 'Identity' #catalogID: #net ) #min: #(#{Core.Point} 40 20 ) #bounds: #(#{Graphics.Rectangle} 512 384 936 695 ) ) #component: #(#{UI.SpecCollection} #collection: #( #(#{UI.SequenceViewSpec} #layout: #(#{Graphics.LayoutFrame} 0 0 25 0 -100 1 0 1 ) #model: #identityListAspect #useModifierKeys: true #selectionType: #highlight ) #(#{UI.ActionButtonSpec} #layout: #(#{Graphics.LayoutFrame} -90 1 25 0 0 1 50 0 ) #model: #addIdentity #label: #(#{Kernel.UserMessage} #key: #Add #defaultString: 'Add...' #catalogID: #net ) #defaultable: true ) #(#{UI.ActionButtonSpec} #layout: #(#{Graphics.LayoutFrame} -90 1 50 0 0 1 75 0 ) #name: #editButton #model: #editIdentity #label: #(#{Kernel.UserMessage} #key: #Edit #defaultString: 'Edit...' #catalogID: #net ) #defaultable: true ) #(#{UI.ActionButtonSpec} #layout: #(#{Graphics.LayoutFrame} -90 1 75 0 0 1 100 0 ) #name: #removeButton #model: #removeIdentity #label: #(#{Kernel.UserMessage} #key: #Remove #defaultString: 'Remove' #catalogID: #net ) #defaultable: true ) #(#{UI.ActionButtonSpec} #layout: #(#{Graphics.LayoutFrame} -90 1 100 0 0 1 125 0 ) #name: #setAsDefaultButton #model: #setAsDefaultIdentity #label: #(#{Kernel.UserMessage} #key: #SetAsDefault #defaultString: 'Set As Default' #catalogID: #net ) #defaultable: true ) #(#{UI.LabelSpec} #layout: #(#{Core.Point} 0 0 ) #name: #Label1 #label: #(#{Kernel.UserMessage} #key: #UserIdentitiesC #defaultString: 'User identities:' #catalogID: #net ) ) ) ) )
</methods> <methods> Tools.VisualWorksSettings class <category>settings-http</category>
c02EnableCookieProcessing <setting: #(net http httpCookie enableCookieProcessing )> | class | #{Net.HttpProtocolInterpreter } ifDefinedDo: [ :val | class := val ] elseDo: [^nil]. ^(BooleanSetting on: class aspect: #enableCookieProcessing) label: #HttpEnableCookieProcessing<< #net >> 'Enable cookie processing'; default: class defaultEnableCookieProcessing; helpText: #HttpEnableCookieProcessingHelpText << #net >> 'Specifies whether to process Http cookies.'; yourself
c1CacheCookies <setting: #(net http httpCookie cacheCookies )> | class | #{Net.CookieAgent } ifDefinedDo: [ :val | class := val ] elseDo: [^nil]. ^(BooleanSetting on: class aspect: #cacheCookies) label: #HttpCacheCookies<< #net >> 'Enable cookie caching'; default: class defaultCacheCookies; helpText: #HttpCacheCookiesHelpText << #net >> 'Specifies whether to cache Http cookies when a session is terminated.'; yourself
c2UseCachedCookies <setting: #(net http httpCookie useCachedCookies )> | class | #{Net.CookieAgent } ifDefinedDo: [ :val | class := val ] elseDo: [^nil]. ^(BooleanSetting on: class aspect: #useCachedCookies) label: #HttpUseCachedCookies<< #net >> 'Use cached cookies'; default: class defaultUseCachedCookies; helpText: #HttpUseCachedCookiesHelpText << #net >> 'Specifies whether to use already cached cookies for each session.'; yourself
c3EnableLimits <setting: #(net http httpCookie enableLimits )> | class | #{Net.CookieAgent} ifDefinedDo: [:val | class := val] elseDo: [^nil]. ^(BooleanSetting on: class aspect: #enableLimits) label: #HttpEnableLimits << #net >> 'Enable cookie processing limits'; default: class defaultEnableLimits; helpText: #HttpEnableLimitsHelpText << #net >> 'Enables enforcement of cookie registry limits.'; yourself
c4NumberRegistryEntries <setting: #(net http httpCookie numberRegistryEntries )> | class | #{Net.CookieAgent } ifDefinedDo: [ :val | class := val ] elseDo: [^nil]. ^(NumberSetting on: class aspect: #numberEntries) label: #HttpNumberEntries<< #net >> 'Total number of cookies'; default: class defaultNumberEntries; helpText: #HttpNumberEntriesHelpText << #net >> 'Specifies the maximum number of cookies stored in the registry.'; yourself
c5NumberEntriesPerServer <setting: #(net http httpCookie numberEntriesPerServer )> | class | #{Net.CookieAgent } ifDefinedDo: [ :val | class := val ] elseDo: [^nil]. ^(NumberSetting on: class aspect: #numberEntriesPerServer) label: #HttpNumberEntriesPerServer<< #net >> 'Max cookies per host'; default: class defaultNumberEntriesPerServer; helpText: #HttpNumberEntriesPerServerHelpText << #net >> 'Specifies the maximum number of cookies per unique host stored in the registry.'; yourself
c6NumberBytesPerCookie <setting: #(net http httpCookie numberBytesPerCookie )> | class | #{Net.CookieAgent} ifDefinedDo: [:val | class := val] elseDo: [^nil]. ^(NumberSetting on: class aspect: #numberBytesPerCookie) label: #HttpNumberBytesPerCookie << #net >> 'Max bytes per cookie'; default: class defaultNumberBytesPerCookie; helpText: #HttpNumberBytesPerCookieHelpText << #net >> 'Specifies the maximum size of cookies in bytes.'; yourself
</methods> <methods> Tools.VisualWorksSettings class <category>settings-netClient</category>
ftp1AnonymousLoginPassword <setting: #(net ftp anonymousLoginPassword)> | class | #{Net.FTPClient } ifDefinedDo: [ :val | class := val ] elseDo: [^nil]. ^(StringSetting on: Net.Settings aspect: #ftpAnonymousLoginPassword ) default: String new; label: #AnonymousLoginPassword << #net >> 'Anonymous login password'; helpText: #AnonymousLoginPasswordHelpText << #net >> 'Specifies the email address to be used as the password for anonymous FTP connections. Anonymous FTP sites typically accept "anonymous" as the user name and an email address as the password.'; yourself
ftp2UsePassiveMode <setting: #(net ftp usePassiveMode)> | class | #{Net.FTPClient } ifDefinedDo: [ :val | class := val ] elseDo: [^nil]. ^(BooleanSetting on: Net.Settings aspect: #ftpPassiveMode ) default: Net.Settings ftpPassiveMode; label: #UsePassiveMode << #net >> 'Use passive mode'; helpText: #UsePassiveModeHelpText << #net >> 'If checked, it causes the server to use passive mode for transactions. This means that the server listens for the client to make the connection instead of initiating it. This is often necessary for clients located behind a firewall.'; yourself
</methods> <methods> Tools.VisualWorksSettings class <category>pages</category>
ftpPage <settingsPage: #(net ftp)> #{Net.FTPClient} isDefined ifFalse: [ ^nil]. ^ModularSettingsPage new label: #FTP << #labels >> 'FTP'; icon: (ListIconLibrary visualFor: #net); settings: (self settingsWithPrefix: #(net ftp )); yourself
</methods> <methods> Tools.VisualWorksSettings class <category>settings-http</category>
http1KeepAlive <setting: #(net http keepAlive)> | class | #{Net.Settings } ifDefinedDo: [ :val | class := val ] elseDo: [^nil]. ^(BooleanSetting on: class aspect: #httpKeepAlive ) label: #keepAliveConnection << #net >> 'Use persistent connections'; default: class httpKeepAliveDefault; helpText: #keepAliveHelpText << #net >> 'Persistent connection allows the client to reuse the same connection for several requests. Non-persistent connections close after each request. This setting controls the Connection: header field.'; yourself
http2Redirect <setting: #(net http redirect)> | class | #{Net.Settings } ifDefinedDo: [ :val | class := val ] elseDo: [^nil]. ^(BooleanSetting on: class aspect: #httpRedirectRequest ) label: #redirectRequest << #net >> 'Automatically redirect requests'; default: class httpRedirectRequestDefault; helpText: #redirectHelpText << #net >> 'This settings controls handling of the HttpMovedError (301 and 302 response status codes) . There are a few scenarios: a. An application does not have http error handling - in this case the http client uses its default error handling for the HttpMovedError and sends a new request to the new location specified in the server reply. b. An application has http error handling and this option is unchecked - the http client passes the HttpMovedError exception to the application. c. An application has http error handling and this option is checked - the http clients uses its default error handling for the HttpMovedError exception.'; yourself
http3NTLMDomain <setting: #(net http #ntlmDomain)> | class | #{Net.Settings } ifDefinedDo: [ :val | class := val ] elseDo: [^nil]. ^(StringSetting on: class aspect: #httpDomain ) label: #ntlmDomain << #net >> 'NTLM Domain'; default: class httpDomainDefaultValue; helpText: #ntlmDomainHelpText << #net >> 'The name of the default NTLM domain for NTLM authentication. User credentials being authenticated must belong to users from this domain. Correct domain name must be specified otherwise NTLM authentication will fail. The default value will be taken from a system evironment variable ''USERDOMAIN'', if it is present.'; yourself
</methods> <methods> Tools.VisualWorksSettings class <category>pages</category>
httpCookiePage <settingsPage: #(net http httpCookie)> #{Net.CookieAgent} isDefined ifFalse: [^nil]. ^(ModularSettingsPage new) label: #HTTPCookies << #net >> 'Cookies'; icon: (ListIconLibrary visualFor: #net); settings: (self settingsWithPrefix: #(#net http #httpCookie)); yourself
httpMessageParsingPage <settingsPage: #(net http messageParsing)> #{Net.HttpBuildHandler} isDefined ifFalse: [ ^nil]. ^ModularSettingsPage new label: #MessageParsing << #labels >> 'Message Parsing'; icon: (ListIconLibrary visualFor: #net); settings: (self settingsWithPrefix: #(net http messageParsing)); yourself
httpMessageWritingPage <settingsPage: #(net http messageWriting)> #{Net.HttpWriteHandler} isDefined ifFalse: [ ^nil]. ^ModularSettingsPage new label: #MessageWriting << #labels >> 'Message Writing'; icon: (ListIconLibrary visualFor: #net); settings: (self settingsWithPrefix: #(net http messageWriting)); yourself
httpPage <settingsPage: #(net http)> #{Net.HttpClient} isDefined ifFalse: [ ^nil]. ^ModularSettingsPage new label: #HttpSettings << #labels >> 'HTTP'; icon: (ListIconLibrary visualFor: #net); settings: (self settingsWithPrefix: #(net http )); yourself
</methods> <methods> Tools.VisualWorksSettings class <category>settings-http</category>
httpParse1DecodeContent <setting: #(net http messageParsing decodeContent)> | class | #{Net.HttpBuildHandler } ifDefinedDo: [ :val | class := val ] elseDo: [^nil]. ^(BooleanSetting on: class aspect: #decodeContents ) label: #decodeContents << #net >> 'Decode messages (content-type encoding)'; default: class decodeContentsValue; helpText: #decodeContentHelpText << #net >> 'Specifies whether to decode http message bodies into text using the charset specificied by the content-type header field. If this settings is turned off the body contents will contain raw bytes.'; yourself
httpParse2RemoveContentEncoding <setting: #(net http messageParsing removeContentEncoding)> | class | #{Net.HttpBuildHandler } ifDefinedDo: [ :val | class := val ] elseDo: [^nil]. ^(BooleanSetting on: class aspect: #decompressContents ) label: #decompressContents << #net >> 'Decompress messages (content-encoding gzip)'; default: class defaultDecompressContents; helpText: #removeContentEncodingHelpText << #net >> 'Specifies whether to decompress http message body if it has the "content-encoding: gzip" header field. If this setting is turned off the body will contain raw compressed bytes (if it is compressed)'; yourself
httpParse3SaveAttachmentAsFile <setting: #(net http messageParsing saveAttachmentAsFile)> | class | #{Net.HttpBuildHandler } ifDefinedDo: [ :val | class := val ] elseDo: [^nil]. ^(BooleanSetting on: class aspect: #saveAttachmentsAsFiles ) label: #SaveAttachmentAsFileValue << #net >> 'Save attachments as files'; default: class saveAttachmentsAsFilesValue; helpText: #saveAttachmentAsFileValueHelpText << #net >> 'Specifies whether to save attachments into files. This settings allows to process large attachments more efficiently. If this settings is turned off attachments will be reconstructed entirely in memory.'; yourself
httpParse4UploadDirectory <setting: #(net http messageParsing uploadDirectory)> | class | #{Net.HttpBuildHandler } ifDefinedDo: [ :val | class := val ] elseDo: [^nil]. ^(StringSetting on: class aspect: #defaultAttachmentDirectory ) label: #defaultAttachmentDirectory << #net >> 'Save attachments in'; default: class defaultAttachmentDirectoryValue; helpText: #defaultUploadDirectoryHelpText << #net >> 'This setting specifies the directory that will be used to save file attachments.' yourself
httpParse5ParameterValueEncoding <setting: #(net http messageParsing parameterValueEncoding)> | class | #{Net.HttpBuildHandler } ifDefinedDo: [ :val | class := val ] elseDo: [^nil]. ^(StringSetting on: Net.ValueWithParams aspect: #defaultParameterValueEncoding ) label: #defaultParameterValueEncoding << #net >> 'Decode header parameters with:'; default: Net.ValueWithParams defaultParameterValueEncodingValue; helpText: #defaultParameterValueEncodingHelpText << #net >> 'If set, the specified encoding will be applied if we encounter non-ascii characters in header field parameter values (technically this is against the MIME specification, but seems to be a widespread practice, e.g. many web browsers do that with filenames of uploaded files)' yourself
</methods> <methods> Tools.VisualWorksSettings class <category>pages</category>
httpProxyPage <settingsPage: #(net http httpProxy)> #{Net.HttpClient} isDefined ifFalse: [ ^nil]. ^Net.HttpProxyPage new label: #HttpProxyServer << #labels >> 'Proxy Server'; icon: (ListIconLibrary visualFor: #net); yourself
httpServersCacheCookiesFrom <settingsPage: #(net http httpCookie serversCacheCookiesFrom)> | class | #{Net.CookieAgent} ifDefinedDo: [:val | class := val] elseDo: [^nil]. ^(SequenceSettingPage new) label: #CookieServers << #labels >> 'Cookie Servers'; icon: (ListIconLibrary visualFor: #net); listHolder: class serversCacheCookiesFrom asValue displayBlock: [:value | value] acceptBlock: [:value | value]; helpText: #HttpServersCacheCookiesFromHelpText << #net >> 'Specifies list of servers to cache cookies from. Empty list means to store cookies from all servers'; yourself
</methods> <methods> Tools.VisualWorksSettings class <category>settings-http</category>
httpWrite1ChunkSize <setting: #(net http messageWriting chunkSize)> | class | #{Net.ChunkedWriteStream } ifDefinedDo: [ :val | class := val ] elseDo: [^nil]. ^(NumberSetting on: class aspect: #defaultWriteLimit) label: #HttpChunkSize<< #net >> 'Default chunk size'; default: class defaultWriteLimitValue; helpText: #HttpChunkSizeHelpText << #net >> 'If an http message body shorter than the specified chunk size it it will be sent as it is and the message header will include the content-length header field with corresponding byte size value. If the body is longer than that the body will be written out in chunked format and the header will include transfer-encoding field with value ''chunked'' instead of the content-length field.'; yourself
httpWrite2UseGZipTransfer <setting: #(net http messageWriting useGZipTransfer)> | class | #{Net.HttpWriteHandler} ifDefinedDo: [ :val | class := val ] elseDo: [^nil]. ^(BooleanSetting on: class aspect: #useGZipTransfer) label: #UseGZipTransfer<< #net >> 'Compress messages (transfer-encoding: gzip)'; default: class useGZipTransferValue; helpText: #UseGZipTransferHelpText << #net >> 'Specifies whether to apply gzip compression to outgoing messages. If this option is checked the messages will be sent compressed with header field Transfer-Encoding: gzip.'; yourself
</methods> <methods> Tools.VisualWorksSettings class <category>settings-netClient</category>
mail1DefaultContentDisposition <setting: #(net mail defaultContentDisposition)> | class | #{Net.ContentDispositionField } ifDefinedDo: [ :val | class := val ] elseDo: [^nil]. ^((EnumerationSetting choices: #(attachment inline) labels: (Array with: (#attachment << #net >> 'attachment') with: (#inline << #net >> 'inline') )) on: class aspect: #defaultContentDisposition ) default: class defaultContentDispositionValue; label: #defaultContentDisposition << #net >> 'Default content disposition type'; helpText: #defaultContentDispositionHelpText << #net >> 'Specifies the default disposition type for bodyparts in multipart mail messages. A bodypart should be marked "inline" if it is intended to be displayed along with the message. Body parts can be designated "attachment" to indicate that they are separate from the main body of the message'; yourself
mail2DefaultCharsetEncoder <setting: #(net mail defaultCharsetEncoder)> | class | #{Net.SimpleBody } ifDefinedDo: [ :val | class := val ] elseDo: [^nil]. ^(StringSetting on: class aspect: #defaultCharsetEncoder ) label: #defaultCharsetEncoder << #net >> 'Default content encoding'; default: class defaultCharsetEncoderValue; helpText: #defaultCharsetEncoderHelpText << #net >> 'This is the default encoding used for a message body when an encoding is not specified by the message.'; yourself
mail3RemoveContentTransferEncoding <setting: #(net mail removeContentTransferEncoding)> | class | #{Net.MailBuildHandler} ifDefinedDo: [ :val | class := val ] elseDo: [^nil]. ^(BooleanSetting on: class aspect: #removeContentTransferEncoding ) default: class removeContentTransferEncodingValue; label: #removeContentTransferEncoding << #net >> 'Remove transfer encoding from messages'; helpText: #removeContentTransferEncodingrHelpText << #net >> 'Specifies whether to automatically remove transfer encoding (quoted-printable, or base-64, etc) along with the corresponding Content-Transfer-Encoding field while parsing mail messages.'; yourself
mail4SaveAttachmentAsFile <setting: #(net mail saveAttachmentAsFile)> | class | #{Net.MimeBuildHandler} ifDefinedDo: [ :val | class := val ] elseDo: [^nil]. ^(BooleanSetting on: class aspect: #saveAttachmentsAsFiles ) label: #SaveAttachmentAsFileValue << #net >> 'Save attachments as files'; default: class saveAttachmentsAsFilesValue; helpText: #saveAttachmentAsFileValueHelpText << #net >> 'Specifies whether to save attachments into files. This settings allows to process large attachments more efficiently. If this settings is turned off attachments will be reconstructed entirely in memory.'; yourself
mail5UploadDirectory <setting: #(net mail uploadDirectory)> | class | #{Net.MimeBuildHandler} ifDefinedDo: [ :val | class := val ] elseDo: [^nil]. ^(StringSetting on: class aspect: #defaultAttachmentDirectory ) label: #defaultAttachmentDirectory << #net >> 'Save attachments in'; default: class defaultAttachmentDirectoryValue; helpText: #defaultUploadDirectoryHelpText << #net >> 'This setting specifies the directory that will be used to save file attachments.' yourself
</methods> <methods> Tools.VisualWorksSettings class <category>pages</category>
mailMessagePage <settingsPage: #(net mail)> #{Net.MimeEntity} isDefined ifFalse: [ ^nil]. ^ModularSettingsPage new label: #Mail << #net >> 'Mail'; icon: (ListIconLibrary visualFor: #net); settings: (self settingsWithPrefix: #(net mail )); yourself
mailServerPage <settingsPage: #(net mail mailServers)> (#{Net.IMAPClient} isDefined or: [#{POP3Client} isDefined or: [#{SMTPClient} isDefined]] ) ifFalse: [ ^nil]. ^Net.MailServerPage new label: #MailServers << #labels >> 'Mail Servers'; icon: (ListIconLibrary visualFor: #net); yourself
</methods> <methods> Tools.VisualWorksSettings class <category>settings-netClient</category>
netClient1DefaultTimeout <setting: #(net defaultTimeout)> ^(NumberSetting on: Net.NetClient aspect: #defaultTimeout) label: #DefaultTimeout<< #net >> 'Default timeout (ms)'; default: Net.NetClient defaultTimeoutValue; helpText: #NetDefaultTimeoutHelpText << #net >> 'This is the number of milliseconds to wait for an issued command to complete before signaling an error.'; yourself
netClient2DefaultRetries <setting: #(net defaultRetries)> ^(NumberSetting on: Net.NetClient aspect: #defaultRetries) label: #DefaultRetries<< #net >> 'Default retries'; default: Net.NetClient defaultRetriesValue; helpText: #NetDefaultRetriesHelpText << #net >> 'This is the number of attempts to connect to the server before giving up.'; yourself
netClient3DefaultDelaySeconds <setting: #(net defaultDelaySeconds)> ^(NumberSetting on: Net.NetClient aspect: #defaultDelaySeconds) label: #DefaultDelaySeconds << #net >> 'Default retry delay (s)'; default: Net.NetClient defaultDelaySecondsValue; helpText: #NetDefaultDelaySecondsHelpText << #net >> 'This is the number of seconds to wait between retries.'; yourself
</methods> <methods> Tools.VisualWorksSettings class <category>pages</category>
netClientPage <settingsPage: #(net )> ^ModularSettingsPage new label: #NetClient << #net >> 'Net Client'; icon: (ListIconLibrary visualFor: #net); settings: (self settingsWithPrefix: #(net )); yourself
</methods> <methods> Tools.VisualWorksSettings class <category>settings-netClient</category>
smtp1UseAuthentication <setting: #(net mail useAuthentication)> | class | #{Net.SMTPClient } ifDefinedDo: [ :val | class := val ] elseDo: [^nil]. ^(BooleanSetting on: class aspect: #useAuthentication ) default: class useAuthenticationValue; label: #useAuthenticationToConnectToSMTPServer << #net >> 'Use authentication for SMTP'; helpText: #useAuthenticationToConnectToSMTPServerHelpText << #net >> 'Specifies whether to use authentication while connecting to SMTP servers. With authentication the client sends EHLO and AUTH commands depending on the authentication schemes supported by the server. Without authentication the client will use simpler (unauthenticated) HELO command to start a session with the server. Many ISPs require authenticated SMTP sessions.'; yourself
</methods> <methods> Tools.VisualWorksSettings class <category>pages</category>
userIdentityPage <settingsPage: #(net userIdentities )> ^Net.UserPage new label: #UserIdentities << #labels >> 'User Identities'; icon: (ListIconLibrary visualFor: #net); yourself
</methods> <initialize> Net.NetSettingsPage </initialize> "Imported Classes:" self error: 'Attempting to file-in parcel imports. Choose terminate or close' <class> <name>Object</name> <environment>Core</environment> <super></super> <private>false</private> none <imports></imports> <category>Kernel-Objects</category> <attributes> <package>Kernel-Objects</package> </attributes> </class> <class> <name>Collection</name> <environment>Core</environment> <super>Core.Object</super> <private>false</private> none <imports></imports> <category>Collections-Abstract</category> <attributes> <package>Collections-Abstract</package> </attributes> </class> <class> <name>String</name> <environment>Core</environment> <super>Core.CharacterArray</super> <private>false</private> none <imports></imports> <category>Collections-Text</category> <attributes> <package>Collections-Text</package> </attributes> </class> <class> <name>Symbol</name> <environment>Core</environment> <super>Core.String</super> <private>false</private> none <imports></imports> <category>Collections-Text</category> <attributes> <package>Collections-Text</package> </attributes> </class> <class> <name>HostSpec</name> <environment>Net</environment> <super>Core.Object</super> <private>false</private> none name netUser type port <imports></imports> <category>Net-Clients</category> <attributes> <package>NetClientBase</package> </attributes> </class> <class> <name>NetUser</name> <environment>Net</environment> <super>Core.Object</super> <private>false</private> none username password fullName account savePassword mailAddress <imports></imports> <category>Net-Clients</category> <attributes> <package>NetClientBase</package> </attributes> </class> <class> <name>NetClient</name> <environment>Net</environment> <super>Core.Object</super> <private>false</private> none user hostName portNumber clientPI retries timeout delaySeconds state defaultProtocolInterpreterClass <imports></imports> <category>Net-Clients</category> <attributes> <package>NetClientBase</package> </attributes> </class> <class> <name>ApplicationModel</name> <environment>UI</environment> <super>UI.Model</super> <private>false</private> none builder uiSession eventHandlers savedWindowInformation <imports></imports> <category>UIBuilder-Framework</category> <attributes> <package>UIBuilder-Framework</package> </attributes> </class> <class> <name>SettingsManagerPage</name> <environment>Tools</environment> <super>UI.ApplicationModel</super> <private>false</private> none manager id position label icon children definingMethod <imports></imports> <category>Tools-Settings-UI</category> <attributes> <package>Tools-Settings</package> </attributes> </class> <class> <name>Dictionary</name> <environment>Core</environment> <super>Core.Set</super> <private>false</private> objects <imports></imports> <category>Collections-Unordered</category> <attributes> <package>Collections-Unordered</package> </attributes> </class> <class> <name>Text</name> <environment>XML</environment> <super>XML.Node</super> <private>false</private> none text stripped <imports></imports> <category>XML-Nodes</category> <attributes> <package>XML</package> </attributes> </class> <class> <name>Element</name> <environment>XML</environment> <super>XML.Node</super> <private>false</private> none tag attributes namespaces elements definition <imports></imports> <category>XML-Nodes</category> <attributes> <package>XML</package> </attributes> </class> <class> <name>GenericSettingDescriptor</name> <environment>Tools</environment> <super>UI.Model</super> <private>false</private> none id position definingMethod <imports> XML.Element XML.Attribute </imports> <category>Tools-Settings</category> <attributes> <package>Tools-Settings</package> </attributes> </class> <class> <name>SimpleDialog</name> <environment>UI</environment> <super>UI.ApplicationModel</super> <private>false</private> none close accept cancel preBuildBlock postBuildBlock postOpenBlock escapeIsCancel parentView <imports></imports> <category>Interface-Dialogs</category> <attributes> <package>Interface-Dialogs</package> </attributes> </class>